package jdepend.client.report.ui;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.Collection;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JDialog;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import jdepend.framework.log.BusiLogUtil;
import jdepend.framework.log.Operation;
import jdepend.framework.ui.component.JDependFrame;
import jdepend.framework.ui.component.TableSorter;
import jdepend.framework.util.BundleUtil;
import jdepend.model.JDependUnitMgr;
import jdepend.model.JavaClassUnit;
import jdepend.util.refactor.RefactorToolFactory;
public class JavaClassMoveToDialog extends JDialog {
private JDependFrame frame;
private JTable componentTable;
private Collection<JavaClassUnit> javaClasses;
private JPanel content;
private JavaClassMoveToDialogListener listener;
public JavaClassMoveToDialog(JDependFrame frame, Collection<JavaClassUnit> javaClasses) {
this(frame);
this.javaClasses = javaClasses;
}
private JavaClassMoveToDialog(JDependFrame frame) {
this.frame = frame;
getContentPane().setLayout(new BorderLayout());
setSize(650, 380);
this.setLocationRelativeTo(null);// 窗口在屏幕中间显示
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
dispose();
}
});
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
content = new JPanel(new BorderLayout());
content.add(BorderLayout.CENTER, createComponentTable());
JPanel buttonBar = new JPanel(new FlowLayout());
buttonBar.add(createOKButton());
buttonBar.add(createCloseButton());
panel.add(BorderLayout.CENTER, content);
panel.add(BorderLayout.SOUTH, buttonBar);
this.add(panel);
}
private JComponent createComponentTable() {
DefaultTableModel model = new DefaultTableModel() {
@Override
public boolean isCellEditable(int row, int column) {
return false;
}
};
TableSorter sorter = new TableSorter(model);
componentTable = new JTable(sorter);
model.addColumn("组件名称");
Object[] row;
for (jdepend.model.Component unit : JDependUnitMgr.getInstance().getComponents()) {
row = new Object[1];
row[0] = unit.getName();
model.addRow(row);
}
return new JScrollPane(componentTable);
}
private JButton createCloseButton() {
JButton button = new JButton(BundleUtil.getString(BundleUtil.Command_Close));
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
dispose();
}
});
return button;
}
private JButton createOKButton() {
JButton button = new JButton(BundleUtil.getString(BundleUtil.Command_OK));
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
moveTo(e);
}
});
return button;
}
private void moveTo(ActionEvent e) {
if (this.componentTable.getSelectedRows().length != 1) {
JOptionPane.showMessageDialog(this, "请选择一个組件.", "alert", JOptionPane.WARNING_MESSAGE);
return;
}
try {
String target = (String) this.componentTable.getValueAt(this.componentTable.getSelectedRows()[0], 0);
jdepend.model.Component targetComponent = JDependUnitMgr.getInstance().getResult().getTheComponent(target);
boolean adjust = false;
L: for (JavaClassUnit javaClass : javaClasses) {
if (!adjust && !targetComponent.containsClass(javaClass)) {
adjust = true;
break L;
}
}
if (!adjust) {
JOptionPane.showMessageDialog(this, "JavaClass所在的组件与目标组件相同,请选择其它组件.", "alert",
JOptionPane.WARNING_MESSAGE);
return;
}
RefactorToolFactory.createTool().moveClass(javaClasses, targetComponent);
frame.onRefactoring();
if (this.listener != null) {
this.listener.onFinish();
}
// 记录日志
BusiLogUtil.getInstance().businessLog(Operation.moveToClass);
dispose();
} catch (Exception ex) {
ex.printStackTrace();
Component source = (Component) e.getSource();
JOptionPane.showMessageDialog(source, ex.getMessage(), "alert", JOptionPane.ERROR_MESSAGE);
}
}
public void setListener(JavaClassMoveToDialogListener listener) {
this.listener = listener;
}
}