Author: b00__1
Date: 2007-08-07 07:17:21-0700
New Revision: 13262
Modified:
branches/gsoc2007/b00__1/model-euml/src/org/argouml/model/euml/ModelEventPumpEUMLImpl.java
Log:
Add the possibility to pump events when the CommandStack changes and when a ChangeCommand updates its label with new values of its objects.
Modified: branches/gsoc2007/b00__1/model-euml/src/org/argouml/model/euml/ModelEventPumpEUMLImpl.java
Url: http://argouml.tigris.org/source/browse/argouml/branches/gsoc2007/b00__1/model-euml/src/org/argouml/model/euml/ModelEventPumpEUMLImpl.java?view=diff&rev=13262&p1=branches/gsoc2007/b00__1/model-euml/src/org/argouml/model/euml/ModelEventPumpEUMLImpl.java&p2=branches/gsoc2007/b00__1/model-euml/src/org/argouml/model/euml/ModelEventPumpEUMLImpl.java&r1=13261&r2=13262
==============================================================================
--- branches/gsoc2007/b00__1/model-euml/src/org/argouml/model/euml/ModelEventPumpEUMLImpl.java (original)
+++ branches/gsoc2007/b00__1/model-euml/src/org/argouml/model/euml/ModelEventPumpEUMLImpl.java 2007-08-07 07:17:21-0700
@@ -26,8 +26,10 @@
package org.argouml.model.euml;
+import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.ArrayList;
+import java.util.EventObject;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
@@ -35,15 +37,17 @@
import java.util.List;
import java.util.Map;
import java.util.Set;
+
import org.apache.log4j.Logger;
import org.argouml.model.AbstractModelEventPump;
import org.argouml.model.AddAssociationEvent;
import org.argouml.model.AttributeChangeEvent;
import org.argouml.model.DeleteInstanceEvent;
import org.argouml.model.RemoveAssociationEvent;
-import org.argouml.model.UmlChangeEvent;
+import org.eclipse.emf.common.command.CommandStackListener;
import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.common.notify.Notifier;
+import org.eclipse.emf.common.notify.impl.NotificationImpl;
import org.eclipse.emf.ecore.ENamedElement;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EReference;
@@ -103,40 +107,52 @@
*/
private EUMLModelImplementation modelImpl;
- private RootContainerAdapter rootContainerAdapter =
- new RootContainerAdapter(this);
+ private RootContainerAdapter rootContainerAdapter = new RootContainerAdapter(
+ this);
// Access should be fast
- private Map<Object, List<Listener>> registerForElements =
- new HashMap<Object, List<Listener>>();
+ private Map<Object, List<Listener>> registerForElements = new HashMap<Object, List<Listener>>();
// Iteration should be fast
- private Map<Object, List<Listener>> registerForClasses =
- new LinkedHashMap<Object, List<Listener>>();
+ private Map<Object, List<Listener>> registerForClasses = new LinkedHashMap<Object, List<Listener>>();
private Object mutex;
-
+
private Logger LOG = Logger.getLogger(ModelEventPumpEUMLImpl.class);
-
+
+ public static final int COMMAND_STACK_UPDATE = Notification.EVENT_TYPE_COUNT + 1;
+
+ public static final String COMMAND_STACK_UPDATE_STRING = "COMMAND_STACK_UPDATE"; //$NON-NLS-1$
+
/**
* Constructor.
*
* @param implementation
- * The ModelImplementation.
+ * The ModelImplementation.
*/
public ModelEventPumpEUMLImpl(EUMLModelImplementation implementation) {
modelImpl = implementation;
mutex = this;
+ implementation.getEditingDomain().getCommandStack().addCommandStackListener(
+ new CommandStackListener() {
+
+ public void commandStackChanged(EventObject event) {
+ notifyChanged(new NotificationImpl(
+ COMMAND_STACK_UPDATE, false, false));
+ }
+
+ });
}
/**
* Setter for the root container
+ *
* @param container
*/
public void setRootContainer(Notifier container) {
rootContainerAdapter.setRootContainer(container);
}
-
+
public RootContainerAdapter getRootContainer() {
return rootContainerAdapter;
}
@@ -153,7 +169,8 @@
public void addModelEventListener(PropertyChangeListener listener,
Object modelelement, String[] propertyNames) {
- if (!(modelelement instanceof EObject)) {
+ if (!(modelelement instanceof EObject)
+ && !(modelelement instanceof String && modelelement.equals(COMMAND_STACK_UPDATE_STRING))) {
throw new IllegalArgumentException(
"The modelelement must be instance of EObject."); //$NON-NLS-1$
}
@@ -163,7 +180,7 @@
public void addModelEventListener(PropertyChangeListener listener,
Object modelelement) {
- addModelEventListener(listener, modelelement, (String []) null);
+ addModelEventListener(listener, modelelement, (String[]) null);
}
private void registerListener(Object notifier,
@@ -205,8 +222,7 @@
public void removeClassModelEventListener(PropertyChangeListener listener,
Object modelClass, String[] propertyNames) {
- if (!(modelClass instanceof Class && EObject.class
- .isAssignableFrom((Class) modelClass))) {
+ if (!(modelClass instanceof Class && EObject.class.isAssignableFrom((Class) modelClass))) {
throw new IllegalArgumentException();
}
unregisterListener(
@@ -215,7 +231,8 @@
public void removeModelEventListener(PropertyChangeListener listener,
Object modelelement, String[] propertyNames) {
- if (!(modelelement instanceof EObject)) {
+ if (!(modelelement instanceof EObject)
+ && !(modelelement instanceof String && modelelement.equals(COMMAND_STACK_UPDATE_STRING))) {
throw new IllegalArgumentException();
}
unregisterListener(
@@ -224,7 +241,7 @@
public void removeModelEventListener(PropertyChangeListener listener,
Object modelelement) {
- removeModelEventListener(listener, modelelement, (String []) null);
+ removeModelEventListener(listener, modelelement, (String[]) null);
}
private void unregisterListener(Object notifier,
@@ -265,13 +282,13 @@
}
class EventAndListeners {
- public EventAndListeners(UmlChangeEvent e,
+ public EventAndListeners(PropertyChangeEvent e,
List<PropertyChangeListener> l) {
event = e;
listeners = l;
}
- UmlChangeEvent event;
+ PropertyChangeEvent event;
List<PropertyChangeListener> listeners;
}
@@ -362,6 +379,11 @@
}
}
}
+ } else if (notification.getEventType() == COMMAND_STACK_UPDATE) {
+ events.add(new EventAndListeners(
+ new PropertyChangeEvent(
+ this, COMMAND_STACK_UPDATE_STRING, false, false),
+ getListeners(COMMAND_STACK_UPDATE_STRING)));
}
for (EventAndListeners e : events) {
@@ -372,11 +394,11 @@
}
}
}
-
+
private List<PropertyChangeListener> getListeners(Object element) {
return getListeners(element, null);
}
-
+
@SuppressWarnings("unchecked")
private List<PropertyChangeListener> getListeners(Object element,
String propName) {
@@ -396,7 +418,7 @@
}
return returnedList.isEmpty() ? null : returnedList;
}
-
+
private void addListeners(List<PropertyChangeListener> listeners,
Object element, String propName,
Map<Object, List<Listener>> register) {
@@ -410,7 +432,7 @@
}
}
}
-
+
public void startPumpingEvents() {
rootContainerAdapter.setDeliverEvents(true);
}
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.