diff flys-client/src/main/java/de/intevation/flys/client/server/LoadArtifactServiceImpl.java @ 1307:489e6a82fe84

Partial fix for flys/issue304 (Erweiterte Funktionen W-Differenzen). flys-client/trunk@2941 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Felix Wolfsteller <felix.wolfsteller@intevation.de>
date Wed, 12 Oct 2011 06:59:42 +0000
parents 2ce5d7ac9e60
children a3c04eb326f3
line wrap: on
line diff
--- a/flys-client/src/main/java/de/intevation/flys/client/server/LoadArtifactServiceImpl.java	Tue Oct 11 13:25:18 2011 +0000
+++ b/flys-client/src/main/java/de/intevation/flys/client/server/LoadArtifactServiceImpl.java	Wed Oct 12 06:59:42 2011 +0000
@@ -1,6 +1,7 @@
 package de.intevation.flys.client.server;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 
 import de.intevation.flys.client.shared.exceptions.ServerException;
 import de.intevation.flys.client.shared.model.Artifact;
@@ -53,11 +54,13 @@
 
 
     /**
-     * Clone one or more artifacts and add it to a collection.
+     * Clone one or more artifacts and add it to a collection, avoid duplicates.
      *
      * @param parent Collection where clones will be added to.
      * @param recommendations definitions of source of clone.
      * @param factory name of factory to use when cloning artifacts.
+     * @return cloned artifacts (same artifact might be contained multiple
+     *         times).
      */
     public Artifact[] loadMany(
         Collection       parent,
@@ -67,32 +70,46 @@
         String           locale
     )
     throws ServerException {
-        System.out.println("LoadArtifactServiceImpl.loadMany: "
-            + recoms[0].getMasterArtifact());
+        System.out.println("LoadArtifactServiceImpl.loadMany");
         ArrayList<Artifact> artifacts = new ArrayList<Artifact>();
+        HashMap<Recommendation, Artifact> cloneMap =
+            new HashMap<Recommendation, Artifact>();
 
         // TODO Respect the index of what to clone.
 
-        // 1) Clone the Artifacts specified in >>recom<<
+        // 1) Clone the Artifacts specified in >>recoms<<
         for (Recommendation recom : recoms) {
-            Artifact clone = ArtifactHelper.createArtifact(
-                url, locale, factory, recom);
-    
-            if (clone != null) {
-                System.out.println("Successfully create Artifact Clone. Add now!");
-                Collection c = CollectionHelper.addArtifact(
-                    parent, clone, url, locale);
-    
-                if (c != null) {
-                    System.out.println("Successfully added Clone to Collection.");
-    
-                    artifacts.add(clone);
+            // Do not do two clones of two identical recommendations.
+            Artifact prevClone = cloneMap.get(recom);
+            if (prevClone != null) {
+                // Already cloned a recommendation like this.
+                System.out.println("LoadArtifactServiceImpl: Avoid reclones, "
+                    + "clone already exists.");
+                artifacts.add(prevClone);
+            }
+            else {
+                // Not already cloned.
+                Artifact clone = ArtifactHelper.createArtifact(
+                    url, locale, factory, recom);
+        
+                if (clone != null) {
+                    System.out.println("LoadArtifactServiceImple: Successfully "
+                        + "loaded Artifact Clone.");
+                    Collection c = CollectionHelper.addArtifact(
+                        parent, clone, url, locale);
+        
+                    if (c != null) {
+                        artifacts.add(clone);
+                        // Remember we cloned a recommendation like this.
+                        cloneMap.put(recom, clone);
+                    }
+                    else {
+                        throw new ServerException(ERROR_LOAD_ARTIFACT);
+                    }
                 }
             }
         }
         return artifacts.toArray(new Artifact[artifacts.size()]);
-
-        //throw new ServerException(ERROR_LOAD_ARTIFACT);
     }
 }
 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org