gernotbelger@9566: /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde gernotbelger@9566: * Software engineering by Intevation GmbH gernotbelger@9566: * gernotbelger@9566: * This file is Free Software under the GNU AGPL (>=v3) gernotbelger@9566: * and comes with ABSOLUTELY NO WARRANTY! Check out the gernotbelger@9566: * documentation coming with Dive4Elements River for details. gernotbelger@9566: */ gernotbelger@9566: gernotbelger@9566: package org.dive4elements.river.client.shared.model; gernotbelger@9566: gernotbelger@9566: import java.io.Serializable; gernotbelger@9566: import java.util.HashMap; gernotbelger@9566: import java.util.List; gernotbelger@9566: import java.util.Map; gernotbelger@9566: gernotbelger@9566: /** gernotbelger@9566: * Information bundle to let client create/clone an artifact with facets. gernotbelger@9566: * gernotbelger@9566: * @author Ingo Weinzierl gernotbelger@9566: */ gernotbelger@9566: public class Recommendation implements Serializable { gernotbelger@9566: gernotbelger@9566: private static final long serialVersionUID = 1L; gernotbelger@9566: gernotbelger@9566: /** Index and name of a facet. */ gernotbelger@9566: public static class Facet implements Serializable { gernotbelger@9566: gernotbelger@9566: private static final long serialVersionUID = 1L; gernotbelger@9566: gernotbelger@9566: /** Facet name. */ gernotbelger@9566: protected String name; gernotbelger@9566: gernotbelger@9566: /** Facet index. */ gernotbelger@9566: protected String index; gernotbelger@9566: gernotbelger@9566: public Facet() { gernotbelger@9566: } gernotbelger@9566: gernotbelger@9566: public Facet(final String name, final String index) { gernotbelger@9566: this.name = name; gernotbelger@9566: this.index = index; gernotbelger@9566: } gernotbelger@9566: gernotbelger@9566: public String getName() { gernotbelger@9566: return this.name; gernotbelger@9566: } gernotbelger@9566: gernotbelger@9566: public String getIndex() { gernotbelger@9566: return this.index; gernotbelger@9566: } gernotbelger@9566: gernotbelger@9566: @Override gernotbelger@9566: public int hashCode() { gernotbelger@9566: int hash = 0; gernotbelger@9566: if (getName() != null) { gernotbelger@9566: hash += getName().hashCode(); gernotbelger@9566: } gernotbelger@9566: if (getIndex() != null) { gernotbelger@9566: hash += getIndex().hashCode(); gernotbelger@9566: } gernotbelger@9566: return hash; gernotbelger@9566: } gernotbelger@9566: gernotbelger@9566: @Override gernotbelger@9566: public boolean equals(final Object other) { gernotbelger@9566: if (!(other instanceof Facet) || other == null) { gernotbelger@9566: return false; gernotbelger@9566: } gernotbelger@9566: final Facet facet = (Facet) other; gernotbelger@9566: return (same(facet.getIndex(), this.getIndex())) && (same(facet.getName(), this.getName())); gernotbelger@9566: } gernotbelger@9566: } // class Facet gernotbelger@9566: gernotbelger@9566: /** Mapping of outnames to Facet-Lists. */ gernotbelger@9566: public static class Filter implements Serializable { gernotbelger@9566: gernotbelger@9566: protected Map> outs; gernotbelger@9566: gernotbelger@9566: public Filter() { gernotbelger@9566: this.outs = new HashMap>(); gernotbelger@9566: } gernotbelger@9566: gernotbelger@9566: public void add(final String out, final List facets) { gernotbelger@9566: this.outs.put(out, facets); gernotbelger@9566: } gernotbelger@9566: gernotbelger@9566: public Map> getOuts() { gernotbelger@9566: return this.outs; gernotbelger@9566: } gernotbelger@9566: gernotbelger@9566: @Override gernotbelger@9566: public int hashCode() { gernotbelger@9566: if (getOuts() != null) { gernotbelger@9566: return getOuts().hashCode(); gernotbelger@9566: } gernotbelger@9566: return 0; gernotbelger@9566: } gernotbelger@9566: gernotbelger@9566: @Override gernotbelger@9566: public boolean equals(final Object other) { gernotbelger@9566: if (!(other instanceof Filter) || other == null) { gernotbelger@9566: return false; gernotbelger@9566: } gernotbelger@9566: final Filter filter = (Filter) other; gernotbelger@9566: return Recommendation.same(filter.getOuts(), this.getOuts()); gernotbelger@9566: } gernotbelger@9566: } // class Filter gernotbelger@9566: gernotbelger@9566: /** Factory to speak to when creating/cloning. */ gernotbelger@9566: protected String factory; gernotbelger@9566: /** Sometimes database ids, sometimes other freeform text. */ gernotbelger@9566: protected String ids; gernotbelger@9566: /** Artifacts uuid that should serve as master artifact. */ gernotbelger@9566: protected String masterArtifact; gernotbelger@9566: /** Optional facet filter. */ gernotbelger@9566: protected Filter filter; gernotbelger@9566: /** The out this Artifact should be added to **/ gernotbelger@9566: protected String targetOut; gernotbelger@9566: gernotbelger@9566: protected String displayName = null; gernotbelger@9566: gernotbelger@9566: public Recommendation() { gernotbelger@9566: } gernotbelger@9566: gernotbelger@9566: public Recommendation(final String factory, final String ids) { gernotbelger@9566: this(factory, ids, null, null); gernotbelger@9566: } gernotbelger@9566: gernotbelger@9566: public Recommendation(final String factory, final String ids, final String targetOut) { gernotbelger@9566: this(factory, ids, null, null, targetOut); gernotbelger@9566: } gernotbelger@9566: gernotbelger@9566: public Recommendation(final String factory, final String ids, final String masterArtifact, final Filter filter) { gernotbelger@9566: this(factory, ids, masterArtifact, filter, null); gernotbelger@9566: } gernotbelger@9566: gernotbelger@9566: public Recommendation(final String factory, final String ids, final String masterArtifact, final Filter filter, final String targetOut) { gernotbelger@9566: this.factory = factory; gernotbelger@9566: this.ids = ids; gernotbelger@9566: this.masterArtifact = masterArtifact; gernotbelger@9566: this.filter = filter; gernotbelger@9566: this.targetOut = targetOut; gernotbelger@9566: } gernotbelger@9566: gernotbelger@9566: public String getTargetOut() { gernotbelger@9566: return this.targetOut; gernotbelger@9566: } gernotbelger@9566: gernotbelger@9566: public void setTargetOut(final String value) { gernotbelger@9566: this.targetOut = value; gernotbelger@9566: } gernotbelger@9566: gernotbelger@9566: public String getFactory() { gernotbelger@9566: return this.factory; gernotbelger@9566: } gernotbelger@9566: gernotbelger@9566: public void setFactory(final String factory) { gernotbelger@9566: this.factory = factory; gernotbelger@9566: } gernotbelger@9566: gernotbelger@9566: public void setDisplayName(final String displayName) { gernotbelger@9566: this.displayName = displayName; gernotbelger@9566: } gernotbelger@9566: gernotbelger@9566: public String getDisplayName() { gernotbelger@9566: return this.displayName; gernotbelger@9566: } gernotbelger@9566: gernotbelger@9566: public String getIDs() { gernotbelger@9566: return this.ids; gernotbelger@9566: } gernotbelger@9566: gernotbelger@9566: public String getMasterArtifact() { gernotbelger@9566: return this.masterArtifact; gernotbelger@9566: } gernotbelger@9566: gernotbelger@9566: public void setMasterArtifact(final String masterArtifact) { gernotbelger@9566: this.masterArtifact = masterArtifact; gernotbelger@9566: } gernotbelger@9566: gernotbelger@9566: public Filter getFilter() { gernotbelger@9566: return this.filter; gernotbelger@9566: } gernotbelger@9566: gernotbelger@9566: public void setFilter(final Filter filter) { gernotbelger@9566: this.filter = filter; gernotbelger@9566: } gernotbelger@9566: gernotbelger@9566: @Override gernotbelger@9566: public int hashCode() { gernotbelger@9566: int hash = 0; gernotbelger@9566: hash += (getFactory() != null) ? getFactory().hashCode() : 0; gernotbelger@9566: hash += (getIDs() != null) ? getIDs().hashCode() : 0; gernotbelger@9566: hash += (getFilter() != null) ? getFilter().hashCode() : 0; gernotbelger@9566: hash += (getMasterArtifact() != null) ? getMasterArtifact().hashCode() : 0; gernotbelger@9566: hash += (getTargetOut() != null) ? getTargetOut().hashCode() : 0; gernotbelger@9566: return hash; gernotbelger@9566: } gernotbelger@9566: gernotbelger@9566: /** gernotbelger@9566: * Null-pointer guarded equals. gernotbelger@9566: * Two null's are assumed equal (returns true); gernotbelger@9566: * gernotbelger@9566: * @param a gernotbelger@9566: * Object to compare against parameter b. gernotbelger@9566: * @param b gernotbelger@9566: * Object to compare against parameter a. gernotbelger@9566: * @return true if either a and b are null or a.equals(b) returns true. gernotbelger@9566: */ gernotbelger@9566: protected static boolean same(final Object a, final Object b) { gernotbelger@9566: // Do null-check. gernotbelger@9566: if (a == null) { gernotbelger@9566: return b == null; gernotbelger@9566: } else if (b == null) { gernotbelger@9566: return false; gernotbelger@9566: } gernotbelger@9566: return a.equals(b); gernotbelger@9566: } gernotbelger@9566: gernotbelger@9566: @Override gernotbelger@9566: public boolean equals(final Object other) { gernotbelger@9566: if (!(other instanceof Recommendation) || other == null) { gernotbelger@9566: return false; gernotbelger@9566: } gernotbelger@9566: final Recommendation rec = (Recommendation) other; gernotbelger@9566: return (same(this.getFactory(), rec.getFactory())) && (same(this.getIDs(), rec.getIDs())) && (same(this.getFilter(), rec.getFilter())) gernotbelger@9566: && (same(this.getMasterArtifact(), rec.getMasterArtifact())) && (same(this.getTargetOut(), rec.getTargetOut())); gernotbelger@9566: } gernotbelger@9566: }