Revision 1084
org.gvsig.scripting/trunk/org.gvsig.scripting/org.gvsig.scripting.app/org.gvsig.scripting.app.mainplugin/src/main/java/org/gvsig/scripting/app/extension/DataFoldersRecoverPanelView.xml | ||
---|---|---|
1 |
<?xml version="1.0" encoding="UTF-8"?> |
|
2 |
|
|
3 |
<object classname="com.jeta.forms.store.memento.FormPackage"> |
|
4 |
<at name="fileversion"> |
|
5 |
<object classname="com.jeta.forms.store.memento.FormsVersion2"> |
|
6 |
<at name="major">2</at> |
|
7 |
<at name="minor">0</at> |
|
8 |
<at name="sub">0</at> |
|
9 |
</object> |
|
10 |
</at> |
|
11 |
<at name="form"> |
|
12 |
<object classname="com.jeta.forms.store.memento.FormMemento"> |
|
13 |
<super classname="com.jeta.forms.store.memento.ComponentMemento"> |
|
14 |
<at name="cellconstraints"> |
|
15 |
<object classname="com.jeta.forms.store.memento.CellConstraintsMemento"> |
|
16 |
<at name="column">1</at> |
|
17 |
<at name="row">1</at> |
|
18 |
<at name="colspan">1</at> |
|
19 |
<at name="rowspan">1</at> |
|
20 |
<at name="halign">default</at> |
|
21 |
<at name="valign">default</at> |
|
22 |
<at name="insets" object="insets">0,0,0,0</at> |
|
23 |
</object> |
|
24 |
</at> |
|
25 |
<at name="componentclass">com.jeta.forms.gui.form.FormComponent</at> |
|
26 |
</super> |
|
27 |
<at name="id">H6de2c5D1689639f40aLL8000</at> |
|
28 |
<at name="rowspecs">CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE</at> |
|
29 |
<at name="colspecs">FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:NONE</at> |
|
30 |
<at name="components"> |
|
31 |
<object classname="java.util.LinkedList"> |
|
32 |
<item > |
|
33 |
<at name="value"> |
|
34 |
<object classname="com.jeta.forms.store.memento.BeanMemento"> |
|
35 |
<super classname="com.jeta.forms.store.memento.ComponentMemento"> |
|
36 |
<at name="cellconstraints"> |
|
37 |
<object classname="com.jeta.forms.store.memento.CellConstraintsMemento"> |
|
38 |
<at name="column">2</at> |
|
39 |
<at name="row">2</at> |
|
40 |
<at name="colspan">1</at> |
|
41 |
<at name="rowspan">1</at> |
|
42 |
<at name="halign">default</at> |
|
43 |
<at name="valign">default</at> |
|
44 |
<at name="insets" object="insets">0,0,0,0</at> |
|
45 |
</object> |
|
46 |
</at> |
|
47 |
<at name="componentclass">com.jeta.forms.gui.form.StandardComponent</at> |
|
48 |
</super> |
|
49 |
<at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at> |
|
50 |
<at name="beanclass">com.jeta.forms.components.label.JETALabel</at> |
|
51 |
<at name="beanproperties"> |
|
52 |
<object classname="com.jeta.forms.store.memento.PropertiesMemento"> |
|
53 |
<at name="classname">com.jeta.forms.components.label.JETALabel</at> |
|
54 |
<at name="properties"> |
|
55 |
<object classname="com.jeta.forms.store.support.PropertyMap"> |
|
56 |
<at name="border"> |
|
57 |
<object classname="com.jeta.forms.store.properties.CompoundBorderProperty"> |
|
58 |
<super classname="com.jeta.forms.store.properties.BorderProperty"> |
|
59 |
<at name="name">border</at> |
|
60 |
</super> |
|
61 |
<at name="borders"> |
|
62 |
<object classname="java.util.LinkedList"> |
|
63 |
<item > |
|
64 |
<at name="value"> |
|
65 |
<object classname="com.jeta.forms.store.properties.DefaultBorderProperty"> |
|
66 |
<super classname="com.jeta.forms.store.properties.BorderProperty"> |
|
67 |
<at name="name">border</at> |
|
68 |
</super> |
|
69 |
</object> |
|
70 |
</at> |
|
71 |
</item> |
|
72 |
</object> |
|
73 |
</at> |
|
74 |
</object> |
|
75 |
</at> |
|
76 |
<at name="name">lblMsg1</at> |
|
77 |
<at name="width">583</at> |
|
78 |
<at name="text"><html>Han sido encontradas preferencias de versiones anteriores para algunos complementos.</html></at> |
|
79 |
<at name="fill"> |
|
80 |
<object classname="com.jeta.forms.store.properties.effects.PaintProperty"> |
|
81 |
<at name="name">fill</at> |
|
82 |
</object> |
|
83 |
</at> |
|
84 |
<at name="height">14</at> |
|
85 |
</object> |
|
86 |
</at> |
|
87 |
</object> |
|
88 |
</at> |
|
89 |
</object> |
|
90 |
</at> |
|
91 |
</item> |
|
92 |
<item > |
|
93 |
<at name="value"> |
|
94 |
<object classname="com.jeta.forms.store.memento.BeanMemento"> |
|
95 |
<super classname="com.jeta.forms.store.memento.ComponentMemento"> |
|
96 |
<at name="cellconstraints"> |
|
97 |
<object classname="com.jeta.forms.store.memento.CellConstraintsMemento"> |
|
98 |
<at name="column">2</at> |
|
99 |
<at name="row">4</at> |
|
100 |
<at name="colspan">1</at> |
|
101 |
<at name="rowspan">1</at> |
|
102 |
<at name="halign">default</at> |
|
103 |
<at name="valign">default</at> |
|
104 |
<at name="insets" object="insets">0,0,0,0</at> |
|
105 |
</object> |
|
106 |
</at> |
|
107 |
<at name="componentclass">com.jeta.forms.gui.form.StandardComponent</at> |
|
108 |
</super> |
|
109 |
<at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at> |
|
110 |
<at name="beanclass">com.jeta.forms.components.label.JETALabel</at> |
|
111 |
<at name="beanproperties"> |
|
112 |
<object classname="com.jeta.forms.store.memento.PropertiesMemento"> |
|
113 |
<at name="classname">com.jeta.forms.components.label.JETALabel</at> |
|
114 |
<at name="properties"> |
|
115 |
<object classname="com.jeta.forms.store.support.PropertyMap"> |
|
116 |
<at name="border"> |
|
117 |
<object classname="com.jeta.forms.store.properties.CompoundBorderProperty"> |
|
118 |
<super classname="com.jeta.forms.store.properties.BorderProperty"> |
|
119 |
<at name="name">border</at> |
|
120 |
</super> |
|
121 |
<at name="borders"> |
|
122 |
<object classname="java.util.LinkedList"> |
|
123 |
<item > |
|
124 |
<at name="value"> |
|
125 |
<object classname="com.jeta.forms.store.properties.DefaultBorderProperty"> |
|
126 |
<super classname="com.jeta.forms.store.properties.BorderProperty"> |
|
127 |
<at name="name">border</at> |
|
128 |
</super> |
|
129 |
</object> |
|
130 |
</at> |
|
131 |
</item> |
|
132 |
</object> |
|
133 |
</at> |
|
134 |
</object> |
|
135 |
</at> |
|
136 |
<at name="name">lblMsg2</at> |
|
137 |
<at name="width">583</at> |
|
138 |
<at name="text"><html>Seleccione los complementos para los que desea recuperar las preferencias de versiones anteriores</html></at> |
|
139 |
<at name="fill"> |
|
140 |
<object classname="com.jeta.forms.store.properties.effects.PaintProperty"> |
|
141 |
<at name="name">fill</at> |
|
142 |
</object> |
|
143 |
</at> |
|
144 |
<at name="height">14</at> |
|
145 |
</object> |
|
146 |
</at> |
|
147 |
</object> |
|
148 |
</at> |
|
149 |
</object> |
|
150 |
</at> |
|
151 |
</item> |
|
152 |
<item > |
|
153 |
<at name="value"> |
|
154 |
<object classname="com.jeta.forms.store.memento.BeanMemento"> |
|
155 |
<super classname="com.jeta.forms.store.memento.ComponentMemento"> |
|
156 |
<at name="cellconstraints"> |
|
157 |
<object classname="com.jeta.forms.store.memento.CellConstraintsMemento"> |
|
158 |
<at name="column">2</at> |
|
159 |
<at name="row">6</at> |
|
160 |
<at name="colspan">1</at> |
|
161 |
<at name="rowspan">1</at> |
|
162 |
<at name="halign">default</at> |
|
163 |
<at name="valign">default</at> |
|
164 |
<at name="insets" object="insets">0,0,0,0</at> |
|
165 |
</object> |
|
166 |
</at> |
|
167 |
<at name="componentclass">com.jeta.forms.gui.form.StandardComponent</at> |
|
168 |
</super> |
|
169 |
<at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at> |
|
170 |
<at name="beanclass">javax.swing.JList</at> |
|
171 |
<at name="beanproperties"> |
|
172 |
<object classname="com.jeta.forms.store.memento.PropertiesMemento"> |
|
173 |
<at name="classname">javax.swing.JList</at> |
|
174 |
<at name="properties"> |
|
175 |
<object classname="com.jeta.forms.store.support.PropertyMap"> |
|
176 |
<at name="border"> |
|
177 |
<object classname="com.jeta.forms.store.properties.CompoundBorderProperty"> |
|
178 |
<super classname="com.jeta.forms.store.properties.BorderProperty"> |
|
179 |
<at name="name">border</at> |
|
180 |
</super> |
|
181 |
<at name="borders"> |
|
182 |
<object classname="java.util.LinkedList"> |
|
183 |
<item > |
|
184 |
<at name="value"> |
|
185 |
<object classname="com.jeta.forms.store.properties.DefaultBorderProperty"> |
|
186 |
<super classname="com.jeta.forms.store.properties.BorderProperty"> |
|
187 |
<at name="name">border</at> |
|
188 |
</super> |
|
189 |
</object> |
|
190 |
</at> |
|
191 |
</item> |
|
192 |
</object> |
|
193 |
</at> |
|
194 |
</object> |
|
195 |
</at> |
|
196 |
<at name="scrollableTracksViewportHeight">true</at> |
|
197 |
<at name="scrollableTracksViewportWidth">true</at> |
|
198 |
<at name="name">lstDataFolders</at> |
|
199 |
<at name="width">581</at> |
|
200 |
<at name="items"> |
|
201 |
<object classname="com.jeta.forms.store.properties.ItemsProperty"> |
|
202 |
<at name="name">items</at> |
|
203 |
</object> |
|
204 |
</at> |
|
205 |
<at name="scollBars"> |
|
206 |
<object classname="com.jeta.forms.store.properties.ScrollBarsProperty"> |
|
207 |
<at name="name">scollBars</at> |
|
208 |
<at name="verticalpolicy">20</at> |
|
209 |
<at name="horizontalpolicy">30</at> |
|
210 |
</object> |
|
211 |
</at> |
|
212 |
<at name="height">78</at> |
|
213 |
</object> |
|
214 |
</at> |
|
215 |
</object> |
|
216 |
</at> |
|
217 |
</object> |
|
218 |
</at> |
|
219 |
</item> |
|
220 |
</object> |
|
221 |
</at> |
|
222 |
<at name="properties"> |
|
223 |
<object classname="com.jeta.forms.store.memento.PropertiesMemento"> |
|
224 |
<at name="classname">com.jeta.forms.gui.form.GridView</at> |
|
225 |
<at name="properties"> |
|
226 |
<object classname="com.jeta.forms.store.support.PropertyMap"> |
|
227 |
<at name="border"> |
|
228 |
<object classname="com.jeta.forms.store.properties.CompoundBorderProperty"> |
|
229 |
<super classname="com.jeta.forms.store.properties.BorderProperty"> |
|
230 |
<at name="name">border</at> |
|
231 |
</super> |
|
232 |
<at name="borders"> |
|
233 |
<object classname="java.util.LinkedList"/> |
|
234 |
</at> |
|
235 |
</object> |
|
236 |
</at> |
|
237 |
<at name="name"></at> |
|
238 |
<at name="fill"> |
|
239 |
<object classname="com.jeta.forms.store.properties.effects.PaintProperty"> |
|
240 |
<at name="name">fill</at> |
|
241 |
</object> |
|
242 |
</at> |
|
243 |
<at name="scollBars"> |
|
244 |
<object classname="com.jeta.forms.store.properties.ScrollBarsProperty"> |
|
245 |
<at name="name">scollBars</at> |
|
246 |
<at name="verticalpolicy">21</at> |
|
247 |
<at name="horizontalpolicy">31</at> |
|
248 |
</object> |
|
249 |
</at> |
|
250 |
</object> |
|
251 |
</at> |
|
252 |
</object> |
|
253 |
</at> |
|
254 |
<at name="cellpainters"> |
|
255 |
<object classname="com.jeta.forms.store.support.Matrix"> |
|
256 |
<at name="rows"> |
|
257 |
<object classname="[Ljava.lang.Object;" size="7"> |
|
258 |
<at name="item" index="0"> |
|
259 |
<object classname="[Ljava.lang.Object;" size="3"/> |
|
260 |
</at> |
|
261 |
<at name="item" index="1"> |
|
262 |
<object classname="[Ljava.lang.Object;" size="3"/> |
|
263 |
</at> |
|
264 |
<at name="item" index="2"> |
|
265 |
<object classname="[Ljava.lang.Object;" size="3"/> |
|
266 |
</at> |
|
267 |
<at name="item" index="3"> |
|
268 |
<object classname="[Ljava.lang.Object;" size="3"/> |
|
269 |
</at> |
|
270 |
<at name="item" index="4"> |
|
271 |
<object classname="[Ljava.lang.Object;" size="3"/> |
|
272 |
</at> |
|
273 |
<at name="item" index="5"> |
|
274 |
<object classname="[Ljava.lang.Object;" size="3"/> |
|
275 |
</at> |
|
276 |
<at name="item" index="6"> |
|
277 |
<object classname="[Ljava.lang.Object;" size="3"/> |
|
278 |
</at> |
|
279 |
</object> |
|
280 |
</at> |
|
281 |
</object> |
|
282 |
</at> |
|
283 |
<at name="rowgroups"> |
|
284 |
<object classname="com.jeta.forms.store.memento.FormGroupSet"> |
|
285 |
<at name="groups"> |
|
286 |
<object classname="java.util.HashMap"/> |
|
287 |
</at> |
|
288 |
</object> |
|
289 |
</at> |
|
290 |
<at name="colgroups"> |
|
291 |
<object classname="com.jeta.forms.store.memento.FormGroupSet"> |
|
292 |
<at name="groups"> |
|
293 |
<object classname="java.util.HashMap"/> |
|
294 |
</at> |
|
295 |
</object> |
|
296 |
</at> |
|
297 |
</object> |
|
298 |
</at> |
|
299 |
</object> |
org.gvsig.scripting/trunk/org.gvsig.scripting/org.gvsig.scripting.app/org.gvsig.scripting.app.mainplugin/src/main/java/org/gvsig/scripting/app/extension/DataFoldersRecoverPanelView.java | ||
---|---|---|
1 |
package org.gvsig.scripting.app.extension; |
|
2 |
|
|
3 |
import com.jeta.open.i18n.I18NUtils; |
|
4 |
import com.jgoodies.forms.layout.CellConstraints; |
|
5 |
import com.jgoodies.forms.layout.FormLayout; |
|
6 |
import java.awt.BorderLayout; |
|
7 |
import java.awt.ComponentOrientation; |
|
8 |
import java.awt.Container; |
|
9 |
import java.awt.Dimension; |
|
10 |
import javax.swing.Box; |
|
11 |
import javax.swing.ImageIcon; |
|
12 |
import javax.swing.JFrame; |
|
13 |
import javax.swing.JLabel; |
|
14 |
import javax.swing.JList; |
|
15 |
import javax.swing.JPanel; |
|
16 |
import javax.swing.JScrollPane; |
|
17 |
|
|
18 |
|
|
19 |
public class DataFoldersRecoverPanelView extends JPanel |
|
20 |
{ |
|
21 |
JLabel lblMsg1 = new JLabel(); |
|
22 |
JLabel lblMsg2 = new JLabel(); |
|
23 |
JList lstDataFolders = new JList(); |
|
24 |
|
|
25 |
/** |
|
26 |
* Default constructor |
|
27 |
*/ |
|
28 |
public DataFoldersRecoverPanelView() |
|
29 |
{ |
|
30 |
initializePanel(); |
|
31 |
} |
|
32 |
|
|
33 |
/** |
|
34 |
* Adds fill components to empty cells in the first row and first column of the grid. |
|
35 |
* This ensures that the grid spacing will be the same as shown in the designer. |
|
36 |
* @param cols an array of column indices in the first row where fill components should be added. |
|
37 |
* @param rows an array of row indices in the first column where fill components should be added. |
|
38 |
*/ |
|
39 |
void addFillComponents( Container panel, int[] cols, int[] rows ) |
|
40 |
{ |
|
41 |
Dimension filler = new Dimension(10,10); |
|
42 |
|
|
43 |
boolean filled_cell_11 = false; |
|
44 |
CellConstraints cc = new CellConstraints(); |
|
45 |
if ( cols.length > 0 && rows.length > 0 ) |
|
46 |
{ |
|
47 |
if ( cols[0] == 1 && rows[0] == 1 ) |
|
48 |
{ |
|
49 |
/** add a rigid area */ |
|
50 |
panel.add( Box.createRigidArea( filler ), cc.xy(1,1) ); |
|
51 |
filled_cell_11 = true; |
|
52 |
} |
|
53 |
} |
|
54 |
|
|
55 |
for( int index = 0; index < cols.length; index++ ) |
|
56 |
{ |
|
57 |
if ( cols[index] == 1 && filled_cell_11 ) |
|
58 |
{ |
|
59 |
continue; |
|
60 |
} |
|
61 |
panel.add( Box.createRigidArea( filler ), cc.xy(cols[index],1) ); |
|
62 |
} |
|
63 |
|
|
64 |
for( int index = 0; index < rows.length; index++ ) |
|
65 |
{ |
|
66 |
if ( rows[index] == 1 && filled_cell_11 ) |
|
67 |
{ |
|
68 |
continue; |
|
69 |
} |
|
70 |
panel.add( Box.createRigidArea( filler ), cc.xy(1,rows[index]) ); |
|
71 |
} |
|
72 |
|
|
73 |
} |
|
74 |
|
|
75 |
/** |
|
76 |
* Helper method to load an image file from the CLASSPATH |
|
77 |
* @param imageName the package and name of the file to load relative to the CLASSPATH |
|
78 |
* @return an ImageIcon instance with the specified image file |
|
79 |
* @throws IllegalArgumentException if the image resource cannot be loaded. |
|
80 |
*/ |
|
81 |
public ImageIcon loadImage( String imageName ) |
|
82 |
{ |
|
83 |
try |
|
84 |
{ |
|
85 |
ClassLoader classloader = getClass().getClassLoader(); |
|
86 |
java.net.URL url = classloader.getResource( imageName ); |
|
87 |
if ( url != null ) |
|
88 |
{ |
|
89 |
ImageIcon icon = new ImageIcon( url ); |
|
90 |
return icon; |
|
91 |
} |
|
92 |
} |
|
93 |
catch( Exception e ) |
|
94 |
{ |
|
95 |
e.printStackTrace(); |
|
96 |
} |
|
97 |
throw new IllegalArgumentException( "Unable to load image: " + imageName ); |
|
98 |
} |
|
99 |
|
|
100 |
/** |
|
101 |
* Method for recalculating the component orientation for |
|
102 |
* right-to-left Locales. |
|
103 |
* @param orientation the component orientation to be applied |
|
104 |
*/ |
|
105 |
public void applyComponentOrientation( ComponentOrientation orientation ) |
|
106 |
{ |
|
107 |
// Not yet implemented... |
|
108 |
// I18NUtils.applyComponentOrientation(this, orientation); |
|
109 |
super.applyComponentOrientation(orientation); |
|
110 |
} |
|
111 |
|
|
112 |
public JPanel createPanel() |
|
113 |
{ |
|
114 |
JPanel jpanel1 = new JPanel(); |
|
115 |
FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:NONE","CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE"); |
|
116 |
CellConstraints cc = new CellConstraints(); |
|
117 |
jpanel1.setLayout(formlayout1); |
|
118 |
|
|
119 |
lblMsg1.setName("lblMsg1"); |
|
120 |
lblMsg1.setText("<html>Han sido encontradas preferencias de versiones anteriores para algunos complementos.</html>"); |
|
121 |
jpanel1.add(lblMsg1,cc.xy(2,2)); |
|
122 |
|
|
123 |
lblMsg2.setName("lblMsg2"); |
|
124 |
lblMsg2.setText("<html>Seleccione los complementos para los que desea recuperar las preferencias de versiones anteriores</html>"); |
|
125 |
jpanel1.add(lblMsg2,cc.xy(2,4)); |
|
126 |
|
|
127 |
lstDataFolders.setName("lstDataFolders"); |
|
128 |
JScrollPane jscrollpane1 = new JScrollPane(); |
|
129 |
jscrollpane1.setViewportView(lstDataFolders); |
|
130 |
jscrollpane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); |
|
131 |
jscrollpane1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); |
|
132 |
jpanel1.add(jscrollpane1,cc.xy(2,6)); |
|
133 |
|
|
134 |
addFillComponents(jpanel1,new int[]{ 1,2,3 },new int[]{ 1,2,3,4,5,6,7 }); |
|
135 |
return jpanel1; |
|
136 |
} |
|
137 |
|
|
138 |
/** |
|
139 |
* Initializer |
|
140 |
*/ |
|
141 |
protected void initializePanel() |
|
142 |
{ |
|
143 |
setLayout(new BorderLayout()); |
|
144 |
add(createPanel(), BorderLayout.CENTER); |
|
145 |
} |
|
146 |
|
|
147 |
|
|
148 |
} |
org.gvsig.scripting/trunk/org.gvsig.scripting/org.gvsig.scripting.app/org.gvsig.scripting.app.mainplugin/src/main/java/org/gvsig/scripting/app/extension/DataFoldersRecoverPanel.java | ||
---|---|---|
1 |
package org.gvsig.scripting.app.extension; |
|
2 |
|
|
3 |
import java.util.ArrayList; |
|
4 |
import java.util.List; |
|
5 |
import javax.swing.DefaultListModel; |
|
6 |
import javax.swing.ListSelectionModel; |
|
7 |
import org.gvsig.scripting.DataFolderFound; |
|
8 |
import org.gvsig.tools.swing.api.JListWithCheckbox; |
|
9 |
import org.gvsig.tools.swing.api.ListElement; |
|
10 |
import org.gvsig.tools.swing.api.ToolsSwingLocator; |
|
11 |
import org.gvsig.tools.swing.api.ToolsSwingManager; |
|
12 |
|
|
13 |
/** |
|
14 |
* |
|
15 |
* @author jjdelcerro |
|
16 |
*/ |
|
17 |
public class DataFoldersRecoverPanel extends DataFoldersRecoverPanelView { |
|
18 |
|
|
19 |
private final List<DataFolderFound> dataFoldersFound; |
|
20 |
private JListWithCheckbox lstCheckedDataFolders; |
|
21 |
|
|
22 |
public DataFoldersRecoverPanel(List<DataFolderFound> dataFoldersFound) { |
|
23 |
this.dataFoldersFound = dataFoldersFound; |
|
24 |
this.initComponents(); |
|
25 |
} |
|
26 |
|
|
27 |
private void initComponents() { |
|
28 |
ToolsSwingManager manager = ToolsSwingLocator.getToolsSwingManager(); |
|
29 |
this.lstCheckedDataFolders = manager.createJListWithCheckbox(lstDataFolders); |
|
30 |
DefaultListModel model = new DefaultListModel(); |
|
31 |
for (DataFolderFound dataFolderFound : dataFoldersFound) { |
|
32 |
model.addElement(new ListElement<>(dataFolderFound.getApplicationName(), dataFolderFound)); |
|
33 |
} |
|
34 |
this.lstDataFolders.setModel(model); |
|
35 |
} |
|
36 |
|
|
37 |
public List<DataFolderFound> getSelectedDataFolders() { |
|
38 |
List<DataFolderFound> r = new ArrayList<>(); |
|
39 |
ListSelectionModel checkedModel = this.lstCheckedDataFolders.getCheckedModel(); |
|
40 |
for (int i = 0; i < dataFoldersFound.size(); i++) { |
|
41 |
if( checkedModel.isSelectedIndex(i) ) { |
|
42 |
r.add(dataFoldersFound.get(i)); |
|
43 |
} |
|
44 |
} |
|
45 |
return r; |
|
46 |
} |
|
47 |
|
|
48 |
} |
org.gvsig.scripting/trunk/org.gvsig.scripting/org.gvsig.scripting.app/org.gvsig.scripting.app.mainplugin/src/main/java/org/gvsig/scripting/app/extension/ScriptingUtils.java | ||
---|---|---|
1 |
/* |
|
2 |
* To change this license header, choose License Headers in Project Properties. |
|
3 |
* To change this template file, choose Tools | Templates |
|
4 |
* and open the template in the editor. |
|
5 |
*/ |
|
6 | 1 |
package org.gvsig.scripting.app.extension; |
7 | 2 |
|
8 | 3 |
import java.io.File; |
... | ... | |
24 | 19 |
import java.util.List; |
25 | 20 |
import java.util.function.Predicate; |
26 | 21 |
import javax.swing.JOptionPane; |
22 |
import javax.swing.SwingUtilities; |
|
27 | 23 |
import org.apache.commons.io.FileUtils; |
28 | 24 |
import org.apache.commons.io.FilenameUtils; |
29 | 25 |
import org.apache.commons.io.IOCase; |
30 | 26 |
import org.apache.commons.lang3.BooleanUtils; |
27 |
import org.gvsig.scripting.DataFolderFound; |
|
31 | 28 |
import org.gvsig.scripting.ScriptingBaseScript; |
32 | 29 |
import org.gvsig.scripting.ScriptingFolder; |
33 | 30 |
import org.gvsig.scripting.ScriptingLocator; |
... | ... | |
42 | 39 |
import org.gvsig.tools.ToolsLocator; |
43 | 40 |
import org.gvsig.tools.exception.BaseException; |
44 | 41 |
import org.gvsig.tools.i18n.I18nManager; |
42 |
import org.gvsig.tools.packageutils.PackageManager; |
|
43 |
import org.gvsig.tools.packageutils.Version; |
|
45 | 44 |
import org.gvsig.tools.swing.api.ToolsSwingLocator; |
46 | 45 |
import org.gvsig.tools.swing.api.threadsafedialogs.ThreadSafeDialogsManager; |
46 |
import org.gvsig.tools.swing.api.windowmanager.Dialog; |
|
47 | 47 |
import org.gvsig.tools.swing.api.windowmanager.WindowManager; |
48 |
import org.gvsig.tools.swing.api.windowmanager.WindowManager_v2; |
|
48 | 49 |
import org.gvsig.tools.task.SimpleTaskStatus; |
49 | 50 |
import org.gvsig.tools.visitor.VisitCanceledException; |
50 | 51 |
import org.gvsig.tools.visitor.Visitor; |
51 | 52 |
import org.slf4j.Logger; |
52 | 53 |
import org.slf4j.LoggerFactory; |
53 |
|
|
54 |
import org.gvsig.tools.util.FolderSet; |
|
55 |
import org.gvsig.tools.util.impl.DefaultFolderSet; |
|
54 | 56 |
/** |
55 | 57 |
* |
56 | 58 |
* @author jjdelcerro |
57 | 59 |
*/ |
60 |
@SuppressWarnings("UseSpecificCatch") |
|
58 | 61 |
public class ScriptingUtils { |
59 | 62 |
|
60 | 63 |
public static final String SKIP_AUTORUNS = "skipAutoruns"; |
61 | 64 |
|
62 |
private static final Logger logger = LoggerFactory.getLogger(ScriptingExtension.class);
|
|
65 |
private static final Logger LOGGER = LoggerFactory.getLogger(ScriptingExtension.class);
|
|
63 | 66 |
|
64 | 67 |
private boolean executingAutorunScripts = false; |
65 | 68 |
private static boolean composer_initialized = false; |
... | ... | |
84 | 87 |
public static void log(int level, String message, Throwable th) { |
85 | 88 |
switch( level ) { |
86 | 89 |
case TRACE: |
87 |
logger.trace(message, th);
|
|
90 |
LOGGER.trace(message, th);
|
|
88 | 91 |
break; |
89 | 92 |
case ERROR: |
90 |
logger.error(message, th);
|
|
93 |
LOGGER.error(message, th);
|
|
91 | 94 |
break; |
92 | 95 |
case WARN: |
93 |
logger.warn(message, th);
|
|
96 |
LOGGER.warn(message, th);
|
|
94 | 97 |
break; |
95 | 98 |
default: |
96 | 99 |
case INFO: |
97 |
logger.info(message, th);
|
|
100 |
LOGGER.info(message, th);
|
|
98 | 101 |
break; |
99 | 102 |
} |
100 | 103 |
} |
104 |
private String appversion; |
|
105 |
private File pluginHomeFolder; |
|
101 | 106 |
|
102 | 107 |
public ScriptingUtils() { |
103 | 108 |
message = new MessageWait(); |
... | ... | |
141 | 146 |
|
142 | 147 |
public void initializaPaths(List<File> pluginsFolder, File installFolder, File pluginHoneFolder, String appversion) { |
143 | 148 |
|
149 |
this.appversion = appversion; |
|
150 |
this.pluginHomeFolder = pluginHoneFolder; |
|
144 | 151 |
ScriptingManager manager = ScriptingLocator.getManager(); |
145 | 152 |
manager.setHomeFolder(getScriptsHomeFolder(pluginHoneFolder, appversion)); |
146 | 153 |
|
... | ... | |
179 | 186 |
try { |
180 | 187 |
FileUtils.forceMkdir(localAddonRepositoryFolder); |
181 | 188 |
} catch (IOException ex) { |
182 |
logger.info("Can't create addons folder in '" + localAddonRepositoryFolder.getAbsolutePath() + "'.", ex);
|
|
189 |
LOGGER.info("Can't create addons folder in '" + localAddonRepositoryFolder.getAbsolutePath() + "'.", ex);
|
|
183 | 190 |
} |
184 | 191 |
} |
185 | 192 |
File initAddonFile = new File(localAddonRepositoryFolder, "__init__.py"); |
... | ... | |
187 | 194 |
try { |
188 | 195 |
FileUtils.touch(initAddonFile); |
189 | 196 |
} catch (IOException ex) { |
190 |
logger.info("Can't create addons __init__ file in '" + localAddonRepositoryFolder.getAbsolutePath() + "'.", ex);
|
|
197 |
LOGGER.info("Can't create addons __init__ file in '" + localAddonRepositoryFolder.getAbsolutePath() + "'.", ex);
|
|
191 | 198 |
} |
192 | 199 |
} |
193 | 200 |
} |
... | ... | |
278 | 285 |
status.add(); |
279 | 286 |
final I18nManager i18nManager = ToolsLocator.getI18nManager(); |
280 | 287 |
try { |
281 |
logger.info("Searching "+title+" scripts...");
|
|
288 |
LOGGER.info("Searching "+title+" scripts...");
|
|
282 | 289 |
dialogs.message( |
283 | 290 |
i18nManager.getTranslation("_Searching_autorun_scripts_Xhorizontal_ellipsisX"), |
284 | 291 |
JOptionPane.INFORMATION_MESSAGE |
... | ... | |
296 | 303 |
if( script.isEnabled() ) { |
297 | 304 |
scripts.add(script); |
298 | 305 |
} else { |
299 |
logger.info("Skip "+title+" script '" + script.getFile().getAbsolutePath() + "'.");
|
|
306 |
LOGGER.info("Skip "+title+" script '" + script.getFile().getAbsolutePath() + "'.");
|
|
300 | 307 |
} |
301 | 308 |
} |
302 | 309 |
} |
... | ... | |
318 | 325 |
|
319 | 326 |
} finally { |
320 | 327 |
composer_initialized = true; |
321 |
logger.info("Running "+title+" scripts terminated.");
|
|
328 |
LOGGER.info("Running "+title+" scripts terminated.");
|
|
322 | 329 |
dialogs.message("", JOptionPane.INFORMATION_MESSAGE); |
323 | 330 |
status.terminate(); |
324 | 331 |
} |
... | ... | |
421 | 428 |
status.setCurValue(n++); |
422 | 429 |
} |
423 | 430 |
try { |
424 |
logger.info("running " + title + " script '" + script.getFile().getAbsolutePath() + "' (" + getScriptOrderKey(script) + ", " + script.getIsolationGroup() + ").");
|
|
431 |
LOGGER.info("running " + title + " script '" + script.getFile().getAbsolutePath() + "' (" + getScriptOrderKey(script) + ", " + script.getIsolationGroup() + ").");
|
|
425 | 432 |
dialogs.message( |
426 | 433 |
i18nManager.getTranslation( |
427 | 434 |
"_Running_autorun_script_from_XnameX", |
... | ... | |
436 | 443 |
try { |
437 | 444 |
script.run(); |
438 | 445 |
} catch (Exception ex) { |
439 |
logger.warn("Can't execute " + title + " from '" + script.getFile().getAbsolutePath() + "'.", ex);
|
|
446 |
LOGGER.warn("Can't execute " + title + " from '" + script.getFile().getAbsolutePath() + "'.", ex);
|
|
440 | 447 |
} |
441 | 448 |
} |
442 | 449 |
} |
... | ... | |
488 | 495 |
if (script.isEnabled()) { |
489 | 496 |
scripts.add(script); |
490 | 497 |
} else { |
491 |
logger.info("Skip " + title + " script '" + file.getAbsolutePath() + "'.");
|
|
498 |
LOGGER.info("Skip " + title + " script '" + file.getAbsolutePath() + "'.");
|
|
492 | 499 |
} |
493 | 500 |
} |
494 | 501 |
} |
... | ... | |
506 | 513 |
Files.walkFileTree(Paths.get(folder.getFile().toURI()), opts, Integer.MAX_VALUE, visitor); |
507 | 514 |
} |
508 | 515 |
} catch (Exception ex) { |
509 |
logger.warn("Can't execute " + title + " in home.", ex);
|
|
516 |
LOGGER.warn("Can't execute " + title + " in home.", ex);
|
|
510 | 517 |
} |
511 | 518 |
sortScripts(scripts); |
512 | 519 |
executeScripts(scripts, null); |
513 | 520 |
|
514 | 521 |
} finally { |
515 |
logger.info("Running " + title + " scripts terminated.");
|
|
522 |
LOGGER.info("Running " + title + " scripts terminated.");
|
|
516 | 523 |
dialogs.message("", JOptionPane.INFORMATION_MESSAGE); |
517 | 524 |
executingAutorunScripts = false; |
518 | 525 |
} |
526 |
checkDataFoldersVersions(); |
|
519 | 527 |
} |
520 | 528 |
|
521 | 529 |
} |
530 |
|
|
531 |
private void checkDataFoldersVersions() { |
|
532 |
final ScriptingManager manager = ScriptingLocator.getManager(); |
|
533 |
PackageManager versionFactory = ToolsLocator.getPackageManager(); |
|
534 |
Version currentVersion = versionFactory.createVersion(this.appversion); |
|
535 |
FolderSet folders = new DefaultFolderSet(); |
|
536 |
folders.add(this.pluginHomeFolder); |
|
537 |
final List<DataFolderFound> dataFoldersFound = manager.searchOldVersions(currentVersion, folders); |
|
538 |
if( dataFoldersFound == null || dataFoldersFound.isEmpty() ) { |
|
539 |
return; |
|
540 |
} |
|
541 |
Runnable askUser = new Runnable() { |
|
542 |
@Override |
|
543 |
public void run() { |
|
544 |
WindowManager_v2 winManager = (WindowManager_v2) ToolsSwingLocator.getWindowManager(); |
|
545 |
DataFoldersRecoverPanel panel = new DataFoldersRecoverPanel(dataFoldersFound); |
|
546 |
Dialog dialog = winManager.createDialog( |
|
547 |
panel, |
|
548 |
"Recuperacion de preferencias", |
|
549 |
"Seleccione los complementos de los que recuperar las preferencias.", |
|
550 |
WindowManager_v2.BUTTONS_OK_CANCEL |
|
551 |
); |
|
552 |
dialog.show(WindowManager.MODE.DIALOG); |
|
553 |
if (dialog.getAction() == WindowManager_v2.BUTTON_OK) { |
|
554 |
List<DataFolderFound> toRestore = panel.getSelectedDataFolders(); |
|
555 |
for (DataFolderFound dataFolderFound : dataFoldersFound) { |
|
556 |
if (toRestore.contains(dataFolderFound)) { |
|
557 |
dataFolderFound.restore(); |
|
558 |
} else { |
|
559 |
dataFolderFound.leave(); |
|
560 |
} |
|
561 |
} |
|
562 |
} |
|
563 |
} |
|
564 |
}; |
|
565 |
if( SwingUtilities.isEventDispatchThread() ) { |
|
566 |
askUser.run(); |
|
567 |
} else { |
|
568 |
SwingUtilities.invokeLater(askUser); |
|
569 |
} |
|
570 |
} |
|
522 | 571 |
} |
org.gvsig.scripting/trunk/org.gvsig.scripting/org.gvsig.scripting.lib/org.gvsig.scripting.lib.api/src/main/java/org/gvsig/scripting/ScriptingScript.java | ||
---|---|---|
81 | 81 |
public Object invokeFunction(String name, Object[] args) throws NoSuchMethodException; |
82 | 82 |
|
83 | 83 |
public String getMimeType(); |
84 |
|
|
85 |
public void registerDataFolder(String id); |
|
84 | 86 |
} |
org.gvsig.scripting/trunk/org.gvsig.scripting/org.gvsig.scripting.lib/org.gvsig.scripting.lib.api/src/main/java/org/gvsig/scripting/ScriptingManager.java | ||
---|---|---|
4 | 4 |
import java.util.List; |
5 | 5 |
import java.util.Map; |
6 | 6 |
import java.util.Set; |
7 |
import org.gvsig.tools.packageutils.Version; |
|
7 | 8 |
import org.gvsig.tools.service.spi.ProviderFactory; |
8 | 9 |
import org.gvsig.tools.script.ScriptManager; |
10 |
import org.gvsig.tools.util.FolderSet; |
|
9 | 11 |
|
10 | 12 |
/** |
11 | 13 |
* There are two top level management roles within ScriptingFramework: logical |
... | ... | |
34 | 36 |
|
35 | 37 |
public File getDataFolder(String id); |
36 | 38 |
|
39 |
public void registerDataFolder(ScriptingFolder folderScript, String id); |
|
40 |
|
|
41 |
public List<DataFolderFound> searchOldVersions(Version currentVersion, FolderSet folder); |
|
42 |
|
|
37 | 43 |
/** |
38 | 44 |
* Returns the System's Folder |
39 | 45 |
* |
... | ... | |
80 | 86 |
* @return {@link ScriptingFolder} |
81 | 87 |
*/ |
82 | 88 |
public ScriptingFolder getFolder(File file); |
89 |
|
|
90 |
/** |
|
91 |
* Return the {@link ScriptingUnit} associated with the path specified. |
|
92 |
* |
|
93 |
* the path should start with "User" or "System". |
|
94 |
* |
|
95 |
* @param pathName |
|
96 |
* |
|
97 |
* @return the required {@link ScriptingUnit} |
|
98 |
*/ |
|
99 |
public ScriptingUnit getUnit(String pathName); |
|
83 | 100 |
|
101 |
|
|
84 | 102 |
/** |
85 | 103 |
* Returns the path of the User's Folder |
86 | 104 |
* |
org.gvsig.scripting/trunk/org.gvsig.scripting/org.gvsig.scripting.lib/org.gvsig.scripting.lib.api/src/main/java/org/gvsig/scripting/ScriptingFolder.java | ||
---|---|---|
38 | 38 |
* @return a {@link ScriptingUnit} with the content extracted from the file. |
39 | 39 |
*/ |
40 | 40 |
public ScriptingUnit getUnit(File file); |
41 |
|
|
42 |
public ScriptingUnit getUnit(String path); |
|
41 | 43 |
|
42 | 44 |
/** |
43 | 45 |
* Gets all the {@link ScriptingUnit}s contained in a ScriptingFolder. |
org.gvsig.scripting/trunk/org.gvsig.scripting/org.gvsig.scripting.lib/org.gvsig.scripting.lib.api/src/main/java/org/gvsig/scripting/DataFolderFound.java | ||
---|---|---|
1 |
package org.gvsig.scripting; |
|
2 |
|
|
3 |
import java.io.File; |
|
4 |
import org.gvsig.tools.packageutils.Version; |
|
5 |
|
|
6 |
/** |
|
7 |
* |
|
8 |
* @author jjdelcerro |
|
9 |
*/ |
|
10 |
public interface DataFolderFound { |
|
11 |
|
|
12 |
ScriptingFolder getApplicationFolder(); |
|
13 |
|
|
14 |
String getApplicationName(); |
|
15 |
|
|
16 |
String getDataFolderId(); |
|
17 |
|
|
18 |
File getNewDataFolder(); |
|
19 |
|
|
20 |
File getOldDataFolder(); |
|
21 |
|
|
22 |
Version getOldDataFolderVersion(); |
|
23 |
|
|
24 |
void leave(); |
|
25 |
|
|
26 |
void restore(); |
|
27 |
|
|
28 |
} |
org.gvsig.scripting/trunk/org.gvsig.scripting/org.gvsig.scripting.lib/org.gvsig.scripting.lib.impl/src/main/java/org/gvsig/scripting/impl/AbstractScript.java | ||
---|---|---|
58 | 58 |
} |
59 | 59 |
|
60 | 60 |
|
61 |
public void registerDataFolder(String id) { |
|
62 |
this.getManager().registerDataFolder(this.getParent(), id); |
|
63 |
} |
|
61 | 64 |
|
62 | 65 |
} |
org.gvsig.scripting/trunk/org.gvsig.scripting/org.gvsig.scripting.lib/org.gvsig.scripting.lib.impl/src/main/java/org/gvsig/scripting/impl/DefaultScriptingScript.java | ||
---|---|---|
15 | 15 |
import java.util.LinkedHashSet; |
16 | 16 |
import java.util.List; |
17 | 17 |
import java.util.Set; |
18 |
import java.util.concurrent.locks.ReentrantLock; |
|
19 | 18 |
|
20 | 19 |
import javax.script.Compilable; |
21 | 20 |
import javax.script.CompiledScript; |
org.gvsig.scripting/trunk/org.gvsig.scripting/org.gvsig.scripting.lib/org.gvsig.scripting.lib.impl/src/main/java/org/gvsig/scripting/impl/DataFolderManager.java | ||
---|---|---|
1 |
package org.gvsig.scripting.impl; |
|
2 |
|
|
3 |
import java.io.File; |
|
4 |
import java.io.FileFilter; |
|
5 |
import java.io.FileInputStream; |
|
6 |
import java.io.FileOutputStream; |
|
7 |
import java.io.IOException; |
|
8 |
import java.util.ArrayList; |
|
9 |
import java.util.List; |
|
10 |
import java.util.Properties; |
|
11 |
import org.apache.commons.io.FilenameUtils; |
|
12 |
import org.apache.commons.io.IOUtils; |
|
13 |
import org.apache.commons.lang3.ArrayUtils; |
|
14 |
import org.apache.commons.lang3.BooleanUtils; |
|
15 |
import org.apache.commons.lang3.StringUtils; |
|
16 |
import org.gvsig.scripting.DataFolderFound; |
|
17 |
import org.gvsig.tools.packageutils.Version; |
|
18 |
import org.gvsig.scripting.ScriptingFolder; |
|
19 |
import org.gvsig.scripting.ScriptingManager; |
|
20 |
import static org.gvsig.scripting.impl.DefaultScriptingManager.LOG; |
|
21 |
import org.gvsig.tools.ToolsLocator; |
|
22 |
import org.gvsig.tools.packageutils.PackageManager; |
|
23 |
import org.gvsig.tools.util.FolderSet; |
|
24 |
|
|
25 |
/** |
|
26 |
* |
|
27 |
* @author jjdelcerro |
|
28 |
*/ |
|
29 |
@SuppressWarnings("UseSpecificCatch") |
|
30 |
public class DataFolderManager { |
|
31 |
|
|
32 |
class DefaultDataFolderFound implements DataFolderFound { |
|
33 |
|
|
34 |
private final String dataFolderId; |
|
35 |
private final ScriptingFolder applicationFolder; |
|
36 |
private final File newDataFolder; |
|
37 |
private final File oldDataFolder; |
|
38 |
private final Version oldDataFolderVersion; |
|
39 |
|
|
40 |
public DefaultDataFolderFound( |
|
41 |
String dataFolderId, |
|
42 |
ScriptingFolder applicationFolder, |
|
43 |
File newDataFolder, |
|
44 |
File oldDataFolder, |
|
45 |
Version oldDataFolderVersion |
|
46 |
) { |
|
47 |
this.dataFolderId = dataFolderId; |
|
48 |
this.applicationFolder = applicationFolder; |
|
49 |
this.newDataFolder = newDataFolder; |
|
50 |
this.oldDataFolder = oldDataFolder; |
|
51 |
this.oldDataFolderVersion = oldDataFolderVersion; |
|
52 |
} |
|
53 |
|
|
54 |
@Override |
|
55 |
public String getDataFolderId() { |
|
56 |
return this.dataFolderId; |
|
57 |
} |
|
58 |
|
|
59 |
@Override |
|
60 |
public ScriptingFolder getApplicationFolder() { |
|
61 |
return this.applicationFolder; |
|
62 |
} |
|
63 |
|
|
64 |
@Override |
|
65 |
public String getApplicationName() { |
|
66 |
return this.applicationFolder.getName(); |
|
67 |
} |
|
68 |
|
|
69 |
@Override |
|
70 |
public File getNewDataFolder() { |
|
71 |
return this.newDataFolder; |
|
72 |
} |
|
73 |
|
|
74 |
@Override |
|
75 |
public File getOldDataFolder() { |
|
76 |
return this.oldDataFolder; |
|
77 |
} |
|
78 |
|
|
79 |
@Override |
|
80 |
public Version getOldDataFolderVersion() { |
|
81 |
return this.oldDataFolderVersion; |
|
82 |
} |
|
83 |
|
|
84 |
@Override |
|
85 |
public void restore() { |
|
86 |
try { |
|
87 |
FileUtils.copyDirectory(this.oldDataFolder, this.newDataFolder); |
|
88 |
Properties props = getDataFolderRegister(); |
|
89 |
props.setProperty(this.dataFolderId + ".processed", "true"); |
|
90 |
saveDataFolderRegistry(props); |
|
91 |
} catch (IOException ex) { |
|
92 |
throw new RuntimeException("Can't restore data folder found.", ex); |
|
93 |
} |
|
94 |
} |
|
95 |
|
|
96 |
@Override |
|
97 |
public void leave() { |
|
98 |
Properties props = getDataFolderRegister(); |
|
99 |
props.setProperty(this.dataFolderId + ".processed", "true"); |
|
100 |
saveDataFolderRegistry(props); |
|
101 |
} |
|
102 |
} |
|
103 |
|
|
104 |
private final ScriptingManager manager; |
|
105 |
|
|
106 |
public DataFolderManager(ScriptingManager manager) { |
|
107 |
this.manager = manager; |
|
108 |
} |
|
109 |
|
|
110 |
private File getHomeFolder() { |
|
111 |
return this.manager.getHomeFolder(); |
|
112 |
} |
|
113 |
|
|
114 |
private void createFolder(File f) { |
|
115 |
if (!f.exists()) { |
|
116 |
try { |
|
117 |
FileUtils.forceMkdir(f); |
|
118 |
LOG.info("Created scripting folder '" + f.getAbsolutePath() + "'"); |
|
119 |
} catch (Throwable e) { |
|
120 |
LOG.warn("Can't Create scripting folder '" + f.getAbsolutePath() + "'"); |
|
121 |
} |
|
122 |
} |
|
123 |
} |
|
124 |
|
|
125 |
private Properties getDataFolderRegister() { |
|
126 |
File f = FileUtils.getFile(getHomeFolder(), "data.properties"); |
|
127 |
Properties props = new Properties(); |
|
128 |
if (f.exists()) { |
|
129 |
FileInputStream inStream = null; |
|
130 |
try { |
|
131 |
inStream = new FileInputStream(f); |
|
132 |
props.load(inStream); |
|
133 |
} catch (Exception ex) { |
|
134 |
|
|
135 |
} finally { |
|
136 |
IOUtils.closeQuietly(inStream); |
|
137 |
} |
|
138 |
} |
|
139 |
return props; |
|
140 |
} |
|
141 |
|
|
142 |
private void saveDataFolderRegistry(Properties props) { |
|
143 |
File f = FileUtils.getFile(getHomeFolder(), "data.properties"); |
|
144 |
FileOutputStream out = null; |
|
145 |
try { |
|
146 |
out = new FileOutputStream(f); |
|
147 |
props.store(out, ""); |
|
148 |
} catch (Exception ex) { |
|
149 |
|
|
150 |
} finally { |
|
151 |
IOUtils.closeQuietly(out); |
|
152 |
} |
|
153 |
} |
|
154 |
|
|
155 |
public File getDataFolder(String id) { |
|
156 |
File f = FileUtils.getFile(getHomeFolder(), "data", id); |
|
157 |
createFolder(f); |
|
158 |
return f; |
|
159 |
} |
|
160 |
|
|
161 |
public void registerDataFolder(ScriptingFolder folderScript, String id) { |
|
162 |
String userPath = folderScript.getUserPath(); |
|
163 |
Properties props = getDataFolderRegister(); |
|
164 |
if ( StringUtils.equals(props.getProperty(id),userPath)) { |
|
165 |
return; |
|
166 |
} |
|
167 |
props.put(id, userPath); |
|
168 |
saveDataFolderRegistry(props); |
|
169 |
} |
|
170 |
|
|
171 |
public List<DataFolderFound> searchOldVersions(Version currentVersion, FolderSet folder) { |
|
172 |
List<DataFolderFound> founds = new ArrayList<>(); |
|
173 |
Properties props = getDataFolderRegister(); |
|
174 |
for (Object key : props.keySet()) { |
|
175 |
String dataFolderId = (String) key; |
|
176 |
boolean processed = BooleanUtils.toBoolean(props.getProperty(dataFolderId + ".processed")); |
|
177 |
if (!processed) { |
|
178 |
String dataFolderName = props.getProperty(dataFolderId); |
|
179 |
searchOldVersions(founds, currentVersion, folder, dataFolderId, dataFolderName); |
|
180 |
} |
|
181 |
} |
|
182 |
if( founds.isEmpty() ) { |
|
183 |
return null; |
|
184 |
} |
|
185 |
return founds; |
|
186 |
} |
|
187 |
|
|
188 |
private void searchOldVersions( |
|
189 |
final List<DataFolderFound> founds, |
|
190 |
final Version currentVersion, |
|
191 |
final FolderSet folderSet, |
|
192 |
final String dataFolderId, |
|
193 |
final String dataFolderName |
|
194 |
) { |
|
195 |
final PackageManager versionFactory = ToolsLocator.getPackageManager(); |
|
196 |
File[] folders = folderSet.listFiles(new FileFilter() { |
|
197 |
@Override |
|
198 |
public boolean accept(File pathname) { |
|
199 |
if( !pathname.isDirectory() ) { |
|
200 |
return false; |
|
201 |
} |
|
202 |
try { |
|
203 |
String name = FilenameUtils.getBaseName(pathname.getName()); |
|
204 |
|
|
205 |
// Falla con una excepcion si "name" no es una version valida |
|
206 |
Version version = versionFactory.createVersion(name); |
|
207 |
if( currentVersion.compareTo(version)==0 ) { |
|
208 |
return false; |
|
209 |
} |
|
210 |
File dataFolder = FileUtils.getFile(pathname, "data", dataFolderId); |
|
211 |
if( dataFolder.exists() && dataFolder.isDirectory() ) { |
|
212 |
return true; |
|
213 |
} |
|
214 |
} catch(Exception ex) { |
|
215 |
} |
|
216 |
return false; |
|
217 |
} |
|
218 |
}); |
|
219 |
if( ArrayUtils.isEmpty(folders) ) { |
|
220 |
return; |
|
221 |
} |
|
222 |
|
|
223 |
File newDataFolder = FileUtils.getFile(getHomeFolder(), "data", dataFolderId); |
|
224 |
ScriptingFolder applicationFolder = (ScriptingFolder) this.manager.getUnit(dataFolderName); |
|
225 |
DataFolderFound dataFolderFound = null; |
|
226 |
for (File folder : folders) { |
|
227 |
File oldDataFolder = FileUtils.getFile(folder, "data", dataFolderId); |
|
228 |
Version oldDataFolderVersion = versionFactory.createVersion( |
|
229 |
FilenameUtils.getBaseName(folder.getName()) |
|
230 |
); |
|
231 |
if( dataFolderFound==null || |
|
232 |
oldDataFolderVersion.compareTo(dataFolderFound.getOldDataFolderVersion())>0 ) { |
|
233 |
dataFolderFound = new DefaultDataFolderFound( |
|
234 |
dataFolderId, |
|
235 |
applicationFolder, |
|
236 |
newDataFolder, |
|
237 |
oldDataFolder, |
|
238 |
oldDataFolderVersion |
|
239 |
); |
|
240 |
} |
|
241 |
} |
|
242 |
if( dataFolderFound!=null ) { |
|
243 |
founds.add(dataFolderFound); |
|
244 |
} |
|
245 |
} |
|
246 |
} |
org.gvsig.scripting/trunk/org.gvsig.scripting/org.gvsig.scripting.lib/org.gvsig.scripting.lib.impl/src/main/java/org/gvsig/scripting/impl/FileUtils.java | ||
---|---|---|
95 | 95 |
org.apache.commons.io.FileUtils.moveDirectory(srcDir, destDir); |
96 | 96 |
} |
97 | 97 |
|
98 |
static void copyDirectory(File srcDir, File destDir) throws IOException { |
|
99 |
org.apache.commons.io.FileUtils.copyDirectory(srcDir, destDir); |
|
100 |
} |
|
101 |
|
|
98 | 102 |
} |
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 | ||
---|---|---|
19 | 19 |
import javax.swing.ImageIcon; |
20 | 20 |
|
21 | 21 |
import org.apache.commons.lang3.StringUtils; |
22 |
import org.gvsig.scripting.DataFolderFound; |
|
22 | 23 |
import org.gvsig.scripting.ScriptingBaseScript; |
23 | 24 |
import org.gvsig.scripting.ScriptingDialog; |
24 | 25 |
import org.gvsig.scripting.ScriptingExternalFile; |
... | ... | |
26 | 27 |
import org.gvsig.scripting.ScriptingManager; |
27 | 28 |
import org.gvsig.scripting.ScriptingScript; |
28 | 29 |
import org.gvsig.scripting.ScriptingUnit; |
30 |
import org.gvsig.tools.packageutils.Version; |
|
29 | 31 |
import org.gvsig.tools.script.Script; |
30 | 32 |
import org.gvsig.tools.service.spi.ProviderFactory; |
33 |
import org.gvsig.tools.util.FolderSet; |
|
31 | 34 |
import org.python.jsr223.MyPyScriptEngine; |
32 | 35 |
import org.slf4j.Logger; |
33 | 36 |
import org.slf4j.LoggerFactory; |
34 | 37 |
|
35 | 38 |
|
39 |
@SuppressWarnings("UseSpecificCatch") |
|
36 | 40 |
public class DefaultScriptingManager implements ScriptingManager { |
37 | 41 |
|
38 | 42 |
public static class RegisterSystemFolder { |
... | ... | |
63 | 67 |
private File packagesFolder; |
64 | 68 |
private final Map properties = new HashMap(); |
65 | 69 |
private final Map<String,ScriptEngine> engineGroups = new HashMap<>(); |
70 |
private DataFolderManager dataFolderManager = null; |
|
71 |
private ScriptingFolder userFolder = null; |
|
72 |
private ScriptingFolder systemFolder = null; |
|
66 | 73 |
|
67 | 74 |
@SuppressWarnings({"OverridableMethodCallInConstructor", "LeakingThisInConstructor"}) |
68 | 75 |
public DefaultScriptingManager() { |
... | ... | |
129 | 136 |
this.addLibFolder(new File(this.home, "lib")); |
130 | 137 |
} |
131 | 138 |
|
139 |
private DataFolderManager getDataFolderManager() { |
|
140 |
if( this.dataFolderManager==null ) { |
|
141 |
this.dataFolderManager = new DataFolderManager(this); |
|
142 |
} |
|
143 |
return this.dataFolderManager; |
|
144 |
} |
|
145 |
|
|
132 | 146 |
@Override |
133 | 147 |
public File getDataFolder(String id) { |
134 |
File f = FileUtils.getFile(getHomeFolder(), "data",id); |
|
135 |
createFolder(f); |
|
136 |
return f; |
|
148 |
return this.getDataFolderManager().getDataFolder(id); |
|
137 | 149 |
} |
138 | 150 |
|
151 |
public void registerDataFolder(ScriptingFolder folderScript, String id ) { |
|
152 |
this.getDataFolderManager().registerDataFolder(folderScript, id); |
|
153 |
} |
|
154 |
|
|
155 |
@Override |
|
156 |
public List<DataFolderFound> searchOldVersions(Version currentVersion, FolderSet folder) { |
|
157 |
return this.getDataFolderManager().searchOldVersions(currentVersion, folder); |
|
158 |
} |
|
159 |
|
|
139 | 160 |
protected synchronized ScriptEngineManager getEngineManager() { |
140 | 161 |
if (this.engineManager == null) { |
141 | 162 |
this.engineManager |
... | ... | |
379 | 400 |
return folder; |
380 | 401 |
} |
381 | 402 |
|
403 |
public ScriptingUnit getUnit(String pathName) { |
|
404 |
ScriptingUnit unit = null; |
|
405 |
String[] parts = StringUtils.split(pathName, '/'); |
|
406 |
if( pathName.equals(this.getUserFolder().getName()) ) { |
|
407 |
unit = this.getUserFolder().getUnit( |
|
408 |
StringUtils.join(parts, "/", 1, parts.length) |
|
409 |
); |
|
410 |
} else if( pathName.equals(this.getSystemFolder().getName()) ) { |
|
411 |
unit = this.getSystemFolder().getUnit( |
|
412 |
StringUtils.join(parts, "/", 1, parts.length) |
|
413 |
); |
|
414 |
} |
|
415 |
return unit; |
|
416 |
} |
|
417 |
|
|
382 | 418 |
public ScriptingUnit getUnit(File file) { |
383 | 419 |
ScriptingFolder folder; |
384 | 420 |
ScriptingUnit unit; |
385 | 421 |
|
386 | 422 |
if (file.isAbsolute()) { |
387 |
folder = new DefaultScriptingFolder(null, this, file.getParentFile()); |
|
423 |
if( FileUtils.isSameFile(this.getRootUserFolder(), file.getParentFile()) ) { |
|
424 |
folder = this.getUserFolder(); |
|
425 |
// FIXME: que pasa si esta en SystemFolder ??? |
|
426 |
} else { |
|
427 |
folder = new DefaultScriptingFolder(null, this, file.getParentFile()); |
|
428 |
} |
|
388 | 429 |
unit = folder.getUnit(file); |
389 | 430 |
return unit; |
390 | 431 |
} else { |
... | ... | |
405 | 446 |
|
406 | 447 |
@Override |
407 | 448 |
public ScriptingFolder getSystemFolder() { |
408 |
return new SystemFolder(this); |
|
449 |
if( this.systemFolder == null ) { |
|
450 |
this.systemFolder = new SystemFolder(this); |
|
451 |
} |
|
452 |
return this.systemFolder; |
|
409 | 453 |
} |
410 | 454 |
|
411 | 455 |
@Override |
412 | 456 |
public ScriptingFolder getUserFolder() { |
413 |
return new UserFolder(this, this.getRootUserFolder()); |
|
457 |
if( this.userFolder == null ) { |
|
458 |
this.userFolder = new UserFolder(this, this.getRootUserFolder()); |
|
459 |
} |
|
460 |
return this.userFolder; |
|
414 | 461 |
} |
415 | 462 |
|
416 | 463 |
@Override |
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 | ||
---|---|---|
118 | 118 |
} |
119 | 119 |
|
120 | 120 |
} |
121 |
|
|
122 |
public Unit getUnit(String path) { |
|
123 |
path = FilenameUtils.normalizeNoEndSeparator(path, true); |
|
124 |
if( path == null ) { |
|
125 |
return null; |
|
126 |
} |
|
127 |
File f; |
|
128 |
ScriptingUnit unit; |
|
129 |
String[] path_a = StringUtils.split(path, '/'); |
|
130 |
switch( path_a.length ) { |
|
131 |
case 0: |
|
132 |
return null; |
|
133 |
default: |
|
134 |
f = new File(this.getFile(), path_a[0]); |
|
135 |
unit = this.getUnit(f); |
|
136 |
if( unit instanceof ScriptingFolder ) { |
|
137 |
unit = ((ScriptingFolder) unit).getUnit( |
|
138 |
StringUtils.join(path_a, '/', 1, path_a.length) |
|
139 |
); |
|
140 |
return (Unit) unit; |
|
141 |
} |
|
142 |
return null; |
|
143 |
case 1: |
|
144 |
f = new File(this.getFile(), path_a[0]); |
|
145 |
unit = this.getUnit(f); |
|
146 |
return (Unit) unit; |
|
147 |
} |
|
148 |
|
|
149 |
} |
|
150 |
|
|
121 | 151 |
|
122 | 152 |
@Override |
123 | 153 |
public Unit getUnit(File afile) { |
org.gvsig.scripting/trunk/org.gvsig.scripting/org.gvsig.scripting.lib/org.gvsig.scripting.lib.impl/src/main/java/org/gvsig/scripting/impl/UserFolder.java | ||
---|---|---|
7 | 7 |
|
8 | 8 |
public class UserFolder extends DefaultScriptingFolder { |
9 | 9 |
|
10 |
public final static String ID = "UserFolder"; |
|
11 |
|
|
12 |
@SuppressWarnings("OverridableMethodCallInConstructor") |
|
10 | 13 |
public UserFolder(ScriptingManager manager, File folder) { |
11 | 14 |
super(null, manager, folder); |
12 | 15 |
this.setName("User"); |
13 | 16 |
this.setDescription("Scripts del usuario"); |
14 |
this.setId("UserFolder");
|
|
17 |
this.setId(ID);
|
|
15 | 18 |
} |
16 | 19 |
|
17 | 20 |
@Override |
org.gvsig.scripting/trunk/org.gvsig.scripting/org.gvsig.scripting.lib/org.gvsig.scripting.lib.impl/src/main/java/org/gvsig/scripting/impl/SystemFolder.java | ||
---|---|---|
11 | 11 |
|
12 | 12 |
public class SystemFolder extends DefaultScriptingFolder { |
13 | 13 |
|
14 |
public final static String ID = "SystemFolder"; |
|
15 |
|
|
16 |
@SuppressWarnings("OverridableMethodCallInConstructor") |
|
14 | 17 |
public SystemFolder(ScriptingManager manager) { |
15 | 18 |
super(manager); |
16 | 19 |
this.setName("System"); |
17 |
this.setId("SystemFolder");
|
|
20 |
this.setId(ID);
|
|
18 | 21 |
this.setDescription("Scripts del Sistema"); |
19 | 22 |
} |
20 | 23 |
|
... | ... | |
40 | 43 |
|
41 | 44 |
@Override |
42 | 45 |
public Unit getUnit(File afile) { |
43 |
Unit unit = null;
|
|
46 |
Unit unit; |
|
44 | 47 |
String path = afile.getPath(); |
45 | 48 |
if (path.startsWith("/")) { |
46 | 49 |
path = path.substring(1); |
... | ... | |
49 | 52 |
List<RegisterSystemFolder> folders = this.manager.getSystemFolders(); |
50 | 53 |
for (int i = 0; i < folders.size(); i++) { |
51 | 54 |
RegisterSystemFolder systemfolder = folders.get(i); |
52 |
DefaultScriptingFolder folder = new DefaultScriptingFolder(this, manager, systemfolder.folder.getAbsoluteFile());
|
|
53 |
if (path.startsWith(folder.getId() + "/")) {
|
|
54 |
unit = folder.getUnit(new File(path.substring(folder.getId().length() + 1)));
|
|
55 |
DefaultScriptingFolder theFolder = new DefaultScriptingFolder(this, manager, systemfolder.folder.getAbsoluteFile());
|
|
56 |
if (path.startsWith(theFolder.getId() + "/")) {
|
|
57 |
unit = theFolder.getUnit(new File(path.substring(theFolder.getId().length() + 1)));
|
|
55 | 58 |
if (unit != null) { |
56 | 59 |
return unit; |
57 | 60 |
} |
... | ... | |
66 | 69 |
List<RegisterSystemFolder> folders = this.manager.getSystemFolders(); |
67 | 70 |
for (int i = 0; i < folders.size(); i++) { |
68 | 71 |
RegisterSystemFolder systemfolder = folders.get(i); |
69 |
DefaultScriptingFolder folder = new DefaultScriptingFolder(this, manager, systemfolder.folder.getAbsoluteFile());
|
|
70 |
folder.setName(systemfolder.name);
|
|
71 |
ol.add(folder);
|
|
72 |
DefaultScriptingFolder theFolder = new DefaultScriptingFolder(this, manager, systemfolder.folder.getAbsoluteFile());
|
|
73 |
theFolder.setName(systemfolder.name);
|
|
74 |
ol.add(theFolder);
|
|
72 | 75 |
} |
73 | 76 |
return ol; |
74 | 77 |
} |
Also available in: Unified diff