|
|
package com.connor.lidy.task.util;
|
|
|
|
|
|
import java.awt.BorderLayout;
|
|
|
import java.awt.Color;
|
|
|
import java.awt.Component;
|
|
|
import java.awt.Cursor;
|
|
|
import java.awt.Dimension;
|
|
|
import java.awt.FlowLayout;
|
|
|
import java.awt.event.ActionEvent;
|
|
|
import java.awt.event.ActionListener;
|
|
|
import java.awt.event.MouseAdapter;
|
|
|
import java.awt.event.MouseEvent;
|
|
|
import java.util.List;
|
|
|
import javax.swing.DefaultListModel;
|
|
|
import javax.swing.ImageIcon;
|
|
|
import javax.swing.JButton;
|
|
|
import javax.swing.JLabel;
|
|
|
import javax.swing.JList;
|
|
|
import javax.swing.JPanel;
|
|
|
import javax.swing.JScrollPane;
|
|
|
import javax.swing.JTable;
|
|
|
import javax.swing.JTextField;
|
|
|
import javax.swing.JTree;
|
|
|
import javax.swing.ListCellRenderer;
|
|
|
import javax.swing.ListSelectionModel;
|
|
|
import javax.swing.tree.DefaultMutableTreeNode;
|
|
|
|
|
|
import com.teamcenter.rac.aif.AbstractAIFDialog;
|
|
|
import com.teamcenter.rac.aif.common.AIFTreeNode;
|
|
|
import com.teamcenter.rac.aifrcp.AIFUtility;
|
|
|
import com.teamcenter.rac.common.organization.OrgTreePanel;
|
|
|
import com.teamcenter.rac.common.organization.OrganizationTree;
|
|
|
import com.teamcenter.rac.kernel.TCComponent;
|
|
|
import com.teamcenter.rac.kernel.TCComponentGroupMember;
|
|
|
import com.teamcenter.rac.kernel.TCComponentProject;
|
|
|
import com.teamcenter.rac.kernel.TCComponentUser;
|
|
|
import com.teamcenter.rac.kernel.TCSession;
|
|
|
import com.teamcenter.rac.util.MessageBox;
|
|
|
import com.teamcenter.rac.util.PropertyLayout;
|
|
|
|
|
|
@SuppressWarnings("serial")
|
|
|
public class SelectUserDialog extends AbstractAIFDialog {
|
|
|
|
|
|
private JButton b_ok;
|
|
|
private JButton b_cel;
|
|
|
private JButton add;
|
|
|
private JButton remove;
|
|
|
private OrganizationTree tree;
|
|
|
private JTree projectTree;
|
|
|
private JList<String> l_user;
|
|
|
private DefaultListModel<String> lm_user;
|
|
|
private JTextField editPropMap;
|
|
|
private String group;
|
|
|
private boolean isMulti;
|
|
|
private JTable table;
|
|
|
private int[] colIndex;
|
|
|
private int rowIndex;
|
|
|
private TCComponentProject project;
|
|
|
|
|
|
public SelectUserDialog(JTextField editPropMap, boolean isMulti) throws Exception {
|
|
|
super(true);
|
|
|
this.editPropMap = editPropMap;
|
|
|
this.isMulti = isMulti;
|
|
|
initUI();
|
|
|
}
|
|
|
|
|
|
private String getValue() {
|
|
|
String val = "";
|
|
|
if (editPropMap != null) {
|
|
|
val = editPropMap.getText();
|
|
|
} else if (table != null) {
|
|
|
val = (String) table.getValueAt(rowIndex, colIndex[0]);
|
|
|
}
|
|
|
return val;
|
|
|
}
|
|
|
|
|
|
private void setValue(String text) {
|
|
|
if (editPropMap != null) {
|
|
|
editPropMap.setText(text);
|
|
|
} else if (table != null) {
|
|
|
table.setValueAt(text, rowIndex, colIndex[0]);
|
|
|
if (colIndex.length>1)
|
|
|
table.setValueAt(group, rowIndex, colIndex[1]);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
public SelectUserDialog(JTable table, boolean isMulti, int[] colIndex, int rowIndex, TCComponentProject projectID) throws Exception {
|
|
|
super(true);
|
|
|
this.table = table;
|
|
|
this.isMulti = isMulti;
|
|
|
this.colIndex = colIndex;
|
|
|
this.rowIndex = rowIndex;
|
|
|
this.project = projectID;
|
|
|
initUI();
|
|
|
}
|
|
|
|
|
|
private void initUI() throws Exception {
|
|
|
this.setTitle("ѡ<><D1A1><EFBFBD><EFBFBD>Ա");
|
|
|
this.setLayout(new BorderLayout());
|
|
|
int pweight = 440, pheight = 480, mweight = 280, mheight = 320;
|
|
|
if (isMulti) {
|
|
|
// this.setPreferredSize(new Dimension(640, 480));
|
|
|
// this.setMinimumSize(new Dimension(480, 320));
|
|
|
pweight = 640;
|
|
|
mweight = 480;
|
|
|
}
|
|
|
if(project != null) {
|
|
|
pheight = 700;
|
|
|
mheight = 700;
|
|
|
}
|
|
|
this.setPreferredSize(new Dimension(pweight, pheight));
|
|
|
this.setMinimumSize(new Dimension(mweight, mheight));
|
|
|
OrgTreePanel orgPanel = new OrgTreePanel((TCSession) AIFUtility.getCurrentApplication().getSession());
|
|
|
this.tree = orgPanel.getOrgTree();
|
|
|
|
|
|
if(project != null) {
|
|
|
JPanel panel = new JPanel(new PropertyLayout());
|
|
|
panel.add("1.1.center.center", orgPanel);
|
|
|
panel.add("2.1.center.center", initProjectPanel(orgPanel));
|
|
|
// FlowLayout flow = new FlowLayout();
|
|
|
// flow.setAlignOnBaseline(true);
|
|
|
// JPanel panel = new JPanel(flow);
|
|
|
// panel.add(orgPanel);
|
|
|
// panel.add(initProjectPanel(orgPanel));
|
|
|
this.add(BorderLayout.WEST, panel);
|
|
|
}else {
|
|
|
this.add(BorderLayout.CENTER, orgPanel);
|
|
|
}
|
|
|
this.add(BorderLayout.SOUTH, initBtnPanel());
|
|
|
if (isMulti) {
|
|
|
JPanel lp = initListPanel();
|
|
|
this.add(BorderLayout.EAST, lp);
|
|
|
initData();
|
|
|
}
|
|
|
addListeners();
|
|
|
}
|
|
|
|
|
|
private void initData() {
|
|
|
String text = getValue();
|
|
|
if (text.isEmpty()) {
|
|
|
return;
|
|
|
}
|
|
|
String[] split = text.split(",");
|
|
|
for (int i = 0; i < split.length; i++) {
|
|
|
lm_user.addElement(split[i]);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
private JPanel initListPanel() {
|
|
|
JPanel panel = new JPanel(new BorderLayout());
|
|
|
FlowLayout flow = new FlowLayout();
|
|
|
flow.setVgap(100);
|
|
|
JPanel btnPanel = new JPanel(flow);
|
|
|
btnPanel.add(this.add);
|
|
|
// btnPanel.add("2.1.center.center", this.remove);
|
|
|
this.lm_user = new DefaultListModel<>();
|
|
|
this.l_user = new JList<>(lm_user);
|
|
|
l_user.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
|
|
|
this.l_user.setCellRenderer(new DeleteListRenderer(l_user));
|
|
|
JScrollPane scroll = new JScrollPane(l_user);
|
|
|
scroll.setPreferredSize(new Dimension(200, 0));
|
|
|
// this.add.setPreferredSize(new Dimension(50, 30));
|
|
|
panel.add(BorderLayout.WEST, btnPanel);
|
|
|
panel.add(BorderLayout.CENTER, scroll);
|
|
|
return panel;
|
|
|
}
|
|
|
|
|
|
private JPanel initBtnPanel() {
|
|
|
JPanel panel = new JPanel(new FlowLayout(FlowLayout.CENTER, 15, 5));
|
|
|
this.b_ok = new JButton("ȷ<><C8B7>");
|
|
|
this.b_cel = new JButton("ȡ<><C8A1>");
|
|
|
this.add = new JButton("+");
|
|
|
this.remove = new JButton("-");
|
|
|
panel.add(b_ok);
|
|
|
panel.add(b_cel);
|
|
|
return panel;
|
|
|
}
|
|
|
|
|
|
private JScrollPane initProjectPanel(OrgTreePanel orgPanel) throws Exception {//TODO
|
|
|
Dimension orgDimension = orgPanel.getPreferredSize();
|
|
|
orgPanel.setPreferredSize(new Dimension(orgDimension.width*2, orgDimension.height-100));
|
|
|
DefaultMutableTreeNode root = new DefaultMutableTreeNode(project.getProjectID(), true);
|
|
|
projectTree = new JTree(root);
|
|
|
|
|
|
List<Object> team = project.getTeam();
|
|
|
TCComponent[] members = (TCComponent[])team.get(0);
|
|
|
for(TCComponent c : members) {
|
|
|
if(c instanceof TCComponentGroupMember) {
|
|
|
TCComponentGroupMember member = (TCComponentGroupMember)c;
|
|
|
DefaultMutableTreeNode childRoot = new DefaultMutableTreeNode(member, true);
|
|
|
root.add(childRoot);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
projectTree.setPreferredSize(new Dimension(orgDimension.width*2, orgDimension.height/2));
|
|
|
// projectTree.setMaximumSize(new Dimension(orgDimension.width*2, orgDimension.height/2));
|
|
|
JScrollPane projectPane = new JScrollPane(projectTree);
|
|
|
return projectPane;
|
|
|
}
|
|
|
|
|
|
private String getSelectUser() throws Exception {
|
|
|
// Object[] comps = tree.getSelectedOrgObjects();
|
|
|
AIFTreeNode[] comps = tree.getSelectedNodes();
|
|
|
// System.out.println("comps:"+(comps==null));
|
|
|
if (comps == null) {
|
|
|
if(projectTree == null)
|
|
|
return null;
|
|
|
else if(projectTree.getSelectionModel() == null)
|
|
|
return null;
|
|
|
else if(projectTree.getLastSelectedPathComponent() == null)
|
|
|
return null;
|
|
|
DefaultMutableTreeNode selectNode = (DefaultMutableTreeNode) projectTree.getLastSelectedPathComponent();
|
|
|
Object selectObject = selectNode.getUserObject();
|
|
|
if(selectObject instanceof TCComponentGroupMember) {
|
|
|
String member = ((TCComponentGroupMember) selectObject).toString();
|
|
|
if(member.indexOf(".")>0)
|
|
|
group = member.substring(0, member.indexOf("."));
|
|
|
else
|
|
|
group = member.substring(0, member.indexOf("/"));
|
|
|
TCComponentUser user = ((TCComponentGroupMember) selectObject).getUser();
|
|
|
if (user != null) {
|
|
|
return user.getProperty("user_name");
|
|
|
}
|
|
|
}else
|
|
|
return null;
|
|
|
}
|
|
|
// System.out.println("comps:"+comps.length);
|
|
|
for (int i = 0; i < comps.length; i++) {
|
|
|
// OrgObject comp = (OrgObject) comps[i];
|
|
|
TCComponent gm = (TCComponent) comps[i].getContextComponent().getComponent();
|
|
|
// System.out.println("gm:"+gm);
|
|
|
if (gm != null && (gm instanceof TCComponentGroupMember)) {
|
|
|
TCComponentUser user = ((TCComponentGroupMember) gm).getUser();
|
|
|
if (user != null) {
|
|
|
group = ((DefaultMutableTreeNode)comps[i].getParent().getParent()).getUserObject().toString();
|
|
|
return user.getProperty("user_name");
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
private void addListeners() {
|
|
|
this.b_cel.addActionListener(new ActionListener() {
|
|
|
@Override
|
|
|
public void actionPerformed(ActionEvent e) {
|
|
|
disposeDialog();
|
|
|
}
|
|
|
});
|
|
|
this.b_ok.addActionListener(new ActionListener() {
|
|
|
@Override
|
|
|
public void actionPerformed(ActionEvent e) {
|
|
|
try {
|
|
|
if (isMulti) {
|
|
|
int size = lm_user.getSize();
|
|
|
StringBuilder sb = new StringBuilder();
|
|
|
for (int i = 0; i < size; i++) {
|
|
|
String text = lm_user.getElementAt(i);
|
|
|
if (text != null) {
|
|
|
sb.append(text).append(";");
|
|
|
}
|
|
|
}
|
|
|
if (sb.length() > 0) {
|
|
|
sb.setLength(sb.length() - 1);
|
|
|
}
|
|
|
setValue(sb.toString());
|
|
|
} else {
|
|
|
String user = getSelectUser();
|
|
|
if (user != null) {
|
|
|
setValue(user);
|
|
|
} else {
|
|
|
setValue("");
|
|
|
}
|
|
|
}
|
|
|
disposeDialog();
|
|
|
} catch (Exception e1) {
|
|
|
e1.printStackTrace();
|
|
|
MessageBox.post("Error:"+e1.getMessage(), "ERROR", MessageBox.ERROR);
|
|
|
}
|
|
|
}
|
|
|
});
|
|
|
|
|
|
tree.addMouseListener(new MouseAdapter() {
|
|
|
@Override
|
|
|
public void mouseClicked(MouseEvent e) {
|
|
|
try {
|
|
|
super.mouseClicked(e);
|
|
|
if(projectTree != null)
|
|
|
projectTree.clearSelection();
|
|
|
if (e.getButton() == MouseEvent.BUTTON1 && e.getClickCount() == 2) {
|
|
|
String user = getSelectUser();
|
|
|
System.out.println("user:"+user);
|
|
|
if (user != null) {
|
|
|
if (isMulti) {
|
|
|
if (!lm_user.contains(user.toString())) {
|
|
|
lm_user.addElement(user.toString());
|
|
|
}
|
|
|
} else {
|
|
|
setValue(user.toString());
|
|
|
disposeDialog();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
} catch (Exception e1) {
|
|
|
e1.printStackTrace();
|
|
|
MessageBox.post("Error:"+e1.getMessage(), "ERROR", MessageBox.ERROR);
|
|
|
}
|
|
|
}
|
|
|
});
|
|
|
if(projectTree != null) {
|
|
|
projectTree.addMouseListener(new MouseAdapter() {
|
|
|
@Override
|
|
|
public void mouseClicked(MouseEvent e) {
|
|
|
try {
|
|
|
super.mouseClicked(e);
|
|
|
tree.clearSelection();
|
|
|
if (e.getButton() == MouseEvent.BUTTON1 && e.getClickCount() == 2) {
|
|
|
String user = getSelectUser();
|
|
|
if (user != null) {
|
|
|
if (isMulti) {
|
|
|
if (!lm_user.contains(user.toString())) {
|
|
|
lm_user.addElement(user.toString());
|
|
|
}
|
|
|
} else {
|
|
|
setValue(user.toString());
|
|
|
disposeDialog();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
} catch (Exception e1) {
|
|
|
e1.printStackTrace();
|
|
|
MessageBox.post("Error:"+e1.getMessage(), "ERROR", MessageBox.ERROR);
|
|
|
}
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
this.l_user.addMouseListener(new MouseAdapter() {
|
|
|
|
|
|
@Override
|
|
|
public void mouseClicked(MouseEvent e) {
|
|
|
super.mouseClicked(e);
|
|
|
int ind = l_user.getSelectedIndex();
|
|
|
if (ind >= 0) {
|
|
|
lm_user.remove(ind);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public void mouseEntered(MouseEvent e) {
|
|
|
super.mouseEntered(e);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public void mouseExited(MouseEvent e) {
|
|
|
super.mouseExited(e);
|
|
|
}
|
|
|
|
|
|
});
|
|
|
this.add.addActionListener(new ActionListener() {
|
|
|
@Override
|
|
|
public void actionPerformed(ActionEvent e) {
|
|
|
try {
|
|
|
String user = getSelectUser();
|
|
|
System.out.println("user:"+user);
|
|
|
if (user != null) {
|
|
|
if (!lm_user.contains(user.toString())) {
|
|
|
lm_user.addElement(user.toString());
|
|
|
}
|
|
|
}
|
|
|
} catch (Exception e1) {
|
|
|
e1.printStackTrace();
|
|
|
MessageBox.post("Error:"+e1.getMessage(), "ERROR", MessageBox.ERROR);
|
|
|
}
|
|
|
}
|
|
|
});
|
|
|
this.remove.addActionListener(new ActionListener() {
|
|
|
@Override
|
|
|
public void actionPerformed(ActionEvent e) {
|
|
|
disposeDialog();
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
private class DeleteListRenderer extends JPanel implements ListCellRenderer<String> {
|
|
|
|
|
|
JButton btn;
|
|
|
JLabel label;
|
|
|
|
|
|
public DeleteListRenderer(final JList<? extends String> list) {
|
|
|
this.setLayout(new FlowLayout(FlowLayout.LEFT, 5, 1));
|
|
|
this.setBackground(Color.WHITE);
|
|
|
btn = getDeletetBtn();
|
|
|
label = new JLabel("");
|
|
|
this.add(btn);
|
|
|
this.add(label);
|
|
|
|
|
|
btn.addActionListener(new ActionListener() {
|
|
|
|
|
|
@Override
|
|
|
public void actionPerformed(ActionEvent e) {
|
|
|
int ind = list.getSelectedIndex();
|
|
|
System.out.println(ind);
|
|
|
if (ind >= 0) {
|
|
|
list.remove(ind);
|
|
|
}
|
|
|
}
|
|
|
});
|
|
|
|
|
|
}
|
|
|
@Override
|
|
|
public Component getListCellRendererComponent(JList<? extends String> list, String value, int index,
|
|
|
boolean isSelected, boolean cellHasFocus) {
|
|
|
label.setText(value);
|
|
|
return this;
|
|
|
}
|
|
|
private JButton getDeletetBtn() {
|
|
|
ImageIcon icon = new ImageIcon(SelectUserDialog.class.getResource("image/delete.png"));
|
|
|
JButton btn = new JButton(icon);
|
|
|
btn.setPreferredSize(new Dimension(23, 23));
|
|
|
btn.setContentAreaFilled(false);
|
|
|
btn.setFocusPainted(false);
|
|
|
btn.setBorderPainted(false);
|
|
|
btn.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
|
|
|
return btn;
|
|
|
}
|
|
|
}
|
|
|
}
|