Open PHP Help Online Manual in the browser / add other http querie for google and...
[phpeclipse.git] / net.sourceforge.phpeclipse.phphelp / src / net / sourceforge / phpdt / httpquery / config / ConfigurationManager.java
diff --git a/net.sourceforge.phpeclipse.phphelp/src/net/sourceforge/phpdt/httpquery/config/ConfigurationManager.java b/net.sourceforge.phpeclipse.phphelp/src/net/sourceforge/phpdt/httpquery/config/ConfigurationManager.java
new file mode 100644 (file)
index 0000000..2b23dea
--- /dev/null
@@ -0,0 +1,184 @@
+/**********************************************************************
+ * Copyright (c) 2003 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+�*
+ * Contributors:
+ *    IBM - Initial API and implementation
+ **********************************************************************/
+package net.sourceforge.phpdt.httpquery.config;
+
+import java.io.ByteArrayInputStream;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import net.sourceforge.phpdt.phphelp.PHPHelpPlugin;
+
+import org.eclipse.core.runtime.Preferences;
+/**
+ *
+ */
+public class ConfigurationManager {
+       private static final int ADD = 0;
+       private static final int CHANGE = 1;
+       private static final int REMOVE = 2;
+
+       // configurations
+       protected List configurations;
+       protected Map threads = new HashMap();
+
+       protected List configurationListeners = new ArrayList();
+
+       private Preferences.IPropertyChangeListener pcl;
+       protected boolean ignorePreferenceChanges = false;
+
+       protected static ConfigurationManager instance;
+
+       public static ConfigurationManager getInstance() {
+               if (instance == null)
+                       instance = new ConfigurationManager();
+               return instance;
+       }
+
+       private ConfigurationManager() {
+               loadConfigurations();
+
+               pcl = new Preferences.IPropertyChangeListener() {
+                       public void propertyChange(Preferences.PropertyChangeEvent event) {
+                               if (ignorePreferenceChanges)
+                                       return;
+                               String property = event.getProperty();
+                               if (property.equals(PHPHelpPlugin.PREF_STRING_CONFIGURATIONS)) {
+                                       loadConfigurations();
+                               }
+                       }
+               };
+
+               PHPHelpPlugin.getDefault().getPluginPreferences().addPropertyChangeListener(pcl);
+       }
+
+       protected void dispose() {
+               PHPHelpPlugin.getDefault().getPluginPreferences().removePropertyChangeListener(pcl);
+       }
+
+       public IConfigurationWorkingCopy createConfiguration() {
+               return new ConfigurationWorkingCopy();
+       }
+
+       public List getConfigurations() {
+               return new ArrayList(configurations);
+       }
+
+       protected void addConfiguration(IConfiguration configuration) {
+               if (!configurations.contains(configuration))
+                       configurations.add(configuration);
+               fireConfigurationEvent(configuration, ADD);
+               saveConfigurations();
+       }
+
+       protected boolean isActive(IConfiguration configuration) {
+               return (threads.get(configuration) != null);
+       }
+
+       protected void removeConfiguration(IConfiguration configuration) {
+               configurations.remove(configuration);
+               fireConfigurationEvent(configuration, REMOVE);
+               saveConfigurations();
+       }
+
+       protected void configurationChanged(IConfiguration configuration) {
+               fireConfigurationEvent(configuration, CHANGE);
+               saveConfigurations();
+       }
+
+       /**
+        * Add monitor listener.
+        *
+        * @param listener
+        */
+       public void addConfigurationListener(IConfigurationListener listener) {
+               configurationListeners.add(listener);
+       }
+
+       /**
+        * Remove monitor listener.
+        *
+        * @param listener
+        */
+       public void removeConfigurationListener(IConfigurationListener listener) {
+               configurationListeners.remove(listener);
+       }
+
+       /**
+        * Fire a monitor event.
+        * @param rr
+        * @param fType
+        */
+       protected void fireConfigurationEvent(IConfiguration configuration, int type) {
+               Object[] obj = configurationListeners.toArray();
+
+               int size = obj.length;
+               for (int i = 0; i < size; i++) {
+                       IConfigurationListener listener = (IConfigurationListener) obj[i];
+                       if (type == ADD)
+                               listener.configurationAdded(configuration);
+                       else if (type == CHANGE)
+                               listener.configurationChanged(configuration);
+                       else if (type == REMOVE)
+                               listener.configurationRemoved(configuration);
+               }
+       }
+
+
+
+
+       protected void loadConfigurations() {
+
+               configurations = new ArrayList();
+               Preferences prefs = PHPHelpPlugin.getDefault().getPluginPreferences();
+               String xmlString = prefs.getString(PHPHelpPlugin.PREF_STRING_CONFIGURATIONS);
+               if (xmlString != null && xmlString.length() > 0) {
+                       try {
+                               ByteArrayInputStream in = new ByteArrayInputStream(xmlString.getBytes());
+                               IMemento memento = XMLMemento.loadMemento(in);
+
+                               IMemento[] children = memento.getChildren("config");
+                               if (children != null) {
+                                       int size = children.length;
+                                       for (int i = 0; i < size; i++) {
+                                               Configuration configuration = new ConfigurationWorkingCopy();
+                                               configuration.load(children[i]);
+                                               configurations.add(configuration);
+                                       }
+                               }
+                       } catch (Exception e) {
+                       }
+               }
+       }
+
+       protected void saveConfigurations() {
+               try {
+                       ignorePreferenceChanges = true;
+                       XMLMemento memento = XMLMemento.createWriteRoot(PHPHelpPlugin.PREF_STRING_CONFIGURATIONS);
+
+                       Iterator iterator = configurations.iterator();
+                       while (iterator.hasNext()) {
+                               Configuration monitor = (Configuration) iterator.next();
+                               IMemento child = memento.createChild("config");
+                               monitor.save(child);
+                       }
+
+                       String xmlString = memento.saveToString();
+                       Preferences prefs = PHPHelpPlugin.getDefault().getPluginPreferences();
+                       prefs.setValue(PHPHelpPlugin.PREF_STRING_CONFIGURATIONS, xmlString);
+                       PHPHelpPlugin.getDefault().savePluginPreferences();
+               } catch (Exception e) {
+               }
+               ignorePreferenceChanges = false;
+       }
+}
\ No newline at end of file