Statistics
| Revision:

svn-gvsig-desktop / tags / v2_0_0_Build_2056 / libraries / libCorePlugin / src / org / gvsig / coreplugin / PreferencesExtension.java @ 39012

History | View | Annotate | Download (8.01 KB)

1
package org.gvsig.coreplugin;
2

    
3
import java.util.ArrayList;
4
import java.util.HashMap;
5
import java.util.Iterator;
6

    
7
import org.gvsig.andami.IconThemeHelper;
8
import org.gvsig.andami.Launcher;
9
import org.gvsig.andami.PluginServices;
10
import org.gvsig.andami.plugins.Extension;
11
import org.gvsig.andami.plugins.config.generate.Extensions;
12
import org.gvsig.andami.plugins.config.generate.PluginConfig;
13
import org.gvsig.andami.preferences.DlgPreferences;
14
import org.gvsig.andami.preferences.IPreference;
15
import org.gvsig.andami.preferences.IPreferenceExtension;
16
import org.gvsig.coreplugin.preferences.general.AppearancePage;
17
import org.gvsig.coreplugin.preferences.general.BrowserControlPage;
18
import org.gvsig.coreplugin.preferences.general.DirExtensionsPage;
19
import org.gvsig.coreplugin.preferences.general.ExtensionPage;
20
import org.gvsig.coreplugin.preferences.general.ExtensionsPage;
21
import org.gvsig.coreplugin.preferences.general.FolderingPage;
22
import org.gvsig.coreplugin.preferences.general.GeneralPage;
23
import org.gvsig.coreplugin.preferences.general.IconThemePage;
24
import org.gvsig.coreplugin.preferences.general.LanguagePage;
25
import org.gvsig.coreplugin.preferences.general.ScreenSettingsPage;
26
import org.gvsig.coreplugin.preferences.general.SkinPreferences;
27
import org.gvsig.coreplugin.preferences.network.FirewallPage;
28
import org.gvsig.coreplugin.preferences.network.NetworkPage;
29
import org.gvsig.tools.ToolsLocator;
30
import org.gvsig.tools.extensionpoint.ExtensionPoint;
31
import org.gvsig.tools.extensionpoint.ExtensionPointManager;
32
import org.slf4j.Logger;
33
import org.slf4j.LoggerFactory;
34

    
35

    
36
/**
37
 *
38
 * <p>
39
 * Extension that provides support for visual application configuration
40
 * through a Preferences dialog where the user can specify its own settings for
41
 * general purpose aspects.
42
 * </p>
43
 * <p>
44
 * Adding new preference pages is made through ExtensionPoints by invoking
45
 * <b>
46
 *         this.extensionPoints.add("AplicationPreferences","YourIPreferencesClassName", yourIPreferencesPage);
47
 * </b>
48
 * and then call <b>DlgPreferences.refreshExtensionPoints();</b>
49
 * </p>
50
 *
51
 * @author jaume dominguez faus - jaume.dominguez@iver.es
52
 *
53
 */
