X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fconfig%2Fconfig-manager-facade-xml%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fconfig%2Ffacade%2Fxml%2Fmapping%2Fattributes%2Ftoxml%2FObjectXmlWriter.java;fp=opendaylight%2Fconfig%2Fconfig-manager-facade-xml%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fconfig%2Ffacade%2Fxml%2Fmapping%2Fattributes%2Ftoxml%2FObjectXmlWriter.java;h=3eb6fcebf1652441e6c5318097188a458ba102b8;hb=23fe9ca678ada6263fec5dd996f4025e4a32fcf5;hp=0000000000000000000000000000000000000000;hpb=071a641d7c12c0e6112d5ce0afe806b54f116ed2;p=controller.git diff --git a/opendaylight/config/config-manager-facade-xml/src/main/java/org/opendaylight/controller/config/facade/xml/mapping/attributes/toxml/ObjectXmlWriter.java b/opendaylight/config/config-manager-facade-xml/src/main/java/org/opendaylight/controller/config/facade/xml/mapping/attributes/toxml/ObjectXmlWriter.java new file mode 100644 index 0000000000..3eb6fcebf1 --- /dev/null +++ b/opendaylight/config/config-manager-facade-xml/src/main/java/org/opendaylight/controller/config/facade/xml/mapping/attributes/toxml/ObjectXmlWriter.java @@ -0,0 +1,127 @@ +/* + * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.controller.config.facade.xml.mapping.attributes.toxml; + +import com.google.common.base.Preconditions; +import com.google.common.collect.Maps; +import java.util.Map; +import java.util.Map.Entry; +import javax.management.openmbean.ArrayType; +import javax.management.openmbean.CompositeType; +import javax.management.openmbean.OpenType; +import javax.management.openmbean.SimpleType; +import org.opendaylight.controller.config.facade.xml.mapping.attributes.AttributeIfcSwitchStatement; +import org.opendaylight.controller.config.yangjmxgenerator.attribute.AttributeIfc; +import org.opendaylight.controller.config.yangjmxgenerator.attribute.ListAttribute; +import org.opendaylight.controller.config.yangjmxgenerator.attribute.ListDependenciesAttribute; +import org.opendaylight.controller.config.yangjmxgenerator.attribute.TOAttribute; +import org.w3c.dom.Document; + +public class ObjectXmlWriter extends AttributeIfcSwitchStatement { + + private Document document; + private String key; + + public Map prepareWriting(Map yangToAttrConfig, + Document document) { + + Map preparedWriting = Maps.newHashMap(); + + for (Entry mappedAttributeEntry : yangToAttrConfig.entrySet()) { + String key = mappedAttributeEntry.getKey(); + AttributeIfc value = mappedAttributeEntry.getValue(); + AttributeWritingStrategy strat = prepareWritingStrategy(key, value, document); + preparedWriting.put(key, strat); + } + + return preparedWriting; + } + + public AttributeWritingStrategy prepareWritingStrategy(String key, AttributeIfc expectedAttr, Document document) { + Preconditions.checkNotNull(expectedAttr, "Mbean attributes mismatch, unable to find expected attribute for %s", + key); + this.document = document; + this.key = key; + return switchAttribute(expectedAttr); + } + + @Override + protected AttributeWritingStrategy caseJavaBinaryAttribute(OpenType openType) { + return new SimpleBinaryAttributeWritingStrategy(document, key); + } + + @Override + protected AttributeWritingStrategy caseJavaEnumAttribute(final OpenType openType) { + return new SimpleAttributeWritingStrategy(document, key); + } + + @Override + protected AttributeWritingStrategy caseJavaSimpleAttribute(SimpleType openType) { + return new SimpleAttributeWritingStrategy(document, key); + } + + @Override + protected AttributeWritingStrategy caseJavaArrayAttribute(ArrayType openType) { + AttributeWritingStrategy innerStrategy = new SimpleAttributeWritingStrategy(document, key); + return new ArrayAttributeWritingStrategy(innerStrategy); + } + + @Override + protected AttributeWritingStrategy caseJavaIdentityRefAttribute(OpenType openType) { + return new SimpleIdentityRefAttributeWritingStrategy(document, key); + } + + @Override + protected AttributeWritingStrategy caseJavaCompositeAttribute(CompositeType openType) { + return new SimpleCompositeAttributeWritingStrategy(document, key); + } + + @Override + protected AttributeWritingStrategy caseJavaUnionAttribute(OpenType openType) { + return new SimpleUnionAttributeWritingStrategy(document, key); + } + + @Override + protected AttributeWritingStrategy caseDependencyAttribute(SimpleType openType) { + return new ObjectNameAttributeWritingStrategy(document, key); + } + + @Override + protected AttributeWritingStrategy caseTOAttribute(CompositeType openType) { + Preconditions.checkState(getLastAttribute() instanceof TOAttribute); + + Map innerStrats = Maps.newHashMap(); + String currentKey = key; + for (Entry innerAttrEntry : ((TOAttribute) getLastAttribute()).getYangPropertiesToTypesMap().entrySet()) { + + AttributeWritingStrategy innerStrategy = prepareWritingStrategy(innerAttrEntry.getKey(), + innerAttrEntry.getValue(), document); + innerStrats.put(innerAttrEntry.getKey(), innerStrategy); + } + + return new CompositeAttributeWritingStrategy(document, currentKey, innerStrats); + } + + @Override + protected AttributeWritingStrategy caseListAttribute(ArrayType openType) { + Preconditions.checkState(getLastAttribute() instanceof ListAttribute); + AttributeIfc innerAttribute = ((ListAttribute) getLastAttribute()).getInnerAttribute(); + + AttributeWritingStrategy innerStrategy = prepareWritingStrategy(key, innerAttribute, document); + return new ArrayAttributeWritingStrategy(innerStrategy); + } + + @Override + protected AttributeWritingStrategy caseListDependeciesAttribute(ArrayType openType) { + Preconditions.checkState(getLastAttribute() instanceof ListDependenciesAttribute); + AttributeWritingStrategy innerStrategy = caseDependencyAttribute(SimpleType.OBJECTNAME); + return new ArrayAttributeWritingStrategy(innerStrategy); + } + +}