Fail to Export VLM 21/27721/2
authorshrek2000 <orenkle@amdocs.com>
Tue, 9 Jan 2018 14:00:28 +0000 (16:00 +0200)
committerVitaly Emporopulo <Vitaliy.Emporopulo@amdocs.com>
Wed, 10 Jan 2018 13:50:33 +0000 (13:50 +0000)
Timestamps had null value, invalid json caused exceptions
Issue-ID: SDC-892

Change-Id: Iab117dd76cd51c3cd5fa62a59f55b18e265c58bf
Signed-off-by: shrek2000 <orenkle@amdocs.com>
openecomp-be/tools/zusammen-tools/src/main/java/org/openecomp/core/tools/exportinfo/ExportSerializer.java
openecomp-be/tools/zusammen-tools/src/main/java/org/openecomp/core/tools/importinfo/ImportSingleTable.java
openecomp-be/tools/zusammen-tools/src/test/java/org/openecomp/core/tools/Commands/exportinfo/serialize/VLMExtractTest.java

index 0098f21..f4710fb 100644 (file)
@@ -8,6 +8,8 @@ import com.datastax.driver.core.ResultSet;
 import com.datastax.driver.core.Row;
 import com.google.gson.JsonElement;
 import com.google.gson.JsonParser;
+import com.google.gson.JsonSyntaxException;
+import org.apache.commons.lang3.StringUtils;
 import org.codehaus.jackson.map.ObjectMapper;
 import org.openecomp.core.tools.importinfo.ImportProperties;
 import org.openecomp.core.tools.model.ColumnDefinition;
@@ -22,6 +24,7 @@ import java.nio.ByteBuffer;
 import java.nio.file.Paths;
 import java.util.ArrayList;
 import java.util.Base64;