54
public class PreferencesExtension extends Extension{
55
        
56
        private static Logger logger = LoggerFactory.getLogger(PreferencesExtension.class);
57
        private ExtensionPointManager extensionPoints =ToolsLocator.getExtensionPointManager();
58

    
59
        private boolean initilizedExtensions=false;
60

    
61
        public void initialize() {
62

    
63
                registerIcons();
64
                initializeCoreExtensions();
65
        }
66

    
67
        private void registerIcons(){
68
                IconThemeHelper.registerIcon("action", "edit-setup", this);
69

    
70
                // AppearancePage.java
71
                IconThemeHelper.registerIcon("preferences", "edit-setup-appearance", this);
72
                // BrowserControlPage.java
73
                IconThemeHelper.registerIcon("preferences", "edit-setup-browsercontrol", this);
74
                // DirExtensionPage.java
75
                IconThemeHelper.registerIcon("preferences", "edit-setup-dirextension", this);
76
                // ExtensionPage.java
77
                IconThemeHelper.registerIcon("preferences", "edit-setup-extension", this);
78
                // ExtensionsPage.java
79
                IconThemeHelper.registerIcon("preferences", "edit-setup-extensions", this);
80
                // GeneralPage.java
81
                IconThemeHelper.registerIcon("preferences", "edit-setup-general", this);
82
                // FolderingPage.java
83
                IconThemeHelper.registerIcon("preferences", "edit-setup-foldering", this);
84
                // LanguagePage.java
85
                IconThemeHelper.registerIcon("preferences", "edit-setup-language", this);
86
                // ScreenSettingsPage.java
87
                IconThemeHelper.registerIcon("preferences", "edit-setup-screensetting", this);
88
                // FirewallPage.java
89
                IconThemeHelper.registerIcon("preferences", "edit-setup-firewall", this);
90
                // NetworkPage.java
91
                IconThemeHelper.registerIcon("preferences", "edit-setup-network", this);
92
                // SkinPreferences.java
93
                IconThemeHelper.registerIcon("preferences", "edit-setup-skin", this);
94
        }
95

    
96
        public void execute(String actionCommand) {
97
                if (!this.initilizedExtensions) {
98
                        initializeExtensions();
99
                        initializeExtensionsConfig();
100
                        this.initilizedExtensions = true;
101
                }
102
                if ("edit-setup".equalsIgnoreCase(actionCommand)) {
103
                        DlgPreferences dlgPreferences = PluginServices.getDlgPreferences();
104
                        dlgPreferences.refreshExtensionPoints();
105
                        PluginServices.getMDIManager().addWindow(dlgPreferences);
106
                }
107
        }
108
        public boolean isEnabled() {
109
                return true;
110
        }
111

    
112
        public boolean isVisible() {
113
                return true;
114
        }
115

    
116
        private void initializeCoreExtensions() {
117
                ExtensionPoint ep = this.extensionPoints.add("AplicationPreferences", "");
118
                ep.append("GeneralPage", "", new GeneralPage());
119
                ep.append("NetworkPage", "", new NetworkPage());
120
                ep.append("FirewallPage", "", new FirewallPage());
121
                ep.append("DirExtensionsPage", "", new DirExtensionsPage());
122
                ep.append("LanguagePage", "", new LanguagePage());
123
                ep.append("ExtensionsPage", "", new ExtensionsPage());
124
                ep.append("AppearancePage", "", new AppearancePage());
125
                ep.append("FolderingPage", "", new FolderingPage());
126
                ep.append("ScreenSettingsPage", "", new ScreenSettingsPage());
127
                ep.append("SkinPreferences", "", new SkinPreferences());
128
                ep.append("IconThemePage", "", new IconThemePage());
129

    
130
//                this.extensionPoints.add("AplicationPreferences","GeneralPage", new GeneralPage());
131
//                this.extensionPoints.add("AplicationPreferences","NetworkPage", new NetworkPage());
132
//                this.extensionPoints.add("AplicationPreferences","FirewallPage", new FirewallPage());
133
//                this.extensionPoints.add("AplicationPreferences","DirExtensionsPage", new DirExtensionsPage());
134
//                this.extensionPoints.add("AplicationPreferences","LanguagePage", new LanguagePage());
135
//                this.extensionPoints.add("AplicationPreferences","ExtensionsPage", new ExtensionsPage());
136
//                this.extensionPoints.add("AplicationPreferences","AppearancePage", new AppearancePage());
137
//                this.extensionPoints.add("AplicationPreferences","FolderingPage", new FolderingPage());
138
//                this.extensionPoints.add("AplicationPreferences","ResolutionPage", new ScreenSettingsPage());
139
//                this.extensionPoints.add("AplicationPreferences","SkinPreferences", new SkinPreferences());
140
                String os = System.getProperty("os.name").toLowerCase();
141
                if (os.indexOf("linux") != -1 || os.indexOf("unix")!= -1) {
142
                        ep.append("BrowserControlPage", "", new BrowserControlPage());
143
//                        this.extensionPoints.add("AplicationPreferences","BrowserControlPage", new BrowserControlPage());
144
                }
145

    
146
                //Falta los plugin
147
        }
148

    
149
        private void initializeExtensionsConfig() {
150
                HashMap pc = Launcher.getPluginConfig();
151
                ArrayList array = new ArrayList();
152
                Iterator iter = pc.values().iterator();
153

    
154
                while (iter.hasNext()) {
155
                        array.add(((PluginConfig) iter.next()).getExtensions());
156
                }
157
                ExtensionPoint ep = this.extensionPoints.add("AplicationPreferences", "");
158

    
159
                Extensions[] exts = (Extensions[]) array.toArray(new Extensions[0]);
160
                for (int i = 0; i < exts.length; i++) {
161
                        for (int j = 0; j < exts[i].getExtensionCount(); j++) {
162
                                org.gvsig.andami.plugins.config.generate.Extension ext = exts[i]
163
                                                .getExtension(j);
164
                                String sExt = ext.getClassName().toString();
165
                                // String pn = null;
166
                                // pn = sExt.substring(0, sExt.lastIndexOf("."));
167
                                // dlgPrefs.addPreferencePage(new PluginsPage(pn));
168
                                // dlgPrefs.addPreferencePage(new ExtensionPage(ext));
169
                                ep.append(sExt, "", new ExtensionPage(ext));
170
                        }
171
                }
172
        }
173
        /**
174
         *
175
         */
176
        private void initializeExtensions() {
177
                Iterator i = Launcher.getExtensionIterator();
178
                ExtensionPoint ep = this.extensionPoints.add("AplicationPreferences", "");
179

    
180
                while (i.hasNext()) {
181
                        Object extension = i.next();
182

    
183
                        if (extension instanceof IPreferenceExtension) {
184
                                IPreferenceExtension pe = (IPreferenceExtension) extension;
185
                                IPreference[] pp = pe.getPreferencesPages();
186

    
187
                                if (pp == null) {
188
                                        logger.info("Preferences page is NULL. Extension "
189
                                                        + extension.getClass().getName()
190
                                                        + " implements IPreferenceExtension but does not provide pref. pages. ");
191
                                } else {
192
                                        for (int j = 0; j < pp.length; j++) {
193
                                                ep.append(pp[j].getID(), "", pp[j]);
194
                                                pp[j].initializeValues();
195
                                        }
196
                                }
197
                        }
198
                }
199
        }
200

    
201
        public void postInitialize() {
202
                super.postInitialize();
203
                DlgPreferences dlgPreferences=PluginServices.getDlgPreferences();
204
                dlgPreferences.refreshExtensionPoints();
205
                dlgPreferences.storeValues();
206
        }
207
}