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: sascha@822: public class ToLoad implements Serializable sascha@822: { felix@1352: felix@1352: public class StringPair { felix@1352: public String first; felix@1352: public String second; felix@1352: public StringPair(String first, String second) { felix@1352: this.first = first; felix@1352: this.second = second; felix@1352: } felix@1352: public int hashCode() { felix@1352: return first.hashCode() + second.hashCode(); felix@1352: } felix@1352: public boolean equals(StringPair other) { felix@1352: return (this.second.equals(other.second)) && (this.first.equals(other.first)); felix@1352: } felix@1352: } sascha@846: public static final String SYNTHETIC_KEY = "key-"; sascha@846: felix@1352: protected Map> artifacts; sascha@826: sascha@831: public ToLoad() { felix@1352: 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: } 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, felix@1352: String displayName sascha@831: ) { sascha@834: if (artifactName == null) { sascha@834: artifactName = uniqueKey(artifacts); sascha@834: } sascha@826: felix@1352: Map artifact = artifacts.get(artifactName); sascha@826: sascha@831: if (artifact == null) { felix@1352: 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); felix@1352: artifact.put(new StringPair(factory, displayName), 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: felix@1352: 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: felix@1352: for (Map.Entry entry: sascha@846: all.getValue().entrySet() sascha@846: ) { felix@1352: StringPair pair = entry.getKey(); felix@1352: String factory = pair.first; 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( sascha@846: factory, ids, masterArtifact, filter); felix@1352: recommendation.setDisplayName(pair.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 :