Merge changes I0fe4b78d,I3d3bc71b
[controller.git] / opendaylight / netconf / config-netconf-connector / src / main / java / org / opendaylight / controller / netconf / confignetconfconnector / mapping / attributes / fromxml / ObjectXmlReader.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
9 package org.opendaylight.controller.netconf.confignetconfconnector.mapping.attributes.fromxml;
10
11 import com.google.common.base.Preconditions;
12 import com.google.common.collect.Maps;
13 import org.opendaylight.controller.config.yangjmxgenerator.attribute.AttributeIfc;
14 import org.opendaylight.controller.config.yangjmxgenerator.attribute.JavaAttribute;
15 import org.opendaylight.controller.config.yangjmxgenerator.attribute.ListAttribute;
16 import org.opendaylight.controller.config.yangjmxgenerator.attribute.ListDependenciesAttribute;
17 import org.opendaylight.controller.config.yangjmxgenerator.attribute.TOAttribute;
18 import org.opendaylight.controller.netconf.confignetconfconnector.mapping.attributes.AttributeIfcSwitchStatement;
19 import org.opendaylight.controller.netconf.confignetconfconnector.operations.editconfig.EditConfig;
20
21 import javax.management.openmbean.ArrayType;
22 import javax.management.openmbean.CompositeType;
23 import javax.management.openmbean.OpenType;
24 import javax.management.openmbean.SimpleType;
25 import java.util.Date;
26 import java.util.Map;
27 import java.util.Map.Entry;
28 import java.util.Set;
29
30 public class ObjectXmlReader extends AttributeIfcSwitchStatement<AttributeReadingStrategy> {
31
32     private String key;
33     private Map<String, Map<Date, EditConfig.IdentityMapping>> identityMap;
34
35     public Map<String, AttributeReadingStrategy> prepareReading(Map<String, AttributeIfc> yangToAttrConfig, Map<String, Map<Date,EditConfig.IdentityMapping>> identityMap) {
36         Map<String, AttributeReadingStrategy> strategies = Maps.newHashMap();
37         this.identityMap = identityMap;
38
39         for (Entry<String, AttributeIfc> attributeEntry : yangToAttrConfig.entrySet()) {
40             AttributeReadingStrategy strat = prepareReadingStrategy(attributeEntry.getKey(), attributeEntry.getValue());
41             strategies.put(attributeEntry.getKey(), strat);
42         }
43         return strategies;
44     }
45
46     private AttributeReadingStrategy prepareReadingStrategy(String key, AttributeIfc attributeIfc) {
47         this.key = key;
48         return switchAttribute(attributeIfc);
49     }
50
51     @Override
52     protected AttributeReadingStrategy caseJavaBinaryAttribute(OpenType<?> openType) {
53         return new SimpleBinaryAttributeReadingStrategy(getLastAttribute().getNullableDefault());
54     }
55
56     @Override
57     protected AttributeReadingStrategy caseJavaUnionAttribute(OpenType<?> openType) {
58         String mappingKey = JavaAttribute.DESCRIPTION_OF_VALUE_ATTRIBUTE_FOR_UNION;
59         return new SimpleUnionAttributeReadingStrategy(getLastAttribute().getNullableDefault(), mappingKey);
60     }
61
62     @Override
63     public AttributeReadingStrategy caseJavaSimpleAttribute(SimpleType<?> openType) {
64         return new SimpleAttributeReadingStrategy(getLastAttribute().getNullableDefault());
65     }
66
67     @Override
68     public AttributeReadingStrategy caseJavaArrayAttribute(ArrayType<?> openType) {
69         SimpleAttributeReadingStrategy innerStrategy = new SimpleAttributeReadingStrategy(getLastAttribute().getNullableDefault());
70         return new ArrayAttributeReadingStrategy(getLastAttribute().getNullableDefault(), innerStrategy);
71     }
72
73     @Override
74     public AttributeReadingStrategy caseJavaCompositeAttribute(CompositeType openType) {
75         Preconditions.checkState(openType.keySet().size() == 1, "Unexpected number of elements for open type %s, should be 1", openType);
76         String mappingKey = openType.keySet().iterator().next();
77         return new SimpleCompositeAttributeReadingStrategy(getLastAttribute().getNullableDefault(), mappingKey);
78     }
79
80     @Override
81     protected AttributeReadingStrategy caseJavaIdentityRefAttribute(OpenType<?> openType) {
82         Preconditions.checkState(openType instanceof CompositeType);
83         Set<String> keys = ((CompositeType) openType).keySet();
84         Preconditions.checkState(keys.size() == 1, "Unexpected number of elements for open type %s, should be 1", openType);
85         String mappingKey = keys.iterator().next();
86         return new SimpleIdentityRefAttributeReadingStrategy(getLastAttribute().getNullableDefault(), mappingKey, identityMap);
87     }
88
89     @Override
90     protected AttributeReadingStrategy caseDependencyAttribute(SimpleType<?> openType) {
91         return new ObjectNameAttributeReadingStrategy(getLastAttribute().getNullableDefault());
92     }
93
94     @Override
95     protected AttributeReadingStrategy caseTOAttribute(CompositeType openType) {
96         AttributeIfc lastAttribute = getLastAttribute();
97         Preconditions.checkState(lastAttribute instanceof TOAttribute);
98         Map<String, AttributeIfc> inner = ((TOAttribute)lastAttribute).getYangPropertiesToTypesMap();
99
100         Map<String, AttributeReadingStrategy> innerStrategies = Maps.newHashMap();
101
102         for (Entry<String, AttributeIfc> innerAttrEntry : inner.entrySet()) {
103             AttributeReadingStrategy innerStrat = prepareReadingStrategy(innerAttrEntry.getKey(),
104                     innerAttrEntry.getValue());
105             innerStrategies.put(innerAttrEntry.getKey(), innerStrat);
106         }
107
108         return new CompositeAttributeReadingStrategy(lastAttribute.getNullableDefault(), innerStrategies);
109     }
110
111     @Override
112     protected AttributeReadingStrategy caseListAttribute(ArrayType<?> openType) {
113         AttributeIfc lastAttribute = getLastAttribute();
114         Preconditions.checkState(lastAttribute instanceof ListAttribute);
115         AttributeReadingStrategy innerStrategy = prepareReadingStrategy(key, ((ListAttribute) lastAttribute).getInnerAttribute());
116         return new ArrayAttributeReadingStrategy(lastAttribute.getNullableDefault(), innerStrategy);
117     }
118
119     @Override
120     protected AttributeReadingStrategy caseListDependeciesAttribute(ArrayType<?> openType) {
121         AttributeIfc lastAttribute = getLastAttribute();
122         Preconditions.checkState(lastAttribute instanceof ListDependenciesAttribute);
123         AttributeReadingStrategy innerStrategy = caseDependencyAttribute(SimpleType.OBJECTNAME);
124         return new ArrayAttributeReadingStrategy(lastAttribute.getNullableDefault(), innerStrategy);
125     }
126
127 }