diff flys-artifacts/src/main/java/de/intevation/flys/artifacts/FLYSArtifact.java @ 2606:619f6dfec901

#460 Fixed duplicated Outputs in DESCRIBE documents. flys-artifacts/trunk@4186 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Fri, 30 Mar 2012 09:38:29 +0000
parents a22e0cb6eace
children c553d4fa3957
line wrap: on
line diff
--- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/FLYSArtifact.java	Thu Mar 29 11:09:26 2012 +0000
+++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/FLYSArtifact.java	Fri Mar 30 09:38:29 2012 +0000
@@ -264,10 +264,12 @@
         facets           = flys.cloneFacets();
         // Do not clone filter facets!
 
-        List<String> stateIds = getPreviousStateIds();
-        stateIds.add(getCurrentStateId());
+        ArrayList<String> stateIds     = (ArrayList<String>) getPreviousStateIds();
+        ArrayList<String> toInitialize = (ArrayList<String>) stateIds.clone();
 
-        for (String stateId: stateIds) {
+        toInitialize.add(getCurrentStateId());
+
+        for (String stateId: toInitialize) {
             State state = getState(context, stateId);
 
             if (state != null) {
@@ -393,16 +395,19 @@
 
         Element result = ec.create("result");
 
-        String targetState = XMLUtils.xpathString(
+        String currentStateId = getCurrentStateId();
+        String targetState    = XMLUtils.xpathString(
             target, XPATH_ADVANCE_TARGET, ArtifactNamespaceContext.INSTANCE);
 
         logger.info("FLYSArtifact.advance() to '" + targetState + "'");
 
-        if (isStateReachable(targetState, context)) {
+        if (!currentStateId.equals(targetState)
+            && isStateReachable(targetState, context))
+        {
             logger.info("Advance: Step forward");
 
             List<String> prev = getPreviousStateIds();
-            prev.add(getCurrentStateId());
+            prev.add(currentStateId);
 
             setCurrentStateId(targetState);
 
@@ -528,7 +533,9 @@
      * @return #getPreviousStateIds() + #getCurrentStateId()
      */
     public List<String> getStateHistoryIds() {
-        List<String> allIds = getPreviousStateIds();
+        ArrayList<String> prevIds = (ArrayList) getPreviousStateIds();
+        ArrayList<String> allIds  = (ArrayList) prevIds.clone();
+
         allIds.add(getCurrentStateId());
         return allIds;
     }
@@ -1238,13 +1245,15 @@
     public void endOfLife(Object context) {
         logger.info("FLYSArtifact.endOfLife: " + identifier());
 
-        List<String> ids = getPreviousStateIds();
-        ids.add(getCurrentStateId());
+        ArrayList<String> ids       = (ArrayList<String>) getPreviousStateIds();
+        ArrayList<String> toDestroy = (ArrayList<String>) ids.clone();
 
-        destroyStates(ids, context);
+        toDestroy.add(getCurrentStateId());
+
+        destroyStates(toDestroy, context);
     }
-    
-    
+
+
     /**
      * Determines Facets initial disposition regarding activity (think of
      * selection in Client ThemeList GUI). This will be checked one time

http://dive4elements.wald.intevation.org