+import java.util.Date;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
@@ -32,14 +35,14 @@ import static org.openecomp.core.tools.importinfo.ImportSingleTable.dataTypesMap
 
 public class ExportSerializer {
 
-    private static final Logger logger = LoggerFactory.getLogger(ExportDataCommand.class);
+    private static final Logger logger = LoggerFactory.getLogger(ExportSerializer.class);
     private static final String ELEMENT_TABLE_NAME = "element";
     private static final String ELEMENT_INFO_COLUMN_NAME = "info";
 
     public void serializeResult(final ResultSet resultSet, final Set<String> filteredItems, final String filteredColumn, Set<String> vlms) {
         try {
             TableData tableData = new TableData();
-            tableData.definitions = resultSet.getColumnDefinitions().asList().stream().map(column -> new ColumnDefinition(column)).collect(Collectors.toList());
+            tableData.definitions = resultSet.getColumnDefinitions().asList().stream().map(ColumnDefinition::new).collect(Collectors.toList());
             String table = tableData.definitions.iterator().next().getTable();
             boolean isElementTable = table.equals(ELEMENT_TABLE_NAME);
             Iterator<Row> iterator = resultSet.iterator();
@@ -78,9 +81,9 @@ public class ExportSerializer {
                 if (string == null) {
                     string = "";
                 }
-                if (checkForVLM && vlms != null){
+                if (checkForVLM && vlms != null) {
                     String vlm = extractVlm(string);
-                    if (vlm!= null) {
+                    if (vlm != null) {
                         vlms.add(vlm);
                     }
                 }
@@ -94,7 +97,12 @@ public class ExportSerializer {
                 data = Base64.getEncoder().encodeToString(bytes.array());
                 break;
             case TIMESTAMP:
-                data = row.getDate(i).getTime();
+                Date rowDate = row.getDate(i);
+                if (rowDate != null) {
+                    data = rowDate.getTime();
+                } else {
+                    data = "";
+                }
                 break;
             case BOOLEAN:
                 data = row.getBool(i);
@@ -109,14 +117,14 @@ public class ExportSerializer {
                 data = row.getFloat(i);
                 break;
             case SET:
-                Set set = row.getSet(i, Object.class);
-                Object joined = set.stream().map(o -> o.toString()).collect(Collectors.joining(ExportDataCommand.JOIN_DELIMITER));
+                Set<Object> set = row.getSet(i, Object.class);
+                Object joined = set.stream().map(Object::toString).collect(Collectors.joining(ExportDataCommand.JOIN_DELIMITER));
                 data = Base64.getEncoder().encodeToString(joined.toString().getBytes());
                 break;
             case MAP:
-                Map<Object,Object> map = row.getMap(i, Object.class, Object.class);
-                Set<Map.Entry<Object,Object>> entrySet = map.entrySet();
-                Object mapAsString = entrySet.parallelStream().map(entry -> entry.getKey().toString() + ExportDataCommand.MAP_DELIMITER +entry.getValue().toString())
+                Map<Object, Object> map = row.getMap(i, Object.class, Object.class);
+                Set<Map.Entry<Object, Object>> entrySet = map.entrySet();
+                Object mapAsString = entrySet.parallelStream().map(entry -> entry.getKey().toString() + ExportDataCommand.MAP_DELIMITER + entry.getValue().toString())
                         .collect(Collectors.joining(ExportDataCommand.MAP_DELIMITER));
                 data = Base64.getEncoder().encodeToString(mapAsString.toString().getBytes());
                 break;
@@ -126,22 +134,28 @@ public class ExportSerializer {
         return data;
     }
 
-    protected String extractVlm(String injson) {
-            if (injson == null){
-                return null;
-            }
-            JsonElement root = new JsonParser().parse(injson);
-            if (root == null){
-                return null;
-            }
-            JsonElement properties = root.getAsJsonObject().get("properties");
-            if (properties == null){
-                return null;
-            }
-            JsonElement vendorId = properties.getAsJsonObject().get("vendorId");
-            if (vendorId == null){
-                return null;
-            }
-            return vendorId.getAsString();
+    protected String extractVlm(String inJson) {
+        if (StringUtils.isEmpty(inJson.trim())) {
+            return null;
+        }
+        JsonElement root;
+        try {
+            root = new JsonParser().parse(inJson);
+        } catch (JsonSyntaxException e) {
+            Utils.logError(logger, "Failed to parse json " + inJson, e);
+            return null;
+        }
+        if (root == null) {
+            return null;
+        }
+        JsonElement properties = root.getAsJsonObject().get("properties");
+        if (properties == null) {
+            return null;
+        }
+        JsonElement vendorId = properties.getAsJsonObject().get("vendorId");
+        if (vendorId == null) {
+            return null;
+        }
+        return vendorId.getAsString();
     }
 }
index 8a671c5..922e5c7 100644 (file)
@@ -36,8 +36,8 @@ public class ImportSingleTable {
 
     private static final Logger logger = LoggerFactory.getLogger(ImportSingleTable.class);
 
-    public static final String INSERT_INTO = "INSERT INTO ";
-    public static final String VALUES = " VALUES ";
+    private static final String INSERT_INTO = "INSERT INTO ";
+    private static final String VALUES = " VALUES ";
     private static final Map<String, PreparedStatement> statementsCache = new HashMap<>();
 
     public void importFile(Path file) {
@@ -96,7 +96,11 @@ public class ImportSingleTable {
                 bind.setBytes(i, ByteBuffer.wrap(Base64.getDecoder().decode(rowData.getBytes())));
                 break;
             case TIMESTAMP:
-                bind.setDate(i, new Date(Long.parseLong(rowData)));
+                if (StringUtils.isEmpty(rowData)){
+                    bind.setSet(i, null);
+                } else {
+                    bind.setDate(i, new Date(Long.parseLong(rowData)));
+                }
                 break;
             case BOOLEAN:
                 bind.setBool(i, Boolean.parseBoolean(rowData));
@@ -147,7 +151,7 @@ public class ImportSingleTable {
         ColumnDefinition def = tableData.definitions.iterator().next();
         StringBuilder sb = new StringBuilder();
         sb.append(INSERT_INTO).append(def.getKeyspace()).append(".").append(def.getTable());
-        sb.append(tableData.definitions.stream().map(definition -> definition.getName()).collect(Collectors.joining(" , ", " ( ", " ) ")));
+        sb.append(tableData.definitions.stream().map(ColumnDefinition::getName).collect(Collectors.joining(" , ", " ( ", " ) ")));
         sb.append(VALUES).append(tableData.definitions.stream().map(definition -> "?").collect(Collectors.joining(" , ", " ( ", " ) "))).append(";");
         return sb.toString();
     }
index a5a1ff2..ed1ad2b 100644 (file)
@@ -36,12 +36,12 @@ public class VLMExtractTest {
     @Test(expectedExceptions = IllegalStateException.class)
     public void failToExtractVLMBecauseJsonIsCorrupted(){
         String elemenet_info_string = "gfhhhghgh";
-        new CustomExportSerializer().extractVlm(elemenet_info_string);
+        assertNull(new CustomExportSerializer().extractVlm(elemenet_info_string));
     }
 
     private static final class CustomExportSerializer extends ExportSerializer{
-        public String extractVlm(String injson) {
-            return super.extractVlm(injson);
+        public String extractVlm(String inJson) {
+            return super.extractVlm(inJson);
         }
     }
 }