Author: bobtarling Date: 2011-04-27 03:16:58-0700 New Revision: 19288 Added: trunk/src/argouml-core-model/src/org/argouml/model/AssociationChangeListener.java trunk/src/argouml-core-model/src/org/argouml/model/UmlChangeListener.java Modified: trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/ModelEventPumpEUMLImpl.java trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/ModelEventPumpMDRImpl.java trunk/src/argouml-core-model/src/org/argouml/model/AbstractModelEventPump.java trunk/src/argouml-core-model/src/org/argouml/model/ModelEventPump.java
Log: Refactorings to allow registration of AssociationChangeListeners to the event pump in euml (not actually used yet). SHould cause no change of current behaviour. Modified: trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/ModelEventPumpEUMLImpl.java Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/ModelEventPumpEUMLImpl.java?view=diff&pathrev=19288&r1=19287&r2=19288 ============================================================================== --- trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/ModelEventPumpEUMLImpl.java (original) +++ trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/ModelEventPumpEUMLImpl.java 2011-04-27 03:16:58-0700 @@ -1,6 +1,6 @@ // $Id$ /******************************************************************************* - * Copyright (c) 2007,2010 Bogdan Pistol and other contributors + * Copyright (c) 2007,2011 Bogdan Pistol and other contributors * 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 @@ -9,12 +9,14 @@ * Contributors: * Bogdan Pistol - initial implementation * Thomas Neustupny + * Bob Tarling *******************************************************************************/ package org.argouml.model.euml; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.ArrayList; +import java.util.EventListener; import java.util.EventObject; import java.util.HashMap; import java.util.HashSet; @@ -28,9 +30,11 @@ import org.apache.log4j.Logger; import org.argouml.model.AbstractModelEventPump; import org.argouml.model.AddAssociationEvent; +import org.argouml.model.AssociationChangeListener; import org.argouml.model.AttributeChangeEvent; import org.argouml.model.DeleteInstanceEvent; import org.argouml.model.RemoveAssociationEvent; +import org.argouml.model.UmlChangeListener; import org.eclipse.emf.common.command.CommandStackListener; import org.eclipse.emf.common.notify.Notification; import org.eclipse.emf.common.notify.Notifier; @@ -58,11 +62,11 @@ */ private class Listener { - private PropertyChangeListener listener; + private EventListener listener; private Set<String> props; - Listener(PropertyChangeListener listener, String[] properties) { + Listener(EventListener listener, String[] properties) { this.listener = listener; if (properties != null) { setProperties(properties); @@ -91,7 +95,7 @@ } } - PropertyChangeListener getListener() { + EventListener getListener() { return listener; } @@ -189,13 +193,32 @@ modelElement, listener, propertyNames, registerForElements); } + public void addModelEventListener(UmlChangeListener listener, + Object modelElement, String[] propertyNames) { + if (LOG.isDebugEnabled()) { + LOG.debug("Adding a listener " //$NON-NLS-1$ + + listener + " to " //$NON-NLS-1$ + + modelElement + + " for " //$NON-NLS-1$ + + propertyNames); + } + if (!(modelElement instanceof EObject)) { + throw new IllegalArgumentException( + "The modelelement must be instance " //$NON-NLS-1$ + + "of EObject. We got " //$NON-NLS-1$ + + modelElement); + } + registerListener( + modelElement, listener, propertyNames, registerForElements); + } + public void addModelEventListener(PropertyChangeListener listener, Object modelelement) { addModelEventListener(listener, modelelement, (String[]) null); } private void registerListener(Object notifier, - PropertyChangeListener listener, String[] propertyNames, + EventListener listener, String[] propertyNames, Map<Object, List<Listener>> register) { if (notifier == null || listener == null) { throw new NullPointerException( @@ -243,13 +266,19 @@ modelelement, listener, propertyNames, registerForElements); } + public void removeModelEventListener(UmlChangeListener listener, + Object modelelement, String[] propertyNames) { + unregisterListener( + modelelement, listener, propertyNames, registerForElements); + } + public void removeModelEventListener(PropertyChangeListener listener, Object modelelement) { removeModelEventListener(listener, modelelement, (String[]) null); } private void unregisterListener(Object notifier, - PropertyChangeListener listener, String[] propertyNames, + EventListener listener, String[] propertyNames, Map<Object, List<Listener>> register) { if (notifier == null || listener == null) { throw new NullPointerException( @@ -329,14 +358,14 @@ class EventAndListeners { public EventAndListeners(PropertyChangeEvent e, - List<PropertyChangeListener> l) { + List<EventListener> l) { event = e; listeners = l; } private PropertyChangeEvent event; - private List<PropertyChangeListener> listeners; + private List<EventListener> listeners; } List<EventAndListeners> events = new ArrayList<EventAndListeners>(); @@ -435,8 +464,16 @@ for (EventAndListeners e : events) { if (e.listeners != null) { - for (PropertyChangeListener l : e.listeners) { - l.propertyChange(e.event); + for (EventListener l : e.listeners) { + if (l instanceof AssociationChangeListener) { + if (e.event instanceof AddAssociationEvent) { + ((AssociationChangeListener) l).elementAdded((AddAssociationEvent) e.event); + } else if (e.event instanceof RemoveAssociationEvent) { + ((AssociationChangeListener) l).elementAdded((AddAssociationEvent) e.event); + } + } else if (l instanceof PropertyChangeListener) { + ((PropertyChangeListener) l).propertyChange(e.event); + } } } } @@ -477,15 +514,15 @@ } } - private List<PropertyChangeListener> getListeners(Object element) { + private List<EventListener> getListeners(Object element) { return getListeners(element, null); } @SuppressWarnings("unchecked") - private List<PropertyChangeListener> getListeners(Object element, + private List<EventListener> getListeners(Object element, String propName) { - List<PropertyChangeListener> returnedList = - new ArrayList<PropertyChangeListener>(); + List<EventListener> returnedList = + new ArrayList<EventListener>(); synchronized (mutex) { addListeners(returnedList, element, propName, registerForElements); @@ -502,7 +539,7 @@ return returnedList.isEmpty() ? null : returnedList; } - private void addListeners(List<PropertyChangeListener> listeners, + private void addListeners(List<EventListener> listeners, Object element, String propName, Map<Object, List<Listener>> register) { List<Listener> list = register.get(element); @@ -559,10 +596,10 @@ listener.getListener().getClass().getName()); } } else { - if (!map.containsKey("")) { - map.put("", new LinkedList<String>()); + if (!map.containsKey("")) { //$NON-NLS-1$ + map.put("", new LinkedList<String>()); //$NON-NLS-1$ } - map.get("") + map.get("") //$NON-NLS-1$ .add(listener.getListener().getClass().getName()); } } Modified: trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/ModelEventPumpMDRImpl.java Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/ModelEventPumpMDRImpl.java?view=diff&pathrev=19288&r1=19287&r2=19288 ============================================================================== --- trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/ModelEventPumpMDRImpl.java (original) +++ trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/ModelEventPumpMDRImpl.java 2011-04-27 03:16:58-0700 @@ -70,8 +70,10 @@ import org.argouml.model.DeleteInstanceEvent; import org.argouml.model.InvalidElementException; import org.argouml.model.Model; +import org.argouml.model.NotImplementedException; import org.argouml.model.RemoveAssociationEvent; import org.argouml.model.UmlChangeEvent; +import org.argouml.model.UmlChangeListener; import org.netbeans.api.mdr.MDRManager; import org.netbeans.api.mdr.MDRepository; import org.netbeans.api.mdr.events.AssociationEvent; @@ -184,6 +186,15 @@ /* * @see org.argouml.model.AbstractModelEventPump#addModelEventListener(java.beans.PropertyChangeListener, + * java.lang.Object, java.lang.String[]) + */ + public void addModelEventListener(UmlChangeListener listener, + Object modelElement, String[] propertyNames) { + throw new NotImplementedException(); + } + + /* + * @see org.argouml.model.AbstractModelEventPump#addModelEventListener(java.beans.PropertyChangeListener, * java.lang.Object) */ public void addModelEventListener(PropertyChangeListener listener, @@ -211,6 +222,15 @@ /* * @see org.argouml.model.AbstractModelEventPump#removeModelEventListener(java.beans.PropertyChangeListener, + * java.lang.Object, java.lang.String[]) + */ + public void removeModelEventListener(UmlChangeListener listener, + Object modelelement, String[] propertyNames) { + throw new NotImplementedException(); + } + + /* + * @see org.argouml.model.AbstractModelEventPump#removeModelEventListener(java.beans.PropertyChangeListener, * java.lang.Object) */ public void removeModelEventListener(PropertyChangeListener listener, Modified: trunk/src/argouml-core-model/src/org/argouml/model/AbstractModelEventPump.java Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-model/src/org/argouml/model/AbstractModelEventPump.java?view=diff&pathrev=19288&r1=19287&r2=19288 ============================================================================== --- trunk/src/argouml-core-model/src/org/argouml/model/AbstractModelEventPump.java (original) +++ trunk/src/argouml-core-model/src/org/argouml/model/AbstractModelEventPump.java 2011-04-27 03:16:58-0700 @@ -72,6 +72,18 @@ /* * @see org.argouml.model.ModelEventPump#addModelEventListener( + * java.beans.PropertyChangeListener, java.lang.Object, + * java.lang.String) + */ + public void addModelEventListener(UmlChangeListener listener, + Object modelelement, String eventName) { + addModelEventListener(listener, + modelelement, + new String[] {eventName }); + } + + /* + * @see org.argouml.model.ModelEventPump#addModelEventListener( * java.beans.PropertyChangeListener, java.lang.Object) */ public abstract void addModelEventListener(PropertyChangeListener listener, @@ -101,6 +113,19 @@ /* * @see org.argouml.model.ModelEventPump#removeModelEventListener( + * java.beans.PropertyChangeListener, java.lang.Object, + * java.lang.String) + */ + public void removeModelEventListener(UmlChangeListener listener, + Object modelelement, + String eventName) { + removeModelEventListener(listener, + modelelement, + new String[] {eventName, }); + } + + /* + * @see org.argouml.model.ModelEventPump#removeModelEventListener( * java.beans.PropertyChangeListener, java.lang.Object) */ public abstract void removeModelEventListener( Added: trunk/src/argouml-core-model/src/org/argouml/model/AssociationChangeListener.java Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-model/src/org/argouml/model/AssociationChangeListener.java?view=markup&pathrev=19288 ============================================================================== --- (empty file) +++ trunk/src/argouml-core-model/src/org/argouml/model/AssociationChangeListener.java 2011-04-27 03:16:58-0700 @@ -0,0 +1,35 @@ +/* $Id: org.eclipse.jdt.ui.prefs 17993 2010-02-11 21:46:56Z linus $ + ******************************************************************************* + * Copyright (c) 2011 Contributors - see below + * 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: + * Bob Tarling + ******************************************************************************* + */ + +package org.argouml.model; + +import java.util.EventListener; + +/** + * An interface to be implemented by those classes wishing to listen for addition and removal + * of model events. + * + * @author Bob Tarling + */ +public interface AssociationChangeListener extends UmlChangeListener { + /** + * Called when model element has been added to another + * @param evt + */ + void elementAdded(AddAssociationEvent evt); + /** + * Called when model element has been removed from another + * @param evt + */ + void elementRemoved(RemoveAssociationEvent evt); +} Modified: trunk/src/argouml-core-model/src/org/argouml/model/ModelEventPump.java Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-model/src/org/argouml/model/ModelEventPump.java?view=diff&pathrev=19288&r1=19287&r2=19288 ============================================================================== --- trunk/src/argouml-core-model/src/org/argouml/model/ModelEventPump.java (original) +++ trunk/src/argouml-core-model/src/org/argouml/model/ModelEventPump.java 2011-04-27 03:16:58-0700 @@ -90,6 +90,32 @@ * @param propertyNames The array of property names the listener wishes to * receive events for */ + void addModelEventListener(UmlChangeListener listener, + Object modelelement, + String[] propertyNames); + + /** + * Adds a listener to modelevents that are fired by some given modelelement + * and that have the name in eventName.<p> + * + * @param listener The listener to add + * @param modelelement The modelelement the listener should be added too + * @param propertyName The property name the listener wishes to + * receive events for + */ + void addModelEventListener(UmlChangeListener listener, + Object modelelement, + String propertyName); + + /** + * Adds a listener to modelevents that are fired by some given modelelement + * and that have any of the names in eventNames.<p> + * + * @param listener The listener to add + * @param modelelement The modelelement the listener should be added too + * @param propertyNames The array of property names the listener wishes to + * receive events for + */ void addModelEventListener(PropertyChangeListener listener, Object modelelement, String[] propertyNames); @@ -126,6 +152,34 @@ * @param propertyNames The property names the listener no longer wishes to * receive events for */ + void removeModelEventListener(UmlChangeListener listener, + Object modelelement, + String[] propertyNames); + + /** + * Removes a listener that listens to modelevents with name + * eventName that are fired by the given modelelement.<p> + * + * @param listener The listener to remove. + * @param modelelement The modelelement that fires the events the + * listener is listening to. + * @param propertyName The property name the listener no longer wishes to + * receive events for + */ + void removeModelEventListener(UmlChangeListener listener, + Object modelelement, + String propertyName); + + /** + * Removes a listener that listens to modelevents with name + * eventNames that are fired by the given modelelement.<p> + * + * @param listener The listener to remove + * @param modelelement The modelelement that fires the events the + * listener is listening to. + * @param propertyNames The property names the listener no longer wishes to + * receive events for + */ void removeModelEventListener(PropertyChangeListener listener, Object modelelement, String[] propertyNames); Added: trunk/src/argouml-core-model/src/org/argouml/model/UmlChangeListener.java Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-model/src/org/argouml/model/UmlChangeListener.java?view=markup&pathrev=19288 ============================================================================== --- (empty file) +++ trunk/src/argouml-core-model/src/org/argouml/model/UmlChangeListener.java 2011-04-27 03:16:58-0700 @@ -0,0 +1,20 @@ +/* $Id: org.eclipse.jdt.ui.prefs 17993 2010-02-11 21:46:56Z linus $ + ******************************************************************************* + * Copyright (c) 2011 Contributors - see below + * 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: + * Bob Tarling + ******************************************************************************* + */ + +package org.argouml.model; + +import java.util.EventListener; + +public interface UmlChangeListener extends EventListener { + +} ------------------------------------------------------ http://argouml.tigris.org/ds/viewMessage.do?dsForumId=5905&dsMessageId=2724660 To unsubscribe from this discussion, e-mail: [[email protected]].
