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 @ 41048

History | View | Annotate | Download (9.2 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
7
 * modify it under the terms of the GNU General Public License
8
 * as published by the Free Software Foundation; either version 3
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
 * For any additional information, do not hesitate to contact us
22
 * at info AT gvsig.com, or visit our website www.gvsig.com.
23
 */
24
package org.gvsig.coreplugin;
25

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

    
30
import org.gvsig.andami.IconThemeHelper;
31
import org.gvsig.andami.Launcher;
32
import org.gvsig.andami.PluginServices;
33
import org.gvsig.andami.plugins.Extension;
34
import org.gvsig.andami.plugins.config.generate.Extensions;
35
import org.gvsig.andami.plugins.config.generate.PluginConfig;
36
import org.gvsig.andami.preferences.DlgPreferences;
37
import org.gvsig.andami.preferences.IPreference;
38
import org.gvsig.andami.preferences.IPreferenceExtension;
39
import org.gvsig.coreplugin.preferences.general.AppearancePage;
40
import org.gvsig.coreplugin.preferences.general.BrowserControlPage;
41
import org.gvsig.coreplugin.preferences.general.DirExtensionsPage;
42
import org.gvsig.coreplugin.preferences.general.ExtensionPage;
43
import org.gvsig.coreplugin.preferences.general.ExtensionsPage;
44
import org.gvsig.coreplugin.preferences.general.FolderingPage;
45
import org.gvsig.coreplugin.preferences.general.GeneralPage;
46
import org.gvsig.coreplugin.preferences.general.IconThemePage;
47
import org.gvsig.coreplugin.preferences.general.LanguagePage;
48
import org.gvsig.coreplugin.preferences.general.ScreenSettingsPage;
49
import org.gvsig.coreplugin.preferences.general.SkinPreferences;
50
import org.gvsig.coreplugin.preferences.network.FirewallPage;
51
import org.gvsig.coreplugin.preferences.network.NetworkPage;
52
import org.gvsig.tools.ToolsLocator;
53
import org.gvsig.tools.extensionpoint.ExtensionPoint;
54
import org.gvsig.tools.extensionpoint.ExtensionPointManager;
55
import org.slf4j.Logger;
56
import org.slf4j.LoggerFactory;
57

    
58

    
59
/**
60
 *
61
 * <p>
62
 * Extension that provides support for visual application configuration
63
 * through a Preferences dialog where the user can specify its own settings for
64
 * general purpose aspects.
65
 * </p>
66
 * <p>
67
 * Adding new preference pages is made through ExtensionPoints by invoking
68
 * <b>
69
 *         this.extensionPoints.add("AplicationPreferences","YourIPreferencesClassName", yourIPreferencesPage);
70
 * </b>
71
 * and then call <b>DlgPreferences.refreshExtensionPoints();</b>
72
 * </p>
73
 *
74
 * @author jaume dominguez faus - jaume.dominguez@iver.es
75
 *
76
 */
77
public class PreferencesExtension extends Extension{
78
        
79
        private static Logger logger = LoggerFactory.getLogger(PreferencesExtension.class);
80
        private ExtensionPointManager extensionPoints =ToolsLocator.getExtensionPointManager();
81

    
82
        private boolean initilizedExtensions=false;
83

    
84
        public void initialize() {
85

    
86
                registerIcons();
87
                initializeCoreExtensions();
88
        }
89

    
90
        private void registerIcons(){
91
                IconThemeHelper.registerIcon("action", "edit-setup", this);
92
                IconThemeHelper.registerIcon("action", "application-exit", this);
93

    
94

    
95
                // AppearancePage.java
96
                IconThemeHelper.registerIcon("preferences", "edit-setup-appearance", this);
97
                // BrowserControlPage.java
98
                IconThemeHelper.registerIcon("preferences", "edit-setup-browsercontrol", this);
99
                // DirExtensionPage.java
100
                IconThemeHelper.registerIcon("preferences", "edit-setup-dirextension", this);
101
                // ExtensionPage.java
102
                IconThemeHelper.registerIcon("preferences", "edit-setup-extension", this);
103
                // ExtensionsPage.java
104
                IconThemeHelper.registerIcon("preferences", "edit-setup-extensions", this);
105
                // GeneralPage.java
106
                IconThemeHelper.registerIcon("preferences", "edit-setup-general", this);
107
                // FolderingPage.java
108
                IconThemeHelper.registerIcon("preferences", "edit-setup-foldering", this);
109
                // LanguagePage.java
110
                IconThemeHelper.registerIcon("preferences", "edit-setup-language", this);
111
                // ScreenSettingsPage.java
112
                IconThemeHelper.registerIcon("preferences", "edit-setup-screensetting", this);
113
                // FirewallPage.java
114
                IconThemeHelper.registerIcon("preferences", "edit-setup-firewall", this);
115
                // NetworkPage.java
116
                IconThemeHelper.registerIcon("preferences", "edit-setup-network", this);
117
                // SkinPreferences.java
118
                IconThemeHelper.registerIcon("preferences", "edit-setup-skin", this);
119
                IconThemeHelper.registerIcon("preferences", "edit-setup-icontheme", this);
120
        }
121

    
122
        public void execute(String actionCommand) {
123
                if (!this.initilizedExtensions) {
124
                        initializeExtensions();
125
                        initializeExtensionsConfig();
126
                        this.initilizedExtensions = true;
127
                }
128
                if ("edit-setup".equalsIgnoreCase(actionCommand)) {
129
                        DlgPreferences dlgPreferences = PluginServices.getDlgPreferences();
130
                        dlgPreferences.refreshExtensionPoints();
131
                        PluginServices.getMDIManager().addWindow(dlgPreferences);
132
                } else if ( "application-exit".equalsIgnoreCase(actionCommand) ) {
133
            Launcher.closeApplication();
134
        }
135
        }
136
        public boolean isEnabled() {
137
                return true;
138
        }
139

    
140
        public boolean isVisible() {
141
                return true;
142
        }
143

    
144
        private void initializeCoreExtensions() {
145
                ExtensionPoint ep = this.extensionPoints.add("AplicationPreferences", "");
146
                ep.append("GeneralPage", "", new GeneralPage());
147
                ep.append("NetworkPage", "", new NetworkPage());
148
                ep.append("FirewallPage", "", new FirewallPage());
149
                ep.append("DirExtensionsPage", "", new DirExtensionsPage());
150
                ep.append("LanguagePage", "", new LanguagePage());
151
                ep.append("ExtensionsPage", "", new ExtensionsPage());
152
                ep.append("AppearancePage", "", new AppearancePage());
153
                ep.append("FolderingPage", "", new FolderingPage());
154
                ep.append("ScreenSettingsPage", "", new ScreenSettingsPage());
155
                ep.append("SkinPreferences", "", new SkinPreferences());
156
                ep.append("IconThemePage", "", new IconThemePage());
157

    
158
//                this.extensionPoints.add("AplicationPreferences","GeneralPage", new GeneralPage());
159
//                this.extensionPoints.add("AplicationPreferences","NetworkPage", new NetworkPage());
160
//                this.extensionPoints.add("AplicationPreferences","FirewallPage", new FirewallPage());
161
//                this.extensionPoints.add("AplicationPreferences","DirExtensionsPage", new DirExtensionsPage());
162
//                this.extensionPoints.add("AplicationPreferences","LanguagePage", new LanguagePage());
163
//                this.extensionPoints.add("AplicationPreferences","ExtensionsPage", new ExtensionsPage());
164
//                this.extensionPoints.add("AplicationPreferences","AppearancePage", new AppearancePage());
165
//                this.extensionPoints.add("AplicationPreferences","FolderingPage", new FolderingPage());
166
//                this.extensionPoints.add("AplicationPreferences","ResolutionPage", new ScreenSettingsPage());
167
//                this.extensionPoints.add("AplicationPreferences","SkinPreferences", new SkinPreferences());
168
                String os = System.getProperty("os.name").toLowerCase();
169
                if (os.indexOf("linux") != -1 || os.indexOf("unix")!= -1) {
170
                        ep.append("BrowserControlPage", "", new BrowserControlPage());
171
//                        this.extensionPoints.add("AplicationPreferences","BrowserControlPage", new BrowserControlPage());
172
                }
173

    
174
                //Falta los plugin
175
        }
176

    
177
        private void initializeExtensionsConfig() {
178
                HashMap pc = Launcher.getPluginConfig();
179
                ArrayList array = new ArrayList();
180
                Iterator iter = pc.values().iterator();
181

    
182
                while (iter.hasNext()) {
183
                        array.add(((PluginConfig) iter.next()).getExtensions());
184
                }
185
                ExtensionPoint ep = this.extensionPoints.add("AplicationPreferences", "");
186

    
187
                Extensions[] exts = (Extensions[]) array.toArray(new Extensions[0]);
188
                for (int i = 0; i < exts.length; i++) {
189
                        for (int j = 0; j < exts[i].getExtensionCount(); j++) {
190
                                org.gvsig.andami.plugins.config.generate.Extension ext = exts[i]
191
                                                .getExtension(j);
192
                                String sExt = ext.getClassName().toString();
193
                                // String pn = null;
194
                                // pn = sExt.substring(0, sExt.lastIndexOf("."));
195
                                // dlgPrefs.addPreferencePage(new PluginsPage(pn));
196
                                // dlgPrefs.addPreferencePage(new ExtensionPage(ext));
197
                                ep.append(sExt, "", new ExtensionPage(ext));
198
                        }
199
                }
200
        }
201
        /**
202
         *
203
         */
204
        private void initializeExtensions() {
205
                Iterator i = Launcher.getExtensionIterator();
206
                ExtensionPoint ep = this.extensionPoints.add("AplicationPreferences", "");
207

    
208
                while (i.hasNext()) {
209
                        Object extension = i.next();
210

    
211
                        if (extension instanceof IPreferenceExtension) {
212
                                IPreferenceExtension pe = (IPreferenceExtension) extension;
213
                                IPreference[] pp = pe.getPreferencesPages();
214

    
215
                                if (pp == null) {
216
                                        logger.info("Preferences page is NULL. Extension "
217
                                                        + extension.getClass().getName()
218
                                                        + " implements IPreferenceExtension but does not provide pref. pages. ");
219
                                } else {
220
                                        for (int j = 0; j < pp.length; j++) {
221
                                                ep.append(pp[j].getID(), "", pp[j]);
222
                                                pp[j].initializeValues();
223
                                        }
224
                                }
225
                        }
226
                }
227
        }
228

    
229
        public void postInitialize() {
230
                super.postInitialize();
231
                DlgPreferences dlgPreferences=PluginServices.getDlgPreferences();
232
                dlgPreferences.refreshExtensionPoints();
233
                dlgPreferences.storeValues();
234
        }
235
}