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
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