Revision 43328

View differences:

trunk/org.gvsig.desktop/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/impl/DefaultArguments.java
1
package org.gvsig.andami.impl;
2

  
3
import java.util.ArrayList;
4
import java.util.Collections;
5
import java.util.HashMap;
6
import java.util.Iterator;
7
import java.util.List;
8
import java.util.Map;
9
import org.gvsig.andami.Arguments;
10

  
11
public class DefaultArguments implements Arguments {
12

  
13
    private final String[] args;
14
    protected Map<String, String> flags;
15
    protected List<String> parameters;
16

  
17
    public DefaultArguments(String args[]) {
18
        this.args = args;
19
        this.flags = new HashMap<>();
20
        this.parameters = new ArrayList<>();
21
        this.parse();
22
    }
23

  
24
    private void parse() {
25
        String name;
26
        String value;
27
        boolean acceptFlags = true;
28
        for( String arg : args ) {
29
            if( acceptFlags ) {
30
                if( arg.equals("--") ) {
31
                    acceptFlags = false;
32
                    continue;
33
                }
34
                if( arg.startsWith("--") ) {
35
                    int n = arg.indexOf("=");
36
                    if( n < 0 ) {
37
                        name = arg.substring(2);
38
                        value = "true";
39
                    } else {
40
                        name = arg.substring(2, n);
41
                        value = arg.substring(n + 1);
42
                    }
43
                    this.flags.put(name, value);
44
                } else {
45
                    this.parameters.add(arg);
46
                }
47
            } else {
48
                this.parameters.add(arg);
49
            }
50
        }
51
    }
52

  
53
    @Override
54
    public String get(String name) {
55
        return this.flags.get(name);
56
    }
57

  
58
    @Override
59
    public boolean contains(String name) {
60
        return this.flags.containsKey(name);
61
    }
62

  
63
    @Override
64
    public List<String> parameters() {
65
        return Collections.unmodifiableList(parameters);
66
    }
67

  
68
    @Override
69
    public Map<String, String> flags() {
70
        return Collections.unmodifiableMap(flags);
71
    }
72

  
73
    @Override
74
    public int size() {
75
        return this.parameters.size();
76
    }
77

  
78
    @Override
79
    public String get(int n) {
80
        return this.parameters.get(n);
81
    }
82

  
83
    @Override
84
    public Iterator<String> iterator() {
85
        return this.parameters.iterator();
86
    }
87
}
trunk/org.gvsig.desktop/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/impl/DefaultPluginsManager.java
32 32
import java.util.Collections;
33 33
import java.util.Date;
34 34
import java.util.Enumeration;
35
import java.util.HashMap;
36 35
import java.util.Iterator;
37 36
import java.util.List;
38 37

  
39 38
import javax.swing.SwingUtilities;
40 39

  
41 40
import org.apache.commons.io.FileUtils;
42
import org.jfree.util.Log;
41
import org.gvsig.andami.Arguments;
43 42

  
44 43
import org.gvsig.andami.Launcher;
45 44
import org.gvsig.andami.PluginServices;
......
47 46
import org.gvsig.andami.Utilities;
48 47
import org.gvsig.andami.config.generate.AndamiConfig;
49 48
import org.gvsig.andami.config.generate.Plugin;
50
import org.gvsig.andami.firewall.DefaultFirewallConfiguration;
51 49
import org.gvsig.andami.firewall.FirewallConfiguration;
52 50
import org.gvsig.andami.plugins.ExclusiveUIExtension;
53 51
import org.gvsig.andami.plugins.Extension;
......
125 123
    private List<File> pluginsFolders = null;
126 124
    private List<Task> startupTasks = new ArrayList<Task>();
127 125
    private List<Task> shutdownTasks = new ArrayList<Task>();
128

  
126
    
129 127
    public ExclusiveUIExtension getExclusiveUIExtension() {
130 128
        return PluginServices.getExclusiveUIExtension();
131 129
    }
......
426 424
    public boolean desktopOpen(File file){
427 425
        return DesktopApi.open(file);
428 426
    }
427

  
428
    @Override
