Update common and data-provider 23/117423/4
authorRavi Pendurty <ravi.pendurty@highstreet-technologies.com>
Wed, 3 Feb 2021 12:56:31 +0000 (13:56 +0100)
committerDan Timoney <dtimoney@att.com>
Fri, 5 Feb 2021 21:52:27 +0000 (16:52 -0500)
common and data-provider migrated to Aluminium

Issue-ID: CCSDK-3111
Signed-off-by: Ravi Pendurty <ravi.pendurty@highstreet-technologies.com>
Change-Id: Ifb4ddb60f84ca7585137e04bc94d44885fe1f5f4
Signed-off-by: Ravi Pendurty <ravi.pendurty@highstreet-technologies.com>
82 files changed:
sdnr/wt/common/pom.xml
sdnr/wt/common/src/main/java/org/onap/ccsdk/features/sdnr/wt/common/database/HtDatabaseClient.java
sdnr/wt/common/src/main/java/org/onap/ccsdk/features/sdnr/wt/common/database/SearchResult.java
sdnr/wt/common/src/main/java/org/onap/ccsdk/features/sdnr/wt/common/http/BaseHTTPClient.java
sdnr/wt/common/src/main/java/org/onap/ccsdk/features/sdnr/wt/common/http/BaseHTTPResponse.java
sdnr/wt/common/src/main/java/org/onap/ccsdk/features/sdnr/wt/common/http/BaseServlet.java
sdnr/wt/common/src/main/java/org/onap/ccsdk/features/sdnr/wt/common/test/ServletInputStreamFromByteArrayInputStream.java
sdnr/wt/common/src/main/java/org/onap/ccsdk/features/sdnr/wt/common/test/ServletOutputStreamToByteArrayOutputStream.java
sdnr/wt/common/src/main/java/org/onap/ccsdk/features/sdnr/wt/common/test/ServletOutputStreamToStringWriter.java
sdnr/wt/common/src/test/resources/testpom.xml
sdnr/wt/data-provider/feature/pom.xml
sdnr/wt/data-provider/installer/pom.xml
sdnr/wt/data-provider/model/pom.xml
sdnr/wt/data-provider/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/model/types/NetconfTimeStampImpl.java
sdnr/wt/data-provider/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/model/types/ScalarTypeObject.java [new file with mode: 0644]
sdnr/wt/data-provider/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/model/types/YangHelper2.java
sdnr/wt/data-provider/model/src/main/java/org/opendaylight/yang/gen/v1/http/org/openroadm/pm/types/rev191129/PmDataTypeBuilder.java
sdnr/wt/data-provider/pom.xml
sdnr/wt/data-provider/provider/java.sh [new file with mode: 0755]
sdnr/wt/data-provider/provider/pom.xml
sdnr/wt/data-provider/provider/simplelogger.properties [new file with mode: 0644]
sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/data/ElasticSearchDataProvider.java
sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/data/acessor/DataObjectAcessorStatus.java
sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/data/rpctypehelper/QueryResult.java
sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/EsDataObjectReaderWriter2.java
sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/http/DataTreeHttpServlet.java
sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/http/about/AboutHttpServlet.java
sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/http/about/ODLVersionLUT.java
sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/impl/DataProviderImpl.java
sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/impl/DataProviderServiceImpl.java
sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/yangtools/DateAndTimeBuilder.java [deleted file]
sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/yangtools/YangToolsMapper.java
sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/yangtools/YangToolsMapper2.java
sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/yangtools/YangToolsMapperHelper.java [new file with mode: 0644]
sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/yangtools/builder/DateAndTimeBuilder.java [new file with mode: 0644]
sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/yangtools/mapperextensions/YangToolsBuilderAnnotationIntrospector.java [new file with mode: 0644]
sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/yangtools/mapperextensions/YangToolsDeserializerModifier.java [new file with mode: 0644]
sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/yangtools/mapperextensions/YangToolsModule.java [new file with mode: 0644]
sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/yangtools/serialize/BaseIdentityDeserializer.java [new file with mode: 0644]
sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/yangtools/serialize/ClassDeserializer.java [new file with mode: 0644]
sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/yangtools/serialize/DateAndTimeSerializer.java [new file with mode: 0644]
sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/yangtools/serialize/EnumSerializer.java [new file with mode: 0644]
sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/yangtools/serialize/IdentifierDeserializer.java [new file with mode: 0644]
sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/yangtools/serialize/MapSerializer.java [new file with mode: 0644]
sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/yangtools/serialize/TypeObjectDeserializer.java [new file with mode: 0644]
sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/yangtools/serialize/TypeObjectSerializer.java [new file with mode: 0644]
sdnr/wt/data-provider/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/test/TestAbout.java
sdnr/wt/data-provider/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/test/TestCRUDforDatabase.java
sdnr/wt/data-provider/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/test/TestDataMappings.java
sdnr/wt/data-provider/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/test/TestEventService.java
sdnr/wt/data-provider/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/test/TestTree.java
sdnr/wt/data-provider/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/test/TestYangGenSalMapping.java
sdnr/wt/data-provider/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/test/TestYangGenSalMappingOpenRoadm.java
sdnr/wt/data-provider/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/test/issues/TestIssue227.java [new file with mode: 0644]
sdnr/wt/data-provider/provider/src/test/resources/TestTree/1.json [moved from sdnr/wt/data-provider/provider/src/test/resources/testequipment/1.json with 100% similarity]
sdnr/wt/data-provider/provider/src/test/resources/TestTree/10.json [moved from sdnr/wt/data-provider/provider/src/test/resources/testequipment/10.json with 100% similarity]
sdnr/wt/data-provider/provider/src/test/resources/TestTree/11.json [moved from sdnr/wt/data-provider/provider/src/test/resources/testequipment/11.json with 100% similarity]
sdnr/wt/data-provider/provider/src/test/resources/TestTree/12.json [moved from sdnr/wt/data-provider/provider/src/test/resources/testequipment/12.json with 100% similarity]
sdnr/wt/data-provider/provider/src/test/resources/TestTree/13.json [moved from sdnr/wt/data-provider/provider/src/test/resources/testequipment/13.json with 100% similarity]
sdnr/wt/data-provider/provider/src/test/resources/TestTree/14.json [moved from sdnr/wt/data-provider/provider/src/test/resources/testequipment/14.json with 100% similarity]
sdnr/wt/data-provider/provider/src/test/resources/TestTree/15.json [moved from sdnr/wt/data-provider/provider/src/test/resources/testequipment/15.json with 100% similarity]
sdnr/wt/data-provider/provider/src/test/resources/TestTree/16.json [moved from sdnr/wt/data-provider/provider/src/test/resources/testequipment/16.json with 100% similarity]
sdnr/wt/data-provider/provider/src/test/resources/TestTree/17.json [moved from sdnr/wt/data-provider/provider/src/test/resources/testequipment/17.json with 100% similarity]
sdnr/wt/data-provider/provider/src/test/resources/TestTree/18.json [moved from sdnr/wt/data-provider/provider/src/test/resources/testequipment/18.json with 100% similarity]
sdnr/wt/data-provider/provider/src/test/resources/TestTree/19.json [moved from sdnr/wt/data-provider/provider/src/test/resources/testequipment/19.json with 100% similarity]
sdnr/wt/data-provider/provider/src/test/resources/TestTree/2.json [moved from sdnr/wt/data-provider/provider/src/test/resources/testequipment/2.json with 100% similarity]
sdnr/wt/data-provider/provider/src/test/resources/TestTree/20.json [moved from sdnr/wt/data-provider/provider/src/test/resources/testequipment/20.json with 100% similarity]
sdnr/wt/data-provider/provider/src/test/resources/TestTree/21.json [moved from sdnr/wt/data-provider/provider/src/test/resources/testequipment/21.json with 100% similarity]
sdnr/wt/data-provider/provider/src/test/resources/TestTree/3.json [moved from sdnr/wt/data-provider/provider/src/test/resources/testequipment/3.json with 100% similarity]
sdnr/wt/data-provider/provider/src/test/resources/TestTree/4.json [moved from sdnr/wt/data-provider/provider/src/test/resources/testequipment/4.json with 100% similarity]
sdnr/wt/data-provider/provider/src/test/resources/TestTree/5.json [moved from sdnr/wt/data-provider/provider/src/test/resources/testequipment/5.json with 100% similarity]
sdnr/wt/data-provider/provider/src/test/resources/TestTree/6.json [moved from sdnr/wt/data-provider/provider/src/test/resources/testequipment/6.json with 100% similarity]
sdnr/wt/data-provider/provider/src/test/resources/TestTree/7.json [moved from sdnr/wt/data-provider/provider/src/test/resources/testequipment/7.json with 100% similarity]
sdnr/wt/data-provider/provider/src/test/resources/TestTree/8.json [moved from sdnr/wt/data-provider/provider/src/test/resources/testequipment/8.json with 100% similarity]
sdnr/wt/data-provider/provider/src/test/resources/TestTree/9.json [moved from sdnr/wt/data-provider/provider/src/test/resources/testequipment/9.json with 100% similarity]
sdnr/wt/data-provider/provider/src/test/resources/TestYangGenSalMappingOpenRoadm/pmdata1.json [new file with mode: 0644]
sdnr/wt/data-provider/provider/src/test/resources/TestYangGenSalMappingOpenRoadm/pmdata2.json [new file with mode: 0644]
sdnr/wt/data-provider/provider/src/test/resources/TestYangGenSalMappingOpenRoadm/pmdata3.json [new file with mode: 0644]
sdnr/wt/data-provider/provider/src/test/resources/log4j.properties [new file with mode: 0644]
sdnr/wt/data-provider/provider/src/test/resources/simplelogger.properties [deleted file]
sdnr/wt/data-provider/setup/pom.xml
sdnr/wt/pom.xml

index 54ffc01..97c8ed8 100644 (file)
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>binding-parent</artifactId>
-        <version>2.1.0</version>
+        <version>2.1.1-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
     <groupId>org.onap.ccsdk.features.sdnr.wt</groupId>
     <artifactId>sdnr-wt-common</artifactId>
     <version>1.1.1-SNAPSHOT</version>
-    <packaging>jar</packaging>
+    <packaging>bundle</packaging>
 
     <name>ccsdk-features :: ${project.artifactId}</name>
     <licenses>
@@ -47,7 +47,6 @@
     </licenses>
 
     <properties>
-        <checkstyle.skip>true</checkstyle.skip> <!-- POM configuration -->
         <maven.javadoc.skip>true</maven.javadoc.skip>
         <maven.build.timestamp.format>yyyy-MM-dd HH:mm</maven.build.timestamp.format>
         <buildtime>${maven.build.timestamp} UTC</buildtime>
@@ -63,7 +62,7 @@
         </dependency>
         <dependency>
             <groupId>javax.servlet</groupId>
-            <artifactId>servlet-api</artifactId>
+            <artifactId>javax.servlet-api</artifactId>
         </dependency>
         <dependency>
             <groupId>org.osgi</groupId>
         <dependency>
             <groupId>org.elasticsearch.client</groupId>
             <artifactId>elasticsearch-rest-client</artifactId>
-            <version>${elasticsearch-rest-client.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>com.fasterxml.jackson.core</groupId>
-            <artifactId>jackson-core</artifactId>
         </dependency>
+<!--         <dependency> -->
+<!--             <groupId>com.fasterxml.jackson.core</groupId> -->
+<!--             <artifactId>jackson-core</artifactId> -->
+<!--         </dependency> -->
         <dependency>
             <groupId>com.fasterxml.jackson.core</groupId>
             <artifactId>jackson-annotations</artifactId>
         </dependency>
+<!--         <dependency> -->
+<!--             <groupId>com.fasterxml.jackson.core</groupId> -->
+<!--             <artifactId>jackson-databind</artifactId> -->
+<!--         </dependency> -->
         <dependency>
-            <groupId>com.fasterxml.jackson.core</groupId>
-            <artifactId>jackson-databind</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>com.google.code.findbugs</groupId>
-            <artifactId>annotations</artifactId>
+              <groupId>com.google.code.findbugs</groupId>
+              <artifactId>annotations</artifactId>
         </dependency>
     </dependencies>
 
             <plugin>
                 <groupId>com.github.alexcojocaru</groupId>
                 <artifactId>elasticsearch-maven-plugin</artifactId>
-                <version>6.16</version>
                 <configuration>
                     <skip>${skipTests}</skip>
                     <clusterName>testCluster</clusterName>
index 1ae9f1e..232b68c 100644 (file)
@@ -261,6 +261,7 @@ public class HtDatabaseClient extends ExtRestClient implements DatabaseClient, A
             total = response.getTotal();
 
         } catch (IOException e) {
+            LOG.warn("Possible Database connection failure. If this error persists, please check Database connectivity");
             LOG.warn("error do search {}: {}", queryBuilder, e);
         }
         return new SearchResult<SearchHit>(response != null ? response.getHits() : new SearchHit[] {}, total);
index 5a011ee..529853e 100644 (file)
@@ -45,10 +45,6 @@ public class SearchResult<T> {
         this.total = total;
     }
 
