gernotbelger@9127: /** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde gernotbelger@9127: * Software engineering by gernotbelger@9127: * Björnsen Beratende Ingenieure GmbH gernotbelger@9127: * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt gernotbelger@9127: * gernotbelger@9127: * This file is Free Software under the GNU AGPL (>=v3) gernotbelger@9127: * and comes with ABSOLUTELY NO WARRANTY! Check out the gernotbelger@9127: * documentation coming with Dive4Elements River for details. gernotbelger@9127: */ gernotbelger@9127: package test; gernotbelger@9127: gernotbelger@9148: import java.util.ArrayList; gernotbelger@9148: import java.util.HashMap; gernotbelger@9148: gernotbelger@9148: import org.dive4elements.artifacts.httpclient.exceptions.ConnectionException; gernotbelger@9148: import org.dive4elements.river.client.client.ui.NilDatacageTwinPanelInfo; gernotbelger@9148: import org.dive4elements.river.client.client.ui.RecommandationUtils; gernotbelger@9148: import org.dive4elements.river.client.server.ArtifactHelper; gernotbelger@9148: import org.dive4elements.river.client.server.CollectionHelper; gernotbelger@9148: import org.dive4elements.river.client.server.LoadArtifactServiceImpl; gernotbelger@9148: import org.dive4elements.river.client.shared.exceptions.ServerException; gernotbelger@9148: import org.dive4elements.river.client.shared.model.Artifact; gernotbelger@9148: import org.dive4elements.river.client.shared.model.Collection; gernotbelger@9148: import org.dive4elements.river.client.shared.model.Recommendation; gernotbelger@9148: gernotbelger@9127: /** gernotbelger@9127: * @author Domenico Nardi Tironi gernotbelger@9127: * gernotbelger@9127: */ gernotbelger@9127: public class SimpleRecommendation { gernotbelger@9127: gernotbelger@9127: // entspricht den Bezeichnungen im Datacage-Export gernotbelger@9127: private final String factory; gernotbelger@9127: private final String ids; gernotbelger@9127: private final String target; gernotbelger@9148: private String displayName; gernotbelger@9127: gernotbelger@9127: public SimpleRecommendation(final String factory, final String ids, final String target) { gernotbelger@9127: this.factory = factory; gernotbelger@9127: this.ids = ids; gernotbelger@9127: this.target = target; gernotbelger@9127: } gernotbelger@9127: gernotbelger@9148: public SimpleRecommendation(final String factory, final String ids, final String target, final String displayName) { gernotbelger@9148: this(factory, ids, target); gernotbelger@9148: this.displayName = displayName; gernotbelger@9148: } gernotbelger@9148: gernotbelger@9127: public String getIds() { gernotbelger@9127: return this.ids; gernotbelger@9127: } gernotbelger@9127: gernotbelger@9127: public String getTarget() { gernotbelger@9127: return this.target; gernotbelger@9127: } gernotbelger@9127: gernotbelger@9127: public String getFactory() { gernotbelger@9127: return this.factory; gernotbelger@9127: } gernotbelger@9127: gernotbelger@9148: private String getDisplayName() { gernotbelger@9148: return this.displayName; gernotbelger@9148: } gernotbelger@9148: gernotbelger@9148: public final String getRecommendationPairString(final SimpleRecommendation rec2, final Collection collection, final String serverUrl, final String locale) gernotbelger@9148: throws ConnectionException, ServerException { gernotbelger@9148: final Recommendation recom1 = new Recommendation(this.getFactory(), this.getIds(), this.getTarget()); gernotbelger@9148: recom1.setDisplayName(this.displayName); gernotbelger@9148: final Recommendation recom2 = new Recommendation(rec2.getFactory(), rec2.getIds(), rec2.getTarget()); gernotbelger@9148: recom2.setDisplayName(rec2.getDisplayName()); gernotbelger@9148: final Artifact[] artifacts = loadMany(new Recommendation[] { recom1, recom2 }, null, collection, serverUrl, locale); gernotbelger@9227: final String rec1String = RecommandationUtils.createDataString(artifacts[0].getUuid(), recom1, new NilDatacageTwinPanelInfo(null, "xxxx")); gernotbelger@9227: final String rec2String = RecommandationUtils.createDataString(artifacts[1].getUuid(), recom2, new NilDatacageTwinPanelInfo(null, "xxxx")); gernotbelger@9148: final String combinedIdNeu = rec1String + "#" + rec2String; gernotbelger@9148: return combinedIdNeu; gernotbelger@9148: } gernotbelger@9148: gernotbelger@9148: private final Artifact[] loadMany(final Recommendation[] recoms, final String factory, final Collection collection, final String serverUrl, gernotbelger@9148: final String locale) throws ServerException, ConnectionException { gernotbelger@9148: final ArrayList artifacts = new ArrayList(); gernotbelger@9148: final HashMap cloneMap = new HashMap(); gernotbelger@9148: gernotbelger@9148: for (final Recommendation recom : recoms) { gernotbelger@9148: gernotbelger@9148: final Artifact prevClone = cloneMap.get(recom); gernotbelger@9148: if (prevClone != null) { gernotbelger@9148: gernotbelger@9148: artifacts.add(prevClone); gernotbelger@9148: } else { gernotbelger@9148: // Not already cloned. gernotbelger@9148: final String realFactory = factory != null ? factory : recom.getFactory(); gernotbelger@9148: gernotbelger@9148: final Artifact clone = ArtifactHelper.createArtifact(serverUrl, locale, realFactory, recom); gernotbelger@9148: gernotbelger@9148: if (clone != null) { gernotbelger@9148: final Collection c = CollectionHelper.addArtifact(collection, clone, serverUrl, locale); gernotbelger@9148: gernotbelger@9148: if (c != null) { gernotbelger@9148: artifacts.add(clone); gernotbelger@9148: // Remember we cloned a recommendation like this. gernotbelger@9148: cloneMap.put(recom, clone); gernotbelger@9148: } else { gernotbelger@9148: throw new ServerException(LoadArtifactServiceImpl.ERROR_LOAD_ARTIFACT); gernotbelger@9148: } gernotbelger@9148: } gernotbelger@9148: } gernotbelger@9148: } gernotbelger@9148: gernotbelger@9227: return artifacts.toArray(new Artifact[artifacts.size()]); gernotbelger@9148: } gernotbelger@9227: }