Revision 1413

View differences:

org.gvsig.scripting/tags/org.gvsig.scripting-2.3.127/org.gvsig.scripting.app/pom.xml
1
<?xml version="1.0" encoding="ISO-8859-1"?>
2

  
3
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4
	<modelVersion>4.0.0</modelVersion>
5
	<artifactId>org.gvsig.scripting.app</artifactId>
6
	<packaging>pom</packaging>
7
	<name>${project.artifactId}</name>
8
	<parent>
9
	  <groupId>org.gvsig</groupId>
10
	  <artifactId>org.gvsig.scripting</artifactId>
11
	  <version>2.3.127</version>
12
  	</parent>
13

  
14
	<modules>
15
		<module>org.gvsig.scripting.app.mainplugin</module>
16
	</modules>
17
</project>
org.gvsig.scripting/tags/org.gvsig.scripting-2.3.127/org.gvsig.scripting.app/org.gvsig.scripting.app.mainplugin/buildNumber.properties
1
#Sun Feb 28 00:35:47 CET 2021
2
buildNumber=207
org.gvsig.scripting/tags/org.gvsig.scripting-2.3.127/org.gvsig.scripting.app/org.gvsig.scripting.app.mainplugin/src/main/java/org/gvsig/scripting/app/extension/ScriptLaunchExtension.java
1
package org.gvsig.scripting.app.extension;
2

  
3
import java.io.File;
4
import java.util.ArrayList;
5
import java.util.Arrays;
6
import java.util.List;
7
import javax.swing.JOptionPane;
8
import org.gvsig.andami.PluginsLocator;
9
import org.gvsig.andami.PluginsManager;
10
import org.gvsig.andami.plugins.Extension;
11
import org.gvsig.app.ApplicationLocator;
12
import org.gvsig.app.ApplicationManager;
13
import org.gvsig.scripting.ScriptingLocator;
14
import org.gvsig.scripting.ScriptingManager;
15
import org.gvsig.scripting.ScriptingScript;
16
import org.slf4j.Logger;
17
import org.slf4j.LoggerFactory;
18

  
19
public class ScriptLaunchExtension extends Extension {
20

  
21
    private static final Logger logger = LoggerFactory.getLogger(ScriptLaunchExtension.class);
22

  
23
    @Override
24
    public void initialize() {
25
    }
26

  
27
    @Override
28
    public boolean isEnabled() {
29
        return true;
30
    }
31

  
32
    @Override
33
    public boolean isVisible() {
34
        return true;
35
    }
36

  
37
    @Override
38
    public boolean canQueryByAction() {
39
        return true;
40
    }
41

  
42
    @Override
43
    public void execute(String action) {
44
        ApplicationManager application = ApplicationLocator.getManager();
45
        ScriptingScript script = getScript(action);
46
        if( script == null ) {
47
            application.messageDialog(
48
                    "Can't locate script '"+action+"'", 
49
                    "Warning", 
50
                    JOptionPane.WARNING_MESSAGE
51
            );
52
            return;
53
        }
54
        try {
55
            script.runAsTask(null);
56
        } catch (Throwable th) {
57
            logger.warn("Can't execute '" + action + "' script.", th);
58
        }
59
    }
60

  
61
    @Override
62
    public void execute(String action, Object[] args) {
63
        ApplicationManager application = ApplicationLocator.getManager();
64
        ScriptingScript script = getScript(action);
65
        if( script == null ) {
66
            application.messageDialog(
67
                    "Can't locate script '"+action+"'", 
68
                    "Warning", 
69
                    JOptionPane.WARNING_MESSAGE
70
            );
71
            return;
72
        }
73
        try {
74
            script.runAsTask(args);
75
        } catch (Throwable th) {
76
            logger.warn("Can't execute '" + action + "' script.", th);
77
        }
78
    }
79

  
80
    @Override
81
    public boolean isVisible(String action) {
82
        ScriptingScript script = getScript(action);
83
        try {
84
            Boolean value = (Boolean) script.invokeFunction("isVisible", null);
85
            return value;
86
        } catch (Throwable th) {
87
            logger.warn("Can't execute isVisible in '" + action + "' script.", th);
88
        }
89
        return false;
90
    }
91

  
92
    @Override
93
    public boolean isEnabled(String action) {
94
        ScriptingScript script = getScript(action);
95
        try {
96
            Boolean value = (Boolean) script.invokeFunction("isEnabled", null);
97
            return value;
98
        } catch (Throwable th) {
99
            logger.warn("Can't execute isEnabled in '" + action + "' script.", th);
100
        }
101
        return false;
102
    }
103

  
104
    private ScriptingScript getScript(String scriptpathname) {
105
        final ScriptingManager manager = ScriptingLocator.getManager();
106
        final PluginsManager pluginManager = PluginsLocator.getManager();
107

  
108
        File scriptfile;
109
        ScriptingScript script;
110
        
111
        String s = manager.getRootUserFolder().getAbsolutePath().replace("\\", "/");
112
        scriptfile = new File(s+"/"+scriptpathname);
113
        if (scriptfile.exists()) {
114
            script = (ScriptingScript) manager.getScript(scriptfile);
115
            return script;
116
        }
117
                
118
        final List<File> pluginsFolders = new ArrayList<>();
119
        for (File f : pluginManager.getPluginsFolders()) {
120
            pluginsFolders.addAll(Arrays.asList(f.listFiles()));
121
        }
122

  
123
        for (File pluginFolder : pluginsFolders) {
124
            s = pluginFolder.getAbsolutePath().replace("\\", "/");
125
            scriptfile = new File(s+"/scripting/scripts/"+scriptpathname);
126
            if (scriptfile.exists()) {
127
                script = (ScriptingScript) manager.getScript(scriptfile);
128
                return script;
129
            }
130
        }
131
        return (ScriptingScript) manager.getScript(scriptpathname);
132
    }
133

  
134
}
org.gvsig.scripting/tags/org.gvsig.scripting-2.3.127/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.awt.Dimension;
4
import java.util.ArrayList;
5
import java.util.List;
6
import javax.swing.DefaultListModel;
7
import javax.swing.ListSelectionModel;
8
import javax.swing.event.ListSelectionEvent;
9
import javax.swing.event.ListSelectionListener;
10
import org.gvsig.scripting.DataFolderFound;
11
import org.gvsig.tools.swing.api.JListWithCheckbox;
12
import org.gvsig.tools.swing.api.ListElement;
13
import org.gvsig.tools.swing.api.ToolsSwingLocator;
14
import org.gvsig.tools.swing.api.ToolsSwingManager;
15

  
16
/**
17
 *
18
 * @author jjdelcerro
19
 */
