diff options
Diffstat (limited to 'sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/yangtools/YangToolsMapper2.java')
-rw-r--r-- | sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/yangtools/YangToolsMapper2.java | 103 |
1 files changed, 72 insertions, 31 deletions
diff --git a/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/yangtools/YangToolsMapper2.java b/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/yangtools/YangToolsMapper2.java index 814bfd745..8f05437c9 100644 --- a/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/yangtools/YangToolsMapper2.java +++ b/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/yangtools/YangToolsMapper2.java @@ -21,18 +21,6 @@ */ package org.onap.ccsdk.features.sdnr.wt.dataprovider.yangtools; -import java.io.IOException; -import javax.annotation.Nullable; - -import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.credentials.Credentials; -import org.opendaylight.yangtools.concepts.Builder; -import org.opendaylight.yangtools.yang.binding.DataObject; -import org.osgi.framework.Bundle; -import org.osgi.framework.BundleContext; -import org.osgi.framework.FrameworkUtil; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.core.JsonProcessingException; @@ -46,9 +34,20 @@ import com.fasterxml.jackson.databind.introspect.AnnotatedClass; import com.fasterxml.jackson.databind.introspect.JacksonAnnotationIntrospector; import com.fasterxml.jackson.databind.module.SimpleModule; import com.fasterxml.jackson.databind.ser.std.StdSerializer; - +import java.io.IOException; +import javax.annotation.Nullable; import org.eclipse.jdt.annotation.NonNull; +import org.opendaylight.yang.gen.v1.http.org.openroadm.pm.types.rev191129.PmDataType; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DateAndTime; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.credentials.Credentials; +import org.opendaylight.yangtools.concepts.Builder; +import org.opendaylight.yangtools.yang.binding.DataObject; +import org.opendaylight.yangtools.yang.binding.TypeObject; +import org.osgi.framework.Bundle; +import org.osgi.framework.BundleContext; +import org.osgi.framework.FrameworkUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * YangToolsMapper is a specific Jackson mapper configuration for opendaylight yangtools serialization or @@ -57,7 +56,7 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types. */ public class YangToolsMapper2<T extends DataObject> extends ObjectMapper { - private final Logger LOG = LoggerFactory.getLogger(YangToolsMapper2.class); + private static final Logger LOG = LoggerFactory.getLogger(YangToolsMapper2.class); private static final long serialVersionUID = 1L; private static String BUILDER = "Builder"; @@ -68,7 +67,7 @@ public class YangToolsMapper2<T extends DataObject> extends ObjectMapper { /** * Generic Object creation of yangtools java class builder pattern. - * + * * @param <X> Class of DataObject * @param <B> Builder for the class. * @param clazz specifies class to be mapped @@ -86,6 +85,10 @@ public class YangToolsMapper2<T extends DataObject> extends ObjectMapper { SimpleModule dateAndTimeSerializerModule = new SimpleModule(); dateAndTimeSerializerModule.addSerializer(DateAndTime.class, new CustomDateAndTimeSerializer()); registerModule(dateAndTimeSerializerModule); + + SimpleModule pmDataTypeSerializerModule = new SimpleModule(); + pmDataTypeSerializerModule.addSerializer(PmDataType.class, new CustomPMDataTypeSerializer()); + registerModule(pmDataTypeSerializerModule); Bundle bundle = FrameworkUtil.getBundle(YangToolsMapper2.class); this.clazz = clazz; @@ -93,6 +96,10 @@ public class YangToolsMapper2<T extends DataObject> extends ObjectMapper { context = bundle != null ? bundle.getBundleContext() : null; } + public <X extends T, B extends Builder<X>> YangToolsMapper2(@NonNull Class<T> clazz) throws ClassNotFoundException { + this(clazz, null); + } + @Override public String writeValueAsString(Object value) throws JsonProcessingException { return super.writeValueAsString(value); @@ -100,7 +107,7 @@ public class YangToolsMapper2<T extends DataObject> extends ObjectMapper { /** * Get Builder object for yang tools interface. - * + * * @param <T> yang-tools base datatype * @param clazz class with interface. * @return builder for interface or null if not existing @@ -108,7 +115,7 @@ public class YangToolsMapper2<T extends DataObject> extends ObjectMapper { public @Nullable Builder<? extends T> getBuilder(Class<T> clazz) { try { if (builderClazz != null) - return (Builder<? extends T>) builderClazz.newInstance(); + return builderClazz.newInstance(); else return null; } catch (InstantiationException | IllegalAccessException e) { @@ -119,7 +126,7 @@ public class YangToolsMapper2<T extends DataObject> extends ObjectMapper { /** * Callback for handling mapping failures. - * + * * @return */ public int getMappingFailures() { @@ -128,7 +135,7 @@ public class YangToolsMapper2<T extends DataObject> extends ObjectMapper { /** * Provide mapping of string to attribute names, generated by yang-tools. "netconf-id" converted to "_netconfId" - * + * * @param name with attribute name, not null or empty * @return converted string or null if name was empty or null */ @@ -155,7 +162,7 @@ public class YangToolsMapper2<T extends DataObject> extends ObjectMapper { /** * Verify if builder is available - * + * * @throws ClassNotFoundException **/ public Class<?> assertBuilderClass(Class<?> clazz) throws ClassNotFoundException { @@ -166,7 +173,7 @@ public class YangToolsMapper2<T extends DataObject> extends ObjectMapper { /** * Create name of builder class - * + * * @param <T> * @param clazz * @return builders class name @@ -178,7 +185,7 @@ public class YangToolsMapper2<T extends DataObject> extends ObjectMapper { /** * Search builder in context - * + * * @param name * @return * @throws ClassNotFoundException @@ -189,6 +196,7 @@ public class YangToolsMapper2<T extends DataObject> extends ObjectMapper { if (context != null) { //OSGi environment for (Bundle b : context.getBundles()) { + LOG.info("Search in bundle: {}", b.getSymbolicName()); try { return (Class<B>) b.loadClass(name); } catch (ClassNotFoundException e) { @@ -212,27 +220,42 @@ public class YangToolsMapper2<T extends DataObject> extends ObjectMapper { @Override public Class<?> findPOJOBuilder(AnnotatedClass ac) { - - if (ac.getRawType().equals(Credentials.class)) { + Class<?> clazz2build = ac.getRawType(); + if (clazz2build.equals(Credentials.class)) { return org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.credentials.credentials.LoginPasswordBuilder.class; - } else if (ac.getRawType().equals(DateAndTime.class)) { + } else if (clazz2build.equals(DateAndTime.class)) { return DateAndTimeBuilder.class; - - } else if (ac.getRawType().equals(clazz)) { + // } else if (ac.getRawType().equals(PmDataType.class)) { + // LOG.info("Builder class"); + // return PMDataTypeBuilder.class; + } else if (clazz2build.equals(clazz)) { return builderClazz; } - if (ac.getRawType().isInterface()) { - String builder = getBuilderClassName(ac.getRawType()); + if (clazz2build.isInterface() || TypeObject.class.isAssignableFrom(clazz2build)) { + String builder = getBuilderClassName(clazz2build); + LOG.info("Search: {}", builder); + Class<?> innerBuilder; + try { + innerBuilder = Class.forName(builder); + LOG.info("Found1: {}", innerBuilder); + return innerBuilder; + } catch (ClassNotFoundException e) { + LOG.info("Could not find {}", clazz2build); + // No problem .. try next + } try { - Class<?> innerBuilder = getBuilderClass(builder); + innerBuilder = getBuilderClass(builder); + LOG.info("Found2: {}", innerBuilder); return innerBuilder; } catch (ClassNotFoundException e) { + LOG.info("Could not find {}", clazz2build); // No problem .. try next } } - return super.findPOJOBuilder(ac); + Class<?> clazz = super.findPOJOBuilder(ac); + return clazz; } @Override @@ -275,4 +298,22 @@ public class YangToolsMapper2<T extends DataObject> extends ObjectMapper { } } + public static class CustomPMDataTypeSerializer extends StdSerializer<@NonNull PmDataType> { + + private static final long serialVersionUID = 1L; + + public CustomPMDataTypeSerializer() { + this(null); + } + + protected CustomPMDataTypeSerializer(Class<PmDataType> t) { + super(t); + } + + @Override + public void serialize(PmDataType value, JsonGenerator gen, SerializerProvider serializers) throws IOException { + gen.writeString(value.toString()); + } + + } } |