blob: 24a26fe7ce7a7ee8cc9a42c8ea4e9688b5901cdc [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2003, 2005 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.ui.navigator.internal.extensions;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.core.commands.common.EventManager;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.ui.navigator.IExtensionStateModel;
/**
*
* <p>
* <strong>EXPERIMENTAL</strong>. This class or interface has been added as part of a work in
* progress. There is a guarantee neither that this API will work nor that it will remain the same.
* Please do not use this API without consulting with the Platform/UI team.
* </p>
*
* @since 3.2
*
*/
public class ExtensionStateModel extends EventManager implements
IExtensionStateModel {
private final String id;
private final String viewerId;
private final Map values = new HashMap();
public ExtensionStateModel(String anId, String aViewerId) {
id = anId;
viewerId = aViewerId;
}
public String getId() {
return id;
}
public String getViewerId() {
return viewerId;
}
public String getStringProperty(String aPropertyName) {
return (String) values.get(aPropertyName);
}
public boolean getBooleanProperty(String aPropertyName) {
Boolean b = (Boolean) values.get(aPropertyName);
return b != null ? b.booleanValue() : false;
}
public int getIntProperty(String aPropertyName) {
Integer i = (Integer) values.get(aPropertyName);
return i != null ? i.intValue() : -1;
}
public void setStringProperty(String aPropertyName, String aPropertyValue) {
String oldValue = (String) values.get(aPropertyName);
String newValue = aPropertyValue;
if(hasPropertyChanged(oldValue, newValue)) {
values.put(aPropertyName, newValue);
firePropertyChangeEvent(new PropertyChangeEvent(this, aPropertyName, oldValue, newValue));
}
}
public void setBooleanProperty(String aPropertyName, boolean aPropertyValue) {
Boolean oldValue = (Boolean) values.get(aPropertyName);
Boolean newValue = aPropertyValue ? Boolean.TRUE : Boolean.FALSE;
if(hasPropertyChanged(oldValue, newValue)) {
values
.put(aPropertyName, aPropertyValue ? Boolean.TRUE
: Boolean.FALSE);
firePropertyChangeEvent(new PropertyChangeEvent(this, aPropertyName, oldValue, newValue));
}
}
public void setIntProperty(String aPropertyName, int aPropertyValue) {
Integer oldValue = (Integer) values.get(aPropertyName);
Integer newValue = new Integer(aPropertyValue);
if(hasPropertyChanged(oldValue, newValue)) {
values.put(aPropertyName, newValue);
firePropertyChangeEvent(new PropertyChangeEvent(this, aPropertyName, oldValue, newValue));
}
}
public void addPropertyChangeListener(IPropertyChangeListener aListener) {
addListenerObject(aListener);
}
public void removePropertyChangeListener(IPropertyChangeListener aListener) {
removeListenerObject(aListener);
}
public Object getProperty(String aPropertyName) {
return values.get(aPropertyName);
}
public void setProperty(String aPropertyName, Object aPropertyValue) {
Object oldValue = values.get(aPropertyName);
Object newValue = aPropertyValue;
if(hasPropertyChanged(oldValue, newValue)) {
values.put(aPropertyName, newValue);
firePropertyChangeEvent(new PropertyChangeEvent(this, aPropertyName, oldValue, newValue));
}
}
/**
* @param oldValue
* @param newValue
* @return
*/
private boolean hasPropertyChanged(Object oldValue, Object newValue) {
return oldValue == null || !oldValue.equals(newValue);
}
protected void firePropertyChangeEvent(PropertyChangeEvent anEvent) {
Object[] listeners = getListeners();
for (int i = 0; i < listeners.length; ++i)
((IPropertyChangeListener) listeners[i]).propertyChange(anEvent);
}
}