20
public class DataFoldersRecoverPanel extends DataFoldersRecoverPanelView {
21

  
22
    private final List<DataFolderFound> dataFoldersFound;
23
    private JListWithCheckbox lstCheckedDataFolders;
24

  
25
    public DataFoldersRecoverPanel(List<DataFolderFound> dataFoldersFound) {
26
        this.dataFoldersFound = dataFoldersFound;
27
        this.initComponents();
28
    }
29

  
30
    private void initComponents() {
31
        ToolsSwingManager manager = ToolsSwingLocator.getToolsSwingManager();
32
        this.lstCheckedDataFolders = manager.createJListWithCheckbox(lstDataFolders);
33
        DefaultListModel model = new DefaultListModel();
34
        for (DataFolderFound dataFolderFound : dataFoldersFound) {
35
            if( dataFolderFound.getApplicationFolder()==null ) {
36
                continue;
37
            }
38
            model.addElement(
39
                new ListElement<>(
40
                    dataFolderFound.getApplicationName() + " ("+dataFolderFound.getDataFolderId()+")", 
41
                    dataFolderFound
42
                )
43
            );
44
        }
45
        this.lstDataFolders.setModel(model);
46
        this.lstDataFolders.addListSelectionListener(new ListSelectionListener() {
47
            @Override
48
            public void valueChanged(ListSelectionEvent e) {
49
                if( e.getValueIsAdjusting() ) {
50
                    return;
51
                }
52
                updateInterfaceData();
53
            }
54
        });
55

  
56
        this.setPreferredSize(new Dimension(500, 420));
57
    }
58

  
59
    private void updateInterfaceData() {
60
        DataFolderFound dataFolder = (DataFolderFound) ListElement.getSelected(this.lstDataFolders);
61
        if (dataFolder == null) {
62
            return;
63
        }
64
        this.txtApplication.setText(dataFolder.getApplicationName());
65
        this.txtPreferencias.setText(dataFolder.getDataFolderId());
66
        this.txtPath.setText(dataFolder.getApplicationFolder().getUserPath());
67
        String path = dataFolder.getOldDataFolder().getAbsolutePath();
68
        this.txtOldFolder.setText(path);
69
        this.txtOldFolder.setCaretPosition(path.length());
70
    }
71

  
72
    public List<DataFolderFound> getSelectedDataFolders() {
73
        List<DataFolderFound> r = new ArrayList<>();
74
        ListSelectionModel checkedModel = this.lstCheckedDataFolders.getCheckedModel();
75
        for (int i = 0; i < dataFoldersFound.size(); i++) {
76
            if (checkedModel.isSelectedIndex(i)) {
77
                r.add(dataFoldersFound.get(i));
78
            }
79
        }
80
        return r;
81
    }
82

  
83
}
org.gvsig.scripting/tags/org.gvsig.scripting-2.3.127/org.gvsig.scripting.app/org.gvsig.scripting.app.mainplugin/src/main/java/org/gvsig/scripting/app/extension/ScriptingExtension.java
1
/* gvSIG. Geographic Information System of the Valencian Government
2
 *
3
 * Copyright (C) 2007-2008 Infrastructures and Transports Department
4
 * of the Valencian Government (CIT)
5
 * 
6
 * This program is free software; you can redistribute it and/or
7
 * modify it under the terms of the GNU General Public License
8
 * as published by the Free Software Foundation; either version 2
9
 * of the License, or (at your option) any later version.
10
 * 
11
 * This program is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 * GNU General Public License for more details.
15
 * 
16
 * You should have received a copy of the GNU General Public License
17
 * along with this program; if not, write to the Free Software
18
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
19
 * MA  02110-1301, USA.
20
 * 
21
 */
