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]].

Reply via email to