1 package jp.naist.se.stigmata.ui.swing;
\r
7 import java.awt.BorderLayout;
\r
8 import java.awt.GridLayout;
\r
9 import java.awt.event.ActionEvent;
\r
10 import java.awt.event.ActionListener;
\r
11 import java.io.File;
\r
12 import java.io.IOException;
\r
14 import javax.swing.Box;
\r
15 import javax.swing.JButton;
\r
16 import javax.swing.JComponent;
\r
17 import javax.swing.JLabel;
\r
18 import javax.swing.JPanel;
\r
19 import javax.swing.JTextField;
\r
20 import javax.swing.border.TitledBorder;
\r
21 import javax.swing.event.DocumentEvent;
\r
22 import javax.swing.event.DocumentListener;
\r
24 import jp.naist.se.stigmata.reader.ClasspathContext;
\r
30 * @author Haruaki TAMADA
\r
31 * @version $Revision$ $Date$
\r
33 public class ClasspathSettingsPane extends JPanel{
\r
34 private static final long serialVersionUID = 320973463423634L;
\r
36 private StigmataFrame stigmata;
\r
37 private TargetSelectionPane classpath;
\r
38 private TargetSelectionPane bootClasspath;
\r
40 public ClasspathSettingsPane(StigmataFrame frame){
\r
41 this.stigmata = frame;
\r
46 public void updateClasspathContext(ClasspathContext context){
\r
47 String[] cplist = classpath.getValues();
\r
48 if(cplist != null && cplist.length >= 0){
\r
49 for(int i = 0; i < cplist.length; i++){
\r
51 context.addClasspath(new File(cplist[i]).toURI().toURL());
\r
52 }catch(IOException ee){
\r
58 public void reset(){
\r
60 addClasspath(bootClasspath, System.getProperty("java.class.path"));
\r
61 addClasspath(bootClasspath, System.getProperty("sun.boot.class.path"));
\r
62 } catch(SecurityException e){
\r
63 e.printStackTrace();
\r
67 private void addClasspath(TargetSelectionPane target, String classpath){
\r
68 if(classpath != null){
\r
69 target.addValues(classpath.split(System.getProperty("path.separator")));
\r
73 private boolean findClass(String className){
\r
75 ClasspathContext b = stigmata.getStigmata().createContext().getBytecodeContext();
\r
76 ClasspathContext bytecode = new ClasspathContext(b);
\r
77 String[] path = classpath.getValues();
\r
78 for(String cp: path){
\r
79 bytecode.addClasspath(new File(cp).toURI().toURL());
\r
81 return bytecode.findClass(className) != null;
\r
82 }catch(Exception e){
\r
87 private void initLayouts(){
\r
88 JComponent panel = new JPanel(new GridLayout(1, 2));
\r
89 classpath = new TargetSelectionPane(stigmata);
\r
90 bootClasspath = new TargetSelectionPane(stigmata);
\r
91 JComponent south = Box.createHorizontalBox();
\r
92 final JButton findButton = Utility.createButton("findclass");
\r
93 final JTextField text = new JTextField();
\r
94 final JLabel label = new JLabel();
\r
96 classpath.setBorder(new TitledBorder(Messages.getString("userclasspath.border")));
\r
97 classpath.addTargetExtensions(Messages.getStringArray("userclasspath.extensions"));
\r
98 classpath.setDescription(Messages.getString("userclasspath.description"));
\r
99 classpath.setDirectorySelectable(true);
\r
101 bootClasspath.setBorder(new TitledBorder(Messages.getString("bootclasspath.border")));
\r
102 bootClasspath.setEnabled(false);
\r
104 findButton.setEnabled(false);
\r
106 south.setBorder(new TitledBorder(Messages.getString("classpathchecker.border")));
\r
108 label.setIcon(Utility.getIcon("classpathchecker.default.icon"));
\r
109 label.setToolTipText(Messages.getString("classpathchecker.default.tooltip"));
\r
111 setLayout(new BorderLayout());
\r
112 add(panel, BorderLayout.CENTER);
\r
113 add(south, BorderLayout.SOUTH);
\r
115 panel.add(classpath);
\r
116 panel.add(bootClasspath);
\r
118 south.add(Box.createHorizontalGlue());
\r
120 south.add(Box.createHorizontalGlue());
\r
121 south.add(findButton);
\r
122 south.add(Box.createHorizontalGlue());
\r
124 south.add(Box.createHorizontalGlue());
\r
126 text.getDocument().addDocumentListener(new DocumentListener(){
\r
127 public void changedUpdate(DocumentEvent arg0){
\r
128 String t = text.getText();
\r
129 findButton.setEnabled(t.trim().length() > 0);
\r
132 public void insertUpdate(DocumentEvent arg0){
\r
133 String t = text.getText();
\r
134 findButton.setEnabled(t.trim().length() > 0);
\r
137 public void removeUpdate(DocumentEvent arg0){
\r
138 String t = text.getText();
\r
139 findButton.setEnabled(t.trim().length() > 0);
\r
142 ActionListener action = new ActionListener(){
\r
143 public void actionPerformed(ActionEvent e){
\r
144 boolean flag = findClass(text.getText().trim());
\r
146 label.setIcon(Utility.getIcon("classpathchecker.found.icon"));
\r
147 label.setToolTipText(Messages.getString("classpathchecker.found.tooltip"));
\r
150 label.setIcon(Utility.getIcon("classpathchecker.notfound.icon"));
\r
151 label.setToolTipText(Messages.getString("classpathchecker.notfound.tooltip"));
\r
155 findButton.addActionListener(action);
\r
156 text.addActionListener(action);
\r