-    // public SearchResult(List<T> hits,long total) {
-    //         this.hits = hits;
-    //         this.total = total;
-    // }
     public SearchResult() {
         this.hits = new ArrayList<>();
         this.total = 0;
@@ -69,4 +65,11 @@ public class SearchResult<T> {
     public void add(T object) {
         this.hits.add(object);
     }
+
+    @Override
+    public String toString() {
+        return "SearchResult [hits=" + hits + ", total=" + total + "]";
+    }
+
+
 }
index 155e516..198fb92 100644 (file)
@@ -48,7 +48,11 @@ import java.security.interfaces.RSAPrivateKey;
 import java.security.spec.InvalidKeySpecException;
 import java.security.spec.PKCS8EncodedKeySpec;
 import java.util.Base64;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
+import java.util.Map.Entry;
 import javax.annotation.Nonnull;
 import javax.net.ssl.HostnameVerifier;
 import javax.net.ssl.HttpsURLConnection;
@@ -56,7 +60,7 @@ import javax.net.ssl.KeyManager;
 import javax.net.ssl.KeyManagerFactory;
 import javax.net.ssl.SSLContext;
 import javax.net.ssl.TrustManager;
-import javax.xml.bind.DatatypeConverter;
+import javax.servlet.http.HttpServletRequest;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -111,6 +115,29 @@ public class BaseHTTPClient {
             throws IOException {
         return this.sendRequest(uri, method, body != null ? body.getBytes(CHARSET) : null, headers);
     }
+    public BaseHTTPResponse sendRequest(HttpServletRequest req) throws IOException {
+        final String method = req.getMethod();
+        byte[] buffer=null;
+
+        if(!"GET".equals(method)) {
+            InputStream is = req.getInputStream();
+            buffer=is.readAllBytes();
+            is.close();
+
+        }
+        return this.sendRequest(req.getRequestURI(), method, buffer,mapHeaders(req));
+    }
+
+    private Map<String, String> mapHeaders(HttpServletRequest req) {
+        Map<String,String> headers = new HashMap<>();
+        Enumeration<String> keys = req.getHeaderNames();
+        String key;
+        while(keys.hasMoreElements()) {
+            key=keys.nextElement();
+            headers.put(key,req.getHeader(key));
+        }
+        return headers;
+    }
 
     protected @Nonnull BaseHTTPResponse sendRequest(String uri, String method, byte[] body, Map<String, String> headers)
             throws IOException {
@@ -164,10 +191,16 @@ public class BaseHTTPClient {
         // Receive answer
         int responseCode = ((HttpURLConnection) http).getResponseCode();
         String sresponse = "";
+        Map<String,String> responseHeaders = null;
         InputStream response = null;
         try {
             if (responseCode >= 200 && responseCode < 300) {
                 response = http.getInputStream();
+                responseHeaders = new HashMap<>();
+                for(Entry<String,List<String>> entry:http.getHeaderFields().entrySet()) {
+                    responseHeaders.put(entry.getKey(), String.join(";", entry.getValue()));
+                }
+
             } else {
                 response = ((HttpURLConnection) http).getErrorStream();
                 if (response == null) {
@@ -195,7 +228,7 @@ public class BaseHTTPClient {
         }
         LOG.debug("ResponseCode: " + responseCode);
         LOG.trace("Response (len:{}): {}", String.valueOf(lensum), sresponse);
-        return new BaseHTTPResponse(responseCode, sresponse);
+        return new BaseHTTPResponse(responseCode, sresponse,responseHeaders);
     }
 
     public static SSLContext setupSsl(boolean trustall)
@@ -299,7 +332,7 @@ public class BaseHTTPClient {
         String data = new String(pem);
         String[] tokens = data.split(beginDelimiter);
         tokens = tokens[1].split(endDelimiter);
-        return DatatypeConverter.parseBase64Binary(tokens[0]);
+        return Base64.getDecoder().decode(tokens[0]);
     }
 
     protected static RSAPrivateKey generatePrivateKeyFromDER(byte[] keyBytes)
@@ -337,4 +370,6 @@ public class BaseHTTPClient {
         return SSLCERT_PEM;
     }
 
+
+
 }
index 91a2cc2..a0fd722 100644 (file)
@@ -21,6 +21,8 @@
  */
 package org.onap.ccsdk.features.sdnr.wt.common.http;
 
+import java.util.Map;
+
 public class BaseHTTPResponse {
 
     public static final int CODE404 = 404;
@@ -28,10 +30,14 @@ public class BaseHTTPResponse {
     public static final BaseHTTPResponse UNKNOWN = new BaseHTTPResponse(-1, "");
     public final int code;
     public final String body;
-
+    public final Map<String,String> headers;
     public BaseHTTPResponse(int code, String body) {
+        this(code, body, null);
+    }
+    public BaseHTTPResponse(int code, String body, Map<String,String> rawData) {
         this.code = code;
         this.body = body;
+        this.headers = rawData;
     }
 
     @Override
@@ -40,6 +46,6 @@ public class BaseHTTPResponse {
     }
 
     public boolean isSuccess() {
-        return this.code == CODE200;
+        return this.code >= CODE200 && this.code<300;
     }
 }
index 59e4e77..f660702 100644 (file)
@@ -32,7 +32,6 @@ import java.security.NoSuchAlgorithmException;
 import java.util.Enumeration;
 import java.util.List;
 import java.util.Map;
-
 import javax.net.ssl.HostnameVerifier;
 import javax.net.ssl.HttpsURLConnection;
 import javax.net.ssl.SSLContext;
@@ -41,7 +40,6 @@ import javax.servlet.ServletException;
 import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
-
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -328,9 +326,9 @@ public abstract class BaseServlet extends HttpServlet {
             response = http.getInputStream();
         } else {
             response = http.getErrorStream();
-            if (response == null) {
-                http.getInputStream();
-            }
+//            if (response == null) {
+//                response = http.getInputStream();
+//            }
         }
 
         LOG.debug("ResponseCode: {}", responseCode);
index b926ff6..6475ac3 100644 (file)
@@ -23,6 +23,7 @@ package org.onap.ccsdk.features.sdnr.wt.common.test;
 
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
+import javax.servlet.ReadListener;
 import javax.servlet.ServletInputStream;
 
 public class ServletInputStreamFromByteArrayInputStream extends ServletInputStream {
@@ -42,4 +43,18 @@ public class ServletInputStreamFromByteArrayInputStream extends ServletInputStre
         return bis.read();
     }
 
+    @Override
+    public boolean isFinished() {
+        return false;
+    }
+
+    @Override
+    public boolean isReady() {
+        return false;
+    }
+
+    @Override
+    public void setReadListener(ReadListener readListener) {
+    }
+
 }
index 1914d9b..3ea607c 100644 (file)
@@ -24,6 +24,7 @@ package org.onap.ccsdk.features.sdnr.wt.common.test;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import javax.servlet.ServletOutputStream;
+import javax.servlet.WriteListener;
 
 public class ServletOutputStreamToByteArrayOutputStream extends ServletOutputStream {
 
@@ -32,12 +33,21 @@ public class ServletOutputStreamToByteArrayOutputStream extends ServletOutputStr
 
     // end of variables
 
+    public ByteArrayOutputStream getByteArrayOutputStream() {
+        return out;
+    }
+
     @Override
-    public void write(int arg0) throws IOException {
-        out.write(arg0);
+    public void setWriteListener(WriteListener writeListener) {
     }
 
-    public ByteArrayOutputStream getByteArrayOutputStream() {
-        return out;
+    @Override
+    public void write(int b) throws IOException {
+        out.write(b);
+    }
+
+    @Override
+    public boolean isReady() {
+        return false;
     }
 }
index 57ed596..48d9f94 100644 (file)
@@ -24,6 +24,7 @@ package org.onap.ccsdk.features.sdnr.wt.common.test;
 import java.io.IOException;
 import java.io.StringWriter;
 import javax.servlet.ServletOutputStream;
+import javax.servlet.WriteListener;
 
 public class ServletOutputStreamToStringWriter extends ServletOutputStream {
 
@@ -31,13 +32,28 @@ public class ServletOutputStreamToStringWriter extends ServletOutputStream {
     private StringWriter out = new StringWriter();
     // end of variables
 
+    public StringWriter getStringWriter() {
+        return out;
+    }
+
     @Override
     public void write(int arg0) throws IOException {
         out.write(arg0);
     }
 
-    public StringWriter getStringWriter() {
-        return out;
+    @Override
+    public String toString() {
+        return out.toString();
     }
 
+    @Override
+    public boolean isReady() {
+        return false;
+    }
+
+    @Override
+    public void setWriteListener(WriteListener writeListener) {
+    }
+
+
 }
index 1adf713..6fba87a 100644 (file)
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>binding-parent</artifactId>
-        <version>2.1.0</version>
+        <version>2.0.0-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
     <groupId>org.onap.ccsdk.features.sdnr.wt</groupId>
     <artifactId>sdnr-wt-common</artifactId>
-    <version>1.1.1-SNAPSHOT</version>
+    <version>1.0.0-SNAPSHOT</version>
     <packaging>jar</packaging>
 
     <name>ccsdk-features :: ${project.artifactId}</name>
index f167157..38c1581 100644 (file)
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>2.1.0</version>
+        <version>2.1.1-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
-    <groupId>org.onap.ccsdk.features.sdnr.wt</groupId>
+    <groupId>org.onap.ccsdk.features.sdnr.wt.aluminium.sr1</groupId>
     <artifactId>sdnr-wt-data-provider-feature</artifactId>
     <version>1.1.1-SNAPSHOT</version>
     <packaging>feature</packaging>
index 00bc0e0..074d88a 100755 (executable)
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>2.1.0</version>
+        <version>2.1.1-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
-    <groupId>org.onap.ccsdk.features.sdnr.wt</groupId>
+    <groupId>org.onap.ccsdk.features.sdnr.wt.aluminium.sr1</groupId>
     <artifactId>sdnr-wt-data-provider-installer</artifactId>
     <version>1.1.1-SNAPSHOT</version>
     <packaging>pom</packaging>
@@ -47,7 +47,7 @@
 
     <dependencies>
         <dependency>
-            <groupId>org.onap.ccsdk.features.sdnr.wt</groupId>
+            <groupId>org.onap.ccsdk.features.sdnr.wt.aluminium.sr1</groupId>
             <artifactId>${application.name}-feature</artifactId>
             <version>${project.version}</version>
             <type>xml</type>
             </exclusions>
         </dependency>
         <dependency>
-            <groupId>org.onap.ccsdk.features.sdnr.wt</groupId>
+            <groupId>org.onap.ccsdk.features.sdnr.wt.aluminium.sr1</groupId>
             <artifactId>${application.name}-provider</artifactId>
             <version>${project.version}</version>
         </dependency>
         <dependency>
-            <groupId>org.onap.ccsdk.features.sdnr.wt</groupId>
+            <groupId>org.onap.ccsdk.features.sdnr.wt.aluminium.sr1</groupId>
             <artifactId>${application.name}-setup</artifactId>
             <version>${project.version}</version>
         </dependency>
                         </goals>
                         <phase>validate</phase>
                         <configuration>
-                            <outputDirectory>${project.build.directory}/assembly/system/org/onap/ccsdk/features/sdnr/wt/sdnr-wt-data-provider-setup/${project.version}</outputDirectory>
+                            <outputDirectory>${project.build.directory}/assembly/system/org/onap/ccsdk/features/sdnr/wt/aluminium/sr1/sdnr-wt-data-provider-setup/${project.version}</outputDirectory>
                             <resources>
                                 <resource>
                                     <directory>${basedir}/../setup/target</directory>
index 0f8ce41..b3f39d9 100644 (file)
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>binding-parent</artifactId>
-        <version>2.1.0</version>
+        <version>2.1.1-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
-    <groupId>org.onap.ccsdk.features.sdnr.wt</groupId>
+    <groupId>org.onap.ccsdk.features.sdnr.wt.aluminium.sr1</groupId>
     <artifactId>sdnr-wt-data-provider-model</artifactId>
     <version>1.1.1-SNAPSHOT</version>
     <packaging>bundle</packaging>
             <artifactId>sdnr-wt-common</artifactId>
             <version>${project.version}</version>
         </dependency>
+        <dependency>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-databind</artifactId>
+        </dependency>
     </dependencies>
 
     <build>
index c7f9217..bd71d5b 100644 (file)
@@ -24,6 +24,7 @@ import java.time.ZonedDateTime;
 import java.time.format.DateTimeFormatter;
 import java.time.format.DateTimeParseException;
 import java.util.Date;
+import org.eclipse.jdt.annotation.Nullable;
 import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.NetconfTimeStamp;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DateAndTime;
 import org.slf4j.Logger;
@@ -66,6 +67,10 @@ public class NetconfTimeStampImpl implements NetconfTimeStamp {
     private static final Logger LOG = LoggerFactory.getLogger(NetconfTimeStamp.class);
 
     private static final NetconfTimeStamp CONVERTER = new NetconfTimeStampImpl();
+    private static final String TESTPATTERNSTRING = "2017-01-01T00:00:00.0Z";
+    //private static final String INITIALPATTERN = "0000-00-00T00:00:00.0Z";
+
+    private static final DateAndTime TESTPATTERN = new DateAndTime(TESTPATTERNSTRING);
 
     /**
      * Specify the input format expected from netconf, and from specific devices.
@@ -91,7 +96,7 @@ public class NetconfTimeStampImpl implements NetconfTimeStamp {
 
     /**
      * Use this function to get the converter
-     * 
+     *
      * @return global converter
      */
     public static NetconfTimeStamp getConverter() {
@@ -110,7 +115,7 @@ public class NetconfTimeStampImpl implements NetconfTimeStamp {
 
     /**
      * Get actual timestamp as NETCONF specific type NETCONF/YANG 1.0 Format
-     * 
+     *
      * @return String with Date in NETCONF/YANG Format Version 1.0.
      */
     @Override
@@ -132,7 +137,7 @@ public class NetconfTimeStampImpl implements NetconfTimeStamp {
 
     /**
      * Get time from date as NETCONF specific type NETCONF/YANG 1.0 Format in GMT
-     * 
+     *
      * @param date specifying the date and time
      * @return DateAndTime Type 1.0. Date in NETCONF/YANG Format Version 1.0.
      */
@@ -143,7 +148,7 @@ public class NetconfTimeStampImpl implements NetconfTimeStamp {
 
     /**
      * Get time from date as NETCONF specific type NETCONF/YANG 1.0 Format in GMT
-     * 
+     *
      * @param date specifying the date and time
      * @return DateAndTime Type 1.0. Date in NETCONF/YANG Format Version 1.0.
      */
@@ -189,6 +194,14 @@ public class NetconfTimeStampImpl implements NetconfTimeStamp {
         return "Malformed date: " + netconfTime; // Error handling
     }
 
+    /**
+     * Return testpattern
+     * @return
+     */
+    public static @Nullable DateAndTime getTestpatternDateAndTime() {
+        return TESTPATTERN;
+    }
+
     /*----------------------------------------------------
      * Private functions
      */
diff --git a/sdnr/wt/data-provider/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/model/types/ScalarTypeObject.java b/sdnr/wt/data-provider/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/model/types/ScalarTypeObject.java
new file mode 100644 (file)
index 0000000..da52f31
--- /dev/null
@@ -0,0 +1,49 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP : ccsdk features
+ * ================================================================================
+ * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property.
+ * All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ *
+ */
+package org.onap.ccsdk.features.sdnr.wt.dataprovider.model.types;
+
+public class ScalarTypeObject {
+
+    // constants
+    // end of constants
+
+    // variables
+    // end of variables
+
+    // constructors
+    // end of constructors
+
+    // getters and setters
+    // end of getters and setters
+
+    // private methods
+    // end of private methods
+
+    // public methods
+    // end of public methods
+
+    // static methods
+    // end of static methods
+
+    // private classes
+    // end of private classes
+}
index 339bf7c..dd90d29 100644 (file)
@@ -69,10 +69,18 @@ public class YangHelper2 {
     public static @NonNull Integer getInteger(@Nullable Uint16 val) {
         return val.intValue();
     }
+
+    public static @NonNull Long getInteger(@Nullable Long val) {
+        return val;
+    }
+
+    public static @NonNull Long getInteger(@Nullable Uint32 val) {
+        return val.longValue();
+    }
     /**
      * Aluminium version
      */
-    public static <K extends Identifier<T>,T extends Identifiable<K>> Map<K, T> getListOrMapALUMINIUM(Class<K> clazz, List<T> list) {
+    public static <K extends Identifier<T>,T extends Identifiable<K>> Map<K, T> getListOrMap(Class<K> clazz, List<T> list) {
         Map<K,T> map = new HashMap<>();
         for(T listelement:list) {
             Constructor<K> constructor;
@@ -86,17 +94,20 @@ public class YangHelper2 {
         }
         return map;
     }
-    public static <K extends Identifier<T>,T extends Identifiable<K>> Map<K, T> getListOrMapALUMINIUM(Class<K> clazz, T listElement) {
-        return getListOrMapALUMINIUM(clazz, Arrays.asList(listElement) );
+    public static <K extends Identifier<T>,T extends Identifiable<K>> Map<K, T> getListOrMap(Class<K> clazz, T listElement) {
+        return getListOrMap(clazz, Arrays.asList(listElement) );
     }
-    /**
-     * Sodium version
-     */
-    public static <K extends Identifier<T>,T extends Identifiable<K>> List<T> getListOrMap(Class<K> clazz, List<T> list) {
-        return list;
+    public static Uint32 getLongOrUint32(long longVal) {
+        return Uint32.valueOf(longVal);
+    }
+    public static Uint32 getLongOrUint32(Long longVal) {
+        return Uint32.valueOf(longVal);
+    }
+    public static Uint64 getBigIntegerOrUint64(BigInteger value) {
+        return Uint64.valueOf(value);
     }
-    public static <K extends Identifier<T>,T extends Identifiable<K>> List<T> getListOrMap(Class<K> clazz, T listElement) {
-        return Arrays.asList(listElement);
+    public static Class<?> getScalarTypeObjectClass() {
+        return org.opendaylight.yangtools.yang.binding.ScalarTypeObject.class;
     }
 
 }
index b660787..f89197b 100644 (file)
@@ -1,11 +1,7 @@
 package org.opendaylight.yang.gen.v1.http.org.openroadm.pm.types.rev191129;
 
 import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
 import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.util.Optional;
 import org.opendaylight.yangtools.yang.common.Uint64;
 
 /**
@@ -17,20 +13,17 @@ import org.opendaylight.yangtools.yang.common.Uint64;
  * finished by the user. This class is generated only once to prevent loss of user code.
  *
  */
-@JsonPOJOBuilder(buildMethodName = "build", withPrefix = "with")
+@JsonPOJOBuilder(buildMethodName = "build", withPrefix = "set")
 public class PmDataTypeBuilder {
     private Uint64 _uint64;
-    private BigInteger _unint64;
     private Long _int64;
     private BigDecimal _decimal64;
 
-    public PmDataTypeBuilder() {
-        System.out.println("--  Builder");
-    }
+    public PmDataTypeBuilder() {}
 
-    public PmDataTypeBuilder setUnint64(String v) {
-        _unint64 = new BigInteger(v);
-        return this;
+    //Aluminium uses constructor
+    public PmDataTypeBuilder(String v) {
+        this.setUint64(v);
     }
 
     public PmDataTypeBuilder setUint64(String v) {
@@ -39,7 +32,7 @@ public class PmDataTypeBuilder {
     }
 
     public PmDataTypeBuilder setInt64(String v) {
-        _int64 = new Long(v);
+        _int64 = Long.valueOf(v);
         return this;
     }
 
@@ -49,37 +42,17 @@ public class PmDataTypeBuilder {
     }
 
     public PmDataType build() {
-        Optional<Constructor<PmDataType>> cons1;
-        try {
-            cons1 = Optional.of(PmDataType.class.getConstructor(BigInteger.class));
-        } catch (NoSuchMethodException | SecurityException e) {
-            cons1 = Optional.empty();
-        }
-        Optional<Constructor<PmDataType>> cons2;
-        try {
-            cons2 = Optional.of(PmDataType.class.getConstructor(Uint64.class));
-        } catch (NoSuchMethodException | SecurityException e) {
-            cons2 = Optional.empty();
-        }
-
-        try {
-            if (_unint64 != null) {
-                return cons1.get().newInstance(_unint64);
-            } else if (_uint64 != null) {
-                return cons2.get().newInstance(_uint64);
-            } else if (_int64 != null) {
-                return new PmDataType(_int64);
-            } else {
-                return new PmDataType(_decimal64);
-            }
-        } catch (InstantiationException | IllegalAccessException | IllegalArgumentException
-                | InvocationTargetException e) {
-            throw new IllegalArgumentException("Wrong stuff");
+        if (_uint64 != null) {
+            return new PmDataType(_uint64);
+        } else if (_int64 != null) {
+            return new PmDataType(_int64);
+        } else {
+            return new PmDataType(_decimal64);
         }
     }
 
     public static PmDataType getDefaultInstance(String defaultValue) {
-        return new PmDataTypeBuilder().setInt64("-1").build();
+        return new PmDataTypeBuilder().setUint64(defaultValue).build();
     }
 
 }
index 605cd20..c8c8e99 100755 (executable)
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>2.1.0</version>
+        <version>2.1.1-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
-    <groupId>org.onap.ccsdk.features.sdnr.wt</groupId>
+    <groupId>org.onap.ccsdk.features.sdnr.wt.aluminium.sr1</groupId>
     <artifactId>sdnr-wt-data-provider-top</artifactId>
     <version>1.1.1-SNAPSHOT</version>
     <packaging>pom</packaging>
diff --git a/sdnr/wt/data-provider/provider/java.sh b/sdnr/wt/data-provider/provider/java.sh
new file mode 100755 (executable)
index 0000000..26d5aea
--- /dev/null
@@ -0,0 +1,14 @@
+#!/bin/bash
+# Java startup helper
+# if JAVA_HOME is specified, use related version
+
+echo "Java run helper"
+
+if [ ! -z "$JAVA_HOME" ] ; then
+  echo "JAVA_HOME=$JAVA_HOME"
+  $JAVA_HOME/bin/java "$@"
+else
+  echo "Java on path"
+  java "$@"
+fi
+
index cb40f71..8e56b70 100644 (file)
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>binding-parent</artifactId>
-        <version>2.1.0</version>
+        <version>2.1.1-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
-    <groupId>org.onap.ccsdk.features.sdnr.wt</groupId>
+    <groupId>org.onap.ccsdk.features.sdnr.wt.aluminium.sr1</groupId>
     <artifactId>sdnr-wt-data-provider-provider</artifactId>
     <version>1.1.1-SNAPSHOT</version>
     <packaging>bundle</packaging>
         </dependency>
         <dependency>
             <groupId>javax.servlet</groupId>
-            <artifactId>servlet-api</artifactId>
+            <artifactId>javax.servlet-api</artifactId>
         </dependency>
         <dependency>
             <groupId>org.osgi</groupId>
             <artifactId>org.osgi.core</artifactId>
             <scope>provided</scope>
         </dependency>
-
+        <dependency>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-annotations</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-databind</artifactId>
+        </dependency>
         <dependency>
             <groupId>org.apache.karaf.shell</groupId>
             <artifactId>org.apache.karaf.shell.core</artifactId>
             <scope>provided</scope>
         </dependency>
-        <!--          <dependency> -->
-        <!--             <groupId>org.apache.karaf.bundle</groupId> -->
-        <!--             <artifactId>org.apache.karaf.bundle.core</artifactId> -->
-        <!--             <scope>provided</scope> -->
-        <!--         </dependency> -->
+<!--          <dependency> -->
+<!--             <groupId>org.apache.karaf.bundle</groupId> -->
+<!--             <artifactId>org.apache.karaf.bundle.core</artifactId> -->
+<!--             <scope>provided</scope> -->
+<!--         </dependency> -->
         <dependency>
             <groupId>org.opendaylight.netconf</groupId>
             <artifactId>sal-netconf-connector</artifactId>
                             <goal>exec</goal>
                         </goals>
                         <configuration>
-                            <executable>java</executable>
+                            <executable>${basedir}/java.sh</executable>
                             <arguments>
                                 <argument>-jar</argument>
                                 <argument>${basedir}/../../data-provider/setup/target/sdnr-dmt.jar</argument>
diff --git a/sdnr/wt/data-provider/provider/simplelogger.properties b/sdnr/wt/data-provider/provider/simplelogger.properties
new file mode 100644 (file)
index 0000000..f29f44e
--- /dev/null
@@ -0,0 +1,34 @@
+# SLF4J's SimpleLogger configuration file
+# Simple implementation of Logger that sends all enabled log messages, for all defined loggers, to System.err.
+
+# Default logging detail level for all instances of SimpleLogger.
+# Must be one of ("trace", "debug", "info", "warn", or "error").
+# If not specified, defaults to "info".
+#org.slf4j.simpleLogger.defaultLogLevel=info
+
+# Logging detail level for a SimpleLogger instance named "xxxxx".
+# Must be one of ("trace", "debug", "info", "warn", or "error").
+# If not specified, the default logging detail level is used.
+#org.slf4j.simpleLogger.log.xxxxx=
+
+# Set to true if you want the current date and time to be included in output messages.
+# Default is false, and will output the number of milliseconds elapsed since startup.
+#org.slf4j.simpleLogger.showDateTime=false
+
+# The date and time format to be used in the output messages.
+# The pattern describing the date and time format is the same that is used in java.text.SimpleDateFormat.
+# If the format is not specified or is invalid, the default format is used.
+# The default format is yyyy-MM-dd HH:mm:ss:SSS Z.
+org.slf4j.simpleLogger.dateTimeFormat=yyyy-MM-dd HH:mm:ss:SSS Z
+
+# Set to true if you want to output the current thread name.
+# Defaults to true.
+org.slf4j.simpleLogger.showThreadName=true
+
+# Set to true if you want the Logger instance name to be included in output messages.
+# Defaults to true.
+org.slf4j.simpleLogger.showLogName=true
+
+# Set to true if you want the last component of the name to be included in output messages.
+# Defaults to false.
+org.slf4j.simpleLogger.showShortLogName=false
index 7a30542..0a966ae 100644 (file)
@@ -47,6 +47,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.pro
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.DeleteNetworkElementConnectionOutputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.Entity;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.EntityInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.Guicutthrough;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.MaintenanceEntity;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.MediatorServerEntity;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.NetworkElementConnectionEntity;
@@ -55,6 +56,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.pro
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadEventlogListOutputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadFaultcurrentListOutputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadFaultlogListOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadGuiCutThroughEntryOutputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadInventoryListOutputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadMaintenanceListOutputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadMediatorServerListOutputBuilder;
@@ -72,13 +74,10 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.pro
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.UpdateMediatorServerOutputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.UpdateNetworkElementConnectionInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.UpdateNetworkElementConnectionOutputBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.Guicutthrough;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadGuiCutThroughEntryInput;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadGuiCutThroughEntryOutputBuilder;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class ElasticSearchDataProvider /*extends BaseStatusProvider /* implements IEntityDataProvider*/ {
+public class ElasticSearchDataProvider {
 
     private static final Logger LOG = LoggerFactory.getLogger(ElasticSearchDataProvider.class);
 
@@ -165,9 +164,6 @@ public class ElasticSearchDataProvider /*extends BaseStatusProvider /* implement
      * Provide access to model API
      */
 
-    //org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.faultcurrent.list.output.Data
-    //org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.faultcurrent.list.output.PaginationBuilder
-    //eventRWFaultCurrent
     public ReadFaultcurrentListOutputBuilder readFaultCurrentList(EntityInput input) {
 
         ReadFaultcurrentListOutputBuilder outputBuilder = new ReadFaultcurrentListOutputBuilder();
@@ -181,9 +177,6 @@ public class ElasticSearchDataProvider /*extends BaseStatusProvider /* implement
         return outputBuilder;
     }
 
-    //org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.faultlog.list.output.Data
-    //org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.faultlog.list.output.PaginationBuilder
-    //eventRWFaultLog
     public ReadFaultlogListOutputBuilder readFaultLogList(EntityInput input) {
         ReadFaultlogListOutputBuilder outputBuilder = new ReadFaultlogListOutputBuilder();
         QueryResult<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.faultlog.list.output.Data> result =
@@ -195,9 +188,6 @@ public class ElasticSearchDataProvider /*extends BaseStatusProvider /* implement
         return outputBuilder;
     }
 
-    //org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.maintenance.list.output.Data
-    //org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.maintenance.list.output.PaginationBuilder
-    //maintenanceRW
     public ReadMaintenanceListOutputBuilder readMaintenanceList(EntityInput input) {
         ReadMaintenanceListOutputBuilder outputBuilder = new ReadMaintenanceListOutputBuilder();
         QueryResult<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.maintenance.list.output.Data> result =
@@ -209,9 +199,6 @@ public class ElasticSearchDataProvider /*extends BaseStatusProvider /* implement
         return outputBuilder;
     }
 
-    //org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.mediator.server.list.output.Data
-    //org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.mediator.server.list.output.Pagination
-    //mediatorserverRW
     public ReadMediatorServerListOutputBuilder readMediatorServerList(EntityInput input) {
 
         ReadMediatorServerListOutputBuilder outputBuilder = new ReadMediatorServerListOutputBuilder();
@@ -224,9 +211,6 @@ public class ElasticSearchDataProvider /*extends BaseStatusProvider /* implement
         return outputBuilder;
     }
 
-    //org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.network.element.connection.list.output.Data
-    //org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.network.element.connection.list.output.PaginationBuilder
-    //networkelementConnectionRW
     public ReadNetworkElementConnectionListOutputBuilder readNetworkElementConnectionList(EntityInput input) {
         ReadNetworkElementConnectionListOutputBuilder outputBuilder =
                 new ReadNetworkElementConnectionListOutputBuilder();
@@ -239,9 +223,6 @@ public class ElasticSearchDataProvider /*extends BaseStatusProvider /* implement
         return outputBuilder;
     }
 
-    //org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.inventory.list.output.Data
-    //org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.inventory.list.output.PaginationBuilder
-    //equipmentRW
     public ReadInventoryListOutputBuilder readInventoryList(EntityInput input) {
         ReadInventoryListOutputBuilder outputBuilder = new ReadInventoryListOutputBuilder();
         QueryResult<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.inventory.list.output.Data> result =
@@ -253,9 +234,6 @@ public class ElasticSearchDataProvider /*extends BaseStatusProvider /* implement
         return outputBuilder;
     }
 
-    //org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.inventory.list.output.Data
-    //org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.inventory.list.output.PaginationBuilder
-    //connnectionlogRW
     public ReadConnectionlogListOutputBuilder readConnectionlogList(EntityInput input) {
         ReadConnectionlogListOutputBuilder outputBuilder = new ReadConnectionlogListOutputBuilder();
         QueryResult<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.connectionlog.list.output.Data> result =
@@ -267,9 +245,6 @@ public class ElasticSearchDataProvider /*extends BaseStatusProvider /* implement
         return outputBuilder;
     }
 
-    //org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.eventlog.list.output.Data
-    //org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.eventlog.list.output.PaginationBuilder
-    //eventlogRW
     public ReadEventlogListOutputBuilder readEventlogList(ReadEventlogListInput input) throws IOException {
         ReadEventlogListOutputBuilder outputBuilder = new ReadEventlogListOutputBuilder();
         QueryResult<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.eventlog.list.output.Data> result =
@@ -281,12 +256,11 @@ public class ElasticSearchDataProvider /*extends BaseStatusProvider /* implement
         return outputBuilder;
     }
 
-    //org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.pmdata._15m.list.output.Data
-    //org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.pmdata._15m.list.output.PaginationBuilder
     public ReadPmdata15mListOutputBuilder readPmdata15mList(EntityInput input) {
         ReadPmdata15mListOutputBuilder outputBuilder = new ReadPmdata15mListOutputBuilder();
         QueryResult<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.pmdata._15m.list.output.Data> result =
                 this.pm15mRW.getData(input);
+        LOG.debug("Read data: readPmdata15mList: {}", result);
         outputBuilder.setData(result.getResult().getHits());
         outputBuilder.setPagination(
                 new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.pmdata._15m.list.output.PaginationBuilder(
@@ -294,8 +268,6 @@ public class ElasticSearchDataProvider /*extends BaseStatusProvider /* implement
         return outputBuilder;
     }
 
-    //org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.pmdata._24h.list.output.Data
-    //org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.pmdata._24h.list.output.Pagination
     public ReadPmdata24hListOutputBuilder readPmdata24hList(EntityInput input) {
         ReadPmdata24hListOutputBuilder outputBuilder = new ReadPmdata24hListOutputBuilder();
         QueryResult<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.pmdata._24h.list.output.Data> result =
index 3926d3f..efb5221 100644 (file)
@@ -22,7 +22,6 @@
 package org.onap.ccsdk.features.sdnr.wt.dataprovider.data.acessor;
 
 import java.io.IOException;
-
 import org.onap.ccsdk.features.sdnr.wt.common.database.ExtRestClient;
 import org.onap.ccsdk.features.sdnr.wt.common.database.HtDatabaseClient;
 import org.onap.ccsdk.features.sdnr.wt.common.database.SearchResult;
@@ -31,6 +30,7 @@ import org.onap.ccsdk.features.sdnr.wt.common.database.requests.SearchRequest;
 import org.onap.ccsdk.features.sdnr.wt.common.database.responses.AggregationEntries;
 import org.onap.ccsdk.features.sdnr.wt.common.database.responses.SearchResponse;
 import org.onap.ccsdk.features.sdnr.wt.dataprovider.data.rpctypehelper.QueryResult;
+import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.types.YangHelper2;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.Entity;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.status.output.Data;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.status.output.DataBuilder;
@@ -55,9 +55,13 @@ public class DataObjectAcessorStatus extends DataObjectAcessor<Data> {
         SearchResponse response = this.dbClient.search(request);
         AggregationEntries aggs = response.getAggregations(ESDATATYPE_FAULTCURRENT_SEVERITY_KEY);
 
-        Data[] data = {new DataBuilder().setFaults(new FaultsBuilder().setCriticals(aggs.getOrDefault("Critical", 0L))
-                .setMajors(aggs.getOrDefault("Major", 0L)).setMinors(aggs.getOrDefault("Minor", 0L))
-                .setWarnings(aggs.getOrDefault("Warning", 0L)).build()).build()};
+        Data[] data = {new DataBuilder()
+                .setFaults(
+                        new FaultsBuilder().setCriticals(YangHelper2.getLongOrUint32(aggs.getOrDefault("Critical", 0L)))
+                                .setMajors(YangHelper2.getLongOrUint32(aggs.getOrDefault("Major", 0L)))
+                                .setMinors(YangHelper2.getLongOrUint32(aggs.getOrDefault("Minor", 0L)))
+                                .setWarnings(YangHelper2.getLongOrUint32(aggs.getOrDefault("Warning", 0L))).build())
+                .build()};
         long toalsize = data.length;
         return new QueryResult<Data>(1L, 1L, new SearchResult<Data>(data, toalsize));
 
index 4cd015a..6e653ba 100644 (file)
@@ -22,8 +22,8 @@
 package org.onap.ccsdk.features.sdnr.wt.dataprovider.data.rpctypehelper;
 
 import java.math.BigInteger;
-
 import org.onap.ccsdk.features.sdnr.wt.common.database.SearchResult;
+import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.types.YangHelper2;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.PaginationOutputG;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.connectionlog.list.output.PaginationBuilder;
 
@@ -36,9 +36,9 @@ public class QueryResult<T> {
         this.result = result;
 
         PaginationBuilder x = new PaginationBuilder();
-        x.setPage(BigInteger.valueOf(page));
-        x.setSize(pageSize);
-        x.setTotal(BigInteger.valueOf(result.getTotal()));
+        x.setPage(YangHelper2.getBigIntegerOrUint64(BigInteger.valueOf(page)));
+        x.setSize(YangHelper2.getLongOrUint32(pageSize));
+        x.setTotal(YangHelper2.getBigIntegerOrUint64(BigInteger.valueOf(result.getTotal())));
         pagination = x.build();
     }
 
@@ -46,9 +46,9 @@ public class QueryResult<T> {
         this.result = result;
 
         PaginationBuilder x = new PaginationBuilder();
-        x.setPage(BigInteger.valueOf(queryByFilter.getPage()));
-        x.setSize(queryByFilter.getPageSize());
-        x.setTotal(BigInteger.valueOf(result.getTotal()));
+        x.setPage(YangHelper2.getBigIntegerOrUint64(BigInteger.valueOf(queryByFilter.getPage())));
+        x.setSize(YangHelper2.getLongOrUint32(queryByFilter.getPageSize()));
+        x.setTotal(YangHelper2.getBigIntegerOrUint64(BigInteger.valueOf(result.getTotal())));
         pagination = x.build();
     }
 
@@ -61,6 +61,11 @@ public class QueryResult<T> {
         return pagination;
     }
 
+    @Override
+    public String toString() {
+        return "QueryResult [result=" + result + ", pagination=" + pagination + "]";
+    }
+
 
 
 }
index bf1aff3..603c25b 100644 (file)
@@ -33,6 +33,7 @@ import org.onap.ccsdk.features.sdnr.wt.common.database.SearchHit;
 import org.onap.ccsdk.features.sdnr.wt.common.database.SearchResult;
 import org.onap.ccsdk.features.sdnr.wt.common.database.queries.QueryBuilder;
 import org.onap.ccsdk.features.sdnr.wt.dataprovider.yangtools.YangToolsMapper2;
+import org.onap.ccsdk.features.sdnr.wt.dataprovider.yangtools.YangToolsMapperHelper;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.Entity;
 import org.opendaylight.yangtools.concepts.Builder;
 import org.opendaylight.yangtools.yang.binding.DataObject;
@@ -142,7 +143,7 @@ public class EsDataObjectReaderWriter2<T extends DataObject> {
      * @return this for further operations.
      */
     public EsDataObjectReaderWriter2<T> setEsIdAttributeNameCamelized(String esIdAttributeName) {
-        return setEsIdAttributeName(YangToolsMapper2.toCamelCaseAttributeName(esIdAttributeName));
+        return setEsIdAttributeName(YangToolsMapperHelper.toCamelCaseAttributeName(esIdAttributeName));
     }
 
     /**
@@ -360,14 +361,13 @@ public class EsDataObjectReaderWriter2<T extends DataObject> {
             result = db.doReadAllJsonData(dataTypeName, ignoreException);
         }
         hits = result.getHits();
-        LOG.debug("Read: {} elements: {}  Failures: {}", dataTypeName, hits.size(),
-                yangtoolsMapper.getMappingFailures());
+        LOG.debug("Read: {} elements: {}", dataTypeName, hits.size());
 
         T object;
         for (SearchHit hit : hits) {
             object = getT(hit.getSourceAsString());
-            LOG.debug("Mapp Object: {}\nSource: '{}'\nResult: '{}'\n Failures: {}", hit.getId(),
-                    hit.getSourceAsString(), object, yangtoolsMapper.getMappingFailures());
+            LOG.debug("Mapp Object: {}\nSource: '{}'\nResult: '{}'\n", hit.getId(),
+                    hit.getSourceAsString(), object);
             if (object != null) {
                 setEsId(object, hit.getId());
                 res.add(object);
@@ -397,7 +397,7 @@ public class EsDataObjectReaderWriter2<T extends DataObject> {
         try {
             return yangtoolsMapper.readValue(jsonString, clazz);
         } catch (IOException e) {
-            LOG.info("Mapping problem", e);
+            LOG.info("Mapping problem {}:", clazz.getName(), e);
             return null;
         }
     }
index 085d381..bb4023a 100644 (file)
@@ -28,16 +28,13 @@ import java.io.InputStreamReader;
 import java.io.UnsupportedEncodingException;
 import java.net.URLDecoder;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
-
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
-
 import org.json.JSONObject;
 import org.onap.ccsdk.features.sdnr.wt.common.database.HtDatabaseClient;
 import org.onap.ccsdk.features.sdnr.wt.dataprovider.impl.DataTreeProviderImpl;
index 81b9645..fd6be82 100644 (file)
@@ -73,7 +73,7 @@ public class AboutHttpServlet extends HttpServlet {
     private static final String README_FILE = "README.md";
     private static final String NO_DEVICEMANAGERS_RUNNING_MESSAGE = null;
 
-    private final String groupId = "org.onap.ccsdk.features.sdnr.wt";
+    private final String groupId = this.getGroupIdOrDefault("org.onap.ccsdk.features.sdnr.wt");
     private final String artifactId = "sdnr-wt-data-provider-provider";
 
     private final Map<Integer,String> BUNDLESTATE_LUT;
@@ -97,7 +97,18 @@ public class AboutHttpServlet extends HttpServlet {
 
     }
 
-    // public void setBundleService(BundleService bundleService) {
+    protected String getGroupIdOrDefault(String def) {
+               String symbolicName = this.getManifestValue("Bundle-SymbolicName");
+               if(symbolicName!=null) {
+                       int idx =  symbolicName.indexOf(this.artifactId);
+                       if(idx>0) {
+                               return symbolicName.substring(0, idx-1);
+                       }
+               }
+               return def;
+       }
+
+       //      public void setBundleService(BundleService bundleService) {
     //         this.bundleService = bundleService;
     // }
 
@@ -199,7 +210,7 @@ public class AboutHttpServlet extends HttpServlet {
      * @param key
      * @return
      */
-    private String getManifestValue(String key) {
+    protected String getManifestValue(String key) {
         URL url = Resources.getUrlForRessource(AboutHttpServlet.class, "/META-INF/MANIFEST.MF");
         if (url == null) {
             return null;
index b08e5ad..491775e 100644 (file)
@@ -60,6 +60,7 @@ public class ODLVersionLUT {
         }
         if(odlMdsalVersionLUT==null) {
             odlMdsalVersionLUT = new HashMap<>();
+            odlMdsalVersionLUT.put("6.0.7","aluminium-SR1 (0.13.1)");
             odlMdsalVersionLUT.put("6.0.4","aluminium-SR0 (0.13.0)");
             odlMdsalVersionLUT.put("5.0.14","magnesium-SR2 (0.12.2)");
             odlMdsalVersionLUT.put("5.0.10","magnesium-SR1 (0.12.1)");
index ac0ee92..5c1ea98 100644 (file)
@@ -22,6 +22,7 @@
 package org.onap.ccsdk.features.sdnr.wt.dataprovider.impl;
 
 import org.onap.ccsdk.features.sdnr.wt.common.database.HtDatabaseClient;
+import org.onap.ccsdk.features.sdnr.wt.common.database.HtDatabaseClientException;
 import org.onap.ccsdk.features.sdnr.wt.dataprovider.http.DataTreeHttpServlet;
 import org.onap.ccsdk.features.sdnr.wt.dataprovider.http.MsServlet;
 import org.onap.ccsdk.features.sdnr.wt.dataprovider.http.ReadyHttpServlet;
@@ -74,11 +75,16 @@ public class DataProviderImpl implements IEntityDataProvider, AutoCloseable {
     public void init() throws Exception {
 
         LOG.info("Session Initiated start {}", APPLICATION_NAME);
-
-        // Start RPC Service
-        this.rpcApiService = new DataProviderServiceImpl(rpcProviderService, this.mediatorServerServlet);
-        this.treeServlet.setDatabaseClient(this.rpcApiService.getRawClient());
-        LOG.info("Session Initiated end. Initialization done");
+        try {
+            // Start RPC Service
+            this.rpcApiService = new DataProviderServiceImpl(rpcProviderService, this.mediatorServerServlet);
+            this.treeServlet.setDatabaseClient(this.rpcApiService.getRawClient());
+            LOG.info("Session Initiated end. Initialization done");
+        } catch (Exception e) {
+            if (e instanceof HtDatabaseClientException)
+                LOG.error("IOException: Could not connect to the Database. Please check Database connectivity");
+            throw e;
+        }
     }
 
     @Override
index 30819dc..5ef7a0a 100644 (file)
@@ -57,6 +57,8 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.pro
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadFaultcurrentListOutput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadFaultlogListInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadFaultlogListOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadGuiCutThroughEntryInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadGuiCutThroughEntryOutput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadInventoryListInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadInventoryListOutput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadMaintenanceListInput;
@@ -85,9 +87,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.pro
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.UpdateMediatorServerOutput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.UpdateNetworkElementConnectionInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.UpdateNetworkElementConnectionOutput;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadGuiCutThroughEntryInput;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadGuiCutThroughEntryOutput;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadGuiCutThroughEntryOutputBuilder;
 import org.opendaylight.yangtools.concepts.Builder;
 import org.opendaylight.yangtools.concepts.ObjectRegistration;
 import org.opendaylight.yangtools.yang.binding.DataObject;
@@ -165,7 +164,7 @@ public class DataProviderServiceImpl implements DataProviderService, AutoCloseab
     @Override
     public ListenableFuture<RpcResult<ReadFaultcurrentListOutput>> readFaultcurrentList(
             ReadFaultcurrentListInput input) {
-        LOG.debug("RPC Request: getFaultCurrentEntityList with input {}", input);
+        LOG.debug("RPC Request: readFaultCurrentList with input {}", input);
         RpcResultBuilder<ReadFaultcurrentListOutput> result =
                 read(() -> DataProviderServiceImpl.this.dataProvider.readFaultCurrentList(input));
         return result.buildFuture();
@@ -173,7 +172,7 @@ public class DataProviderServiceImpl implements DataProviderService, AutoCloseab
 
     @Override
     public ListenableFuture<RpcResult<ReadFaultlogListOutput>> readFaultlogList(ReadFaultlogListInput input) {
-        LOG.debug("RPC Request: getFaultCurrentEntityList with input {}", input);
+        LOG.debug("RPC Request: readFaultlogList with input {}", input);
         RpcResultBuilder<ReadFaultlogListOutput> result =
                 read(() -> DataProviderServiceImpl.this.dataProvider.readFaultLogList(input));
         return result.buildFuture();
@@ -181,7 +180,7 @@ public class DataProviderServiceImpl implements DataProviderService, AutoCloseab
 
     @Override
     public ListenableFuture<RpcResult<ReadMaintenanceListOutput>> readMaintenanceList(ReadMaintenanceListInput input) {
-        LOG.debug("RPC Request: getMaintenanceEntityList with input {}", input);
+        LOG.debug("RPC Request: readMaintenanceList with input {}", input);
         RpcResultBuilder<ReadMaintenanceListOutput> result =
                 read(() -> DataProviderServiceImpl.this.dataProvider.readMaintenanceList(input));
         return result.buildFuture();
@@ -190,7 +189,7 @@ public class DataProviderServiceImpl implements DataProviderService, AutoCloseab
     @Override
     public ListenableFuture<RpcResult<ReadMediatorServerListOutput>> readMediatorServerList(
             ReadMediatorServerListInput input) {
-        LOG.debug("RPC Request: getMediatorServerEntityList with input {}", input);
+        LOG.debug("RPC Request: readMediatorServerList with input {}", input);
         RpcResultBuilder<ReadMediatorServerListOutput> result =
                 read(() -> DataProviderServiceImpl.this.dataProvider.readMediatorServerList(input));
         return result.buildFuture();
@@ -199,7 +198,7 @@ public class DataProviderServiceImpl implements DataProviderService, AutoCloseab
     @Override
     public ListenableFuture<RpcResult<ReadNetworkElementConnectionListOutput>> readNetworkElementConnectionList(
             ReadNetworkElementConnectionListInput input) {
-        LOG.debug("RPC Request: getNetworkElementConnectionEntityList with input {}", input);
+        LOG.debug("RPC Request: readNetworkElementConnectionList with input {}", input);
         RpcResultBuilder<ReadNetworkElementConnectionListOutput> result =
                 read(() -> DataProviderServiceImpl.this.dataProvider.readNetworkElementConnectionList(input));
         return result.buildFuture();
@@ -208,7 +207,7 @@ public class DataProviderServiceImpl implements DataProviderService, AutoCloseab
 
     @Override
     public ListenableFuture<RpcResult<ReadPmdata15mListOutput>> readPmdata15mList(ReadPmdata15mListInput input) {
-        LOG.debug("RPC Request: getNetworkElementConnectionEntityList with input {}", input);
+        LOG.debug("RPC Request: readPmdata15mList with input {}", input);
         RpcResultBuilder<ReadPmdata15mListOutput> result =
                 read(() -> DataProviderServiceImpl.this.dataProvider.readPmdata15mList(input));
         return result.buildFuture();
@@ -217,7 +216,7 @@ public class DataProviderServiceImpl implements DataProviderService, AutoCloseab
 
     @Override
     public ListenableFuture<RpcResult<ReadPmdata24hListOutput>> readPmdata24hList(ReadPmdata24hListInput input) {
-        LOG.debug("RPC Request: getNetworkElementConnectionEntityList with input {}", input);
+        LOG.debug("RPC Request: readPmdata24hList with input {}", input);
         RpcResultBuilder<ReadPmdata24hListOutput> result =
                 read(() -> DataProviderServiceImpl.this.dataProvider.readPmdata24hList(input));
         return result.buildFuture();
@@ -226,7 +225,7 @@ public class DataProviderServiceImpl implements DataProviderService, AutoCloseab
 
     @Override
     public ListenableFuture<RpcResult<ReadStatusOutput>> readStatus(ReadStatusInput input) {
-        LOG.debug("RPC Request: getStatusEntityList with input {}", input);
+        LOG.debug("RPC Request: readStatusEntityList with input {}", input);
         RpcResultBuilder<ReadStatusOutput> result = read(() -> DataProviderServiceImpl.this.dataProvider.readStatus());
         return result.buildFuture();
 
@@ -234,7 +233,7 @@ public class DataProviderServiceImpl implements DataProviderService, AutoCloseab
 
     @Override
     public ListenableFuture<RpcResult<ReadInventoryListOutput>> readInventoryList(ReadInventoryListInput input) {
-        LOG.debug("RPC Request: getInventoryEntityList with input {}", input);
+        LOG.debug("RPC Request: readInventoryList with input {}", input);
         RpcResultBuilder<ReadInventoryListOutput> result =
                 read(() -> DataProviderServiceImpl.this.dataProvider.readInventoryList(input));
         return result.buildFuture();
@@ -243,7 +242,7 @@ public class DataProviderServiceImpl implements DataProviderService, AutoCloseab
     @Override
     public ListenableFuture<RpcResult<ReadPmdata15mLtpListOutput>> readPmdata15mLtpList(
             ReadPmdata15mLtpListInput input) {
-        LOG.debug("RPC Request: readPmdataLtpList with input {}", input);
+        LOG.debug("RPC Request: readPmdata15mLtpList with input {}", input);
         RpcResultBuilder<ReadPmdata15mLtpListOutput> result =
                 read(() -> DataProviderServiceImpl.this.dataProvider.readPmdata15mLtpList(input));
         return result.buildFuture();
@@ -252,7 +251,7 @@ public class DataProviderServiceImpl implements DataProviderService, AutoCloseab
     @Override
     public ListenableFuture<RpcResult<ReadPmdata15mDeviceListOutput>> readPmdata15mDeviceList(
             ReadPmdata15mDeviceListInput input) {
-        LOG.debug("RPC Request: readPmdataDeviceList with input {}", input);
+        LOG.debug("RPC Request: readPmdata15mDeviceList with input {}", input);
         RpcResultBuilder<ReadPmdata15mDeviceListOutput> result =
                 read(() -> DataProviderServiceImpl.this.dataProvider.readPmdata15mDeviceList(input));
         return result.buildFuture();
@@ -261,7 +260,7 @@ public class DataProviderServiceImpl implements DataProviderService, AutoCloseab
     @Override
     public ListenableFuture<RpcResult<ReadPmdata24hLtpListOutput>> readPmdata24hLtpList(
             ReadPmdata24hLtpListInput input) {
-        LOG.debug("RPC Request: readPmdataLtpList with input {}", input);
+        LOG.debug("RPC Request: readPmdata24hLtpList with input {}", input);
         RpcResultBuilder<ReadPmdata24hLtpListOutput> result =
                 read(() -> DataProviderServiceImpl.this.dataProvider.readPmdata24hLtpList(input));
         return result.buildFuture();
@@ -270,7 +269,7 @@ public class DataProviderServiceImpl implements DataProviderService, AutoCloseab
     @Override
     public ListenableFuture<RpcResult<ReadPmdata24hDeviceListOutput>> readPmdata24hDeviceList(
             ReadPmdata24hDeviceListInput input) {
-        LOG.debug("RPC Request: readPmdataDeviceList with input {}", input);
+        LOG.debug("RPC Request: readPmdata24hDeviceList with input {}", input);
         RpcResultBuilder<ReadPmdata24hDeviceListOutput> result =
                 read(() -> DataProviderServiceImpl.this.dataProvider.readPmdata24hDeviceList(input));
         return result.buildFuture();
@@ -306,6 +305,7 @@ public class DataProviderServiceImpl implements DataProviderService, AutoCloseab
     @Override
     public ListenableFuture<RpcResult<DeleteNetworkElementConnectionOutput>> deleteNetworkElementConnection(
             DeleteNetworkElementConnectionInput input) {
+        LOG.debug("RPC Request: deleteNetworkElementConnection with input {}", input);
         RpcResultBuilder<DeleteNetworkElementConnectionOutput> result =
                 read(() -> DataProviderServiceImpl.this.dataProvider.deleteNetworkElementConnection(input));
         return result.buildFuture();
@@ -376,7 +376,7 @@ public class DataProviderServiceImpl implements DataProviderService, AutoCloseab
     @Override
     public ListenableFuture<RpcResult<ReadGuiCutThroughEntryOutput>> readGuiCutThroughEntry(
             ReadGuiCutThroughEntryInput input) {
-        LOG.debug("RPC Request: readGuiCutThroughEntry with input {}", input);
+        LOG.debug("RPC Request: getGuiCutThroughEntry with input {}", input);
         RpcResultBuilder<ReadGuiCutThroughEntryOutput> result =
                 read(() -> DataProviderServiceImpl.this.dataProvider.readGuiCutThroughEntry(input));
         return result.buildFuture();
diff --git a/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/yangtools/DateAndTimeBuilder.java b/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/yangtools/DateAndTimeBuilder.java
deleted file mode 100644 (file)
index 6288900..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-package org.onap.ccsdk.features.sdnr.wt.dataprovider.yangtools;
-
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DateAndTime;
-
-public class DateAndTimeBuilder {
-        private final String _value;
-
-     public DateAndTimeBuilder(String v) {
-         this._value = v;
-     }
-
-     public DateAndTime build() {
-         return new DateAndTime(_value);
-     }
-}
index 0b1e7d5..e7580c6 100644 (file)
  */
 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;
 import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.MapperFeature;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.PropertyNamingStrategy;
-import com.fasterxml.jackson.databind.SerializerProvider;
-import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder;
-import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder.Value;
-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 org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DateAndTime;
+import org.onap.ccsdk.features.sdnr.wt.dataprovider.yangtools.mapperextensions.YangToolsBuilderAnnotationIntrospector;
+import org.onap.ccsdk.features.sdnr.wt.dataprovider.yangtools.mapperextensions.YangToolsModule;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * YangToolsMapper is a specific Jackson mapper configuration for opendaylight yangtools serialization or
@@ -56,182 +38,23 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.
  */
 public class YangToolsMapper extends ObjectMapper {
 
+    @SuppressWarnings("unused")
     private final Logger LOG = LoggerFactory.getLogger(YangToolsMapper.class);
     private static final long serialVersionUID = 1L;
-    private static BundleContext context;
 
     public YangToolsMapper() {
+        this(new YangToolsBuilderAnnotationIntrospector());
+    }
+
+    protected YangToolsMapper(YangToolsBuilderAnnotationIntrospector yangToolsBuilderAnnotationIntrospector) {
         super();
+
         configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
         setPropertyNamingStrategy(PropertyNamingStrategy.KEBAB_CASE);
         setSerializationInclusion(Include.NON_NULL);
-        setAnnotationIntrospector(new YangToolsBuilderAnnotationIntrospector());
-        SimpleModule dateAndTimeSerializerModule = new SimpleModule();
-        dateAndTimeSerializerModule.addSerializer(DateAndTime.class, new CustomDateAndTimeSerializer());
-        registerModule(dateAndTimeSerializerModule);
-        Bundle bundle = FrameworkUtil.getBundle(YangToolsMapper.class);
-        context = bundle != null ? bundle.getBundleContext() : null;
-    }
-
-    @Override
-    public String writeValueAsString(Object value) throws JsonProcessingException {
-        // TODO Auto-generated method stub
-        return super.writeValueAsString(value);
-    }
-
-    /**
-     * 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
-     */
-    @SuppressWarnings("unchecked")
-    public @Nullable <T extends DataObject> Builder<T> getBuilder(Class<T> clazz) {
-        String builder = clazz.getName() + "Builder";
-        try {
-            Class<?> clazzBuilder = findClass(builder);
-            return (Builder<T>) clazzBuilder.newInstance();
-        } catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) {
-            LOG.debug("Problem ", e);
-            return null;
-        }
-    }
-
-    /**
-     * Callback for handling mapping failures.
-     * 
-     * @return
-     */
-    public int getMappingFailures() {
-        return 0;
-    }
-
-    /**
-     * 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
-     */
-    public @Nullable static String toCamelCaseAttributeName(final String name) {
-        if (name == null || name.isEmpty())
-            return null;
-
-        final StringBuilder ret = new StringBuilder(name.length());
-        if (!name.startsWith("_"))
-            ret.append('_');
-        int start = 0;
-        for (final String word : name.split("-")) {
-            if (!word.isEmpty()) {
-                if (start++ == 0) {
-                    ret.append(Character.toLowerCase(word.charAt(0)));
-                } else {
-                    ret.append(Character.toUpperCase(word.charAt(0)));
-                }
-                ret.append(word.substring(1));
-            }
-        }
-        return ret.toString();
+        enable(MapperFeature.USE_GETTERS_AS_SETTERS);
+        setAnnotationIntrospector(yangToolsBuilderAnnotationIntrospector);
+        registerModule(new YangToolsModule());
     }
 
-    /**
-     * Adapted Builder callbacks
-     */
-    private static class YangToolsBuilderAnnotationIntrospector extends JacksonAnnotationIntrospector {
-        private static final long serialVersionUID = 1L;
-
-        @Override
-        public Class<?> findPOJOBuilder(AnnotatedClass ac) {
-            try {
-                String builder = null;
-                if (ac.getRawType().equals(Credentials.class)) {
-                    builder =
-                            "org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.credentials.credentials.LoginPasswordBuilder";
-                    //System.out.println(DataContainer.class.isAssignableFrom(ac.getRawType()));
-                    //System.out.println(ChoiceIn.class.isAssignableFrom(ac.getRawType()));
-
-                } else if (ac.getRawType().equals(DateAndTime.class)) {
-                    builder = DateAndTimeBuilder.class.getName();
-                }
-
-                else {
-                    if (ac.getRawType().isInterface()) {
-                        builder = ac.getName() + "Builder";
-                    }
-                }
-                if (builder != null) {
-                    //System.out.println("XX1: "+ac.getRawType());
-                    //System.out.println("XX2: "+builder);
-                    //Class<?> innerBuilder = Class.forName(builder);
-                    Class<?> innerBuilder = findClass(builder);
-                    //System.out.println("Builder found: "+ innerBuilder);
-                    return innerBuilder;
-                }
-            } catch (ClassNotFoundException e) {
-                // No problem .. try next
-            }
-            return super.findPOJOBuilder(ac);
-        }
-
-        @Override
-        public Value findPOJOBuilderConfig(AnnotatedClass ac) {
-            if (ac.hasAnnotation(JsonPOJOBuilder.class)) {
-                return super.findPOJOBuilderConfig(ac);
-            }
-            return new JsonPOJOBuilder.Value("build", "set");
-        }
-    }
-
-    private static Class<?> findClass(String name) throws ClassNotFoundException {
-        // Try to find in other bundles
-        if (context != null) {
-            //OSGi environment
-            for (Bundle b : context.getBundles()) {
-                try {
-                    return b.loadClass(name);
-                } catch (ClassNotFoundException e) {
-                    // No problem, this bundle doesn't have the class
-                }
-            }
-            throw new ClassNotFoundException("Can not find Class in OSGi context.");
-        } else {
-            return Class.forName(name);
-        }
-        // not found in any bundle
-    }
-
-    public static class DateAndTimeBuilder {
-
-        private final String _value;
-
-        public DateAndTimeBuilder(String v) {
-            this._value = v;
-        }
-
-        public DateAndTime build() {
-            return new DateAndTime(_value);
-        }
-
-    }
-    public static class CustomDateAndTimeSerializer extends StdSerializer<DateAndTime> {
-
-        /**
-         * 
-         */
-        private static final long serialVersionUID = 1L;
-
-        public CustomDateAndTimeSerializer() {
-            this(null);
-        }
-
-        protected CustomDateAndTimeSerializer(Class<DateAndTime> t) {
-            super(t);
-        }
-
-        @Override
-        public void serialize(DateAndTime value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
-            gen.writeString(value.getValue());
-        }
-
-    }
 }
index 8f05437..a19f114 100644 (file)
  */
 package org.onap.ccsdk.features.sdnr.wt.dataprovider.yangtools;
 
-import com.fasterxml.jackson.annotation.JsonInclude.Include;
-import com.fasterxml.jackson.core.JsonGenerator;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.DeserializationFeature;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.PropertyNamingStrategy;
-import com.fasterxml.jackson.databind.SerializerProvider;
-import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder;
-import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder.Value;
-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 java.lang.reflect.InvocationTargetException;
 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.onap.ccsdk.features.sdnr.wt.dataprovider.yangtools.mapperextensions.YangToolsBuilderAnnotationIntrospector;
 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;
 
@@ -54,17 +35,13 @@ import org.slf4j.LoggerFactory;
  * deserialization of DataObject to/from JSON TODO ChoiceIn and Credentials deserialization only for
  * LoginPasswordBuilder
  */
-public class YangToolsMapper2<T extends DataObject> extends ObjectMapper {
+public class YangToolsMapper2<T extends DataObject> extends YangToolsMapper {
 
     private static final Logger LOG = LoggerFactory.getLogger(YangToolsMapper2.class);
     private static final long serialVersionUID = 1L;
-    private static String BUILDER = "Builder";
 
-    private @Nullable final Class<T> clazz;
     private @Nullable final Class<? extends Builder<? extends T>> builderClazz;
 
-    private BundleContext context;
-
     /**
      * Generic Object creation of yangtools java class builder pattern.
      *
@@ -77,32 +54,10 @@ public class YangToolsMapper2<T extends DataObject> extends ObjectMapper {
      */
     public <X extends T, B extends Builder<X>> YangToolsMapper2(@NonNull Class<T> clazz,
             @Nullable Class<B> builderClazz) throws ClassNotFoundException {
-        super();
-        configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
-        setPropertyNamingStrategy(PropertyNamingStrategy.KEBAB_CASE);
-        setSerializationInclusion(Include.NON_NULL);
-        setAnnotationIntrospector(new YangToolsBuilderAnnotationIntrospector());
-        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);
+        super(new YangToolsBuilderAnnotationIntrospector(clazz, builderClazz));
 
-        this.clazz = clazz;
-        this.builderClazz = builderClazz != null ? builderClazz : getBuilderClass(getBuilderClassName(clazz));
-        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);
+        this.builderClazz =
+                builderClazz != null ? builderClazz : getBuilderClass(YangToolsMapperHelper.getBuilderClassName(clazz));
     }
 
     /**
@@ -115,74 +70,18 @@ public class YangToolsMapper2<T extends DataObject> extends ObjectMapper {
     public @Nullable Builder<? extends T> getBuilder(Class<T> clazz) {
         try {
             if (builderClazz != null)
-                return builderClazz.newInstance();
+                return builderClazz.getDeclaredConstructor().newInstance();
             else
                 return null;
-        } catch (InstantiationException | IllegalAccessException e) {
-            LOG.debug("Problem ", e);
-            return null;
-        }
-    }
-
-    /**
-     * Callback for handling mapping failures.
-     *
-     * @return
-     */
-    public int getMappingFailures() {
-        return 0;
-    }
-
-    /**
-     * 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
-     */
-    public @Nullable static String toCamelCaseAttributeName(final String name) {
-        if (name == null || name.isEmpty())
+        } catch (InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException
+                | NoSuchMethodException | SecurityException e) {
+            LOG.warn("Problem intantiating Builder", e);
             return null;
-
-        final StringBuilder ret = new StringBuilder(name.length());
-        if (!name.startsWith("_"))
-            ret.append('_');
-        int start = 0;
-        for (final String word : name.split("-")) {
-            if (!word.isEmpty()) {
-                if (start++ == 0) {
-                    ret.append(Character.toLowerCase(word.charAt(0)));
-                } else {
-                    ret.append(Character.toUpperCase(word.charAt(0)));
-                }
-                ret.append(word.substring(1));
-            }
         }
-        return ret.toString();
-    }
-
-    /**
-     * Verify if builder is available
-     *
-     * @throws ClassNotFoundException
-     **/
-    public Class<?> assertBuilderClass(Class<?> clazz) throws ClassNotFoundException {
-        return getBuilderClass(getBuilderClassName(clazz));
     }
 
     // --- Private functions
 
-    /**
-     * Create name of builder class
-     *
-     * @param <T>
-     * @param clazz
-     * @return builders class name
-     * @throws ClassNotFoundException
-     */
-    private static String getBuilderClassName(Class<?> clazz) {
-        return clazz.getName() + BUILDER;
-    }
-
     /**
      * Search builder in context
      *
@@ -192,128 +91,7 @@ public class YangToolsMapper2<T extends DataObject> extends ObjectMapper {
      */
     @SuppressWarnings("unchecked")
     private <X extends T, B extends Builder<X>> Class<B> getBuilderClass(String name) throws ClassNotFoundException {
-        // Try to find in other bundles
-        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) {
-                    // No problem, this bundle doesn't have the class
-                }
-            }
-            throw new ClassNotFoundException("Can not find Class in OSGi context.");
-        } else {
-            return (Class<B>) Class.forName(name);
-        }
-        // not found in any bundle
-    }
-
-    // --- Classes
-
-    /**
-     * Adapted Builder callbacks
-     */
-    private class YangToolsBuilderAnnotationIntrospector extends JacksonAnnotationIntrospector {
-        private static final long serialVersionUID = 1L;
-
-        @Override
-        public Class<?> findPOJOBuilder(AnnotatedClass ac) {
-            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 (clazz2build.equals(DateAndTime.class)) {
-                return DateAndTimeBuilder.class;
-                //            } else if (ac.getRawType().equals(PmDataType.class)) {
-                //                LOG.info("Builder class");
-                //                return PMDataTypeBuilder.class;
-            } else if (clazz2build.equals(clazz)) {
-                return builderClazz;
-            }
-
-            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 {
-                    innerBuilder = getBuilderClass(builder);
-                    LOG.info("Found2: {}", innerBuilder);
-                    return innerBuilder;
-                } catch (ClassNotFoundException e) {
-                    LOG.info("Could not find {}", clazz2build);
-                    // No problem .. try next
-                }
-            }
-            Class<?> clazz = super.findPOJOBuilder(ac);
-            return clazz;
-        }
-
-        @Override
-        public Value findPOJOBuilderConfig(AnnotatedClass ac) {
-            if (ac.hasAnnotation(JsonPOJOBuilder.class)) {
-                return super.findPOJOBuilderConfig(ac);
-            }
-            return new JsonPOJOBuilder.Value("build", "set");
-        }
-    }
-
-    public static class DateAndTimeBuilder {
-
-        private final String _value;
-
-        public DateAndTimeBuilder(String v) {
-            this._value = v;
-        }
-
-        public DateAndTime build() {
-            return new DateAndTime(_value);
-        }
-
+        return (Class<B>) YangToolsMapperHelper.getBuilderClass(name);
     }
-    public static class CustomDateAndTimeSerializer extends StdSerializer<@NonNull DateAndTime> {
 
-        private static final long serialVersionUID = 1L;
-
-        public CustomDateAndTimeSerializer() {
-            this(null);
-        }
-
-        protected CustomDateAndTimeSerializer(Class<DateAndTime> t) {
-            super(t);
-        }
-
-        @Override
-        public void serialize(DateAndTime value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
-            gen.writeString(value.getValue());
-        }
-
-    }
-    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());
-        }
-
-    }
 }
diff --git a/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/yangtools/YangToolsMapperHelper.java b/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/yangtools/YangToolsMapperHelper.java
new file mode 100644 (file)
index 0000000..a2afab0
--- /dev/null
@@ -0,0 +1,244 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP : ccsdk features
+ * ================================================================================
+ * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property.
+ * All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ *
+ */
+package org.onap.ccsdk.features.sdnr.wt.dataprovider.yangtools;
+
+import com.fasterxml.jackson.databind.DeserializationContext;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Optional;
+import java.util.concurrent.ConcurrentHashMap;
+import javax.annotation.Nullable;
+import org.opendaylight.yangtools.concepts.Builder;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.FrameworkUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class YangToolsMapperHelper {
+
+    private static final Logger LOG = LoggerFactory.getLogger(YangToolsMapperHelper.class);
+    private static final String TYPEOBJECT_INSTANCE_METHOD = "getDefaultInstance";
+    private static final String BUILDER = "Builder";
+
+    private static BundleContext context = getBundleContext();
+    private static ConcurrentHashMap<String, Class<?>> cache = new ConcurrentHashMap<>();
+
+    private YangToolsMapperHelper() {
+        //Make unaccessible
+    }
+
+    public static Class<?> findClass(String name) throws ClassNotFoundException {
+
+        //Try first in cache
+        Class<?> res = cache.get(name);
+        if (res != null) {
+            return res;
+        }
+        //Try first in actual bundle
+        try {
+            return loadClass(null, name);
+        } catch (ClassNotFoundException e) {
+            // No problem, this bundle doesn't have the class
+        }
+        // Try to find in other bundles
+        if (context != null) {
+            //OSGi environment
+            for (Bundle b : context.getBundles()) {
+                try {
+                    return loadClass(b, name);
+                } catch (ClassNotFoundException e) {
+                    // No problem, this bundle doesn't have the class
+                }
+            }
+        }
+        // really not found in any bundle
+        throw new ClassNotFoundException("Can not find class '"+name+"'");
+    }
+
+    private static Class<?> loadClass(Bundle b, String name) throws ClassNotFoundException {
+        Class<?> res = b == null ? Class.forName(name) : b.loadClass(name);
+        cache.put(name, res);
+        return res;
+    }
+
+    /**
+     * Verify if builder is available
+     *
+     * @throws ClassNotFoundException
+     **/
+    public static Class<?> assertBuilderClass(Class<?> clazz) throws ClassNotFoundException {
+        return getBuilderClass(getBuilderClassName(clazz));
+    }
+
+    public static Class<?> getBuilderClass(String name) throws ClassNotFoundException {
+        return findClass(name);
+    }
+
+    public static Class<?> getBuilderClass(Class<?> clazz) throws ClassNotFoundException {
+        return findClass(getBuilderClassName(clazz));
+    }
+
+    /**
+     * Create name of builder class
+     *
+     * @param <T>
+     * @param clazz
+     * @return builders class name
+     * @throws ClassNotFoundException
+     */
+    public static String getBuilderClassName(Class<?> clazz) {
+        return clazz.getName() + BUILDER;
+    }
+
+    @SuppressWarnings("unchecked")
+    public static <B extends Builder<?>> Class<B> findBuilderClass(DeserializationContext ctxt, Class<?> clazz) throws ClassNotFoundException {
+        return (Class<B>) findClass(getBuilderClassName(clazz));
+    }
+
+    public static <B extends Builder<?>> Optional<Class<B>> findBuilderClassOptional(DeserializationContext ctxt, Class<?> clazz) {
+        try {
+            return Optional.of(findBuilderClass(ctxt, clazz));
+        } catch (ClassNotFoundException e) {
+            return Optional.empty();
+        }
+    }
+
+    public static boolean hasClassDeclaredMethod(Class<?> clazz, String name) {
+        Method[] methods = clazz.getDeclaredMethods();
+        for (Method m : methods) {
+            if (m.getName().equals(name)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    @SuppressWarnings("unchecked")
+    public static <T> Optional<T> getInstanceByConstructor(Class<?> clazz, String arg) throws InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException {
+        List<Class<?>> ctypes = getConstructorParameterTypes(clazz, String.class);
+        Optional<Object> oObj;
+        for (Class<?> ctype : ctypes) {
+            if (ctype.equals(String.class)) {
+                return Optional.of((T) clazz.getConstructor(ctype).newInstance(arg));
+            } else if ((oObj = getDefaultInstance(ctype, arg)).isPresent()) {
+                return Optional.of((T) clazz.getConstructor(ctype).newInstance(oObj.get()));
+            } else {
+                // TODO: recursive instantiation down to string constructor or
+                // getDefaultInstance method
+                LOG.debug("Not implemented arg:'{}' class:'{}'", arg, clazz);
+            }
+        }
+        return Optional.empty();
+    }
+
+    @SuppressWarnings("unchecked")
+    public static <T> Optional<T> getDefaultInstance(@Nullable Class<?> clazz, String arg)
+            throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException,
+            InvocationTargetException {
+        LOG.trace("arg:'{}' clazz '{}'", arg, clazz.getName());
+        if (clazz != null) {
+            Method[] methods = clazz.getDeclaredMethods();
+            for (Method m : methods) {
+                //TODO Verify argument type to avoid exception
+                if (m.getName().equals(TYPEOBJECT_INSTANCE_METHOD)) {
+                    Method method = clazz.getDeclaredMethod(TYPEOBJECT_INSTANCE_METHOD, String.class);
+                    LOG.trace("Invoke {} available {}",TYPEOBJECT_INSTANCE_METHOD, method != null);
+                    return Optional.of((T) method.invoke(null, arg));
+                }
+            }
+        }
+        return Optional.empty();
+    }
+
+    public static <T> Optional<T> getDefaultInstance(Optional<Class<T>> optionalClazz, String arg)
+            throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException,
+            InvocationTargetException {
+        if (optionalClazz.isPresent()) {
+            return getDefaultInstance(optionalClazz.get(), arg);
+        }
+        return Optional.empty();
+    }
+
+    public static List<Class<?>> getConstructorParameterTypes(Class<?> clazz, Class<?> prefer) {
+
+        Constructor<?>[] constructors = clazz.getConstructors();
+        List<Class<?>> res = new ArrayList<>();
+        for (Constructor<?> c : constructors) {
+            Class<?>[] ptypes = c.getParameterTypes();
+            if (ptypes.length == 1) {
+                res.add(ptypes[0]);
+            }
+
+            if (prefer != null && ptypes.length == 1 && ptypes[0].equals(prefer)) {
+                return Arrays.asList(prefer);
+            }
+        }
+        return res;
+    }
+
+    public static boolean implementsInterface(Class<?> clz, Class<?> ifToImplement) {
+        Class<?>[] ifs = clz.getInterfaces();
+        for (Class<?> iff : ifs) {
+            if (iff.equals(ifToImplement)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * 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
+     */
+    public @Nullable static String toCamelCaseAttributeName(final String name) {
+        if (name == null || name.isEmpty())
+            return null;
+
+        final StringBuilder ret = new StringBuilder(name.length());
+        if (!name.startsWith("_"))
+            ret.append('_');
+        int start = 0;
+        for (final String word : name.split("-")) {
+            if (!word.isEmpty()) {
+                if (start++ == 0) {
+                    ret.append(Character.toLowerCase(word.charAt(0)));
+                } else {
+                    ret.append(Character.toUpperCase(word.charAt(0)));
+                }
+                ret.append(word.substring(1));
+            }
+        }
+        return ret.toString();
+    }
+
+    private static BundleContext getBundleContext() {
+        Bundle bundle = FrameworkUtil.getBundle(YangToolsMapperHelper.class);
+        return bundle != null ? bundle.getBundleContext() : null;
+    }
+}
diff --git a/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/yangtools/builder/DateAndTimeBuilder.java b/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/yangtools/builder/DateAndTimeBuilder.java
new file mode 100644 (file)
index 0000000..8dbaf4a
--- /dev/null
@@ -0,0 +1,36 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP : ccsdk features
+ * ================================================================================
+ * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property.
+ * All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ *
+ */
+package org.onap.ccsdk.features.sdnr.wt.dataprovider.yangtools.builder;
+
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DateAndTime;
+
+public class DateAndTimeBuilder {
+        private final String _value;
+
+     public DateAndTimeBuilder(String v) {
+         this._value = v;
+     }
+
+     public DateAndTime build() {
+         return new DateAndTime(_value);
+     }
+}
diff --git a/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/yangtools/mapperextensions/YangToolsBuilderAnnotationIntrospector.java b/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/yangtools/mapperextensions/YangToolsBuilderAnnotationIntrospector.java
new file mode 100644 (file)
index 0000000..0a119e0
--- /dev/null
@@ -0,0 +1,130 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP : ccsdk features
+ * ================================================================================
+ * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property.
+ * All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ *
+ */
+package org.onap.ccsdk.features.sdnr.wt.dataprovider.yangtools.mapperextensions;
+
+import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder;
+import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder.Value;
+import com.fasterxml.jackson.databind.cfg.MapperConfig;
+import com.fasterxml.jackson.databind.introspect.AnnotatedClass;
+import com.fasterxml.jackson.databind.introspect.AnnotatedMethod;
+import com.fasterxml.jackson.databind.introspect.JacksonAnnotationIntrospector;
+import java.math.BigInteger;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import org.onap.ccsdk.features.sdnr.wt.dataprovider.yangtools.YangToolsMapperHelper;
+import org.onap.ccsdk.features.sdnr.wt.dataprovider.yangtools.builder.DateAndTimeBuilder;
+//import org.onap.ccsdk.features.sdnr.wt.dataprovider.data.builders.rev201110.read.network.element.connection.list.output.DataBuilder;
+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.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.credentials.credentials.LoginPasswordBuilder;
+import org.opendaylight.yangtools.yang.common.Uint16;
+import org.opendaylight.yangtools.yang.common.Uint32;
+import org.opendaylight.yangtools.yang.common.Uint64;
+import org.opendaylight.yangtools.yang.common.Uint8;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class YangToolsBuilderAnnotationIntrospector extends JacksonAnnotationIntrospector {
+
+    private static final Logger LOG = LoggerFactory.getLogger(YangToolsBuilderAnnotationIntrospector.class);
+    private static final long serialVersionUID = 1L;
+
+    private final Map<Class<?>, String> customDeserializer;
+
+    public YangToolsBuilderAnnotationIntrospector() {
+        this(null, null);
+    }
+
+    public YangToolsBuilderAnnotationIntrospector(Class<?> cls, Class<?> builderClass) {
+        this.customDeserializer = new HashMap<>();
+        if (cls != null && builderClass != null) {
+            this.customDeserializer.put(cls, builderClass.getName());
+        }
+        this.customDeserializer.put(DateAndTime.class, DateAndTimeBuilder.class.getName());
+        this.customDeserializer.put(Credentials.class, LoginPasswordBuilder.class.getName());
+    }
+
+    @Override
+    public Class<?> findPOJOBuilder(AnnotatedClass ac) {
+        try {
+            String builder = null;
+            if (this.customDeserializer.containsKey(ac.getRawType())) {
+                builder = this.customDeserializer.get(ac.getRawType());
+            } else {
+                if (ac.getRawType().isInterface()) {
+                    builder = ac.getName() + "Builder";
+                }
+            }
+            if (builder != null) {
+                LOG.trace("map {} with builder {}", ac.getName(), builder);
+                Class<?> innerBuilder = YangToolsMapperHelper.findClass(builder);
+                return innerBuilder;
+            }
+        } catch (ClassNotFoundException e) {
+            LOG.trace("builder class not found for {}", ac.getName());
+        }
+        return super.findPOJOBuilder(ac);
+    }
+
+    @Override
+    public Value findPOJOBuilderConfig(AnnotatedClass ac) {
+        if (ac.hasAnnotation(JsonPOJOBuilder.class)) {
+            return super.findPOJOBuilderConfig(ac);
+        }
+        return new JsonPOJOBuilder.Value("build", "set");
+    }
+
+    @Override
+    public AnnotatedMethod resolveSetterConflict(MapperConfig<?> config, AnnotatedMethod setter1,
+            AnnotatedMethod setter2) {
+        Class<?> p1 = setter1.getRawParameterType(0);
+        Class<?> p2 = setter2.getRawParameterType(0);
+        AnnotatedMethod res = null;
+
+        if (this.isAssignable(p1, p2, Map.class, List.class)) {
+                       res = p1.isAssignableFrom(List.class) ? setter1 : setter2; //prefer List setter
+        } else if (this.isAssignable(p1, p2, Uint64.class, BigInteger.class)) {
+            res = setter1;
+        } else if (this.isAssignable(p1, p2, Uint32.class, Long.class)) {
+            res = setter1;
+        } else if (this.isAssignable(p1, p2, Uint16.class, Integer.class)) {
+            res = setter1;
+        } else if (this.isAssignable(p1, p2, Uint8.class, Short.class)) {
+            res = setter1;
+        }
+        if (res == null) {
+            res = super.resolveSetterConflict(config, setter1, setter2);
+        }
+        LOG.debug("{} (m1={} <=> m2={} => result:{})", setter1.getName(), p1.getSimpleName(), p2.getSimpleName(),
+                res.getRawParameterType(0).getSimpleName());
+
+        return res;
+    }
+
+    private boolean isAssignable(Class<?> p1, Class<?> p2, Class<?> c1, Class<?> c2) {
+        return ((p1.isAssignableFrom(c1) && p2.isAssignableFrom(c2))
+                || (p2.isAssignableFrom(c1) && p1.isAssignableFrom(c2)));
+
+    }
+
+}
diff --git a/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/yangtools/mapperextensions/YangToolsDeserializerModifier.java b/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/yangtools/mapperextensions/YangToolsDeserializerModifier.java
new file mode 100644 (file)
index 0000000..634a3bc
--- /dev/null
@@ -0,0 +1,117 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP : ccsdk features
+ * ================================================================================
+ * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property.
+ * All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ *
+ */
+package org.onap.ccsdk.features.sdnr.wt.dataprovider.yangtools.mapperextensions;
+
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.databind.BeanDescription;
+import com.fasterxml.jackson.databind.DeserializationConfig;
+import com.fasterxml.jackson.databind.DeserializationContext;
+import com.fasterxml.jackson.databind.JavaType;
+import com.fasterxml.jackson.databind.JsonDeserializer;
+import com.fasterxml.jackson.databind.KeyDeserializer;
+import com.fasterxml.jackson.databind.deser.BeanDeserializerModifier;
+import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.NoSuchElementException;
+import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.types.ScalarTypeObject;
+//import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.types.ScalarTypeObject;
+import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.types.YangHelper2;
+import org.onap.ccsdk.features.sdnr.wt.dataprovider.yangtools.YangToolsMapperHelper;
+import org.onap.ccsdk.features.sdnr.wt.dataprovider.yangtools.serialize.BaseIdentityDeserializer;
+import org.onap.ccsdk.features.sdnr.wt.dataprovider.yangtools.serialize.ClassDeserializer;
+import org.onap.ccsdk.features.sdnr.wt.dataprovider.yangtools.serialize.IdentifierDeserializer;
+import org.onap.ccsdk.features.sdnr.wt.dataprovider.yangtools.serialize.TypeObjectDeserializer;
+import org.opendaylight.yangtools.yang.binding.BaseIdentity;
+import org.opendaylight.yangtools.yang.binding.Identifier;
+import org.opendaylight.yangtools.yang.binding.TypeObject;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class YangToolsDeserializerModifier extends BeanDeserializerModifier {
+
+    private static final Logger LOG = LoggerFactory.getLogger(YangToolsDeserializerModifier.class);
+    private static final String getEnumMethodName="valueOf";
+
+    @Override
+    public JsonDeserializer<Enum<?>> modifyEnumDeserializer(DeserializationConfig config, final JavaType type,
+            BeanDescription beanDesc, final JsonDeserializer<?> deserializer) {
+        return new JsonDeserializer<Enum<?>>() {
+
+            @Override
+            public Enum<?> deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException {
+                Class<?> clazz = type.getRawClass();
+
+                try {
+                    Method method = clazz.getDeclaredMethod(getEnumMethodName, String.class);
+                    Enum<?> result = (Enum<?>) method.invoke(null, jp.getValueAsString());
+                    LOG.debug("Deserialize '{}' with class '{}' to '{}'", jp.getValueAsString(), clazz.getName(), result);
+                    return result;
+                } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException
+                        | NoSuchMethodException | NoSuchElementException | SecurityException e) {
+                    LOG.warn("problem deserializing enum for {} with value {}: {}", clazz.getName(),
+                            jp.getValueAsString(), e);
+                }
+                throw new IOException(
+                        "unable to parse enum (" + type.getRawClass() + ")for value " + jp.getValueAsString());
+            }
+        };
+    }
+
+    @Override
+    public JsonDeserializer<?> modifyDeserializer(DeserializationConfig config, BeanDescription beanDesc,
+            JsonDeserializer<?> deserializer) {
+        final JavaType type = beanDesc.getType();
+        final Class<?> rawClass = type.getRawClass();
+
+        JsonDeserializer<?> deser = super.modifyDeserializer(config, beanDesc, deserializer);
+
+        if (YangToolsMapperHelper.implementsInterface(rawClass, TypeObject.class)) {
+            deser = new TypeObjectDeserializer<TypeObject>(type, deser);
+        } else if (YangToolsMapperHelper.implementsInterface(rawClass, YangHelper2.getScalarTypeObjectClass())) {
+            deser = new TypeObjectDeserializer<ScalarTypeObject>(type, deser);
+        } else if (YangToolsMapperHelper.implementsInterface(rawClass, BaseIdentity.class)) {
+            deser = new BaseIdentityDeserializer<BaseIdentity>(deser);
+        } else if (rawClass.equals(Class.class)) {
+            deser = new ClassDeserializer(rawClass);
+        }
+
+        LOG.debug("Deserialize '{}' with deserializer '{}'", rawClass.getName(), deser.getClass().getName());
+        return deser;
+    }
+
+    @Override
+    public KeyDeserializer modifyKeyDeserializer(DeserializationConfig config, JavaType type, KeyDeserializer deser) {
+        KeyDeserializer res;
+        if (YangToolsMapperHelper.implementsInterface(type.getRawClass(), Identifier.class)) {
+            res = new IdentifierDeserializer();
+        } else {
+            res = super.modifyKeyDeserializer(config, type, deser);
+        }
+        LOG.debug("Keydeserialize '{}' with deserializer '{}'", type.getRawClass().getName(), res.getClass().getName());
+        return res;
+    }
+
+    void test() {
+        com.fasterxml.jackson.databind.util.ClassUtil xy;
+    }
+}
diff --git a/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/yangtools/mapperextensions/YangToolsModule.java b/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/yangtools/mapperextensions/YangToolsModule.java
new file mode 100644 (file)
index 0000000..46f69d4
--- /dev/null
@@ -0,0 +1,50 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP : ccsdk features
+ * ================================================================================
+ * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property.
+ * All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ *
+ */
+package org.onap.ccsdk.features.sdnr.wt.dataprovider.yangtools.mapperextensions;
+
+import com.fasterxml.jackson.databind.module.SimpleModule;
+import java.util.Map;
+import org.onap.ccsdk.features.sdnr.wt.dataprovider.yangtools.serialize.DateAndTimeSerializer;
+import org.onap.ccsdk.features.sdnr.wt.dataprovider.yangtools.serialize.EnumSerializer;
+import org.onap.ccsdk.features.sdnr.wt.dataprovider.yangtools.serialize.IdentifierDeserializer;
+import org.onap.ccsdk.features.sdnr.wt.dataprovider.yangtools.serialize.MapSerializer;
+import org.onap.ccsdk.features.sdnr.wt.dataprovider.yangtools.serialize.TypeObjectSerializer;
+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.params.xml.ns.yang.data.provider.rev201110.pmdata.grp.MeasurementKey;
+import org.opendaylight.yangtools.yang.binding.TypeObject;
+
+public class YangToolsModule extends SimpleModule {
+
+    private static final long serialVersionUID = 1L;
+
+    public YangToolsModule() {
+        super();
+        setDeserializerModifier(new YangToolsDeserializerModifier());
+
+        addKeyDeserializer(MeasurementKey.class, new IdentifierDeserializer());
+        addSerializer(DateAndTime.class, new DateAndTimeSerializer());
+        addSerializer(TypeObject.class, new TypeObjectSerializer());
+        addSerializer(Enum.class, new EnumSerializer());
+        addSerializer(Map.class, new MapSerializer());
+    }
+
+}
diff --git a/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/yangtools/serialize/BaseIdentityDeserializer.java b/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/yangtools/serialize/BaseIdentityDeserializer.java
new file mode 100644 (file)
index 0000000..10f18e7
--- /dev/null
@@ -0,0 +1,64 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP : ccsdk features
+ * ================================================================================
+ * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property.
+ * All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ *
+ */
+package org.onap.ccsdk.features.sdnr.wt.dataprovider.yangtools.serialize;
+
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.DeserializationContext;
+import com.fasterxml.jackson.databind.JsonDeserializer;
+import java.io.IOException;
+import org.onap.ccsdk.features.sdnr.wt.dataprovider.yangtools.YangToolsMapperHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class BaseIdentityDeserializer<T> extends JsonDeserializer<T> {
+
+    private static final Logger LOG = LoggerFactory.getLogger(BaseIdentityDeserializer.class);
+    private final JsonDeserializer<?> deser;
+
+    public BaseIdentityDeserializer(final JsonDeserializer<?> deser) {
+        this.deser = deser;
+    }
+
+    @SuppressWarnings("unchecked")
+    @Override
+    public T deserialize(JsonParser parser, DeserializationContext ctxt) throws IOException, JsonProcessingException {
+        LOG.debug("BaseIdentityDeserializer class for '{}'",parser.getValueAsString());
+        String clazzToSearch = parser.getValueAsString();
+        // clazz from Elasticsearch is full qualified
+        int lastDot = clazzToSearch.lastIndexOf(".");
+        if (lastDot > -1) {
+            clazzToSearch = clazzToSearch.substring(lastDot+1);
+        } else {
+            clazzToSearch = clazzToSearch.substring(0, 1).toUpperCase() + clazzToSearch.substring(1);
+        }
+        Class<?> clazz;
+        try {
+            clazz = YangToolsMapperHelper.findClass(clazzToSearch);
+            if (clazz != null)
+                return (T)clazz;
+        } catch (ClassNotFoundException e) {
+            LOG.warn("BaseIdentityDeserializer class not found for '"+parser.getValueAsString()+"'",e);
+        }
+        return (T) deser.deserialize(parser, ctxt);
+    }
+}
diff --git a/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/yangtools/serialize/ClassDeserializer.java b/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/yangtools/serialize/ClassDeserializer.java
new file mode 100644 (file)
index 0000000..2627c2a
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP : ccsdk features
+ * ================================================================================
+ * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property.
+ * All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ *
+ */
+package org.onap.ccsdk.features.sdnr.wt.dataprovider.yangtools.serialize;
+
+import com.fasterxml.jackson.databind.DeserializationContext;
+import com.fasterxml.jackson.databind.deser.std.FromStringDeserializer;
+import java.io.IOException;
+import org.onap.ccsdk.features.sdnr.wt.dataprovider.yangtools.YangToolsMapperHelper;
+
+public class ClassDeserializer extends FromStringDeserializer<Class<?>> {
+
+    private static final long serialVersionUID = 1L;
+
+    public ClassDeserializer(Class<?> vc) {
+        super(vc);
+    }
+
+    @Override
+    protected Class<?> _deserialize(String value, DeserializationContext ctxt) throws IOException {
+        try {
+            return YangToolsMapperHelper.findClass(value);
+        } catch (ClassNotFoundException e) {
+            throw new IOException("Can not find class "+value,e);
+        }
+    }
+}
diff --git a/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/yangtools/serialize/DateAndTimeSerializer.java b/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/yangtools/serialize/DateAndTimeSerializer.java
new file mode 100644 (file)
index 0000000..a35aad7
--- /dev/null
@@ -0,0 +1,51 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP : ccsdk features
+ * ================================================================================
+ * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property.
+ * All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ *
+ */
+package org.onap.ccsdk.features.sdnr.wt.dataprovider.yangtools.serialize;
+
+import com.fasterxml.jackson.core.JsonGenerator;
+import com.fasterxml.jackson.databind.SerializerProvider;
+import com.fasterxml.jackson.databind.ser.std.StdSerializer;
+import java.io.IOException;
+import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DateAndTime;
+
+/**
+ * DateAndTime shouldn't be encapsulated into a json object to be able to use elasticsearch date time query functions.
+ */
+public class DateAndTimeSerializer extends StdSerializer<@NonNull DateAndTime> {
+
+    private static final long serialVersionUID = 1L;
+
+    public DateAndTimeSerializer() {
+        this(null);
+    }
+
+    protected DateAndTimeSerializer(Class<DateAndTime> t) {
+        super(t);
+    }
+
+    @Override
+    public void serialize(DateAndTime value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
+        gen.writeString(value.getValue());
+    }
+
+}
diff --git a/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/yangtools/serialize/EnumSerializer.java b/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/yangtools/serialize/EnumSerializer.java
new file mode 100644 (file)
index 0000000..f8220c2
--- /dev/null
@@ -0,0 +1,36 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP : ccsdk features
+ * ================================================================================
+ * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property.
+ * All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ *
+ */
+package org.onap.ccsdk.features.sdnr.wt.dataprovider.yangtools.serialize;
+
+import com.fasterxml.jackson.core.JsonGenerator;
+import com.fasterxml.jackson.databind.JsonSerializer;
+import com.fasterxml.jackson.databind.SerializerProvider;
+import java.io.IOException;
+
+@SuppressWarnings("rawtypes")
+public class EnumSerializer extends JsonSerializer<Enum> {
+
+    @Override
+    public void serialize(Enum value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
+        gen.writeString(value.name());
+    }
+}
diff --git a/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/yangtools/serialize/IdentifierDeserializer.java b/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/yangtools/serialize/IdentifierDeserializer.java
new file mode 100644 (file)
index 0000000..0837b8a
--- /dev/null
@@ -0,0 +1,71 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP : ccsdk features
+ * ================================================================================
+ * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property.
+ * All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ *
+ */
+package org.onap.ccsdk.features.sdnr.wt.dataprovider.yangtools.serialize;
+
+import com.fasterxml.jackson.databind.DeserializationContext;
+import com.fasterxml.jackson.databind.KeyDeserializer;
+import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
+import java.util.List;
+import org.onap.ccsdk.features.sdnr.wt.dataprovider.yangtools.YangToolsMapperHelper;
+import org.opendaylight.yangtools.yang.common.Uint16;
+import org.opendaylight.yangtools.yang.common.Uint32;
+import org.opendaylight.yangtools.yang.common.Uint64;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class IdentifierDeserializer extends KeyDeserializer {
+
+    private static final Logger LOG = LoggerFactory.getLogger(IdentifierDeserializer.class);
+
+    public IdentifierDeserializer() {}
+
+    @Override
+    public Object deserializeKey(String key, DeserializationContext ctxt) throws IOException {
+        Class<?> clazz = ctxt.getClass();
+        final String arg = key;
+        LOG.debug("Deserialization for key:{}",key);
+        // find constructor argument types
+        List<Class<?>> ctypes = YangToolsMapperHelper.getConstructorParameterTypes(clazz, String.class);
+        for (Class<?> ctype : ctypes) {
+            try {
+                if (ctype.equals(String.class)) {
+                    return clazz.getConstructor(ctype).newInstance(arg);
+                } else if (ctype.equals(Uint16.class)) {
+                    return clazz.getConstructor(ctype).newInstance(Uint16.valueOf(arg));
+
+                } else if (ctype.equals(Uint32.class)) {
+                    return clazz.getConstructor(ctype).newInstance(Uint32.valueOf(arg));
+                } else if (ctype.equals(Uint64.class)) {
+                    return clazz.getConstructor(ctype).newInstance(Uint64.valueOf(arg));
+                }
+            } catch (InstantiationException | IllegalAccessException | IllegalArgumentException
+                    | InvocationTargetException | NoSuchMethodException | SecurityException e) {
+                LOG.warn("unable to instantiate class {} with arg {}: ", clazz, arg, e);
+                throw new IllegalArgumentException(
+                        "unable to instantiate class " + clazz.getName() + " with arg '" + arg + "' ", e);
+            }
+        }
+        return null;
+    }
+
+}
diff --git a/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/yangtools/serialize/MapSerializer.java b/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/yangtools/serialize/MapSerializer.java
new file mode 100644 (file)
index 0000000..e5c966a
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP : ccsdk features
+ * ================================================================================
+ * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property.
+ * All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ *
+ */
+package org.onap.ccsdk.features.sdnr.wt.dataprovider.yangtools.serialize;
+
+import com.fasterxml.jackson.core.JsonGenerator;
+import com.fasterxml.jackson.databind.JsonSerializer;
+import com.fasterxml.jackson.databind.SerializerProvider;
+import java.io.IOException;
+import java.util.Map;
+
+@SuppressWarnings("rawtypes")
+public class MapSerializer extends JsonSerializer<Map> {
+
+        @Override
+        public void serialize(Map value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
+            gen.writeObject(value.values());
+        }
+}
diff --git a/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/yangtools/serialize/TypeObjectDeserializer.java b/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/yangtools/serialize/TypeObjectDeserializer.java
new file mode 100644 (file)
index 0000000..5beca0d
--- /dev/null
@@ -0,0 +1,87 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP : ccsdk features
+ * ================================================================================
+ * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property.
+ * All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ *
+ */
+package org.onap.ccsdk.features.sdnr.wt.dataprovider.yangtools.serialize;
+
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.DeserializationContext;
+import com.fasterxml.jackson.databind.JavaType;
+import com.fasterxml.jackson.databind.JsonDeserializer;
+import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
+import java.util.NoSuchElementException;
+import java.util.Optional;
+import org.onap.ccsdk.features.sdnr.wt.dataprovider.yangtools.YangToolsMapperHelper;
+import org.opendaylight.yangtools.concepts.Builder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class TypeObjectDeserializer<T> extends JsonDeserializer<T> {
+
+    private static final Logger LOG = LoggerFactory.getLogger(TypeObjectDeserializer.class);
+    private final JavaType type;
+    private final JsonDeserializer<?> deser;
+
+
+    public TypeObjectDeserializer(final JavaType type, final JsonDeserializer<?> deser) {
+        this.type = type;
+        this.deser = deser;
+    }
+
+    @SuppressWarnings("unchecked")
+    @Override
+    public T deserialize(JsonParser parser, DeserializationContext ctxt) throws IOException, JsonProcessingException {
+
+        Class<T> clazz = (Class<T>) type.getRawClass();
+        final String arg = parser.getValueAsString();
+        LOG.debug("Try to build arg:'{}' with class {}",arg, clazz);
+        Optional<T> oRes = Optional.empty();
+        try {
+            //try get method for default instance
+            if ((oRes = YangToolsMapperHelper.getDefaultInstance(clazz, arg)).isEmpty()) {
+                //try to find builder with getDefaultInstance method
+                Optional<Class<Builder<?>>> oBuilderClazz = YangToolsMapperHelper.findBuilderClassOptional(ctxt, clazz);
+                LOG.debug("Try builder class present:{}",oBuilderClazz.isPresent());
+                if (oBuilderClazz.isEmpty()
+                        || ((oRes = YangToolsMapperHelper.getDefaultInstance(oBuilderClazz.get(), arg)).isEmpty())) {
+                    //try to find constructor with string
+                    LOG.debug("Try constructor");
+                    if ((oRes = YangToolsMapperHelper.getInstanceByConstructor(clazz, arg)).isEmpty()) {
+                        //forward to standard deserializer or throw if not available
+                        LOG.debug("Try default deserializer");
+                        oRes = Optional.of((T) deser.deserialize(parser, ctxt));
+                    }
+                }
+            }
+            LOG.debug("Deserialize string value:{} for class:{} success:{}", arg, clazz, oRes.isPresent());
+        } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException
+                | NoSuchElementException | SecurityException | InstantiationException e) {
+            LOG.warn("problem deserializing {} with value {}: {}", clazz.getName(), arg, e);
+        }
+        if (oRes.isPresent()) {
+            return oRes.get();
+        } else {
+            throw new IllegalArgumentException("Could not find constructor for arg:'" + arg + "' and class: " + clazz);
+        }
+    }
+
+}
diff --git a/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/yangtools/serialize/TypeObjectSerializer.java b/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/yangtools/serialize/TypeObjectSerializer.java
new file mode 100644 (file)
index 0000000..1269d07
--- /dev/null
@@ -0,0 +1,51 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP : ccsdk features
+ * ================================================================================
+ * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property.
+ * All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ *
+ */
+package org.onap.ccsdk.features.sdnr.wt.dataprovider.yangtools.serialize;
+
+import com.fasterxml.jackson.core.JsonGenerator;
+import com.fasterxml.jackson.databind.JsonSerializer;
+import com.fasterxml.jackson.databind.SerializerProvider;
+import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import org.opendaylight.yangtools.yang.binding.TypeObject;
+
+public class TypeObjectSerializer extends JsonSerializer<TypeObject> {
+
+    @Override
+    public void serialize(TypeObject value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
+        //stringValue
+        Method[] methods = value.getClass().getDeclaredMethods();
+        String name;
+        for (Method method : methods) {
+            name = method.getName();
+            if (name.equals("stringValue") || name.equals("getValue")) {
+                try {
+                    gen.writeString((String)method.invoke(value));
+                } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException
+                        | IOException e) {
+                    throw new IOException("No String getter method supported TypeObject for "+value.getClass(),e);
+                }
+            }
+        }
+    }
+}
index 92ac047..624451c 100644 (file)
@@ -21,6 +21,7 @@
  */
 package org.onap.ccsdk.features.sdnr.wt.dataprovider.test;
 
+import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
@@ -31,6 +32,8 @@ import java.nio.file.Files;
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+
+import org.jline.utils.Log;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -103,7 +106,12 @@ public class TestAbout {
         assertTrue(printOut.getByteArrayOutputStream().size() > 0);
     }
 
-
+    @Test
+    public void testGetGroupId() {
+       AboutHelperServlet sv = new AboutHelperServlet();
+       assertNotNull(sv.getGroupIdOrDefault(null));
+    }
+    
 
     private class AboutHelperServlet extends AboutHttpServlet {
 
@@ -116,6 +124,16 @@ public class TestAbout {
         public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
             super.doGet(req, resp);
         }
-
+        @Override
+        public String getGroupIdOrDefault(String def) {
+               return super.getGroupIdOrDefault(def);
+       }
+        @Override
+        protected String getManifestValue(String key) {
+               if(key == "Bundle-SymbolicName") {
+                       return "org.onap.ccsdk.features.sdnr.wt.sdnr-wt-data-provider-provider";
+               }
+               return super.getManifestValue(key);
+        }
     }
 }
index 5f78999..b7a4db5 100644 (file)
@@ -42,7 +42,7 @@ import org.onap.ccsdk.features.sdnr.wt.common.database.requests.BaseRequest;
 import org.onap.ccsdk.features.sdnr.wt.dataprovider.data.ElasticSearchDataProvider;
 import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.types.YangHelper2;
 import org.onap.ccsdk.features.sdnr.wt.dataprovider.test.util.HostInfoForTest;
-import org.onap.ccsdk.features.sdnr.wt.dataprovider.yangtools.YangToolsMapper2;
+import org.onap.ccsdk.features.sdnr.wt.dataprovider.yangtools.YangToolsMapper;
 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.params.xml.ns.yang.data.provider.rev201110.CreateMaintenanceInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.CreateMaintenanceInputBuilder;
@@ -61,7 +61,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.pro
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.DeleteNetworkElementConnectionInputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.Entity;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.Faultlog;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.FaultlogEntity;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.FaultlogBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.GranularityPeriodType;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadConnectionlogListInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadConnectionlogListInputBuilder;
@@ -306,7 +306,7 @@ public class TestCRUDforDatabase {
 
         CreateNetworkElementConnectionOutputBuilder create = null;
         CreateNetworkElementConnectionInput input = new CreateNetworkElementConnectionInputBuilder().setNodeId(name)
-                .setIsRequired(true).setHost(url).setPort(port).build();
+                .setIsRequired(true).setHost(url).setPort(YangHelper2.getLongOrUint32(port)).build();
         String dbId = null;
 
         try {
@@ -342,7 +342,7 @@ public class TestCRUDforDatabase {
         final long port2 = 5960;
 
         UpdateNetworkElementConnectionInput updateInput = new UpdateNetworkElementConnectionInputBuilder().setId(dbId)
-                .setHost(url2).setPort(port2).setIsRequired(false).build();
+                .setHost(url2).setPort(YangHelper2.getLongOrUint32(port2)).setIsRequired(false).build();
         UpdateNetworkElementConnectionOutputBuilder updateOutput = null;
         try {
             updateOutput = dbProvider.updateNetworkElementConnection(updateInput);
@@ -1363,18 +1363,20 @@ public class TestCRUDforDatabase {
                     + "\"implemented-interface\": \"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.Faultlog\",\n"
                     + "\"source-type\": \"Netconf\",\n" + "\"node-id\": \"sim4\",\n" + "\"problem\": \"signalIsLost\"\n"
                     + "}";
-            YangToolsMapper2<Faultlog> yangtoolsMapper = new YangToolsMapper2<>(Faultlog.class,null);
-            FaultlogEntity log = yangtoolsMapper.readValue(jsonString, Faultlog.class);
-            System.out.println(log);
-            System.out.println(yangtoolsMapper.writeValueAsString(log));
+            YangToolsMapper yangtoolsMapper = new YangToolsMapper();
+            Faultlog log = yangtoolsMapper.readValue(jsonString, Faultlog.class);
+            System.out.println(yangtoolsMapper.writeValueAsString((new FaultlogBuilder(log).build())));
+            System.out.println("Check3");
         } catch (IOException e) {
-            fail(e.getMessage());
+            e.printStackTrace();
+            fail("Fail");
         }
 
     }
 
     private Pagination getPagination(long pageSize, int page) {
-        return new PaginationBuilder().setPage(BigInteger.valueOf(page)).setSize(pageSize).build();
+        return new PaginationBuilder().setPage(YangHelper2.getBigIntegerOrUint64(BigInteger.valueOf(page)))
+                .setSize(YangHelper2.getLongOrUint32(pageSize)).build();
     }
 
 
index 6584d05..eaaa311 100644 (file)
  */
 package org.onap.ccsdk.features.sdnr.wt.dataprovider.test;
 
+import static org.junit.Assert.fail;
 import java.io.IOException;
 import org.junit.Test;
-import org.onap.ccsdk.features.sdnr.wt.dataprovider.yangtools.YangToolsMapper;
+import org.onap.ccsdk.features.sdnr.wt.dataprovider.yangtools.YangToolsMapper2;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.pmdata._15m.list.output.Data;
 
 public class TestDataMappings {
@@ -35,7 +36,7 @@ public class TestDataMappings {
             + "\"layer-protocol-name\": \"MWPS\",\n"
             + "\"radio-signal-id\": \"Test11\",\n"
             + "\"time-stamp\": \"2017-07-04T14:00:00.0Z\",\n"
-            + "\"granularity-period\": \"PERIOD_15MIN\",\n"
+            + "\"granularity-period\": \"Period15Min\",\n"
             + "\"scanner-id\": \"PM_RADIO_15M_9\",\n"
             + "\"performance-data\": {\n"
             + "\"es\": 0,\n"
@@ -84,14 +85,15 @@ public class TestDataMappings {
             + "}";
  // @formatter:on
     @Test
-    public void testPmData15m() {
+    public void testPmData15m() throws ClassNotFoundException {
 
-        YangToolsMapper mapper = new YangToolsMapper();
+        YangToolsMapper2<Data> mapper = new YangToolsMapper2<Data>(Data.class, null);
         try {
             Data data = mapper.readValue(PMDATA15M_SERVERDB_JSON.getBytes(), Data.class);
             System.out.println(data);
         } catch (IOException e) {
             e.printStackTrace();
+            fail("Can not parse data");
         }
     }
 
index 95abfdd..7e63c18 100644 (file)
@@ -40,6 +40,7 @@ import org.onap.ccsdk.features.sdnr.wt.common.database.requests.DeleteByQueryReq
 import org.onap.ccsdk.features.sdnr.wt.dataprovider.data.ElasticSearchDataProvider;
 import org.onap.ccsdk.features.sdnr.wt.dataprovider.data.entity.HtDatabaseEventsService;
 import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.types.NetconfTimeStampImpl;
+import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.types.YangHelper2;
 import org.onap.ccsdk.features.sdnr.wt.dataprovider.test.util.HostInfoForTest;
 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.params.xml.ns.yang.data.provider.rev201110.ConnectionLogStatus;
@@ -281,7 +282,7 @@ public class TestEventService {
      * @return
      */
     private static NetworkElementConnectionEntity createNeConnection(String nodeId, NetworkElementDeviceType devType) {
-        return new NetworkElementConnectionBuilder().setNodeId(nodeId).setHost("host").setPort(1234L)
+        return new NetworkElementConnectionBuilder().setNodeId(nodeId).setHost("host").setPort(YangHelper2.getLongOrUint32(1234L))
                 .setCoreModelCapability("123").setStatus(ConnectionLogStatus.Connected).setDeviceType(devType)
                 .setIsRequired(true).build();
     }
index 294dd43..53c7211 100644 (file)
@@ -22,7 +22,6 @@
 package org.onap.ccsdk.features.sdnr.wt.dataprovider.test;
 
 import java.io.IOException;
-import java.net.URISyntaxException;
 import java.util.Arrays;
 import java.util.concurrent.TimeUnit;
 import org.apache.sshd.common.util.io.IoUtils;
@@ -43,12 +42,9 @@ import org.onap.ccsdk.features.sdnr.wt.dataprovider.impl.DataTreeProviderImpl;
 import org.onap.ccsdk.features.sdnr.wt.dataprovider.test.util.HostInfoForTest;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.Entity;
 
-/**
- * @author Michael Dürre
- *
- */
 public class TestTree {
 
+    private static String resourceDirectoryPath="/"+TestTree.class.getSimpleName()+"/";
     private static ElasticSearchDataProvider dbProvider;
     private static HtDatabaseClient dbRawProvider;
 
@@ -65,38 +61,29 @@ public class TestTree {
     }
 
     private static void fillTestData() throws IOException {
-        dbRawProvider.doWriteRaw(Entity.Inventoryequipment.getName(), "sim1/a2.module-1.1.5.5", getFileContent("/testequipment/1.json"));
-        dbRawProvider.doWriteRaw(Entity.Inventoryequipment.getName(), "sim1/CARD-1.1.7.0", getFileContent("/testequipment/2.json"));
-        dbRawProvider.doWriteRaw(Entity.Inventoryequipment.getName(), "sim1/a2.module-1.55.1.2", getFileContent("/testequipment/3.json"));
-        dbRawProvider.doWriteRaw(Entity.Inventoryequipment.getName(), "sim1/a2.module-1.65.1.2", getFileContent("/testequipment/4.json"));
-        dbRawProvider.doWriteRaw(Entity.Inventoryequipment.getName(), "sim1/SHELF-1.1.0.0", getFileContent("/testequipment/5.json"));
-        dbRawProvider.doWriteRaw(Entity.Inventoryequipment.getName(), "sim1/a2.module-1.1.1.5", getFileContent("/testequipment/6.json"));
-        dbRawProvider.doWriteRaw(Entity.Inventoryequipment.getName(), "sim1/a2.module-1.1.1.8", getFileContent("/testequipment/7.json"));
-        dbRawProvider.doWriteRaw(Entity.Inventoryequipment.getName(), "sim1/a2.module-1.1.6.5", getFileContent("/testequipment/8.json"));
-        dbRawProvider.doWriteRaw(Entity.Inventoryequipment.getName(), "sim1/ODU-1.56.0.0", getFileContent("/testequipment/9.json"));
-        dbRawProvider.doWriteRaw(Entity.Inventoryequipment.getName(), "sim1/a2.module-1.56.1.2", getFileContent("/testequipment/10.json"));
-        dbRawProvider.doWriteRaw(Entity.Inventoryequipment.getName(), "sim1/IDU-1.65.0.0", getFileContent("/testequipment/11.json"));
-        dbRawProvider.doWriteRaw(Entity.Inventoryequipment.getName(), "sim1/CARD-1.65.1.4", getFileContent("/testequipment/12.json"));
-        dbRawProvider.doWriteRaw(Entity.Inventoryequipment.getName(), "sim1/CARD-1.1.6.0", getFileContent("/testequipment/13.json"));
-        dbRawProvider.doWriteRaw(Entity.Inventoryequipment.getName(), "sim1/CARD-1.1.8.0", getFileContent("/testequipment/14.json"));
-        dbRawProvider.doWriteRaw(Entity.Inventoryequipment.getName(), "sim1/CARD-1.1.9.0", getFileContent("/testequipment/15.json"));
-        dbRawProvider.doWriteRaw(Entity.Inventoryequipment.getName(), "sim1/CARD-1.55.1.4", getFileContent("/testequipment/16.json"));
-        dbRawProvider.doWriteRaw(Entity.Inventoryequipment.getName(), "sim1/a2.module-1.1.1.7", getFileContent("/testequipment/17.json"));
-        dbRawProvider.doWriteRaw(Entity.Inventoryequipment.getName(), "sim1/IDU-1.55.0.0", getFileContent("/testequipment/18.json"));
-        dbRawProvider.doWriteRaw(Entity.Inventoryequipment.getName(), "sim1/CARD-1.1.1.0", getFileContent("/testequipment/19.json"));
-        dbRawProvider.doWriteRaw(Entity.Inventoryequipment.getName(), "sim1/CARD-1.1.5.0", getFileContent("/testequipment/20.json"));
-        dbRawProvider.doWriteRaw(Entity.Inventoryequipment.getName(), "sim1/a2.module-1.1.5.6", getFileContent("/testequipment/21.json"));
+        dbRawProvider.doWriteRaw(Entity.Inventoryequipment.getName(), "sim1/a2.module-1.1.5.5", getFileContent("1.json"));
+        dbRawProvider.doWriteRaw(Entity.Inventoryequipment.getName(), "sim1/CARD-1.1.7.0", getFileContent("2.json"));
+        dbRawProvider.doWriteRaw(Entity.Inventoryequipment.getName(), "sim1/a2.module-1.55.1.2", getFileContent("3.json"));
+        dbRawProvider.doWriteRaw(Entity.Inventoryequipment.getName(), "sim1/a2.module-1.65.1.2", getFileContent("4.json"));
+        dbRawProvider.doWriteRaw(Entity.Inventoryequipment.getName(), "sim1/SHELF-1.1.0.0", getFileContent("5.json"));
+        dbRawProvider.doWriteRaw(Entity.Inventoryequipment.getName(), "sim1/a2.module-1.1.1.5", getFileContent("6.json"));
+        dbRawProvider.doWriteRaw(Entity.Inventoryequipment.getName(), "sim1/a2.module-1.1.1.8", getFileContent("7.json"));
+        dbRawProvider.doWriteRaw(Entity.Inventoryequipment.getName(), "sim1/a2.module-1.1.6.5", getFileContent("8.json"));
+        dbRawProvider.doWriteRaw(Entity.Inventoryequipment.getName(), "sim1/ODU-1.56.0.0", getFileContent("9.json"));
+        dbRawProvider.doWriteRaw(Entity.Inventoryequipment.getName(), "sim1/a2.module-1.56.1.2", getFileContent("10.json"));
+        dbRawProvider.doWriteRaw(Entity.Inventoryequipment.getName(), "sim1/IDU-1.65.0.0", getFileContent("11.json"));
+        dbRawProvider.doWriteRaw(Entity.Inventoryequipment.getName(), "sim1/CARD-1.65.1.4", getFileContent("12.json"));
+        dbRawProvider.doWriteRaw(Entity.Inventoryequipment.getName(), "sim1/CARD-1.1.6.0", getFileContent("13.json"));
+        dbRawProvider.doWriteRaw(Entity.Inventoryequipment.getName(), "sim1/CARD-1.1.8.0", getFileContent("14.json"));
+        dbRawProvider.doWriteRaw(Entity.Inventoryequipment.getName(), "sim1/CARD-1.1.9.0", getFileContent("15.json"));
+        dbRawProvider.doWriteRaw(Entity.Inventoryequipment.getName(), "sim1/CARD-1.55.1.4", getFileContent("16.json"));
+        dbRawProvider.doWriteRaw(Entity.Inventoryequipment.getName(), "sim1/a2.module-1.1.1.7", getFileContent("17.json"));
+        dbRawProvider.doWriteRaw(Entity.Inventoryequipment.getName(), "sim1/IDU-1.55.0.0", getFileContent("18.json"));
+        dbRawProvider.doWriteRaw(Entity.Inventoryequipment.getName(), "sim1/CARD-1.1.1.0", getFileContent("19.json"));
+        dbRawProvider.doWriteRaw(Entity.Inventoryequipment.getName(), "sim1/CARD-1.1.5.0", getFileContent("20.json"));
+        dbRawProvider.doWriteRaw(Entity.Inventoryequipment.getName(), "sim1/a2.module-1.1.5.6", getFileContent("21.json"));
 
     }
-    /**
-     * @param string
-     * @return
-     * @throws URISyntaxException
-     * @throws IOException
-     */
-    private static String getFileContent(String filename) throws IOException {
-        return String.join("\n",IoUtils.readAllLines(TestTree.class.getResourceAsStream(filename)));
-    }
 
     @Test
     public void testInventoryTree() throws IOException {
@@ -148,4 +135,8 @@ public class TestTree {
         e = DataTreeHttpServlet.getEntity("/tree/read-inventoryequipment-tree/");
         System.out.println(e);
     }
+
+    private static String getFileContent(String filename) throws IOException {
+        return String.join("\n",IoUtils.readAllLines(TestTree.class.getResourceAsStream(resourceDirectoryPath+filename)));
+    }
 }
index f7ab7c3..3c9d494 100644 (file)
@@ -28,6 +28,7 @@ import java.util.List;
 import org.eclipse.jdt.annotation.Nullable;
 import org.json.JSONObject;
 import org.junit.Test;
+import org.onap.ccsdk.features.sdnr.wt.common.YangHelper;
 import org.onap.ccsdk.features.sdnr.wt.common.database.HtDatabaseClient;
 import org.onap.ccsdk.features.sdnr.wt.common.database.SearchResult;
 import org.onap.ccsdk.features.sdnr.wt.common.database.config.HostInfo;
@@ -37,7 +38,9 @@ import org.onap.ccsdk.features.sdnr.wt.common.database.queries.QueryBuilders;
 import org.onap.ccsdk.features.sdnr.wt.common.database.requests.CreateIndexRequest;
 import org.onap.ccsdk.features.sdnr.wt.common.database.requests.DeleteIndexRequest;
 import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.EsDataObjectReaderWriter2;
+import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.types.YangHelper2;
 import org.onap.ccsdk.features.sdnr.wt.dataprovider.test.util.HostInfoForTest;
+import org.onap.ccsdk.features.sdnr.wt.dataprovider.yangtools.YangToolsMapperHelper;
 import org.onap.ccsdk.features.sdnr.wt.dataprovider.yangtools.YangToolsMapper;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Uri;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DateAndTime;
@@ -284,8 +287,8 @@ public class TestYangGenSalMapping {
 
         ReadPmdata15mListInputBuilder inputBuilder = new ReadPmdata15mListInputBuilder();
         PaginationBuilder paginationBuilder = new PaginationBuilder();
-        paginationBuilder.setPage(new BigInteger("1"));
-        paginationBuilder.setSize(20L);
+        paginationBuilder.setPage(YangHelper2.getBigIntegerOrUint64(new BigInteger("1")));
+        paginationBuilder.setSize(YangHelper2.getLongOrUint32(20L));
         inputBuilder.setPagination(paginationBuilder.build());
 
         ReadPmdata15mListInput input = inputBuilder.build();
@@ -295,8 +298,8 @@ public class TestYangGenSalMapping {
         long page = getPage(input);
         long pageSize = getPageSize(input);
 
-        QueryBuilder query = fromFilter(input.getFilter()).from((page - 1) * pageSize).size(pageSize);
-        setSortOrder(query, input.getSortorder());
+        QueryBuilder query = fromFilter(YangHelper.getList(input.getFilter())).from((page - 1) * pageSize).size(pageSize);
+        setSortOrder(query, YangHelper.getList(input.getSortorder()));
 
         SearchResult<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.pmdata._15m.list.output.Data> result =
                 pm15mRW.doReadAll(query);
@@ -337,15 +340,15 @@ public class TestYangGenSalMapping {
         out(method());
         String input;
         input = "id-dd-dd";
-        System.out.println("Map " + input + " to " + YangToolsMapper.toCamelCaseAttributeName(input));
+        System.out.println("Map " + input + " to " + YangToolsMapperHelper.toCamelCaseAttributeName(input));
         input = "idDdGg";
-        System.out.println("Map " + input + " to " + YangToolsMapper.toCamelCaseAttributeName(input));
+        System.out.println("Map " + input + " to " + YangToolsMapperHelper.toCamelCaseAttributeName(input));
         input = "_idDdGg";
-        System.out.println("Map " + input + " to " + YangToolsMapper.toCamelCaseAttributeName(input));
+        System.out.println("Map " + input + " to " + YangToolsMapperHelper.toCamelCaseAttributeName(input));
         input = "--ff--gfg";
-        System.out.println("Map " + input + " to " + YangToolsMapper.toCamelCaseAttributeName(input));
+        System.out.println("Map " + input + " to " + YangToolsMapperHelper.toCamelCaseAttributeName(input));
         input = "";
-        System.out.println("Map " + input + " to " + YangToolsMapper.toCamelCaseAttributeName(input));
+        System.out.println("Map " + input + " to " + YangToolsMapperHelper.toCamelCaseAttributeName(input));
     }
 
     /* ---------------------------------
@@ -361,7 +364,7 @@ public class TestYangGenSalMapping {
         org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.inventory.list.output.DataBuilder dataBuilder =
                 new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.inventory.list.output.DataBuilder();
         dataBuilder.setDescription(description);
-        dataBuilder.setTreeLevel(treeLevel);
+        dataBuilder.setTreeLevel(YangHelper2.getLongOrUint32(treeLevel));
         return dataBuilder;
     }
 
@@ -429,8 +432,8 @@ public class TestYangGenSalMapping {
             long totalSize) {
         org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.pmdata._15m.list.output.Pagination value =
                 new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.pmdata._15m.list.output.PaginationBuilder()
-                        .setPage(BigInteger.valueOf(page)).setSize(pageSize).setTotal(BigInteger.valueOf(totalSize))
-                        .build();
+                .setPage(YangHelper2.getBigIntegerOrUint64(BigInteger.valueOf(page))).setSize(YangHelper2.getLongOrUint32(pageSize))
+                .setTotal(YangHelper2.getBigIntegerOrUint64(BigInteger.valueOf(totalSize))).build();
         outputBuilder.setPagination(value);
     }
 
index 0a195e0..56df628 100644 (file)
  */
 package org.onap.ccsdk.features.sdnr.wt.dataprovider.test;
 
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
 import java.io.IOException;
+import java.util.Arrays;
+import java.util.Map;
+import org.apache.sshd.common.util.io.IoUtils;
+import org.eclipse.jdt.annotation.Nullable;
 import org.jline.utils.Log;
 import org.junit.Test;
+import org.mockito.Mockito;
+import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.types.YangHelper2;
+import org.onap.ccsdk.features.sdnr.wt.dataprovider.yangtools.YangToolsMapper;
 import org.onap.ccsdk.features.sdnr.wt.dataprovider.yangtools.YangToolsMapper2;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.pm.types.rev191129.PmDataType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.pm.types.rev191129.PmDataTypeBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.openroadm.pm.types.rev200413.BIPErrorCounter;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.openroadm.pm.types.rev200413.OpticalPowerInputOSCMin;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.GranularityPeriodType;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.PmdataEntity;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.PmdataEntityBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.pmdata.entity.PerformanceData;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.pmdata.entity.PerformanceDataBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.pmdata.grp.Measurement;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.pmdata.grp.MeasurementBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.pmdata.grp.MeasurementKey;
+import org.opendaylight.yangtools.yang.common.Uint64;
 
-public class TestYangGenSalMappingOpenRoadm {
+public class TestYangGenSalMappingOpenRoadm extends Mockito {
+
+    private static String resourceDirectoryPath = "/" + TestYangGenSalMappingOpenRoadm.class.getSimpleName() + "/";
 
     @Test
-    public void testOpenroadmPM() throws IOException, ClassNotFoundException {
-        out(method());
-        // @formatter:off
-        String jsonString = "{\n"
-                + "    \"time-stamp\":\"2020-09-24T22:59:48.6Z\", \n"
-                + "    \"node-name\":\"Rdm-1\",\n"
-                + "    \"uuid-interface\":\"physical-link\",\n"
-                + "    \"scanner-id\":\"ryyyyyyyryryr\",\n"
-                + "    \"granularity-period\":\"Period24Hours\",\n"
-                + "    \"performance-data\":{\n"
-                + "         \"measurement\":[{\n"
-                + "            \"pm-value\":{\"uint64\":1464170942461338033},\n"
-                + "            \"pm-key\":\"org.opendaylight"
-                + ".yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.openroadm.pm.types.rev200413.OpticalPowerInputOSCMin\"\n"
-                + "         }]\n"
-                + "        }\n"
-                + "}\n";
-        // @formatter:on
-        // Map to JSON String to Object
-        PmDataTypeBuilder builder = new PmDataTypeBuilder();
-        builder.setInt64("10");
-        PmDataType pmDataType = builder.build();
-        out("Result is: "+pmDataType);
-
-        YangToolsMapper2<PmdataEntity> mapper2 = new YangToolsMapper2<>(PmdataEntity.class, null);
-        out("Created mapper");
+    public void testOpenroadmPMBuilder() throws IOException, ClassNotFoundException {
+        out("Test: " + method());
+
+        MeasurementBuilder measurementBuilder1 = new MeasurementBuilder();
+        measurementBuilder1.setPmKey(OpticalPowerInputOSCMin.class);
+        measurementBuilder1.setPmValue(new PmDataType(Uint64.valueOf(64L)));
+        Measurement measurement1 = measurementBuilder1.build();
+
+        MeasurementBuilder measurementBuilder2 = new MeasurementBuilder();
+        measurementBuilder2.setPmKey(BIPErrorCounter.class);
+        measurementBuilder2.setPmValue(new PmDataType(Uint64.valueOf(65L)));
+        Measurement measurement2 = measurementBuilder2.build();
+
+        PerformanceDataBuilder performanceDataBuilder = new PerformanceDataBuilder();
+        performanceDataBuilder.setMeasurement(
+                YangHelper2.getListOrMap(MeasurementKey.class, Arrays.asList(measurement1, measurement2)));
+
+        PmdataEntityBuilder pmDataEntitybuilder = new PmdataEntityBuilder();
+        pmDataEntitybuilder.setPerformanceData(performanceDataBuilder.build());
+
+        PmdataEntity pmDataType = pmDataEntitybuilder.build();
+
+        YangToolsMapper mapper2 = new YangToolsMapper();
+        String jsonString = mapper2.writeValueAsString(pmDataType);
+        out("Result json after mapping: " + jsonString);
+
         PmdataEntity generatepmdNode = mapper2.readValue(jsonString.getBytes(), PmdataEntity.class);
+        out("Original: " + pmDataType.toString());
+        out("Mapped  : " + generatepmdNode.toString());
+        assertTrue("Can mapping not working", generatepmdNode.equals(pmDataType));
+    }
+
+    @Test
+    public void testOpenroadmPMString1() throws IOException, ClassNotFoundException {
+        out("Test: " + method());
+        String jsonString2 = getFileContent("pmdata1.json");
+        YangToolsMapper mapper2 = new YangToolsMapper();
+        PmdataEntity generatepmdNode = mapper2.readValue(jsonString2.getBytes(), PmdataEntity.class);
+        out("String1:"+generatepmdNode.toString()); // Print it with specified indentation
+        assertTrue("GranularityPeriod", generatepmdNode.getGranularityPeriod().equals(GranularityPeriodType.Period15Min));
+        assertTrue("NodeName", generatepmdNode.getNodeName().equals("NTS_RDM2"));
+        @Nullable PerformanceData performanceData = generatepmdNode.getPerformanceData();
+        assertNotNull("PerformanceData", performanceData);
+        @Nullable Map<MeasurementKey, Measurement> measurement = performanceData.getMeasurement();
+        assertNotNull("Measurement", measurement);
+        Measurement measurement1 = measurement.get(new MeasurementKey(org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.openroadm.pm.types.rev200413.OpticalPowerInputOSCMin.class));
+        assertTrue("Measurement=64", measurement1.getPmValue().stringValue().equals("64"));
+    }
+
+    @Test
+    public void testOpenroadmPMString2() throws IOException, ClassNotFoundException {
+        out("Test: " + method());
+        String jsonString2 = getFileContent("pmdata2.json");
+        YangToolsMapper mapper2 = new YangToolsMapper();
+        PmdataEntity generatepmdNode = mapper2.readValue(jsonString2.getBytes(), PmdataEntity.class);
+        out(generatepmdNode.toString()); // Print it with specified indentation
+    }
+
+    @Test
+    public void testOpenroadmPMString3() throws IOException, ClassNotFoundException {
+        out("Test: " + method());
+        String jsonString2 = getFileContent("pmdata3.json");
+        YangToolsMapper2<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.pmdata._15m.list.output.Data> mapper2 =
+                new YangToolsMapper2<>(
+                        org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.pmdata._15m.list.output.Data.class,
+                        null);
+        PmdataEntity generatepmdNode = mapper2.readValue(jsonString2.getBytes(), PmdataEntity.class);
         out(generatepmdNode.toString()); // Print it with specified indentation
     }
 
+
+    @Test
+    public void testOpenroadmPMString4() throws IOException, ClassNotFoundException {
+        out("Test: " + method());
+        String jsonString = getFileContent("pmdata3.json");
+        YangToolsMapper2<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.pmdata._15m.list.output.Data> mapper =
+                new YangToolsMapper2<>(
+                        org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.pmdata._15m.list.output.Data.class,
+                        null);
+        org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.pmdata._15m.list.output.Data data =
+                mapper.readValue(jsonString.getBytes(),
+                        org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.pmdata._15m.list.output.Data.class);
+
+        assertTrue("GranularityPeriod", data.getGranularityPeriod().equals(GranularityPeriodType.Period15Min));
+        assertTrue("NodeName", data.getNodeName().equals("openroadm1"));
+        org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.pmdata15m.entity.@Nullable PerformanceData performanceData =
+                data.getPerformanceData();
+        assertNotNull("PerformanceData", performanceData);
+        @Nullable Map<MeasurementKey, Measurement> measurement = performanceData.getMeasurement();
+        assertNotNull("Measurement", measurement);
+        Measurement measurement1 = measurement.get(new MeasurementKey(org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.openroadm.pm.types.rev200413.DelayTCM2Up.class));
+        assertTrue("Measurement=11298624220985537708", measurement1.getPmValue().stringValue().equals("11298624220985537708"));
+    }
     /*
      * --------------------------------- Private
      */
@@ -72,9 +155,12 @@ public class TestYangGenSalMappingOpenRoadm {
     }
 
     private static void out(String text) {
-        System.out.println("----------------------");
-        System.out.println(text);
-        Log.info("Log: "+text);
+        Log.info("Log: " + text);
+    }
+
+    private static String getFileContent(String filename) throws IOException {
+        return String.join("\n",
+                IoUtils.readAllLines(TestTree.class.getResourceAsStream(resourceDirectoryPath + filename)));
     }
 
 }
diff --git a/sdnr/wt/data-provider/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/test/issues/TestIssue227.java b/sdnr/wt/data-provider/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/test/issues/TestIssue227.java
new file mode 100644 (file)
index 0000000..9cfc3ea
--- /dev/null
@@ -0,0 +1,126 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP : ccsdk features
+ * ================================================================================
+ * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property.
+ * All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ *
+ */
+package org.onap.ccsdk.features.sdnr.wt.dataprovider.test.issues;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
+import java.io.IOException;
+import org.junit.Test;
+import org.mockito.Mockito;
+import org.opendaylight.yangtools.yang.common.Uint32;
+
+public class TestIssue227 extends Mockito {
+
+    static String inputJsonString = "{\"value1\":\"forty-two\", \"value2\":\"forty-three\"}";
+    static String inputJsonNumber = "{\"value1\":42, \"value2\":43}";
+
+    @Test
+    public void testWithException() {
+        String inputJson = inputJsonNumber;
+        System.out.println("Input " + inputJson);
+
+        ObjectMapper mapper = new ObjectMapper();
+        mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
+
+        doMapping(mapper, inputJson);
+    }
+
+    @Test
+    public void testWithMixin() {
+        String inputJson = inputJsonNumber;
+        System.out.println("Input " + inputJson);
+
+        ObjectMapper mapper = new ObjectMapper();
+        mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
+        mapper.addMixIn(TestBuilder.class, IgnoreFooSetValueIntMixIn.class);
+
+        doMapping(mapper, inputJson);
+    }
+
+
+    private void doMapping(ObjectMapper mapper, String json) {
+        TestBuilder foo;
+        try {
+            foo = mapper.readValue(json.getBytes(), TestBuilder.class);
+            System.out.println("Foo " + foo);
+            System.out.println(mapper.writeValueAsString(foo));
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+    static class TestBuilder {
+
+        private String value1;
+        private String value2;
+
+        String getValue1() {
+            return value1;
+        }
+
+        public void setValue1(String value) {
+            this.value1 = value;
+        }
+
+        public void setValue1(int value) {
+            this.value1 = String.valueOf(value);
+        }
+
+        public void setValue1(long value) {
+            this.value1 = String.valueOf(value);
+        }
+
+        public void setValue1(Uint32 value) {
+            this.value1 = String.valueOf(value);
+        }
+
+        public String getValue2() {
+            return value2;
+        }
+
+        public void setValue2(String value) {
+            this.value2 = value;
+        }
+
+        public void setValue2(int value) {
+            this.value2 = String.valueOf(value);
+        }
+
+        @Override
+        public String toString() {
+            return "Foo [value1=" + value1 + ", value2=" + value2 + "]";
+        }
+
+    }
+
+
+    private abstract class IgnoreFooSetValueIntMixIn {
+        @JsonProperty
+        public abstract void setValue1(String value);
+
+        @JsonProperty
+        public abstract void setValue2(String value);
+    }
+}
+
+
diff --git a/sdnr/wt/data-provider/provider/src/test/resources/TestYangGenSalMappingOpenRoadm/pmdata1.json b/sdnr/wt/data-provider/provider/src/test/resources/TestYangGenSalMappingOpenRoadm/pmdata1.json
new file mode 100644 (file)
index 0000000..aa3a1cc
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "performance-data": {
+               "measurement": [
+                       {
+                               "pm-key": "org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.openroadm.pm.types.rev200413.OpticalPowerInputOSCMin",
+                               "pm-value": "64"
+                       },
+                       {
+                               "pm-key": "org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.openroadm.pm.types.rev200413.BIPErrorCounter",
+                               "pm-value": "65"
+                       }
+               ]
+       },
+       "uuid-interface": "device",
+       "granularity-period": "Period15Min",
+       "time-stamp": "2020-11-24T14:57:29.6Z",
+       "node-name": "NTS_RDM2"
+}
\ No newline at end of file
diff --git a/sdnr/wt/data-provider/provider/src/test/resources/TestYangGenSalMappingOpenRoadm/pmdata2.json b/sdnr/wt/data-provider/provider/src/test/resources/TestYangGenSalMappingOpenRoadm/pmdata2.json
new file mode 100644 (file)
index 0000000..d784cf0
--- /dev/null
@@ -0,0 +1,14 @@
+{
+       "performance-data": {
+               "measurement": [
+                       {
+                               "pm-key": "org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.openroadm.pm.types.rev200413.CodeViolations",
+                               "pm-value": "11298624220985537708"
+                       }
+               ]
+       },
+       "uuid-interface": "device",
+       "granularity-period": "Period15Min",
+       "time-stamp": "2020-11-24T14:57:29.6Z",
+       "node-name": "NTS_RDM2"
+}
\ No newline at end of file
diff --git a/sdnr/wt/data-provider/provider/src/test/resources/TestYangGenSalMappingOpenRoadm/pmdata3.json b/sdnr/wt/data-provider/provider/src/test/resources/TestYangGenSalMappingOpenRoadm/pmdata3.json
new file mode 100644 (file)
index 0000000..0747e31
--- /dev/null
@@ -0,0 +1,14 @@
+{
+       "performance-data": {
+               "measurement": [
+                       {
+                               "pm-key": "org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.openroadm.pm.types.rev200413.DelayTCM2Up",
+                               "pm-value": "11298624220985537708"
+                       }
+               ]
+       },
+       "uuid-interface": "shared-risk-group",
+       "granularity-period": "Period15Min",
+       "time-stamp": "2020-10-24T08:17:02.5Z",
+       "node-name": "openroadm1"
+}
\ No newline at end of file
diff --git a/sdnr/wt/data-provider/provider/src/test/resources/log4j.properties b/sdnr/wt/data-provider/provider/src/test/resources/log4j.properties
new file mode 100644 (file)
index 0000000..e4fcb01
--- /dev/null
@@ -0,0 +1,9 @@
+# Set root logger level to DEBUG and its only appender to A1.
+log4j.rootLogger=DEBUG, A1
+
+# A1 is set to be a ConsoleAppender.
+log4j.appender.A1=org.apache.log4j.ConsoleAppender
+
+# A1 uses PatternLayout.
+log4j.appender.A1.layout=org.apache.log4j.PatternLayout
+log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
\ No newline at end of file
diff --git a/sdnr/wt/data-provider/provider/src/test/resources/simplelogger.properties b/sdnr/wt/data-provider/provider/src/test/resources/simplelogger.properties
deleted file mode 100644 (file)
index 85525bf..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-#
-# ============LICENSE_START=======================================================
-# ONAP : ccsdk features
-# ================================================================================
-# Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
-# ================================================================================
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-# ============LICENSE_END=======================================================
-#
-#
-# SLF4J's SimpleLogger configuration file
-# Simple implementation of Logger that sends all enabled log messages, for all defined loggers, to System.err.
-
-# Default logging detail level for all instances of SimpleLogger.
-# Must be one of ("trace", "debug", "info", "warn", or "error").
-# If not specified, defaults to "info".
-org.slf4j.simpleLogger.defaultLogLevel=debug
-org.slf4j.simpleLogger.showDateTime=true
-
-org.slf4j.simpleLogger.dateTimeFormat=yyyy-MM-dd HH:mm:ss:SSS Z
-org.slf4j.simpleLogger.showThreadName=true
-org.slf4j.simpleLogger.showLogName=true
-org.slf4j.simpleLogger.showShortLogName=false
-org.slf4j.simpleLogger.org.onap.ccsdk.features.sdnr.wt.dataprovider=DEBUG
-org.slf4j.simpleLogger.org.onap.ccsdk.features.sdnr.wt.common=DEBUG
-
index df73980..1e83f06 100644 (file)
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>binding-parent</artifactId>
-        <version>2.1.0</version>
+        <version>2.1.1-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
-    <groupId>org.onap.ccsdk.features.sdnr.wt</groupId>
+    <groupId>org.onap.ccsdk.features.sdnr.wt.aluminium.sr1</groupId>
     <artifactId>sdnr-wt-data-provider-setup</artifactId>
     <version>1.1.1-SNAPSHOT</version>
     <packaging>jar</packaging>
             <artifactId>commons-cli</artifactId>
         </dependency>
         <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-api</artifactId>
+          <groupId>org.slf4j</groupId>
+          <artifactId>slf4j-api</artifactId>
         </dependency>
         <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-log4j12</artifactId>
+          <groupId>org.slf4j</groupId>
+          <artifactId>slf4j-log4j12</artifactId>
         </dependency>
         <dependency>
             <groupId>${project.groupId}</groupId>
@@ -80,7 +80,6 @@
             <version>${project.version}</version>
         </dependency>
     </dependencies>
-
     <build>
         <plugins>
             <plugin>
                 </executions>
                 <configuration>
                     <finalName>sdnr-dmt</finalName>
-                    <appendAssemblyId>false</appendAssemblyId>
+                  <appendAssemblyId>false</appendAssemblyId>
                     <archive>
                         <manifest>
                             <mainClass>org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.Program</mainClass>
index 1f4d88c..43a540e 100644 (file)
@@ -29,7 +29,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>2.1.0</version>
+        <version>2.1.1-SNAPSHOT</version>
         <relativePath/>
     </parent>