Author: bobtarling Date: 2011-05-23 04:25:42-0700 New Revision: 19486 Modified: trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/CoreHelperEUMLImpl.java trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/ModelEventPumpEUMLImpl.java trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/StateMachinesHelperEUMLImpl.java
Log: Allow vertices to fire delete events when deleted from a region Modified: trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/CoreHelperEUMLImpl.java Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/CoreHelperEUMLImpl.java?view=diff&pathrev=19486&r1=19485&r2=19486 ============================================================================== --- trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/CoreHelperEUMLImpl.java (original) +++ trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/CoreHelperEUMLImpl.java 2011-05-23 04:25:42-0700 @@ -411,6 +411,7 @@ } Element element = (Element) me; if (element.getOwner() != null) { + LOG.info("Setting ignore delete for " + element); //$NON-NLS-1$ ModelEventPumpEUMLImpl pump = (ModelEventPumpEUMLImpl) Model.getPump(); pump.addElementForDeleteEventIgnore(element); } 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=19486&r1=19485&r2=19486 ============================================================================== --- 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-05-23 04:25:42-0700 @@ -352,6 +352,7 @@ LOG.debug("event - Property: " //$NON-NLS-1$ + featureName + + " Type : " + eventType //$NON-NLS-1$ + " Old: " + oldValue //$NON-NLS-1$ + " New: " + newValue //$NON-NLS-1$ + " From: " + notifier); //$NON-NLS-1$ @@ -404,6 +405,8 @@ null, null, null), getListeners( oldValue))); + } else { + LOG.info("Not sending delete event - assume remove"); //$NON-NLS-1$ } events.add(new EventAndListeners( new RemoveAssociationEvent( Modified: trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/StateMachinesHelperEUMLImpl.java Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/StateMachinesHelperEUMLImpl.java?view=diff&pathrev=19486&r1=19485&r2=19486 ============================================================================== --- trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/StateMachinesHelperEUMLImpl.java (original) +++ trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/StateMachinesHelperEUMLImpl.java 2011-05-23 04:25:42-0700 @@ -17,6 +17,7 @@ import java.util.Collection; import java.util.List; +import org.apache.log4j.Logger; import org.argouml.model.Model; import org.argouml.model.StateMachinesHelper; import org.eclipse.uml2.uml.Classifier; @@ -32,6 +33,8 @@ */ class StateMachinesHelperEUMLImpl implements StateMachinesHelper { + private static final Logger LOG = Logger.getLogger(StateMachinesHelperEUMLImpl.class); + /** * The model implementation. */ @@ -231,6 +234,8 @@ "Expected a vertext, got a " + handle); //$NON-NLS-1$ } + Vertex vertex = (Vertex) handle; + if (region instanceof State) { List<Region> regions = ((State) region).getRegions(); if (regions.isEmpty()) { @@ -242,10 +247,20 @@ } if (region == null || region instanceof Region) { - ModelEventPumpEUMLImpl pump = - (ModelEventPumpEUMLImpl) Model.getPump(); - pump.addElementForDeleteEventIgnore((Vertex) handle); - ((Vertex) handle).setContainer((Region) region); + if (vertex.getContainer() != null && region != null) { + // If the region is changed to another region then + // we make sure that a delete event is not fired + // as a result. + LOG.info("Setting ignore delete for " + vertex); //$NON-NLS-1$ + ModelEventPumpEUMLImpl pump = + (ModelEventPumpEUMLImpl) Model.getPump(); + pump.addElementForDeleteEventIgnore((Vertex) handle); + } else { + // The only way a region is set to null is if we're deleting + // the vertex in which case we do nothing special so that + // the removal of the state triggers a delete event. + } + vertex.setContainer((Region) region); return; } ------------------------------------------------------ http://argouml.tigris.org/ds/viewMessage.do?dsForumId=5905&dsMessageId=2745873 To unsubscribe from this discussion, e-mail: [[email protected]].
