package org.objectstyle.wolips.variables; import java.io.IOException; import java.util.LinkedList; import java.util.List; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Path; import org.eclipse.jface.preference.IPersistentPreferenceStore; import org.eclipse.jface.util.IPropertyChangeListener; import org.eclipse.jface.util.PropertyChangeEvent; import org.objectstyle.woenvironment.env.WOVariables; import org.objectstyle.wolips.baseforplugins.util.ComparisonUtils; import er.extensions.foundation.ERXValueUtilities; public class ProjectVariables implements IPersistentPreferenceStore { private WOVariables _variables; private boolean _dirty; public ProjectVariables(WOVariables variables) { _variables = variables; } public WOVariables getWOVariables() { return _variables; } private IPath fixMissingSeparatorAfterDevice(String string) { IPath path; if (string != null && string.length() > 1 && string.charAt(1) == ':') { path = new Path(string.substring(2)).setDevice(string.substring(0, 2)); } else if (string != null) { path = new Path(string); } else { path = null; } return path; } /** * @return the path to the local root */ public IPath getLocalRoot() { return this.fixMissingSeparatorAfterDevice(_variables.localRoot()); } /** * @return the path to the local root */ public IPath getLocalFrameworkPath() { return this.fixMissingSeparatorAfterDevice(_variables.localFrameworkPath()); } /** * @return the path to the system root */ public IPath getSystemRoot() { return this.fixMissingSeparatorAfterDevice(_variables.systemRoot()); } /** * @return the path to the system root */ public IPath getSystemFrameworkPath() { return this.fixMissingSeparatorAfterDevice(_variables.systemFrameworkPath()); } /** * @return the path to the user home */ public IPath getUserRoot() { return this.fixMissingSeparatorAfterDevice(_variables.userRoot()); } /** * @return the path to the user home */ public IPath getUserFrameworkPath() { return this.fixMissingSeparatorAfterDevice(_variables.userFrameworkPath()); } /** * @return the path to the reference api */ public IPath getReferenceApi() { String referenceApi = _variables.referenceApi(); if (referenceApi == null) { return null; } return this.fixMissingSeparatorAfterDevice(referenceApi); } /** * @return the path to the reference api */ public String getReferenceApiAsJavaDocCompatibleString() { IPath referenceApi = this.getReferenceApi(); if (referenceApi == null) { return null; } String referenceApiString = referenceApi.toOSString(); String osName = System.getProperty("os.name").toLowerCase(); if (osName.indexOf("windows") >= 0) { referenceApiString = referenceApiString.replace('\\', '/'); } referenceApiString = "file://" + referenceApiString; return referenceApiString; } /** * @return the path to external build root */ public IPath getExternalBuildRoot() { String root = _variables.externalBuildRoot(); if (root != null) { IPath result = this.fixMissingSeparatorAfterDevice(root); return result; } return null; } /** * @return the path to external build root */ public IPath getExternalBuildFrameworkPath() { String root = _variables.externalBuildFrameworkPath(); if (root != null) { IPath result = this.fixMissingSeparatorAfterDevice(root); return result; } return null; } // public String getProperty(String key) { // return _variables.getProperty(key); // } // // public String getProperty(String key, String defaultValue) { // String value = _variables.getProperty(key); // if (value == null) { // value = defaultValue; // } // return value; // } // // public void setProperty(String key, String value) { // _variables.setProperty(key, value); // } // // public void setDefaultProperty(String key, String value) { // _variables.setProperty(key, value); // } // // public boolean getBooleanProperty(String key) { // return getBooleanProperty(key, false); // } // // public boolean getBooleanProperty(String key, boolean defaultValue) { // return "true".equals(getProperty(key, String.valueOf(defaultValue))); // } private List<IPropertyChangeListener> _listeners = new LinkedList<IPropertyChangeListener>(); public void addPropertyChangeListener(IPropertyChangeListener listener) { _listeners.add(listener); } public boolean contains(String name) { return getString(name) != null; } public void firePropertyChangeEvent(String name, Object oldValue, Object newValue) { PropertyChangeEvent event = new PropertyChangeEvent(this, name, oldValue, newValue); for (IPropertyChangeListener listener : _listeners) { listener.propertyChange(event); } } public boolean getBoolean(String name) { return ERXValueUtilities.booleanValue(getString(name)); } public boolean getBoolean(String name, boolean defaultValue) { return ERXValueUtilities.booleanValueWithDefault(getString(name), defaultValue); } public boolean getDefaultBoolean(String name) { return ERXValueUtilities.booleanValue(getDefaultString(name)); } public double getDefaultDouble(String name) { return ERXValueUtilities.doubleValue(getDefaultString(name)); } public float getDefaultFloat(String name) { return ERXValueUtilities.floatValue(getDefaultString(name)); } public int getDefaultInt(String name) { return ERXValueUtilities.intValue(getDefaultString(name)); } public long getDefaultLong(String name) { return ERXValueUtilities.longValue(getDefaultString(name)); } public String getDefaultString(String name) { return _variables.getDefault(name); } public double getDouble(String name) { return ERXValueUtilities.doubleValue(getString(name)); } public float getFloat(String name) { return ERXValueUtilities.floatValue(getString(name)); } public int getInt(String name) { return ERXValueUtilities.intValue(getString(name)); } public long getLong(String name) { return ERXValueUtilities.longValue(getString(name)); } public String getString(String name, String defaultValue) { String value = getString(name); if (value == null) { value = defaultValue; } return value; } public String getString(String name) { return _variables.getProperty(name); } public boolean isDefault(String name) { return ComparisonUtils.equals(getDefaultString(name), getString(name), false); } public boolean needsSaving() { return _dirty; } public void putValue(String name, String value) { _variables.setProperty(name, value); _dirty = true; } public void removePropertyChangeListener(IPropertyChangeListener listener) { _listeners.remove(listener); } public void setDefault(String name, double value) { setDefault(name, String.valueOf(value)); } public void setDefault(String name, float value) { setDefault(name, String.valueOf(value)); } public void setDefault(String name, int value) { setDefault(name, String.valueOf(value)); } public void setDefault(String name, long value) { setDefault(name, String.valueOf(value)); } public void setDefault(String name, String defaultObject) { _variables.setDefault(name, defaultObject); _dirty = true; } public void setDefault(String name, boolean value) { setDefault(name, String.valueOf(value)); } public void setToDefault(String name) { setValue(name, getDefaultString(name)); } public void setValue(String name, double value) { setValue(name, String.valueOf(value)); } public void setValue(String name, float value) { setValue(name, String.valueOf(value)); } public void setValue(String name, int value) { setValue(name, String.valueOf(value)); } public void setValue(String name, long value) { setValue(name, String.valueOf(value)); } public void setValue(String name, String value) { _variables.setProperty(name, value); _dirty = true; } public void setValue(String name, boolean value) { setValue(name, String.valueOf(value)); } public void save() throws IOException { _variables.save(); _dirty = false; } }