misc changes
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpeclipse / overlaypages / PropertyStore.java
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/overlaypages/PropertyStore.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/overlaypages/PropertyStore.java
new file mode 100644 (file)
index 0000000..00572e8
--- /dev/null
@@ -0,0 +1,234 @@
+/*******************************************************************************
+ * Copyright (c) 2003 Berthold Daum.
+ * 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:
+ *     Berthold Daum
+ *******************************************************************************/
+
+package net.sourceforge.phpeclipse.overlaypages;
+
+import java.io.IOException;
+import java.io.OutputStream;
+
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.QualifiedName;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.preference.PreferenceStore;
+
+/**
+ * @author Berthold Daum
+ *
+ */
+public class PropertyStore extends PreferenceStore {
+
+       private IResource resource;
+       private IPreferenceStore workbenchStore;
+       private String pageId;
+       private boolean inserting = false;
+
+       public PropertyStore(
+               IResource resource,
+               IPreferenceStore workbenchStore,
+               String pageId) {
+               this.resource = resource;
+               this.workbenchStore = workbenchStore;
+               this.pageId = pageId;
+       }
+
+       /*** Write modified values back to properties ***/
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.preference.IPersistentPreferenceStore#save()
+        */
+       public void save() throws IOException {
+               writeProperties();
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.preference.PreferenceStore#save(java.io.OutputStream, java.lang.String)
+        */
+       public void save(OutputStream out, String header) throws IOException {
+               writeProperties();
+       }
+
+       /**
+        * Writes modified preferences into resource properties.
+        */
+       private void writeProperties() throws IOException {
+               String[] preferences = super.preferenceNames();
+               for (int i = 0; i < preferences.length; i++) {
+                       String name = preferences[i];
+                       try {
+                               setProperty(name, getString(name));
+                       } catch (CoreException e) {
+                               throw new IOException(Messages.getString("PropertyStore.Cannot_write_resource_property") + name); //$NON-NLS-1$
+                       }
+               }
+       }
+
+       /**
+        * Convenience method to set a property
+        * @param name - the preference name
+        * @param value - the property value or null to delete the property
+        * @throws CoreException
+        */
+       private void setProperty(String name, String value) throws CoreException {
+               resource.setPersistentProperty(new QualifiedName(pageId, name), value);
+       }
+
+       /*** Get default values (Delegate to workbench store) ***/
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.preference.IPreferenceStore#getDefaultBoolean(java.lang.String)
+        */
+       public boolean getDefaultBoolean(String name) {
+               return workbenchStore.getDefaultBoolean(name);
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.preference.IPreferenceStore#getDefaultDouble(java.lang.String)
+        */
+       public double getDefaultDouble(String name) {
+               return workbenchStore.getDefaultDouble(name);
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.preference.IPreferenceStore#getDefaultFloat(java.lang.String)
+        */
+       public float getDefaultFloat(String name) {
+               return workbenchStore.getDefaultFloat(name);
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.preference.IPreferenceStore#getDefaultInt(java.lang.String)
+        */
+       public int getDefaultInt(String name) {
+               return workbenchStore.getDefaultInt(name);
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.preference.IPreferenceStore#getDefaultLong(java.lang.String)
+        */
+       public long getDefaultLong(String name) {
+               return workbenchStore.getDefaultLong(name);
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.preference.IPreferenceStore#getDefaultString(java.lang.String)
+        */
+       public String getDefaultString(String name) {
+               return workbenchStore.getDefaultString(name);
+       }
+
+       /*** Get property values ***/
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.preference.IPreferenceStore#getBoolean(java.lang.String)
+        */
+       public boolean getBoolean(String name) {
+               insertValue(name);
+               return super.getBoolean(name);
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.preference.IPreferenceStore#getDouble(java.lang.String)
+        */
+       public double getDouble(String name) {
+               insertValue(name);
+               return super.getDouble(name);
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.preference.IPreferenceStore#getFloat(java.lang.String)
+        */
+       public float getFloat(String name) {
+               insertValue(name);
+               return super.getFloat(name);
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.preference.IPreferenceStore#getInt(java.lang.String)
+        */
+       public int getInt(String name) {
+               insertValue(name);
+               return super.getInt(name);
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.preference.IPreferenceStore#getLong(java.lang.String)
+        */
+       public long getLong(String name) {
+               insertValue(name);
+               return super.getLong(name);
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.preference.IPreferenceStore#getString(java.lang.String)
+        */
+       public String getString(String name) {
+               insertValue(name);
+               return super.getString(name);
+       }
+
+       /**
+        * @param name
+        */
+       private synchronized void insertValue(String name) {
+               if (inserting)
+                       return;
+               if (super.contains(name))
+                       return;
+               inserting = true;
+               String prop = null;
+               try {
+                       prop = getProperty(name);
+               } catch (CoreException e) {
+               }
+               if (prop == null)
+                       prop = workbenchStore.getString(name);
+               if (prop != null)
+                       setValue(name, prop);
+               inserting = false;
+       }
+
+       /**
+        * Convenience method to fetch a property
+        * @param name - the preference name
+        * @return - the property value
+        * @throws CoreException
+        */
+       private String getProperty(String name) throws CoreException {
+               return resource.getPersistentProperty(new QualifiedName(pageId, name));
+       }
+
+       /*** Misc ***/
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.preference.IPreferenceStore#contains(java.lang.String)
+        */
+       public boolean contains(String name) {
+               return workbenchStore.contains(name);
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.preference.IPreferenceStore#setToDefault(java.lang.String)
+        */
+       public void setToDefault(String name) {
+                       setValue(name, getDefaultString(name));
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.preference.IPreferenceStore#isDefault(java.lang.String)
+        */
+       public boolean isDefault(String name) {
+               String defaultValue = getDefaultString(name);
+               if (defaultValue == null) return false;
+               return defaultValue.equals(getString(name));
+       }
+
+}