22
package org.gvsig.scripting.app.extension;
23

  
24
import java.io.File;
25
import java.io.InputStream;
26
import java.net.MalformedURLException;
27
import java.net.URL;
28
import java.util.List;
29
import org.apache.commons.io.IOUtils;
30
import org.apache.commons.lang3.StringUtils;
31

  
32
import org.gvsig.andami.IconThemeHelper;
33
import org.gvsig.andami.PluginServices;
34
import org.gvsig.andami.PluginsLocator;
35
import org.gvsig.andami.PluginsManager;
36
import org.gvsig.andami.plugins.Extension;
37
import org.gvsig.andami.plugins.PluginClassLoader;
38
import org.gvsig.scripting.ScriptingLocator;
39
import org.gvsig.scripting.ScriptingManager;
40
import org.gvsig.scripting.swing.api.ScriptingSwingLocator;
41
import org.gvsig.scripting.swing.api.ScriptingUIManager;
42
import org.gvsig.tools.dynobject.DynObject;
43
import org.gvsig.tools.swing.impl.windowmanager.DefaultWindowManager;
44
import org.slf4j.Logger;
45
import org.slf4j.LoggerFactory;
46
import org.gvsig.tools.script.Script;
47
import org.gvsig.tools.util.Invocable;
48

  
49
@SuppressWarnings("UseSpecificCatch")
50
public class ScriptingExtension extends Extension {
51

  
52
    @SuppressWarnings("FieldNameHidesFieldInSuperclass")
53
    private static final Logger LOGGER = LoggerFactory.getLogger(ScriptingExtension.class);
54

  
55
    private ScriptingUtils utils;
56
    
57
    @Deprecated
58
    public static void log(String message) {
59
        ScriptingUtils.log(ScriptingUtils.INFO, message, null);
60
    }
61

  
62
    @Deprecated
63
    public static void log(int level, String message) {
64
        ScriptingUtils.log(level, message, null);
65
    }
66

  
67
    @Deprecated
68
    public static void log(int level, String message, Throwable th) {
69
        ScriptingUtils.log(level, message, th);
70
    }
71
    
72
    @Override
73
    public void initialize() {
74
        IconThemeHelper.registerIcon("action", "tools-scripting-launcher", this);
75
        IconThemeHelper.registerIcon("action", "tools-scripting-composer", this);
76
        IconThemeHelper.registerIcon("action", "tools-scripting-console-jython", this);
77

  
78
        PluginsManager pluginManager = PluginsLocator.getManager();
79
        this.utils = new ScriptingUtils();
80

  
81
        this.utils.initializaPaths(
82
                pluginManager.getPluginsFolders(), 
83
                pluginManager.getInstallFolder(), 
84
                this.getPlugin().getPluginHomeFolder(), 
85
                pluginManager.getApplicationVersion().format(ScriptsInstallerInitializer.VERSION_FORMAT)
86
        );
87
        
88
        Thread th = new Thread(new Runnable() {
89
            @Override
90
            public void run() {
91
                preloadPythonEngine();
92
            }
93
        }, "ScriptEnginesInitializer");
94
        th.start();
95
        try {
96
            th.join(1000); // force change to other thread
97
        } catch (InterruptedException ex) {
98
            // Ignore.
99
        }
100
    }
101
    
102
    public ScriptingUtils getScriptingUtils() {
103
        return this.utils;
104
    } 
105
    
106
    @Override
107
    public void execute(String actionCommand) {
108
        this.execute(actionCommand, null);
109
    }
110

  
111
    @Override
112
    public void execute(String command, Object[] args) {
113

  
114

  
115
        if( "tools-scripting-launcher".equalsIgnoreCase(command) ) {
116
            utils.runLauncher();
117
            
118
        } else if( "tools-scripting-composer".equalsIgnoreCase(command) ) {
119
            utils.runComposer();
120

  
121
        } else {
122
            utils.runScript(command, args);
123
        }
124
    }
125

  
126
    private void preloadPythonEngine() {
127
        ScriptingManager manager = (ScriptingManager) ScriptingLocator.getManager();
128
        synchronized (manager) {
129
            String respath = "/scripting/langs/python/preload.py";
130
            InputStream res = this.getClass().getResourceAsStream(respath);
131
            if( res != null ) {
132
                LOGGER.info("Scan for script engines");
133
                List<String> lines;
134
                try {
135
                    lines = IOUtils.readLines(res);
136
                    String code = StringUtils.join(lines, "\n");
137
                    LOGGER.info("Preload python script engine");
138
                    Script script = manager.createScript(
139
                        "preload",
140
                        code,
141
                        ScriptingManager.PYTHON_LANGUAGE_NAME
142
                    );
143
                    LOGGER.info("Preload python modules");
144
                    script.invokeFunction("main", null);
145

  
146
                } catch (Exception ex) {
147
                    LOGGER.warn("Can't run preload script for python.", ex);
148
                }
149
                LOGGER.info("Preload of script engines finished");
150
            }
151
        }
152
    }
153

  
154
    
155
    @Override
156
    public void postInitialize() {
157
        super.postInitialize();
158
                        
159
        PluginsManager pluginManager = PluginsLocator.getManager();
160

  
161
        pluginManager.addStartupTask(
162
            "ExecuteAutorunScripts",
163
            utils.getAutorunScriptsOnStartup(pluginManager.getPluginsFolders()),
164
            false,
165
            200
166
        );
167
        pluginManager.addStartupTask(
168
            "PostProcessArguments",
169
            new PostProcessArguments(),
170
            false,
171
            199
172
        );
173

  
174

  
175
        Invocable initializer = new ScriptsInstallerInitializer();
176
        initializer.call(this.getPlugin().getPluginName());
177
    }
178

  
179
    @Override
180
    public boolean isEnabled() {
181
        return true;
182
    }
183

  
184
    @Override
185
    public boolean isVisible() {
186
        return true;
187
    }
188

  
189
    public static void add_classpath(URL url) {
190
        if( url==null ) {
191
            LOGGER.warn("Can't add to the plugin classloader a null URL.");
192
            return;
193
        }
194
        try {
195
            PluginsManager manager = PluginsLocator.getManager();
196
            PluginServices thePlugin = manager.getPlugin(ScriptingExtension.class);
197
            PluginClassLoader loader = thePlugin.getClassLoader();
198
            loader.addURL(url);
199
        } catch(Throwable th) {
200
            LOGGER.warn("Can't add the url '"+url.toString()+"' to the plugin classloader.",th);
201
        }
202
    }
203
    
204
    public static void add_classpath(File path) {
205
        if( path==null ) {
206
            LOGGER.warn("Can't create a url from a null file.");
207
            return;
208
        }
209
        try {
210
            URL url = path.toURI().toURL();
211
            add_classpath(url);
212
        } catch (MalformedURLException ex) {
213
            LOGGER.warn("Can't create a url from the path '"+path+"'.", ex);
214
        }
215
    }
216
    
217
    public static void add_classpath(String path) {
218
        if( path==null ) {
219
            LOGGER.warn("Can't create a url from a null path.");
220
            return;
221
        }
222
        File f = new File(path);
223
        add_classpath(f);
224
    }
225

  
226
    @Override
227
    public PluginServices getPlugin() {
228
        PluginServices thePlugin = super.getPlugin();
229
        if (thePlugin == null) {
230
            thePlugin = PluginsLocator.getManager().getPlugin(ScriptingExtension.class);
231
            this.setPlugin(thePlugin);
232
        }
233
        return thePlugin;
234
    }
235
    
236
}
org.gvsig.scripting/tags/org.gvsig.scripting-2.3.127/org.gvsig.scripting.app/org.gvsig.scripting.app.mainplugin/src/main/java/org/gvsig/scripting/app/extension/ScriptingUtils.java
1
package org.gvsig.scripting.app.extension;
2

  
3
import java.awt.event.ActionEvent;
4
import java.awt.event.ActionListener;
5
import java.io.File;
6
import java.io.IOException;
7
import java.nio.file.FileVisitOption;
8
import static java.nio.file.FileVisitOption.FOLLOW_LINKS;
9
import java.nio.file.FileVisitResult;
10
import java.nio.file.Files;
11
import java.nio.file.Path;
12
import java.nio.file.Paths;
13
import java.nio.file.SimpleFileVisitor;
14
import java.nio.file.attribute.BasicFileAttributes;
15
import java.text.MessageFormat;
16
import java.util.ArrayList;
17
import java.util.Arrays;
18
import java.util.Collections;
19
import java.util.Comparator;
20
import java.util.EnumSet;
21
import java.util.List;
22
import java.util.function.Predicate;
23
import javax.swing.JOptionPane;
24
import javax.swing.SwingUtilities;
25
import org.apache.commons.io.FileUtils;
26
import org.apache.commons.io.FilenameUtils;
27
import org.apache.commons.io.IOCase;
28
import org.apache.commons.lang3.BooleanUtils;
29
import org.apache.commons.lang3.StringUtils;
30
import org.gvsig.andami.PluginServices;
31
import org.gvsig.andami.PluginsLocator;
32
import org.gvsig.andami.PluginsManager;
33
import org.gvsig.scripting.DataFolderFound;
34
import org.gvsig.scripting.ScriptingBaseScript;
35
import org.gvsig.scripting.ScriptingFolder;
36
import org.gvsig.scripting.ScriptingLocator;
37
import org.gvsig.scripting.ScriptingManager;
38
import org.gvsig.scripting.ScriptingScript;
39
import org.gvsig.scripting.ScriptingUnit;
40
import org.gvsig.scripting.app.extension.messagewait.MessageWait;
41
import org.gvsig.scripting.swing.api.JScriptingComposer;
42
import org.gvsig.scripting.swing.api.ScriptingSwingLocator;
43
import org.gvsig.scripting.swing.api.ScriptingUIManager;
44
import static org.gvsig.scripting.swing.api.ScriptingUIManager.SCRIPT_COMPOSER_AUTORUN;
45
import org.gvsig.tools.ToolsLocator;
46
import org.gvsig.tools.dynobject.DynObject;
47
import org.gvsig.tools.exception.BaseException;
48
import org.gvsig.tools.i18n.I18nManager;
49
import org.gvsig.tools.packageutils.PackageManager;
50
import org.gvsig.tools.packageutils.Version;
51
import org.gvsig.tools.swing.api.ToolsSwingLocator;
52
import org.gvsig.tools.swing.api.threadsafedialogs.ThreadSafeDialogsManager;
53
import org.gvsig.tools.swing.api.windowmanager.Dialog;
54
import org.gvsig.tools.swing.api.windowmanager.WindowManager;
55
import org.gvsig.tools.swing.api.windowmanager.WindowManager_v2;
56
import org.gvsig.tools.swing.impl.windowmanager.DefaultWindowManager;
57
import org.gvsig.tools.task.SimpleTaskStatus;
58
import org.gvsig.tools.visitor.VisitCanceledException;
59
import org.gvsig.tools.visitor.Visitor;
60
import org.slf4j.Logger;
61
import org.slf4j.LoggerFactory;
62
import org.gvsig.tools.util.FolderSet;
63
import org.gvsig.tools.util.impl.DefaultFolderSet;
64
/**
65
 *
66
 * @author jjdelcerro
67
 */
