X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;ds=sidebyside;f=opendaylight%2Fnetconf%2Fconfig-netconf-connector%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fnetconf%2Fconfignetconfconnector%2Fmapping%2Fattributes%2Fresolving%2FEnumAttributeResolvingStrategy.java;fp=opendaylight%2Fnetconf%2Fconfig-netconf-connector%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fnetconf%2Fconfignetconfconnector%2Fmapping%2Fattributes%2Fresolving%2FEnumAttributeResolvingStrategy.java;h=25c4da1a66c6de282df7f23dee4d28c0a5d3687f;hb=cd50f92c60580b546a696aab7c3ff4fbf3f9a5f0;hp=0000000000000000000000000000000000000000;hpb=b7d8a21f10a37c78345748bd70780a405842249d;p=controller.git diff --git a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/attributes/resolving/EnumAttributeResolvingStrategy.java b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/attributes/resolving/EnumAttributeResolvingStrategy.java new file mode 100644 index 0000000000..25c4da1a66 --- /dev/null +++ b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/attributes/resolving/EnumAttributeResolvingStrategy.java @@ -0,0 +1,55 @@ +/* + * 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.netconf.confignetconfconnector.mapping.attributes.resolving; + +import com.google.common.base.Optional; +import com.google.common.base.Preconditions; +import java.util.Map; +import javax.management.openmbean.CompositeType; +import org.opendaylight.controller.netconf.api.NetconfDocumentedException; +import org.opendaylight.controller.netconf.confignetconfconnector.osgi.EnumResolver; +import org.opendaylight.controller.netconf.confignetconfconnector.util.Util; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +final class EnumAttributeResolvingStrategy extends AbstractAttributeResolvingStrategy { + + private static final Logger LOG = LoggerFactory.getLogger(EnumAttributeResolvingStrategy.class); + private final EnumResolver enumResolver; + + EnumAttributeResolvingStrategy(CompositeType simpleType, final EnumResolver enumResolver) { + super(simpleType); + this.enumResolver = enumResolver; + } + + @Override + public String toString() { + return "ResolvedEnumAttribute [" + getOpenType().getClassName() + "]"; + } + + @Override + public Optional parseAttribute(String attrName, Object value) throws NetconfDocumentedException { + if (value == null) { + return Optional.absent(); + } + + Util.checkType(value, Map.class); + Map valueMap = (Map) value; + Preconditions.checkArgument(valueMap.size() == 1, "Unexpected value size " + value + " should be just 1 foe enum"); + final Object innerValue = valueMap.values().iterator().next(); + Util.checkType(innerValue, String.class); + + final String className = getOpenType().getTypeName(); + final Object parsedValue = enumResolver.fromYang(className, ((String) innerValue)); + + LOG.debug("Attribute {} : {} parsed to enum type {} with value {}", attrName, innerValue, getOpenType(), parsedValue); + return Optional.of(parsedValue); + } + +}