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]].
lmpx.com only provides a reader for public news (NNTP) servers. It is not
affiliated with the servers or forums shown here and is not responsible for
the content of articles, which is written by their respective authors.