BUG-1092: rename data.api.InstanceIdentifier to YangInstanceIdentifier
[yangtools.git] / yang / yang-data-impl / src / main / java / org / opendaylight / yangtools / yang / data / impl / schema / transform / base / parser / ChoiceNodeBaseParser.java
1 /*
2  * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
3  *
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
7  */
8 package org.opendaylight.yangtools.yang.data.impl.schema.transform.base.parser;
9
10 import java.util.Map;
11 import java.util.Set;
12
13 import org.opendaylight.yangtools.yang.common.QName;
14 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
15 import org.opendaylight.yangtools.yang.data.api.schema.ChoiceNode;
16 import org.opendaylight.yangtools.yang.data.impl.schema.Builders;
17 import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeBuilder;
18 import org.opendaylight.yangtools.yang.data.impl.schema.SchemaUtils;
19 import org.opendaylight.yangtools.yang.model.api.AugmentationSchema;
20 import org.opendaylight.yangtools.yang.model.api.AugmentationTarget;
21 import org.opendaylight.yangtools.yang.model.api.ChoiceCaseNode;
22 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
23
24 import com.google.common.collect.Maps;
25 import com.google.common.collect.Sets;
26
27 /**
28  * Abstract(base) parser for ChoiceNodes, parses elements of type E.
29  *
30  * @param <E> type of elements to be parsed
31  */
32 public abstract class ChoiceNodeBaseParser<E> extends
33         BaseDispatcherParser<E, ChoiceNode, org.opendaylight.yangtools.yang.model.api.ChoiceNode> {
34
35     @Override
36     protected final DataContainerNodeBuilder<YangInstanceIdentifier.NodeIdentifier, ChoiceNode> getBuilder(
37             org.opendaylight.yangtools.yang.model.api.ChoiceNode schema) {
38         return Builders.choiceBuilder(schema);
39     }
40
41     @Override
42     protected final Set<DataSchemaNode> getRealSchemasForAugment(org.opendaylight.yangtools.yang.model.api.ChoiceNode schema,
43             AugmentationSchema augmentSchema) {
44         Set<DataSchemaNode> fromAllCases = Sets.newHashSet();
45
46         fromAllCases.addAll(SchemaUtils.getRealSchemasForAugment(schema, augmentSchema));
47
48         for (ChoiceCaseNode choiceCaseNode : schema.getCases()) {
49             fromAllCases.addAll(SchemaUtils.getRealSchemasForAugment((AugmentationTarget) choiceCaseNode, augmentSchema));
50         }
51
52         return fromAllCases;
53     }
54
55     @Override
56     protected final DataSchemaNode getSchemaForChild(org.opendaylight.yangtools.yang.model.api.ChoiceNode schema,
57             QName childQName) {
58         return SchemaUtils.findSchemaForChild(schema, childQName);
59     }
60
61     @Override
62     protected final Map<QName, org.opendaylight.yangtools.yang.model.api.ChoiceNode> mapChildElementsFromChoices(
63             org.opendaylight.yangtools.yang.model.api.ChoiceNode schema) {
64         Map<QName, org.opendaylight.yangtools.yang.model.api.ChoiceNode> mappedChoices = Maps.newLinkedHashMap();
65
66         for (ChoiceCaseNode choiceCaseNode : schema.getCases()) {
67             mappedChoices.putAll(SchemaUtils.mapChildElementsFromChoices(choiceCaseNode));
68         }
69
70         return mappedChoices;
71     }
72
73     @Override
74     protected final Map<QName, AugmentationSchema> mapChildElementsFromAugments(
75             org.opendaylight.yangtools.yang.model.api.ChoiceNode schema) {
76         Map<QName, AugmentationSchema> mappedAugments = Maps.newLinkedHashMap();
77
78         for (ChoiceCaseNode choiceCaseNode : schema.getCases()) {
79             mappedAugments.putAll(SchemaUtils.mapChildElementsFromAugments(choiceCaseNode));
80         }
81         return mappedAugments;
82     }
83
84 }