Revision 989 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
17 17
import javax.script.SimpleBindings;
18 18
import javax.swing.ImageIcon;
19 19

  
20
import org.apache.commons.io.FileUtils;
21 20
import org.apache.commons.lang3.StringUtils;
22 21
import org.gvsig.scripting.ScriptingBaseScript;
23 22
import org.gvsig.scripting.ScriptingDialog;
......
360 359
        return script;
361 360
    }
362 361

  
362
    
363 363
    @Override
364 364
    public ScriptingFolder getFolder(File file) {
365
        if( file == null ) {
366
            throw new IllegalArgumentException("file argument can't be null");
367
        }
368
        file = this.getLinkSource(file);
369
        if( FileUtils.isSameFile(this.getRootUserFolder(),file) ) {
370
            return this.getUserFolder();
371
        }
372
        
365 373
        ScriptingFolder folder = (ScriptingFolder) this.getUnit(file);
366 374
        if (folder == null) {
367
            throw new RuntimeException(file.getAbsolutePath());
375
            throw new IllegalArgumentException("Can't get ScriptFolder from '"+file.getAbsolutePath()+"'.");
368 376
        }
369 377
        return folder;
370 378
    }
......
660 668
        this.packagesFolder = folder;
661 669
    }
662 670

  
671
    @Override
672
    public ScriptingFolder createLink(String name, File link, String targetPathName) {
673
        StringBuilder contents = new StringBuilder();        
674
        contents.append("[Unit]\n")
675
            .append("type = Folder\n")
676
            .append("name = ").append(name).append("\n")
677
            .append("description =\n")
678
            .append("createdBy =\n")
679
            .append("version =\n")
680
            .append("\n")
681
            .append("[Folder]\n")
682
            .append("path =").append(targetPathName).append("\n")
683
            .append("\n\n");
684

  
685
        if( link.isDirectory() ) {
686
            link = new File(link,name+".inf");
687
        } else if( !link.getName().endsWith(".inf") ) {
688
            link = new File( link.getPath() + ".inf");
689
        }
690
        if( !link.exists() ) {
691
            try {
692
                FileUtils.writeStringToFile(link, contents.toString());
693
            } catch (IOException ex) {
694
                LOG.warn("Can't create ScriptingFolder file in '" + link.getAbsolutePath() + "'.", ex);
695
            }
696
        }
697
        ScriptingFolder folder = this.getFolder(link);
698
        return folder;
699
    }
700

  
701
    @Override
702
    public ScriptingFolder createLink(String name, ScriptingFolder link, String targetPathName) {
703
        return this.createLink(name, link.getFile(), targetPathName);
704
    }
705

  
706
    private Map<File,File> links = new HashMap<>();
707
    
708
    public void addLink(File source, File target) {    
709
        this.links.put(FileUtils.getRealFile(target), source);
710
    }
711
    
712
    public File getLinkSource(File target) {
713
        File source = this.links.get(FileUtils.getRealFile(target));
714
        if( source == null ) {
715
            return target;
716
        }
717
        if( source.exists() ) {
718
            return source;
719
        }
720
        return target;
721
    }
722
    
723
    public boolean isInUserFolder(File f) {
724
        if( FileUtils.isSubfolder(this.getRootUserFolder(), f) ) {
725
            return true;
726
        }
727
        for( File file : this.links.keySet()) {
728
            if( FileUtils.isSubfolder(file, f) ) {
729
                return true;
730
            }
731
        }
732
        return false;
733
    }
663 734
}

Also available in: Unified diff