*/
package org.opendaylight.controller.yang.parser.builder.impl;
+import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
+import java.util.List;
import java.util.Map;
import java.util.Set;
import org.opendaylight.controller.yang.model.api.SchemaPath;
import org.opendaylight.controller.yang.model.api.Status;
import org.opendaylight.controller.yang.model.api.TypeDefinition;
+import org.opendaylight.controller.yang.model.api.UnknownSchemaNode;
import org.opendaylight.controller.yang.model.api.UsesNode;
import org.opendaylight.controller.yang.model.util.RevisionAwareXPathImpl;
import org.opendaylight.controller.yang.parser.builder.api.AugmentationSchemaBuilder;
+import org.opendaylight.controller.yang.parser.builder.api.Builder;
import org.opendaylight.controller.yang.parser.builder.api.DataSchemaNodeBuilder;
import org.opendaylight.controller.yang.parser.builder.api.GroupingBuilder;
import org.opendaylight.controller.yang.parser.builder.api.TypeDefinitionBuilder;
private boolean built;
private final AugmentationSchemaImpl instance;
private final int line;
+ private final Builder parent;
+
+ private String whenCondition;
+ private String description;
+ private String reference;
+ private Status status = Status.CURRENT;
+
private final String augmentTargetStr;
- private SchemaPath augmentTarget;
+ private SchemaPath dirtyAugmentTarget;
private SchemaPath finalAugmentTarget;
- private String whenCondition;
+
private final Set<DataSchemaNodeBuilder> childNodes = new HashSet<DataSchemaNodeBuilder>();
private final Set<GroupingBuilder> groupings = new HashSet<GroupingBuilder>();
private final Set<UsesNodeBuilder> usesNodes = new HashSet<UsesNodeBuilder>();
+ private final List<UnknownSchemaNodeBuilder> addedUnknownNodes = new ArrayList<UnknownSchemaNodeBuilder>();
private boolean resolved;
- AugmentationSchemaBuilderImpl(final String augmentTargetStr, final int line) {
+ AugmentationSchemaBuilderImpl(final String augmentTargetStr, final int line, final Builder parent) {
this.augmentTargetStr = augmentTargetStr;
this.line = line;
+ this.parent = parent;
final SchemaPath targetPath = YangModelBuilderUtil
.parseAugmentPath(augmentTargetStr);
- augmentTarget = targetPath;
+ dirtyAugmentTarget = targetPath;
instance = new AugmentationSchemaImpl(targetPath);
}
return line;
}
+ @Override
+ public Builder getParent() {
+ return parent;
+ }
+
+
@Override
public void addChildNode(DataSchemaNodeBuilder childNode) {
childNodes.add(childNode);
}
@Override
- public Set<DataSchemaNodeBuilder> getChildNodes() {
+ public Set<DataSchemaNode> getChildNodes() {
+ return Collections.emptySet();
+ }
+
+ @Override
+ public Set<DataSchemaNodeBuilder> getChildNodeBuilders() {
return childNodes;
}
@Override
- public Set<GroupingBuilder> getGroupings() {
+ public Set<GroupingDefinition> getGroupings() {
+ return Collections.emptySet();
+ }
+
+ @Override
+ public Set<GroupingBuilder> getGroupingBuilders() {
return groupings;
}
@Override
public AugmentationSchema build() {
if (!built) {
+ instance.setDescription(description);
+ instance.setReference(reference);
+ instance.setStatus(status);
instance.setTargetPath(finalAugmentTarget);
RevisionAwareXPath whenStmt;
}
instance.setUses(usesNodeDefinitions);
+ // UNKNOWN NODES
+ List<UnknownSchemaNode> unknownNodes = new ArrayList<UnknownSchemaNode>();
+ for (UnknownSchemaNodeBuilder b : addedUnknownNodes) {
+ unknownNodes.add(b.build());
+ }
+ instance.setUnknownSchemaNodes(unknownNodes);
+
built = true;
}
return instance;
}
@Override
- public Set<TypeDefinitionBuilder> getTypeDefinitions() {
+ public Set<TypeDefinitionBuilder> getTypeDefinitionBuilders() {
return Collections.emptySet();
}
@Override
public void addTypedef(TypeDefinitionBuilder type) {
throw new YangParseException(line,
- "Augmentation can not contains type definitions");
+ "Augmentation can not contains typedef statement.");
}
@Override
public void setDescription(String description) {
- instance.setDescription(description);
+ this.description = description;
}
@Override
public void setReference(String reference) {
- instance.setReference(reference);
+ this.reference = reference;
}
@Override
public void setStatus(Status status) {
- instance.setStatus(status);
+ if(status != null) {
+ this.status = status;
+ }
}
@Override
public SchemaPath getTargetPath() {
- return augmentTarget;
+ return dirtyAugmentTarget;
}
@Override
return augmentTargetStr;
}
+ public List<UnknownSchemaNodeBuilder> getUnknownNodes() {
+ return addedUnknownNodes;
+ }
+
+ @Override
+ public void addUnknownSchemaNode(UnknownSchemaNodeBuilder unknownNode) {
+ addedUnknownNodes.add(unknownNode);
+ }
+
@Override
public int hashCode() {
final int prime = 17;
private Map<QName, DataSchemaNode> childNodes = Collections.emptyMap();
private Set<GroupingDefinition> groupings = Collections.emptySet();
private Set<UsesNode> uses = Collections.emptySet();
-
private String description;
private String reference;
private Status status;
+ private List<UnknownSchemaNode> unknownNodes = Collections.emptyList();
private AugmentationSchemaImpl(SchemaPath targetPath) {
this.targetPath = targetPath;
this.status = status;
}
+ public List<UnknownSchemaNode> getUnknownSchemaNodes() {
+ return unknownNodes;
+ }
+
+ private void setUnknownSchemaNodes(
+ List<UnknownSchemaNode> unknownSchemaNodes) {
+ if (unknownSchemaNodes != null) {
+ this.unknownNodes = unknownSchemaNodes;
+ }
+ }
+
@Override
public DataSchemaNode getDataChildByName(QName name) {
return childNodes.get(name);
AugmentationSchemaImpl.class.getSimpleName());
sb.append("[");
sb.append("targetPath=" + targetPath);
- sb.append(", childNodes=" + childNodes.values());
- sb.append(", groupings=" + groupings);
- sb.append(", uses=" + uses);
+ sb.append(", when=" + whenCondition);
sb.append("]");
return sb.toString();
}