gvsig-scripting / trunk / org.gvsig.scripting / org.gvsig.scripting.lib / org.gvsig.scripting.lib.impl / src / main / java / org / gvsig / scripting / impl / DefaultScriptingManager.java @ 164
History | View | Annotate | Download (8.1 KB)
1 |
package org.gvsig.scripting.impl; |
---|---|
2 |
|
3 |
import java.io.BufferedReader; |
4 |
import java.io.BufferedWriter; |
5 |
import java.io.File; |
6 |
import java.io.FileNotFoundException; |
7 |
import java.io.FileReader; |
8 |
import java.io.FileWriter; |
9 |
import java.io.IOException; |
10 |
import java.io.Writer; |
11 |
import java.net.MalformedURLException; |
12 |
import java.util.ArrayList; |
13 |
import java.util.HashMap; |
14 |
import java.util.Iterator; |
15 |
import java.util.List; |
16 |
import java.util.Map; |
17 |
|
18 |
import javax.script.ScriptContext; |
19 |
import javax.script.ScriptEngine; |
20 |
import javax.script.ScriptEngineManager; |
21 |
import javax.script.SimpleBindings; |
22 |
import javax.swing.ImageIcon; |
23 |
|
24 |
import org.gvsig.scripting.ScriptingBaseScript; |
25 |
import org.gvsig.scripting.ScriptingDialog; |
26 |
import org.gvsig.scripting.ScriptingFolder; |
27 |
import org.gvsig.scripting.ScriptingHelpManager; |
28 |
import org.gvsig.scripting.ScriptingManager; |
29 |
import org.gvsig.scripting.ScriptingProject; |
30 |
import org.gvsig.scripting.ScriptingScript; |
31 |
import org.gvsig.scripting.ScriptingUnit; |
32 |
|
33 |
public class DefaultScriptingManager implements ScriptingManager{ |
34 |
|
35 |
protected String rootUserFolder; |
36 |
protected Map icons; |
37 |
protected List systemFolders = new ArrayList(); |
38 |
protected ScriptEngineManager engineManager = null; |
39 |
private SimpleBindings bindings = new SimpleBindings(); |
40 |
private ScriptingHelpManager helpManager;
|
41 |
|
42 |
public DefaultScriptingManager(){
|
43 |
this.rootUserFolder = System.getProperty("user.home") + File.separator + "scripts"; |
44 |
this.helpManager = new DefaultScriptingHelpManager(this); |
45 |
|
46 |
File f = new File (System.getProperty("user.dir")+File.separator+".."+File.separator+"org.gvsig.scripting.lib"+File.separator+"org.gvsig.scripting.lib.api"+File.separator+"target"+File.separator+"site"+File.separator+"apidoc"); |
47 |
if(f.exists()){
|
48 |
try {
|
49 |
this.helpManager.importHelp("ScriptingFrameworkHelp", f.toURL()); |
50 |
} catch (MalformedURLException e) { |
51 |
// TODO Auto-generated catch block
|
52 |
e.printStackTrace(); |
53 |
} |
54 |
} |
55 |
this.bindings.put("ScriptingManager", this); |
56 |
} |
57 |
|
58 |
protected ScriptEngineManager getEngineManager(){
|
59 |
if(this.engineManager == null){ |
60 |
this.engineManager = new ScriptEngineManager(); |
61 |
} |
62 |
return this.engineManager; |
63 |
} |
64 |
|
65 |
public ScriptEngine getEngine(String langName){ |
66 |
ScriptEngine engine = this.getEngineManager().getEngineByName(langName);
|
67 |
engine.getBindings(ScriptContext.ENGINE_SCOPE).putAll(bindings); |
68 |
return engine;
|
69 |
} |
70 |
|
71 |
public ImageIcon getIcon(String name){ |
72 |
return (ImageIcon) this.icons.get(name); |
73 |
} |
74 |
|
75 |
public Map<String,String> getSupportedLanguagesByExtension(){ |
76 |
Map<String,String> l = new HashMap<String,String>(); |
77 |
l.put(".py", "python"); |
78 |
l.put(".js", "javascript"); |
79 |
l.put(".bsh", "beanshell"); |
80 |
l.put(".gvy", "groovy"); |
81 |
return l;
|
82 |
} |
83 |
|
84 |
public Map getExtensionsByLanguages(){ |
85 |
Map l = getSupportedLanguagesByExtension();
|
86 |
Map result = new HashMap(); |
87 |
Iterator it = l.entrySet().iterator();
|
88 |
while (it.hasNext()) {
|
89 |
Map.Entry pairs = (Map.Entry)it.next(); |
90 |
result.put(pairs.getValue(), pairs.getKey()); |
91 |
} |
92 |
return result;
|
93 |
} |
94 |
|
95 |
public boolean validateUnitId(ScriptingFolder folder, String id){ |
96 |
List units = folder.getUnits();
|
97 |
String fileName;
|
98 |
String s[]; |
99 |
String extension;
|
100 |
for(int i=0; i<units.size();i++){ |
101 |
fileName = ((ScriptingUnit)units.get(i)).getId(); |
102 |
s = fileName.split("\\.");
|
103 |
extension = null;
|
104 |
if (s.length>1){ |
105 |
extension ="." + s[s.length-1]; |
106 |
fileName = fileName.substring(0,fileName.length()-extension.length());
|
107 |
} |
108 |
if(fileName.equals(id)){
|
109 |
return false; |
110 |
} |
111 |
} |
112 |
return true; |
113 |
} |
114 |
|
115 |
public static String getStringFromFile(String filename){ |
116 |
|
117 |
BufferedReader b = null; |
118 |
try {
|
119 |
b = new BufferedReader(new FileReader(filename)); |
120 |
} catch (FileNotFoundException e) { |
121 |
// TODO Auto-generated catch block
|
122 |
e.printStackTrace(); |
123 |
} |
124 |
StringBuffer sb=new StringBuffer(); |
125 |
String str;
|
126 |
try {
|
127 |
while((str=b.readLine())!=null) { |
128 |
sb.append(str); |
129 |
sb.append('\n');
|
130 |
} |
131 |
} catch (IOException e) { |
132 |
// TODO Auto-generated catch block
|
133 |
e.printStackTrace(); |
134 |
} |
135 |
return sb.toString();
|
136 |
|
137 |
} |
138 |
|
139 |
public ScriptingDialog createDialog(ScriptingFolder folder, String id) { |
140 |
DefaultScriptingDialog sd = new DefaultScriptingDialog(this); |
141 |
sd.setId(id); |
142 |
File file = new File(((DefaultScriptingFolder)folder).getPath()+File.separator+id); |
143 |
try {
|
144 |
file.createNewFile(); |
145 |
} catch (IOException e) { |
146 |
// TODO Auto-generated catch block
|
147 |
e.printStackTrace(); |
148 |
} |
149 |
|
150 |
// Eliminamos la extensión, para crear el '.dlg'
|
151 |
String s[] = id.split("\\."); |
152 |
String newId;
|
153 |
if (s.length>=2){ |
154 |
String extension ="." + s[s.length-1]; |
155 |
newId = id.substring(0,id.length()-extension.length());
|
156 |
}else{
|
157 |
newId = id; |
158 |
} |
159 |
File fileDlg = new File(((DefaultScriptingFolder)folder).getPath()+File.separator+newId+".dlg"); |
160 |
try {
|
161 |
fileDlg.createNewFile(); |
162 |
} catch (IOException e) { |
163 |
// TODO Auto-generated catch block
|
164 |
e.printStackTrace(); |
165 |
} |
166 |
|
167 |
// Escribimos en el fichero '.dlg' lo mínimo para que pueda ejecutarse
|
168 |
Writer output = null; |
169 |
try {
|
170 |
output = new BufferedWriter(new FileWriter(fileDlg)); |
171 |
output.write("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n<panel/>");
|
172 |
output.close(); |
173 |
} catch (IOException e) { |
174 |
// TODO Auto-generated catch block
|
175 |
e.printStackTrace(); |
176 |
} |
177 |
|
178 |
sd.load(folder, id); |
179 |
return (ScriptingDialog)sd;
|
180 |
} |
181 |
|
182 |
public ScriptingFolder createFolder(ScriptingFolder folder, String id) { |
183 |
DefaultScriptingFolder fd = new DefaultScriptingFolder(this); |
184 |
File dir = new File(((DefaultScriptingFolder)folder).getPath()+File.separator+id); |
185 |
dir.mkdir(); |
186 |
fd.load(folder,id); |
187 |
return (ScriptingFolder)fd;
|
188 |
} |
189 |
|
190 |
public ScriptingProject createProject(ScriptingFolder folder, String id) { |
191 |
// TODO Auto-generated method stub
|
192 |
return null; |
193 |
} |
194 |
|
195 |
public ScriptingScript createScript(ScriptingFolder folder, String id) { |
196 |
DefaultScriptingScript sc = new DefaultScriptingScript(this); |
197 |
sc.setId(id); |
198 |
File file = new File(((DefaultScriptingFolder)folder).getPath()+File.separator+id); |
199 |
try {
|
200 |
file.createNewFile(); |
201 |
} catch (IOException e) { |
202 |
// TODO Auto-generated catch block
|
203 |
e.printStackTrace(); |
204 |
} |
205 |
sc.load(folder, id); |
206 |
return (ScriptingScript)sc;
|
207 |
} |
208 |
|
209 |
public ScriptingBaseScript getScript(File file) { |
210 |
ScriptingBaseScript script = (ScriptingBaseScript) this.getUnit(file);
|
211 |
|
212 |
if (script == null){ |
213 |
throw new RuntimeException(file.getPath()); |
214 |
} |
215 |
return script;
|
216 |
} |
217 |
|
218 |
public ScriptingFolder getFolder(File file) { |
219 |
ScriptingFolder folder = (ScriptingFolder) this.getUnit(file);
|
220 |
if (folder == null){ |
221 |
throw new RuntimeException(file.getAbsolutePath()); |
222 |
} |
223 |
return folder;
|
224 |
} |
225 |
|
226 |
public ScriptingUnit getUnit(File file) { |
227 |
ScriptingFolder folder = null;
|
228 |
ScriptingUnit unit = null;
|
229 |
|
230 |
folder = this.getUserFolder();
|
231 |
unit = folder.getUnit(file); |
232 |
if( unit != null ) { |
233 |
return unit;
|
234 |
} |
235 |
|
236 |
folder = this.getSystemFolder();
|
237 |
unit = folder.getUnit(file); |
238 |
if( unit != null ) { |
239 |
return unit;
|
240 |
} |
241 |
|
242 |
return null; |
243 |
} |
244 |
|
245 |
public ScriptingFolder getSystemFolder() {
|
246 |
return new SystemFolder((ScriptingManager)this); |
247 |
} |
248 |
|
249 |
public ScriptingFolder getUserFolder() {
|
250 |
return new UserFolder((ScriptingManager)this,new File(this.getRootUserFolder())); |
251 |
} |
252 |
|
253 |
public String getRootUserFolder() { |
254 |
return this.rootUserFolder; |
255 |
} |
256 |
|
257 |
public void registerSystemFolder(String name, File folder) { |
258 |
this.systemFolders.add(new RegisterSystemFolder(name, folder)); |
259 |
} |
260 |
|
261 |
public List getSystemFolders(){ |
262 |
return this.systemFolders; |
263 |
} |
264 |
|
265 |
|
266 |
public static class RegisterSystemFolder { |
267 |
public String name; |
268 |
public File folder; |
269 |
|
270 |
public RegisterSystemFolder(String name, File folder) { |
271 |
this.name = name;
|
272 |
this.folder = folder;
|
273 |
} |
274 |
} |
275 |
|
276 |
|
277 |
public String getExtensionByLanguage(String langName) { |
278 |
Map extensions = getSupportedLanguagesByExtension();
|
279 |
Iterator iterator = extensions.keySet().iterator();
|
280 |
String extension = null; |
281 |
String s = null; |
282 |
|
283 |
while (iterator. hasNext()){
|
284 |
extension = (String) iterator.next();
|
285 |
s = (String) extensions.get(extension);
|
286 |
if(s.equals(langName)){
|
287 |
return extension;
|
288 |
} |
289 |
|
290 |
} |
291 |
|
292 |
return null; |
293 |
} |
294 |
|
295 |
public Object get(String key) { |
296 |
return this.bindings.get(key); |
297 |
} |
298 |
|
299 |
public void put(String key, Object value) { |
300 |
this.bindings.put(key,value);
|
301 |
|
302 |
} |
303 |
|
304 |
public ScriptingHelpManager getHelpManager() {
|
305 |
return this.helpManager; |
306 |
} |
307 |
|
308 |
} |