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.YangModelBuilderUtil;
+import org.opendaylight.controller.yang.parser.util.YangParseException;
public class AugmentationSchemaBuilderImpl implements AugmentationSchemaBuilder {
+ private boolean built;
private final AugmentationSchemaImpl instance;
private final int line;
private final String augmentTargetStr;
@Override
public AugmentationSchema build() {
- instance.setTargetPath(finalAugmentTarget);
+ if (!built) {
+ instance.setTargetPath(finalAugmentTarget);
- RevisionAwareXPath whenStmt;
- if (whenCondition == null) {
- whenStmt = null;
- } else {
- whenStmt = new RevisionAwareXPathImpl(whenCondition, false);
- }
- instance.setWhenCondition(whenStmt);
+ RevisionAwareXPath whenStmt;
+ if (whenCondition == null) {
+ whenStmt = null;
+ } else {
+ whenStmt = new RevisionAwareXPathImpl(whenCondition, false);
+ }
+ instance.setWhenCondition(whenStmt);
- // CHILD NODES
- final Map<QName, DataSchemaNode> childs = new HashMap<QName, DataSchemaNode>();
- for (DataSchemaNodeBuilder node : childNodes) {
- childs.put(node.getQName(), node.build());
- }
- instance.setChildNodes(childs);
+ // CHILD NODES
+ final Map<QName, DataSchemaNode> childs = new HashMap<QName, DataSchemaNode>();
+ for (DataSchemaNodeBuilder node : childNodes) {
+ childs.put(node.getQName(), node.build());
+ }
+ instance.setChildNodes(childs);
- // GROUPINGS
- final Set<GroupingDefinition> groupingDefinitions = new HashSet<GroupingDefinition>();
- for (GroupingBuilder builder : groupings) {
- groupingDefinitions.add(builder.build());
- }
- instance.setGroupings(groupingDefinitions);
+ // GROUPINGS
+ final Set<GroupingDefinition> groupingDefinitions = new HashSet<GroupingDefinition>();
+ for (GroupingBuilder builder : groupings) {
+ groupingDefinitions.add(builder.build());
+ }
+ instance.setGroupings(groupingDefinitions);
- // USES
- final Set<UsesNode> usesNodeDefinitions = new HashSet<UsesNode>();
- for (UsesNodeBuilder builder : usesNodes) {
- usesNodeDefinitions.add(builder.build());
- }
- instance.setUses(usesNodeDefinitions);
+ // USES
+ final Set<UsesNode> usesNodeDefinitions = new HashSet<UsesNode>();
+ for (UsesNodeBuilder builder : usesNodes) {
+ usesNodeDefinitions.add(builder.build());
+ }
+ instance.setUses(usesNodeDefinitions);
+ built = true;
+ }
return instance;
}
@Override
public void addTypedef(TypeDefinitionBuilder type) {
- throw new UnsupportedOperationException(
+ throw new YangParseException(line,
"Augmentation can not contains type definitions");
}
public int hashCode() {
final int prime = 17;
int result = 1;
- result = prime * result
+ result = prime
+ * result
+ ((augmentTargetStr == null) ? 0 : augmentTargetStr.hashCode());
result = prime * result
+ ((whenCondition == null) ? 0 : whenCondition.hashCode());
return true;
}
-
- private static class AugmentationSchemaImpl implements AugmentationSchema {
+ private final class AugmentationSchemaImpl implements AugmentationSchema {
private SchemaPath targetPath;
private RevisionAwareXPath whenCondition;
private Map<QName, DataSchemaNode> childNodes = Collections.emptyMap();