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=3bc9879de7213cf919394490098e678bf6b22d22;hb=ac39de5a9b96438d30df745895454c02e15e51e3;hp=9b52d61c88085e822a780f569e97be05003f1ed9;hpb=17b979b07eb99462a250a1c9d85ff676330bb4e4;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 9b52d61c88..3bc9879de7 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 @@ -15,55 +15,61 @@ 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.builder.api.AbstractBuilder; import org.opendaylight.controller.yang.parser.util.Comparators; -import org.opendaylight.controller.yang.parser.util.YangModelBuilderUtil; +import org.opendaylight.controller.yang.parser.util.ParserListenerUtils; import org.opendaylight.controller.yang.parser.util.YangParseException; -public final class DeviationBuilder implements Builder { - private final int line; - private Builder parent; +public final class DeviationBuilder extends AbstractBuilder { + private final String targetPathStr; + 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) { - this.line = line; - final SchemaPath targetPath = YangModelBuilderUtil - .parseAugmentPath(targetPathStr); - instance = new DeviationImpl(targetPath); + DeviationBuilder(final String moduleName, final int line, final String targetPathStr) { + super(moduleName, line); + if (!targetPathStr.startsWith("/")) { + throw new YangParseException(moduleName, line, + "Deviation argument string must be an absolute schema node identifier."); + } + this.targetPathStr = targetPathStr; + 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(moduleName, line, "Unresolved deviation target"); } - Collections.sort(unknownNodes, Comparators.SCHEMA_NODE_COMP); - instance.setUnknownSchemaNodes(unknownNodes); - return instance; - } + if (!isBuilt) { + instance.setTargetPath(targetPath); + instance.setReference(reference); - @Override - public int getLine() { - return line; - } + // UNKNOWN NODES + List unknownNodes = new ArrayList(); + for (UnknownSchemaNodeBuilder b : addedUnknownNodes) { + unknownNodes.add(b.build()); + } + Collections.sort(unknownNodes, Comparators.SCHEMA_NODE_COMP); + instance.setUnknownSchemaNodes(unknownNodes); - @Override - public Builder getParent() { - return parent; + isBuilt = true; + } + + return instance; } - @Override - public void setParent(final Builder parent) { - this.parent = parent; + public SchemaPath getTargetPath() { + return targetPath; } - @Override - public void addUnknownSchemaNode(UnknownSchemaNodeBuilder unknownNode) { - addedUnknownNodes.add(unknownNode); + public void setTargetPath(final SchemaPath targetPath) { + this.targetPath = targetPath; } public void setDeviate(final String deviate) { @@ -76,23 +82,26 @@ public final class DeviationBuilder implements Builder { } else if ("delete".equals(deviate)) { instance.setDeviate(Deviate.DELETE); } else { - throw new YangParseException(line, - "Unsupported type of 'deviate' statement: " + deviate); + throw new YangParseException(moduleName, line, "Unsupported type of 'deviate' statement: " + deviate); } } public void setReference(final String reference) { - instance.setReference(reference); + this.reference = reference; + } + + @Override + public String toString() { + return "deviation " + targetPathStr; } 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 @@ -100,6 +109,10 @@ public final class DeviationBuilder implements Builder { return targetPath; } + private void setTargetPath(final SchemaPath targetPath) { + this.targetPath = targetPath; + } + @Override public Deviate getDeviate() { return deviate; @@ -118,6 +131,7 @@ public final class DeviationBuilder implements Builder { this.reference = reference; } + @Override public List getUnknownSchemaNodes() { return unknownNodes; } @@ -132,12 +146,9 @@ public final class DeviationBuilder implements Builder { public int hashCode() { final int prime = 31; int result = 1; - result = prime * result - + ((targetPath == null) ? 0 : targetPath.hashCode()); - result = prime * result - + ((deviate == null) ? 0 : deviate.hashCode()); - result = prime * result - + ((reference == null) ? 0 : reference.hashCode()); + result = prime * result + ((targetPath == null) ? 0 : targetPath.hashCode()); + result = prime * result + ((deviate == null) ? 0 : deviate.hashCode()); + result = prime * result + ((reference == null) ? 0 : reference.hashCode()); return result; } @@ -179,8 +190,7 @@ public final class DeviationBuilder implements Builder { @Override public String toString() { - StringBuilder sb = new StringBuilder( - DeviationImpl.class.getSimpleName()); + StringBuilder sb = new StringBuilder(DeviationImpl.class.getSimpleName()); sb.append("["); sb.append("targetPath=" + targetPath); sb.append(", deviate=" + deviate);