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: gernotbelger@9227: import java.io.Serializable; sascha@846: import java.util.ArrayList; gernotbelger@9227: import java.util.HashMap; sascha@846: import java.util.List; sascha@826: import java.util.Map; sascha@822: aheinecke@6136: import com.google.gwt.core.client.GWT; aheinecke@6136: sascha@822: public class ToLoad implements Serializable sascha@822: { gernotbelger@9227: private static class StringTriple { felix@1352: public String first; felix@1352: public String second; aheinecke@7175: public String third; gernotbelger@9227: public StringTriple(final String first, final String second, final 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() { gernotbelger@9227: return this.first.hashCode() + this.second.hashCode() + this.third.hashCode(); felix@1352: } aheinecke@7175: @Override gernotbelger@9227: public boolean equals(final Object o) { aheinecke@7175: if (!(o instanceof StringTriple)) { aheinecke@7175: return false; aheinecke@7175: } gernotbelger@9227: final StringTriple other = (StringTriple) o; gernotbelger@9227: return this.second.equals(other.second) gernotbelger@9227: && this.first.equals(other.first) gernotbelger@9227: && this.third.equals(other.third); felix@1352: } felix@1352: } sascha@826: gernotbelger@9227: private static final String SYNTHETIC_KEY = "key-"; sascha@822: gernotbelger@9227: private final Map> artifacts = new HashMap>(); gernotbelger@9227: gernotbelger@9227: public static final String uniqueKey(final 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( gernotbelger@9227: final String artifactName, gernotbelger@9227: final String factory, gernotbelger@9227: final String out, gernotbelger@9227: final String name, gernotbelger@9227: final String ids, gernotbelger@9227: final String displayName gernotbelger@9227: ) { felix@6593: add(artifactName, factory, out, name, ids, displayName, null); gernotbelger@9227: } sascha@834: sascha@831: public void add( gernotbelger@9227: String artifactName, gernotbelger@9227: final String factory, gernotbelger@9227: final String out, gernotbelger@9227: final String name, gernotbelger@9227: final String ids, gernotbelger@9227: final String displayName, gernotbelger@9227: final String targetOut gernotbelger@9227: ) { 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) { gernotbelger@9227: artifactName = uniqueKey(this.artifacts); sascha@834: } sascha@826: gernotbelger@9227: Map artifact = this.artifacts.get( gernotbelger@9227: artifactName); sascha@826: sascha@831: if (artifact == null) { aheinecke@7175: artifact = new HashMap(); gernotbelger@9227: this.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); tom@8856: artifact.put(new StringTriple( tom@8856: factory, displayName, targetOut), filter); sascha@826: } sascha@822: sascha@837: filter.add(out, name, ids); sascha@822: } sascha@822: sascha@826: public boolean isEmpty() { gernotbelger@9227: return this.artifacts.isEmpty(); sascha@822: } sascha@846: sascha@846: public List toRecommendations() { gernotbelger@9227: final List recommendations = new ArrayList(); sascha@846: gernotbelger@9227: for (final Map.Entry> all: gernotbelger@9227: this.artifacts.entrySet() gernotbelger@9227: ) { 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: gernotbelger@9227: for (final Map.Entry entry: sascha@846: all.getValue().entrySet() gernotbelger@9227: ) { gernotbelger@9227: final StringTriple triple = entry.getKey(); gernotbelger@9227: final String factory = triple.first; gernotbelger@9227: final String targetOut = triple.third; gernotbelger@9227: final 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: gernotbelger@9227: final Recommendation recommendation = new Recommendation( gernotbelger@9227: 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 :