import org.opendaylight.controller.yang.model.api.AugmentationSchema;\r
import org.opendaylight.controller.yang.model.api.SchemaNode;\r
import org.opendaylight.controller.yang.model.api.SchemaPath;\r
+import org.opendaylight.controller.yang.model.api.UnknownSchemaNode;\r
import org.opendaylight.controller.yang.model.api.UsesNode;\r
+import org.opendaylight.controller.yang.parser.builder.api.AbstractBuilder;\r
import org.opendaylight.controller.yang.parser.builder.api.AugmentationSchemaBuilder;\r
+import org.opendaylight.controller.yang.parser.builder.api.Builder;\r
+import org.opendaylight.controller.yang.parser.builder.api.DataNodeContainerBuilder;\r
import org.opendaylight.controller.yang.parser.builder.api.SchemaNodeBuilder;\r
import org.opendaylight.controller.yang.parser.builder.api.UsesNodeBuilder;\r
import org.opendaylight.controller.yang.parser.util.RefineHolder;\r
+import org.opendaylight.controller.yang.parser.util.YangParseException;\r
\r
-public final class UsesNodeBuilderImpl implements UsesNodeBuilder {\r
+public final class UsesNodeBuilderImpl extends AbstractBuilder implements UsesNodeBuilder {\r
private boolean isBuilt;\r
private UsesNodeImpl instance;\r
- private final int line;\r
- private SchemaPath schemaPath;\r
+ private DataNodeContainerBuilder parent;\r
private final String groupingName;\r
private SchemaPath groupingPath;\r
private boolean augmenting;\r
+ private boolean addedByUses;\r
private final Set<AugmentationSchemaBuilder> addedAugments = new HashSet<AugmentationSchemaBuilder>();\r
- private List<SchemaNodeBuilder> refineBuilders = new ArrayList<SchemaNodeBuilder>();\r
- private List<RefineHolder> refines = new ArrayList<RefineHolder>();\r
+ private final List<SchemaNodeBuilder> refineBuilders = new ArrayList<SchemaNodeBuilder>();\r
+ private final List<RefineHolder> refines = new ArrayList<RefineHolder>();\r
\r
- public UsesNodeBuilderImpl(final String groupingName, final int line) {\r
+ public UsesNodeBuilderImpl(final String moduleName, final int line, final String groupingName) {\r
+ super(moduleName, line);\r
this.groupingName = groupingName;\r
- this.line = line;\r
+ }\r
+\r
+ public UsesNodeBuilderImpl(UsesNodeBuilder b) {\r
+ super(b.getModuleName(), b.getLine());\r
+ groupingName = b.getGroupingName();\r
+ parent = b.getParent();\r
+ groupingPath = b.getGroupingPath();\r
+ augmenting = b.isAugmenting();\r
+ addedByUses = b.isAddedByUses();\r
+ addedAugments.addAll(b.getAugmentations());\r
+ refineBuilders.addAll(b.getRefineNodes());\r
+ refines.addAll(b.getRefines());\r
}\r
\r
@Override\r
if (!isBuilt) {\r
instance = new UsesNodeImpl(groupingPath);\r
instance.setAugmenting(augmenting);\r
+ instance.setAddedByUses(addedByUses);\r
\r
// AUGMENTATIONS\r
final Set<AugmentationSchema> augments = new HashSet<AugmentationSchema>();\r
}\r
instance.setRefines(refineNodes);\r
\r
+ // UNKNOWN NODES\r
+ List<UnknownSchemaNode> unknownNodes = new ArrayList<UnknownSchemaNode>();\r
+ for (UnknownSchemaNodeBuilder b : addedUnknownNodes) {\r
+ unknownNodes.add(b.build());\r
+ }\r
+ instance.setUnknownSchemaNodes(unknownNodes);\r
+\r
isBuilt = true;\r
}\r
return instance;\r
}\r
\r
@Override\r
- public int getLine() {\r
- return line;\r
+ public DataNodeContainerBuilder getParent() {\r
+ return parent;\r
}\r
\r
@Override\r
- public void setGroupingPath(SchemaPath groupingPath) {\r
- this.groupingPath = groupingPath;\r
+ public void setParent(Builder parent) {\r
+ if (!(parent instanceof DataNodeContainerBuilder)) {\r
+ throw new YangParseException(moduleName, line, "Unresolved parent of uses '" + groupingName + "'.");\r
+ }\r
+ this.parent = (DataNodeContainerBuilder) parent;\r
}\r
\r
@Override\r
- public SchemaPath getPath() {\r
- return schemaPath;\r
+ public SchemaPath getGroupingPath() {\r
+ return groupingPath;\r
}\r
\r
@Override\r
- public void setPath(SchemaPath path) {\r
- this.schemaPath = path;\r
+ public void setGroupingPath(SchemaPath groupingPath) {\r
+ this.groupingPath = groupingPath;\r
}\r
\r
@Override\r
this.augmenting = augmenting;\r
}\r
\r
+ @Override\r
+ public boolean isAddedByUses() {\r
+ return addedByUses;\r
+ }\r
+\r
+ @Override\r
+ public void setAddedByUses(final boolean addedByUses) {\r
+ this.addedByUses = addedByUses;\r
+ }\r
+\r
@Override\r
public List<SchemaNodeBuilder> getRefineNodes() {\r
return refineBuilders;\r
refines.add(refine);\r
}\r
\r
+ @Override\r
+ public int hashCode() {\r
+ final int prime = 31;\r
+ int result = 1;\r
+ result = prime * result + ((groupingName == null) ? 0 : groupingName.hashCode());\r
+ return result;\r
+ }\r
+\r
+ @Override\r
+ public boolean equals(Object obj) {\r
+ if (this == obj)\r
+ return true;\r
+ if (obj == null)\r
+ return false;\r
+ if (getClass() != obj.getClass())\r
+ return false;\r
+ UsesNodeBuilderImpl other = (UsesNodeBuilderImpl) obj;\r
+ if (groupingName == null) {\r
+ if (other.groupingName != null)\r
+ return false;\r
+ } else if (!groupingName.equals(other.groupingName))\r
+ return false;\r
\r
- private final class UsesNodeImpl implements UsesNode {\r
+ if (parent == null) {\r
+ if (other.parent != null)\r
+ return false;\r
+ } else if (!parent.equals(other.parent))\r
+ return false;\r
+ if (refines == null) {\r
+ if (other.refines != null)\r
+ return false;\r
+ } else if (!refines.equals(other.refines))\r
+ return false;\r
+ return true;\r
+ }\r
+\r
+ @Override\r
+ public String toString() {\r
+ return "uses '" + groupingName + "'";\r
+ }\r
+\r
+ public final class UsesNodeImpl implements UsesNode {\r
private final SchemaPath groupingPath;\r
private Set<AugmentationSchema> augmentations = Collections.emptySet();\r
private boolean augmenting;\r
+ private boolean addedByUses;\r
private Map<SchemaPath, SchemaNode> refines = Collections.emptyMap();\r
+ private List<UnknownSchemaNode> unknownNodes = Collections.emptyList();\r
\r
private UsesNodeImpl(final SchemaPath groupingPath) {\r
this.groupingPath = groupingPath;\r
return augmentations;\r
}\r
\r
- private void setAugmentations(\r
- final Set<AugmentationSchema> augmentations) {\r
+ private void setAugmentations(final Set<AugmentationSchema> augmentations) {\r
if (augmentations != null) {\r
this.augmentations = augmentations;\r
}\r
this.augmenting = augmenting;\r
}\r
\r
+ @Override\r
+ public boolean isAddedByUses() {\r
+ return addedByUses;\r
+ }\r
+\r
+ private void setAddedByUses(final boolean addedByUses) {\r
+ this.addedByUses = addedByUses;\r
+ }\r
+\r
@Override\r
public Map<SchemaPath, SchemaNode> getRefines() {\r
return refines;\r
}\r
}\r
\r
+ public List<UnknownSchemaNode> getUnknownSchemaNodes() {\r
+ return unknownNodes;\r
+ }\r
+\r
+ private void setUnknownSchemaNodes(List<UnknownSchemaNode> unknownSchemaNodes) {\r
+ if (unknownSchemaNodes != null) {\r
+ this.unknownNodes = unknownSchemaNodes;\r
+ }\r
+ }\r
+\r
+ public UsesNodeBuilder toBuilder() {\r
+ return UsesNodeBuilderImpl.this;\r
+ }\r
+\r
@Override\r
public int hashCode() {\r
final int prime = 31;\r
int result = 1;\r
- result = prime * result\r
- + ((groupingPath == null) ? 0 : groupingPath.hashCode());\r
- result = prime * result\r
- + ((augmentations == null) ? 0 : augmentations.hashCode());\r
+ result = prime * result + ((groupingPath == null) ? 0 : groupingPath.hashCode());\r
+ result = prime * result + ((augmentations == null) ? 0 : augmentations.hashCode());\r
result = prime * result + (augmenting ? 1231 : 1237);\r
return result;\r
}\r
\r
@Override\r
public String toString() {\r
- StringBuilder sb = new StringBuilder(\r
- UsesNodeImpl.class.getSimpleName());\r
+ StringBuilder sb = new StringBuilder(UsesNodeImpl.class.getSimpleName());\r
sb.append("[groupingPath=" + groupingPath + "]");\r
return sb.toString();\r
}\r
}\r
+\r
}\r