package jdepend.server.ui;
import java.awt.BorderLayout;
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.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import jdepend.framework.domain.PersistentBean;
import jdepend.framework.ui.component.JDependFrame;
import jdepend.framework.ui.dialog.PersistentBeanSettingDialog;
import jdepend.framework.util.BundleUtil;
import jdepend.knowledge.domainanalysis.DomainAnalysis;
import jdepend.knowledge.domainanalysis.DomainAnalysisMgr;
public final class KnowledgePanel extends JPanel {
private JDependFrame frame;
private List<DomainAnalysis> analysises;
private int currentRow;
private DefaultTableModel model;
public KnowledgePanel(final JDependFrame frame) {
this.frame = frame;
this.setLayout(new BorderLayout());
this.analysises = DomainAnalysisMgr.getIntance().getDomainAnalysises();
model = new DefaultTableModel() {
@Override
public boolean isCellEditable(int row, int column) {
return false;
}
};
JTable table = new JTable(model);
final JPopupMenu popupMenu1 = new JPopupMenu();
final JPopupMenu popupMenu2 = new JPopupMenu();
// JMenuItem viewSrcItem1 = new JMenuItem("查看源文件");
// viewSrcItem1.addActionListener(new ActionListener() {
// public void actionPerformed(ActionEvent e) {
// viewSrc();
// }
// });
// JMenuItem viewSrcItem2 = new JMenuItem("查看源文件");
// viewSrcItem2.addActionListener(new ActionListener() {
// public void actionPerformed(ActionEvent e) {
// viewSrc();
// }
// });
// popupMenu1.add(viewSrcItem1);
// popupMenu2.add(viewSrcItem2);
JMenuItem settingItem1 = new JMenuItem(BundleUtil.getString(BundleUtil.Command_Setting));
settingItem1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
setting();
}
});
JMenuItem settingItem2 = new JMenuItem(BundleUtil.getString(BundleUtil.Command_Setting));
settingItem2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
setting();
}
});
popupMenu1.add(settingItem1);
popupMenu2.add(settingItem2);
JMenuItem disableItem = new JMenuItem(BundleUtil.getString(BundleUtil.Command_Disable));
disableItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
changeState();
}
});
popupMenu1.add(disableItem);
JMenuItem enableItem = new JMenuItem(BundleUtil.getString(BundleUtil.Command_Enable));
enableItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
changeState();
}
});
popupMenu2.add(enableItem);
table.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
if (e.getButton() == 3) {
JTable table = (JTable) e.getSource();
currentRow = table.rowAtPoint(e.getPoint());
if (analysises.get(currentRow).isEnable()) {
popupMenu1.show(table, e.getX(), e.getY());
} else {
popupMenu2.show(table, e.getX(), e.getY());
}
}
}
});
model.addColumn(BundleUtil.getString(BundleUtil.TableHead_Name));
model.addColumn(BundleUtil.getString(BundleUtil.TableHead_Explain));
model.addColumn(BundleUtil.getString(BundleUtil.TableHead_State));
refresh();
this.add(new JScrollPane(table));
}
private void viewSrc() {
DomainAnalysis domainAnalysis = analysises.get(currentRow);
// domainAnalysis.getClass().getName()
}
private void changeState() {
if (analysises.get(currentRow).isEnable()) {
analysises.get(currentRow).setEnable(false);
} else {
analysises.get(currentRow).setEnable(true);
}
refresh();
}
private void refresh() {
model.setRowCount(0);
Object[] row;
for (DomainAnalysis analysis : analysises) {
row = new Object[3];
row[0] = analysis.getName();
row[1] = analysis.getTip();
if (analysis.isEnable()) {
row[2] = BundleUtil.getString(BundleUtil.Command_Enable);
} else {
row[2] = BundleUtil.getString(BundleUtil.Command_Disable);
}
model.addRow(row);
}
}
private void setting() {
DomainAnalysis domainAnalysis = this.analysises.get(this.currentRow);
PersistentBeanSettingDialog d = new PersistentBeanSettingDialog(frame, (PersistentBean) domainAnalysis);
d.setModal(true);
d.setVisible(true);
}
}