gvsig-scripting / org.gvsig.scripting / trunk / org.gvsig.scripting / org.gvsig.scripting.lib / org.gvsig.scripting.lib.impl / src / main / java / org / gvsig / scripting / impl / MethodList.java @ 468
History | View | Annotate | Download (7.09 KB)
1 | 164 | jobacas | package org.gvsig.scripting.impl; |
---|---|---|---|
2 | |||
3 | import java.io.File; |
||
4 | 468 | jjdelcerro | import java.io.IOException; |
5 | 164 | jobacas | import java.net.URL; |
6 | import java.util.ArrayList; |
||
7 | 461 | jjdelcerro | import java.util.Collection; |
8 | 164 | jobacas | import java.util.Collections; |
9 | import java.util.Comparator; |
||
10 | import java.util.HashMap; |
||
11 | 461 | jjdelcerro | import java.util.HashSet; |
12 | 164 | jobacas | import java.util.Iterator; |
13 | import java.util.List; |
||
14 | import java.util.Map; |
||
15 | import java.util.Set; |
||
16 | 468 | jjdelcerro | import java.util.logging.Level; |
17 | import java.util.logging.Logger; |
||
18 | 164 | jobacas | import java.util.regex.Matcher; |
19 | import java.util.regex.Pattern; |
||
20 | 468 | jjdelcerro | import org.apache.commons.io.FileUtils; |
21 | 164 | jobacas | |
22 | import org.gvsig.scripting.ScriptingHelpManager.ScriptingHelpClass; |
||
23 | import org.gvsig.scripting.ScriptingHelpManager.ScriptingHelpMethod; |
||
24 | |||
25 | 461 | jjdelcerro | public class MethodList extends ArrayList<ScriptingHelpMethod> { |
26 | 164 | jobacas | |
27 | 461 | jjdelcerro | /**
|
28 | *
|
||
29 | */
|
||
30 | private static final long serialVersionUID = 2097121200002178537L; |
||
31 | 164 | jobacas | |
32 | 461 | jjdelcerro | private Map<String, ClassNode> allClasses = new HashMap<String, ClassNode>(); |
33 | 164 | jobacas | |
34 | 461 | jjdelcerro | public MethodList() {
|
35 | } |
||
36 | 164 | jobacas | |
37 | 461 | jjdelcerro | public void addMethods(URL indexFileUrl) { |
38 | File f = new File(indexFileUrl.getFile()); |
||
39 | 468 | jjdelcerro | String indexFile = null; |
40 | try {
|
||
41 | indexFile = FileUtils.readFileToString(f); |
||
42 | } catch (IOException ex) { |
||
43 | |||
44 | } |
||
45 | 461 | jjdelcerro | Pattern methodPattern = Pattern.compile("<indexitem text=\"[^\"]*\" expand=\"false\">"); |
46 | Pattern endMethodPattern = Pattern.compile("</indexitem>");; |
||
47 | Pattern classPattern = Pattern.compile("<indexitem text=\"[^\"]*\" target=\"[^\"]*\" />"); |
||
48 | 164 | jobacas | |
49 | 461 | jjdelcerro | Matcher methodMatcher = methodPattern.matcher(indexFile);
|
50 | while (methodMatcher.find()) {
|
||
51 | String subIndexFile = indexFile.substring(methodMatcher.start());
|
||
52 | Matcher endMethodMatcher = endMethodPattern.matcher(subIndexFile);
|
||
53 | if (endMethodMatcher.find()) {
|
||
54 | String methodExtract = subIndexFile.substring(0, endMethodMatcher.start()); |
||
55 | String[] methodnode = (indexFile.substring(methodMatcher.start(), methodMatcher.end())).split("\""); |
||
56 | if (methodnode.length > 2) { |
||
57 | MethodNode mn = new MethodNode(methodnode[1], null); |
||
58 | 164 | jobacas | |
59 | 461 | jjdelcerro | Matcher classMatcher = classPattern.matcher(methodExtract);
|
60 | while (classMatcher.find()) {
|
||
61 | String[] classnode = (methodExtract.substring(classMatcher.start(), classMatcher.end())).split("\""); |
||
62 | 164 | jobacas | |
63 | 461 | jjdelcerro | if (classnode.length > 3) { |
64 | ClassNode cn = this.getOrCreateClassInfo(classnode[1], classnode[3]); |
||
65 | cn.addMethod(mn.getName()); |
||
66 | mn.add(cn); |
||
67 | } |
||
68 | 164 | jobacas | |
69 | 461 | jjdelcerro | } |
70 | this.add(mn);
|
||
71 | 164 | jobacas | |
72 | 461 | jjdelcerro | } |
73 | } |
||
74 | 164 | jobacas | |
75 | 461 | jjdelcerro | } |
76 | 164 | jobacas | } |
77 | |||
78 | 461 | jjdelcerro | private ClassNode getOrCreateClassInfo(String name, String url) { |
79 | ClassNode cn = this.allClasses.get(name);
|
||
80 | if( cn == null ) { |
||
81 | cn = new ClassNode(name,url);
|
||
82 | this.allClasses.put(name,cn);
|
||
83 | } |
||
84 | return cn;
|
||
85 | } |
||
86 | |||
87 | public ClassNode getHelpClass(String name) { |
||
88 | return this.allClasses.get(name); |
||
89 | } |
||
90 | |||
91 | public List<ScriptingHelpClass> getHelpClasses(){ |
||
92 | List<ScriptingHelpClass> classes = new ArrayList<ScriptingHelpClass>(this.allClasses.values()); |
||
93 | Collections.sort(classes);
|
||
94 | return classes;
|
||
95 | } |
||
96 | |||
97 | public ScriptingHelpClass add(String className, String target, List<String> methods) { |
||
98 | ClassNode cn = this.getOrCreateClassInfo(className, target);
|
||
99 | for (String methodName : methods) { |
||
100 | boolean isFound = false; |
||
101 | for (ScriptingHelpMethod mn : this) { |
||
102 | if (mn.getName().equals(methodName)) {
|
||
103 | ((MethodNode) mn).add(cn); |
||
104 | cn.addMethod(((MethodNode) mn).getName()); |
||
105 | isFound = true;
|
||
106 | } |
||
107 | } |
||
108 | if (!isFound) {
|
||
109 | this.add(new MethodNode(methodName, cn)); |
||
110 | } |
||
111 | } |
||
112 | |||
113 | Collections.sort(this, new Comparator<ScriptingHelpMethod>() { |
||
114 | public int compare(ScriptingHelpMethod p1, ScriptingHelpMethod p2) { |
||
115 | return p1.getName().toLowerCase().compareTo(p2.getName().toLowerCase());
|
||
116 | } |
||
117 | }); |
||
118 | |||
119 | return cn;
|
||
120 | } |
||
121 | |||
122 | 212 | cordinyana | public void printMethodList(Map<String, MethodNode> map) { |
123 | Set<String> keys = map.keySet(); |
||
124 | Iterator<String> it = keys.iterator(); |
||
125 | 461 | jjdelcerro | while (it.hasNext()) {
|
126 | MethodNode mn = map.get(it.next()); |
||
127 | 212 | cordinyana | Iterator<ScriptingHelpClass> i = mn.iterator();
|
128 | 461 | jjdelcerro | System.out.println(mn);
|
129 | while (i.hasNext()) {
|
||
130 | ClassNode cn = (ClassNode) i.next(); |
||
131 | System.out.println(" ->" + cn.className); |
||
132 | } |
||
133 | } |
||
134 | } |
||
135 | 164 | jobacas | |
136 | 461 | jjdelcerro | public Map<String, ScriptingHelpMethod> findMethods(String text) { |
137 | 164 | jobacas | |
138 | 461 | jjdelcerro | Map<String, ScriptingHelpMethod> matches = new HashMap<String, ScriptingHelpMethod>(); |
139 | List<ScriptingHelpMethod> l = this; |
||
140 | if (text != null) { |
||
141 | for (ScriptingHelpMethod mn : l) {
|
||
142 | if (mn.getName().toLowerCase().contains(text.toLowerCase())) {
|
||
143 | matches.put(mn.getName(), mn); |
||
144 | } |
||
145 | } |
||
146 | } |
||
147 | return matches;
|
||
148 | } |
||
149 | 164 | jobacas | |
150 | 461 | jjdelcerro | private static class MethodNode implements ScriptingHelpMethod { |
151 | |||
152 | /**
|
||
153 | *
|
||
154 | */
|
||
155 | private static final long serialVersionUID = -7155323542211180518L; |
||
156 | private final String methodName; |
||
157 | private final List<ScriptingHelpClass> classes; |
||
158 | |||
159 | MethodNode(String name, ScriptingHelpClass c) {
|
||
160 | this.methodName = name;
|
||
161 | this.classes = new ArrayList<ScriptingHelpClass>(); |
||
162 | if (c != null) { |
||
163 | classes.add(c); |
||
164 | } |
||
165 | } |
||
166 | |||
167 | MethodNode add(ClassNode c) { |
||
168 | this.classes.add(c);
|
||
169 | return this; |
||
170 | } |
||
171 | |||
172 | public String getName() { |
||
173 | return this.methodName; |
||
174 | } |
||
175 | |||
176 | public Iterator<ScriptingHelpClass> iterator() { |
||
177 | return this.classes.iterator(); |
||
178 | } |
||
179 | |||
180 | public String toString() { |
||
181 | return getName();
|
||
182 | } |
||
183 | } |
||
184 | |||
185 | private static class ClassNode implements ScriptingHelpClass, Comparable { |
||
186 | |||
187 | String className;
|
||
188 | String classUrl;
|
||
189 | Set<String> methods = new HashSet<String>(); |
||
190 | |||
191 | ClassNode(String name, String url) { |
||
192 | this.className = name;
|
||
193 | this.classUrl = url;
|
||
194 | } |
||
195 | |||
196 | public String getName() { |
||
197 | return this.className; |
||
198 | } |
||
199 | |||
200 | public String getUrl() { |
||
201 | return this.classUrl; |
||
202 | } |
||
203 | |||
204 | public String toString() { |
||
205 | return getName();
|
||
206 | } |
||
207 | |||
208 | public void addMethod(String name) { |
||
209 | this.methods.add(name);
|
||
210 | } |
||
211 | |||
212 | public List<String> getMethods() { |
||
213 | List l = new ArrayList(this.methods); |
||
214 | Collections.sort(l);
|
||
215 | return l;
|
||
216 | } |
||
217 | |||
218 | @Override
|
||
219 | public int compareTo(Object o) { |
||
220 | return this.className.compareToIgnoreCase( ((ClassNode)o).getName() ); |
||
221 | } |
||
222 | } |
||
223 | |||
224 | // public ScriptingHelpClass createHelpClass(String name, String target) {
|
||
225 | // return new ClassNode(name, target);
|
||
226 | // }
|
||
227 | 164 | jobacas | } |