X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;ds=sidebyside;f=opendaylight%2Fsal%2Fyang-prototype%2Fcode-generator%2Fyang-model-parser-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fyang%2Fparser%2Fbuilder%2Fimpl%2FDeviationBuilder.java;h=aee5587a365ffbb2b34ecf5428c7457ead0c8ee1;hb=c04f8eba6fd7e6939e022071deba887bbbddffee;hp=790275cff404a11c551ff96edfbe0623946a448b;hpb=3c8c7171aa9a2fdf322b85cf104ae551665aa0d8;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/DeviationBuilder.java b/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/main/java/org/opendaylight/controller/yang/parser/builder/impl/DeviationBuilder.java index 790275cff4..aee5587a36 100644 --- a/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/main/java/org/opendaylight/controller/yang/parser/builder/impl/DeviationBuilder.java +++ b/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/main/java/org/opendaylight/controller/yang/parser/builder/impl/DeviationBuilder.java @@ -16,29 +16,49 @@ import org.opendaylight.controller.yang.model.api.Deviation.Deviate; import org.opendaylight.controller.yang.model.api.SchemaPath; import org.opendaylight.controller.yang.model.api.UnknownSchemaNode; import org.opendaylight.controller.yang.parser.builder.api.Builder; -import org.opendaylight.controller.yang.parser.util.YangModelBuilderUtil; +import org.opendaylight.controller.yang.parser.util.Comparators; +import org.opendaylight.controller.yang.parser.util.ParserListenerUtils; import org.opendaylight.controller.yang.parser.util.YangParseException; public final class DeviationBuilder implements Builder { - private final DeviationImpl instance; private final int line; + private Builder parent; + private boolean isBuilt; + private final DeviationImpl instance; + + private SchemaPath targetPath; + private String reference; private final List addedUnknownNodes = new ArrayList(); - DeviationBuilder(final String targetPathStr, final int line) { + DeviationBuilder(final int line, final String targetPathStr) { + if(!targetPathStr.startsWith("/")) { + throw new YangParseException(line, "Deviation argument string must be an absolute schema node identifier."); + } this.line = line; - final SchemaPath targetPath = YangModelBuilderUtil - .parseAugmentPath(targetPathStr); - instance = new DeviationImpl(targetPath); + this.targetPath = ParserListenerUtils.parseAugmentPath(targetPathStr); + instance = new DeviationImpl(); } @Override public Deviation build() { - // UNKNOWN NODES - List unknownNodes = new ArrayList(); - for (UnknownSchemaNodeBuilder b : addedUnknownNodes) { - unknownNodes.add(b.build()); + if(targetPath == null) { + throw new YangParseException(line, "Unresolved deviation target"); + } + + if(!isBuilt) { + instance.setTargetPath(targetPath); + instance.setReference(reference); + + // UNKNOWN NODES + List unknownNodes = new ArrayList(); + for (UnknownSchemaNodeBuilder b : addedUnknownNodes) { + unknownNodes.add(b.build()); + } + Collections.sort(unknownNodes, Comparators.SCHEMA_NODE_COMP); + instance.setUnknownSchemaNodes(unknownNodes); + + isBuilt = true; } - instance.setUnknownSchemaNodes(unknownNodes); return instance; } @@ -48,11 +68,29 @@ public final class DeviationBuilder implements Builder { return line; } + @Override + public Builder getParent() { + return parent; + } + + @Override + public void setParent(final Builder parent) { + this.parent = parent; + } + @Override public void addUnknownSchemaNode(UnknownSchemaNodeBuilder unknownNode) { addedUnknownNodes.add(unknownNode); } + public SchemaPath getTargetPath() { + return targetPath; + } + + public void setTargetPath(final SchemaPath targetPath) { + this.targetPath = targetPath; + } + public void setDeviate(final String deviate) { if ("not-supported".equals(deviate)) { instance.setDeviate(Deviate.NOT_SUPPORTED); @@ -69,17 +107,16 @@ public final class DeviationBuilder implements Builder { } public void setReference(final String reference) { - instance.setReference(reference); + this.reference = reference; } private final class DeviationImpl implements Deviation { - private final SchemaPath targetPath; + private SchemaPath targetPath; private Deviate deviate; private String reference; private List unknownNodes = Collections.emptyList(); - private DeviationImpl(final SchemaPath targetPath) { - this.targetPath = targetPath; + private DeviationImpl() { } @Override @@ -87,6 +124,10 @@ public final class DeviationBuilder implements Builder { return targetPath; } + private void setTargetPath(final SchemaPath targetPath) { + this.targetPath = targetPath; + } + @Override public Deviate getDeviate() { return deviate;