*/
package org.opendaylight.yangtools.yang.model.util.type;
+import static java.util.Objects.requireNonNull;
+
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 java.util.Optional;
+import org.eclipse.jdt.annotation.NonNull;
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<T extends TypeDefinition<T>> implements Immutable, TypeDefinition<T> {
- private final SchemaPath path;
- private final T baseType;
+abstract class AbstractDerivedType<T extends TypeDefinition<T>> extends AbstractTypeDefinition<T> {
+ private final @NonNull T baseType;
private final Object defaultValue;
private final String description;
private final String reference;
- private final Status status;
+ private final @NonNull Status status;
private final String units;
- private final List<UnknownSchemaNode> 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<UnknownSchemaNode> unknownSchemNodes) {
- this.baseType = Preconditions.checkNotNull(baseType);
- this.path = Preconditions.checkNotNull(path);
- this.status = Preconditions.checkNotNull(status);
+ final String reference, final Status status, final String units,
+ final Collection<UnknownSchemaNode> unknownSchemNodes) {
+ super(path, unknownSchemNodes);
+ this.baseType = requireNonNull(baseType);
+ this.status = requireNonNull(status);
this.defaultValue = defaultValue;
this.description = description;
this.reference = reference;
this.units = units;
- this.unknownSchemNodes = ImmutableList.copyOf(unknownSchemNodes);
}
@Override
public final T getBaseType() {
- return baseType;
- }
-
- @Override
- public final Object getDefaultValue() {
- return defaultValue != null ? defaultValue : baseType.getDefaultValue();
+ return baseType instanceof AbstractRestrictedType ? baseType.getBaseType() : baseType;
}
- @Override
- public final QName getQName() {
- return path.getLastComponent();
- }
-
- @Override
- public final SchemaPath getPath() {
- return path;
+ /**
+ * Return the stored base type. Unlike {@link #getBaseType()}, this method returns the underlying restricted type.
+ */
+ final T baseType() {
+ return baseType;
}
@Override
- public final List<UnknownSchemaNode> getUnknownSchemaNodes() {
- return unknownSchemNodes;
+ public final Optional<? extends Object> getDefaultValue() {
+ return defaultValue != null ? Optional.of(defaultValue) : baseType.getDefaultValue();
}
@Override
- public final String getDescription() {
- return description;
+ public final Optional<String> getDescription() {
+ return Optional.ofNullable(description);
}
@Override
- public final String getReference() {
- return reference;
+ public final Optional<String> getReference() {
+ return Optional.ofNullable(reference);
}
@Override
}
@Override
- public final String getUnits() {
- return units != null ? units : baseType.getUnits();
+ public final Optional<String> getUnits() {
+ return units != null ? Optional.of(units) : baseType.getUnits();
}
@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();
}
}