OSDN Git Service

change internal process method, which introducing ExtractionResultSet
[stigmata/stigmata.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 import java.net.MalformedURLException;\r
14 import java.net.URL;\r
15 import java.util.Iterator;\r
16 \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
27 \r
28 import jp.naist.se.stigmata.Stigmata;\r
29 import jp.naist.se.stigmata.reader.ClasspathContext;\r
30 \r
31 /**\r
32  * \r
33  * \r
34  *\r
35  * @author Haruaki TAMADA\r
36  * @version $Revision$ $Date$\r
37  */\r
38 public class ClasspathSettingsPane extends JPanel{\r
39     private static final long serialVersionUID = 320973463423634L;\r
40 \r
41     private StigmataFrame stigmata;\r
42     private TargetSelectionPane classpath;\r
43     private TargetSelectionPane bootClasspath;\r
44 \r
45     public ClasspathSettingsPane(StigmataFrame frame){\r
46         this.stigmata = frame;\r
47 \r
48         initLayouts();\r
49     }\r
50 \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
55                 try{\r
56                     URL url = null;\r
57                     try{\r
58                         url = new URL(cplist[i]);\r
59                     } catch(MalformedURLException e){\r
60                         url = new File(cplist[i]).toURI().toURL();\r
61                     }\r
62                     context.addClasspath(url);\r
63                 }catch(IOException ee){\r
64                 }\r
65             }\r
66         }\r
67     }\r
68 \r
69     public void reset(){\r
70         classpath.removeAllElements();\r
71         bootClasspath.removeAllElements();\r
72         try{\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
76             }\r
77 \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
82         }\r
83     }\r
84     \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
88         }\r
89     }\r
90 \r
91     private boolean findClass(String className){\r
92         try{\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
98             }\r
99             return bytecode.findClass(className) != null;\r
100         }catch(ClassNotFoundException e){\r
101         }catch(MalformedURLException e){\r
102         }\r
103         return false;\r
104     }\r
105 \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
114 \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
119 \r
120         bootClasspath.setBorder(new TitledBorder(Messages.getString("bootclasspath.border")));\r
121         bootClasspath.setEnabled(false);\r
122 \r
123         findButton.setEnabled(false);\r
124 \r
125         south.setBorder(new TitledBorder(Messages.getString("classpathchecker.border")));\r
126 \r
127         label.setIcon(Utility.getIcon("classpathchecker.default.icon"));\r
128         label.setToolTipText(Messages.getString("classpathchecker.default.tooltip"));\r
129 \r
130         setLayout(new BorderLayout());\r
131         add(panel, BorderLayout.CENTER);\r
132         add(south, BorderLayout.SOUTH);\r
133 \r
134         panel.add(classpath);\r
135         panel.add(bootClasspath);\r
136 \r
137         south.add(Box.createHorizontalGlue());\r
138         south.add(text);\r
139         south.add(Box.createHorizontalGlue());\r
140         south.add(findButton);\r
141         south.add(Box.createHorizontalGlue());\r
142         south.add(label);\r
143         south.add(Box.createHorizontalGlue());\r
144 \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
149             }\r
150 \r
151             public void insertUpdate(DocumentEvent arg0){\r
152                 String t = text.getText();\r
153                 findButton.setEnabled(t.trim().length() > 0);\r
154             }\r
155 \r
156             public void removeUpdate(DocumentEvent arg0){\r
157                 String t = text.getText();\r
158                 findButton.setEnabled(t.trim().length() > 0);\r
159             }\r
160         });\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
166                 if(flag){\r
167                     label.setIcon(Utility.getIcon("classpathchecker.found.icon"));\r
168                 }\r
169                 else{\r
170                     label.setIcon(Utility.getIcon("classpathchecker.notfound.icon"));\r
171                     message = Messages.getString("classpathchecker.notfound.tooltip");\r
172                 }\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
176                 );\r
177                 JOptionPane.showMessageDialog(\r
178                     stigmata, dm, Messages.getString("classpathchecker.dialog.title"),\r
179                     JOptionPane.INFORMATION_MESSAGE\r
180                 );\r
181             }\r
182         };\r
183         findButton.addActionListener(action);\r
184         text.addActionListener(action);\r
185     }\r
186 }