2 * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.controller.yang.model.parser.util;
10 import java.util.ArrayList;
11 import java.util.List;
13 import org.opendaylight.controller.yang.common.QName;
14 import org.opendaylight.controller.yang.model.api.MustDefinition;
15 import org.opendaylight.controller.yang.model.api.SchemaPath;
16 import org.opendaylight.controller.yang.model.api.TypeDefinition;
17 import org.opendaylight.controller.yang.model.parser.builder.api.AugmentationSchemaBuilder;
18 import org.opendaylight.controller.yang.model.parser.builder.api.DataSchemaNodeBuilder;
19 import org.opendaylight.controller.yang.model.parser.builder.api.GroupingBuilder;
20 import org.opendaylight.controller.yang.model.parser.builder.api.TypeDefinitionBuilder;
21 import org.opendaylight.controller.yang.model.parser.builder.api.UsesNodeBuilder;
22 import org.opendaylight.controller.yang.model.parser.builder.impl.AnyXmlBuilder;
23 import org.opendaylight.controller.yang.model.parser.builder.impl.ChoiceBuilder;
24 import org.opendaylight.controller.yang.model.parser.builder.impl.ChoiceCaseBuilder;
25 import org.opendaylight.controller.yang.model.parser.builder.impl.ConstraintsBuilder;
26 import org.opendaylight.controller.yang.model.parser.builder.impl.ContainerSchemaNodeBuilder;
27 import org.opendaylight.controller.yang.model.parser.builder.impl.LeafListSchemaNodeBuilder;
28 import org.opendaylight.controller.yang.model.parser.builder.impl.LeafSchemaNodeBuilder;
29 import org.opendaylight.controller.yang.model.parser.builder.impl.ListSchemaNodeBuilder;
30 import org.opendaylight.controller.yang.model.parser.builder.impl.UnknownSchemaNodeBuilder;
32 public final class ParserUtils {
34 private ParserUtils() {
37 public static SchemaPath parseUsesPath(final String usesPath) {
38 final boolean absolute = usesPath.startsWith("/");
39 final String[] splittedPath = usesPath.split("/");
40 final List<QName> path = new ArrayList<QName>();
42 for (String pathElement : splittedPath) {
43 if (pathElement.length() > 0) {
44 final String[] splittedElement = pathElement.split(":");
45 if (splittedElement.length == 1) {
46 name = new QName(null, null, null, splittedElement[0]);
48 name = new QName(null, null, splittedElement[0],
54 return new SchemaPath(path, absolute);
57 public static LeafSchemaNodeBuilder copyLeafBuilder(
58 final LeafSchemaNodeBuilder old) {
59 final LeafSchemaNodeBuilder copy = new LeafSchemaNodeBuilder(
61 final TypeDefinition<?> type = old.getType();
64 copy.setType(old.getTypedef());
68 copy.setPath(old.getPath());
69 copyConstraints(old, copy);
70 for (UnknownSchemaNodeBuilder unknown : old.getUnknownNodes()) {
71 copy.addUnknownSchemaNode(unknown);
73 copy.setDescription(old.getDescription());
74 copy.setReference(old.getReference());
75 copy.setStatus(old.getStatus());
76 copy.setAugmenting(old.isAugmenting());
77 copy.setConfiguration(old.isConfiguration());
78 copy.setDefaultStr(old.getDefaultStr());
79 copy.setUnits(old.getUnits());
83 public static ContainerSchemaNodeBuilder copyContainerBuilder(
84 final ContainerSchemaNodeBuilder old) {
85 final ContainerSchemaNodeBuilder copy = new ContainerSchemaNodeBuilder(
87 copy.setPath(old.getPath());
88 copyConstraints(old, copy);
89 for (UnknownSchemaNodeBuilder unknown : old.getUnknownNodes()) {
90 copy.addUnknownSchemaNode(unknown);
92 for (DataSchemaNodeBuilder child : old.getChildNodes()) {
93 copy.addChildNode(child);
95 for (GroupingBuilder grouping : old.getGroupings()) {
96 copy.addGrouping(grouping);
98 for (TypeDefinitionBuilder typedef : old.getTypedefs()) {
99 copy.addTypedef(typedef);
101 for (AugmentationSchemaBuilder augment : old.getAugmentations()) {
102 copy.addAugmentation(augment);
104 for (UsesNodeBuilder use : old.getUsesNodes()) {
105 copy.addUsesNode(use);
107 for (UnknownSchemaNodeBuilder unknown : old.getUnknownNodes()) {
108 copy.addUnknownSchemaNode(unknown);
110 copy.setDescription(old.getDescription());
111 copy.setReference(old.getReference());
112 copy.setStatus(old.getStatus());
113 copy.setAugmenting(old.isAugmenting());
114 copy.setConfiguration(old.isConfiguration());
115 copy.setPresence(old.isPresence());
119 public static ListSchemaNodeBuilder copyListBuilder(
120 final ListSchemaNodeBuilder old) {
121 final ListSchemaNodeBuilder copy = new ListSchemaNodeBuilder(
123 copy.setPath(old.getPath());
124 copyConstraints(old, copy);
125 for (UnknownSchemaNodeBuilder unknown : old.getUnknownNodes()) {
126 copy.addUnknownSchemaNode(unknown);
128 for (DataSchemaNodeBuilder child : old.getChildNodes()) {
129 copy.addChildNode(child);
131 for (GroupingBuilder grouping : old.getGroupings()) {
132 copy.addGrouping(grouping);
134 for (TypeDefinitionBuilder typedef : old.getTypedefs()) {
135 copy.addTypedef(typedef);
137 for (AugmentationSchemaBuilder augment : old.getAugmentations()) {
138 copy.addAugmentation(augment);
140 for (UsesNodeBuilder use : old.getUsesNodes()) {
141 copy.addUsesNode(use);
143 for (UnknownSchemaNodeBuilder unknown : old.getUnknownNodes()) {
144 copy.addUnknownSchemaNode(unknown);
146 copy.setDescription(old.getDescription());
147 copy.setReference(old.getReference());
148 copy.setStatus(old.getStatus());
149 copy.setAugmenting(old.isAugmenting());
150 copy.setConfiguration(old.isConfiguration());
151 copy.setUserOrdered(old.isUserOrdered());
155 public static LeafListSchemaNodeBuilder copyLeafListBuilder(
156 final LeafListSchemaNodeBuilder old) {
157 final LeafListSchemaNodeBuilder copy = new LeafListSchemaNodeBuilder(
159 copy.setPath(old.getPath());
160 copyConstraints(old, copy);
161 final TypeDefinition<?> type = old.getType();
163 copy.setType(old.getTypedef());
167 for (UnknownSchemaNodeBuilder unknown : old.getUnknownNodes()) {
168 copy.addUnknownSchemaNode(unknown);
170 for (UnknownSchemaNodeBuilder unknown : old.getUnknownNodes()) {
171 copy.addUnknownSchemaNode(unknown);
173 copy.setDescription(old.getDescription());
174 copy.setReference(old.getReference());
175 copy.setStatus(old.getStatus());
176 copy.setAugmenting(old.isAugmenting());
177 copy.setConfiguration(old.isConfiguration());
178 copy.setUserOrdered(old.isUserOrdered());
182 public static ChoiceBuilder copyChoiceBuilder(final ChoiceBuilder old) {
183 final ChoiceBuilder copy = new ChoiceBuilder(old.getQName());
184 copy.setPath(old.getPath());
185 copyConstraints(old, copy);
186 for (ChoiceCaseBuilder caseBuilder : old.getCases()) {
187 copy.addChildNode(caseBuilder);
189 for (UnknownSchemaNodeBuilder unknown : old.getUnknownNodes()) {
190 copy.addUnknownSchemaNode(unknown);
192 for (TypeDefinitionBuilder typedef : old.getTypedefs()) {
193 copy.addTypedef(typedef);
195 for (UsesNodeBuilder use : old.getUsesNodes()) {
196 copy.addUsesNode(use);
198 for (UnknownSchemaNodeBuilder unknown : old.getUnknownNodes()) {
199 copy.addUnknownSchemaNode(unknown);
201 copy.setDefaultCase(old.getDefaultCase());
202 copy.setDescription(old.getDescription());
203 copy.setReference(old.getReference());
204 copy.setStatus(old.getStatus());
205 copy.setAugmenting(old.isAugmenting());
206 copy.setConfiguration(old.isConfiguration());
210 public static AnyXmlBuilder copyAnyXmlBuilder(final AnyXmlBuilder old) {
211 final AnyXmlBuilder copy = new AnyXmlBuilder(old.getQName());
212 copy.setPath(old.getPath());
213 copyConstraints(old, copy);
214 for (UnknownSchemaNodeBuilder unknown : old.getUnknownNodes()) {
215 copy.addUnknownSchemaNode(unknown);
217 copy.setDescription(old.getDescription());
218 copy.setReference(old.getReference());
219 copy.setStatus(old.getStatus());
220 copy.setConfiguration(old.isConfiguration());
224 private static void copyConstraints(final DataSchemaNodeBuilder oldBuilder,
225 final DataSchemaNodeBuilder newBuilder) {
226 final ConstraintsBuilder oldConstraints = oldBuilder.getConstraints();
227 final ConstraintsBuilder newConstraints = newBuilder.getConstraints();
228 newConstraints.addWhenCondition(oldConstraints.getWhenCondition());
229 for (MustDefinition must : oldConstraints.getMustDefinitions()) {
230 newConstraints.addMustDefinition(must);
232 newConstraints.setMandatory(oldConstraints.isMandatory());
233 newConstraints.setMinElements(oldConstraints.getMinElements());
234 newConstraints.setMaxElements(oldConstraints.getMaxElements());