/******************************************************************************* * Copyright (c) 1998, 2015 Oracle and/or its affiliates. All rights reserved. * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0 * which accompanies this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. * * Contributors: * Oracle - initial API and implementation from Oracle TopLink ******************************************************************************/ package org.eclipse.persistence.tools.workbench.uitools.app; import java.beans.PropertyChangeEvent; import java.util.Collection; import java.util.List; import org.eclipse.persistence.tools.workbench.utility.events.ChangeSupport; import org.eclipse.persistence.tools.workbench.utility.events.CollectionChangeEvent; import org.eclipse.persistence.tools.workbench.utility.events.ListChangeEvent; import org.eclipse.persistence.tools.workbench.utility.events.StateChangeEvent; import org.eclipse.persistence.tools.workbench.utility.events.TreeChangeEvent; /** * This support class changes the behavior of the standard * ChangeSupport in several ways: * - The source must be a ValueModel. * - All events fired by the source must specify the VALUE aspect name. * - Listeners are required to be either VALUE listeners or * "generic" listeners. * - VALUE listeners are stored alongside the "generic" listeners, * improving performance a bit (in terms of both time and space) */ public class ValueModelChangeSupport extends ChangeSupport { private static final long serialVersionUID = 1L; /** * @see org.eclipse.persistence.tools.workbench.utility.events.ChangeSupport#ChangeSupport(Object) */ public ValueModelChangeSupport(ValueModel source) { super(source); } // ******************** internal behavior ******************** private UnsupportedOperationException unsupportedOperationException() { return new UnsupportedOperationException("ValueModels only support VALUE changes"); } private void checkAspectName(String aspectName) { if (aspectName != ValueModel.VALUE) { throw new IllegalArgumentException("ValueModels only support VALUE changes: " + aspectName); } } /** * @see org.eclipse.persistence.tools.workbench.utility.events.ChangeSupport#addListener(String, Class, Object) */ protected void addListener(String aspectName, Class listenerClass, Object listener) { this.checkAspectName(aspectName); // redirect to "generic" listeners collection this.addListener(listenerClass, listener); } /** * @see org.eclipse.persistence.tools.workbench.utility.events.ChangeSupport#removeListener(String, Class, Object) */ protected void removeListener(String aspectName, Class listenerClass, Object listener) { this.checkAspectName(aspectName); // redirect to "generic" listeners collection this.removeListener(listenerClass, listener); } // ******************** internal queries ******************** /** * @see org.eclipse.persistence.tools.workbench.utility.events.ChangeSupport#hasAnyListeners(Class, String) */ protected boolean hasAnyListeners(Class listenerClass, String aspectName) { this.checkAspectName(aspectName); // redirect to "generic" listeners collection return this.hasAnyListeners(listenerClass); } // ******************** state change support ******************** /** * @see org.eclipse.persistence.tools.workbench.utility.events.ChangeSupport#fireStateChanged() */ public void fireStateChanged() { throw this.unsupportedOperationException(); } /** * @see org.eclipse.persistence.tools.workbench.utility.events.ChangeSupport#fireStateChanged(org.eclipse.persistence.tools.workbench.utility.events.StateChangeEvent) */ public void fireStateChanged(StateChangeEvent event) { throw this.unsupportedOperationException(); } // ******************** property change support ******************** /** * @see org.eclipse.persistence.tools.workbench.utility.events.ChangeSupport#firePropertyChanged(java.beans.PropertyChangeEvent) */ public void firePropertyChanged(PropertyChangeEvent event) { this.checkAspectName(event.getPropertyName()); super.firePropertyChanged(event); } /** * @see org.eclipse.persistence.tools.workbench.utility.events.ChangeSupport#firePropertyChanged(String, Object, Object) */ public void firePropertyChanged(String propertyName, Object oldValue, Object newValue) { this.checkAspectName(propertyName); super.firePropertyChanged(propertyName, oldValue, newValue); } /** * @see org.eclipse.persistence.tools.workbench.utility.events.ChangeSupport#firePropertyChanged(String, int, int) */ public void firePropertyChanged(String propertyName, int oldValue, int newValue) { this.checkAspectName(propertyName); super.firePropertyChanged(propertyName, oldValue, newValue); } /** * @see org.eclipse.persistence.tools.workbench.utility.events.ChangeSupport#firePropertyChanged(String, boolean, boolean) */ public void firePropertyChanged(String propertyName, boolean oldValue, boolean newValue) { this.checkAspectName(propertyName); super.firePropertyChanged(propertyName, oldValue, newValue); } // ******************** collection change support ******************** /** * @see org.eclipse.persistence.tools.workbench.utility.events.ChangeSupport#fireItemsAdded(org.eclipse.persistence.tools.workbench.utility.events.CollectionChangeEvent) */ public void fireItemsAdded(CollectionChangeEvent event) { this.checkAspectName(event.getCollectionName()); super.fireItemsAdded(event); } /** * @see org.eclipse.persistence.tools.workbench.utility.events.ChangeSupport#fireItemsAdded(String, java.util.Collection) */ public void fireItemsAdded(String collectionName, Collection addedItems) { this.checkAspectName(collectionName); super.fireItemsAdded(collectionName, addedItems); } /** * @see org.eclipse.persistence.tools.workbench.utility.events.ChangeSupport#fireItemAdded(String, Object) */ public void fireItemAdded(String collectionName, Object addedItem) { this.checkAspectName(collectionName); super.fireItemAdded(collectionName, addedItem); } /** * @see org.eclipse.persistence.tools.workbench.utility.events.ChangeSupport#fireItemsRemoved(org.eclipse.persistence.tools.workbench.utility.events.CollectionChangeEvent) */ public void fireItemsRemoved(CollectionChangeEvent event) { this.checkAspectName(event.getCollectionName()); super.fireItemsRemoved(event); } /** * @see org.eclipse.persistence.tools.workbench.utility.events.ChangeSupport#fireItemsRemoved(String, java.util.Collection) */ public void fireItemsRemoved(String collectionName, Collection removedItems) { this.checkAspectName(collectionName); super.fireItemsRemoved(collectionName, removedItems); } /** * @see org.eclipse.persistence.tools.workbench.utility.events.ChangeSupport#fireItemRemoved(String, Object) */ public void fireItemRemoved(String collectionName, Object removedItem) { this.checkAspectName(collectionName); super.fireItemRemoved(collectionName, removedItem); } /** * @see org.eclipse.persistence.tools.workbench.utility.events.ChangeSupport#fireCollectionChanged(org.eclipse.persistence.tools.workbench.utility.events.CollectionChangeEvent) */ public void fireCollectionChanged(CollectionChangeEvent event) { this.checkAspectName(event.getCollectionName()); super.fireCollectionChanged(event); } /** * @see org.eclipse.persistence.tools.workbench.utility.events.ChangeSupport#fireCollectionChanged(String) */ public void fireCollectionChanged(String collectionName) { this.checkAspectName(collectionName); super.fireCollectionChanged(collectionName); } // ******************** list change support ******************** /** * @see org.eclipse.persistence.tools.workbench.utility.events.ChangeSupport#fireItemsAdded(org.eclipse.persistence.tools.workbench.utility.events.ListChangeEvent) */ public void fireItemsAdded(ListChangeEvent event) { this.checkAspectName(event.getListName()); super.fireItemsAdded(event); } /** * @see org.eclipse.persistence.tools.workbench.utility.events.ChangeSupport#fireItemsAdded(String, int, java.util.List) */ public void fireItemsAdded(String listName, int index, List addedItems) { this.checkAspectName(listName); super.fireItemsAdded(listName, index, addedItems); } /** * @see org.eclipse.persistence.tools.workbench.utility.events.ChangeSupport#fireItemAdded(String, int, Object) */ public void fireItemAdded(String listName, int index, Object addedItem) { this.checkAspectName(listName); super.fireItemAdded(listName, index, addedItem); } /** * @see org.eclipse.persistence.tools.workbench.utility.events.ChangeSupport#fireItemsRemoved(org.eclipse.persistence.tools.workbench.utility.events.ListChangeEvent) */ public void fireItemsRemoved(ListChangeEvent event) { this.checkAspectName(event.getListName()); super.fireItemsRemoved(event); } /** * @see org.eclipse.persistence.tools.workbench.utility.events.ChangeSupport#fireItemsRemoved(String, int, java.util.List) */ public void fireItemsRemoved(String listName, int index, List removedItems) { this.checkAspectName(listName); super.fireItemsRemoved(listName, index, removedItems); } /** * @see org.eclipse.persistence.tools.workbench.utility.events.ChangeSupport#fireItemRemoved(String, int, Object) */ public void fireItemRemoved(String listName, int index, Object removedItem) { this.checkAspectName(listName); super.fireItemRemoved(listName, index, removedItem); } /** * @see org.eclipse.persistence.tools.workbench.utility.events.ChangeSupport#fireItemsReplaced(org.eclipse.persistence.tools.workbench.utility.events.ListChangeEvent) */ public void fireItemsReplaced(ListChangeEvent event) { this.checkAspectName(event.getListName()); super.fireItemsReplaced(event); } /** * @see org.eclipse.persistence.tools.workbench.utility.events.ChangeSupport#fireItemsReplaced(String, int, java.util.List, java.util.List) */ public void fireItemsReplaced(String listName, int index, List newItems, List replacedItems) { this.checkAspectName(listName); super.fireItemsReplaced(listName, index, newItems, replacedItems); } /** * @see org.eclipse.persistence.tools.workbench.utility.events.ChangeSupport#fireItemReplaced(String, int, Object, Object) */ public void fireItemReplaced(String listName, int index, Object newItem, Object replacedItem) { this.checkAspectName(listName); super.fireItemReplaced(listName, index, newItem, replacedItem); } /** * @see org.eclipse.persistence.tools.workbench.utility.events.ChangeSupport#fireListChanged(org.eclipse.persistence.tools.workbench.utility.events.ListChangeEvent) */ public void fireListChanged(ListChangeEvent event) { this.checkAspectName(event.getListName()); super.fireListChanged(event); } /** * @see org.eclipse.persistence.tools.workbench.utility.events.ChangeSupport#fireListChanged(String) */ public void fireListChanged(String listName) { this.checkAspectName(listName); super.fireListChanged(listName); } // ******************** tree change support ******************** /** * @see org.eclipse.persistence.tools.workbench.utility.events.ChangeSupport#fireNodeAdded(org.eclipse.persistence.tools.workbench.utility.events.TreeChangeEvent) */ public void fireNodeAdded(TreeChangeEvent event) { this.checkAspectName(event.getTreeName()); super.fireNodeAdded(event); } /** * @see org.eclipse.persistence.tools.workbench.utility.events.ChangeSupport#fireNodeAdded(String, Object[]) */ public void fireNodeAdded(String treeName, Object[] path) { this.checkAspectName(treeName); super.fireNodeAdded(treeName, path); } /** * @see org.eclipse.persistence.tools.workbench.utility.events.ChangeSupport#fireNodeRemoved(org.eclipse.persistence.tools.workbench.utility.events.TreeChangeEvent) */ public void fireNodeRemoved(TreeChangeEvent event) { this.checkAspectName(event.getTreeName()); super.fireNodeRemoved(event); } /** * @see org.eclipse.persistence.tools.workbench.utility.events.ChangeSupport#fireNodeRemoved(String, Object[]) */ public void fireNodeRemoved(String treeName, Object[] path) { this.checkAspectName(treeName); super.fireNodeRemoved(treeName, path); } /** * @see org.eclipse.persistence.tools.workbench.utility.events.ChangeSupport#fireTreeChanged(org.eclipse.persistence.tools.workbench.utility.events.TreeChangeEvent) */ public void fireTreeChanged(TreeChangeEvent event) { this.checkAspectName(event.getTreeName()); super.fireTreeChanged(event); } /** * @see org.eclipse.persistence.tools.workbench.utility.events.ChangeSupport#fireTreeChanged(String, Object[]) */ public void fireTreeChanged(String treeName, Object[] path) { this.checkAspectName(treeName); super.fireTreeChanged(treeName, path); } }