68
@SuppressWarnings("UseSpecificCatch")
69
public class ScriptingUtils {
70
    
71
    public static final String SKIP_AUTORUNS = "skipAutoruns";
72
    
73
    private static final Logger LOGGER = LoggerFactory.getLogger(ScriptingExtension.class);
74

  
75
    private boolean executingAutorunScripts = false;
76
    private static boolean composer_initialized = false;
77
    private final MessageWait message;
78

  
79
    /*
80
     * la funcion log y las constantes estan pensadas para usarlas desde los scripts.
81
     */
82
    public static final int INFO = 0;
83
    public static final int TRACE = 1;
84
    public static final int WARN = 2;
85
    public static final int ERROR = 3;
86

  
87
    public static void log(String message) {
88
        log(INFO, message, null);
89
    }
90

  
91
    public static void log(int level, String message) {
92
        log(level, message, null);
93
    }
94

  
95
    public static void log(int level, String message, Throwable th) {
96
        switch( level ) {
97
        case TRACE:
98
            LOGGER.trace(message, th);
99
            break;
100
        case ERROR:
101
            LOGGER.error(message, th);
102
            break;
103
        case WARN:
104
            LOGGER.warn(message, th);
105
            break;
106
        default:
107
        case INFO:
108
            LOGGER.info(message, th);
109
            break;
110
        }
111
    }
112
    private String appversion;
113
    private File pluginHomeFolder;
114

  
115
    public ScriptingUtils() {
116
        message = new MessageWait();
117
    }
118
    
119
    public static File getScriptsHomeFolder(File pluginHomeFolder, String appversion) {
120
        File scriptsHomeFolder;
121
        File f = FileUtils.getFile(pluginHomeFolder, "scripts-folder.txt");
122
        if( f.exists() ) {
123
            try {
124
                List<String> lines = FileUtils.readLines(f);
125
                for( String line : lines ) {
126
                    line = line.trim();
127
                    if( !line.startsWith("#") ) {
128
                        scriptsHomeFolder = new File(line);
129
                        if( !scriptsHomeFolder.isAbsolute() ) {
130
                            scriptsHomeFolder = new File(pluginHomeFolder, line);
131
                        }
132
                        scriptsHomeFolder = new File(
133
                            FilenameUtils.normalizeNoEndSeparator(
134
                                scriptsHomeFolder.getAbsolutePath(),
135
                                true
136
                            )
137
                        );
138
                        if( scriptsHomeFolder.exists() ) {
139
                            return scriptsHomeFolder;
140
                        }
141
                    }
142
                }
143
            } catch (IOException ex) {
144
            }
145
        } else {
146
            try {
147
                FileUtils.touch(f);
148
            } catch (IOException ex) {
149
            }
150
        }
151
        scriptsHomeFolder = FileUtils.getFile(pluginHomeFolder, appversion) ;
152
        return scriptsHomeFolder;
153
    }
154
    
155
    public void initializaPaths(List<File> pluginsFolder, File installFolder, File pluginHoneFolder, String appversion) {
156

  
157
        this.appversion = appversion;
158
        this.pluginHomeFolder = pluginHoneFolder;
159
        ScriptingManager manager = ScriptingLocator.getManager();
160
        manager.setHomeFolder(getScriptsHomeFolder(pluginHoneFolder, appversion));
161

  
162
        ScriptingFolder folder = manager.createLink(
163
            "Common",
164
            manager.getUserFolder(), 
165
            "../../scripts"
166
        );
167
        folder.setProperty(ScriptingUtils.SKIP_AUTORUNS, BooleanUtils.toStringTrueFalse(true));
168
        folder.save();
169
//        manager.createLink(
170
//            "Previous version",
171
//            manager.getUserFolder(), 
172
//            "../../../org.gvsig.scripting.app.extension/scripts"
173
//        );
174

  
175
        List<File> pluginsFolders = new ArrayList<>();
176
        for( File f : pluginsFolder ) {
177
            pluginsFolders.addAll(Arrays.asList(f.listFiles()));
178
        }
179

  
180
        for( File pluginFolder : pluginsFolders ) {
181
            File scriptsFolder = new File(pluginFolder, "scripting/scripts");
182
            if( scriptsFolder.exists() ) {
183
                manager.registerSystemFolder(pluginFolder.getName(), scriptsFolder);
184
            }
185
            File libFolder = new File(pluginFolder, "scripting/lib");
186
            if( libFolder.exists() ) {
187
                manager.addLibFolder(libFolder);
188
            }
189
        }
190
        manager.setPackagesFolder(installFolder);
191

  
192
        File localAddonRepositoryFolder = new File(manager.getRootUserFolder(), "addons");
193
        if( !localAddonRepositoryFolder.exists() ) {
194
            try {
195
                FileUtils.forceMkdir(localAddonRepositoryFolder);
196
            } catch (IOException ex) {
197
                LOGGER.info("Can't create addons folder in '" + localAddonRepositoryFolder.getAbsolutePath() + "'.", ex);
198
            }
199
        }
200
        File initAddonFile = new File(localAddonRepositoryFolder, "__init__.py");
201
        if( !initAddonFile.exists() ) {
202
            try {
203
                FileUtils.touch(initAddonFile);
204
            } catch (IOException ex) {
205
                LOGGER.info("Can't create addons __init__ file in '" + localAddonRepositoryFolder.getAbsolutePath() + "'.", ex);
206
            }
207
        }
208
    }
209
    
210
    
211
    public void runScript(String name, Object[] args) {
212
        if( StringUtils.isBlank(name) ) {
213
            return;
214
        }
215
        ScriptingUIManager uimanager = ScriptingSwingLocator.getUIManager();
216
        WindowManager winmanager = ToolsSwingLocator.getWindowManager();        
217
        ScriptingBaseScript script = uimanager.getManager().getScript(name);
218
        if( script != null ) {
219
            script.run(args);
220
        } else {
221
            ThreadSafeDialogsManager dialogs = ToolsSwingLocator.getThreadSafeDialogsManager();
222
            dialogs.messageDialog(
223
                    "Can't locate script '" + name + "'.", 
224
                    "ScriptLaunch", 
225
                    JOptionPane.OK_OPTION
226
            );
227
        }
228
    }
229
    
230
    public void runLauncher() {
231
        ScriptingUIManager uimanager = ScriptingSwingLocator.getUIManager();
232
        WindowManager winmanager = ToolsSwingLocator.getWindowManager();        
233
        winmanager.showWindow(uimanager.createLauncher().asJComponent(), uimanager.getTranslation("Scripting_Launcher"), WindowManager.MODE.TOOL);        
234
    }
235
    
236
    public void runComposer() {
237
        PluginsManager pluginsManager = PluginsLocator.getPluginsManager();
238
        PluginServices plugin = pluginsManager.getPlugin(ScriptingExtension.class);
239
        if( plugin!=null ) {
240
            DynObject preferences = plugin.getPluginProperties();
241
            if( preferences!=null ) {
242
                Boolean composerUseHisWindowManager = (Boolean) preferences.getDynValue("ComposerUseHisWindowManager");
243
                if( composerUseHisWindowManager!=null && composerUseHisWindowManager ) {
244
                    DefaultWindowManager winmanager = new DefaultWindowManager();
245
                    ScriptingUIManager uimanager = ScriptingSwingLocator.getUIManager();
246
                    uimanager.setWindowManager(winmanager);
247
                }
248
            }
249
        }
250

  
251
        I18nManager i18n = ToolsLocator.getI18nManager();
252
        message.showMessage(
253
                i18n.getTranslation("_notice"),
254
                i18n.getTranslation("_Initializing_the_scripting_plugin_Xhorizontal_ellipsisX") + "\n"
255
                + i18n.getTranslation("_Waiting_to_terminate"),
256
                new MessageWait.WaitingCondition() {
257
            private Thread th = null;
258

  
259
            @Override
260
            public boolean stopWaiting() {
261
                if (executingAutorunScripts) {
262
                    return false;
263
                }
264
                if (composer_initialized) {
265
                    return true;
266
                }
267
                if (th == null) {
268
                    th = new Thread(new ExecuteScriptsFromScriptingFolders(null, "scautorun", SCRIPT_COMPOSER_AUTORUN), "StartupScriptingComposer");
269
                    th.start();
270
                }
271
                return false;
272
            }
273
        },
274
                new Runnable() {
275
            @Override
276
            public void run() {
277
                showScriptingComposer();
278
            }
279
        }
280
        );
281

  
282
    }
283
    
284
    public Runnable getAutorunScriptsOnStartup(List<File> pluginsFolders) {
285
        return new ExecuteAutorunScriptsOnStartup(pluginsFolders);
286
    }
287
    
288
    private void showScriptingComposer() {
289
        ScriptingUIManager uimanager = ScriptingSwingLocator.getUIManager();
290
        JScriptingComposer composer = uimanager.createComposer();
291
        uimanager.showWindow(
292
            composer.asJComponent(),
293
            uimanager.getTranslation("Scripting_Composer")
294
        );
295
    }
296

  
297
    private class ExecuteScriptsFromScriptingFolders extends AbstractExecuteScripts {
298
        
299
        public ExecuteScriptsFromScriptingFolders(List<File> pluginsFolders, String title, String patternName) {
300
            super(pluginsFolders, title, patternName);
301
        }
302
        
303
        @Override
304
        public void run() {            
305
            ThreadSafeDialogsManager dialogs = ToolsSwingLocator.getThreadSafeDialogsManager();
306
            SimpleTaskStatus status = ToolsLocator.getTaskStatusManager().createDefaultSimpleTaskStatus("Scripts startup");
307
            status.setIndeterminate();
308
            status.setAutoremove(true);
309
            status.add();
310
            final I18nManager i18nManager = ToolsLocator.getI18nManager();            
311
            try {
312
                LOGGER.info("Searching "+title+" scripts...");
313
                dialogs.message(
314
                    i18nManager.getTranslation("_Searching_autorun_scripts_Xhorizontal_ellipsisX"),
315
                    JOptionPane.INFORMATION_MESSAGE
316
                );
317
                ScriptingManager manager = ScriptingLocator.getManager();
318
                final List<ScriptingScript> scripts = new ArrayList<>();
319
                
320
                Visitor visitor = new Visitor() {
321
                    @Override
322
                    public void visit(Object o) throws VisitCanceledException, BaseException {
323
                        ScriptingUnit unit = (ScriptingUnit) o;
324
                        if( unit instanceof ScriptingScript && 
325
                            FilenameUtils.wildcardMatch(unit.getName(), patternName, IOCase.INSENSITIVE) ) {
326
                            ScriptingScript script = (ScriptingScript) unit;
327
                            if( script.isEnabled() ) {
328
                                scripts.add(script);
329
                            } else {
330
                                LOGGER.info("Skip "+title+" script '" + script.getFile().getAbsolutePath() + "'.");
331
                            }
332
                        }
333
                    }
334
                };
335
                Predicate<ScriptingUnit> includeFilter = new Predicate<ScriptingUnit>() {
336
                    @Override
337
                    public boolean test(ScriptingUnit unit) {
338
                        if( unit instanceof ScriptingFolder ) {
339
                            return !BooleanUtils.toBoolean(unit.getProperty(SKIP_AUTORUNS));
340
                        }
341
                        return false;
342
                    }
343
                };
344
                manager.getSystemFolder().accept(visitor, includeFilter);
345
                manager.getUserFolder().accept(visitor, includeFilter);
346
                sortScripts(scripts);
347
                executeScripts(scripts, status);
348
            } catch(Throwable th) {
349
                
350
            } finally {
351
                composer_initialized = true;
352
                LOGGER.info("Running "+title+" scripts terminated.");
353
                dialogs.message("", JOptionPane.INFORMATION_MESSAGE);
354
                status.terminate();
355
            }
356
        }
357
    }
358

  
359
    public class ExecuteAutorunScriptsOnStartup implements Runnable {
360

  
361
        private final List<File> pluginsFolders;
362

  
363
        public ExecuteAutorunScriptsOnStartup(List<File> pluginsFolders) {
364
            this.pluginsFolders = pluginsFolders;
365
        }
366
        
367
        @Override
368
        public void run() {
369
            Runnable process = new ExecuteScriptsFromFilesystem(
370
                    this.pluginsFolders,
371
                    "autorun", 
372
                    "autorun.inf"
373
            );
374
            process.run();
375
        }
376
    }
377

  
378
    private abstract class AbstractExecuteScripts implements Runnable {
379

  
380
        protected String patternName;
381
        protected String title;
382
        private final List<File> pluginsFolders;
383

  
384
        public AbstractExecuteScripts(List<File> pluginsFolders, String title, String patternName) {
385
            if( pluginsFolders==null ) {
386
                this.pluginsFolders = Collections.EMPTY_LIST;
387
            } else {
388
                this.pluginsFolders = pluginsFolders;
389
            }
390
            this.patternName = patternName;
391
            this.title = title;
392
        }
393
        
394
        protected List<File> getPluginsFolders() {
395
            return this.pluginsFolders;
396
        }
397
        
398
        private String getScriptOrderKey(ScriptingBaseScript o) {
399
            int groupOrder = 500;
400
            String groupName = "default";
401
            int scriptOrder = 500;
402
            String s = o.getProperty("autorun.group.order");
403
            if (s != null) {
404
                try {
405
                    groupOrder = Integer.parseInt(s);
406
                } catch (Exception ex) {
407
                    // Do nothing.
408
                }
409
            }
410
            s = o.getProperty("autorun.group.name");
411
            if (s != null) {
412
                groupName = s;
413
            }
414
            s = o.getProperty("autorun.order");
415
            if (s != null) {
416
                try {
417
                    scriptOrder = Integer.parseInt(s);
418
                } catch (Exception ex) {
419
                    // Do nothing.
420
                }
421
            }
422
            String key = MessageFormat.format(
423
                    "{0,number,000000}.{1}.{2,number,000000}",
424
                    groupOrder,
425
                    groupName,
426
                    scriptOrder
427
            );
428
            return key;
429
        }
430

  
431
        protected void sortScripts(List<ScriptingScript> scripts) {
432
            Collections.sort(scripts, new Comparator<ScriptingBaseScript>() {
433

  
434
                @Override
435
                public int compare(ScriptingBaseScript o1, ScriptingBaseScript o2) {
436
                    return getScriptOrderKey(o2).compareToIgnoreCase(getScriptOrderKey(o1));
437
                }
438
            });
439
        }
440

  
441
        protected void executeScripts(List<ScriptingScript> scripts, SimpleTaskStatus status) {
442
            ThreadSafeDialogsManager dialogs = ToolsSwingLocator.getThreadSafeDialogsManager();
443
            final I18nManager i18nManager = ToolsLocator.getI18nManager();
444
            if (scripts != null && !scripts.isEmpty()) {
445
                if (status != null) {
446
                    status.setRangeOfValues(0, scripts.size());
447
                }
448
                int n = 0;
449
                for (ScriptingBaseScript script : scripts) {
450
                    if (status != null) {
451
                        status.setCurValue(n++);
452
                    }
453
                    try {
454
                        LOGGER.info("running " + title + " script '" + script.getFile().getAbsolutePath() + "' (" + getScriptOrderKey(script) + ", " + script.getIsolationGroup() + ").");
455
                        dialogs.message(
456
                                i18nManager.getTranslation(
457
                                        "_Starting_XnameX",
458
                                        new String[]{
459
                                            script.getFile().getParentFile().getName()}
460
                                ),
461
                                JOptionPane.INFORMATION_MESSAGE
462
                        );
463
                    } catch (Exception ex) {
464
                        // Ignore it
465
                    }
466
                    try {
467
                        // Hacemos un reload por si un sript deshabilito a otro.
468
                        script.reload();
469
                        if( script.isEnabled() ) {
470
                            script.run();
471
                        } else {
472
                            LOGGER.info("Skip " + title + " script '" + script.getFile().getAbsolutePath() + "' (" + getScriptOrderKey(script) + ", " + script.getIsolationGroup() + ").");
473
                        }
474
                    } catch (Exception ex) {
475
                        LOGGER.warn("Can't execute " + title + " from '" + script.getFile().getAbsolutePath() + "'.", ex);
476
                    }
477
                }
478
            }
479

  
480
        }
481
    }
482

  
483
    private class ExecuteScriptsFromFilesystem extends AbstractExecuteScripts {
484

  
485
        public ExecuteScriptsFromFilesystem(List<File> pluginsFolder, String title, String patternName) {
486
            super(pluginsFolder, title, patternName);
487
        }
488

  
489
        @Override
490
        public void run() {
491
            ThreadSafeDialogsManager dialogs = ToolsSwingLocator.getThreadSafeDialogsManager();
492
            executingAutorunScripts = true;
493
            try {
494
                final ScriptingManager manager = ScriptingLocator.getManager();
495
                manager.loadEngines();
496

  
497
//                final PluginsManager pluginManager = PluginsLocator.getManager();
498
                final I18nManager i18nManager = ToolsLocator.getI18nManager();
499

  
500
                final List<ScriptingScript> scripts = new ArrayList<>();
501

  
502
                List<File> pluginsFolders = new ArrayList<>();
503
                for (File pluginsFolders2 : this.getPluginsFolders()) {
504
                    for (File pluginFolder : pluginsFolders2.listFiles()) {
505
                        File f = FileUtils.getFile(pluginFolder, "scripting", "scripts");
506
                        if (f.exists()) {
507
                            pluginsFolders.add(f);
508
                        }
509
                    }
510
                }
511

  
512
                dialogs.message(
513
                        i18nManager.getTranslation("_Searching_autorun_scripts_Xhorizontal_ellipsisX"),
514
                        JOptionPane.INFORMATION_MESSAGE
515
                );
516

  
517
                SimpleFileVisitor<Path> visitor = new SimpleFileVisitor<Path>() {
518
                    @Override
519
                    public FileVisitResult visitFile(Path path, BasicFileAttributes bfa) throws IOException {
520
                        File file = path.toFile();
521
                        if (FilenameUtils.wildcardMatch(file.getName(), patternName, IOCase.INSENSITIVE)) {
522
                            if (file.exists()) {
523
                                ScriptingScript script = (ScriptingScript) manager.getScript(file);
524
                                if (script.isEnabled()) {
525
                                    scripts.add(script);
526
                                } else {
527
                                    LOGGER.info("Skip " + title + " script '" + file.getAbsolutePath() + "'.");
528
                                }
529
                            }
530
                        }
531
                        return FileVisitResult.CONTINUE;
532
                    }
533
                };
534
                try {
535
                    EnumSet<FileVisitOption> opts = EnumSet.of(FOLLOW_LINKS);
536
                    for (File pluginFolder : pluginsFolders) {
537
                        Files.walkFileTree(Paths.get(pluginFolder.toURI()), opts, Integer.MAX_VALUE, visitor);
538
                    }
539
                    Files.walkFileTree(Paths.get(manager.getRootUserFolder().toURI()), opts, Integer.MAX_VALUE, visitor);
540
                    List<ScriptingFolder> folders = manager.getAlternativeUserFolders();
541
                    for (ScriptingFolder folder : folders) {
542
                        Files.walkFileTree(Paths.get(folder.getFile().toURI()), opts, Integer.MAX_VALUE, visitor);
543
                    }
544
                } catch (Exception ex) {
545
                    LOGGER.warn("Can't execute " + title + " in home.", ex);
546
                }
547
                sortScripts(scripts);
548
                executeScripts(scripts, null);
549

  
550
            } finally {
551
                LOGGER.info("Running " + title + " scripts terminated.");
552
                dialogs.message("", JOptionPane.INFORMATION_MESSAGE);
553
                executingAutorunScripts = false;
554
            }
555
            checkDataFoldersVersions();
556
        }
557

  
558
    }
559
    
560
    private void checkDataFoldersVersions() {
561
        final ScriptingManager manager = ScriptingLocator.getManager();
562
        PackageManager versionFactory = ToolsLocator.getPackageManager();
563
        Version currentVersion = versionFactory.createVersion(this.appversion);
564
        FolderSet folders = new DefaultFolderSet();
565
        folders.add(this.pluginHomeFolder);
566
        final List<DataFolderFound> dataFoldersFound = manager.searchOldVersions(currentVersion, folders);
567
        if( dataFoldersFound == null || dataFoldersFound.isEmpty() ) {
568
            return;
569
        }
570
        Runnable askUser = new Runnable() {
571
            @Override
572
            public void run() {
573
                WindowManager_v2 winManager = (WindowManager_v2) ToolsSwingLocator.getWindowManager();
574
                final DataFoldersRecoverPanel panel = new DataFoldersRecoverPanel(dataFoldersFound);
575
                final Dialog dialog = winManager.createDialog(
576
                        panel,
577
                        "Recuperacion de preferencias",
578
                        null,
579
                        WindowManager_v2.BUTTONS_OK_CANCEL
580
                );
581
                dialog.addActionListener(new ActionListener() {
582
                    @Override
583
                    public void actionPerformed(ActionEvent e) {
584
                        if (dialog.getAction() == WindowManager_v2.BUTTON_OK) {
585
                            List<DataFolderFound> toRestore = panel.getSelectedDataFolders();
586
                            for (DataFolderFound dataFolderFound : dataFoldersFound) {
587
                                if (toRestore.contains(dataFolderFound)) {
588
                                    dataFolderFound.restore();
589
                                } else {
590
                                    dataFolderFound.leave();
591
                                }
592
                            }
593
                        }
594
                    }
595
                });
596
                dialog.show(WindowManager.MODE.WINDOW);
597
            }
598
        };
599
        if( SwingUtilities.isEventDispatchThread() ) {
600
            askUser.run();
601
        } else {
602
            SwingUtilities.invokeLater(askUser);
603
        }
604
    }
605
}
org.gvsig.scripting/tags/org.gvsig.scripting-2.3.127/org.gvsig.scripting.app/org.gvsig.scripting.app.mainplugin/src/main/java/org/gvsig/scripting/app/extension/ScriptingMain.java
1
package org.gvsig.scripting.app.extension;
2

  
3
import java.io.File;
4
import java.net.URL;
5
import java.util.ArrayList;
6
import java.util.HashMap;
7
import java.util.List;
8
import java.util.Map;
9
import javax.swing.UIManager;
10
import org.apache.commons.cli.CommandLine;
11
import org.apache.commons.cli.CommandLineParser;
12
import org.apache.commons.cli.Options;
13
import org.apache.commons.cli.PosixParser;
14
import org.apache.commons.io.FileUtils;
15
import org.gvsig.about.AboutLocator;
16
import org.gvsig.about.AboutManager;
17
import org.gvsig.scripting.ScriptingManager;
18
import org.gvsig.scripting.swing.api.ScriptingSwingLocator;
19
import org.gvsig.scripting.swing.api.ScriptingUIManager;
20
import org.gvsig.tools.ToolsLocator;
21
import org.gvsig.tools.exception.BaseException;
22
import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
23
import org.gvsig.tools.packageutils.PackageInfo;
24
import org.gvsig.tools.packageutils.PackageManager;
25
import org.gvsig.tools.packageutils.Version;
26

  
27
/**
28
 *
29
 * @author jjdelcerro
30
 */
