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
13 import java.net.MalformedURLException;
\r
14 import java.net.URL;
\r
15 import java.util.Iterator;
\r
17 import javax.swing.Box;
\r
18 import javax.swing.JButton;
\r
19 import javax.swing.JComponent;
\r
20 import javax.swing.JLabel;
\r
21 import javax.swing.JOptionPane;
\r
22 import javax.swing.JPanel;
\r
23 import javax.swing.JTextField;
\r
24 import javax.swing.border.TitledBorder;
\r
25 import javax.swing.event.DocumentEvent;
\r
26 import javax.swing.event.DocumentListener;
\r
28 import jp.naist.se.stigmata.Stigmata;
\r
29 import jp.naist.se.stigmata.reader.ClasspathContext;
\r
35 * @author Haruaki TAMADA
\r
36 * @version $Revision$ $Date$
\r
38 public class ClasspathSettingsPane extends JPanel{
\r
39 private static final long serialVersionUID = 320973463423634L;
\r
41 private StigmataFrame stigmata;
\r
42 private TargetSelectionPane classpath;
\r
43 private TargetSelectionPane bootClasspath;
\r
45 public ClasspathSettingsPane(StigmataFrame frame){
\r
46 this.stigmata = frame;
\r
51 public void updateClasspathContext(ClasspathContext context){
\r
52 String[] cplist = classpath.getValues();
\r
53 if(cplist != null && cplist.length >= 0){
\r
54 for(int i = 0; i < cplist.length; i++){
\r
58 url = new URL(cplist[i]);
\r
59 } catch(MalformedURLException e){
\r
60 url = new File(cplist[i]).toURI().toURL();
\r
62 context.addClasspath(url);
\r
63 }catch(IOException ee){
\r
69 public void reset(){
\r
70 classpath.removeAllElements();
\r
71 bootClasspath.removeAllElements();
\r
73 ClasspathContext context = stigmata.getEnvironment().getClasspathContext();
\r
74 for(Iterator<URL> i = context.classpath(); i.hasNext(); ){
\r
75 classpath.addValue(i.next().toString());
\r
78 addClasspath(bootClasspath, System.getProperty("java.class.path"));
\r
79 addClasspath(bootClasspath, System.getProperty("sun.boot.class.path"));
\r
80 } catch(SecurityException e){
\r
81 e.printStackTrace();
\r
85 private void addClasspath(TargetSelectionPane target, String classpath){
\r
86 if(classpath != null){
\r
87 target.addValues(classpath.split(System.getProperty("path.separator")));
\r
91 private boolean findClass(String className){
\r
93 ClasspathContext b = Stigmata.getInstance().createEnvironment().getClasspathContext();
\r
94 ClasspathContext bytecode = new ClasspathContext(b);
\r
95 String[] path = classpath.getValues();
\r
96 for(String cp: path){
\r
97 bytecode.addClasspath(new File(cp).toURI().toURL());
\r
99 return bytecode.findClass(className) != null;
\r
100 }catch(ClassNotFoundException e){
\r
101 }catch(MalformedURLException e){
\r
106 private void initLayouts(){
\r
107 JComponent panel = new JPanel(new GridLayout(1, 2));
\r
108 classpath = new TargetSelectionPane(stigmata);
\r
109 bootClasspath = new TargetSelectionPane(stigmata);
\r
110 JComponent south = Box.createHorizontalBox();
\r
111 final JButton findButton = Utility.createButton("findclass");
\r
112 final JTextField text = new JTextField();
\r
113 final JLabel label = new JLabel();
\r
115 classpath.setBorder(new TitledBorder(Messages.getString("userclasspath.border")));
\r
116 classpath.addTargetExtensions(Messages.getStringArray("userclasspath.extensions"));
\r
117 classpath.setDescription(Messages.getString("userclasspath.description"));
\r
118 classpath.setDirectorySelectable(true);
\r
120 bootClasspath.setBorder(new TitledBorder(Messages.getString("bootclasspath.border")));
\r
121 bootClasspath.setEnabled(false);
\r
123 findButton.setEnabled(false);
\r
125 south.setBorder(new TitledBorder(Messages.getString("classpathchecker.border")));
\r
127 label.setIcon(Utility.getIcon("classpathchecker.default.icon"));
\r
128 label.setToolTipText(Messages.getString("classpathchecker.default.tooltip"));
\r
130 setLayout(new BorderLayout());
\r
131 add(panel, BorderLayout.CENTER);
\r
132 add(south, BorderLayout.SOUTH);
\r
134 panel.add(classpath);
\r
135 panel.add(bootClasspath);
\r
137 south.add(Box.createHorizontalGlue());
\r
139 south.add(Box.createHorizontalGlue());
\r
140 south.add(findButton);
\r
141 south.add(Box.createHorizontalGlue());
\r
143 south.add(Box.createHorizontalGlue());
\r
145 text.getDocument().addDocumentListener(new DocumentListener(){
\r
146 public void changedUpdate(DocumentEvent arg0){
\r
147 String t = text.getText();
\r
148 findButton.setEnabled(t.trim().length() > 0);
\r
151 public void insertUpdate(DocumentEvent arg0){
\r
152 String t = text.getText();
\r
153 findButton.setEnabled(t.trim().length() > 0);
\r
156 public void removeUpdate(DocumentEvent arg0){
\r
157 String t = text.getText();
\r
158 findButton.setEnabled(t.trim().length() > 0);
\r
161 ActionListener action = new ActionListener(){
\r
162 public void actionPerformed(ActionEvent e){
\r
163 String t = text.getText().trim();
\r
164 boolean flag = findClass(t);
\r
165 String message = Messages.getString("classpathchecker.found.tooltip");
\r
167 label.setIcon(Utility.getIcon("classpathchecker.found.icon"));
\r
170 label.setIcon(Utility.getIcon("classpathchecker.notfound.icon"));
\r
171 message = Messages.getString("classpathchecker.notfound.tooltip");
\r
173 label.setToolTipText(message);
\r
174 String dm = String.format(
\r
175 "<html><body><dl><dt>%s</dt><dd>%s</dd></body></html>", t, message
\r
177 JOptionPane.showMessageDialog(
\r
178 stigmata, dm, Messages.getString("classpathchecker.dialog.title"),
\r
179 JOptionPane.INFORMATION_MESSAGE
\r
183 findButton.addActionListener(action);
\r
184 text.addActionListener(action);
\r