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%2FDeviationBuilder.java;h=42347cbba364b35f1129fe8bfa6e52eac1404864;hp=e99f8280e0891a628b3be26ef4517aaa2abd32b8;hb=0df356fd6dd1e24f82a4afaa6c824517d354fb20;hpb=6e8fef270b6dc88f1dedca0c3e607a1a16e6ce2f 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 e99f8280e0..42347cbba3 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 @@ -7,26 +7,61 @@ */ package org.opendaylight.controller.yang.parser.builder.impl; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + import org.opendaylight.controller.yang.model.api.Deviation; 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 class DeviationBuilder implements Builder { - private final DeviationImpl instance; +public final class DeviationBuilder implements Builder { private final int line; + private final String targetPathStr; + private Builder parent; + private boolean isBuilt; + private final DeviationImpl instance; - DeviationBuilder(final String targetPathStr, final int line) { + private SchemaPath targetPath; + private String reference; + private final List addedUnknownNodes = new ArrayList(); + + 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.targetPathStr = targetPathStr; + this.targetPath = ParserListenerUtils.parseAugmentPath(targetPathStr); + instance = new DeviationImpl(); } @Override public Deviation 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; + } + return instance; } @@ -35,6 +70,34 @@ public class DeviationBuilder implements Builder { return line; } + @Override + public Builder getParent() { + return parent; + } + + @Override + public void setParent(final Builder parent) { + this.parent = parent; + } + + @Override + public List getUnknownNodeBuilders() { + return addedUnknownNodes; + } + + @Override + public void addUnknownNodeBuilder(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); @@ -51,16 +114,21 @@ public class DeviationBuilder implements Builder { } public void setReference(final String reference) { - instance.setReference(reference); + this.reference = reference; + } + + @Override + public String toString() { + return "deviation " + targetPathStr; } - private class DeviationImpl implements Deviation { - private final SchemaPath targetPath; + private final class DeviationImpl implements Deviation { + 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 @@ -68,6 +136,10 @@ public class DeviationBuilder implements Builder { return targetPath; } + private void setTargetPath(final SchemaPath targetPath) { + this.targetPath = targetPath; + } + @Override public Deviate getDeviate() { return deviate; @@ -86,6 +158,17 @@ public class DeviationBuilder implements Builder { this.reference = reference; } + @Override + public List getUnknownSchemaNodes() { + return unknownNodes; + } + + private void setUnknownSchemaNodes(List unknownSchemaNodes) { + if (unknownSchemaNodes != null) { + this.unknownNodes = unknownSchemaNodes; + } + } + @Override public int hashCode() { final int prime = 31;