Fix star import and enable checkstyle rule to prevent it.
[controller.git] / opendaylight / netconf / config-netconf-connector / src / main / java / org / opendaylight / controller / netconf / confignetconfconnector / mapping / attributes / toxml / ObjectXmlWriter.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.toxml;
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.DependencyAttribute;
15 import org.opendaylight.controller.config.yangjmxgenerator.attribute.JavaAttribute;
16 import org.opendaylight.controller.config.yangjmxgenerator.attribute.ListAttribute;
17 import org.opendaylight.controller.config.yangjmxgenerator.attribute.TOAttribute;
18 import org.opendaylight.controller.netconf.confignetconfconnector.mapping.attributes.AttributeIfcSwitchStatement;
19 import org.w3c.dom.Document;
20
21 import javax.management.openmbean.ArrayType;
22 import javax.management.openmbean.SimpleType;
23 import java.util.Map;
24 import java.util.Map.Entry;
25
26 public class ObjectXmlWriter extends AttributeIfcSwitchStatement<AttributeWritingStrategy> {
27
28     private Document document;
29     private String key;
30
31     public Map<String, AttributeWritingStrategy> prepareWriting(Map<String, AttributeIfc> yangToAttrConfig,
32             Document document) {
33
34         Map<String, AttributeWritingStrategy> preparedWriting = Maps.newHashMap();
35
36         for (Entry<String, AttributeIfc> mappedAttributeEntry : yangToAttrConfig.entrySet()) {
37             String key = mappedAttributeEntry.getKey();
38             AttributeIfc value = mappedAttributeEntry.getValue();
39             AttributeWritingStrategy strat = prepareWritingStrategy(key, value, document);
40             preparedWriting.put(key, strat);
41         }
42
43         return preparedWriting;
44     }
45
46     public AttributeWritingStrategy prepareWritingStrategy(String key, AttributeIfc expectedAttr, Document document) {
47         Preconditions.checkNotNull(expectedAttr, "Mbean attributes mismatch, unable to find expected attribute for %s",
48                 key);
49         this.document = document;
50         this.key = key;
51         return switchAttribute(expectedAttr);
52     }
53
54     @Override
55     protected AttributeWritingStrategy caseJavaAttribute(JavaAttribute attributeIfc) {
56
57         if (attributeIfc.getOpenType() instanceof SimpleType<?>)
58             return new SimpleAttributeWritingStrategy(document, key);
59         else if (attributeIfc.getOpenType() instanceof ArrayType<?>) {
60             AttributeWritingStrategy innerStrategy = new SimpleAttributeWritingStrategy(document, key);
61             return new ArrayAttributeWritingStrategy(innerStrategy);
62         }
63         throw new IllegalStateException(JavaAttribute.class + " can only provide open type " + SimpleType.class
64                 + " or " + ArrayType.class);
65     }
66
67     @Override
68     protected AttributeWritingStrategy caseDependencyAttribute(DependencyAttribute attributeIfc) {
69         return new ObjectNameAttributeWritingStrategy(document, key);
70     }
71
72     @Override
73     protected AttributeWritingStrategy caseTOAttribute(TOAttribute attributeIfc) {
74         Map<String, AttributeWritingStrategy> innerStrats = Maps.newHashMap();
75         String currentKey = key;
76         for (Entry<String, AttributeIfc> innerAttrEntry : attributeIfc.getYangPropertiesToTypesMap().entrySet()) {
77
78             AttributeWritingStrategy innerStrategy = prepareWritingStrategy(innerAttrEntry.getKey(),
79                     innerAttrEntry.getValue(), document);
80             innerStrats.put(innerAttrEntry.getKey(), innerStrategy);
81         }
82
83         return new CompositeAttributeWritingStrategy(document, currentKey, innerStrats);
84     }
85
86     @Override
87     protected AttributeWritingStrategy caseListAttribute(ListAttribute attributeIfc) {
88         AttributeIfc inner = attributeIfc.getInnerAttribute();
89         AttributeWritingStrategy innerStrategy = prepareWritingStrategy(key, inner, document);
90         return new ArrayAttributeWritingStrategy(innerStrategy);
91     }
92
93 }