OSDN Git Service

e787e0114cb1643247cd57a42f2017f2b3cee28a
[stigmata/stigmata-core.git] / src / main / java / jp / naist / se / stigmata / ui / swing / ClasspathSettingsPane.java
1 package jp.naist.se.stigmata.ui.swing;\r
2 \r
3 /*\r
4  * $Id$\r
5  */\r
6 \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 \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
23 \r
24 import jp.naist.se.stigmata.reader.ClasspathContext;\r
25 \r
26 /**\r
27  * \r
28  * \r
29  *\r
30  * @author Haruaki TAMADA\r
31  * @version $Revision$ $Date$\r
32  */\r
33 public class ClasspathSettingsPane extends JPanel{\r
34     private static final long serialVersionUID = 320973463423634L;\r
35 \r
36     private StigmataFrame stigmata;\r
37     private TargetSelectionPane classpath;\r
38     private TargetSelectionPane bootClasspath;\r
39 \r
40     public ClasspathSettingsPane(StigmataFrame frame){\r
41         this.stigmata = frame;\r
42 \r
43         initLayouts();\r
44     }\r
45 \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
50                 try{\r
51                     context.addClasspath(new File(cplist[i]).toURI().toURL());\r
52                 }catch(IOException ee){\r
53                 }\r
54             }\r
55         }\r
56     }\r
57 \r
58     public void reset(){\r
59         try{\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
64         }\r
65     }\r
66     \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
70         }\r
71     }\r
72 \r
73     private boolean findClass(String className){\r
74         try{\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
80             }\r
81             return bytecode.findClass(className) != null;\r
82         }catch(Exception e){\r
83         }\r
84         return false;\r
85     }\r
86 \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
95 \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
100 \r
101         bootClasspath.setBorder(new TitledBorder(Messages.getString("bootclasspath.border")));\r
102         bootClasspath.setEnabled(false);\r
103 \r
104         findButton.setEnabled(false);\r
105 \r
106         south.setBorder(new TitledBorder(Messages.getString("classpathchecker.border")));\r
107 \r
108         label.setIcon(Utility.getIcon("classpathchecker.default.icon"));\r
109         label.setToolTipText(Messages.getString("classpathchecker.default.tooltip"));\r
110 \r
111         setLayout(new BorderLayout());\r
112         add(panel, BorderLayout.CENTER);\r
113         add(south, BorderLayout.SOUTH);\r
114 \r
115         panel.add(classpath);\r
116         panel.add(bootClasspath);\r
117 \r
118         south.add(Box.createHorizontalGlue());\r
119         south.add(text);\r
120         south.add(Box.createHorizontalGlue());\r
121         south.add(findButton);\r
122         south.add(Box.createHorizontalGlue());\r
123         south.add(label);\r
124         south.add(Box.createHorizontalGlue());\r
125 \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
130             }\r
131 \r
132             public void insertUpdate(DocumentEvent arg0){\r
133                 String t = text.getText();\r
134                 findButton.setEnabled(t.trim().length() > 0);\r
135             }\r
136 \r
137             public void removeUpdate(DocumentEvent arg0){\r
138                 String t = text.getText();\r
139                 findButton.setEnabled(t.trim().length() > 0);\r
140             }\r
141         });\r
142         ActionListener action = new ActionListener(){\r
143             public void actionPerformed(ActionEvent e){\r
144                 boolean flag = findClass(text.getText().trim());\r
145                 if(flag){\r
146                     label.setIcon(Utility.getIcon("classpathchecker.found.icon"));\r
147                     label.setToolTipText(Messages.getString("classpathchecker.found.tooltip"));\r
148                 }\r
149                 else{\r
150                     label.setIcon(Utility.getIcon("classpathchecker.notfound.icon"));\r
151                     label.setToolTipText(Messages.getString("classpathchecker.notfound.tooltip"));\r
152                 }\r
153             }\r
154         };\r
155         findButton.addActionListener(action);\r
156         text.addActionListener(action);\r
157     }\r
158 }