diff gwt-client/src/main/java/org/dive4elements/river/client/shared/model/ToLoad.java @ 5838:5aa05a7a34b7

Rename modules to more fitting names.
author Sascha L. Teichmann <teichmann@intevation.de>
date Thu, 25 Apr 2013 15:23:37 +0200
parents flys-client/src/main/java/org/dive4elements/river/client/shared/model/ToLoad.java@821a02bbfb4e
children 172338b1407f
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gwt-client/src/main/java/org/dive4elements/river/client/shared/model/ToLoad.java	Thu Apr 25 15:23:37 2013 +0200
@@ -0,0 +1,119 @@
+package org.dive4elements.river.client.shared.model;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.HashMap;
+
+import java.io.Serializable;
+
+public class ToLoad implements Serializable
+{
+
+    public class StringPair {
+        public String first;
+        public String second;
+        public StringPair(String first, String second) {
+            this.first = first;
+            this.second = second;
+        }
+        public int hashCode() {
+            return first.hashCode() + second.hashCode();
+        }
+        public boolean equals(StringPair other) {
+            return (this.second.equals(other.second)) && (this.first.equals(other.first));
+        }
+    }
+    public static final String SYNTHETIC_KEY = "key-";
+
+    protected Map<String, Map<StringPair, ArtifactFilter>> artifacts;
+
+    public ToLoad() {
+        artifacts = new HashMap<String, Map<StringPair, ArtifactFilter>>();
+    }
+
+    public static final String uniqueKey(Map<?, ?> map) {
+        int idx = map.size();
+
+        String key = SYNTHETIC_KEY + idx;
+        while (map.containsKey(key)) {
+            key = SYNTHETIC_KEY + ++idx;
+        }
+        return key;
+    }
+
+    public void add(
+        String artifactName,
+        String factory,
+        String out,
+        String name,
+        String ids,
+        String displayName
+    ) {
+        if (artifactName == null) {
+            artifactName = uniqueKey(artifacts);
+        }
+
+        Map<StringPair, ArtifactFilter> artifact = artifacts.get(artifactName);
+
+        if (artifact == null) {
+            artifact = new HashMap<StringPair, ArtifactFilter>();
+            artifacts.put(artifactName, artifact);
+        }
+
+        ArtifactFilter filter = artifact.get(factory);
+        if (filter == null) {
+            filter = new ArtifactFilter(factory);
+            artifact.put(new StringPair(factory, displayName), filter);
+        }
+
+        filter.add(out, name, ids);
+    }
+
+    public boolean isEmpty() {
+        return artifacts.isEmpty();
+    }
+
+    public List<Recommendation> toRecommendations() {
+        List<Recommendation> recommendations = new ArrayList<Recommendation>();
+
+        for (Map.Entry<String, Map<StringPair, ArtifactFilter>> all:
+            artifacts.entrySet()
+        ) {
+            String masterArtifact = all.getKey();
+
+            if (masterArtifact.startsWith(SYNTHETIC_KEY)) { // system data
+                masterArtifact = null;
+            }
+
+            for (Map.Entry<StringPair, ArtifactFilter> entry:
+                all.getValue().entrySet()
+            ) {
+                StringPair pair         = entry.getKey();
+                String factory = pair.first;
+                ArtifactFilter artifactFilter = entry.getValue();
+
+                String                ids;
+                Recommendation.Filter filter;
+
+                if (masterArtifact == null) { // system data
+                    ids    = artifactFilter.collectIds();
+                    filter = null;
+                }
+                else { // user specific
+                    ids    = null;
+                    filter = artifactFilter.toFilter();
+                }
+
+                Recommendation recommendation = new Recommendation(
+                    factory, ids, masterArtifact, filter);
+                recommendation.setDisplayName(pair.second);
+
+                recommendations.add(recommendation);
+            }
+        }
+
+        return recommendations;
+    }
+}
+// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org