diff options
Diffstat (limited to 'codan/org.eclipse.cdt.codan.ui/src/org/eclipse/cdt/codan/internal/ui/preferences/PropertyStore.java')
-rw-r--r-- | codan/org.eclipse.cdt.codan.ui/src/org/eclipse/cdt/codan/internal/ui/preferences/PropertyStore.java | 234 |
1 files changed, 234 insertions, 0 deletions
diff --git a/codan/org.eclipse.cdt.codan.ui/src/org/eclipse/cdt/codan/internal/ui/preferences/PropertyStore.java b/codan/org.eclipse.cdt.codan.ui/src/org/eclipse/cdt/codan/internal/ui/preferences/PropertyStore.java new file mode 100644 index 00000000000..cb30907d4e2 --- /dev/null +++ b/codan/org.eclipse.cdt.codan.ui/src/org/eclipse/cdt/codan/internal/ui/preferences/PropertyStore.java @@ -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 org.eclipse.cdt.codan.internal.ui.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)); + } + +} |