Resolve Bug:853 - remove groovy from config code generator.
[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(lastAttribute.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(lastAttribute.getNullableDefault(), mappingKey);
60     }
61
62     @Override
63     public AttributeReadingStrategy caseJavaSimpleAttribute(SimpleType<?> openType) {
64         return new SimpleAttributeReadingStrategy(lastAttribute.getNullableDefault());
65     }
66
67     @Override
68     public AttributeReadingStrategy caseJavaArrayAttribute(ArrayType<?> openType) {
69         SimpleAttributeReadingStrategy innerStrategy = new SimpleAttributeReadingStrategy(lastAttribute.getNullableDefault());
70         return new ArrayAttributeReadingStrategy(lastAttribute.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(lastAttribute.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(lastAttribute.getNullableDefault(), mappingKey, identityMap);
87     }
88
89     @Override
90     protected AttributeReadingStrategy caseDependencyAttribute(SimpleType<?> openType) {
91         return new ObjectNameAttributeReadingStrategy(lastAttribute.getNullableDefault());
92     }
93
94     @Override
95     protected AttributeReadingStrategy caseTOAttribute(CompositeType openType) {
96         Preconditions.checkState(lastAttribute instanceof TOAttribute);
97         Map<String, AttributeIfc> inner = ((TOAttribute)lastAttribute).getYangPropertiesToTypesMap();
98
99         Map<String, AttributeReadingStrategy> innerStrategies = Maps.newHashMap();
100
101         for (Entry<String, AttributeIfc> innerAttrEntry : inner.entrySet()) {
102             AttributeReadingStrategy innerStrat = prepareReadingStrategy(innerAttrEntry.getKey(),
103                     innerAttrEntry.getValue());
104             innerStrategies.put(innerAttrEntry.getKey(), innerStrat);
105         }
106
107         return new CompositeAttributeReadingStrategy(lastAttribute.getNullableDefault(), innerStrategies);
108     }
109
110     @Override
111     protected AttributeReadingStrategy caseListAttribute(ArrayType<?> openType) {
112         Preconditions.checkState(lastAttribute instanceof ListAttribute);
113         AttributeReadingStrategy innerStrategy = prepareReadingStrategy(key, ((ListAttribute) lastAttribute).getInnerAttribute());
114         return new ArrayAttributeReadingStrategy(lastAttribute.getNullableDefault(), innerStrategy);
115     }
116
117     @Override
118     protected AttributeReadingStrategy caseListDependeciesAttribute(ArrayType<?> openType) {
119         Preconditions.checkState(lastAttribute instanceof ListDependenciesAttribute);
120         AttributeReadingStrategy innerStrategy = caseDependencyAttribute(SimpleType.OBJECTNAME);
121         return new ArrayAttributeReadingStrategy(lastAttribute.getNullableDefault(), innerStrategy);
122     }
123
124 }