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

History | View | Annotate | Download (8.94 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

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

    
119
        public void execute(String actionCommand) {
120
                if (!this.initilizedExtensions) {
121
                        initializeExtensions();
122
                        initializeExtensionsConfig();
123
                        this.initilizedExtensions = true;
124
                }
125
                if ("edit-setup".equalsIgnoreCase(actionCommand)) {
126
                        DlgPreferences dlgPreferences = PluginServices.getDlgPreferences();
127
                        dlgPreferences.refreshExtensionPoints();
128
                        PluginServices.getMDIManager().addWindow(dlgPreferences);
129
                }
130
        }
131
        public boolean isEnabled() {
132
                return true;
133
        }
134

    
135
        public boolean isVisible() {
136
                return true;
137
        }
138

    
139
        private void initializeCoreExtensions() {
140
                ExtensionPoint ep = this.extensionPoints.add("AplicationPreferences", "");
141
                ep.append("GeneralPage", "", new GeneralPage());
142
                ep.append("NetworkPage", "", new NetworkPage());
143
                ep.append("FirewallPage", "", new FirewallPage());
144
                ep.append("DirExtensionsPage", "", new DirExtensionsPage());
145
                ep.append("LanguagePage", "", new LanguagePage());
146
                ep.append("ExtensionsPage", "", new ExtensionsPage());
147
                ep.append("AppearancePage", "", new AppearancePage());
148
                ep.append("FolderingPage", "", new FolderingPage());
149
                ep.append("ScreenSettingsPage", "", new ScreenSettingsPage());
150
                ep.append("SkinPreferences", "", new SkinPreferences());
151
                ep.append("IconThemePage", "", new IconThemePage());
152

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

    
169
                //Falta los plugin
170
        }
171

    
172
        private void initializeExtensionsConfig() {
173
                HashMap pc = Launcher.getPluginConfig();
174
                ArrayList array = new ArrayList();
175
                Iterator iter = pc.values().iterator();
176

    
177
                while (iter.hasNext()) {
178
                        array.add(((PluginConfig) iter.next()).getExtensions());
179
                }
180
                ExtensionPoint ep = this.extensionPoints.add("AplicationPreferences", "");
181

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

    
203
                while (i.hasNext()) {
204
                        Object extension = i.next();
205

    
206
                        if (extension instanceof IPreferenceExtension) {
207
                                IPreferenceExtension pe = (IPreferenceExtension) extension;
208
                                IPreference[] pp = pe.getPreferencesPages();
209

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

    
224
        public void postInitialize() {
225
                super.postInitialize();
226
                DlgPreferences dlgPreferences=PluginServices.getDlgPreferences();
227
                dlgPreferences.refreshExtensionPoints();
228
                dlgPreferences.storeValues();
229
        }
230
}