package jdepend.client.ui.wizard;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.FlowLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JLabel;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.ToolTipManager;
import jdepend.client.core.config.CommandConfMgr;
import jdepend.client.core.config.GroupConf;
import jdepend.client.ui.JDependCooper;
import jdepend.framework.context.JDependContext;
import jdepend.framework.context.Scope.SCOPE;
import jdepend.framework.exception.JDependException;
import jdepend.framework.util.BundleUtil;
public class GroupSettingPanel extends JPanel {
private JDependCooper frame;
private JTextField groupname;
private JTextArea pathname;
private JTextArea srcPathName;
private JTextArea filteredPackages;
private JTextField attribute;
public GroupSettingPanel(JDependCooper frame) {
this.frame = frame;
init(null);
}
public GroupSettingPanel(JDependCooper frame, String name) {
this.frame = frame;
init(name);
}
private void init(String name) {
GroupConf group = null;
if (name != null) {
try {
group = CommandConfMgr.getInstance().getTheGroup(name);
} catch (JDependException e) {
e.printStackTrace();
}
}
this.setLayout(new GridBagLayout());
// align all the labels
GridBagConstraints c = new GridBagConstraints();
c.fill = GridBagConstraints.BOTH;
c.anchor = GridBagConstraints.CENTER;
double itemY = c.weighty;
JLabel groupLabel = new JLabel(
BundleUtil.getString(BundleUtil.ClientWin_Group_Name) + ":");
c.gridx = 0;
c.gridy = 0;
c.weightx = 0.1;
add(groupLabel, c);
groupname = new JTextField();
if (group != null) {
groupname.setText(group.getName());
groupname.setEditable(false);
}
c.gridx = 1;
c.gridy = 0;
c.weightx = 0.9;
add(groupname, c);
JLabel pathLabel = new JLabel(
BundleUtil.getString(BundleUtil.ClientWin_Group_Path) + ":");
c.gridx = 0;
c.gridy = 1;
c.weightx = 0.1;
c.weighty = 0.3;
add(pathLabel, c);
pathname = new JTextArea() {
@Override
public String getToolTipText(MouseEvent e) {
return "选择jar文件或者class所在的文件夹";
}
};
ToolTipManager.sharedInstance().registerComponent(pathname);
if (group != null && group.getPath() != null) {
pathname.setText(group.getPath().replaceAll(";", ";\n"));
}
JPanel pathPanel = new JPanel();
pathPanel.setLayout(new BorderLayout());
JPanel pathButtons = new JPanel(new FlowLayout());
pathButtons.add(this.selectDirButton(pathname, "Path"));
pathButtons.add(this.clearDirButton(pathname));
pathPanel.add(new JScrollPane(pathname), BorderLayout.CENTER);
pathPanel.add(pathButtons, BorderLayout.EAST);
c.gridx = 1;
c.gridy = 1;
c.weightx = 0.9;
c.weighty = 0.3;
add(pathPanel, c);
JLabel srcPathLabel = new JLabel(
BundleUtil.getString(BundleUtil.ClientWin_Group_SrcPath) + ":");
c.gridx = 0;
c.gridy = 2;
c.weightx = 0.1;
c.weighty = 0.3;
add(srcPathLabel, c);
srcPathName = new JTextArea() {
@Override
public String getToolTipText(MouseEvent e) {
return "选择源文件所在的文件夹";
}
};
ToolTipManager.sharedInstance().registerComponent(srcPathName);
if (group != null && group.getSrcPath() != null) {
srcPathName.setText(group.getSrcPath().replaceAll(";", ";\n"));
}
JPanel srcPathPanel = new JPanel();
srcPathPanel.setLayout(new BorderLayout());
JPanel srcPathButtons = new JPanel(new FlowLayout());
srcPathButtons.add(this.selectDirButton(srcPathName, "srcPath"));
srcPathButtons.add(this.clearDirButton(srcPathName));
srcPathPanel.add(new JScrollPane(srcPathName), BorderLayout.CENTER);
srcPathPanel.add(srcPathButtons, BorderLayout.EAST);
c.gridx = 1;
c.gridy = 2;
c.weightx = 0.9;
c.weighty = 0.3;
add(srcPathPanel, c);
JLabel filteredPackagesLabel = new JLabel(
BundleUtil
.getString(BundleUtil.ClientWin_Group_FilteredPackages)
+ ":");
c.gridx = 0;
c.gridy = 3;
c.weightx = 0.1;
add(filteredPackagesLabel, c);
filteredPackages = new JTextArea() {
@Override
public String getToolTipText(MouseEvent e) {
return "本命令组忽略的包列表,一行一个包,右键查看全局忽略的包列表";
}
};
ToolTipManager.sharedInstance().registerComponent(filteredPackages);
filteredPackages.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
if (e.getButton() == 3) {
JPopupMenu menu = new JPopupMenu();
JMenuItem gobalIgnoreItem = new JMenuItem("全局忽略的包列表");
gobalIgnoreItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
gobalIgnore();
} catch (Exception ex) {
ex.printStackTrace();
JOptionPane.showMessageDialog(
GroupSettingPanel.this,
ex.getMessage(), "alert",
JOptionPane.ERROR_MESSAGE);
}
}
private void gobalIgnore() {
IgnoreSettingDialog d = new IgnoreSettingDialog(
frame);
d.setModal(true);
d.setVisible(true);
}
});
menu.add(gobalIgnoreItem);
menu.show((Component) e.getSource(), e.getX(), e.getY());
}
}
});
if (group != null) {
StringBuilder filteredPackagesBuffer = new StringBuilder();
for (String filteredPackage : group.getFilteredPackages()) {
filteredPackagesBuffer.append(filteredPackage);
filteredPackagesBuffer.append("\n");
}
filteredPackages.setText(filteredPackagesBuffer.toString());
filteredPackages.setCaretPosition(0);
}
c.gridx = 1;
c.gridy = 3;
c.weightx = 0.9;
add(new JScrollPane(filteredPackages), c);
JLabel attributeLabel = new JLabel(
BundleUtil.getString(BundleUtil.ClientWin_Group_Attribute)
+ ":");
c.gridx = 0;
c.gridy = 4;
c.weightx = 0.1;
c.weighty = itemY;
add(attributeLabel, c);
attribute = new JTextField();
if (group != null) {
attribute.setText(group.getAttribute());
}
c.gridx = 1;
c.gridy = 4;
c.weightx = 0.9;
add(attribute, c);
}
private JButton selectDirButton(final JTextArea pathname, final String mode) {
JButton b = new JButton("...") {
@Override
public String getToolTipText(MouseEvent e) {
if (mode.equals("Path")) {
return "选择jar文件或者class所在的文件夹";
} else {
return "选择源文件所在的文件夹";
}
}
};
ToolTipManager.sharedInstance().registerComponent(b);
b.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JFileChooser jFileChooser = null;
if (mode.equals("Path")) {
jFileChooser = new JFileChooser((String) JDependContext
.getInfo(SCOPE.APP_SCOPSE,
JDependContext.prevSelectedPath));
} else {
jFileChooser = new JFileChooser((String) JDependContext
.getInfo(SCOPE.APP_SCOPSE,
JDependContext.prevSelectedSrcPath));
}
jFileChooser
.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
jFileChooser.setMultiSelectionEnabled(true);
int result = jFileChooser.showOpenDialog(null);
if (result == JFileChooser.APPROVE_OPTION) {
for (File f : jFileChooser.getSelectedFiles()) {
if (pathname.getText() != null
&& pathname.getText().length() != 0) {
pathname.setText(pathname.getText() + ";\n"
+ f.getAbsolutePath());
} else {
pathname.setText(f.getAbsolutePath());
}
// 暂存上次选择的路径
if (mode.equals("Path")) {
JDependContext.setInfo(SCOPE.APP_SCOPSE,
JDependContext.prevSelectedPath,
f.getAbsolutePath());
} else {
JDependContext.setInfo(SCOPE.APP_SCOPSE,
JDependContext.prevSelectedSrcPath,
f.getAbsolutePath());
}
}
}
}
});
return b;
}
private JButton clearDirButton(final JTextArea target) {
JButton b = new JButton(BundleUtil.getString(BundleUtil.Command_Clear));
b.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
target.setText(null);
}
});
return b;
}
public JTextField getGroupname() {
return groupname;
}
public JTextArea getPathname() {
return pathname;
}
public JTextArea getSrcPathName() {
return srcPathName;
}
public List<String> getFilteredPackages() {
List<String> filteredPackageList = new ArrayList<String>();
for (String filteredPackage : filteredPackages.getText().split("\n")) {
filteredPackageList.add(filteredPackage);
}
return filteredPackageList;
}
public JTextField getAttribute() {
return attribute;
}
}