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: }