Synchronize sdnr/wt artifacts 94/125794/1
authorhighstreetherbert <herbert.eiselt@highstreet-technologies.com>
Fri, 19 Nov 2021 13:46:00 +0000 (14:46 +0100)
committerhighstreetherbert <herbert.eiselt@highstreet-technologies.com>
Fri, 19 Nov 2021 13:46:20 +0000 (14:46 +0100)
Synchronize sdnr/wt common, help, apigateway

Issue-ID: CCSDK-3528
Signed-off-by: highstreetherbert <herbert.eiselt@highstreet-technologies.com>
Change-Id: I4b5e5ce1b16adad80e670bdf08943e4a3eb658f1
Signed-off-by: highstreetherbert <herbert.eiselt@highstreet-technologies.com>
13 files changed:
sdnr/wt/common-yang/utils/pom.xml
sdnr/wt/common-yang/utils/src/main/java/org/onap/ccsdk/features/sdnr/wt/yang/mapper/YangToolsMapperHelper.java
sdnr/wt/common-yang/utils/src/main/java/org/onap/ccsdk/features/sdnr/wt/yang/mapper/serialize/TypeObjectSerializer.java
sdnr/wt/common-yang/utils/src/test/java/org/onap/ccsdk/features/sdnr/wt/yang/mapper/TestDataMappings.java [new file with mode: 0644]
sdnr/wt/common-yang/utils/src/test/java/org/onap/ccsdk/features/sdnr/wt/yang/mapper/TestYangGenSalMapping.java [new file with mode: 0644]
sdnr/wt/common/src/main/java/org/onap/ccsdk/features/sdnr/wt/common/database/data/IndicesEntry.java
sdnr/wt/common/src/main/java/org/onap/ccsdk/features/sdnr/wt/common/file/PomFile.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/test/JSONAssert.java
sdnr/wt/common/src/test/java/org/onap/ccsdk/features/sdnr/wt/common/test/TestEsData.java
sdnr/wt/helpserver/installer/pom.xml
sdnr/wt/helpserver/provider/pom.xml
sdnr/wt/helpserver/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/helpserver/HelpServlet.java

index 4aa62fa..516895a 100644 (file)
             <version>${project.version}</version>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.opendaylight.netconf</groupId>
+            <artifactId>sal-netconf-connector</artifactId>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 
 </project>
index f443fd6..d468e07 100644 (file)
@@ -278,6 +278,12 @@ public class YangToolsMapperHelper {
         return notification instanceof DOMEvent;
     }
 
