import java.util.Map;\r
import java.util.Set;\r
\r
-import org.opendaylight.controller.yang.common.QName;\r
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.parser.builder.api.UsesNodeBuilder;\r
import org.opendaylight.controller.yang.parser.util.RefineHolder;\r
\r
-final class UsesNodeBuilderImpl implements UsesNodeBuilder {\r
- private final UsesNodeImpl instance;\r
+public final class UsesNodeBuilderImpl implements UsesNodeBuilder {\r
+ private boolean isBuilt;\r
+ private UsesNodeImpl instance;\r
private final int line;\r
- private final SchemaPath groupingPath;\r
+ private SchemaPath schemaPath;\r
+ private final String groupingName;\r
+ private SchemaPath groupingPath;\r
+ private boolean augmenting;\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
\r
- UsesNodeBuilderImpl(final String groupingPathStr, final int line) {\r
- this.groupingPath = parseUsesPath(groupingPathStr);\r
+ public UsesNodeBuilderImpl(final String groupingName, final int line) {\r
+ this.groupingName = groupingName;\r
this.line = line;\r
- instance = new UsesNodeImpl(groupingPath);\r
}\r
\r
@Override\r
public UsesNode build() {\r
- // AUGMENTATIONS\r
- final Set<AugmentationSchema> augments = new HashSet<AugmentationSchema>();\r
- for (AugmentationSchemaBuilder builder : addedAugments) {\r
- augments.add(builder.build());\r
- }\r
- instance.setAugmentations(augments);\r
+ if (!isBuilt) {\r
+ instance = new UsesNodeImpl(groupingPath);\r
+ instance.setAugmenting(augmenting);\r
+\r
+ // AUGMENTATIONS\r
+ final Set<AugmentationSchema> augments = new HashSet<AugmentationSchema>();\r
+ for (AugmentationSchemaBuilder builder : addedAugments) {\r
+ augments.add(builder.build());\r
+ }\r
+ instance.setAugmentations(augments);\r
\r
- // REFINES\r
- final Map<SchemaPath, SchemaNode> refineNodes = new HashMap<SchemaPath, SchemaNode>();\r
- for (SchemaNodeBuilder refineBuilder : refineBuilders) {\r
- SchemaNode refineNode = refineBuilder.build();\r
- refineNodes.put(refineNode.getPath(), refineNode);\r
- }\r
- instance.setRefines(refineNodes);\r
+ // REFINES\r
+ final Map<SchemaPath, SchemaNode> refineNodes = new HashMap<SchemaPath, SchemaNode>();\r
+ for (SchemaNodeBuilder refineBuilder : refineBuilders) {\r
+ SchemaNode refineNode = refineBuilder.build();\r
+ refineNodes.put(refineNode.getPath(), refineNode);\r
+ }\r
+ instance.setRefines(refineNodes);\r
\r
+ isBuilt = true;\r
+ }\r
return instance;\r
}\r
\r
}\r
\r
@Override\r
- public SchemaPath getGroupingPath() {\r
- return groupingPath;\r
+ public void setGroupingPath(SchemaPath groupingPath) {\r
+ this.groupingPath = groupingPath;\r
+ }\r
+\r
+ @Override\r
+ public SchemaPath getPath() {\r
+ return schemaPath;\r
+ }\r
+\r
+ @Override\r
+ public void setPath(SchemaPath path) {\r
+ this.schemaPath = path;\r
+ }\r
+\r
+ @Override\r
+ public String getGroupingName() {\r
+ return groupingName;\r
+ }\r
+\r
+ @Override\r
+ public Set<AugmentationSchemaBuilder> getAugmentations() {\r
+ return addedAugments;\r
}\r
\r
@Override\r
addedAugments.add(augmentBuilder);\r
}\r
\r
+ @Override\r
+ public boolean isAugmenting() {\r
+ return augmenting;\r
+ }\r
+\r
@Override\r
public void setAugmenting(final boolean augmenting) {\r
- instance.setAugmenting(augmenting);\r
+ this.augmenting = augmenting;\r
+ }\r
+\r
+ @Override\r
+ public List<SchemaNodeBuilder> getRefineNodes() {\r
+ return refineBuilders;\r
}\r
\r
@Override\r
refines.add(refine);\r
}\r
\r
- private SchemaPath parseUsesPath(final String groupingPathStr) {\r
- final String[] splittedPath = groupingPathStr.split("/");\r
- final List<QName> path = new ArrayList<QName>();\r
- QName name;\r
- for (String pathElement : splittedPath) {\r
- final String[] splittedElement = pathElement.split(":");\r
- if (splittedElement.length == 1) {\r
- name = new QName(null, null, null, splittedElement[0]);\r
- } else {\r
- name = new QName(null, null, splittedElement[0],\r
- splittedElement[1]);\r
- }\r
- path.add(name);\r
- }\r
- final boolean absolute = groupingPathStr.startsWith("/");\r
- return new SchemaPath(path, absolute);\r
- }\r
\r
private final class UsesNodeImpl implements UsesNode {\r
private final SchemaPath groupingPath;\r