📄 membereditshell.java
字号:
// 修改名称
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 + -