31
public class ScriptingMain {
32

  
33
    private File applicationFolder = null;
34
    private Version applicacionVersion = null;
35
    private List<File> pluginsFolder = null;
36
    private File applicationHomeFolder;
37
    private File installFolder;
38
    private int applicacionBuildNumber;
39

  
40
    private ScriptingUtils utils;
41

  
42
    public static void main(String args[]) throws Exception {
43
        ScriptingMain main = new ScriptingMain();
44
        main.doMain(args);
45
    }
46
    
47
    public File getApplicationFolder() {
48
        if (applicationFolder == null) {
49
            applicationFolder = new File(System.getProperty("user.dir"));
50
        }
51
        return applicationFolder;
52
    }
53

  
54
    public File getApplicationHomeFolder() {
55
        if (applicationHomeFolder == null) {
56
            applicationHomeFolder = new File(System.getProperty("user.home"));
57
        }
58
        return applicationHomeFolder;
59
    }
60

  
61
    public File getInstallFolder() {
62
        if (installFolder == null) {
63
            installFolder = FileUtils.getFile(getApplicationFolder(), "install");
64
        }
65
        return this.installFolder;
66
    }
67

  
68
    public Version getApplicationVersion() throws BaseException {
69
        if (applicacionVersion == null) {
70
            PackageManager packageManager = ToolsLocator.getPackageManager();
71
            PackageInfo packageInfo = packageManager.createPackageInfo(
72
                    new File(this.applicationFolder, "package.info")
73
            );
74
            applicacionVersion = (Version) packageInfo.getVersion();
75
        }
76
        return applicacionVersion;
77
    }
78

  
79
    public int getApplicationBuildNumber() throws BaseException {
80
        if (applicacionBuildNumber == 0) {
81
            applicacionBuildNumber = getApplicationVersion().getBuild();
82
        }
83
        return this.applicacionBuildNumber;
84
    }
85

  
86
    public List<File> getPluginsFolder() {
87
        List<File> folders = new ArrayList<>();
88
        folders.add(FileUtils.getFile(this.getApplicationFolder(), "gvSIG", "extensiones"));
89
        folders.add(FileUtils.getFile(this.getApplicationHomeFolder(), "gvSIG", "installation", "gvSIG", "extensiones"));
90
        return folders;
91
    }
92

  
93
    public File getPluginHomeFolder() {
94
        File f = this.getApplicationHomeFolder();
95
        f = FileUtils.getFile(f, "gvSIG", "plugins", "org.gvsig.scripting.app.mainplugin");
96
        return f;
97
    }
98

  
99
    private void initializeAbout() throws Exception {
100
        AboutManager aboutManager = AboutLocator.getManager();
101

  
102
        String build = String.valueOf(this.getApplicationBuildNumber());
103
        String version = this.getApplicationVersion().toString();
104
        
105
        Map<String, String> gvsig_vars = new HashMap<>();
106
        gvsig_vars.put("version", version);
107
        gvsig_vars.put("build", build);
108
        aboutManager.setProject(
109
                "gvSIG Desktop", 
110
                getResource("gvsig.html"),
111
                null, 
112
                gvsig_vars);
113
        aboutManager.getProject().set("build", build);
114

  
115
        aboutManager.addSponsor(
116
                "Generalitat Valenciana",
117
                getResource("gva.html"), 
118
                1);
119

  
120
        aboutManager.addDeveloper(
121
                "gvSIG Asocicion",
122
                getResource("gvSIG-asociacion.html"), 
123
                2);
124

  
125
    }
126

  
127
    public void doMain(String args[]) throws Exception {
128

  
129
        String lookAndFeel = "com.jgoodies.looks.plastic.PlasticXPLookAndFeel";
130
        try {
131
            UIManager.setLookAndFeel(lookAndFeel);
132
        } catch(Throwable th) {
133
            
134
        }
135
        
136
        new DefaultLibrariesInitializer().fullInitialize();
137

  
138
        initializeAbout();
139

  
140
        this.utils = new ScriptingUtils();
141
        this.utils.initializaPaths(
142
                this.getPluginsFolder(),
143
                this.getInstallFolder(),
144
                this.getPluginHomeFolder(),
145
                this.getApplicationVersion().format("%M.%m.%r")
146
        );
147

  
148
        ScriptingUIManager uimanager = ScriptingSwingLocator.getUIManager();
149
        ScriptingManager manager = uimanager.getManager();
150

  
151
        Options options = new Options();
152
        options.addOption("d",
153
                "debug",
154
                false,
155
                "");
156
        options.addOption("p",
157
                "pause",
158
                false,
159
                "");
160
        options.addOption("l",
161
                "launcher",
162
                false,
163
                "Show the launcher window");
164
        options.addOption("c",
165
                "composer",
166
                false,
167
                "Show the composer window");
168
        options.addOption("r",
169
                "run",
170
                true,
171
                "Run the specified script");
172
        options.addOption("h",
173
                "home",
174
                true,
175
                "Specify for the home of the script framework");
176
        CommandLineParser parser = new PosixParser();
177
        CommandLine line = null;
178
        boolean runLauncherAtEnd = true;
179
        
180
        line = parser.parse(options, args);
181
        if (line.hasOption("home")) {
182
            manager.setHomeFolder(new File(line.getOptionValue("home")));
183
        }
184
        if (line.hasOption("composer")) {
185
            runLauncherAtEnd = false;
186
            utils.runComposer();
187
        }
188
        if (line.hasOption("run")) {
189
            runLauncherAtEnd = false;
190
            utils.runScript(line.getOptionValue("run"), line.getArgs());
191
        }
192
        if( runLauncherAtEnd ) {
193
            utils.runLauncher();
194
        }
195
    }
196

  
197
    private URL getResource(String name) {
198
        URL resource = this.getClass().getResource(name);
199
        return resource;
200
    }
201

  
202
}
org.gvsig.scripting/tags/org.gvsig.scripting-2.3.127/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">/home/jjdelcerro/datos/devel/org.gvsig.scripting/org.gvsig.scripting.app/org.gvsig.scripting.app.mainplugin/src/main/java/org/gvsig/scripting/app/extension/DataFoldersRecoverPanelView.xml</at>
28
   <at name="rowspecs">CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,FILL:DEFAULT:GROW(1.0),CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU: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">
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff