X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=yang%2Fyang-model-util%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fyangtools%2Fyang%2Fmodel%2Futil%2FExtendedType.java;h=875f463a8f0826f5e29f93cb43b6175fb22b43d3;hb=eb5710c6b416b915591eeef26ea4639ce5eb1ef3;hp=4c2c17b63ad2aae304dc0802d9f050f296bd18ee;hpb=45604e1ed6770040375e0112614b8a4b177263d9;p=yangtools.git diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/ExtendedType.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/ExtendedType.java index 4c2c17b63a..875f463a8f 100644 --- a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/ExtendedType.java +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/ExtendedType.java @@ -7,11 +7,10 @@ */ package org.opendaylight.yangtools.yang.model.util; -import java.net.URI; +import com.google.common.base.Optional; +import com.google.common.base.Preconditions; import java.util.Collections; -import java.util.Date; import java.util.List; - import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.SchemaPath; import org.opendaylight.yangtools.yang.model.api.Status; @@ -20,7 +19,15 @@ import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode; import org.opendaylight.yangtools.yang.model.api.type.LengthConstraint; import org.opendaylight.yangtools.yang.model.api.type.PatternConstraint; import org.opendaylight.yangtools.yang.model.api.type.RangeConstraint; - +/** + * Extended Type represents YANG type derived from other type. + * + * Extended type object is decorator on top of existing {@link TypeDefinition} + * which represents original type, and extended type + * may define additional constraints, modify description or reference + * of parent type or provide new type capture for specific use-cases. + * + */ public class ExtendedType implements TypeDefinition> { private final QName typeName; @@ -30,15 +37,30 @@ public class ExtendedType implements TypeDefinition> { private final String reference; private final List unknownSchemaNodes; + private final Status status; + private final String units; + private final Object defaultValue; + private final boolean addedByUses; + private List ranges = Collections.emptyList(); private List lengths = Collections.emptyList(); private List patterns = Collections.emptyList(); private Integer fractionDigits = null; - private Status status; - private String units; - private Object defaultValue; - private boolean addedByUses; + /** + * + * Creates Builder for extended / derived type. + * + * @param typeName QName of derived type + * @param baseType Base type of derived type + * @param description Description of type + * @param reference Reference of Type + * @param path Schema path to type definition. + */ + public static final Builder builder(final QName typeName, final TypeDefinition baseType, + final Optional description, final Optional reference, final SchemaPath path) { + return new Builder(typeName, baseType, description.or(""), reference.or(""), path); + } public static class Builder { private final QName typeName; @@ -60,33 +82,31 @@ public class ExtendedType implements TypeDefinition> { private List patterns = Collections.emptyList(); private Integer fractionDigits = null; - public Builder(final List actualPath, final URI namespace, - final Date revision, final QName typeName, - TypeDefinition baseType, final String description, - final String reference) { - this.typeName = typeName; - this.baseType = baseType; - this.path = BaseTypes.schemaPath(actualPath, namespace, revision); - this.description = description; - this.reference = reference; - } - - public Builder(final QName typeName, TypeDefinition baseType, + /** + * Creates Builder for extended / derived type. + * + * @param typeName QName of derived type + * @param baseType Base type of derived type + * @param description Description of type + * @param reference Reference of Type + * @param path Schema path to type definition. + */ + protected Builder(final QName typeName, final TypeDefinition baseType, final String description, final String reference, - SchemaPath path) { - this.typeName = typeName; - this.baseType = baseType; - this.path = path; + final SchemaPath path) { + this.typeName = Preconditions.checkNotNull(typeName, "type name must not be null."); + this.baseType = Preconditions.checkNotNull(baseType, "base type must not be null"); + this.path = Preconditions.checkNotNull(path, "path must not be null."); this.description = description; this.reference = reference; } - public Builder status(Status status) { + public Builder status(final Status status) { this.status = status; return this; } - public Builder units(String units) { + public Builder units(final String units) { this.units = units; return this; } @@ -103,7 +123,11 @@ public class ExtendedType implements TypeDefinition> { public Builder unknownSchemaNodes( final List unknownSchemaNodes) { - this.unknownSchemaNodes = unknownSchemaNodes; + if (unknownSchemaNodes.isEmpty()) { + this.unknownSchemaNodes = Collections.emptyList(); + } else { + this.unknownSchemaNodes = unknownSchemaNodes; + } return this; } @@ -138,7 +162,7 @@ public class ExtendedType implements TypeDefinition> { } } - private ExtendedType(Builder builder) { + private ExtendedType(final Builder builder) { this.typeName = builder.typeName; this.baseType = builder.baseType; this.path = builder.path; @@ -206,7 +230,7 @@ public class ExtendedType implements TypeDefinition> { } @Override - public boolean equals(Object o) { + public boolean equals(final Object o) { if (this == o) { return true; } @@ -218,8 +242,9 @@ public class ExtendedType implements TypeDefinition> { if (path != null ? !path.equals(that.path) : that.path != null) { return false; } - if (typeName != null ? !typeName.equals(that.typeName) : that.typeName != null) + if (typeName != null ? !typeName.equals(that.typeName) : that.typeName != null) { return false; + } return true; }