Mercurial > dive4elements > river
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 :