import org.opendaylight.controller.yang.model.util.UnknownType;
import org.opendaylight.controller.yang.parser.builder.api.AbstractTypeAwareBuilder;
import org.opendaylight.controller.yang.parser.builder.api.TypeDefinitionBuilder;
+import org.opendaylight.controller.yang.parser.util.Comparators;
import org.opendaylight.controller.yang.parser.util.YangParseException;
-public final class TypeDefinitionBuilderImpl extends AbstractTypeAwareBuilder
- implements TypeDefinitionBuilder {
- private final int line;
- private final QName qname;
+public final class TypeDefinitionBuilderImpl extends AbstractTypeAwareBuilder implements TypeDefinitionBuilder {
private SchemaPath schemaPath;
-
- private final List<UnknownSchemaNodeBuilder> addedUnknownNodes = new ArrayList<UnknownSchemaNodeBuilder>();
private List<RangeConstraint> ranges = Collections.emptyList();
private List<LengthConstraint> lengths = Collections.emptyList();
private List<PatternConstraint> patterns = Collections.emptyList();
private Status status = Status.CURRENT;
private String units;
private Object defaultValue;
+ private boolean addedByUses;
public TypeDefinitionBuilderImpl(final QName qname, final int line) {
- this.qname = qname;
- this.line = line;
+ super(line, qname);
+ }
+
+ public TypeDefinitionBuilderImpl(TypeDefinitionBuilder tdb) {
+ super(tdb.getLine(), tdb.getQName());
+ schemaPath = tdb.getPath();
+
+ type = tdb.getType();
+ typedef = tdb.getTypedef();
+
+ unknownNodes = tdb.getUnknownNodes();
+ for (UnknownSchemaNodeBuilder usnb : tdb.getUnknownNodeBuilders()) {
+ addedUnknownNodes.add(usnb);
+ }
+ ranges = tdb.getRanges();
+ lengths = tdb.getLengths();
+ patterns = tdb.getPatterns();
+ fractionDigits = tdb.getFractionDigits();
+
+ description = tdb.getDescription();
+ reference = tdb.getReference();
+ status = tdb.getStatus();
+ units = tdb.getUnits();
+ defaultValue = tdb.getDefaultValue();
+ addedByUses = tdb.isAddedByUses();
}
@Override
TypeDefinition<?> result = null;
ExtendedType.Builder typeBuilder = null;
if ((type == null || type instanceof UnknownType) && typedef == null) {
- throw new YangParseException("Unresolved type: '"
- + qname.getLocalName() + "'.");
+ throw new YangParseException("Unresolved type: '" + qname.getLocalName() + "'.");
}
if (type == null || type instanceof UnknownType) {
type = typedef.build();
}
- typeBuilder = new ExtendedType.Builder(qname, type, description,
- reference, schemaPath);
+ typeBuilder = new ExtendedType.Builder(qname, type, description, reference, schemaPath);
typeBuilder.status(status);
typeBuilder.units(units);
typeBuilder.defaultValue(defaultValue);
+ typeBuilder.addedByUses(addedByUses);
typeBuilder.ranges(ranges);
typeBuilder.lengths(lengths);
typeBuilder.fractionDigits(fractionDigits);
// UNKNOWN NODES
- final List<UnknownSchemaNode> unknownNodes = new ArrayList<UnknownSchemaNode>();
- for (UnknownSchemaNodeBuilder b : addedUnknownNodes) {
- unknownNodes.add(b.build());
+ if (unknownNodes == null) {
+ unknownNodes = new ArrayList<UnknownSchemaNode>();
+ for (UnknownSchemaNodeBuilder b : addedUnknownNodes) {
+ unknownNodes.add(b.build());
+ }
+ Collections.sort(unknownNodes, Comparators.SCHEMA_NODE_COMP);
}
typeBuilder.unknownSchemaNodes(unknownNodes);
result = typeBuilder.build();
return result;
}
- @Override
- public int getLine() {
- return line;
- }
-
- @Override
- public QName getQName() {
- return qname;
- }
-
@Override
public SchemaPath getPath() {
return schemaPath;
}
}
+ @Override
+ public boolean isAddedByUses() {
+ return addedByUses;
+ }
+
+ @Override
+ public void setAddedByUses(final boolean addedByUses) {
+ this.addedByUses = addedByUses;
+ }
+
@Override
public String getUnits() {
return units;
}
@Override
- public List<UnknownSchemaNodeBuilder> getUnknownNodes() {
- return addedUnknownNodes;
- }
-
- @Override
- public void addUnknownSchemaNode(final UnknownSchemaNodeBuilder unknownNode) {
- addedUnknownNodes.add(unknownNode);
+ public List<UnknownSchemaNode> getUnknownNodes() {
+ return Collections.emptyList();
}
@Override
@Override
public String toString() {
- final StringBuilder result = new StringBuilder("TypedefBuilder["
- + qname.getLocalName());
+ final StringBuilder result = new StringBuilder("TypedefBuilder[" + qname.getLocalName());
result.append(", type=");
if (type == null) {
result.append(typedef);