Statistics
| Revision:

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
}