aboutsummaryrefslogtreecommitdiffstats
path: root/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/yangtools/YangToolsMapper2.java
diff options
context:
space:
mode:
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.java103
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());
+ }
+
+ }
}