Revision 41312 trunk/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/ProjectExtension.java

View differences:

ProjectExtension.java
25 25

  
26 26
import java.awt.Component;
27 27
import java.io.File;
28
import java.lang.reflect.InvocationTargetException;
29 28
import java.text.MessageFormat;
30 29
import java.util.ArrayList;
31 30
import java.util.Iterator;
......
37 36

  
38 37
import org.slf4j.Logger;
39 38
import org.slf4j.LoggerFactory;
40
import org.apache.commons.io.FilenameUtils;
39
import org.gvsig.tools.util.ArrayUtils;
40
import org.apache.commons.lang.StringUtils;
41 41
import org.gvsig.andami.IconThemeHelper;
42 42
import org.gvsig.andami.Launcher;
43 43
import org.gvsig.andami.Launcher.TerminationProcess;
44 44
import org.gvsig.andami.PluginServices;
45
import org.gvsig.andami.PluginsLocator;
46
import org.gvsig.andami.actioninfo.ActionInfo;
47
import org.gvsig.andami.actioninfo.ActionInfoManager;
45 48
import org.gvsig.andami.messages.NotificationManager;
46 49
import org.gvsig.andami.plugins.Extension;
47 50
import org.gvsig.andami.plugins.IExtension;
......
51 54
import org.gvsig.andami.ui.mdiManager.IWindow;
52 55
import org.gvsig.andami.ui.mdiManager.WindowInfo;
53 56
import org.gvsig.andami.ui.wizard.UnsavedDataPanel;
54
import org.gvsig.app.ApplicationLocator;
55
import org.gvsig.app.ApplicationManager;
56 57
import org.gvsig.app.project.Project;
57 58
import org.gvsig.app.project.ProjectManager;
58 59
import org.gvsig.app.project.documents.gui.ProjectWindow;
59 60
import org.gvsig.app.project.documents.view.ViewManager;
60 61
import org.gvsig.gui.beans.swing.JFileChooser;
61 62
import org.gvsig.tools.ToolsLocator;
63
import org.gvsig.tools.dataTypes.DataTypes;
62 64
import org.gvsig.tools.extensionpoint.ExtensionPointManager;
63 65
import org.gvsig.tools.persistence.exception.PersistenceException;
64 66
import org.gvsig.utils.GenericFileFilter;
......
66 68
import org.gvsig.utils.save.BeforeSavingListener;
67 69
import org.gvsig.utils.save.SaveEvent;
68 70
import org.gvsig.utils.swing.threads.IMonitorableTask;
71
import sun.misc.Launcher;
69 72

  
70 73
/**
71 74
 * Extension que proporciona controles para crear proyectos nuevos, abrirlos y
......
99 102

  
100 103
	private List<AfterSavingListener> afterSavingListeners = new ArrayList<AfterSavingListener>();
101 104

  
102
	/**
103
	 * @see com.iver.mdiApp.plugins.IExtension#initialize()
104
	 */
105
	public void initialize() {
106
		// try {
107
		// Class.forName("javax.media.jai.EnumeratedParameter");
108
		// } catch (ClassNotFoundException e) {
109
		// NotificationManager
110
		// .addError(
111
		// "La m?quina virtual con la que se ejecuta gvSIG no tiene JAI instalado",
112
		// e);
113
		// }
105
        public void initialize() {
106
            initializeDocumentActionsExtensionPoint();
107
            registerDocuments();
108
            registerIcons();
109
            PluginsLocator.getManager().addStartupTask(
110
                    "Open project",
111
                    new OpenInitialProjectTask(), true, 1000);
112
        }
114 113

  
115
		initializeDocumentActionsExtensionPoint();
116
		registerDocuments();
117
		registerIcons();
118
	}
119

  
120 114
	private void registerIcons() {
121 115
		IconThemeHelper.registerIcon("action", "application-project-new", this);
122 116
		IconThemeHelper
......
129 123
		IconThemeHelper.registerIcon("project", "project-icon", this);
130 124
	}
