/******************************************************************************* * Copyright (c) 2012, 2016 PDT Extension Group 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: * PDT Extension Group - initial API and implementation *******************************************************************************/ package org.eclipse.php.composer.api.entities; import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; public class Entity { protected transient PropertyChangeSupport changeSupport = new PropertyChangeSupport(this); /** * Adds a listener to be notified when a property changes * * @param listener */ public void addPropertyChangeListener(PropertyChangeListener listener) { changeSupport.addPropertyChangeListener(listener); } /** * Removes a listener that no longer receives notification about property * changes * * @param listener */ public void removePropertyChangeListener(PropertyChangeListener listener) { changeSupport.removePropertyChangeListener(listener); } /** * Adds a listener to be notified when the passed property changes * * @param propertyName * the property upon which the listener will be notified * @param listener */ public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) { changeSupport.addPropertyChangeListener(propertyName, listener); } /** * Removes a listener that no longer receives notification about changes * from the passed property * * @param propertyName * the property upon which the listener has been notified * @param listener */ public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener) { changeSupport.removePropertyChangeListener(propertyName, listener); } /** * Notify listeners that a property has changed its value * * @param propertyName * @param oldValue * @param newValue */ protected void firePropertyChange(String propertyName, Object oldValue, Object newValue) { if (oldValue instanceof JsonValue) { oldValue = getRawObject((JsonValue) oldValue); } if (newValue instanceof JsonValue) { newValue = getRawObject((JsonValue) newValue); } changeSupport.firePropertyChange(propertyName, oldValue, newValue); } private Object getRawObject(JsonValue value) { if (value.isArray()) { return value.getAsArray(); } else if (value.isObject()) { return value.getAsObject(); } else if (value.isNumber()) { return value.getAsNumber(); } else if (value.isBoolean()) { return value.getAsBoolean(); } else { return value.getAsString(); } } }