+    /**
+     * Get time instant from notification if available or default
+     * @param notification
+     * @param defaultValue
+     * @return DateAndTime
+     */
     public static DateAndTime getTime(Notification notification, Instant defaultValue) {
         Instant time;
         if (hasTime(notification)) { // If notification class extends/implements the EventInstantAware
@@ -290,6 +296,21 @@ public class YangToolsMapperHelper {
         return DateAndTime.getDefaultInstance(ZonedDateTime.ofInstant(time, ZoneOffset.UTC).format(formatterOutput));
     }
 
+    /**
+     * Get time instant from notification if available or actual time
+     * @param notification
+     * @return DateAndTime
+     */
+    public static DateAndTime getTime(Notification notification) {
+        return getTime(notification, Instant.now());
+    }
+
+    /**
+     * Get time instant from DOM notification if available or default
+     * @param DOM notification
+     * @param defaultValue
+     * @return DateAndTime
+     */
     public static DateAndTime getTime(DOMNotification notification, Instant defaultValue) {
         Instant time;
         if (hasTime(notification)) { // If notification class extends/implements the EventInstantAware
@@ -301,4 +322,13 @@ public class YangToolsMapperHelper {
         }
         return DateAndTime.getDefaultInstance(ZonedDateTime.ofInstant(time, ZoneOffset.UTC).format(formatterOutput));
     }
+
+    /**
+     * Get time instant from notification if available or actual time
+     * @param DOM notification
+     * @return DateAndTime
+     */
+    public static DateAndTime getTime(DOMNotification notification) {
+        return getTime(notification, Instant.now());
+    }
 }
index b43e6c1..4fb3941 100644 (file)
@@ -31,22 +31,43 @@ import org.opendaylight.yangtools.yang.binding.TypeObject;
 
 public class TypeObjectSerializer extends JsonSerializer<TypeObject> {
 
+    /**
+     * serialize typeobject values
+     * prefer stringValue() method over getValue() method
+     */
     @Override
     public void serialize(TypeObject value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
-        //stringValue
         Method[] methods = value.getClass().getDeclaredMethods();
         String name;
+        Method getValueMethod = null;
         for (Method method : methods) {
             name = method.getName();
-            if (method.getParameterCount()==0 && (name.equals("stringValue") || name.equals("getValue"))) {
-                try {
-                    gen.writeString((String)method.invoke(value));
-                    break;
-                } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException
-                        | IOException e) {
-                    throw new IOException("No String getter method supported TypeObject for "+value.getClass(),e);
+            if (method.getParameterCount() == 0) {
+                if (name.equals("getValue")) {
+                    getValueMethod = method;
+                } else if (name.equals("stringValue")) {
+                    try {
+                        gen.writeString((String) method.invoke(value));
+                        break;
+                    } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException
+                            | IOException e) {
+                        throw new IOException("No String getter method supported TypeObject for " + value.getClass(),
+                                e);
+                    }
                 }
             }
         }
+        if (getValueMethod != null) {
+            try {
+                if (String.class.equals(getValueMethod.getReturnType())) {
+                    gen.writeString((String) getValueMethod.invoke(value));
+                } else {
+                    gen.writeObject(getValueMethod.invoke(value));
+                }
+            } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException | IOException e) {
+                throw new IOException("No String getter method supported TypeObject for " + value.getClass(), e);
+            }
+
+        }
     }
 }
diff --git a/sdnr/wt/common-yang/utils/src/test/java/org/onap/ccsdk/features/sdnr/wt/yang/mapper/TestDataMappings.java b/sdnr/wt/common-yang/utils/src/test/java/org/onap/ccsdk/features/sdnr/wt/yang/mapper/TestDataMappings.java
new file mode 100644 (file)
index 0000000..584b4b0
--- /dev/null
@@ -0,0 +1,99 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP : ccsdk features
+ * ================================================================================
+ * Copyright (C) 2019 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.yang.mapper;
+
+import static org.junit.Assert.fail;
+import java.io.IOException;
+import org.junit.Test;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.pmdata._15m.list.output.Data;
+
+public class TestDataMappings {
+
+    // @formatter:off
+    private static final String PMDATA15M_SERVERDB_JSON = "{\n"
+            + "\"node-name\": \"sim2\",\n"
+            + "\"uuid-interface\": \"LP-MWPS-TTP-01\",\n"
+            + "\"layer-protocol-name\": \"MWPS\",\n"
+            + "\"radio-signal-id\": \"Test11\",\n"
+            + "\"time-stamp\": \"2017-07-04T14:00:00.0Z\",\n"
+            + "\"granularity-period\": \"Period15Min\",\n"
+            + "\"scanner-id\": \"PM_RADIO_15M_9\",\n"
+            + "\"performance-data\": {\n"
+            + "\"es\": 0,\n"
+            + "\"rx-level-avg\": -41,\n"
+            + "\"time2-states\": -1,\n"
+            + "\"time4-states-s\": 0,\n"
+            + "\"time4-states\": 0,\n"
+            + "\"time8-states\": 0,\n"
+            + "\"time16-states-s\": -1,\n"
+            + "\"time16-states\": 0,\n"
+            + "\"time32-states\": 0,\n"
+            + "\"time64-states\": 0,\n"
+            + "\"time128-states\": 0,\n"
+            + "\"time256-states\": 900,\n"
+            + "\"time512-states\": -1,\n"
+            + "\"time512-states-l\": -1,\n"
+            + "\"time1024-states\": -1,\n"
+            + "\"time1024-states-l\": -1,\n"
+            + "\"time2048-states\": -1,\n"
+            + "\"time2048-states-l\": -1,\n"
+            + "\"time4096-states\": -1,\n"
+            + "\"time4096-states-l\": -1,\n"
+            + "\"time8192-states\": -1,\n"
+            + "\"time8192-states-l\": -1,\n"
+            + "\"snir-min\": -99,\n"
+            + "\"snir-max\": -99,\n"
+            + "\"snir-avg\": -99,\n"
+            + "\"xpd-min\": -99,\n"
+            + "\"xpd-max\": -99,\n"
+            + "\"xpd-avg\": -99,\n"
+            + "\"rf-temp-min\": -99,\n"
+            + "\"rf-temp-max\": -99,\n"
+            + "\"rf-temp-avg\": -99,\n"
+            + "\"defect-blocks-sum\": -1,\n"
+            + "\"time-period\": 900,\n"
+            + "\"tx-level-min\": 25,\n"
+            + "\"tx-level-max\": 25,\n"
+            + "\"tx-level-avg\": 25,\n"
+            + "\"rx-level-min\": -41,\n"
+            + "\"rx-level-max\": -41,\n"
+            + "\"unavailability\": 0,\n"
+            + "\"ses\": 0,\n"
+            + "\"cses\": 0\n"
+            + "},\n"
+            + "\"suspect-interval-flag\": false\n"
+            + "}";
+ // @formatter:on
+    @Test
+    public void testPmData15m() throws ClassNotFoundException {
+
+        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");
+        }
+    }
+
+}
diff --git a/sdnr/wt/common-yang/utils/src/test/java/org/onap/ccsdk/features/sdnr/wt/yang/mapper/TestYangGenSalMapping.java b/sdnr/wt/common-yang/utils/src/test/java/org/onap/ccsdk/features/sdnr/wt/yang/mapper/TestYangGenSalMapping.java
new file mode 100644 (file)
index 0000000..40164d7
--- /dev/null
@@ -0,0 +1,273 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP : ccsdk features
+ * ================================================================================
+ * Copyright (C) 2019 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.yang.mapper;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import org.json.JSONObject;
+import org.junit.Test;
+import org.onap.ccsdk.features.sdnr.wt.yang.mapper.serialize.IdentifierDeserializer;
+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;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNode;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNodeBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.connection.parameters.OdlHelloMessageCapabilitiesBuilder;
+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.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.pmdata.grp.MeasurementKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.pmdata15m.entity.PerformanceDataBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.pmdata._15m.list.output.Data;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.pmdata._15m.list.output.DataBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class TestYangGenSalMapping {
+
+    // Create mapper for serialization and deserialization
+    DataProviderYangToolsMapper mapper = new DataProviderYangToolsMapper();
+
+    @Test
+    public void test1() throws IOException {
+
+        // Create test object
+        NetconfNodeBuilder netconfNodeBuilder = new NetconfNodeBuilder();
+        netconfNodeBuilder.setConnectedMessage("ConnMessage");
+
+        LoginPasswordBuilder loginPasswordBuilder = new LoginPasswordBuilder();
+        loginPasswordBuilder.setUsername("myTestUsername");
+        loginPasswordBuilder.setPassword("myTestPassword");
+        netconfNodeBuilder.setCredentials(loginPasswordBuilder.build());
+
+        OdlHelloMessageCapabilitiesBuilder odlHelloMessageCapabilitiesBuilder =
+                new OdlHelloMessageCapabilitiesBuilder();
+        List<Uri> uriList = new ArrayList<>();
+        uriList.add(new Uri("test.uri"));
+        odlHelloMessageCapabilitiesBuilder.setCapability(uriList);
+        netconfNodeBuilder.setOdlHelloMessageCapabilities(odlHelloMessageCapabilitiesBuilder.build());
+
+        NetconfNode netconfNode = netconfNodeBuilder.build();
+        out(netconfNode.toString());
+
+        // Map Object to JSON String
+        String res = mapper.writeValueAsString(netconfNode);
+        JSONObject json = new JSONObject(res); // Convert text to object
+        out(json.toString(4)); // Print it with specified indentation
+
+        // Map to JSON String to Object
+        NetconfNode generatedNode = mapper.readValue(res.getBytes(), NetconfNode.class);
+        out(generatedNode.toString()); // Print it with specified indentation
+        // Compare result
+        //TODO - Guilin
+        //out("Equal?  "+netconfNode.equals(generatedNode));
+    }
+
+    @Test
+    public void test3() throws IOException {
+
+        PerformanceDataBuilder performanceBuilder = new PerformanceDataBuilder();
+        performanceBuilder.setEs(99);
+        DataBuilder pmData15MinutesBuilder = new DataBuilder();
+        pmData15MinutesBuilder.setLayerProtocolName("fdsaf");
+        pmData15MinutesBuilder.setTimeStamp(new DateAndTime("2017-03-01T09:15:00.0Z"));
+        pmData15MinutesBuilder.setPerformanceData(performanceBuilder.build());
+
+        // Map Object to JSON String
+        String res = mapper.writeValueAsString(pmData15MinutesBuilder.build());
+        JSONObject json = new JSONObject(res); // Convert text to object
+        out(json.toString(4)); // Print it with specified indentation
+
+        // Map to JSON String to Object
+        Data generatedNode = mapper.readValue(res.getBytes(), Data.class);
+        out(generatedNode.toString()); // Print it with specified indentation
+    }
+
+    @Test
+    public void test4() throws IOException {
+     // @formatter:off
+     String jsonString = "{\n"
+                + "\"node-name\": \"Sim2230\",\n"
+                + "\"uuid-interface\": \"LP-MWPS-TTP-RADIO\",\n"
+                + "\"layer-protocol-name\": \"MWPS\",\n"
+                + "\"radio-signal-id\": \"Test8\",\n"
+                + "\"time-stamp\": \"2017-03-01T09:15:00.0Z\",\n"
+                + "\"granularity-period\": \"Period15Min\",\n"
+                + "\"scanner-id\": \"PM_RADIO_15M_4\",\n"
+                + "\"performance-data\": {\n"
+                +     "\"unavailability\": 0,\n"
+                +     "\"tx-level-max\": 3,\n"
+                +     "\"tx-level-avg\": 3,\n"
+                +     "\"rx-level-min\": -44,\n"
+                +     "\"rx-level-max\": -45,\n"
+                +     "\"rx-level-avg\": -44,\n"
+                +     "\"time2-states\": 0,\n"
+                +     "\"time4-states-s\": 0,\n"
+                +     "\"time4-states\": 0,\n"
+                +     "\"time8-states\": -1,\n"
+                +     "\"time16-states-s\": -1,\n"
+                +     "\"time16-states\": 0,\n"
+                +     "\"time32-states\": -1,\n"
+                +     "\"time64-states\": 900,\n"
+                +     "\"time128-states\": -1,\n"
+                +     "\"time256-states\": -1,\n"
+                +     "\"time512-states\": -1,\n"
+                +     "\"time512-states-l\": -1,\n"
+                +     "\"time1024-states\": -1,\n"
+                +     "\"time1024-states-l\": -1,\n"
+                +     "\"time8192-states-l\": -1,\n"
+                +     "\"time8192-states\": -1,\n"
+                +     "\"time2048-states\": -1,\n"
+                +     "\"snir-min\": -99,\n"
+                +     "\"snir-max\": -99,\n"
+                +     "\"snir-avg\": -99,\n"
+                +     "\"xpd-min\": -99,\n"
+                +     "\"xpd-max\": -99,\n"
+                +     "\"xpd-avg\": -99,\n"
+                +     "\"rf-temp-min\": -99,\n"
+                +     "\"rf-temp-max\": -99,\n"
+                +     "\"rf-temp-avg\": -99,\n"
+                +     "\"defect-blocks-sum\": -1,\n"
+                +     "\"time-period\": 900,\n"
+                +     "\"cses\": 0,\n"
+                +     "\"time4096-states-l\": -1,\n"
+                +     "\"tx-level-min\": 3,\n"
+                +     "\"es\": 0,\n"
+                +     "\"time2048-states-l\": -1,\n"
+                +     "\"time4096-states\": -1,\n"
+                +     "\"ses\": 0\n"
+                + "},\n"
+                + "\"suspect-interval-flag\": false\n"
+                + "}\n"
+                + "}";
+        // @formatter:on
+        // Map to JSON String to Object
+        Data generatedNode = mapper.readValue(jsonString.getBytes(), Data.class);
+        out(generatedNode.toString()); // Print it with specified indentation
+    }
+
+    @Test
+    public void test5() throws IOException {
+        // @formatter:off
+        String jsonString = "{\n"
+                + "    \"time-stamp\": \"2017-03-01T06:45:00.0Z\",\n"
+                + "    \"node-name\": \"Sim2230\",\n"
+                + "    \"uuid-interface\": \"LP-MWPS-TTP-RADIO\",\n"
+                + "    \"scanner-id\": \"PM_RADIO_15M_14\",\n"
+                + "    \"layer-protocol-name\": \"MWPS\",\n"
+                + "    \"granularity-period\": \"Period15Min\",\n"
+                + "    \"radio-signal-id\": \"Test8\",\n"
+                + "    \"suspect-interval-flag\": false,\n"
+                + "    \"performance-data\": {\n"
+                + "        \"time4096-states-l\": -1,\n"
+                + "        \"time16-states-s\": -1,\n"
+                + "        \"tx-level-max\": 3,\n"
+                + "        \"snir-max\": -99,\n"
+                + "        \"time16-states\": 0,\n"
+                + "        \"time64-states\": 900,\n"
+                + "        \"unavailability\": 0,\n"
+                + "        \"time8192-states-l\": -1,\n"
+                + "        \"time512-states\": -1,\n"
+                + "        \"xpd-min\": -99,\n"
+                + "        \"xpd-avg\": -99,\n"
+                + "        \"tx-level-avg\": 3,\n"
+                + "        \"tx-level-min\": 3,\n"
+                + "        \"rf-temp-min\": -99,\n"
+                + "        \"rf-temp-avg\": -99,\n"
+                + "        \"snir-avg\": -99,\n"
+                + "        \"snir-min\": -99,\n"
+                + "        \"time-period\": 900,\n"
+                + "        \"time2-states\": 0,\n"
+                + "        \"time4-states\": 0,\n"
+                + "        \"time8-states\": -1,\n"
+                + "        \"ses\": 0,\n"
+                + "        \"time2048-states-l\": -1,\n"
+                + "        \"time2048-states\": -1,\n"
+                + "        \"xpd-max\": -99,\n"
+                + "        \"rf-temp-max\": -99,\n"
+                + "        \"time8192-states\": -1,\n"
+                + "        \"time128-states\": -1,\n"
+                + "        \"time256-states\": -1,\n"
+                + "        \"rx-level-min\": -44,\n"
+                + "        \"rx-level-avg\": -44,\n"
+                + "        \"time1024-states-l\": -1,\n"
+                + "        \"es\": 0,\n"
+                + "        \"cses\": 0,\n"
+                + "        \"time4-states-s\": 0,\n"
+                + "        \"time1024-states\": -1,\n"
+                + "        \"time512-states-l\": -1,\n"
+                + "        \"time4096-states\": -1,\n"
+                + "        \"rx-level-max\": -45,\n"
+                + "        \"defect-blocks-sum\": -1,\n"
+                + "        \"time32-states\": -1\n"
+                + "    }\n"
+                + "}";
+        // @formatter:on
+        // Map to JSON String to Object
+        Data generatedNode = mapper.readValue(jsonString.getBytes(), Data.class);
+        out(generatedNode.toString()); // Print it with specified indentation
+    }
+
+    @Test
+    public void test8() throws IOException {
+        out(method());
+        String input;
+        input = "id-dd-dd";
+        System.out.println("Map " + input + " to " + YangToolsMapperHelper.toCamelCaseAttributeName(input));
+        input = "idDdGg";
+        System.out.println("Map " + input + " to " + YangToolsMapperHelper.toCamelCaseAttributeName(input));
+        input = "_idDdGg";
+        System.out.println("Map " + input + " to " + YangToolsMapperHelper.toCamelCaseAttributeName(input));
+        input = "--ff--gfg";
+        System.out.println("Map " + input + " to " + YangToolsMapperHelper.toCamelCaseAttributeName(input));
+        input = "";
+        System.out.println("Map " + input + " to " + YangToolsMapperHelper.toCamelCaseAttributeName(input));
+    }
+
+    /* ---------------------------------
+     * Private
+     */
+    private static String method() {
+        String nameofCurrMethod = new Throwable().getStackTrace()[1].getMethodName();
+        return nameofCurrMethod;
+    }
+
+    private static void out(String text) {
+        System.out.println("----------------------");
+        System.out.println(text);
+    }
+
+    private static class DataProviderYangToolsMapper extends YangToolsMapper {
+
+        @SuppressWarnings("unused")
+        private final Logger LOG = LoggerFactory.getLogger(DataProviderYangToolsMapper.class);
+        private static final long serialVersionUID = 1L;
+
+        public DataProviderYangToolsMapper() {
+            super();
+            this.addDeserializer(Credentials.class, LoginPasswordBuilder.class.getName());
+            this.addKeyDeserializer(MeasurementKey.class, new IdentifierDeserializer());
+        }
+
+
+    }
+
+}
index cc7fafb..b73d3ea 100644 (file)
 package org.onap.ccsdk.features.sdnr.wt.common.database.data;
 
 import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
