teichmann@5861: /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde teichmann@5861: * Software engineering by Intevation GmbH teichmann@5861: * teichmann@5993: * This file is Free Software under the GNU AGPL (>=v3) teichmann@5861: * and comes with ABSOLUTELY NO WARRANTY! Check out the teichmann@5993: * documentation coming with Dive4Elements River for details. teichmann@5861: */ teichmann@5861: teichmann@5835: package org.dive4elements.river.client.shared.model; sascha@822: sascha@846: import java.util.ArrayList; sascha@846: import java.util.List; sascha@826: import java.util.Map; sascha@826: import java.util.HashMap; sascha@826: sascha@822: import java.io.Serializable; sascha@822: aheinecke@6136: import com.google.gwt.core.client.GWT; aheinecke@6136: sascha@822: public class ToLoad implements Serializable sascha@822: { felix@1352: felix@6593: /** Two strings. */ aheinecke@7175: public static class StringTriple { felix@1352: public String first; felix@1352: public String second; aheinecke@7175: public String third; aheinecke@7175: public StringTriple(String first, String second, String third) { felix@1352: this.first = first; felix@1352: this.second = second; aheinecke@7175: this.third = third; felix@1352: } aheinecke@7175: @Override felix@1352: public int hashCode() { aheinecke@7175: return first.hashCode() + second.hashCode() + third.hashCode(); felix@1352: } aheinecke@7175: @Override aheinecke@7175: public boolean equals(Object o) { aheinecke@7175: if (!(o instanceof StringTriple)) { aheinecke@7175: return false; aheinecke@7175: } aheinecke@7175: StringTriple other = (StringTriple) o; aheinecke@7175: return second.equals(other.second) && first.equals(other.first) && third.equals(other.third); felix@1352: } felix@1352: } sascha@846: public static final String SYNTHETIC_KEY = "key-"; sascha@846: aheinecke@7175: protected Map> artifacts; sascha@826: sascha@831: public ToLoad() { aheinecke@7175: artifacts = new HashMap>(); sascha@822: } sascha@822: sascha@834: public static final String uniqueKey(Map map) { sascha@834: int idx = map.size(); sascha@834: sascha@846: String key = SYNTHETIC_KEY + idx; sascha@834: while (map.containsKey(key)) { sascha@846: key = SYNTHETIC_KEY + ++idx; sascha@834: } sascha@834: return key; sascha@834: } felix@6593: felix@6593: public void add( felix@6593: String artifactName, felix@6593: String factory, felix@6593: String out, felix@6593: String name, felix@6593: String ids, felix@6593: String displayName felix@6593: ) { felix@6593: add(artifactName, factory, out, name, ids, displayName, null); felix@6593: } sascha@834: sascha@831: public void add( sascha@831: String artifactName, sascha@831: String factory, sascha@831: String out, sascha@831: String name, felix@1352: String ids, aheinecke@6136: String displayName, aheinecke@6136: String targetOut sascha@831: ) { aheinecke@6136: GWT.log("Adding artifact: " + artifactName + " Factory: " + factory + aheinecke@6136: " Out: " + out + " Name: " + name + " Ids: " + ids + aheinecke@6136: " Display Name: " + displayName + " Target Out: " + targetOut); aheinecke@6136: sascha@834: if (artifactName == null) { sascha@834: artifactName = uniqueKey(artifacts); sascha@834: } sascha@826: aheinecke@7175: Map artifact = artifacts.get(artifactName); sascha@826: sascha@831: if (artifact == null) { aheinecke@7175: artifact = new HashMap(); sascha@831: artifacts.put(artifactName, artifact); sascha@826: } sascha@826: sascha@831: ArtifactFilter filter = artifact.get(factory); sascha@831: if (filter == null) { sascha@831: filter = new ArtifactFilter(factory); aheinecke@7175: artifact.put(new StringTriple(factory, displayName, targetOut), filter); sascha@826: } sascha@822: sascha@837: filter.add(out, name, ids); sascha@822: } sascha@822: sascha@826: public boolean isEmpty() { sascha@831: return artifacts.isEmpty(); sascha@822: } sascha@846: sascha@846: public List toRecommendations() { sascha@846: List recommendations = new ArrayList(); sascha@846: aheinecke@7175: for (Map.Entry> all: sascha@846: artifacts.entrySet() sascha@846: ) { sascha@846: String masterArtifact = all.getKey(); sascha@846: sascha@846: if (masterArtifact.startsWith(SYNTHETIC_KEY)) { // system data sascha@846: masterArtifact = null; sascha@846: } sascha@846: aheinecke@7175: for (Map.Entry entry: sascha@846: all.getValue().entrySet() sascha@846: ) { aheinecke@7175: StringTriple triple = entry.getKey(); aheinecke@7175: String factory = triple.first; aheinecke@7175: String targetOut = triple.third; sascha@846: ArtifactFilter artifactFilter = entry.getValue(); sascha@846: sascha@846: String ids; sascha@846: Recommendation.Filter filter; sascha@846: sascha@846: if (masterArtifact == null) { // system data sascha@846: ids = artifactFilter.collectIds(); sascha@846: filter = null; sascha@846: } sascha@846: else { // user specific sascha@846: ids = null; sascha@846: filter = artifactFilter.toFilter(); sascha@846: } sascha@846: sascha@846: Recommendation recommendation = new Recommendation( aheinecke@7175: factory, ids, masterArtifact, filter, targetOut); aheinecke@7175: recommendation.setDisplayName(triple.second); sascha@846: sascha@846: recommendations.add(recommendation); sascha@846: } sascha@846: } sascha@846: sascha@846: return recommendations; sascha@846: } sascha@822: } sascha@822: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :