*/
package org.opendaylight.yangtools.yang.parser.builder.impl;
-import java.util.*;
-
-import org.opendaylight.yangtools.yang.model.api.*;
+import com.google.common.collect.ImmutableList;
+import java.util.List;
+import java.util.Objects;
+import org.opendaylight.yangtools.yang.model.api.Deviation;
import org.opendaylight.yangtools.yang.model.api.Deviation.Deviate;
-import org.opendaylight.yangtools.yang.parser.builder.api.AbstractBuilder;
-import org.opendaylight.yangtools.yang.parser.util.*;
-
+import org.opendaylight.yangtools.yang.model.api.SchemaPath;
+import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
+import org.opendaylight.yangtools.yang.parser.builder.api.UnknownSchemaNodeBuilder;
+import org.opendaylight.yangtools.yang.parser.builder.util.AbstractBuilder;
+import org.opendaylight.yangtools.yang.parser.util.YangParseException;
+
+/**
+ * @deprecated Pre-Beryllium implementation, scheduled for removal.
+ */
+@Deprecated
public final class DeviationBuilder extends AbstractBuilder {
- private boolean isBuilt;
- private final DeviationImpl instance;
- private final String targetPathStr;
- private SchemaPath targetPath;
+ private DeviationImpl instance;
+ private final SchemaPath targetPath;
+ private Deviate deviate;
+ private String reference;
- DeviationBuilder(final String moduleName, final int line, final String targetPathStr) {
+ DeviationBuilder(final String moduleName, final int line, final SchemaPath targetPath) {
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 = ParserUtils.parseXPathString(targetPathStr);
- instance = new DeviationImpl();
+ this.targetPath = targetPath;
}
@Override
public Deviation build() {
+ if (instance != null) {
+ return instance;
+ }
if (targetPath == null) {
- throw new YangParseException(moduleName, line, "Unresolved deviation target");
+ throw new YangParseException(getModuleName(), getLine(), "Unresolved deviation target");
}
- if (!isBuilt) {
- instance.setTargetPath(targetPath);
-
- // UNKNOWN NODES
- for (UnknownSchemaNodeBuilder b : addedUnknownNodes) {
- unknownNodes.add(b.build());
- }
- Collections.sort(unknownNodes, Comparators.SCHEMA_NODE_COMP);
- instance.addUnknownSchemaNodes(unknownNodes);
+ instance = new DeviationImpl(targetPath);
+ instance.deviate = deviate;
+ instance.reference = reference;
- isBuilt = true;
+ // UNKNOWN NODES
+ for (UnknownSchemaNodeBuilder b : addedUnknownNodes) {
+ unknownNodes.add(b.build());
}
+ instance.unknownNodes = ImmutableList.copyOf(unknownNodes);
return instance;
}
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);
+ this.deviate = Deviate.NOT_SUPPORTED;
} else if ("add".equals(deviate)) {
- instance.setDeviate(Deviate.ADD);
+ this.deviate = Deviate.ADD;
} else if ("replace".equals(deviate)) {
- instance.setDeviate(Deviate.REPLACE);
+ this.deviate = Deviate.REPLACE;
} else if ("delete".equals(deviate)) {
- instance.setDeviate(Deviate.DELETE);
+ this.deviate = Deviate.DELETE;
} else {
- throw new YangParseException(moduleName, line, "Unsupported type of 'deviate' statement: " + deviate);
+ throw new YangParseException(getModuleName(), getLine(), "Unsupported type of 'deviate' statement: " + deviate);
}
}
public void setReference(final String reference) {
- instance.reference = reference;
+ this.reference = reference;
}
@Override
public String toString() {
- return "deviation " + targetPathStr;
+ return "deviation " + targetPath;
}
private static final class DeviationImpl implements Deviation {
- private SchemaPath targetPath;
+ private final SchemaPath targetPath;
private Deviate deviate;
private String reference;
- private final List<UnknownSchemaNode> unknownNodes = new ArrayList<>();
+ private ImmutableList<UnknownSchemaNode> unknownNodes;
- private DeviationImpl() {
+ private DeviationImpl(final SchemaPath targetPath) {
+ this.targetPath = targetPath;
}
@Override
return targetPath;
}
- private void setTargetPath(final SchemaPath targetPath) {
- this.targetPath = targetPath;
- }
-
@Override
public Deviate getDeviate() {
return deviate;
}
- private void setDeviate(final Deviate deviate) {
- this.deviate = deviate;
- }
-
@Override
public String getReference() {
return reference;
@Override
public List<UnknownSchemaNode> getUnknownSchemaNodes() {
- return Collections.unmodifiableList(unknownNodes);
- }
-
- private void addUnknownSchemaNodes(List<UnknownSchemaNode> unknownSchemaNodes) {
- if (unknownSchemaNodes != null) {
- this.unknownNodes.addAll(unknownSchemaNodes);
- }
+ return unknownNodes;
}
@Override
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 + Objects.hashCode(targetPath);
+ result = prime * result + Objects.hashCode(deviate);
+ result = prime * result + Objects.hashCode(reference);
return result;
}
@Override
- public boolean equals(Object obj) {
+ public boolean equals(final Object obj) {
if (this == obj) {
return true;
}
@Override
public String toString() {
- StringBuilder sb = new StringBuilder(DeviationImpl.class.getSimpleName());
- sb.append("[");
- sb.append("targetPath=" + targetPath);
- sb.append(", deviate=" + deviate);
- sb.append(", reference=" + reference);
- sb.append("]");
- return sb.toString();
+ return DeviationImpl.class.getSimpleName() + "[" +
+ "targetPath=" + targetPath +
+ ", deviate=" + deviate +
+ ", reference=" + reference +
+ "]";
}
}