⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 membereditshell.java

📁 lumaQQ的源文件
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
    	// 修改名称
    	if(!name.equals(c.name)) {
    		modifyInfoSequence = main.getClient().modifyTempClusterInfo(c.clusterType.toQQConstant(),
    				c.clusterId, 
    				c.parentClusterId,
    				name);
    	}
    	// 添加成员    	
    	List<Integer> qqList = new ArrayList<Integer>();
    	Map<Integer, User> temp = new HashMap<Integer, User>();    	
    	temp.putAll(c.members);
    	for(User u : members) {
    		if(temp.remove(u.qq) == null)
    			qqList.add(u.qq);
    	}
    	if(qqList.size() > 0) {
    		addMemberSequence = main.getClient().modifyTempClusterMember(
    				c.clusterType.toQQConstant(), 
    				c.clusterId,
    				c.parentClusterId,
    				QQ.QQ_CLUSTER_SUB_CMD_ADD_MEMBER,
    				qqList);    		
    	}
    	// 删除成员
    	if(temp.size() > 0) {
    		qqList.clear();
    		qqList.addAll(temp.keySet());
    		removeMemberSequence = main.getClient().modifyTempClusterMember(
    				c.clusterType.toQQConstant(), 
    				c.clusterId,
    				c.parentClusterId,
    				QQ.QQ_CLUSTER_SUB_CMD_REMOVE_MEMBER,
    				qqList);
    	}
    	
    	if(isTempClusterModifySuccess())
    		shell.close();
	}

	/**
     * 创建临时群
     */
	private void createTempCluster() {
		List<Integer> temp = new ArrayList<Integer>();
		for(User u : members) 
			temp.add(u.qq);
		if(parentCluster == null || parentCluster.clusterType == ClusterType.DIALOG_CONTAINER) {
			expected = main.getClient().createTemporaryCluster(name,
					QQ.QQ_CLUSTER_TYPE_DIALOG,
					0,
					temp);
		} else {
			expected = main.getClient().createTemporaryCluster(
					name, 
					QQ.QQ_CLUSTER_TYPE_SUBJECT,
					parentCluster.clusterId,
					temp);
		}		
	}

	/**
	 * 打开shell
	 */
	public void open()	{
		// 设置窗口位置
	    Rectangle rect = display.getClientArea();
	    Point size = shell.getSize();
	    shell.setLocation((rect.width - size.x) / 2, (rect.height - size.y) / 2);
		// 打开shell
		shell.layout();
		shell.open();
		// add listener
		main.getClient().addQQListener(this);
	}

	/**
	 * 校验参数情况
	 */
	protected void validate() {
		if(name.equals("") || type == TEMP_CLUSTER && members.size() <= 1)
			btnOK.setEnabled(false);
		else
			btnOK.setEnabled(true);
	}

	/* (non-Javadoc)
	 * @see edu.tsinghua.lumaqq.events.IFriendSelectionListener#friendSelected(edu.tsinghua.lumaqq.events.FriendSelectionEvent)
	 */
	public void friendSelected(FriendSelectionEvent e) {
		for(Model m : e.getModels()) {
			User u = (User)m;
			if(type == TEMP_CLUSTER && u.qq == main.getMyModel().qq)
				continue;
			if(!members.contains(m))
				members.add(u);
		}
		viewer.refresh();
		validate();
	}

	/* (non-Javadoc)
	 * @see edu.tsinghua.lumaqq.events.IFriendSelectionListener#friendDeselected(edu.tsinghua.lumaqq.events.FriendSelectionEvent)
	 */
	public void friendDeselected(FriendSelectionEvent e) {
		for(Model m : e.getModels()) {
			User u = (User)m;
			if(type == TEMP_CLUSTER && u.qq == main.getMyModel().qq)
				continue;
			members.remove(u);
		}
		viewer.refresh();
		validate();
	}

	/**
	 * @return Returns the parentCluster.
	 */
	public Cluster getParentCluster() {
		return parentCluster;
	}

	/**
	 * @param parentCluster The parentCluster to set.
	 */
	public void setParentCluster(Cluster parentCluster) {
		this.parentCluster = parentCluster;
	}

	/**
	 * @return Returns the parentOrganization.
	 */
	public Organization getParentOrganization() {
		return parentOrganization;
	}

	/**
	 * @param parentOrganization The parentOrganization to set.
	 */
	public void setParentOrganization(Organization parentOrganization) {
		this.parentOrganization = parentOrganization;
	}

	/**
	 * @return Returns the members.
	 */
	public List<User> getMembers() {
		return members;
	}

	/**
	 * @return Returns the name.
	 */
	public String getName() {
		return name;
	}

	/**
	 * @param cluster The cluster to set.
	 */
	public void setCluster(Cluster cluster) {
		this.model = cluster;
		if(cluster != null) {
			textName.setText(cluster.name);
			members.clear();
			members.addAll(cluster.members.values());
			viewer.refresh();
			shell.setText(member_edit_title);
			if(parentCluster == null || parentCluster.clusterType == ClusterType.DIALOG_CONTAINER)
				fss.setModel(main.getBlindHelper().getFriendGroupList());
			else
				fss.setClusterModel(parentCluster);
			
			for(User u : members)
				fss.select(u);
		} else if(parentCluster == null || parentCluster.clusterType == ClusterType.DIALOG_CONTAINER) {
			shell.setText(member_edit_title_add);
			fss.setModel(main.getBlindHelper().getFriendGroupList());
		} else {
			shell.setText(member_edit_title_add);
			fss.setClusterModel(parentCluster);
		}
		validate();
	}

	/**
	 * @return
	 * 		新建的model或者被修改的model
	 */
	public Model getModel() {
		return model;
	}
	
	/**
	 * @param organization The organization to set.
	 */
	public void setOrganization(Organization organization) {
		this.model = organization;
		fss.setClusterModel(parentCluster);
		if(organization != null) {
			textName.setText(organization.name);
			members.clear();
			for(User u : organization.cluster.members.values()) {
				if(u.organizationId == organization.id)
					members.add(u);
			}
			shell.setText(member_edit_title);
			viewer.refresh();
			
			for(User u : members)
				fss.select(u);
		} else
			shell.setText(member_edit_title_add);
		
		validate();
	}
	
	/**
	 * @return
	 * 		true表示临时群信息修改完成
	 */
	private boolean isTempClusterModifySuccess() {
		return modifyInfoSequence == 0 &&
			addMemberSequence == 0 &&
			removeMemberSequence == 0;
	}
	
	/**
	 * @return
	 * 		true表示临时群信息修改完成
	 */
	private boolean isOrganizationModifySuccess() {
		return commitMemberSequence == 0 && commitOrganizationSequence == 0;
	}
	
	/**
	 * 临时群信息修改成功时调用
	 */
	private void whenTempClusterModifySuccess() {
		// 保存修改后的信息
		final Cluster c = (Cluster)model;
		c.name = name;
		c.removeAllMembers();
		for(User u : members) 
			c.addMember(u);
		// 刷新
		display.syncExec(new Runnable() {
			public void run() {
				ring.stop();
				main.getBlindHelper().refreshGroup(c.group);
				shell.close();
			}
		});
	}
	
	/**
	 * 组织信息修改成功时调用
	 */
	private void whenOrganizationModifySuccess() {
		if(model == null) {
			Organization org = new Organization();
			org.id = newOrg.id;
			org.path = newOrg.path;
			org.name = newOrg.name;
			parentCluster.addOrganization(org);
			for(User u : members) {
				User m = parentCluster.getMember(u.qq);
				if(m != null)
					m.organizationId = org.id;
			}
		} else {
			Organization org = (Organization)model;
			org.name = name;
			// 得到旧成员
			Map<Integer, User> oldMember = new HashMap<Integer, User>();
			for(User u : parentCluster.members.values()) {
				if(u.organizationId == org.id)
					oldMember.put(u.qq, u);
			}
			// 添加新成员
			for(User u : members) {
				if(oldMember.remove(u.qq) == null)
					u.organizationId = org.id;
			}
			// 添加删除的成员
			for(User u : oldMember.values())
				u.organizationId = 0;
		}
		
		// refresh ui
		display.syncExec(new Runnable() {
			public void run() {
				ring.stop();
				main.getBlindHelper().refreshGroup(parentCluster.group);
				shell.close();
			}
		});
	}

	/* (non-Javadoc)
	 * @see edu.tsinghua.lumaqq.qq.events.IQQListener#qqEvent(edu.tsinghua.lumaqq.qq.events.QQEvent)
	 */
	public void qqEvent(QQEvent e) {
		switch(e.type) {
			case QQEvent.QQ_COMMIT_ORGANIZATION_SUCCESS:
				processCommitOrganizationSuccess(e);
				break;
			case QQEvent.QQ_COMMIT_MEMBER_ORGANIZATION_SUCCESS:
				processCommitMemberOrganizationSuccess(e);
				break;
			case QQEvent.QQ_CREATE_TEMP_CLUSTER_SUCCESS:
				processCreateTempClusterSuccess(e);
				break;
			case QQEvent.QQ_MODIFY_TEMP_CLUSTER_INFO_SUCCESS:
				processModifyTempClusterInfoSuccess(e);
				break;
			case QQEvent.QQ_MODIFY_TEMP_CLUSTER_INFO_FAIL:
			case QQEvent.QQ_COMMIT_MEMBER_ORGANIZATION_FAIL:
			case QQEvent.QQ_COMMIT_ORGANIZATION_FAIL:
			case QQEvent.QQ_CREATE_TEMP_CLUSTER_FAIL:
			case QQEvent.QQ_MODIFY_TEMP_CLUSTER_MEMBER_FAIL:
				processClusterCommandFail(e);
				break;
			case QQEvent.QQ_MODIFY_TEMP_CLUSTER_MEMBER_SUCCESS:
				processModifyTempClusterMemberSuccess(e);
				break;			
		}
	}

	/**
	 * 处理提交成员结构成功事件
	 * 
	 * @param e
	 */
	private void processCommitMemberOrganizationSuccess(QQEvent e) {
		ClusterCommandReplyPacket packet = (ClusterCommandReplyPacket)e.getSource();
		if(packet.getSequence() == commitMemberSequence)
			commitMemberSequence = 0;
		
		if(isOrganizationModifySuccess())
			whenOrganizationModifySuccess();
	}

	/**
	 * 处理提交组织结构成功事件
	 * 
	 * @param e
	 */
	private void processCommitOrganizationSuccess(QQEvent e) {
		ClusterCommandReplyPacket packet = (ClusterCommandReplyPacket)e.getSource();
		if(packet.getSequence() == commitOrganizationSequence)
			commitOrganizationSequence = 0;
		
		if(isOrganizationModifySuccess())
			whenOrganizationModifySuccess();
	}

	/**
	 * 处理修改临时群成员成功事件
	 * 
	 * @param e
	 */
	private void processModifyTempClusterMemberSuccess(QQEvent e) {
		ClusterCommandReplyPacket packet = (ClusterCommandReplyPacket)e.getSource();
		if(packet.getSequence() == addMemberSequence)
			addMemberSequence = 0;
		if(packet.getSequence() == removeMemberSequence)
			removeMemberSequence = 0;
		
		if(isTempClusterModifySuccess())
			whenTempClusterModifySuccess();
	}

	/**
	 * 处理修改临时群信息成功事件
	 * 
	 * @param e
	 */
	private void processModifyTempClusterInfoSuccess(QQEvent e) {
		ClusterCommandReplyPacket packet = (ClusterCommandReplyPacket)e.getSource();
		if(packet.getSequence() == modifyInfoSequence)
			modifyInfoSequence = 0;
		
		if(isTempClusterModifySuccess())
			whenTempClusterModifySuccess();
	}

	/**
	 * 处理群命令错误事件
	 * 
	 * @param e
	 */
	private void processClusterCommandFail(QQEvent e) {
		final ClusterCommandReplyPacket packet = (ClusterCommandReplyPacket)e.getSource();
		if(packet.getSequence() == expected) {
			main.getDisplay().asyncExec(new Runnable() {
				public void run() {
				    showError(packet.errorMessage);
				    shell.close();
				}				
			});			
		}
	}

	/**
	 * 处理临时群创建成功事件
	 * 
	 * @param e
	 */
	private void processCreateTempClusterSuccess(QQEvent e) {
		final ClusterCommandReplyPacket packet = (ClusterCommandReplyPacket)e.getSource();
		if(expected == packet.getSequence()) {
			display.asyncExec(new Runnable() {
				public void run() {
					ring.stop();
					showMessage(NLS.bind(message_box_temp_cluster_created, String.valueOf(packet.clusterId)));
					shell.close();
				}
			});
		}
	}
	
	/**
	 * 显示提示框
	 * 
	 * @param msg
	 */
	private void showMessage(String msg) {
		MessageDialog.openInformation(shell, message_box_common_info_title, msg);
	}
	
	/**
	 * 显示警告框
	 * 
	 * @param msg
	 */
	private void showError(String msg) {
		MessageDialog.openError(shell, message_box_common_fail_title, msg);
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -