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/DefaultScriptingFolder.java

View differences:

DefaultScriptingFolder.java
5 5
import java.io.IOException;
6 6
import java.net.URL;
7 7
import java.util.ArrayList;
8
import java.util.Iterator;
9 8
import java.util.List;
10
import java.util.Map;
11 9
import java.util.Arrays;
12 10
import java.util.Comparator;
13 11

  
......
15 13
import org.apache.commons.io.FilenameUtils;
16 14
import org.gvsig.scripting.ScriptingFolder;
17 15
import org.gvsig.scripting.ScriptingManager;
18
import org.gvsig.scripting.ScriptingScript;
19 16
import org.gvsig.scripting.ScriptingUnit;
20 17
import org.ini4j.Ini;
21
import org.python.core.util.FileUtil;
22 18
import org.slf4j.Logger;
23 19
import org.slf4j.LoggerFactory;
24 20

  
21
public class DefaultScriptingFolder extends AbstractUnit implements ScriptingFolder {
25 22

  
26
public class DefaultScriptingFolder extends AbstractUnit implements ScriptingFolder{
23
    private static final Logger logger = LoggerFactory.getLogger(DefaultScriptingFolder.class);
24
    protected File folder;
27 25

  
28
	private static final Logger logger = LoggerFactory.getLogger(DefaultScriptingFolder.class);
29
	protected File folder;
26
    public DefaultScriptingFolder(ScriptingFolder parent, ScriptingManager manager) {
27
        this(parent, manager, (File) null);
28
    }
30 29

  
31
	public DefaultScriptingFolder(ScriptingFolder parent, ScriptingManager manager) {
32
		this(parent, manager,(File)null);
33
	}
30
    public DefaultScriptingFolder(ScriptingFolder parent, ScriptingManager manager, File folder) {
31
        super(parent, ScriptingManager.UNIT_FOLDER, manager, null);
32
        this.folder = folder;
33
        if (folder != null) {
34
            this.setId(folder.getName());
35
        }
36
    }
34 37

  
35
	public DefaultScriptingFolder(ScriptingFolder parent, ScriptingManager manager, File folder) {
36
		super(parent, ScriptingManager.UNIT_FOLDER, manager, null);
37
		this.folder = folder;
38
		if( folder != null ) {
39
			this.setId(folder.getName());
40
		}
41
	}
42
	
43
	public DefaultScriptingFolder(ScriptingFolder parent, ScriptingManager manager, URL folder) {
44
		super(parent, ScriptingManager.UNIT_FOLDER, manager, null);
45
		if(!folder.getProtocol().equalsIgnoreCase("file")){
46
			throw new RuntimeException("Protocol URL not supported");
47
		}
48
		File f = new File(folder.getPath());
49
		this.setId(f.getName());
50
		this.folder = f;
51
	}
38
    public DefaultScriptingFolder(ScriptingFolder parent, ScriptingManager manager, URL folder) {
39
        super(parent, ScriptingManager.UNIT_FOLDER, manager, null);
40
        if (!folder.getProtocol().equalsIgnoreCase("file")) {
41
            throw new RuntimeException("Protocol URL not supported");
42
        }
43
        File f = new File(folder.getPath());
44
        this.setId(f.getName());
45
        this.folder = f;
46
    }
52 47

  
53
	public void create(ScriptingFolder folder, String id) {
54
		this.getFile().mkdir();
55
	}
56
	
57
	public File getFile(){
58
		return this.folder;
59
	}	
60
	
61
	public ScriptingFolder getParent() {
62
		ScriptingFolder parent = super.getParent();
63
		if( parent != null ) {
64
			return parent;
65
		}
66
		return new DefaultScriptingFolder(null, manager, this.folder.getParentFile());
67
	}
68
	
69
	private String getTypenameFromInf(File file) {
70
		Ini inf = null;
71
		try {
72
			inf = new Ini(file);
73
		} catch (Exception e) {
74
			logger.warn("Can't load 'inf' file '"+file.getAbsolutePath()+"'.",e);
75
		}
76
		String typename = inf.get("Unit", "type");
77
		if( typename == null ) {
78
			typename = ScriptingManager.UNIT_SCRIPT;
79
		}
80
		return typename;
81
	}
82
	
83
	public Unit getUnit(File afile) {
84
		Unit unit=null;
85
		
86
		File file = null;
87
		if( afile.isAbsolute() ) {
88
			file = afile.getAbsoluteFile();
89
		} else {
90
			file = new File( this.getFile(),afile.getPath());
91
		}
92
		
93
		String id = FilenameUtils.getBaseName(afile.getAbsolutePath());
94
		ScriptingFolder parent = null;
95
		if( FilenameUtils.equalsNormalizedOnSystem(this.getFile().getAbsolutePath(), file.getParentFile().getAbsolutePath() )  ) {
96
			parent = this;
97
		} else {
98
			parent = new DefaultScriptingFolder(null, manager, file.getParentFile());
99
		}
48
    @Override
49
    public void create(ScriptingFolder folder, String id) {
50
        this.getFile().mkdir();
51
    }
100 52

  
101
		if (file.isDirectory()){
102
			unit = (Unit) this.manager.createUnit(ScriptingManager.UNIT_FOLDER, parent, id);
103
			
104
		} else if( file.isFile() ) {
105
			if( !file.getName().endsWith(".inf") ) {
106
				file = new File( file.getParentFile(),
107
						FilenameUtils.getBaseName(file.getName())+".inf");
108
			}
109
			if( !file.exists() ) {
110
				logger.warn("Can't get Unit, file '"+file.getAbsolutePath()+"' not exists.");
111
				return null;
112
			}
113
			unit = (Unit) this.manager.createUnit(getTypenameFromInf(file), parent, id);
114
		}
115
		return unit;
116
	}
53
    @Override
54
    public File getFile() {
55
        return this.folder;
56
    }
117 57

  
58
    @Override
59
    public ScriptingFolder getParent() {
60
        ScriptingFolder parent = super.getParent();
61
        if (parent != null) {
62
            return parent;
63
        }
64
        return new DefaultScriptingFolder(null, manager, this.folder.getParentFile());
65
    }
66

  
67
    private String getTypenameFromInf(File file) {
68
        if (file == null) {
69
            logger.warn("Can't load 'inf' file, file is null.");
70
            return null;
71
        }
72
        try {
73
            Ini inf = new Ini(file);
74
            String typename = inf.get("Unit", "type");
75
            if (typename == null) {
76
                return ScriptingManager.UNIT_SCRIPT;
77
            }
78
            return typename;
79
        } catch (Exception e) {
80
            logger.warn("Can't load 'inf' file '" + file.getAbsolutePath() + "'.", e);
81
            return null;
82
        }
83

  
84
    }
85

  
86
    @Override
87
    public Unit getUnit(File afile) {
88
        Unit unit = null;
89

  
90
        File file;
91
        if (afile.isAbsolute()) {
92
            file = afile.getAbsoluteFile();
93
        } else {
94
            file = new File(this.getFile(), afile.getPath());
95
        }
96

  
97
        String id = FilenameUtils.getBaseName(afile.getAbsolutePath());
98
        ScriptingFolder parent;
99
        if (FilenameUtils.equalsNormalizedOnSystem(this.getFile().getAbsolutePath(), file.getParentFile().getAbsolutePath())) {
100
            parent = this;
101
        } else {
102
            parent = new DefaultScriptingFolder(null, manager, file.getParentFile());
103
        }
104

  
105
        if (file.isDirectory()) {
106
            unit = (Unit) this.manager.createUnit(ScriptingManager.UNIT_FOLDER, parent, id);
107

  
108
        } else if (file.isFile()) {
109
            if (!file.getName().endsWith(".inf")) {
110
                file = new File(file.getParentFile(),
111
                        FilenameUtils.getBaseName(file.getName()) + ".inf");
112
            }
113
            if (!file.exists()) {
114
                logger.warn("Can't get Unit, file '" + file.getAbsolutePath() + "' not exists.");
115
                return null;
116
            }
117
            unit = (Unit) this.manager.createUnit(getTypenameFromInf(file), parent, id);
118
        }
119
        return unit;
120
    }
121

  
122
    @Override
118 123
    public List<ScriptingUnit> getUnits() {
119
		// Listar los ficheros del directorio y pasarlo a un vector para ordenarlo
120
		List<ScriptingUnit> ol = new ArrayList<ScriptingUnit>();
121
		File[] files = this.folder.listFiles(new FilenameFilter() {
122
			public boolean accept(File arg0, String arg1) {
123
				File f = new File(arg0,arg1);
124
				if( !f.canRead() ) {
125
					return false;
126
				}
127
				if( f.isHidden() ) {
128
					return false;
129
				}
130
				if( f.isDirectory() ) {
131
					return true;
132
				}
133
				String ext = FilenameUtils.getExtension(f.getAbsolutePath());
134
				return ext.equalsIgnoreCase("inf");
135
			}
136
		});
137
		if (files != null){
138
			Arrays.sort( files, new Comparator<File>() {
139
				public int compare(File f1, File f2) {
140
					if (f1.isDirectory() && !f2.isDirectory()) {
141
					    return -1;
142
					} else if (!f1.isDirectory() && f2.isDirectory()) {
143
					    return 1;
144
					} else {
145
					    return f1.getName().toLowerCase().compareTo(f2.getName().toLowerCase());				
146
					}
147
				}
148
			});
149
			for (int i = 0; i < files.length; i++){
150
				File f = files[i];
151
				ScriptingUnit unit = null;
152
				try {
153
					unit = this.getUnit(f);
154
				} catch(Exception ex) {
155
					logger.warn("Can't create unit from file '"+f.getAbsolutePath()+"'.");
156
				}
157
				if (unit!=null){
158
					ol.add(unit);
159
				}
160
			}
161
		}
162
		return ol;
163
	}
164
	
165
	public void add(ScriptingUnit unit) {
166
		unit.move(this);
167
	}
124
        List<ScriptingUnit> ol = new ArrayList<>();
125
        File[] files = this.folder.listFiles(new FilenameFilter() {
126
            @Override
127
            public boolean accept(File arg0, String arg1) {
128
                File f = new File(arg0, arg1);
129
                if (!f.canRead() || f.isHidden()) {
130
                    return false;
131
                }
132
                if (f.isDirectory()) {
133
                    return true;
134
                }
135
                String ext = FilenameUtils.getExtension(f.getName());
136
                return "inf".equalsIgnoreCase(ext);
137
            }
138
        });
139
        if (files != null) {
140
            Arrays.sort(files, new Comparator<File>() {
141
                @Override
142
                public int compare(File f1, File f2) {
143
                    if (f1.isDirectory() && !f2.isDirectory()) {
144
                        return -1;
145
                    } else if (!f1.isDirectory() && f2.isDirectory()) {
146
                        return 1;
147
                    } else {
148
                        return f1.getName().toLowerCase().compareTo(f2.getName().toLowerCase());
149
                    }
150
                }
151
            });
152
            for (File f : files) {
153
                try {
154
                    ScriptingUnit unit = this.getUnit(f);
155
                    ol.add(unit);
156
                } catch (Exception ex) {
157
                    logger.warn("Can't create unit from file '" + f.getAbsolutePath() + "'.");
158
                }
159
            }
160
        }
161
        return ol;
162
    }
168 163

  
169
	public void remove(ScriptingUnit unit) {
170
		unit.remove();
171
	}
164
    public List<ScriptingFolder> getUnitFolders() {
165
        List<ScriptingFolder> ol = new ArrayList<>();
166
        File[] files = this.folder.listFiles(new FilenameFilter() {
167
            @Override
168
            public boolean accept(File arg0, String arg1) {
169
                File f = new File(arg0, arg1);
170
                return f.isDirectory();
171
            }
172
        });
173
        if (files != null) {
174
            Arrays.sort(files, new Comparator<File>() {
175
                @Override
176
                public int compare(File f1, File f2) {
177
                    return f1.getName().toLowerCase().compareTo(f2.getName().toLowerCase());
178
                }
179
            });
180
            for (File f : files) {
181
                try {
182
                    ScriptingFolder unit = (ScriptingFolder) this.getUnit(f);
183
                    ol.add(unit);
184
                } catch (Exception ex) {
185
                    logger.warn("Can't create folder from '" + f.getAbsolutePath() + "'.");
186
                }
187
            }
188
        }
189
        return ol;
190
    }
172 191

  
173
	@Override
192
    @Override
193
    public void add(ScriptingUnit unit) {
194
        unit.move(this);
195
    }
196

  
197
    @Override
198
    public void remove(ScriptingUnit unit) {
199
        unit.remove();
200
    }
201

  
202
    @Override
174 203
    public void load(ScriptingFolder folder, String id) {
175
		DefaultScriptingFolder parent = (DefaultScriptingFolder) folder;
176
		this.setParent(folder);
177
		this.setId(id);	
178
		this.folder = new File(parent.getFile(),id);
179
	}
180
	
181
	public String[] getIconNames() {
182
		return new String[]{"folder", "folder-drag-accept"};
183
	}
204
        DefaultScriptingFolder parent = (DefaultScriptingFolder) folder;
205
        this.setParent(folder);
206
        this.setId(id);
207
        this.folder = new File(parent.getFile(), id);
208
    }
