From: Robert Varga Date: Fri, 16 Oct 2015 17:52:10 +0000 (+0200) Subject: Util types: implement hashCode()/equals()/toString() X-Git-Tag: release/beryllium~186 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=58e264b2d9e89a4a2711560aa4df8de55e25d6df;p=yangtools.git Util types: implement hashCode()/equals()/toString() This patch adds the infrastructure and provides the base hashCode/equals/toString implementations for all types. Change-Id: I8e10bcc71e41bc07e5ff96f2746e3352b02abc39 Signed-off-by: Robert Varga --- diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/AbstractBaseType.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/AbstractBaseType.java index 5b5c287099..a9d171ca2c 100644 --- a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/AbstractBaseType.java +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/AbstractBaseType.java @@ -7,29 +7,21 @@ */ package org.opendaylight.yangtools.yang.model.util.type; -import com.google.common.base.MoreObjects; -import com.google.common.base.MoreObjects.ToStringHelper; -import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; import java.util.List; -import org.opendaylight.yangtools.concepts.Immutable; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.SchemaPath; import org.opendaylight.yangtools.yang.model.api.Status; import org.opendaylight.yangtools.yang.model.api.TypeDefinition; import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode; -abstract class AbstractBaseType> implements Immutable, TypeDefinition { - private final List unknownSchemaNodes; - private final SchemaPath path; - +abstract class AbstractBaseType> extends AbstractTypeDefinition { AbstractBaseType(final QName qname) { this(SchemaPath.create(true, qname), ImmutableList.of()); } AbstractBaseType(final SchemaPath path, final List unknownSchemaNodes) { - this.path = Preconditions.checkNotNull(path); - this.unknownSchemaNodes = Preconditions.checkNotNull(unknownSchemaNodes); + super(path, unknownSchemaNodes); } @Override @@ -47,16 +39,6 @@ abstract class AbstractBaseType> implements Immutabl return null; } - @Override - public final QName getQName() { - return path.getLastComponent(); - } - - @Override - public final SchemaPath getPath() { - return path; - } - @Override public final String getDescription() { return null; @@ -71,18 +53,4 @@ abstract class AbstractBaseType> implements Immutabl public final Status getStatus() { return Status.CURRENT; } - - @Override - public final List getUnknownSchemaNodes() { - return unknownSchemaNodes; - } - - @Override - public final String toString() { - return addToStringAttributes(MoreObjects.toStringHelper(this).omitNullValues()).toString(); - } - - protected ToStringHelper addToStringAttributes(final ToStringHelper toStringHelper) { - return toStringHelper.add("path", path); - } } diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/AbstractDerivedType.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/AbstractDerivedType.java index 601afb5bf3..db68f1d2ce 100644 --- a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/AbstractDerivedType.java +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/AbstractDerivedType.java @@ -9,36 +9,29 @@ package org.opendaylight.yangtools.yang.model.util.type; import com.google.common.base.MoreObjects; import com.google.common.base.Preconditions; -import com.google.common.collect.ImmutableList; import java.util.Collection; -import java.util.List; -import org.opendaylight.yangtools.concepts.Immutable; -import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.SchemaPath; import org.opendaylight.yangtools.yang.model.api.Status; import org.opendaylight.yangtools.yang.model.api.TypeDefinition; import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode; -abstract class AbstractDerivedType> implements Immutable, TypeDefinition { - private final SchemaPath path; +abstract class AbstractDerivedType> extends AbstractTypeDefinition { private final T baseType; private final Object defaultValue; private final String description; private final String reference; private final Status status; private final String units; - private final List unknownSchemNodes; AbstractDerivedType(final T baseType, final SchemaPath path, final Object defaultValue, final String description, final String reference, final Status status, final String units, final Collection unknownSchemNodes) { + super(path, unknownSchemNodes); this.baseType = Preconditions.checkNotNull(baseType); - this.path = Preconditions.checkNotNull(path); this.status = Preconditions.checkNotNull(status); this.defaultValue = defaultValue; this.description = description; this.reference = reference; this.units = units; - this.unknownSchemNodes = ImmutableList.copyOf(unknownSchemNodes); } @Override @@ -51,21 +44,6 @@ abstract class AbstractDerivedType> implements Immut return defaultValue != null ? defaultValue : baseType.getDefaultValue(); } - @Override - public final QName getQName() { - return path.getLastComponent(); - } - - @Override - public final SchemaPath getPath() { - return path; - } - - @Override - public final List getUnknownSchemaNodes() { - return unknownSchemNodes; - } - @Override public final String getDescription() { return description; @@ -88,8 +66,13 @@ abstract class AbstractDerivedType> implements Immut @Override public final String toString() { - return MoreObjects.toStringHelper(this).omitNullValues().add("baseType", baseType).add("default", defaultValue) - .add("description", description).add("path", path).add("reference", reference).add("status", status) + return MoreObjects.toStringHelper(this).omitNullValues() + .add("baseType", baseType) + .add("default", defaultValue) + .add("description", description) + .add("path", getPath()) + .add("reference", reference) + .add("status", status) .add("units", units).toString(); } } diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/AbstractIntegerBaseType.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/AbstractIntegerBaseType.java index 37c3821660..ddcb015c03 100644 --- a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/AbstractIntegerBaseType.java +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/AbstractIntegerBaseType.java @@ -14,4 +14,19 @@ abstract class AbstractIntegerBaseType extends AbstractRangedBaseType> extends Abstr public final List getRangeConstraints() { return rangeConstraints; } - - @Override - protected ToStringHelper addToStringAttributes(final ToStringHelper toStringHelper) { - return super.addToStringAttributes(toStringHelper).add("range", rangeConstraints); - } } diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/AbstractRestrictedType.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/AbstractRestrictedType.java index 03ae423136..9d30fc9b0e 100644 --- a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/AbstractRestrictedType.java +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/AbstractRestrictedType.java @@ -8,25 +8,18 @@ package org.opendaylight.yangtools.yang.model.util.type; import com.google.common.base.Preconditions; -import com.google.common.collect.ImmutableList; import java.util.Collection; -import java.util.List; -import org.opendaylight.yangtools.concepts.Immutable; -import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.SchemaPath; import org.opendaylight.yangtools.yang.model.api.Status; import org.opendaylight.yangtools.yang.model.api.TypeDefinition; import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode; -abstract class AbstractRestrictedType> implements Immutable, TypeDefinition { - private final List unknownSchemaNodes; +abstract class AbstractRestrictedType> extends AbstractTypeDefinition { private final T baseType; - private final SchemaPath path; AbstractRestrictedType(final T baseType, final SchemaPath path, final Collection unknownSchemaNodes) { + super(path, unknownSchemaNodes); this.baseType = Preconditions.checkNotNull(baseType); - this.path = Preconditions.checkNotNull(path); - this.unknownSchemaNodes = ImmutableList.copyOf(unknownSchemaNodes); } @Override @@ -44,21 +37,6 @@ abstract class AbstractRestrictedType> implements Im return baseType.getDefaultValue(); } - @Override - public final QName getQName() { - return path.getLastComponent(); - } - - @Override - public final SchemaPath getPath() { - return path; - } - - @Override - public final List getUnknownSchemaNodes() { - return unknownSchemaNodes; - } - @Override public final String getDescription() { return baseType.getDescription(); diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/AbstractTypeDefinition.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/AbstractTypeDefinition.java new file mode 100644 index 0000000000..b6013348fe --- /dev/null +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/AbstractTypeDefinition.java @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2015 Pantheon Technologies s.r.o. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.yangtools.yang.model.util.type; + +import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableList; +import java.util.Collection; +import java.util.List; +import org.opendaylight.yangtools.concepts.Immutable; +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.model.api.SchemaPath; +import org.opendaylight.yangtools.yang.model.api.TypeDefinition; +import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode; + +abstract class AbstractTypeDefinition> implements Immutable, TypeDefinition { + private final List unknownSchemaNodes; + private final SchemaPath path; + + AbstractTypeDefinition(final SchemaPath path, final Collection unknownSchemaNodes) { + this.path = Preconditions.checkNotNull(path); + this.unknownSchemaNodes = ImmutableList.copyOf(unknownSchemaNodes); + } + + @Override + public final QName getQName() { + return path.getLastComponent(); + } + + @Override + public final SchemaPath getPath() { + return path; + } + + @Override + public final List getUnknownSchemaNodes() { + return unknownSchemaNodes; + } + + @Override + public abstract String toString(); + + @Override + public abstract int hashCode(); + + @Override + public abstract boolean equals(final Object obj); +} diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/AbstractUnsignedBaseType.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/AbstractUnsignedBaseType.java index 27287fdf6b..acecd8af18 100644 --- a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/AbstractUnsignedBaseType.java +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/AbstractUnsignedBaseType.java @@ -15,4 +15,19 @@ abstract class AbstractUnsignedBaseType extends AbstractRangedBaseType implem public List getLengthConstraints() { return ImmutableList.of(); } + + @Override + public int hashCode() { + return TypeDefinitions.hashCode(this); + } + + @Override + public boolean equals(final Object obj) { + return TypeDefinitions.equals(this, obj); + } + + @Override + public String toString() { + return TypeDefinitions.toString(this); + } } diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseBitsType.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseBitsType.java index 055b37dfe1..1ea3156ed2 100644 --- a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseBitsType.java +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseBitsType.java @@ -26,4 +26,19 @@ final class BaseBitsType extends AbstractBaseType implements public List getBits() { return bits; } + + @Override + public int hashCode() { + return TypeDefinitions.hashCode(this); + } + + @Override + public boolean equals(final Object obj) { + return TypeDefinitions.equals(this, obj); + } + + @Override + public String toString() { + return TypeDefinitions.toString(this); + } } diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseBooleanType.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseBooleanType.java index a3d029e4ff..701f00827a 100644 --- a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseBooleanType.java +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseBooleanType.java @@ -16,4 +16,19 @@ final class BaseBooleanType extends AbstractBaseType impl private BaseBooleanType() { super(BaseTypes.BINARY_QNAME); } + + @Override + public int hashCode() { + return TypeDefinitions.hashCode(this); + } + + @Override + public boolean equals(final Object obj) { + return TypeDefinitions.equals(this, obj); + } + + @Override + public String toString() { + return TypeDefinitions.toString(this); + } } diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseDecimalType.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseDecimalType.java index a34ec24381..fc8df2ccba 100644 --- a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseDecimalType.java +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseDecimalType.java @@ -7,7 +7,6 @@ */ package org.opendaylight.yangtools.yang.model.util.type; -import com.google.common.base.MoreObjects.ToStringHelper; import com.google.common.base.Optional; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList.Builder; @@ -62,7 +61,17 @@ final class BaseDecimalType extends AbstractRangedBaseType implemen private BaseEmptyType() { super(BaseTypes.EMPTY_QNAME); } + + @Override + public int hashCode() { + return TypeDefinitions.hashCode(this); + } + + @Override + public boolean equals(final Object obj) { + return TypeDefinitions.equals(this, obj); + } + + @Override + public String toString() { + return TypeDefinitions.toString(this); + } } diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseEnumerationType.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseEnumerationType.java index acba86a4bc..bb76a968bd 100644 --- a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseEnumerationType.java +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseEnumerationType.java @@ -26,4 +26,19 @@ final class BaseEnumerationType extends AbstractBaseType imp public List getValues() { return values; } + + @Override + public int hashCode() { + return TypeDefinitions.hashCode(this); + } + + @Override + public boolean equals(final Object obj) { + return TypeDefinitions.equals(this, obj); + } + + @Override + public String toString() { + return TypeDefinitions.toString(this); + } } diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseIdentityrefType.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseIdentityrefType.java index 373c460da8..c22b265298 100644 --- a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseIdentityrefType.java +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseIdentityrefType.java @@ -26,4 +26,19 @@ final class BaseIdentityrefType extends AbstractBaseType impl public RevisionAwareXPath getPathStatement() { return pathStatement; } + + @Override + public int hashCode() { + return TypeDefinitions.hashCode(this); + } + + @Override + public boolean equals(final Object obj) { + return TypeDefinitions.equals(this, obj); + } + + @Override + public String toString() { + return TypeDefinitions.toString(this); + } } diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseStringType.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseStringType.java index 2db0125176..ee297d6eeb 100644 --- a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseStringType.java +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseStringType.java @@ -30,4 +30,19 @@ final class BaseStringType extends AbstractBaseType implem public List getPatternConstraints() { return ImmutableList.of(); } + + @Override + public int hashCode() { + return TypeDefinitions.hashCode(this); + } + + @Override + public boolean equals(final Object obj) { + return TypeDefinitions.equals(this, obj); + } + + @Override + public String toString() { + return TypeDefinitions.toString(this); + } } diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseUnionType.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseUnionType.java index 23f4476ba4..bbbe6ba8a8 100644 --- a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseUnionType.java +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseUnionType.java @@ -27,4 +27,19 @@ final class BaseUnionType extends AbstractBaseType implemen public List> getTypes() { return types; } + + @Override + public int hashCode() { + return TypeDefinitions.hashCode(this); + } + + @Override + public boolean equals(final Object obj) { + return TypeDefinitions.equals(this, obj); + } + + @Override + public String toString() { + return TypeDefinitions.toString(this); + } } diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedBinaryType.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedBinaryType.java index 6eb196c7f6..d715790db0 100644 --- a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedBinaryType.java +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedBinaryType.java @@ -26,4 +26,14 @@ final class DerivedBinaryType extends AbstractDerivedType public List getLengthConstraints() { return getBaseType().getLengthConstraints(); } + + @Override + public int hashCode() { + return TypeDefinitions.hashCode(this); + } + + @Override + public boolean equals(final Object obj) { + return TypeDefinitions.equals(this, obj); + } } diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedBitsType.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedBitsType.java index fab4135f9b..03f01fcaeb 100644 --- a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedBitsType.java +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedBitsType.java @@ -25,4 +25,14 @@ final class DerivedBitsType extends AbstractDerivedType impl public List getBits() { return getBaseType().getBits(); } + + @Override + public int hashCode() { + return TypeDefinitions.hashCode(this); + } + + @Override + public boolean equals(final Object obj) { + return TypeDefinitions.equals(this, obj); + } } diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedBooleanType.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedBooleanType.java index 6f100fd7ae..f1498f4ab2 100644 --- a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedBooleanType.java +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedBooleanType.java @@ -19,4 +19,14 @@ final class DerivedBooleanType extends AbstractDerivedType unknownSchemNodes) { super(baseType, path, defaultValue, description, reference, status, units, unknownSchemNodes); } + + @Override + public int hashCode() { + return TypeDefinitions.hashCode(this); + } + + @Override + public boolean equals(final Object obj) { + return TypeDefinitions.equals(this, obj); + } } diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedDecimalType.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedDecimalType.java index 01ae973e38..d4ef01e96c 100644 --- a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedDecimalType.java +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedDecimalType.java @@ -31,4 +31,14 @@ final class DerivedDecimalType extends AbstractDerivedType getRangeConstraints() { return getBaseType().getRangeConstraints(); } + + @Override + public int hashCode() { + return TypeDefinitions.hashCode(this); + } + + @Override + public boolean equals(final Object obj) { + return TypeDefinitions.equals(this, obj); + } } diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedEmptyType.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedEmptyType.java index ed88513446..d9bca9a7ab 100644 --- a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedEmptyType.java +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedEmptyType.java @@ -19,4 +19,14 @@ final class DerivedEmptyType extends AbstractDerivedType im final Collection unknownSchemNodes) { super(baseType, path, defaultValue, description, reference, status, units, unknownSchemNodes); } + + @Override + public int hashCode() { + return TypeDefinitions.hashCode(this); + } + + @Override + public boolean equals(final Object obj) { + return TypeDefinitions.equals(this, obj); + } } diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedEnumerationType.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedEnumerationType.java index a8924d4957..c89201995f 100644 --- a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedEnumerationType.java +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedEnumerationType.java @@ -25,4 +25,14 @@ final class DerivedEnumerationType extends AbstractDerivedType getValues() { return getBaseType().getValues(); } + + @Override + public int hashCode() { + return TypeDefinitions.hashCode(this); + } + + @Override + public boolean equals(final Object obj) { + return TypeDefinitions.equals(this, obj); + } } diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedIdentityrefType.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedIdentityrefType.java index 6e3267121e..6dabd21a35 100644 --- a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedIdentityrefType.java +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedIdentityrefType.java @@ -25,4 +25,14 @@ final class DerivedIdentityrefType extends AbstractDerivedType getRangeConstraints() { return getBaseType().getRangeConstraints(); } + + @Override + public int hashCode() { + return TypeDefinitions.hashCode(this); + } + + @Override + public boolean equals(final Object obj) { + return TypeDefinitions.equals(this, obj); + } } diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedLeafrefType.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedLeafrefType.java index fce65e7408..7204a1b310 100644 --- a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedLeafrefType.java +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedLeafrefType.java @@ -25,4 +25,14 @@ final class DerivedLeafrefType extends AbstractDerivedType public List getLengthConstraints() { return getBaseType().getLengthConstraints(); } + + @Override + public int hashCode() { + return TypeDefinitions.hashCode(this); + } + + @Override + public boolean equals(final Object obj) { + return TypeDefinitions.equals(this, obj); + } } diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedUnionType.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedUnionType.java index 5546769ded..efed275aa5 100644 --- a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedUnionType.java +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedUnionType.java @@ -26,4 +26,14 @@ final class DerivedUnionType extends AbstractDerivedType im public List> getTypes() { return getBaseType().getTypes(); } + + @Override + public int hashCode() { + return TypeDefinitions.hashCode(this); + } + + @Override + public boolean equals(final Object obj) { + return TypeDefinitions.equals(this, obj); + } } diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedUnsignedType.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedUnsignedType.java index 9240c03587..2a0c8e3f67 100644 --- a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedUnsignedType.java +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedUnsignedType.java @@ -28,4 +28,14 @@ final class DerivedUnsignedType extends AbstractDerivedType getRangeConstraints() { return getBaseType().getRangeConstraints(); } + + @Override + public int hashCode() { + return TypeDefinitions.hashCode(this); + } + + @Override + public boolean equals(final Object obj) { + return TypeDefinitions.equals(this, obj); + } } diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedBinaryType.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedBinaryType.java index 4cbed792d9..930f5654a7 100644 --- a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedBinaryType.java +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedBinaryType.java @@ -19,4 +19,19 @@ final class RestrictedBinaryType extends AbstractLengthRestrictedType lengthConstraints) { super(baseType, path, unknownSchemaNodes, lengthConstraints); } + + @Override + public int hashCode() { + return TypeDefinitions.hashCode(this); + } + + @Override + public boolean equals(final Object obj) { + return TypeDefinitions.equals(this, obj); + } + + @Override + public String toString() { + return TypeDefinitions.toString(this); + } } diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedBitsType.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedBitsType.java index ea29712920..bd18e8bfc6 100644 --- a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedBitsType.java +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedBitsType.java @@ -23,4 +23,19 @@ final class RestrictedBitsType extends AbstractRestrictedType getBits() { return getBaseType().getBits(); } + + @Override + public int hashCode() { + return TypeDefinitions.hashCode(this); + } + + @Override + public boolean equals(final Object obj) { + return TypeDefinitions.equals(this, obj); + } + + @Override + public String toString() { + return TypeDefinitions.toString(this); + } } diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedBooleanType.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedBooleanType.java index 782b17ed42..41bdc1c7ba 100644 --- a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedBooleanType.java +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedBooleanType.java @@ -17,4 +17,19 @@ final class RestrictedBooleanType extends AbstractRestrictedType unknownSchemaNodes) { super(baseType, path, unknownSchemaNodes); } + + @Override + public int hashCode() { + return TypeDefinitions.hashCode(this); + } + + @Override + public boolean equals(final Object obj) { + return TypeDefinitions.equals(this, obj); + } + + @Override + public String toString() { + return TypeDefinitions.toString(this); + } } diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedDecimalType.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedDecimalType.java index 86c6d8731e..5f0826083f 100644 --- a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedDecimalType.java +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedDecimalType.java @@ -24,4 +24,19 @@ final class RestrictedDecimalType extends AbstractRangeRestrictedType unknownSchemaNodes) { super(baseType, path, unknownSchemaNodes); } + + @Override + public int hashCode() { + return TypeDefinitions.hashCode(this); + } + + @Override + public boolean equals(final Object obj) { + return TypeDefinitions.equals(this, obj); + } + + @Override + public String toString() { + return TypeDefinitions.toString(this); + } } diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedEnumerationType.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedEnumerationType.java index bc6f34d599..2de1ce7229 100644 --- a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedEnumerationType.java +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedEnumerationType.java @@ -23,4 +23,19 @@ final class RestrictedEnumerationType extends AbstractRestrictedType getValues() { return getBaseType().getValues(); } + + @Override + public int hashCode() { + return TypeDefinitions.hashCode(this); + } + + @Override + public boolean equals(final Object obj) { + return TypeDefinitions.equals(this, obj); + } + + @Override + public String toString() { + return TypeDefinitions.toString(this); + } } diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedIdentityrefType.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedIdentityrefType.java index edc09ffced..23dc92dd1b 100644 --- a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedIdentityrefType.java +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedIdentityrefType.java @@ -23,4 +23,19 @@ final class RestrictedIdentityrefType extends AbstractRestrictedType unknownSchemaNodes, final Collection rangeConstraints) { super(baseType, path, unknownSchemaNodes, rangeConstraints); } + + @Override + public final int hashCode() { + return TypeDefinitions.hashCode(this); + } + + @Override + public final boolean equals(final Object obj) { + return TypeDefinitions.equals(this, obj); + } + + @Override + public String toString() { + return TypeDefinitions.toString(this); + } } diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedLeafrefType.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedLeafrefType.java index 692a7e16d8..e3e1594320 100644 --- a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedLeafrefType.java +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedLeafrefType.java @@ -23,4 +23,19 @@ final class RestrictedLeafrefType extends AbstractRestrictedType getPatternConstraints() { return patternConstraints; } + + @Override + public int hashCode() { + return TypeDefinitions.hashCode(this); + } + + @Override + public boolean equals(final Object obj) { + return TypeDefinitions.equals(this, obj); + } + + @Override + public String toString() { + return TypeDefinitions.toString(this); + } } diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedUnionType.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedUnionType.java index ca7ec9118f..aad8dc9e6e 100644 --- a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedUnionType.java +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedUnionType.java @@ -24,4 +24,19 @@ final class RestrictedUnionType extends AbstractRestrictedType> getTypes() { return getBaseType().getTypes(); } + + @Override + public int hashCode() { + return TypeDefinitions.hashCode(this); + } + + @Override + public boolean equals(final Object obj) { + return TypeDefinitions.equals(this, obj); + } + + @Override + public String toString() { + return TypeDefinitions.toString(this); + } } diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedUnsignedType.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedUnsignedType.java index a1c214c586..f2e295adf7 100644 --- a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedUnsignedType.java +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedUnsignedType.java @@ -29,4 +29,19 @@ final class RestrictedUnsignedType extends AbstractRestrictedType getRangeConstraints() { return rangeConstraints; } + + @Override + public int hashCode() { + return TypeDefinitions.hashCode(this); + } + + @Override + public boolean equals(final Object obj) { + return TypeDefinitions.equals(this, obj); + } + + @Override + public String toString() { + return TypeDefinitions.toString(this); + } } diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/TypeDefinitions.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/TypeDefinitions.java new file mode 100644 index 0000000000..117375d21d --- /dev/null +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/TypeDefinitions.java @@ -0,0 +1,288 @@ +/* + * Copyright (c) 2015 Pantheon Technologies s.r.o. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.yangtools.yang.model.util.type; + +import com.google.common.base.MoreObjects; +import com.google.common.base.MoreObjects.ToStringHelper; +import java.util.Objects; +import org.opendaylight.yangtools.yang.model.api.TypeDefinition; +import org.opendaylight.yangtools.yang.model.api.type.BinaryTypeDefinition; +import org.opendaylight.yangtools.yang.model.api.type.BitsTypeDefinition; +import org.opendaylight.yangtools.yang.model.api.type.BooleanTypeDefinition; +import org.opendaylight.yangtools.yang.model.api.type.DecimalTypeDefinition; +import org.opendaylight.yangtools.yang.model.api.type.EmptyTypeDefinition; +import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition; +import org.opendaylight.yangtools.yang.model.api.type.IdentityrefTypeDefinition; +import org.opendaylight.yangtools.yang.model.api.type.InstanceIdentifierTypeDefinition; +import org.opendaylight.yangtools.yang.model.api.type.IntegerTypeDefinition; +import org.opendaylight.yangtools.yang.model.api.type.LeafrefTypeDefinition; +import org.opendaylight.yangtools.yang.model.api.type.StringTypeDefinition; +import org.opendaylight.yangtools.yang.model.api.type.UnionTypeDefinition; +import org.opendaylight.yangtools.yang.model.api.type.UnsignedIntegerTypeDefinition; + +// TODO: this should be in the API package, as it defines equality for TypeDefinitions +final class TypeDefinitions { + private TypeDefinitions() { + throw new UnsupportedOperationException(); + } + + private static int basicHashCode(final TypeDefinition type) { + return Objects.hash(type.getPath(), type.getUnknownSchemaNodes(), type.getBaseType(), type.getUnits(), + type.getDefaultValue()); + } + + private static > T castIfEquals(final Class clazz, final T type, final Object obj) { + if (!clazz.isInstance(obj)) { + return null; + } + + final T other = clazz.cast(obj); + return Objects.equals(type.getPath(), other.getPath()) + && Objects.equals(type.getBaseType(), other.getBaseType()) + && Objects.equals(type.getDefaultValue(), other.getDefaultValue()) + && Objects.equals(type.getUnknownSchemaNodes(), other.getUnknownSchemaNodes()) + && Objects.equals(type.getUnits(), other.getUnits()) ? other : null; + } + + private static ToStringHelper toStringHelper(final TypeDefinition type) { + return MoreObjects.toStringHelper(type).omitNullValues() + .add("baseType", type.getBaseType()) + .add("default", type.getDefaultValue()) + .add("description", type.getDescription()) + .add("path", type.getPath()) + .add("reference", type.getReference()) + .add("status", type.getStatus()) + .add("units", type.getUnits()); + } + + static int hashCode(final BinaryTypeDefinition type) { + return Objects.hash(type.getPath(), type.getUnknownSchemaNodes(), type.getBaseType(), type.getUnits(), + type.getDefaultValue(), type.getLengthConstraints()); + } + + static boolean equals(final BinaryTypeDefinition type, final Object obj) { + if (type == obj) { + return true; + } + + final BinaryTypeDefinition other = castIfEquals(BinaryTypeDefinition.class, type, obj); + return other != null && type.getLengthConstraints().equals(other.getLengthConstraints()); + } + + static String toString(final BinaryTypeDefinition type) { + return toStringHelper(type).add("length", type.getLengthConstraints()).toString(); + } + + static int hashCode(final BitsTypeDefinition type) { + return Objects.hash(type.getPath(), type.getUnknownSchemaNodes(), type.getBaseType(), type.getUnits(), + type.getDefaultValue(), type.getBits()); + } + + static boolean equals(final BitsTypeDefinition type, final Object obj) { + if (type == obj) { + return true; + } + + final BitsTypeDefinition other = castIfEquals(BitsTypeDefinition.class, type, obj); + return other != null && type.getBits().equals(other.getBits()); + } + + static String toString(final BitsTypeDefinition type) { + return toStringHelper(type).add("bits", type.getBits()).toString(); + } + + static int hashCode(final BooleanTypeDefinition type) { + return basicHashCode(type); + } + + static boolean equals(final BooleanTypeDefinition type, final Object obj) { + return type == obj || castIfEquals(BooleanTypeDefinition.class, type, obj) != null; + } + + static String toString(final BooleanTypeDefinition type) { + return toStringHelper(type).toString(); + } + + static int hashCode(final DecimalTypeDefinition type) { + return Objects.hash(type.getPath(), type.getUnknownSchemaNodes(), type.getBaseType(), type.getUnits(), + type.getDefaultValue(), type.getFractionDigits(), type.getRangeConstraints()); + } + + static boolean equals(final DecimalTypeDefinition type, final Object obj) { + if (type == obj) { + return true; + } + + final DecimalTypeDefinition other = castIfEquals(DecimalTypeDefinition.class, type, obj); + return other != null && type.getFractionDigits().equals(other.getFractionDigits()) + && type.getRangeConstraints().equals(other.getRangeConstraints()); + } + + static String toString(final DecimalTypeDefinition type) { + return toStringHelper(type).add("fractionDigits", type.getFractionDigits()) + .add("range", type.getRangeConstraints()).toString(); + } + + static int hashCode(final EmptyTypeDefinition type) { + return basicHashCode(type); + } + + static boolean equals(final EmptyTypeDefinition type, final Object obj) { + return type == obj || castIfEquals(EmptyTypeDefinition.class, type, obj) != null; + } + + static String toString(final EmptyTypeDefinition type) { + return toStringHelper(type).toString(); + } + + static int hashCode(final EnumTypeDefinition type) { + return Objects.hash(type.getPath(), type.getUnknownSchemaNodes(), type.getBaseType(), type.getUnits(), + type.getDefaultValue(), type.getValues()); + } + + static boolean equals(final EnumTypeDefinition type, final Object obj) { + if (type == obj) { + return true; + } + + final EnumTypeDefinition other = castIfEquals(EnumTypeDefinition.class, type, obj); + return other != null && type.getValues().equals(other.getValues()); + } + + static String toString(final EnumTypeDefinition type) { + return toStringHelper(type).add("values", type.getValues()).toString(); + } + + static int hashCode(final IdentityrefTypeDefinition type) { + return Objects.hash(type.getPath(), type.getUnknownSchemaNodes(), type.getBaseType(), type.getUnits(), + type.getDefaultValue(), type.getIdentity()); + } + + static boolean equals(final IdentityrefTypeDefinition type, final Object obj) { + if (type == obj) { + return true; + } + + final IdentityrefTypeDefinition other = castIfEquals(IdentityrefTypeDefinition.class, type, obj); + return other != null && type.getIdentity().equals(other.getIdentity()); + } + + static String toString(final IdentityrefTypeDefinition type) { + return toStringHelper(type).add("identity", type.getIdentity()).toString(); + } + + static int hashCode(final InstanceIdentifierTypeDefinition type) { + return Objects.hash(type.getPath(), type.getUnknownSchemaNodes(), type.getBaseType(), type.getUnits(), + type.getDefaultValue(), type.requireInstance()); + } + + static boolean equals(final InstanceIdentifierTypeDefinition type, final Object obj) { + if (type == obj) { + return true; + } + + final InstanceIdentifierTypeDefinition other = castIfEquals(InstanceIdentifierTypeDefinition.class, type, obj); + return other != null && type.requireInstance() == other.requireInstance(); + } + + static String toString(final InstanceIdentifierTypeDefinition type) { + return toStringHelper(type).add("requireInstance", type.requireInstance()).toString(); + } + + static int hashCode(final IntegerTypeDefinition type) { + return Objects.hash(type.getPath(), type.getUnknownSchemaNodes(), type.getBaseType(), type.getUnits(), + type.getDefaultValue(), type.getRangeConstraints()); + } + + static boolean equals(final IntegerTypeDefinition type, final Object obj) { + if (type == obj) { + return true; + } + + final IntegerTypeDefinition other = castIfEquals(IntegerTypeDefinition.class, type, obj); + return other != null && type.getRangeConstraints().equals(other.getRangeConstraints()); + } + + static String toString(final IntegerTypeDefinition type) { + return toStringHelper(type).add("range", type.getRangeConstraints()).toString(); + } + + static int hashCode(final LeafrefTypeDefinition type) { + return Objects.hash(type.getPath(), type.getUnknownSchemaNodes(), type.getBaseType(), type.getUnits(), + type.getDefaultValue(), type.getPathStatement()); + } + + static boolean equals(final LeafrefTypeDefinition type, final Object obj) { + if (type == obj) { + return true; + } + + final LeafrefTypeDefinition other =castIfEquals(LeafrefTypeDefinition.class, type, obj); + return other != null && type.getPathStatement().equals(other.getPathStatement()); + } + + static String toString(final LeafrefTypeDefinition type) { + return toStringHelper(type).add("pathStatement", type.getPathStatement()).toString(); + } + + static int hashCode(final StringTypeDefinition type) { + return Objects.hash(type.getPath(), type.getUnknownSchemaNodes(), type.getBaseType(), type.getUnits(), + type.getDefaultValue(), type.getLengthConstraints(), type.getPatternConstraints()); + } + + static boolean equals(final StringTypeDefinition type, final Object obj) { + if (type == obj) { + return true; + } + + final StringTypeDefinition other = castIfEquals(StringTypeDefinition.class, type, obj); + return other != null && type.getLengthConstraints().equals(other.getLengthConstraints()) + && type.getPatternConstraints().equals(other.getPatternConstraints()); + } + + static String toString(final StringTypeDefinition type) { + return toStringHelper(type).add("length", type.getLengthConstraints()) + .add("patterns", type.getPatternConstraints()).toString(); + } + + static int hashCode(final UnionTypeDefinition type) { + return Objects.hash(type.getPath(), type.getUnknownSchemaNodes(), type.getBaseType(), type.getUnits(), + type.getDefaultValue(), type.getTypes()); + } + + static boolean equals(final UnionTypeDefinition type, final Object obj) { + if (type == obj) { + return true; + } + + final UnionTypeDefinition other = castIfEquals(UnionTypeDefinition.class, type, obj); + return other != null && type.getTypes().equals(other.getTypes()); + } + + static String toString(final UnionTypeDefinition type) { + return toStringHelper(type).add("types", type.getTypes()).toString(); + } + + static int hashCode(final UnsignedIntegerTypeDefinition type) { + return Objects.hash(type.getPath(), type.getUnknownSchemaNodes(), type.getBaseType(), type.getUnits(), + type.getDefaultValue(), type.getRangeConstraints()); + } + + static boolean equals(final UnsignedIntegerTypeDefinition type, final Object obj) { + if (type == obj) { + return true; + } + + final UnsignedIntegerTypeDefinition other = castIfEquals(UnsignedIntegerTypeDefinition.class, type, obj); + return other != null && type.getRangeConstraints().equals(other.getRangeConstraints()); + } + + static String toString(final UnsignedIntegerTypeDefinition type) { + return toStringHelper(type).add("range", type.getRangeConstraints()).toString(); + } +}