429
    public Arguments getArguments() {
430
        return Launcher.getArguments();
431
    }    
429 432
}
trunk/org.gvsig.desktop/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/Launcher.java
113 113
import org.gvsig.andami.config.generate.Andami;
114 114
import org.gvsig.andami.config.generate.AndamiConfig;
115 115
import org.gvsig.andami.config.generate.Plugin;
116
import org.gvsig.andami.impl.DefaultArguments;
116 117
import org.gvsig.andami.impl.UnsavedDataException;
117 118
import org.gvsig.andami.messages.Messages;
118 119
import org.gvsig.andami.messages.NotificationManager;
......
202 203
 */
203 204
public class Launcher {
204 205

  
206
    private static Arguments arguments;
207

  
205 208
    public static abstract class MapWithAlias<Item> extends HashMap<String, Item> {
206 209

  
207 210
        private HashMap<String, String> aliases = new HashMap<String, String>();
......
447 450
        }
448 451
        return deprecatedPluginNames;
449 452
    }
450

  
453
    
454
    public static Arguments getArguments() {
455
        return arguments;
456
    }
457
    
451 458
    public void doMain(String[] args) throws Exception {
452 459

  
453 460
        if (args.length < 1) {
454
            System.err.println("Usage: Launcher appName plugins-directory [language=locale]");
461
            System.err.println("Usage: Launcher appName plugins-directory [--language=locale]");
455 462
            System.err.println("No arguments specified.");
456 463
            System.err.println("Use default arguments 'gvSIG gvSIG/extensiones'");
457 464
            args = new String[]{"gvSIG", "gvSIG/extensiones"};
458 465
        }
466
        arguments = new DefaultArguments(args);
459 467

  
460 468
        initializeApp(args, null);
461 469

  
......
797 805
        } else {
798 806
            appName = args[0];
799 807
        }
808
        // Hacemos visibles los argumentos como una propiedad est�tica
809
        // de plugin services para quien lo quiera usar (por ejemplo, para
810
        // cargar un proyecto por l�nea de comandos)
811
        PluginServices.setArguments(args);
812
        
800 813
        getOrCreateConfigFolder();
801 814
        configureLogging(appName, applicationClasifier);
802 815
        if (!validJVM()) {
......
814 827
            loadAndamiConfig(args[1]);
815 828
        }
816 829

  
817
        // Hacemos visibles los argumentos como una propiedad est�tica
818
        // de plugin services para quien lo quiera usar (por ejemplo, para
819
        // cargar un proyecto por l�nea de comandos)
820
        PluginServices.setArguments(args);
830
        configureLocales();
821 831

  
822
        configureLocales(args);
823

  
824 832
        logger.info("Configure LookAndFeel");
825 833
        configureLookAndFeel();
826 834
    }
......
1152 1160
    }
