/******************************************************************************* * 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.wiki.preferences; 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)); } }