From 67a6909f1dde7ad425b3f9f08e96d863938dee64 Mon Sep 17 00:00:00 2001 From: Maros Marsalek Date: Thu, 28 Nov 2013 13:54:50 +0100 Subject: [PATCH] Add support for enums as configuration attributes in config and netconf subsystem. Change-Id: Ieb6054e2136a2eaf834105f9c1cff6db8668d507 Signed-off-by: Maros Marsalek --- .../attribute/JavaAttribute.java | 12 +++++++--- .../attribute/SimpleTypeResolver.java | 19 ++++++--------- .../src/main/yang/config-test-impl.yang | 4 +--- .../NetconfMappingTest.java | 23 ++++++++++++++++++- .../resources/netconfMessages/editConfig.xml | 4 ++++ 5 files changed, 43 insertions(+), 19 deletions(-) diff --git a/opendaylight/config/yang-jmx-generator/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/attribute/JavaAttribute.java b/opendaylight/config/yang-jmx-generator/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/attribute/JavaAttribute.java index 73c7e227be..325ca9ee06 100644 --- a/opendaylight/config/yang-jmx-generator/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/attribute/JavaAttribute.java +++ b/opendaylight/config/yang-jmx-generator/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/attribute/JavaAttribute.java @@ -121,15 +121,21 @@ public class JavaAttribute extends AbstractAttribute implements TypedAttribute { if (isArray()) { return getArrayType(); + } else if (isEnum(baseType)) { + return getSimpleType(baseType); } else if (isDerivedType(baseType)) { return getCompositeType(baseType, baseTypeDefinition); } - return getSimpleType(); + return getSimpleType(getType()); } - private OpenType getSimpleType() { - SimpleType simpleType = SimpleTypeResolver.getSimpleType(getType()); + private boolean isEnum(Type baseType) { + return baseType.getFullyQualifiedName().equals(Enum.class.getName()); + } + + private OpenType getSimpleType(Type type) { + SimpleType simpleType = SimpleTypeResolver.getSimpleType(type); return simpleType; } diff --git a/opendaylight/config/yang-jmx-generator/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/attribute/SimpleTypeResolver.java b/opendaylight/config/yang-jmx-generator/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/attribute/SimpleTypeResolver.java index 61ad74d7ee..87b55f3756 100644 --- a/opendaylight/config/yang-jmx-generator/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/attribute/SimpleTypeResolver.java +++ b/opendaylight/config/yang-jmx-generator/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/attribute/SimpleTypeResolver.java @@ -39,26 +39,21 @@ public class SimpleTypeResolver { return expectedSimpleType; } - private static final Map> JAVA_TYPE_TO_SIMPLE_TYPE = Maps - .newHashMap(); + private static final Map> JAVA_TYPE_TO_SIMPLE_TYPE = Maps.newHashMap(); static { // TODO add all - JAVA_TYPE_TO_SIMPLE_TYPE.put(Integer.class.getName(), - SimpleType.INTEGER); + JAVA_TYPE_TO_SIMPLE_TYPE.put(Integer.class.getName(), SimpleType.INTEGER); JAVA_TYPE_TO_SIMPLE_TYPE.put(int.class.getName(), SimpleType.INTEGER); JAVA_TYPE_TO_SIMPLE_TYPE.put(Short.class.getName(), SimpleType.SHORT); JAVA_TYPE_TO_SIMPLE_TYPE.put(short.class.getName(), SimpleType.SHORT); JAVA_TYPE_TO_SIMPLE_TYPE.put(Long.class.getName(), SimpleType.LONG); JAVA_TYPE_TO_SIMPLE_TYPE.put(long.class.getName(), SimpleType.LONG); JAVA_TYPE_TO_SIMPLE_TYPE.put(String.class.getName(), SimpleType.STRING); - JAVA_TYPE_TO_SIMPLE_TYPE.put(Boolean.class.getName(), - SimpleType.BOOLEAN); - JAVA_TYPE_TO_SIMPLE_TYPE.put(boolean.class.getName(), - SimpleType.BOOLEAN); - JAVA_TYPE_TO_SIMPLE_TYPE.put(BigInteger.class.getName(), - SimpleType.BIGINTEGER); - JAVA_TYPE_TO_SIMPLE_TYPE.put(BigDecimal.class.getName(), - SimpleType.BIGDECIMAL); + JAVA_TYPE_TO_SIMPLE_TYPE.put(Enum.class.getName(), SimpleType.STRING); + JAVA_TYPE_TO_SIMPLE_TYPE.put(Boolean.class.getName(), SimpleType.BOOLEAN); + JAVA_TYPE_TO_SIMPLE_TYPE.put(boolean.class.getName(), SimpleType.BOOLEAN); + JAVA_TYPE_TO_SIMPLE_TYPE.put(BigInteger.class.getName(), SimpleType.BIGINTEGER); + JAVA_TYPE_TO_SIMPLE_TYPE.put(BigDecimal.class.getName(), SimpleType.BIGDECIMAL); JAVA_TYPE_TO_SIMPLE_TYPE.put(Byte.class.getName(), SimpleType.BYTE); JAVA_TYPE_TO_SIMPLE_TYPE.put(byte.class.getName(), SimpleType.BYTE); JAVA_TYPE_TO_SIMPLE_TYPE.put(Date.class.getName(), SimpleType.DATE); diff --git a/opendaylight/config/yang-test/src/main/yang/config-test-impl.yang b/opendaylight/config/yang-test/src/main/yang/config-test-impl.yang index 977aa6a87e..df636fd0ef 100644 --- a/opendaylight/config/yang-test/src/main/yang/config-test-impl.yang +++ b/opendaylight/config/yang-test/src/main/yang/config-test-impl.yang @@ -115,12 +115,10 @@ module config-test-impl { type tt:extend-twice; } -/* TODO Add support for enums - leaf extended-enum { type tt:extend-enum; } -*/ + container dto-c { leaf simple-arg { type uint32; diff --git a/opendaylight/netconf/config-netconf-connector/src/test/java/org/opendaylight/controller/netconf/confignetconfconnector/NetconfMappingTest.java b/opendaylight/netconf/config-netconf-connector/src/test/java/org/opendaylight/controller/netconf/confignetconfconnector/NetconfMappingTest.java index eabc2b9394..c57817edda 100644 --- a/opendaylight/netconf/config-netconf-connector/src/test/java/org/opendaylight/controller/netconf/confignetconfconnector/NetconfMappingTest.java +++ b/opendaylight/netconf/config-netconf-connector/src/test/java/org/opendaylight/controller/netconf/confignetconfconnector/NetconfMappingTest.java @@ -150,10 +150,11 @@ public class NetconfMappingTest extends AbstractConfigTest { // check after edit commit(); Element response = getConfigRunning(); - System.err.println(XmlUtil.toString(response)); + checkBinaryLeafEdited(response); checkTypeConfigAttribute(response); checkTypedefs(response); + checkEnum(response); edit("netconfMessages/editConfig_remove.xml"); @@ -385,6 +386,26 @@ public class NetconfMappingTest extends AbstractConfigTest { assertEquals(1, children.getLength()); } + private void checkEnum(final Element response) { + XmlElement modulesElement = XmlElement.fromDomElement(response).getOnlyChildElement("data") + .getOnlyChildElement("modules"); + + String enumName = "extended-enum"; + String enumContent = "TWO"; + + for (XmlElement moduleElement : modulesElement.getChildElements("module")) { + String name = moduleElement.getOnlyChildElement("name").getTextContent(); + if(name.equals("test1")) { + XmlElement enumAttr = moduleElement.getOnlyChildElement(enumName); + assertEquals(enumContent, enumAttr.getTextContent()); + + return; + } + } + + fail("Enum attribute " + enumName + ":" + enumContent + " not present in " + XmlUtil.toString(response)); + } + private void checkTypeConfigAttribute(Element response) { XmlElement modulesElement = XmlElement.fromDomElement(response).getOnlyChildElement("data") diff --git a/opendaylight/netconf/netconf-util/src/test/resources/netconfMessages/editConfig.xml b/opendaylight/netconf/netconf-util/src/test/resources/netconfMessages/editConfig.xml index ce52e49365..57359474ac 100644 --- a/opendaylight/netconf/netconf-util/src/test/resources/netconfMessages/editConfig.xml +++ b/opendaylight/netconf/netconf-util/src/test/resources/netconfMessages/editConfig.xml @@ -39,6 +39,10 @@ 1 + + TWO + + 44 8 1 -- 2.36.6