Revision 1084

View differences:

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">&lt;html&gt;Han sido encontradas preferencias de versiones anteriores para algunos complementos.&lt;/html&gt;</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">&lt;html&gt;Seleccione los complementos para los que desea recuperar las preferencias de versiones anteriores&lt;/html&gt;</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