X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fsal%2Fyang-prototype%2Fcode-generator%2Fyang-model-parser-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fyang%2Fparser%2Fbuilder%2Fimpl%2FListSchemaNodeBuilder.java;h=ce87e3bb99fac9ec4dfa24aa56780d10043ca8f7;hb=c9006d027a5c5b639e57aa7b8484ec1ff3497dc8;hp=b97399b00bccde419249da8a0cd229127638c2ae;hpb=6f9523a8243defc7e0c9534274e2c41a4b89dc9e;p=controller.git diff --git a/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/main/java/org/opendaylight/controller/yang/parser/builder/impl/ListSchemaNodeBuilder.java b/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/main/java/org/opendaylight/controller/yang/parser/builder/impl/ListSchemaNodeBuilder.java index b97399b00b..ce87e3bb99 100644 --- a/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/main/java/org/opendaylight/controller/yang/parser/builder/impl/ListSchemaNodeBuilder.java +++ b/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/main/java/org/opendaylight/controller/yang/parser/builder/impl/ListSchemaNodeBuilder.java @@ -26,18 +26,20 @@ import org.opendaylight.controller.yang.model.api.Status; import org.opendaylight.controller.yang.model.api.TypeDefinition; import org.opendaylight.controller.yang.model.api.UnknownSchemaNode; import org.opendaylight.controller.yang.model.api.UsesNode; -import org.opendaylight.controller.yang.parser.builder.api.AbstractChildNodeBuilder; +import org.opendaylight.controller.yang.parser.builder.api.AbstractDataNodeContainerBuilder; import org.opendaylight.controller.yang.parser.builder.api.AugmentationSchemaBuilder; import org.opendaylight.controller.yang.parser.builder.api.AugmentationTargetBuilder; +import org.opendaylight.controller.yang.parser.builder.api.ConfigNode; import org.opendaylight.controller.yang.parser.builder.api.DataSchemaNodeBuilder; import org.opendaylight.controller.yang.parser.builder.api.GroupingBuilder; +import org.opendaylight.controller.yang.parser.builder.api.GroupingMember; import org.opendaylight.controller.yang.parser.builder.api.TypeDefinitionAwareBuilder; import org.opendaylight.controller.yang.parser.builder.api.TypeDefinitionBuilder; import org.opendaylight.controller.yang.parser.builder.api.UsesNodeBuilder; -public class ListSchemaNodeBuilder extends AbstractChildNodeBuilder implements - DataSchemaNodeBuilder, AugmentationTargetBuilder, - TypeDefinitionAwareBuilder { +public final class ListSchemaNodeBuilder extends AbstractDataNodeContainerBuilder implements DataSchemaNodeBuilder, + AugmentationTargetBuilder, TypeDefinitionAwareBuilder, GroupingMember, ConfigNode { + private boolean isBuilt; private final ListSchemaNodeImpl instance; private final int line; // SchemaNode args @@ -45,92 +47,153 @@ public class ListSchemaNodeBuilder extends AbstractChildNodeBuilder implements private String description; private String reference; private Status status = Status.CURRENT; + private List unknownNodes; private final List addedUnknownNodes = new ArrayList(); // DataSchemaNode args private boolean augmenting; - private boolean configuration; + private boolean addedByUses; + private Boolean configuration; private final ConstraintsBuilder constraints; // DataNodeContainer args + private Set> typedefs; private final Set addedTypedefs = new HashSet(); + private Set usesNodes; private final Set addedUsesNodes = new HashSet(); // AugmentationTarget args + private Set augmentations; private final Set addedAugmentations = new HashSet(); // ListSchemaNode args private List keyDefinition = Collections.emptyList(); private boolean userOrdered; - public ListSchemaNodeBuilder(final QName qname, final int line) { + public ListSchemaNodeBuilder(final QName qname, final SchemaPath schemaPath, final int line) { super(qname); + this.schemaPath = schemaPath; this.line = line; instance = new ListSchemaNodeImpl(qname); constraints = new ConstraintsBuilder(line); } + public ListSchemaNodeBuilder(final ListSchemaNodeBuilder b) { + super(b.getQName()); + line = b.getLine(); + instance = new ListSchemaNodeImpl(b.getQName()); + constraints = b.getConstraints(); + schemaPath = b.getPath(); + description = b.getDescription(); + reference = b.getReference(); + status = b.getStatus(); + augmenting = b.isAugmenting(); + addedByUses = b.isAddedByUses(); + configuration = b.isConfiguration(); + keyDefinition = b.getKeyDefinition(); + userOrdered = b.isUserOrdered(); + childNodes = b.getChildNodes(); + addedChildNodes.addAll(b.getChildNodeBuilders()); + groupings = b.getGroupings(); + addedGroupings.addAll(b.getGroupingBuilders()); + typedefs = b.typedefs; + addedTypedefs.addAll(b.getTypeDefinitionBuilders()); + usesNodes = b.usesNodes; + addedUsesNodes.addAll(b.getUsesNodes()); + augmentations = b.augmentations; + addedAugmentations.addAll(b.getAugmentations()); + unknownNodes = b.unknownNodes; + addedUnknownNodes.addAll(b.getUnknownNodes()); + } + @Override public ListSchemaNode build() { - instance.setKeyDefinition(keyDefinition); - instance.setPath(schemaPath); - instance.setDescription(description); - instance.setReference(reference); - instance.setStatus(status); - instance.setAugmenting(augmenting); - instance.setConfiguration(configuration); - instance.setUserOrdered(userOrdered); - - // CHILD NODES - final Map childs = new HashMap(); - for (DataSchemaNodeBuilder node : childNodes) { - childs.put(node.getQName(), node.build()); - } - instance.setChildNodes(childs); + if (!isBuilt) { + instance.setKeyDefinition(keyDefinition); + instance.setPath(schemaPath); + instance.setDescription(description); + instance.setReference(reference); + instance.setStatus(status); + instance.setAugmenting(augmenting); + instance.setAddedByUses(addedByUses); + instance.setConfiguration(configuration); + instance.setUserOrdered(userOrdered); + + // CHILD NODES + final Map childs = new HashMap(); + if (childNodes == null) { + for (DataSchemaNodeBuilder node : addedChildNodes) { + childs.put(node.getQName(), node.build()); + } + } else { + for (DataSchemaNode node : childNodes) { + childs.put(node.getQName(), node); + } + } + instance.setChildNodes(childs); - // TYPEDEFS - final Set> typedefs = new HashSet>(); - for (TypeDefinitionBuilder entry : addedTypedefs) { - typedefs.add(entry.build()); - } - instance.setTypeDefinitions(typedefs); + // TYPEDEFS + if (typedefs == null) { + typedefs = new HashSet>(); + for (TypeDefinitionBuilder entry : addedTypedefs) { + typedefs.add(entry.build()); + } + } + instance.setTypeDefinitions(typedefs); - // USES - final Set usesNodeDefs = new HashSet(); - for (UsesNodeBuilder builder : addedUsesNodes) { - usesNodeDefs.add(builder.build()); - } - instance.setUses(usesNodeDefs); + // USES + if (usesNodes == null) { + usesNodes = new HashSet(); + for (UsesNodeBuilder builder : addedUsesNodes) { + usesNodes.add(builder.build()); + } + } + instance.setUses(usesNodes); - // GROUPINGS - final Set groupingDefs = new HashSet(); - for (GroupingBuilder builder : groupings) { - groupingDefs.add(builder.build()); - } - instance.setGroupings(groupingDefs); + // GROUPINGS + if (groupings == null) { + groupings = new HashSet(); + for (GroupingBuilder builder : addedGroupings) { + groupings.add(builder.build()); + } + } + instance.setGroupings(groupings); - // AUGMENTATIONS - final Set augmentations = new HashSet(); - for (AugmentationSchemaBuilder builder : addedAugmentations) { - augmentations.add(builder.build()); - } - instance.setAvailableAugmentations(augmentations); + // AUGMENTATIONS + if (augmentations == null) { + augmentations = new HashSet(); + for (AugmentationSchemaBuilder builder : addedAugmentations) { + augmentations.add(builder.build()); + } + } + instance.setAvailableAugmentations(augmentations); - // UNKNOWN NODES - final List unknownNodes = new ArrayList(); - for (UnknownSchemaNodeBuilder b : addedUnknownNodes) { - unknownNodes.add(b.build()); - } - instance.setUnknownSchemaNodes(unknownNodes); + // UNKNOWN NODES + if (unknownNodes == null) { + unknownNodes = new ArrayList(); + for (UnknownSchemaNodeBuilder b : addedUnknownNodes) { + unknownNodes.add(b.build()); + } + } + instance.setUnknownSchemaNodes(unknownNodes); - instance.setConstraints(constraints.build()); - instance.setAvailableAugmentations(augmentations); + instance.setConstraints(constraints.build()); + instance.setAvailableAugmentations(augmentations); + isBuilt = true; + } return instance; } + @Override + public void rebuild() { + isBuilt = false; + build(); + } + @Override public int getLine() { return line; } - public Set getTypedefs() { + @Override + public Set getTypeDefinitionBuilders() { return addedTypedefs; } @@ -139,6 +202,10 @@ public class ListSchemaNodeBuilder extends AbstractChildNodeBuilder implements addedTypedefs.add(type); } + public void setTypedefs(final Set> typedefs) { + this.typedefs = typedefs; + } + public SchemaPath getPath() { return schemaPath; } @@ -186,6 +253,10 @@ public class ListSchemaNodeBuilder extends AbstractChildNodeBuilder implements addedUsesNodes.add(usesBuilder); } + public void setUsesnodes(final Set usesNodes) { + this.usesNodes = usesNodes; + } + public Set getAugmentations() { return addedAugmentations; } @@ -195,6 +266,10 @@ public class ListSchemaNodeBuilder extends AbstractChildNodeBuilder implements addedAugmentations.add(augment); } + public void setAugmentations(final Set augmentations) { + this.augmentations = augmentations; + } + public List getKeyDefinition() { return keyDefinition; } @@ -214,12 +289,22 @@ public class ListSchemaNodeBuilder extends AbstractChildNodeBuilder implements this.augmenting = augmenting; } - public boolean isConfiguration() { + @Override + public boolean isAddedByUses() { + return addedByUses; + } + + @Override + public void setAddedByUses(final boolean addedByUses) { + this.addedByUses = addedByUses; + } + + public Boolean isConfiguration() { return configuration; } @Override - public void setConfiguration(boolean configuration) { + public void setConfiguration(Boolean configuration) { this.configuration = configuration; } @@ -245,7 +330,11 @@ public class ListSchemaNodeBuilder extends AbstractChildNodeBuilder implements addedUnknownNodes.add(unknownNode); } - private class ListSchemaNodeImpl implements ListSchemaNode { + public void setUnknownNodes(List unknownNodes) { + this.unknownNodes = unknownNodes; + } + + public final class ListSchemaNodeImpl implements ListSchemaNode { private final QName qname; private SchemaPath path; private String description; @@ -253,6 +342,7 @@ public class ListSchemaNodeBuilder extends AbstractChildNodeBuilder implements private Status status = Status.CURRENT; private List keyDefinition = Collections.emptyList(); private boolean augmenting; + private boolean addedByUses; private boolean configuration; private ConstraintDefinition constraints; private Set augmentations = Collections.emptySet(); @@ -328,6 +418,15 @@ public class ListSchemaNodeBuilder extends AbstractChildNodeBuilder implements this.augmenting = augmenting; } + @Override + public boolean isAddedByUses() { + return addedByUses; + } + + private void setAddedByUses(final boolean addedByUses) { + this.addedByUses = addedByUses; + } + @Override public boolean isConfiguration() { return configuration; @@ -351,8 +450,7 @@ public class ListSchemaNodeBuilder extends AbstractChildNodeBuilder implements return augmentations; } - private void setAvailableAugmentations( - Set augmentations) { + private void setAvailableAugmentations(Set augmentations) { if (augmentations != null) { this.augmentations = augmentations; } @@ -439,6 +537,10 @@ public class ListSchemaNodeBuilder extends AbstractChildNodeBuilder implements } } + public ListSchemaNodeBuilder toBuilder() { + return ListSchemaNodeBuilder.this; + } + @Override public int hashCode() { final int prime = 31; @@ -479,8 +581,7 @@ public class ListSchemaNodeBuilder extends AbstractChildNodeBuilder implements @Override public String toString() { - StringBuilder sb = new StringBuilder( - ListSchemaNodeImpl.class.getSimpleName()); + StringBuilder sb = new StringBuilder(ListSchemaNodeImpl.class.getSimpleName()); sb.append("["); sb.append("qname=" + qname); sb.append(", path=" + path);