184 209

  
185
	public boolean remove() {
186
		boolean r = true;
187
		File folder = this.getParent().getFile();
188
		File f = null;
189
		try {
190
			f = new File(folder,this.getId());
191
			FileUtils.forceDelete(f);
192
		} catch (IOException e) {
193
			logger.warn("Can't remove project '"+f.getAbsolutePath()+"'.",e);
194
			r = false;
195
		}
196
		return r;
197
	}
198
	
199
	public void create(ScriptingFolder folder, String id, String language) {
200
		File f = new File(folder.getFile(),id);
201
		f.mkdir();
202
		this.load(folder, id);
203
	}
210
    @Override
211
    public String[] getIconNames() {
212
        return new String[]{"folder", "folder-drag-accept"};
213
    }
214

  
215
    @Override
216
    public boolean remove() {
217
        File folder = this.getParent().getFile();
218
        File f = new File(folder, this.getId());
219
        try {
220
            FileUtils.forceDelete(f);
221
            return true;
222
        } catch (IOException e) {
223
            logger.warn("Can't remove folder '" + f.getAbsolutePath() + "'.", e);
224
            return false;
225
        }
226
    }
227

  
228
    @Override
229
    public void create(ScriptingFolder folder, String id, String language) {
230
        File f = new File(folder.getFile(), id);
231
        f.mkdir();
232
        this.load(folder, id);
233
    }
204 234
}

Also available in: Unified diff