Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.plugin / org.gvsig.app / org.gvsig.app.mainplugin / src / main / java / org / gvsig / app / extension / InitializeApplicationExtension.java @ 46419

History | View | Annotate | Download (17.4 KB)

1
/**
2
 * gvSIG. Desktop Geographic Information System.
3
 *
4
 * Copyright (C) 2007-2013 gvSIG Association.
5
 *
6
 * This program is free software; you can redistribute it and/or modify it under
7
 * the terms of the GNU General Public License as published by the Free Software
8
 * Foundation; either version 3 of the License, or (at your option) any later
9
 * version.
10
 *
11
 * This program is distributed in the hope that it will be useful, but WITHOUT
12
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
13
 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
14
 * details.
15
 *
16
 * You should have received a copy of the GNU General Public License along with
17
 * this program; if not, write to the Free Software Foundation, Inc., 51
18
 * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19
 *
20
 * For any additional information, do not hesitate to contact us at info AT
21
 * gvsig.com, or visit our website www.gvsig.com.
22
 */
23
package org.gvsig.app.extension;
24

    
25
import java.awt.GridBagConstraints;
26
import java.beans.PropertyVetoException;
27
import java.io.BufferedReader;
28
import java.io.File;
29
import java.io.InputStream;
30
import java.io.InputStreamReader;
31
import java.io.StringWriter;
32
import java.util.HashMap;
33
import java.util.Map;
34
import java.util.Objects;
35
import java.util.Properties;
36
import java.util.prefs.Preferences;
37
import javax.swing.JOptionPane;
38
import org.apache.commons.lang3.StringUtils;
39
import org.gvsig.andami.IconThemeHelper;
40
import org.gvsig.andami.PluginServices;
41
import org.gvsig.andami.PluginsLocator;
42
import org.gvsig.andami.PluginsManager;
43
import org.gvsig.andami.actioninfo.ActionInfoManager;
44
import org.gvsig.andami.plugins.Extension;
45
import org.gvsig.andami.ui.mdiManager.IWindow;
46
import org.gvsig.app.ApplicationLocator;
47
import org.gvsig.app.ApplicationManager;
48
import static org.gvsig.app.extension.ProjectExtension.PROJECT_FILE_CHOOSER_ID;
49
import org.gvsig.app.project.Project;
50
import org.gvsig.app.project.ProjectManager;
51
import org.gvsig.app.project.ProjectPreferences;
52
import org.gvsig.app.project.documents.view.ViewDocument;
53
import org.gvsig.app.project.documents.view.ViewManager;
54
import org.gvsig.app.project.documents.view.gui.IView;
55
import org.gvsig.app.project.documents.view.toolListeners.InfoListener;
56
import org.gvsig.app.util.BaseOpenErrorHandler;
57
import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator;
58
import org.gvsig.fmap.dal.DALLocator;
59
import org.gvsig.fmap.dal.DataManager;
60
import org.gvsig.fmap.dal.DataServerExplorerPool;
61
import org.gvsig.fmap.dal.DataServerExplorerPoolEntry;
62
import org.gvsig.fmap.dal.DatabaseWorkspaceManager;
63
import org.gvsig.fmap.dal.OpenErrorHandler;
64
import org.gvsig.fmap.dal.resource.ResourceManager;
65
import org.gvsig.fmap.dal.resource.exception.DisposeResorceManagerException;
66
import static org.gvsig.fmap.dal.serverexplorer.filesystem.swing.FilesystemExplorerWizardPanelController.OPEN_LAYER_FILE_CHOOSER_ID;
67
import org.gvsig.installer.lib.api.InstallerLocator;
68
import org.gvsig.installer.lib.api.InstallerManager;
69
import org.gvsig.installer.lib.api.PackageInfo;
70
import org.gvsig.tools.ToolsLocator;
71
import org.gvsig.tools.dynobject.DynObject;
72
import org.gvsig.tools.folders.FoldersManager;
73
import org.gvsig.tools.i18n.I18nManager;
74
import org.gvsig.tools.resourcesstorage.FilesResourcesStorage;
75
import org.slf4j.Logger;
76
import org.slf4j.LoggerFactory;
77

    
78
@SuppressWarnings("UseSpecificCatch")
79
public class InitializeApplicationExtension extends Extension {
80

    
81
    private static final Logger LOGGER = LoggerFactory.getLogger(InitializeApplicationExtension.class);
82

    
83
    // Copiadas de org.gvsig.coreplugin.PreferencesExtension
84
    public static final String PROJECTS_FOLDER_PROPERTY_NAME = "ProjectsFolder";
85
    public static final String DATA_FOLDER_PROPERTY_NAME = "DataFolder";
86
    public static final String TEMPLATES_FOLDER_PROPERTY_NAME = "TemplatesFolder";
87
    public static final String SYMBOL_LIBRARY_FOLDER_PROPERTY_NAME = "SymbolLibraryFolder";
88

    
89
    private OpenErrorHandler openErrorHandler = null;
90

    
91

    
92
    @Override
93
    public void initialize() {
94
        DALLocator.registerFeatureTypeDefinitionsManager(DefaultFeatureTypeDefinitionsManager.class);
95

    
96
        ExpressionEvaluatorLocator.getManager().registerClassLoader(this.getClass().getClassLoader());
97

    
98
        InfoListener.initializeExtensionPoint();
99

    
100
        initLastPath();
101
        registerIcons();
102
//        loadExpressionBookmarks();
103
//        loadExpressionHistory();
104
//        loadHistoryAndBookmarks();
105
    }
106

    
107
    public void loadHistoryAndBookmarks() {
108
        PluginsManager pluginmgr = PluginsLocator.getManager();
109
        File folder = pluginmgr.getApplicationHomeFolder();
110
        String nameFolder = "bookmarks";
111

    
112
        File storageFolder = new File(folder, nameFolder);
113
        try {
114
            if (!storageFolder.exists()) {
115
                storageFolder.mkdir();
116
            }
117
        } catch (Exception ex) {
118
            LOGGER.warn("Not able to create bookmarks folder. Load and save of bookmarks will be deactivated", ex);
119
            //Stop trying to load bookmarks and not create listener to save them
120
            return;
121
        }
122
        FilesResourcesStorage bookmarksResources = new FilesResourcesStorage(storageFolder.getAbsolutePath());
123
        ToolsLocator.getBookmarksAndHistoryManager().setPrimaryStorage(bookmarksResources);
124
        ToolsLocator.getBookmarksAndHistoryManager().load();
125
        PluginsManager pluginManager = PluginsLocator.getManager();
126
        pluginManager.addShutdownTask("saveBookmarksAndHistory", () -> {
127
          ToolsLocator.getBookmarksAndHistoryManager().save();
128
        }, false, 100);
129

    
130
    }
131

    
132
    private void initLastPath() {
133
        Preferences prefs = Preferences.userRoot().node("gvsig.foldering");
134
        FoldersManager folderManager = ToolsLocator.getFoldersManager();
135
        String v;
136

    
137
        v = prefs.get(DATA_FOLDER_PROPERTY_NAME, folderManager.getHome().getAbsolutePath());
138
        folderManager.setLastPath(OPEN_LAYER_FILE_CHOOSER_ID, new File(v));
139

    
140
        v = prefs.get(PROJECTS_FOLDER_PROPERTY_NAME, folderManager.getHome().getAbsolutePath());
141
        folderManager.setLastPath(PROJECT_FILE_CHOOSER_ID, new File(v));
142

    
143
        v = prefs.get("LegendsFolder", folderManager.getHome().getAbsolutePath());
144
        folderManager.setLastPath("LegendsFolder", new File(v));
145
    }
146

    
147
    @Override
148
    public void postInitialize() {
149
        PluginsManager pluginManager = PluginsLocator.getManager();
150

    
151
        openErrorHandler = new BaseOpenErrorHandler();
152
        ApplicationLocator.getManager().getDataManager().setOpenErrorHandler(openErrorHandler);
153

    
154
        DALLocator.getResourceManager().startResourceCollector(
155
                3 * (60 * 1000), // minutes --> miliseconds
156
                null);
157

    
158
        // showAddOnManagerOnStartIfNeed();
159
        ProjectPreferences projectPreferences = ApplicationLocator.getProjectManager().getProjectPreferences();
160
        if (projectPreferences.getOpenWithANewMaximizedView()) {
161
            pluginManager.addStartupTask(
162
                    "showNewViewMaximized",
163
                    new ShowNewMaximizedView(),
164
                    true,
165
                    750
166
            );
167
        }
168
        pluginManager.addStartupTask("OpenLayerOnStart", new OpenLayerOnStart(), true, 740);
169

    
170
        pluginManager.addStartupTask("ApplicationStartedMessage", new Runnable() {
171
            @Override
172
            public void run() {
173
                I18nManager i18n = ToolsLocator.getI18nManager();
174
                ApplicationManager application = ApplicationLocator.getManager();
175
                application.message(
176
                        i18n.getTranslation("StatusBar.Aplicacion_iniciada"),
177
                        JOptionPane.INFORMATION_MESSAGE
178
                );
179
            }
180
        }, true, -1);
181

    
182
        pluginManager.addStartupTask("ConnectoToDefaultWorkspace", () -> {
183
            connectToDefaultWorkspace();
184
        }, false, 500);
185
        
186
        pluginManager.addStartupTask("InitilizeHistoryAndBookmarks", new Runnable() {
187
            @Override
188
            public void run() {
189
                loadHistoryAndBookmarks();
190
            }
191
        }, true, 100);
192
    }
193

    
194
    private void connectToDefaultWorkspace() {
195
        String workspaceName = null;
196
        try {
197
            DataManager dataManager = DALLocator.getDataManager();
198
            PluginsManager pluginManager = PluginsLocator.getPluginsManager();
199
            PluginServices plugin = pluginManager.getPlugin(this);
200
            DynObject preferences = plugin.getPluginProperties();
201
            if ((Boolean) (preferences.getDynValue("connectAutomaticallyToDatabaseWorkspace"))) {
202
                workspaceName = (String) preferences.getDynValue("databaseWorkspaceToConnect");
203
                DataServerExplorerPool pool = dataManager.getDataServerExplorerPool();
204
                DataServerExplorerPoolEntry entry = pool.get(workspaceName);
205
                if (entry != null) {
206
                    DatabaseWorkspaceManager workspace = dataManager.createDatabaseWorkspaceManager(
207
                            entry.getExplorerParameters()
208
                    );
209
                    if (workspace != null && workspace.isValid()) {
210
                        workspace.connect();
211
                    }
212
                }
213
            }
214
        } catch (Exception ex) {
215
            LOGGER.warn("Can't connect to default workspace (" + Objects.toString(workspaceName) + ").", ex);
216
        }
217
    }
218

    
219
    private void showAddOnManagerOnStartIfNeed() {
220
        PluginsManager pluginManager = PluginsLocator.getManager();
221
        PluginServices plugin = pluginManager.getPlugin(this);
222
        DynObject pluginProperties = plugin.getPluginProperties();
223
        Map<String, Boolean> showAddOnmanagerOnStart = null;
224
        try {
225
            showAddOnmanagerOnStart = (Map<String, Boolean>) pluginProperties.getDynValue("showAddOnmanagerOnStart");
226
        } catch (Exception ex) {
227
            // Do nothing
228
        }
229
        if (showAddOnmanagerOnStart == null) {
230
            showAddOnmanagerOnStart = new HashMap<>();
231
            pluginProperties.setDynValue("showAddOnmanagerOnStart", showAddOnmanagerOnStart);
232
        }
233
        Boolean showAddOnmanagerOnStartForCurrentVersion = showAddOnmanagerOnStart.get(pluginManager.getApplicationVersion().fullFormat());
234

    
235
        if (showAddOnmanagerOnStartForCurrentVersion == null || showAddOnmanagerOnStartForCurrentVersion) {
236
            pluginManager.addStartupTask(
237
                    "showAddOnmanagerOnStart",
238
                    new ShowAddOnManagerOnStart(),
239
                    true,
240
                    500
241
            );
242
        }
243
    }
244

    
245
    private static class ShowNewMaximizedView implements Runnable {
246

    
247
        @Override
248
        public void run() {
249
            ApplicationManager application = ApplicationLocator.getManager();
250
            ProjectManager projectManager = application.getProjectManager();
251
            Project project = projectManager.getCurrentProject();
252

    
253
            ViewManager viewManager = (ViewManager) projectManager.getDocumentManager(ViewManager.TYPENAME);
254
            ViewDocument view = (ViewDocument) viewManager.createDocument();
255
            project.addDocument(view);
256

    
257
            IView viewWindow = (IView) viewManager.getMainWindow(view);
258

    
259
            application.getUIManager().addWindow(viewWindow, GridBagConstraints.CENTER);
260
            try {
261
                application.getUIManager().setMaximum((IWindow) viewWindow, true);
262
            } catch (PropertyVetoException e) {
263
                LOGGER.info("Can't maximize view.", e);
264
            }
265
            project.setModified(false);
266
        }
267

    
268
    }
269

    
270
    private static class ShowAddOnManagerOnStart implements Runnable {
271

    
272
        @Override
273
        public void run() {
274
            ApplicationManager application = ApplicationLocator.getManager();
275
            I18nManager i18nManager = ToolsLocator.getI18nManager();
276
            PluginsManager pluginManager = PluginsLocator.getManager();
277
            PluginServices plugin = pluginManager.getPlugin(this);
278
            DynObject pluginProperties = plugin.getPluginProperties();
279

    
280
            String msg = i18nManager.getTranslation("_Instalar_complementos_adicionales_no_disponibles_durante_el_proceso_de_instalacion");
281
            int resp = application.confirmDialog(
282
                    msg,
283
                    i18nManager.getTranslation("_Finalizando_proceso_de_instalacion"),
284
                    JOptionPane.YES_NO_OPTION,
285
                    JOptionPane.QUESTION_MESSAGE
286
            );
287
            if (resp == JOptionPane.YES_OPTION) {
288
                ActionInfoManager actionManager = PluginsLocator.getActionInfoManager();
289
                actionManager.execute(
290
                        "tools-addonsmanager",
291
                        new Object[]{"skipBundleSelection"}
292
                );
293
            }
294
            Map<String, Boolean> showAddOnmanagerOnStart = (Map<String, Boolean>) pluginProperties.getDynValue("showAddOnmanagerOnStart");
295
            showAddOnmanagerOnStart.put(pluginManager.getApplicationVersion().fullFormat(), Boolean.FALSE);
296
        }
297
    }
298

    
299
    private void registerIcons() {
300
        IconThemeHelper.registerIcon("action", "edit-clear", this);
301
        IconThemeHelper.registerIcon("action", "edit-copy", this);
302
        IconThemeHelper.registerIcon("action", "edit-cut", this);
303
        IconThemeHelper.registerIcon("action", "edit-delete", this);
304
        IconThemeHelper.registerIcon("action", "edit-find", this);
305
        IconThemeHelper.registerIcon("action", "edit-find-replace", this);
306
        IconThemeHelper.registerIcon("action", "edit-paste", this);
307
        IconThemeHelper.registerIcon("action", "edit-redo", this);
308
        IconThemeHelper.registerIcon("action", "edit-select-all", this);
309
        IconThemeHelper.registerIcon("action", "edit-undo", this);
310
        IconThemeHelper.registerIcon("action", "edit-undo-redo-actions", this);
311
        IconThemeHelper.registerIcon("action", "document-print", this);
312

    
313
        IconThemeHelper.registerIcon("toolbar-go", "go-next", this);
314
        IconThemeHelper.registerIcon("toolbar-go", "go-previous", this);
315
        IconThemeHelper.registerIcon("toolbar-go", "go-next-fast", this);
316
        IconThemeHelper.registerIcon("toolbar-go", "go-previous-fast", this);
317
        IconThemeHelper.registerIcon("toolbar-go", "go-first", this);
318
        IconThemeHelper.registerIcon("toolbar-go", "go-last", this);
319

    
320
    }
321

    
322
    @Override
323
    public void execute(String actionCommand) {
324

    
325
    }
326

    
327
    @Override
328
    public boolean isEnabled() {
329
        return false;
330
    }
331

    
332
    @Override
333
    public boolean isVisible() {
334
        return false;
335
    }
336

    
337
    private void addToLogInfo() {
338
        String info[] = this.getStringInfo().split("\n");
339
        for (String line : info) {
340
            LOGGER.info(line);
341
        }
342
    }
343

    
344
    public String getStringInfo() {
345
        ApplicationManager application = ApplicationLocator.getManager();
346
        PluginsManager pluginmgr = PluginsLocator.getManager();
347
        InstallerManager installmgr = InstallerLocator.getInstallerManager();
348

    
349
        StringWriter writer = new StringWriter();
350

    
351
        Properties props = System.getProperties();
352

    
353
        // OS information
354
        String osName = props.getProperty("os.name");
355
        writer.write("OS\n");
356
        writer.write("    name   : " + osName + "\n");
357
        writer.write("    arch   : " + props.get("os.arch") + "\n");
358
        writer.write("    version: " + props.get("os.version") + "\n");
359
        if (osName.startsWith("Linux")) {
360
            try {
361
                String[] command = {"lsb_release", "-a"};
362
                Process p = Runtime.getRuntime().exec(command);
363
                InputStream is = p.getInputStream();
364
                BufferedReader reader = new BufferedReader(new InputStreamReader(is));
365
                String line;
366
                while ((line = reader.readLine()) != null) {
367
                    writer.write("    " + line + "\n");
368
                }
369
            } catch (Exception ex) {
370
                writer.write("Can't get detailled os information (lsb_release -a).");
371
            }
372
        }
373

    
374
        // JRE information
375
        writer.write("JRE\n");
376
        writer.write("    vendor : " + props.get("java.vendor") + "\n");
377
        writer.write("    version: " + props.get("java.version") + "\n");
378
        writer.write("    home   : " + props.get("java.home") + "\n");
379

    
380
        writer.write("gvSIG\n");
381
        writer.write("    version                 : " + application.getVersion().getLongFormat() + "\n");
382
        writer.write("    locale language         : " + application.getLocaleLanguage() + "\n");
383
        writer.write("    application forlder     : " + pluginmgr.getApplicationFolder() + "\n");
384
        writer.write("    install forlder         : " + pluginmgr.getInstallFolder() + "\n");
385
        writer.write("    application home forlder: " + pluginmgr.getApplicationHomeFolder() + "\n");
386
        writer.write("    plugins forlder         : " + StringUtils.join(pluginmgr.getPluginsFolders()) + "\n");
387

    
388
        try {
389
            PackageInfo[] pkgs = installmgr.getInstalledPackages();
390
            writer.write("Installed packages\n");
391
            for (PackageInfo pkg : pkgs) {
392
                writer.write("    ");
393
                writer.write(pkg.toStringCompact());
394
                writer.write("\n");
395
            }
396
        } catch (Throwable e) {
397
            writer.write("Can't get installed package information.");
398
        }
399
        return writer.toString();
400
    }
401

    
402
    @Override
403
    public void terminate() {
404
        ResourceManager resMan = DALLocator.getResourceManager();
405
        resMan.stopResourceCollector();
406
        try {
407
            resMan.dispose();
408
        } catch (DisposeResorceManagerException e) {
409
            LOGGER.warn(e.getMessageStack());
410
        }
411
        super.terminate();
412
    }
413
}