Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.plugin / org.gvsig.coreplugin.app / org.gvsig.coreplugin.app.mainplugin / src / main / java / org / gvsig / coreplugin / PreferencesExtension.java @ 43256

History | View | Annotate | Download (9.87 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.coreplugin;
24

    
25
import java.util.ArrayList;
26
import java.util.HashMap;
27
import java.util.Iterator;
28

    
29
import org.gvsig.andami.IconThemeHelper;
30
import org.gvsig.andami.Launcher;
31
import org.gvsig.andami.PluginServices;
32
import org.gvsig.andami.PluginsLocator;
33
import org.gvsig.andami.PluginsManager;
34
import org.gvsig.andami.plugins.Extension;
35
import org.gvsig.andami.plugins.config.generate.Extensions;
36
import org.gvsig.andami.plugins.config.generate.PluginConfig;
37
import org.gvsig.andami.preferences.DlgPreferences;
38
import org.gvsig.andami.preferences.IPreference;
39
import org.gvsig.andami.preferences.IPreferenceExtension;
40
import org.gvsig.coreplugin.preferences.general.BrowserControlPage;
41
import org.gvsig.coreplugin.preferences.general.ExtensionPage;
42
import org.gvsig.coreplugin.preferences.general.ExtensionsPage;
43
import org.gvsig.coreplugin.preferences.general.FolderingPage;
44
import org.gvsig.coreplugin.preferences.general.GeneralPage;
45
import org.gvsig.coreplugin.preferences.general.IconThemePage;
46
import org.gvsig.coreplugin.preferences.general.LanguagePage;
47
import org.gvsig.coreplugin.preferences.general.NotificationsPage;
48
import org.gvsig.coreplugin.preferences.general.ScreenSettingsPage;
49
import org.gvsig.coreplugin.preferences.general.SkinPreferences;
50
import org.gvsig.coreplugin.preferences.general.appearance.AppearancePage;
51
import org.gvsig.coreplugin.preferences.network.FirewallPage;
52
import org.gvsig.coreplugin.preferences.network.NetworkPage;
53
import org.gvsig.tools.ToolsLocator;
54
import org.gvsig.tools.dynobject.DynObject;
55
import org.gvsig.tools.extensionpoint.ExtensionPoint;
56
import org.gvsig.tools.extensionpoint.ExtensionPointManager;
57
import org.gvsig.tools.i18n.I18nManager;
58
import org.gvsig.tools.util.ToolsUtilLocator;
59

    
60
import org.slf4j.Logger;
61
import org.slf4j.LoggerFactory;
62

    
63
/**
64
 *
65
 * <p>
66
 * Extension that provides support for visual application configuration through
67
 * a Preferences dialog where the user can specify its own settings for general
68
 * purpose aspects.
69
 * </p>
70
 * <p>
71
 * Adding new preference pages is made through ExtensionPoints by invoking
72
 * <b>
73
 * this.extensionPoints.add("AplicationPreferences","YourIPreferencesClassName",
74
 * yourIPreferencesPage);
75
 * </b>
76
 * and then call <b>DlgPreferences.refreshExtensionPoints();</b>
77
 * </p>
78
 *
79
 *
80
 */
81
public class PreferencesExtension extends Extension {
82

    
83
    private static final Logger logger = LoggerFactory.getLogger(PreferencesExtension.class);
84
    private final ExtensionPointManager extensionPoints = ToolsLocator.getExtensionPointManager();
85

    
86
    private boolean initilizedExtensions = false;
87

    
88
    @Override
89
    public void initialize() {
90
        initializeUseNativeFileChooser();
91
        registerIcons();
92
        initializeCoreExtensions();
93
    }
94

    
95
    private void initializeUseNativeFileChooser() {
96
        PluginsManager pluginsManager = PluginsLocator.getManager();
97
        PluginServices plugin = pluginsManager.getPlugin(PreferencesExtension.class);
98

    
99
        DynObject pluginProperties = plugin.getPluginProperties();
100

    
101
        boolean useNativeFileChooser = (Boolean) pluginProperties.getDynValue("useNativeFileChooser");
102
        ToolsUtilLocator.getFileDialogChooserManager().setUseNativeFileChooser(useNativeFileChooser);
103
    }
104
    
105
    private void registerIcons() {
106
        IconThemeHelper.registerIcon("action", "edit-setup", this);
107
        IconThemeHelper.registerIcon("action", "application-exit", this);
108

    
109
        // AppearancePage.java
110
        IconThemeHelper.registerIcon("preferences", "edit-setup-appearance", this);
111
        // BrowserControlPage.java
112
        IconThemeHelper.registerIcon("preferences", "edit-setup-browsercontrol", this);
113
        // DirExtensionPage.java
114
        IconThemeHelper.registerIcon("preferences", "edit-setup-dirextension", this);
115
        // ExtensionPage.java
116
        IconThemeHelper.registerIcon("preferences", "edit-setup-extension", this);
117
        // ExtensionsPage.java
118
        IconThemeHelper.registerIcon("preferences", "edit-setup-extensions", this);
119
        // GeneralPage.java
120
        IconThemeHelper.registerIcon("preferences", "edit-setup-general", this);
121
        // FolderingPage.java
122
        IconThemeHelper.registerIcon("preferences", "edit-setup-foldering", this);
123
        // LanguagePage.java
124
        IconThemeHelper.registerIcon("preferences", "edit-setup-language", this);
125
        // ScreenSettingsPage.java
126
        IconThemeHelper.registerIcon("preferences", "edit-setup-screensetting", this);
127
        // FirewallPage.java
128
        IconThemeHelper.registerIcon("preferences", "edit-setup-firewall", this);
129
        // NetworkPage.java
130
        IconThemeHelper.registerIcon("preferences", "edit-setup-network", this);
131
        // SkinPreferences.java
132
        IconThemeHelper.registerIcon("preferences", "edit-setup-skin", this);
133
        IconThemeHelper.registerIcon("preferences", "edit-setup-icontheme", this);
134
    }
135

    
136
    @Override
137
    public void execute(String actionCommand) {
138
        if (!this.initilizedExtensions) {
139
            initializeExtensions();
140
            initializeExtensionsConfig();
141
            this.initilizedExtensions = true;
142
        }
143
        if ("edit-setup".equalsIgnoreCase(actionCommand)) {
144
            DlgPreferences dlgPreferences = PluginServices.getDlgPreferences();
145
            dlgPreferences.refreshExtensionPoints();
146
            PluginServices.getMDIManager().addWindow(dlgPreferences);
147
        } else if ("application-exit".equalsIgnoreCase(actionCommand)) {
148
            Launcher.closeApplication();
149
        }
150
    }
151

    
152
    @Override
153
    public boolean isEnabled() {
154
        return true;
155
    }
156

    
157
    @Override
158
    public boolean isVisible() {
159
        return true;
160
    }
161

    
162
    private void initializeCoreExtensions() {
163
        addPreferencesPage(new GeneralPage());
164
        addPreferencesPage(new NetworkPage());
165
        addPreferencesPage(new FirewallPage());
166
        addPreferencesPage(new LanguagePage());
167
        addPreferencesPage(new ExtensionsPage());
168
        addPreferencesPage(new AppearancePage());
169
        addPreferencesPage(new FolderingPage());
170
        addPreferencesPage(new ScreenSettingsPage());
171
        addPreferencesPage(new SkinPreferences());
172
        addPreferencesPage(new IconThemePage());
173
        addPreferencesPage(new NotificationsPage());
174
        String os = System.getProperty("os.name").toLowerCase();
175
        if (os.contains("linux") || os.contains("unix")) {
176
            addPreferencesPage(new BrowserControlPage());
177
        }
178
    }
179

    
180
    private void initializeExtensionsConfig() {
181
        HashMap pc = Launcher.getPluginConfig();
182
        ArrayList array = new ArrayList();
183
        Iterator iter = pc.values().iterator();
184

    
185
        while (iter.hasNext()) {
186
            array.add(((PluginConfig) iter.next()).getExtensions());
187
        }
188
        Extensions[] exts = (Extensions[]) array.toArray(new Extensions[0]);
189
        for (Extensions ext1 : exts) {
190
            for (int j = 0; j < ext1.getExtensionCount(); j++) {
191
                org.gvsig.andami.plugins.config.generate.Extension ext = ext1.getExtension(j);
192
                addPreferencesPage(new ExtensionPage(ext));
193
            }
194
        }
195
    }
196

    
197
    private void initializeExtensions() {
198
        Iterator i = Launcher.getExtensionIterator();
199
        I18nManager i18nManager = ToolsLocator.getI18nManager();
200

    
201
        while (i.hasNext()) {
202
            Object extension = i.next();
203

    
204
            if (extension instanceof IPreferenceExtension) {
205
                IPreferenceExtension pe = (IPreferenceExtension) extension;
206
                IPreference[] pp;
207
                try {
208
                    pp = pe.getPreferencesPages();
209
                } catch (Throwable th) {
210
                    logger.warn("Can't get preference pages from '"+extension.getClass().getName()+"'.",th);
211
                    continue;
212
                }
213
                if (pp == null) {
214
                    String msg = "Preferences page is NULL. Extension "
215
                            + extension.getClass().getName()
216
                            + " implements IPreferenceExtension but does not provide pref. pages. ";
217
                    logger.info(msg);
218
                } else {
219
                    for (IPreference pp1 : pp) {
220
                        try {
221
                            addPreferencesPage(pp1);
222
                        } catch (Throwable th) {
223
                            String msg = "cant_initialize_values_for_{0}_page_in_{1}";
224
                            String[] params = {pp1.getTitle(), extension.getClass().getName()};
225
                            logger.warn(i18nManager.getTranslation(msg, params), th);
226
                        }
227
                    }
228
                }
229
            }
230
        }
231
    }
232

    
233
    public void addPreferencesPage(IPreference pp) {
234
        ExtensionPoint ep = this.extensionPoints.add("AplicationPreferences", "");
235
        pp.initializeValues();
236
        ep.append(pp.getID(), "", pp);
237
    }
238
    
239
    @Override
240
    public void postInitialize() {
241
        super.postInitialize();
242
        DlgPreferences dlgPreferences = PluginServices.getDlgPreferences();
243
        dlgPreferences.refreshExtensionPoints();
244
        dlgPreferences.storeValues();
245
    }
246
}