Revision 590 org.gvsig.scripting/trunk/org.gvsig.scripting/org.gvsig.scripting.lib/org.gvsig.scripting.lib.impl/src/main/java/org/gvsig/scripting/impl/DefaultScriptingFolder.java

View differences:

DefaultScriptingFolder.java
11 11

  
12 12
import org.apache.commons.io.FileUtils;
13 13
import org.apache.commons.io.FilenameUtils;
14
import org.apache.commons.lang3.StringUtils;
14 15
import org.gvsig.scripting.ScriptingFolder;
15 16
import org.gvsig.scripting.ScriptingManager;
16 17
import org.gvsig.scripting.ScriptingUnit;
......
22 23

  
23 24
    private static final Logger logger = LoggerFactory.getLogger(DefaultScriptingFolder.class);
24 25
    protected File folder;
26
    private boolean islink;
25 27

  
26 28
    public DefaultScriptingFolder(ScriptingFolder parent, ScriptingManager manager) {
27 29
        this(parent, manager, (File) null);
......
33 35
        if (folder != null) {
34 36
            this.setId(folder.getName());
35 37
        }
36
    }
38
        this.islink = false;
39
   }
37 40

  
38 41
    public DefaultScriptingFolder(ScriptingFolder parent, ScriptingManager manager, URL folder) {
39 42
        super(parent, ScriptingManager.UNIT_FOLDER, manager, null);
......
43 46
        File f = new File(folder.getPath());
44 47
        this.setId(f.getName());
45 48
        this.folder = f;
49
        this.islink = false;
46 50
    }
47 51

  
48 52
    @Override
......
154 158
                    ScriptingUnit unit = this.getUnit(f);
155 159
                    ol.add(unit);
156 160
                } catch (Exception ex) {
157
                    logger.warn("Can't create unit from file '" + f.getAbsolutePath() + "'.");
161
                    logger.warn("Can't create unit from file '" + f.getAbsolutePath() + "'.",ex);
158 162
                }
159 163
            }
160 164
        }
161 165
        return ol;
162 166
    }
163 167

  
168
    @Override
164 169
    public List<ScriptingFolder> getUnitFolders() {
165 170
        List<ScriptingFolder> ol = new ArrayList<>();
166 171
        File[] files = this.folder.listFiles(new FilenameFilter() {
......
226 231
            try {
227 232
                prefs = new Ini(f);
228 233
                loadInf(prefs);
229
                String path = getInfString(
234
                String spath = getInfString(
230 235
                        prefs, 
231 236
                        ScriptingManager.UNIT_FOLDER, 
232 237
                        "path",
233
                        this.folder.getAbsolutePath()
238
                        null
234 239
                );
235
                File ff = new File(path);
236
                if( ff.isAbsolute() ) {
237
                    this.folder = ff;
240
                if( StringUtils.isEmpty(spath) ) {
241
                    this.folder = this.folder.getAbsoluteFile();
242
                    this.islink = false;
238 243
                } else {
239
                    this.folder = new File(parent.getFile(), path);
244
                    File path = new File(spath);
245
                    if( path.isAbsolute() ) {
246
                        this.folder = path;
247
                    } else {
248
                        this.folder = new File(parent.getFile(), spath);
249
                    }
250
                    this.islink = true;
240 251
                }
241 252
            } catch (Exception e) {
242 253
                logger.warn("Can't load 'inf' file '" + f.getAbsolutePath() + "'.", e);
......
251 262

  
252 263
    @Override
253 264
    public boolean remove() {
254
        File folder = this.getParent().getFile();
255
        File f = new File(folder, this.getId());
265
        File f = this.getFile();
256 266
        try {
257
            FileUtils.forceDelete(f);
267
            File infofile = getFileResource(".inf");
268
            if( infofile.exists() ) {
269
                FileUtils.forceDelete(infofile);
270
            }            
271
            if( !this.islink ) {
272
                if( f!=null ) {
273
                    FileUtils.forceDelete(this.getFile());
274
                }
275
            }
258 276
            return true;
259
        } catch (IOException e) {
260
            logger.warn("Can't remove folder '" + f.getAbsolutePath() + "'.", e);
277
        } catch (Throwable e) {
278
            logger.warn("Can't remove folder '" + ((f==null)?"unknown":f.getAbsolutePath()) + "'.", e);
261 279
            return false;
262 280
        }
263 281
    }
......
268 286
        f.mkdir();
269 287
        this.load(folder, id);
270 288
    }
289

  
290
    @Override
291
    public boolean move(ScriptingFolder target) {
292
        if (! manager.validateUnitId(target, this.getId()) ) {
293
            logger.info("Can't move folder '"+this.getId()+"' to '"+target.getFile().getAbsolutePath()+"', is not valid.");
294
            return false;
295
        }
296
        try {
297
            File infofile = getFileResource(".inf");
298
            if( infofile.exists() ) {
299
                FileUtils.moveFileToDirectory(infofile, target.getFile(), true);
300
            }
301
            if( !this.islink ) {
302
                FileUtils.moveDirectoryToDirectory(this.getFile(), target.getFile(),true);
303
            }
304
            this.parent = target;
305
            this.load(target, id);
306
        } catch (IOException ex) {
307
            logger.info("Can't move folder '"+this.getId()+"' to '"+target.getFile().getAbsolutePath()+"', "+ex.getMessage(),ex);
308
            return false;
309
        }
310
        return true;
311
    }
312

  
313
    @Override
314
    public boolean rename(String newId) {
315
        if (! manager.validateUnitId(this.getParent(), newId) ) {
316
            logger.info("Can't rename folder '"+this.getId()+"', target id '"+newId+"' is not valid.");
317
            return false;
318
        }
319
        try {
320
            File target = this.getParent().getFile();
321
            File infofile = getFileResource(".inf");
322
            if( this.islink ) {
323
                FileUtils.moveFile(infofile, new File(target,newId));
324
            } else {
325
                FileUtils.moveDirectory(this.getFile(), new File(target,newId));
326
                if( infofile.exists() ) {
327
                    FileUtils.moveFile(infofile, new File(target,newId));
328
                }
329
            }
330
            this.setId(newId);
331
            this.load(this.getParent(), id);
332
        } catch (IOException ex) {
333
            logger.info("Can't rename folder '"+this.getId()+"' to '"+newId+"', "+ex.getMessage(),ex);
334
            return false;
335
        }        
336
        return true;
337
    }
338
    
339
    
271 340
}

Also available in: Unified diff