+import java.util.stream.Collectors;
 
 /**
  * @author Michael Dürre
@@ -34,14 +38,6 @@ import java.util.regex.Pattern;
  */
 public class IndicesEntry {
 
-    private static final String regex =
-            "^(yellow|red|green)[\\ ]+([^\\ ]*)[\\ ]+([^\\ ]*)[\\ ]+([^\\ ]*)[\\ ]+([0-9]+)[\\ ]+([0-9]+)[\\ ]+([0-9]+)[\\ ]+([0-9]+)[\\ ]+([^\\ ]+)[\\ ]+([^\\ ]+)$";
-    private static final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
-    //for ES 2.2.0
-    private static final String regexOld =
-            "^(yellow|red|green)[\\ ]+([^\\ ]*)[\\ ]+([^\\ ]*)[\\ ]+([0-9]+)[\\ ]+([0-9]+)[\\ ]+([0-9]+)[\\ ]+([0-9]+)[\\ ]+([^\\ ]+)[\\ ]+([^\\ ]+)$";
-    private static final Pattern patternOld = Pattern.compile(regexOld, Pattern.MULTILINE);
-
     private final String status;
     private final String status2;
     private final String name;
@@ -108,33 +104,42 @@ public class IndicesEntry {
     }
 
     public IndicesEntry(String line) throws ParseException {
-        Matcher matcher = pattern.matcher(line.trim());
-        if (!matcher.find() || matcher.groupCount() < 10) {
-            matcher = patternOld.matcher(line.trim());
-            if (!matcher.find() || matcher.groupCount() < 9) {
+        List<String> allElem = Arrays.stream(line.split(" ")).filter(e -> !e.isEmpty()).collect(Collectors.toList());
+        List<String> possibleStatus = List.of("yellow","red","green");
+        if (allElem.isEmpty() || !possibleStatus.contains(allElem.get(0))) {
+            throw new ParseException("unable to parse status:" + line, 0);
+        }
+        try {
+            if (allElem.size() == 10) {
+                // new format
+                this.status = allElem.get(0);
+                this.status2 = allElem.get(1);
+                this.name = allElem.get(2);
+                this.hash = allElem.get(3);
+                this.shards = Integer.parseInt(allElem.get(4));
+                this.replicas = Integer.parseInt(allElem.get(5));
+                this.c1 = Integer.parseInt(allElem.get(6));
+                this.c2 = Integer.parseInt(allElem.get(7));
+                this.size1 = allElem.get(8);
+                this.size2 = allElem.get(9);
+            } else if (allElem.size() == 9) {
+                // old format without hash
+                //for ES 2.2.0
+                this.status = allElem.get(0);
+                this.status2 = allElem.get(1);
+                this.name = allElem.get(2);
+                this.hash = "";
+                this.shards = Integer.parseInt(allElem.get(3));
+                this.replicas = Integer.parseInt(allElem.get(4));
+                this.c1 = Integer.parseInt(allElem.get(5));
+                this.c2 = Integer.parseInt(allElem.get(6));
+                this.size1 = allElem.get(7);
+                this.size2 = allElem.get(8);
+            } else {
                 throw new ParseException("unable to parse string:" + line, 0);
             }
-            this.status = matcher.group(1);
-            this.status2 = matcher.group(2);
-            this.name = matcher.group(3);
-            this.hash = "";
-            this.shards = Integer.parseInt(matcher.group(4));
-            this.replicas = Integer.parseInt(matcher.group(5));
-            this.c1 = Integer.parseInt(matcher.group(6));
-            this.c2 = Integer.parseInt(matcher.group(7));
-            this.size1 = matcher.group(8);
-            this.size2 = matcher.group(9);
-        } else {
-            this.status = matcher.group(1);
-            this.status2 = matcher.group(2);
-            this.name = matcher.group(3);
-            this.hash = matcher.group(4);
-            this.shards = Integer.parseInt(matcher.group(5));
-            this.replicas = Integer.parseInt(matcher.group(6));
-            this.c1 = Integer.parseInt(matcher.group(7));
-            this.c2 = Integer.parseInt(matcher.group(8));
-            this.size1 = matcher.group(9);
-            this.size2 = matcher.group(10);
+        } catch (NumberFormatException e) {
+            throw new ParseException("unable to parse int:" + line, 0);
         }
     }
 }
index 2e07012..3e82306 100644 (file)
@@ -26,6 +26,7 @@ import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.List;
 
+import javax.xml.XMLConstants;
 import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.parsers.ParserConfigurationException;
@@ -44,7 +45,8 @@ public class PomFile {
         //             documentBuilderFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
         //             documentBuilderFactory.setFeature(XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES, false);
         //             documentBuilderFactory.setFeature(XMLInputFactory.SUPPORT_DTD, false);
-
+        documentBuilderFactory.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, "");
+        documentBuilderFactory.setAttribute(XMLConstants.ACCESS_EXTERNAL_SCHEMA, "");
         DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
         this.xmlDoc = documentBuilder.parse(is);
     }
index de878a5..d149ae6 100644 (file)
@@ -90,6 +90,9 @@ public class BaseHTTPClient {
     }
 
     public BaseHTTPClient(String base, boolean trustAllCerts, String certFilename, String passphrase, int sslCertType) {
+        if(base==null) {
+            throw new IllegalArgumentException("no baseUrl given");
+        }
         if (!base.endsWith("/")) {
             base += "/";
         }
index 8b651cb..b207c3e 100644 (file)
@@ -170,7 +170,7 @@ public class JSONAssert {
     };
 
     public static void assertEquals(String def, String toTest, boolean strict) throws JSONException {
-        assertEquals(null, def, toTest, strict);
+        assertEquals("", def, toTest, strict);
     }
 
     public static void assertEquals(String message, String def, String toTest, boolean strict) throws JSONException {
index c2471f5..09ec520 100644 (file)
@@ -68,9 +68,12 @@ public class TestEsData {
     public void testIndices() {
         IndicesEntryList list = new IndicesEntryList();
         IndicesEntry entry = null;
+        IndicesEntry entryOld = null;
         try {
             entry = new IndicesEntry(
                     "yellow open inventoryequipment-v1         5nNPRbJ3T9arMxqxBbJKyQ 5 1 2 3 1.2kb 2.4kb");
+            entryOld = new IndicesEntry(
+                "yellow open inventoryequipment-v1         5 1 2 3 1.2kb 2.4kb");
             list.add(entry);
             list.add(new IndicesEntry(
                     "yellow open networkelement-connection-v1         5nNPRbJ3T9arMxqxBbJKyQ 5 1 0 0 1.2kb 1.2kb"));
@@ -94,6 +97,17 @@ public class TestEsData {
         assertEquals("1.2kb", entry.getSize1());
         assertEquals("2.4kb", entry.getSize2());
 
+        assertNotNull(entryOld);
+        assertEquals("yellow", entryOld.getStatus());
+        assertEquals("open", entryOld.getStatus2());
+        assertEquals("inventoryequipment-v1", entryOld.getName());
+        assertEquals("", entryOld.getHash());
+        assertEquals(5, entryOld.getShards());
+        assertEquals(1, entryOld.getReplicas());
+        assertEquals(2, entryOld.getC1());
+        assertEquals(3, entryOld.getC2());
+        assertEquals("1.2kb", entryOld.getSize1());
+        assertEquals("2.4kb", entryOld.getSize2());
     }
 
     @Test
index 498012d..03296c8 100755 (executable)
@@ -47,7 +47,7 @@
     <dependencies>
 
         <dependency>
-            <groupId>org.onap.ccsdk.features.sdnr.wt</groupId>
+            <groupId>${project.groupId}</groupId>
             <artifactId>${application.name}-feature</artifactId>
             <version>${project.version}</version>
             <type>xml</type>
@@ -60,7 +60,7 @@
             </exclusions>
         </dependency>
         <dependency>
-            <groupId>org.onap.ccsdk.features.sdnr.wt</groupId>
+            <groupId>${project.groupId}</groupId>
             <artifactId>${application.name}-provider</artifactId>
             <version>${project.version}</version>
         </dependency>
index 82205d5..f37c07e 100644 (file)
@@ -47,6 +47,7 @@
         <dependency>
             <groupId>javax.servlet</groupId>
             <artifactId>javax.servlet-api</artifactId>
+            <scope>provided</scope>
         </dependency>
         <dependency>
             <groupId>org.json</groupId>
@@ -68,7 +69,7 @@
             <scope>test</scope>
         </dependency>
         <dependency>
-            <groupId>org.onap.ccsdk.features.sdnr.wt</groupId>
+            <groupId>${project.groupId}</groupId>
             <artifactId>sdnr-wt-common</artifactId>
             <version>${project.version}</version>
             <scope>test</scope>
index 683311e..e9470ab 100644 (file)
@@ -41,8 +41,6 @@ public class HelpServlet extends HttpServlet implements AutoCloseable {
 
     private static final String BASEURI = "/help";
 
-    private static final boolean REDIRECT_LINKS = true;
-
     private final Path basePath;
 
     public HelpServlet() {
@@ -113,21 +111,7 @@ public class HelpServlet extends HttpServlet implements AutoCloseable {
                     return;
                 }
                 LOG.debug("delivering file");
-                OutputStream out = resp.getOutputStream();
-                //                if (this.isTextFile(f) && REDIRECT_LINKS) {
-                //                    String line;
-                //                    try (BufferedReader br = new BufferedReader(new FileReader(f))) {
-                //                        line = br.readLine();
-                //                        while (line != null) {
-                //                             out.write((line + "\n").getBytes());
-                //                            line = br.readLine();
-                //                        }
-                //                        out.flush();
-                //                        out.close();
-                //                        br.close();
-                //                    }
-                //                } else
-                {
+                try (OutputStream out = resp.getOutputStream()) {
                     try (FileInputStream in = new FileInputStream(f)) {
 
                         byte[] buffer = new byte[1024];
@@ -139,6 +123,9 @@ public class HelpServlet extends HttpServlet implements AutoCloseable {
                         out.flush();
                         out.close();
                     }
+                } catch (IOException e) {
+                    LOG.warn("Can not write meta file", e);
+                    resp.setStatus(500);
                 }
             } else {
                 LOG.debug("found not file for request");
@@ -148,15 +135,15 @@ public class HelpServlet extends HttpServlet implements AutoCloseable {
     }
 
     private boolean ispdf(File f) {
-        return f != null ? this.ispdf(f.getName()) : false;
+        return f != null && this.ispdf(f.getName());
     }
 
     private boolean ispdf(String name) {
-        return name != null ? name.toLowerCase().endsWith("pdf") : false;
+        return name != null && name.toLowerCase().endsWith("pdf");
     }
 
     private boolean isImageFile(File f) {
-        return f != null ? this.isImageFile(f.getName()) : false;
+        return f != null && this.isImageFile(f.getName());
     }
 
     private boolean isImageFile(String name) {
@@ -169,7 +156,7 @@ public class HelpServlet extends HttpServlet implements AutoCloseable {
     }
 
     private boolean isTextFile(File f) {
-        return f != null ? this.isTextFile(f.getName()) : false;
+        return f != null && this.isTextFile(f.getName());
 
     }