X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fsal%2Fyang-prototype%2Fcode-generator%2Fyang-model-parser-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fyang%2Fparser%2Fbuilder%2Fimpl%2FNotificationBuilder.java;h=14b701fe9eb9dd412a76665bdad0d471e45df1db;hp=f75b97d1d73146762e9983399a59857b98b8c37d;hb=0df356fd6dd1e24f82a4afaa6c824517d354fb20;hpb=448cfcae3d08a628677676d0751a510b2a41eae1 diff --git a/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/main/java/org/opendaylight/controller/yang/parser/builder/impl/NotificationBuilder.java b/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/main/java/org/opendaylight/controller/yang/parser/builder/impl/NotificationBuilder.java index f75b97d1d7..14b701fe9e 100644 --- a/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/main/java/org/opendaylight/controller/yang/parser/builder/impl/NotificationBuilder.java +++ b/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/main/java/org/opendaylight/controller/yang/parser/builder/impl/NotificationBuilder.java @@ -9,67 +9,75 @@ package org.opendaylight.controller.yang.parser.builder.impl; import java.util.ArrayList; import java.util.Collections; -import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.TreeMap; +import java.util.TreeSet; import org.opendaylight.controller.yang.common.QName; +import org.opendaylight.controller.yang.model.api.AugmentationSchema; import org.opendaylight.controller.yang.model.api.DataSchemaNode; import org.opendaylight.controller.yang.model.api.GroupingDefinition; import org.opendaylight.controller.yang.model.api.NotificationDefinition; -import org.opendaylight.controller.yang.model.api.SchemaNode; import org.opendaylight.controller.yang.model.api.SchemaPath; 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.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.DataSchemaNodeBuilder; import org.opendaylight.controller.yang.parser.builder.api.GroupingBuilder; import org.opendaylight.controller.yang.parser.builder.api.SchemaNodeBuilder; -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; +import org.opendaylight.controller.yang.parser.util.Comparators; -public final class NotificationBuilder extends AbstractDataNodeContainerBuilder - implements TypeDefinitionAwareBuilder, SchemaNodeBuilder { +public final class NotificationBuilder extends AbstractDataNodeContainerBuilder implements SchemaNodeBuilder, + AugmentationTargetBuilder { private boolean isBuilt; private final NotificationDefinitionImpl instance; - private final int line; private SchemaPath schemaPath; + private String description; + private String reference; + private Status status = Status.CURRENT; private final Set addedTypedefs = new HashSet(); private final Set addedUsesNodes = new HashSet(); - private final List addedUnknownNodes = new ArrayList(); + private Set augmentations; + private final Set addedAugmentations = new HashSet(); - NotificationBuilder(final QName qname, final int line) { - super(qname); - this.line = line; + NotificationBuilder(final int line, final QName qname) { + super(line, qname); instance = new NotificationDefinitionImpl(qname); } @Override - public SchemaNode build() { + public NotificationDefinition build() { if (!isBuilt) { instance.setPath(schemaPath); + instance.setDescription(description); + instance.setReference(reference); + instance.setStatus(status); // CHILD NODES - final Map childs = new HashMap(); - for (DataSchemaNodeBuilder node : childNodes) { + final Map childs = new TreeMap(Comparators.QNAME_COMP); + for (DataSchemaNodeBuilder node : addedChildNodes) { childs.put(node.getQName(), node.build()); } instance.setChildNodes(childs); // GROUPINGS - final Set groupingDefs = new HashSet(); - for (GroupingBuilder builder : groupings) { + final Set groupingDefs = new TreeSet(Comparators.SCHEMA_NODE_COMP); + for (GroupingBuilder builder : addedGroupings) { groupingDefs.add(builder.build()); } instance.setGroupings(groupingDefs); // TYPEDEFS - final Set> typedefs = new HashSet>(); + final Set> typedefs = new TreeSet>(Comparators.SCHEMA_NODE_COMP); for (TypeDefinitionBuilder entry : addedTypedefs) { typedefs.add(entry.build()); } @@ -82,11 +90,21 @@ public final class NotificationBuilder extends AbstractDataNodeContainerBuilder } instance.setUses(uses); + // 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()); } + Collections.sort(unknownNodes, Comparators.SCHEMA_NODE_COMP); instance.setUnknownSchemaNodes(unknownNodes); isBuilt = true; @@ -96,12 +114,13 @@ public final class NotificationBuilder extends AbstractDataNodeContainerBuilder } @Override - public int getLine() { - return line; + public void rebuild() { + isBuilt = false; + build(); } @Override - public Set getTypeDefinitions() { + public Set getTypeDefinitionBuilders() { return addedTypedefs; } @@ -125,24 +144,49 @@ public final class NotificationBuilder extends AbstractDataNodeContainerBuilder this.schemaPath = schemaPath; } + @Override + public String getDescription() { + return description; + } + @Override public void setDescription(final String description) { - instance.setDescription(description); + this.description = description; + } + + @Override + public String getReference() { + return reference; } @Override public void setReference(final String reference) { - instance.setReference(reference); + this.reference = reference; + } + + @Override + public Status getStatus() { + return status; } @Override public void setStatus(final Status status) { - instance.setStatus(status); + if (status != null) { + this.status = status; + } + } + + public Set getAugmentations() { + return addedAugmentations; } @Override - public void addUnknownSchemaNode(final UnknownSchemaNodeBuilder unknownNode) { - addedUnknownNodes.add(unknownNode); + public void addAugmentation(AugmentationSchemaBuilder augment) { + addedAugmentations.add(augment); + } + + public void setAugmentations(final Set augmentations) { + this.augmentations = augmentations; } @Override @@ -150,7 +194,7 @@ public final class NotificationBuilder extends AbstractDataNodeContainerBuilder return "notification " + getQName().getLocalName(); } - private final class NotificationDefinitionImpl implements NotificationDefinition { + public final class NotificationDefinitionImpl implements NotificationDefinition { private final QName qname; private SchemaPath path; private String description; @@ -160,6 +204,7 @@ public final class NotificationBuilder extends AbstractDataNodeContainerBuilder private Set groupings = Collections.emptySet(); private Set> typeDefinitions = Collections.emptySet(); private Set uses = Collections.emptySet(); + private Set augmentations = Collections.emptySet(); private List unknownNodes = Collections.emptyList(); private NotificationDefinitionImpl(final QName qname) { @@ -247,20 +292,29 @@ public final class NotificationBuilder extends AbstractDataNodeContainerBuilder return typeDefinitions; } - private void setTypeDefinitions( - final Set> typeDefinitions) { + private void setTypeDefinitions(final Set> typeDefinitions) { if (typeDefinitions != null) { this.typeDefinitions = typeDefinitions; } } + @Override + public Set getAvailableAugmentations() { + return augmentations; + } + + private void setAvailableAugmentations(Set augmentations) { + if (augmentations != null) { + this.augmentations = augmentations; + } + } + @Override public List getUnknownSchemaNodes() { return unknownNodes; } - private void setUnknownSchemaNodes( - final List unknownNodes) { + private void setUnknownSchemaNodes(final List unknownNodes) { if (unknownNodes != null) { this.unknownNodes = unknownNodes; } @@ -283,6 +337,10 @@ public final class NotificationBuilder extends AbstractDataNodeContainerBuilder return result; } + public NotificationBuilder toBuilder() { + return NotificationBuilder.this; + } + @Override public int hashCode() { final int prime = 31; @@ -323,8 +381,7 @@ public final class NotificationBuilder extends AbstractDataNodeContainerBuilder @Override public String toString() { - StringBuilder sb = new StringBuilder( - NotificationDefinitionImpl.class.getSimpleName()); + StringBuilder sb = new StringBuilder(NotificationDefinitionImpl.class.getSimpleName()); sb.append("[qname=" + qname + ", path=" + path + "]"); return sb.toString(); }