1153 1161

  
1154 1162
    private boolean validJVM() {
1155
        if (!SystemUtils.isJavaVersionAtLeast(JavaVersion.JAVA_1_4)) {
1156
            logger.warn("gvSIG requires Java version 1.4 or higher.");
1163
        if (!SystemUtils.isJavaVersionAtLeast(JavaVersion.JAVA_1_6)) {
1164
            logger.warn("gvSIG requires Java version 1.6 or higher.");
1157 1165
            logger.warn("The Java HOME is '" + SystemUtils.getJavaHome().getAbsolutePath() + "'.");
1158 1166
            return false;
1159 1167
        }
......
3092 3100
     * Swing are configured.
3093 3101
     *
3094 3102
     */
3095
    private static void configureLocales(String[] args) {
3103
    private static void configureLocales() {
3096 3104
        // Configurar el locale
3097 3105
        String localeStr = null;
3098 3106

  
3099
        localeStr = PluginServices.getArgumentByName("language");
3100
        if (localeStr == null) {
3107
        if( getArguments().contains("language") ) {
3108
            localeStr = getArguments().get("language");
3109
        } else {
3101 3110
            localeStr = andamiConfig.getLocaleLanguage();
3102 3111
        }
3103 3112
        localeStr = normalizeLanguageCode(localeStr);
trunk/org.gvsig.desktop/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/PluginServices.java
555 555
     * ' -language=en '
556 556
     * 
557 557
     * @return String The value of the argument
558
     * @deprecated use PluginManager.getArguments
558 559
     */
559 560
    public static String getArgumentByName(String name) {
560 561
        for (int i = 2; i < PluginServices.arguments.length; i++) {
trunk/org.gvsig.desktop/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/Arguments.java
1
package org.gvsig.andami;
2

  
3
import java.util.Iterator;
4
import java.util.List;
5
import java.util.Map;
6

  
7
public interface Arguments extends Iterable<String> {
8
    
9
    public String get(String name);
10
    
11
    public boolean contains(String name);
12
    
13
    public Map<String,String> flags();
14
    
15
    public List<String> parameters();
16
    
17
    public int size();
18
    
19
    public String get(int n);
20
    
21
    public Iterator<String> iterator();
22
}
trunk/org.gvsig.desktop/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/PluginsManager.java
303 303
    public boolean desktopOpen(File file);
304 304

  
305 305

  
306
    public Arguments getArguments();
306 307
}
trunk/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/ProjectManager.java
84 84
        return ((ProjectExtension) PluginServices
85 85
            .getExtension(ProjectExtension.class)).getProject();
86 86
    }
87
    
88
    public void setCurrentProject(Project project) {
89
        ((ProjectExtension) PluginServices.getExtension(ProjectExtension.class)).setProject(project);
90
    }
87 91

  
88 92
    public ProjectWindow getCurrentProjectWindow() {
89 93
        ProjectExtension projectExtension =
trunk/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/InitializeApplicationExtension.java
104 104
                    500
105 105
            );
106 106
        }
107
        pluginManager.addStartupTask("OpenLayerOnStart", new OpenLayerOnStart(), true, 0);
107 108

  
108 109
    }
109 110

  
trunk/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/OpenLayerOnStart.java
1
package org.gvsig.app.extension;
2

  
3
import java.awt.GridBagConstraints;
4
import java.beans.PropertyVetoException;
5
import java.io.File;
6
import java.util.ArrayList;
7
import java.util.List;
8
import org.apache.commons.io.FilenameUtils;
9
import org.apache.commons.lang3.StringUtils;
10
import org.cresques.cts.IProjection;
11
import org.gvsig.andami.Arguments;
12
import org.gvsig.andami.PluginsLocator;
13
import org.gvsig.andami.PluginsManager;
14
import org.gvsig.andami.ui.mdiManager.IWindow;
15
import org.gvsig.app.ApplicationLocator;
16
import org.gvsig.app.ApplicationManager;
17
import org.gvsig.app.project.Project;
18
import org.gvsig.app.project.ProjectManager;
19
import org.gvsig.app.project.documents.DocumentManager;
20
import org.gvsig.app.project.documents.view.ViewDocument;
21
import org.gvsig.app.project.documents.view.ViewManager;
22
import org.gvsig.app.project.documents.view.gui.IView;
23
import org.gvsig.fmap.dal.DALLocator;
24
import org.gvsig.fmap.dal.DataManager;
25
import org.gvsig.fmap.dal.DataServerExplorer;
26
import org.gvsig.fmap.dal.DataServerExplorerParameters;
27
import org.gvsig.fmap.dal.DataStore;
28
import org.gvsig.fmap.dal.DataStoreParameters;
29
import org.gvsig.fmap.dal.DataTypes;
30
import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemFileFilter;
31
import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemServerExplorer;
32
import org.gvsig.fmap.mapcontext.MapContextLocator;
33
import org.gvsig.fmap.mapcontext.MapContextManager;
34
import org.gvsig.fmap.mapcontext.layers.FLayer;
35
import org.gvsig.tools.dynobject.DynField;
36
import org.slf4j.Logger;
37
import org.slf4j.LoggerFactory;
38

  
39
public class OpenLayerOnStart implements Runnable {
40

  
41
    private static final Logger logger = LoggerFactory.getLogger(OpenLayerOnStart.class);
42

  
43
    @Override
44
    public void run() {
45
        PluginsManager PluginManager = PluginsLocator.getManager();
46
        DataManager dataManager = DALLocator.getDataManager();
47
        ApplicationManager application = ApplicationLocator.getManager();
48
        ProjectManager projectManager = application.getProjectManager();
49
        DocumentManager viewManager = projectManager.getDocumentManager(ViewManager.TYPENAME);
50
        MapContextManager mapContextManager = MapContextLocator.getMapContextManager();
51
        Project project = application.getProjectManager().getCurrentProject();
52

  
53
        Arguments args = PluginManager.getArguments();
54
        List<String> params = new ArrayList<>(args.parameters());
55
        params.remove(0);
56
        params.remove(0);
57
        for( String param : params ) {
58
            if( !StringUtils.isEmpty(param) && param.endsWith(Project.FILE_EXTENSION) ) {
59
                try {
60
                    File f = new File(param);
61
                    application.getUIManager().closeAllWindows();
62
                    project = projectManager.createProject();
63
                    project.loadState(f);
64
                    projectManager.setCurrentProject(project);
65
                } catch (Throwable th) {
66
                    logger.warn("Can't load project '" + param + "'.", th);
67
                }
68
                break;
69
            }
70
        }
71

  
72
        ViewDocument viewDoc = null;
73
        FilesystemServerExplorer explorer = null;
74
        FilesystemFileFilter filter = null;
75
        IProjection proj = null;
76
        for( String param : params ) {
77
            try {
78
                if( FilenameUtils.isExtension(param, "gvproj") ) {
79
                    continue;
80
                }
81
                if( explorer == null ) {
82
                    DataServerExplorerParameters explorerparams = dataManager.createServerExplorerParameters(FilesystemServerExplorer.NAME);
83
                    explorer = (FilesystemServerExplorer) dataManager.openServerExplorer(FilesystemServerExplorer.NAME, explorerparams);
84
                    filter = explorer.getFilter(DataServerExplorer.MODE_GEOMETRY | DataServerExplorer.MODE_RASTER, "All formats");
85
                }
86

  
87
                File f = new File(param);
88
                if( filter.accept(f) ) {
89
                    if( viewDoc == null ) {
90
                        viewDoc = (ViewDocument) application.getActiveDocument(ViewManager.TYPENAME);
91
                        if( viewDoc==null || !viewDoc.getMapContext().getLayers().isEmpty() ) {
92
                            application.getUIManager().closeAllWindows();
93
                            viewDoc = (ViewDocument) viewManager.createDocument();
94
                            project.addDocument(viewDoc);
95
                        }
96
                        proj = viewDoc.getMapContext().getProjection();
97
                        IView viewWindow = (IView) viewManager.getMainWindow(viewDoc);
98
                        application.getUIManager().addWindow(viewWindow, GridBagConstraints.CENTER);
99
                        try {
100
                            application.getUIManager().setMaximum((IWindow) viewWindow, true);
101
                        } catch (PropertyVetoException e) {
102

  
103
                        }
104
                    }
105
                    DataStoreParameters storeParams = explorer.createStoreParameters(f);
106
                    // Buscamos por el parametro de la proyeccion
107
                    // que sean obligatorios y est?n a null
108
                    // y le ponemos la proyeccion de la vista
109
                    DynField[] fields = storeParams.getDynClass().getDynFields();
110
                    for (DynField field : fields) {
111
                        if (field.getType() == DataTypes.CRS && field.isMandatory()) {
112
                            if (storeParams.getDynValue(field.getName()) == null) {
113
                                storeParams.setDynValue(field.getName(), proj);
114
                            }
115
                        }
116
                    }                    
117
                    DataStore store = dataManager.openStore(storeParams.getDataStoreName(), storeParams);
118
                    FLayer layer = mapContextManager.createLayer(store.getName(), store);
119
                    viewDoc.getMapContext().getLayers().add(layer);
120
                }
121
            } catch (Throwable th) {
122
                logger.warn("Can't load layer '" + param + "'.", th);
123
            }
124
        }
125

  
126
    }
127
}

Also available in: Unified diff