package jdepend.client.report.ui; import java.awt.BorderLayout; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.Collection; import javax.swing.JButton; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.table.DefaultTableModel; import jdepend.client.report.util.ReportConstant; import jdepend.framework.ui.component.JDependFrame; import jdepend.framework.ui.component.TableSorter; import jdepend.framework.ui.dialog.CooperDialog; import jdepend.framework.ui.util.JTableUtil; import jdepend.framework.util.BundleUtil; import jdepend.metadata.JavaClass; import jdepend.metadata.JavaClassRelationItem; public class RelationTrackDialog extends CooperDialog { private JDependFrame frame; private JTable listTable; private DefaultTableModel listModel; private Collection<JavaClass> classes; private Collection<JavaClass> dependClasses; private Collection<JavaClass> allClasses; public RelationTrackDialog(JDependFrame frame, Collection<JavaClass> classes, Collection<JavaClass> allClasses) { this.frame = frame; this.classes = classes; this.allClasses = allClasses; this.init(); } private void init() { getContentPane().setLayout(new BorderLayout()); initList(); showList(); this.add(BorderLayout.NORTH, createOperationPanel()); this.add(BorderLayout.CENTER, new JScrollPane(listTable)); } private JPanel createOperationPanel() { JPanel relationPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); JButton track = new JButton( BundleUtil.getString(BundleUtil.Command_Track)); track.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { RelationTrackDialog d = new RelationTrackDialog(frame, dependClasses, allClasses); d.setModal(true); d.setVisible(true); } }); relationPanel.add(track); JButton export = new JButton( BundleUtil.getString(BundleUtil.Command_Export)); export.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { export(); } }); relationPanel.add(export); return relationPanel; } private void export(){ DefaultTableModel allClassModel = new DefaultTableModel(); JTable allClassTable = new JTable(allClassModel); allClassModel.addColumn(ReportConstant.JavaClass_Place); allClassModel.addColumn(ReportConstant.Name); Object[] row; for (JavaClass dependClass : allClasses) { row = new Object[allClassModel.getColumnCount()]; row[0] = dependClass.getPlace(); row[1] = dependClass.getName(); allClassModel.addRow(row); } JTableUtil.exportTableToExcel(allClassTable); } 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("id"); listModel.addColumn(ReportConstant.JavaClass_Place); listModel.addColumn(ReportConstant.Name); listTable.getColumnModel().getColumn(0).setMinWidth(0); listTable.getColumnModel().getColumn(0).setMaxWidth(0); listTable.getColumnModel().getColumn(1).setMinWidth(0); listTable.getColumnModel().getColumn(1).setMaxWidth(0); } private void showList() { listModel.setRowCount(0); this.loadList(); } private Collection<JavaClass> collectDependClass() { dependClasses = new ArrayList<JavaClass>(); for (JavaClass javaClass : classes) { for (JavaClassRelationItem item : javaClass.getCeItems()) { JavaClass dependClass = item.getTarget(); if (!dependClasses.contains(dependClass) && !this.allClasses.contains(dependClass)) { dependClasses.add(dependClass); this.allClasses.add(dependClass); } } } return dependClasses; } private void loadList() { Object[] row; Collection<JavaClass> dependClasses = this.collectDependClass(); for (JavaClass dependClass : dependClasses) { row = new Object[listTable.getColumnCount()]; row[0] = dependClass.getId(); row[1] = dependClass.getPlace(); row[2] = dependClass.getName(); listModel.addRow(row); } } }