131 125

  
126
        private class OpenInitialProjectTask implements Runnable {
127
            public void run() {
128
                File pf = getInitialProjectFile();
129
                if (pf == null) {
130
                    LOG.info("No initial file opened.");
131
                    return;
132
                }
133
                ActionInfoManager actionManager = PluginsLocator.getActionInfoManager();
134
                ActionInfo action = actionManager.getAction("application-project-open");
135
                action.execute(pf);
136
            }
137
            /**
138
             * Returns the file to be opened or null if no parameter
139
             * or file does not exist
140
             * 
141
             * @return
142
             */
143
            private File getInitialProjectFile() {
144
                String[] theArgs = PluginServices.getArguments();
145
                String lastArg = theArgs[theArgs.length - 1];
146
                if ( StringUtils.isEmpty(lastArg) ) {
147
                    return null;
148
                }
149
                if( lastArg.startsWith("-") ) {
150
                    return null;
151
                }
152
                if (!lastArg.toLowerCase().endsWith(Project.FILE_EXTENSION.toLowerCase())) {
153
                    LOG.info("Do not open project file, does not have the expected extension '" + 
154
                            Project.FILE_EXTENSION +"' ("+lastArg+").");
155
                    return null;
156
                }
157
                File projectFile = new File(lastArg);
158
                if ( !projectFile.exists()) {
159
                    LOG.info("Do not open project file, '" +projectFile.getAbsolutePath() + "' do not exist.");
160
                    return null;
161
                }
162
                return projectFile;
163
            }   
164
        }
132 165

  
133

  
134

  
135

  
136 166
	public ProjectWindow getProjectFrame() {
137 167
		if (projectFrame == null) {
138 168
			projectFrame = new ProjectWindow();
......
262 292
	public void execute(String command) {
263 293
		this.execute(command, null);
264 294
	}
265

  
295
        
266 296
	public void execute(String actionCommand, Object[] args) {
267 297
		if (actionCommand.equals("application-project-new")) {
268 298
			if (!askSave()) {
......
270 300
			}
271 301

  
272 302
			projectPath = null;
273
			// ProjectDocument.initializeNUMS();
274 303
			PluginServices.getMDIManager().closeAllWindows();
275 304
			setProject(ProjectManager.getInstance().createProject());
276 305
			getProjectFrame().setProject(p);
277 306
			showProjectWindow();
278 307
			PluginServices.getMainFrame().setTitle(
279 308
					PluginServices.getText(this, "sin_titulo"));
280
		} else if (actionCommand.equals("application-project-open")) {
309

  
310
                } else if (actionCommand.equals("application-project-open")) {
281 311
			if (!askSave()) {
282 312
				return;
283 313
			}
284
			File projectFile = null;
314
                        File projectFile = (File) ArrayUtils.get(args, 0, DataTypes.FILE);
315
                        if ( projectFile != null && !projectFile.exists() ) {
316
                            LOG.warn("Can't load project '"
317
                                    + projectFile.getAbsolutePath()
318
                                    + "', file not exist.");
319
                            projectFile = null;
320
                        }
285 321

  
286
			if (args != null && args.length > 0 && args[0] != null) {
287
				if (args[0] instanceof File) {
288
					projectFile = (File) args[0];
289
				} else if (args[0] instanceof String) {
290
					projectFile = new File((String) args[0]);
291
					if (!projectFile.exists()) {
292
						LOG.warn("Can't load project '"
293
								+ projectFile.getAbsolutePath()
294
								+ "', file not exist.");
295
						projectFile = null;
296
					}
297
				}
298
			}
299

  
300 322
			if (projectFile == null) {
301 323
				Preferences prefs = Preferences.userRoot().node(
302 324
						"gvsig.foldering");
......
334 356
		} else if (actionCommand.equals("application-project-save")) {
335 357
			saveProject();
336 358
		} else if (actionCommand.equals("application-project-save-as")) {
337
			File file = null;
338
			if (args != null && args.length > 0 && args[0] != null) {
339
				if (args[0] instanceof File) {
340
					file = (File) args[0];
341
				} else if (args[0] instanceof String) {
342
					file = new File((String) args[0]);
343
				}
344
			}
359
			File file = (File) ArrayUtils.get(args, 0, DataTypes.FILE);
345 360
			saveAsProject(file);
346 361
		}
347 362

  

Also available in: Unified diff