+++ /dev/null
-/*\r
- * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.\r
- *\r
- * This program and the accompanying materials are made available under the\r
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
- * and is available at http://www.eclipse.org/legal/epl-v10.html\r
- */\r
-package org.opendaylight.controller.yang.model.parser.builder.impl;\r
-\r
-import java.util.ArrayList;\r
-import java.util.Collections;\r
-import java.util.HashMap;\r
-import java.util.HashSet;\r
-import java.util.List;\r
-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.model.api.UsesNode;\r
-import org.opendaylight.controller.yang.model.parser.builder.api.AugmentationSchemaBuilder;\r
-import org.opendaylight.controller.yang.model.parser.builder.api.Builder;\r
-import org.opendaylight.controller.yang.model.parser.builder.api.SchemaNodeBuilder;\r
-import org.opendaylight.controller.yang.model.parser.builder.api.UsesNodeBuilder;\r
-import org.opendaylight.controller.yang.model.parser.util.RefineHolder;\r
-\r
-final class UsesNodeBuilderImpl implements UsesNodeBuilder, Builder {\r
- private final UsesNodeImpl instance;\r
- private final int line;\r
- private final SchemaPath groupingPath;\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
- 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
-\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
- return instance;\r
- }\r
-\r
- @Override\r
- public int getLine() {\r
- return line;\r
- }\r
-\r
- @Override\r
- public SchemaPath getGroupingPath() {\r
- return groupingPath;\r
- }\r
-\r
- @Override\r
- public void addAugment(final AugmentationSchemaBuilder augmentBuilder) {\r
- addedAugments.add(augmentBuilder);\r
- }\r
-\r
- @Override\r
- public void setAugmenting(final boolean augmenting) {\r
- instance.setAugmenting(augmenting);\r
- }\r
-\r
- @Override\r
- public void addRefineNode(SchemaNodeBuilder refineNode) {\r
- refineBuilders.add(refineNode);\r
- }\r
-\r
- @Override\r
- public List<RefineHolder> getRefines() {\r
- return refines;\r
- }\r
-\r
- @Override\r
- public void addRefine(RefineHolder refine) {\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
- private Set<AugmentationSchema> augmentations = Collections.emptySet();\r
- private boolean augmenting;\r
- private Map<SchemaPath, SchemaNode> refines = Collections.emptyMap();\r
-\r
- private UsesNodeImpl(final SchemaPath groupingPath) {\r
- this.groupingPath = groupingPath;\r
- }\r
-\r
- @Override\r
- public SchemaPath getGroupingPath() {\r
- return groupingPath;\r
- }\r
-\r
- @Override\r
- public Set<AugmentationSchema> getAugmentations() {\r
- return augmentations;\r
- }\r
-\r
- private void setAugmentations(\r
- final Set<AugmentationSchema> augmentations) {\r
- if (augmentations != null) {\r
- this.augmentations = augmentations;\r
- }\r
- }\r
-\r
- @Override\r
- public boolean isAugmenting() {\r
- return augmenting;\r
- }\r
-\r
- private void setAugmenting(final boolean augmenting) {\r
- this.augmenting = augmenting;\r
- }\r
-\r
- @Override\r
- public Map<SchemaPath, SchemaNode> getRefines() {\r
- return refines;\r
- }\r
-\r
- private void setRefines(Map<SchemaPath, SchemaNode> refines) {\r
- if (refines != null) {\r
- this.refines = refines;\r
- }\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 + (augmenting ? 1231 : 1237);\r
- return result;\r
- }\r
-\r
- @Override\r
- public boolean equals(Object obj) {\r
- if (this == obj) {\r
- return true;\r
- }\r
- if (obj == null) {\r
- return false;\r
- }\r
- if (getClass() != obj.getClass()) {\r
- return false;\r
- }\r
- final UsesNodeImpl other = (UsesNodeImpl) obj;\r
- if (groupingPath == null) {\r
- if (other.groupingPath != null) {\r
- return false;\r
- }\r
- } else if (!groupingPath.equals(other.groupingPath)) {\r
- return false;\r
- }\r
- if (augmentations == null) {\r
- if (other.augmentations != null) {\r
- return false;\r
- }\r
- } else if (!augmentations.equals(other.augmentations)) {\r
- return false;\r
- }\r
- if (augmenting != other.augmenting) {\r
- return false;\r
- }\r
- return true;\r
- }\r
-\r
- @Override\r
- public String toString() {\r
- StringBuilder sb = new StringBuilder(\r
- UsesNodeImpl.class.getSimpleName());\r
- sb.append("[groupingPath=" + groupingPath + "]");\r
- return sb.toString();\r
- }\r
- }\r
-}\r