diff flys-client/src/main/java/de/intevation/flys/client/client/ui/DatacageTwinPanel.java @ 1304:18b0414bde44

Allow reparameterization of W-Diffs. flys-client/trunk@2938 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Felix Wolfsteller <felix.wolfsteller@intevation.de>
date Tue, 11 Oct 2011 11:59:57 +0000
parents b0ed67cb5197
children 014fc183c640
line wrap: on
line diff
--- a/flys-client/src/main/java/de/intevation/flys/client/client/ui/DatacageTwinPanel.java	Tue Oct 11 11:50:58 2011 +0000
+++ b/flys-client/src/main/java/de/intevation/flys/client/client/ui/DatacageTwinPanel.java	Tue Oct 11 11:59:57 2011 +0000
@@ -130,6 +130,9 @@
             Recommendation subtrahend = createRecommendationFromString(recs[i+1]);
             RecommendationPairRecord pr = new RecommendationPairRecord(
                "A", minuend, "B", subtrahend);
+            // This Recommendation Pair comes from the data string and was thus
+            // already cloned.
+            pr.setIsAlreadyLoaded(true);
             this.differencesList.addData(pr);
         }
     }
@@ -227,18 +230,29 @@
         Config config = Config.getInstance();
         ListGridRecord[] records = differencesList.getRecords();
 
-        Set<Recommendation> ar = new HashSet<Recommendation>();
+        Set<Recommendation> ar  = new HashSet<Recommendation>();
+        Set<Recommendation> all = new HashSet<Recommendation>();
         for (ListGridRecord record : records) {
             RecommendationPairRecord r =
                 (RecommendationPairRecord) record;
-            ar.add(r.getFirst());
-            ar.add(r.getSecond());
+            // Do not add "old" recommendations.
+            if (!r.isAlreadyLoaded()) {
+                GWT.log("One not yet loaded.");
+                ar.add(r.getFirst());
+                ar.add(r.getSecond());
+            }
+            else {
+                GWT.log("One already loaded.");
+                all.add(r.getFirst());
+                all.add(r.getSecond());
+            }
         }
 
-        final Recommendation[] rs = ar.toArray(new Recommendation[ar.size()]);
+        final Recommendation[] toClone = ar.toArray(new Recommendation[ar.size()]);
+        final Recommendation[] toUse   = all.toArray(new Recommendation[all.size()]);
         loadArtifactService.loadMany(
               this.collection,
-              rs,
+              toClone,
               "waterlevel",
               config.getServerUrl(),
               config.getLocale(),
@@ -247,20 +261,24 @@
                     GWT.log("Failure of cloning with waterlevelfactory!");
                 }
                 public void onSuccess(Artifact[] artifacts) {
-                    GWT.log("Success in cloning with watelevelfactory!");
+                    GWT.log("Success in cloning ("+toClone.length+") with watelevelfactory!");
 
                     fireStepForwardEvent(new StepForwardEvent(
-                        getData(rs, artifacts)));
+                        getData(toClone, artifacts, toUse)));
                 }
               } );
     }
 
 
-    protected Data[] getData(Recommendation[] rs, Artifact[] newArtifacts) {
+    protected Data[] getData(
+            Recommendation[] newRecommendations,
+            Artifact[] newArtifacts,
+            Recommendation[] oldRecommendations)
+    {
         // Construct string with info about selections.
         String dataItemString = "";
-        for (int i = 0; i < rs.length; i++) {
-            Recommendation r = rs[i];
+        for (int i = 0; i < newRecommendations.length; i++) {
+            Recommendation r = newRecommendations[i];
             Artifact newArtifact = newArtifacts[i];
             String uuid = newArtifact.getUuid();
             r.setMasterArtifact(uuid);
@@ -268,6 +286,15 @@
     
             dataItemString += createDataString(uuid, r.getFilter());
         }
+
+        for (int i = 0; i < oldRecommendations.length; i++) {
+            Recommendation r = oldRecommendations[i];
+            String uuid = r.getIDs();
+            if (dataItemString.length() > 0) dataItemString += "#";
+    
+            dataItemString += createDataString(uuid, r.getFilter());
+        }
+
         DataItem item = new DefaultDataItem(dataName, dataName, dataItemString);
         return new Data[] { new DefaultData(
             dataName, null, null, new DataItem[] {item}) };

http://dive4elements.wald.intevation.org