package com.technophobia.substeps.editor.preferences.page; import java.io.IOException; import org.eclipse.core.resources.IProject; import org.eclipse.jface.preference.IPersistentPreferenceStore; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.util.IPropertyChangeListener; import com.technophobia.substeps.nature.SubstepsNature; import com.technophobia.substeps.preferences.SubstepsPreferences; public class SubstepsPreferenceStore implements IPreferenceStore, IPersistentPreferenceStore { private static final String PROJECT_NATURE_KEY = SubstepsPreferences.PROJECT_NATURE.key(); private final IPreferenceStore delegate; private final IProject project; public SubstepsPreferenceStore(final IPreferenceStore delegate, final IProject project) { this.delegate = delegate; this.project = project; } @Override public void save() throws IOException { final boolean hasNature = getBoolean(PROJECT_NATURE_KEY); if (hasNature) { SubstepsNature.ensureProjectHasNature(project); } else { SubstepsNature.ensureProjectDoesNotHaveNature(project); } ((IPersistentPreferenceStore) delegate).save(); } @Override public void addPropertyChangeListener(final IPropertyChangeListener listener) { delegate.addPropertyChangeListener(listener); } @Override public boolean contains(final String name) { return delegate.contains(name) || PROJECT_NATURE_KEY.equals(name); } @Override public void firePropertyChangeEvent(final String name, final Object oldValue, final Object newValue) { delegate.firePropertyChangeEvent(name, oldValue, newValue); } @Override public boolean getBoolean(final String name) { return delegate.getBoolean(name); } @Override public boolean getDefaultBoolean(final String name) { if (PROJECT_NATURE_KEY.equals(name)) { return SubstepsNature.isSubstepsProject(project); } return delegate.getBoolean(name); } @Override public double getDefaultDouble(final String name) { return delegate.getDefaultDouble(name); } @Override public float getDefaultFloat(final String name) { return delegate.getDefaultFloat(name); } @Override public int getDefaultInt(final String name) { return delegate.getDefaultInt(name); } @Override public long getDefaultLong(final String name) { return delegate.getDefaultLong(name); } @Override public String getDefaultString(final String name) { return delegate.getDefaultString(name); } @Override public double getDouble(final String name) { return delegate.getDefaultDouble(name); } @Override public float getFloat(final String name) { return delegate.getFloat(name); } @Override public int getInt(final String name) { return delegate.getInt(name); } @Override public long getLong(final String name) { return delegate.getLong(name); } @Override public String getString(final String name) { return delegate.getString(name); } @Override public boolean isDefault(final String name) { return delegate.isDefault(name); } @Override public boolean needsSaving() { return delegate.needsSaving(); } @Override public void putValue(final String name, final String value) { delegate.putValue(name, value); } @Override public void removePropertyChangeListener(final IPropertyChangeListener listener) { delegate.removePropertyChangeListener(listener); } @Override public void setDefault(final String name, final double value) { delegate.setDefault(name, value); } @Override public void setDefault(final String name, final float value) { delegate.setDefault(name, value); } @Override public void setDefault(final String name, final int value) { delegate.setDefault(name, value); } @Override public void setDefault(final String name, final long value) { delegate.setDefault(name, value); } @Override public void setDefault(final String name, final String defaultObject) { delegate.setDefault(name, defaultObject); } @Override public void setDefault(final String name, final boolean value) { delegate.setDefault(name, value); } @Override public void setToDefault(final String name) { delegate.setToDefault(name); } @Override public void setValue(final String name, final double value) { delegate.setValue(name, value); } @Override public void setValue(final String name, final float value) { delegate.setValue(name, value); } @Override public void setValue(final String name, final int value) { delegate.setValue(name, value); } @Override public void setValue(final String name, final long value) { delegate.setValue(name, value); } @Override public void setValue(final String name, final String value) { delegate.setValue(name, value); } @Override public void setValue(final String name, final boolean value) { delegate.setValue(name, value); } }