Revision 468 org.gvsig.scripting/trunk/org.gvsig.scripting/org.gvsig.scripting.lib/org.gvsig.scripting.lib.impl/src/main/java/org/gvsig/scripting/impl/DefaultScriptingManager.java

View differences:

DefaultScriptingManager.java
1 1
package org.gvsig.scripting.impl;
2 2

  
3
import java.io.BufferedReader;
4 3
import java.io.File;
5
import java.io.FileNotFoundException;
6
import java.io.FileReader;
7
import java.io.IOException;
8 4
import java.util.ArrayList;
5
import java.util.Collections;
9 6
import java.util.HashMap;
10 7
import java.util.Iterator;
11 8
import java.util.List;
......
19 16
import javax.swing.ImageIcon;
20 17

  
21 18
import org.apache.commons.io.FileUtils;
19
import org.apache.commons.io.FilenameUtils;
22 20
import org.gvsig.scripting.ScriptingBaseScript;
23 21
import org.gvsig.scripting.ScriptingDialog;
24 22
import org.gvsig.scripting.ScriptingFolder;
25 23
import org.gvsig.scripting.ScriptingHelpManager;
26 24
import org.gvsig.scripting.ScriptingManager;
27
import org.gvsig.scripting.ScriptingProject;
28 25
import org.gvsig.scripting.ScriptingScript;
29 26
import org.gvsig.scripting.ScriptingUnit;
27
import org.gvsig.tools.service.spi.ProviderFactory;
30 28
import org.slf4j.Logger;
31 29
import org.slf4j.LoggerFactory;
32 30

  
33 31
public class DefaultScriptingManager implements ScriptingManager {
34 32

  
33
    public static class RegisterSystemFolder {
34

  
35
        public String name;
36
        public File folder;
37

  
38
        public RegisterSystemFolder(String name, File folder) {
39
            this.name = name;
40
            this.folder = folder;
41
        }
42
    }
43

  
35 44
    private static final Logger LOG = LoggerFactory
36 45
            .getLogger(DefaultScriptingManager.class);
37 46

  
38 47
    protected Map<String, ImageIcon> icons;
39
    protected List<RegisterSystemFolder> systemFolders = new ArrayList<RegisterSystemFolder>();
48
    protected List<RegisterSystemFolder> systemFolders = new ArrayList<>();
40 49
    protected ScriptEngineManager engineManager = null;
41 50
    private final SimpleBindings bindings = new SimpleBindings();
42 51
    private ScriptingHelpManager helpManager = null;
43 52
    private List<String> unitTypes = null;
44 53
    private ClassLoader classLoader = null;
45
    private List<File> libFolders = new ArrayList<File>();
54
    private List<File> libFolders = new ArrayList<>();
46 55
    private File home = null;
47
    private List<ScriptingFolder> alternativeUserFolders = new ArrayList<ScriptingFolder>();
56
    private List<ScriptingFolder> alternativeUserFolders = new ArrayList<>();
57
    private Map<String, String> extensionOfLanguage = null;
58
    private Map<String, String> languageOfExtension = null;
59
    private File packagesFolder;
48 60

  
49 61
    public DefaultScriptingManager() {
50 62
        this.classLoader = getClass().getClassLoader();
......
74 86
        createFolder(new File(home, "lib"));
75 87
    }
76 88

  
89
    @Override
77 90
    public File getHomeFolder() {
78 91
        if (!this.home.exists()) {
79 92
            createFolder(home);
......
82 95
        return this.home;
83 96
    }
84 97

  
98
    @Override
85 99
    public void setHomeFolder(File home) {
86 100
        if (home == null) {
87 101
            this.home = new File(System.getProperty("user.home"), ".gvsig-scripting");
......
106 120
    private void showEnginesInfo(ScriptEngineManager mgr) {
107 121
        if (LOG.isInfoEnabled()) {
108 122
            List<ScriptEngineFactory> factories = mgr.getEngineFactories();
109
            StringBuffer buffer = new StringBuffer();
110
            List<Object> values = new ArrayList<Object>();
123
            StringBuilder buffer = new StringBuilder();
124
            List<Object> values = new ArrayList<>();
111 125
            buffer.append("Scripting engines available:");
112 126
            for (ScriptEngineFactory factory : factories) {
113 127

  
......
160 174
    }
161 175

  
162 176
    protected ScriptEngine getEngine(String langName) {
163
        ScriptEngine engine = this.getEngineManager().getEngineByName(langName);
177
        ScriptEngineManager manager = this.getEngineManager();
178
        ScriptEngine engine = manager.getEngineByName(langName);
164 179
        engine.getBindings(ScriptContext.ENGINE_SCOPE).putAll(bindings);
165 180
        return engine;
166 181
    }
......
169 184
        return this.icons.get(name);
170 185
    }
171 186

  
172
    public Map<String, String> getSupportedLanguagesByExtension() {
187
    @Override
188
    public String getEngineNameByLanguage(String langName) {
173 189
        List<ScriptEngineFactory> factories
174 190
                = getEngineManager().getEngineFactories();
175
        Map<String, String> extToLang = new HashMap<String, String>();
176 191

  
177 192
        for (ScriptEngineFactory factory : factories) {
178
            List<String> extNames = factory.getExtensions();
179
            for (String name : extNames) {
180
                extToLang.put(".".concat(name), factory.getLanguageName());
193
            if (factory.getLanguageName().equalsIgnoreCase(langName)) {
194
                return factory.getEngineName();
181 195
            }
182 196
        }
183

  
184
        return extToLang;
197
        return null;
185 198
    }
186 199

  
187
    public Map<String, String> getExtensionsByLanguages() {
188
        Map<String, String> l = getSupportedLanguagesByExtension();
189
        Map<String, String> result = new HashMap<String, String>();
190
        Iterator<Map.Entry<String, String>> it = l.entrySet().iterator();
191
        while (it.hasNext()) {
192
            Map.Entry<String, String> pairs = it.next();
193
            result.put(pairs.getValue(), pairs.getKey());
200
    public ScriptEngine getEngineByLanguage(String langName) {
201
        List<ScriptEngineFactory> factories
202
                = getEngineManager().getEngineFactories();
203

  
204
        for (ScriptEngineFactory factory : factories) {
205
            if (factory.getLanguageName().equalsIgnoreCase(langName)) {
206
                return factory.getScriptEngine();
207
            }
194 208
        }
195
        return result;
209
        return null;
196 210
    }
197 211

  
212
    @Override
198 213
    public boolean validateUnitId(ScriptingFolder folder, String id) {
199 214
        List<ScriptingUnit> units = folder.getUnits();
200 215
        String fileName;
201 216
        String s[];
202 217
        String extension;
203
        for (int i = 0; i < units.size(); i++) {
204
            fileName = (units.get(i)).getId();
205
            s = fileName.split("\\.");
206
            extension = null;
207
            if (s.length > 1) {
208
                extension = "." + s[s.length - 1];
209
                fileName = fileName.substring(0, fileName.length() - extension.length());
210
            }
218
        for (ScriptingUnit unit : units) {
219
            fileName = unit.getId();
220
            fileName = FilenameUtils.getBaseName(fileName);
211 221
            if (fileName.equals(id)) {
212 222
                return false;
213 223
            }
......
215 225
        return true;
216 226
    }
217 227

  
218
    public static String getStringFromFile(String filename) {
219

  
220
        BufferedReader b = null;
221
        try {
222
            try {
223
                b = new BufferedReader(new FileReader(filename));
224
            } catch (FileNotFoundException e) {
225
                LOG.warn("Can't open file '" + filename + "'.", e);
226
            }
227
            StringBuffer sb = new StringBuffer();
228
            String str;
229
            try {
230
                while ((str = b.readLine()) != null) {
231
                    sb.append(str);
232
                    sb.append('\n');
233
                }
234
            } catch (IOException e) {
235
                LOG.warn("Can't read file '" + filename + "'.", e);
236
            }
237
            return sb.toString();
238
        } finally {
239
            if (b != null) {
240
                try {
241
                    b.close();
242
                } catch (IOException e) {
243
                    LOG.warn("Can't close file '" + filename + "'", e);
244
                }
245
                b = null;
246
            }
247
        }
248
    }
249

  
250 228
    public ScriptingScript createScript(ScriptingFolder folder, String id) {
251 229
        return this.createScript(folder, id, null);
252 230
    }
......
285 263
        return unit;
286 264
    }
287 265

  
288
    public ScriptingProject createProject(ScriptingFolder folder, String id) {
289
        LOG.warn("Projects can't be implementeds");
290
        return null;
291
    }
292

  
266
    @Override
293 267
    public ScriptingBaseScript getScript(File file) {
294 268
        ScriptingBaseScript script = (ScriptingBaseScript) this.getUnit(file);
295 269
        if (script == null) {
......
298 272
        return script;
299 273
    }
300 274

  
275
    @Override
301 276
    public ScriptingFolder getFolder(File file) {
302 277
        ScriptingFolder folder = (ScriptingFolder) this.getUnit(file);
303 278
        if (folder == null) {
......
307 282
    }
308 283

  
309 284
    public ScriptingUnit getUnit(File file) {
310
        ScriptingFolder folder = null;
311
        ScriptingUnit unit = null;
285
        ScriptingFolder folder;
286
        ScriptingUnit unit;
312 287

  
313 288
        if (file.isAbsolute()) {
314 289
            folder = new DefaultScriptingFolder(null, this, file.getParentFile());
......
330 305
        return null;
331 306
    }
332 307

  
308
    @Override
333 309
    public ScriptingFolder getSystemFolder() {
334 310
        return new SystemFolder(this);
335 311
    }
336 312

  
313
    @Override
337 314
    public ScriptingFolder getUserFolder() {
338 315
        return new UserFolder(this, this.getRootUserFolder());
339 316
    }
340 317

  
318
    @Override
341 319
    public ScriptingBaseScript getScript(String name) {
342 320
        return (ScriptingBaseScript) findScript(null, name);
343 321
    }
......
349 327
        if (name.trim().length() == 0) {
350 328
            return null;
351 329
        }
352
        ScriptingUnit unit = null;
330
        ScriptingUnit unit;
353 331
        if (folder == null) {
354 332
            unit = findScript(this.getUserFolder(), name);
355 333
            if (unit != null) {
......
376 354
        return null;
377 355
    }
378 356

  
357
    @Override
379 358
    public File getRootUserFolder() {
380 359
        return new File(this.getHomeFolder(), "scripts");
381 360
    }
382 361

  
362
    @Override
383 363
    public void registerSystemFolder(String name, File folder) {
384 364
        this.systemFolders.add(new RegisterSystemFolder(name, folder));
385 365
        LOG.info("Register system folder name '" + name + "' folder " + folder.getAbsolutePath() + "'");
......
390 370
        return this.systemFolders;
391 371
    }
392 372

  
373
    @Override
393 374
    public List<ScriptingFolder> getAlternativeUserFolders() {
394 375
        return this.alternativeUserFolders;
395 376
    }
396 377

  
378
    @Override
397 379
    public void addAlternativeUserFolder(File f, String name, String description) {
398 380
        UserFolder x = new UserFolder(this, f);
399
        x.setName(name); 
381
        x.setName(name);
400 382
        x.setDescription(description);
401
	x.setId("UserFolder_"+this.alternativeUserFolders.size()+1);
383
        x.setId("UserFolder_" + this.alternativeUserFolders.size() + 1);
402 384
        this.alternativeUserFolders.add(x);
403 385
    }
404 386

  
405
    public static class RegisterSystemFolder {
406

  
407
        public String name;
408
        public File folder;
409

  
410
        public RegisterSystemFolder(String name, File folder) {
411
            this.name = name;
412
            this.folder = folder;
387
    @Override
388
    public String getExtensionOfLanguage(String langName) {
389
        if (this.extensionOfLanguage == null) {
390
            Map<String, String> extensionOfLanguage = new HashMap<>();
391
            List<ScriptEngineFactory> factories = getEngineManager().getEngineFactories();
392
            for (ScriptEngineFactory factory : factories) {
393
                List<String> extensions = factory.getExtensions();
394
                if (extensions != null && !extensions.isEmpty()) {
395
                    extensionOfLanguage.put(
396
                            factory.getLanguageName().toLowerCase(),
397
                            extensions.get(0).toLowerCase()
398
                    );
399
                }
400
            }
401
            this.extensionOfLanguage = extensionOfLanguage;
413 402
        }
403
        if (langName == null) {
404
            return null;
405
        }
406
        langName = langName.toLowerCase();
407
        return this.extensionOfLanguage.get(langName);
414 408
    }
415 409

  
416
    public String getExtensionByLanguage(String langName) {
417
        Map<String, String> extensions = getSupportedLanguagesByExtension();
418
        Iterator<String> iterator = extensions.keySet().iterator();
419
        String extension = null;
420
        String s = null;
410
    @Override
411
    public List<String> getSupportedLanguages() {
412
        List<String> languages = new ArrayList<>();
421 413

  
422
        while (iterator.hasNext()) {
423
            extension = iterator.next();
424
            s = extensions.get(extension);
425
            if (s.equalsIgnoreCase(langName)) {
426
                return extension;
427
            }
414
        languages.addAll(this.extensionOfLanguage.keySet());
415
        Collections.sort(languages);
416
        return languages;
417
    }
428 418

  
419
    public String getLanguageOfExtension(String extension) {
420
        if (extension == null) {
421
            return null;
429 422
        }
430

  
431
        return null;
423
        extension = extension.toLowerCase();
424
        if (extension.startsWith(".")) {
425
            extension = extension.substring(1);
426
        }
427
        if (this.languageOfExtension == null) {
428
            Map<String, String> languageOfExtension = new HashMap<>();
429
            List<ScriptEngineFactory> factories = getEngineManager().getEngineFactories();
430
            for (ScriptEngineFactory factory : factories) {
431
                List<String> extensions = factory.getExtensions();
432
                if (extensions != null) {
433
                    for (String extension1 : extensions) {
434
                        languageOfExtension.put(
435
                                extension1.toLowerCase(),
436
                                factory.getLanguageName().toLowerCase()
437
                        );
438
                    }
439
                }
440
            }
441
            this.languageOfExtension = languageOfExtension;
442
        }
443
        return this.languageOfExtension.get(extension);
432 444
    }
433 445

  
434 446
    public Object get(String key) {
......
440 452

  
441 453
    }
442 454

  
455
    @Override
443 456
    public ScriptingHelpManager getHelpManager() {
444 457
        if (this.helpManager == null) {
445 458
            this.helpManager = new DefaultScriptingHelpManager(this);
......
447 460
        return this.helpManager;
448 461
    }
449 462

  
463
    @Override
450 464
    public ScriptingUnit createUnit(String unitType, ScriptingFolder folder, String id) {
451 465
        return createUnit(unitType, folder, id, null);
452 466
    }
453 467

  
468
    @Override
454 469
    public ScriptingUnit createUnit(String unitType, ScriptingFolder folder, String id, String language) {
455 470
        if (unitType.equals(UNIT_SCRIPT)) {
456 471
            return this.createScript(folder, id, language);
......
461 476
        if (unitType.equals(UNIT_FOLDER)) {
462 477
            return this.createFolder(folder, id);
463 478
        }
464
        if (unitType.equals(UNIT_PROJECT)) {
465
            return null;
466
        }
467 479
        return null;
468 480
    }
469 481

  
482
    @Override
470 483
    public List<String> getUnitTypes() {
471 484
        if (this.unitTypes == null) {
472
            this.unitTypes = new ArrayList<String>();
485
            this.unitTypes = new ArrayList<>();
473 486
            this.unitTypes.add(UNIT_SCRIPT);
474 487
            this.unitTypes.add(UNIT_DIALOG);
475
            this.unitTypes.add(UNIT_PROJECT);
476 488
            this.unitTypes.add(UNIT_FOLDER);
477 489
        }
478 490
        return this.unitTypes;
479 491
    }
480 492

  
493
    @Override
481 494
    public void addLibFolder(File lib) {
482 495
        if (lib.exists()) {
483 496
            LOG.info("Add scripting lib folder '" + lib.getAbsolutePath() + "'");
......
490 503
    public List<File> getLibFolders() {
491 504
        return this.libFolders;
492 505
    }
506

  
507
    public ProviderFactory getInstallerFactory() {
508
        return new ScriptingInstallerProviderFactory();
509
    }
510

  
511
    @Override
512
    public File getPackagesFolder() {
513
        return this.packagesFolder;
514
    }
515

  
516
    @Override
517
    public void setPackagesFolder(File folder) {
518
        this.packagesFolder = folder;
519
    }
520

  
493 521
}

Also available in: Unified diff