Revision 1120 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
10 10
import java.util.List;
11 11
import java.util.Map;
12 12
import java.util.Set;
13
import java.util.regex.Matcher;
14
import java.util.regex.Pattern;
13 15

  
14 16
import javax.script.ScriptContext;
15 17
import javax.script.ScriptEngine;
......
17 19
import javax.script.ScriptEngineManager;
18 20
import javax.script.SimpleBindings;
19 21
import javax.swing.ImageIcon;
22
import org.apache.commons.io.IOUtils;
20 23

  
21 24
import org.apache.commons.lang3.StringUtils;
22 25
import org.gvsig.scripting.DataFolderFound;
......
28 31
import org.gvsig.scripting.ScriptingScript;
29 32
import org.gvsig.scripting.ScriptingUnit;
30 33
import org.gvsig.tools.packageutils.Version;
34
import org.gvsig.tools.resourcesstorage.ResourcesStorage;
31 35
import org.gvsig.tools.script.Script;
32 36
import org.gvsig.tools.service.spi.ProviderFactory;
33 37
import org.gvsig.tools.util.FolderSet;
......
313 317
    
314 318
    @Override
315 319
    public Script createScript(String name, String code, String languaje) {
316
        ScriptingScript script = new DefaultScriptingScript(this.getUserFolder(), this, name);
320
        ScriptingScript script = new DefaultScriptingScript(this.getUserFolder(), this, name, languaje);
317 321
        script.setCode(code);
318 322
        script.setSaved(true);
319 323
        return script;        
......
381 385
        }
382 386
    }
383 387

  
388
    private static final Pattern RE_LANG = Pattern.compile(".*lang[:]\\s*([a-zA-Z_][a-zA-Z_0-9]*)");
389
    private static final Pattern RE_ENCODING = Pattern.compile(".*encoding[:]\\s*([a-zA-Z_][a-zA-Z_0-9]*)");
390
    
391
    public Script loadScript(ResourcesStorage storage, String name) {
392
        ResourcesStorage.Resource res = null;
393
        try {
394
            if( storage==null ) {
395
                return null;
396
            }
397
            res = storage.getResource(name);
398
            if( res == null || !res.exists() ) {
399
                return null;
400
            }
401
            byte[] head_bytes = new byte[500];
402
            IOUtils.read(res.asInputStream(), head_bytes);
403
            IOUtils.closeQuietly(res);
404
            String head = new String(head_bytes);
405
            if( StringUtils.isEmpty(head) ) {
406
                return null;
407
            }
408
            head = StringUtils.split("\n")[0];
409
            
410
            String lang = "python";
411
            String encoding = null;
412
            Matcher m = RE_LANG.matcher(head);
413
            if( m.groupCount()==1 ) {
414
                String s = m.group(1);
415
                if( !StringUtils.isBlank(s) ) {
416
                    lang = s;
417
                }
418
            }
419
            m = RE_ENCODING.matcher(head);
420
            if( m.groupCount()==1 ) {
421
                String s = m.group(1);
422
                if( !StringUtils.isBlank(s) ) {
423
                    encoding = s;
424
                }
425
            }
384 426

  
427
            String source;
428
            if( StringUtils.isBlank(encoding) ) {
429
                source = IOUtils.toString(res.asInputStream());
430
            } else {
431
                source = IOUtils.toString(res.asInputStream(), encoding);
432
            }
433
            Script script = this.createScript(name, source, lang);
434
            return script;
435
        } catch (Exception ex) {
436
            LOG.warn("Can't load script from resources storage.", ex);
437
            return null;
438
        } finally {
439
            IOUtils.closeQuietly(res);
440
        }
441
    }
385 442
    
386 443
    @Override
387 444
    public ScriptingFolder getFolder(File file) {

Also available in: Unified diff