package jdepend.client.report.ui; import java.awt.BorderLayout; import java.awt.Cursor; import java.awt.FlowLayout; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.ArrayList; import java.util.Collection; import java.util.List; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.table.DefaultTableModel; import jdepend.framework.ui.component.JDependFrame; import jdepend.framework.ui.component.TableMouseMotionAdapter; import jdepend.framework.ui.component.TableSorter; import jdepend.framework.ui.dialog.CooperDialog; import jdepend.framework.ui.util.JTableUtil; import jdepend.model.JDependUnit; import jdepend.model.MetricsMgr; import jdepend.client.report.util.ReportConstant; public final class JDependUnitCaCeListDialog extends CooperDialog { private JDependFrame frame; private JDependUnit component; private String metrics; private JTable listTable; private DefaultTableModel listModel; private Collection<? extends JDependUnit> listData; public JDependUnitCaCeListDialog(JDependFrame frame, JDependUnit component, String metrics) { super(component.getName() + " " + metrics + " list"); this.frame = frame; this.component = component; this.metrics = metrics; initList(); showList(); List<String> fitColNames = new ArrayList<String>(); fitColNames.add(ReportConstant.Name); JTableUtil.fitTableColumns(listTable, fitColNames); this.add(new JScrollPane(listTable)); } public void showList() { listModel.setRowCount(0); this.loadList(); } public void loadList() { Object[] row; listData = new ArrayList<JDependUnit>(); if (metrics.equals(ReportConstant.Ca)) { listData = this.component.getAfferents(); } else if (metrics.equals(ReportConstant.Ce)) { listData = this.component.getEfferents(); } for (JDependUnit unit : listData) { row = new Object[12]; row[0] = unit.getName(); row[1] = unit.getLineCount(); row[2] = unit.getClassCount(); row[3] = unit.getAbstractClassCount(); row[4] = unit.getAfferentCoupling(); row[5] = unit.getEfferentCoupling(); row[6] = unit.getValue(MetricsMgr.A); row[7] = unit.getValue(MetricsMgr.I); row[8] = unit.getValue(MetricsMgr.D); row[9] = unit.getValue(MetricsMgr.Coupling); row[10] = unit.getValue(MetricsMgr.Cohesion); row[11] = unit.getValue(MetricsMgr.Balance); listModel.addRow(row); } } private void initList() { listModel = new DefaultTableModel() { @Override public boolean isCellEditable(int row, int column) { return false; } }; TableSorter sorter = new TableSorter(listModel); listTable = new JTable(sorter); sorter.setTableHeader(listTable.getTableHeader()); listModel.addColumn(ReportConstant.Name); listModel.addColumn(ReportConstant.LC); listModel.addColumn(ReportConstant.CC); listModel.addColumn(ReportConstant.AC); listModel.addColumn(ReportConstant.Ca); listModel.addColumn(ReportConstant.Ce); listModel.addColumn(ReportConstant.A); listModel.addColumn(ReportConstant.I); listModel.addColumn(ReportConstant.D); listModel.addColumn(ReportConstant.Coupling); listModel.addColumn(ReportConstant.Cohesion); listModel.addColumn(ReportConstant.Balance); listTable.addMouseListener(new MouseAdapter() { @Override public void mousePressed(MouseEvent e) { if (e.getClickCount() == 2) { JTable table = (JTable) e.getSource(); String current = (String) table.getValueAt(table.rowAtPoint(e.getPoint()), 0); String currentCol = (String) table.getColumnModel().getColumn(table.columnAtPoint(e.getPoint())) .getHeaderValue(); JDependUnit currentComponent = getTheComponent(current); if (currentCol.equals(ReportConstant.Name)) { JDependUnit left = null; JDependUnit right = null; if (metrics.equals(ReportConstant.Ca)) { left = currentComponent; right = component; } else if (metrics.equals(ReportConstant.Ce)) { left = component; right = currentComponent; } RelationDetailPanel relationDetailPanel = new RelationDetailPanel(frame, left, right); JDependUnitCaCeListDialog.this.getContentPane().removeAll(); JDependUnitCaCeListDialog.this.getContentPane().add(BorderLayout.CENTER, relationDetailPanel); FlowLayout buttonFlowLayout = new FlowLayout(); buttonFlowLayout.setAlignment(FlowLayout.RIGHT); JPanel buttonBar = new JPanel(buttonFlowLayout); buttonBar.add(createBackButton()); JDependUnitCaCeListDialog.this.add(BorderLayout.SOUTH, buttonBar); JDependUnitCaCeListDialog.this.setVisible(true); } } } }); List<String> detailColumnNames = new ArrayList<String>(); detailColumnNames.add(ReportConstant.Name); listTable.addMouseMotionListener(new TableMouseMotionAdapter(listTable, detailColumnNames)); } private JDependUnit getTheComponent(String name) { for (JDependUnit component : this.listData) { if (component.getName().equals(name)) { return component; } } return null; } private JLabel createBackButton() { JLabel button = new JLabel("<html><a href='#'>返回</a></html>"); button.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); button.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { JDependUnitCaCeListDialog.this.getContentPane().removeAll(); JDependUnitCaCeListDialog.this.getContentPane().add(BorderLayout.CENTER, new JScrollPane(listTable)); JDependUnitCaCeListDialog.this.setVisible(true); } }); return button; } }