aboutsummaryrefslogtreecommitdiffstats
path: root/openecomp-be/tools/zusammen-tools/src/main/java/org/openecomp/core/tools/exportinfo/ExportSerializer.java
diff options
context:
space:
mode:
Diffstat (limited to 'openecomp-be/tools/zusammen-tools/src/main/java/org/openecomp/core/tools/exportinfo/ExportSerializer.java')
-rw-r--r--openecomp-be/tools/zusammen-tools/src/main/java/org/openecomp/core/tools/exportinfo/ExportSerializer.java152
1 files changed, 152 insertions, 0 deletions
diff --git a/openecomp-be/tools/zusammen-tools/src/main/java/org/openecomp/core/tools/exportinfo/ExportSerializer.java b/openecomp-be/tools/zusammen-tools/src/main/java/org/openecomp/core/tools/exportinfo/ExportSerializer.java
new file mode 100644
index 0000000000..3c917b1c7e
--- /dev/null
+++ b/openecomp-be/tools/zusammen-tools/src/main/java/org/openecomp/core/tools/exportinfo/ExportSerializer.java
@@ -0,0 +1,152 @@
+/**
+ * Copyright © 2016-2017 European Support Limited.
+ */
+package org.openecomp.core.tools.exportinfo;
+
+import com.datastax.driver.core.DataType.Name;
+import com.datastax.driver.core.ResultSet;
+import com.datastax.driver.core.Row;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonParser;
+import org.codehaus.jackson.map.ObjectMapper;
+import org.openecomp.core.tools.importinfo.ImportProperties;
+import org.openecomp.core.tools.model.ColumnDefinition;
+import org.openecomp.core.tools.model.TableData;
+import org.openecomp.core.tools.util.Utils;
+import org.openecomp.sdc.logging.api.Logger;
+import org.openecomp.sdc.logging.api.LoggerFactory;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.ByteBuffer;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.Base64;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+import static org.openecomp.core.tools.importinfo.ImportSingleTable.dataTypesMap;
+
+public class ExportSerializer {
+
+ private static final Logger logger = LoggerFactory.getLogger(ExportDataCommand.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());
+ String table = tableData.definitions.iterator().next().getTable();
+ boolean isElementTable = table.equals(ELEMENT_TABLE_NAME);
+ Iterator<Row> iterator = resultSet.iterator();
+ iterator.forEachRemaining(row -> {
+ if (!filteredItems.contains(row.getString(filteredColumn))) {
+ return;
+ }
+ List<String> rowData = new ArrayList<>();
+ for (int i = 0; i < tableData.definitions.size(); i++) {
+ ColumnDefinition columnDefinition = tableData.definitions.get(i);
+ Name name = dataTypesMap.get(columnDefinition.getType());
+ boolean checkForVLM = isElementTable && columnDefinition.getName().equals(ELEMENT_INFO_COLUMN_NAME);
+ Object data;
+ data = convertByType(vlms, row, i, name, checkForVLM);
+ rowData.add(data.toString());
+ }
+ tableData.rows.add(rowData);
+ });
+ ObjectMapper objectMapper = new ObjectMapper();
+ String fileName = ImportProperties.ROOT_DIRECTORY + File.separator + table + "_" + System.currentTimeMillis() + ".json";
+ objectMapper.writeValue(Paths.get(fileName).toFile(), tableData);
+ Utils.printMessage(logger, "File exported is :" + fileName);
+
+ } catch (IOException e) {
+ Utils.logError(logger, e);
+ System.exit(1);
+ }
+ }
+
+ private Object convertByType(Set<String> vlms, Row row, int i, Name name, boolean checkForVLM) {
+ Object data;
+ switch (name) {
+ case VARCHAR:
+ case TEXT:
+ case ASCII:
+ String string = row.getString(i);
+ if (string == null) {
+ string = "";
+ }
+ if (checkForVLM && vlms != null){
+ String vlm = extractVlm(string);
+ if (vlm!= null) {
+ vlms.add(vlm);
+ }
+ }
+ data = Base64.getEncoder().encodeToString(string.getBytes());
+ break;
+ case BLOB:
+ ByteBuffer bytes = row.getBytes(i);
+ if (bytes == null) {
+ bytes = ByteBuffer.wrap("".getBytes());
+ }
+ data = Base64.getEncoder().encodeToString(bytes.array());
+ break;
+ case TIMESTAMP:
+ data = row.getDate(i).getTime();
+ break;
+ case BOOLEAN:
+ data = row.getBool(i);
+ break;
+ case COUNTER:
+ data = row.getLong(i);
+ break;
+ case INT:
+ data = row.getInt(i);
+ break;
+ case FLOAT:
+ 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));
+ 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())
+ .collect(Collectors.joining(ExportDataCommand.MAP_DELIMITER));
+ data = Base64.getEncoder().encodeToString(mapAsString.toString().getBytes());
+ break;
+ default:
+ throw new UnsupportedOperationException("Name is not supported :" + name);
+ }
+ return data;
+ }
+
+ protected String extractVlm(String injson) {
+ try {
+ 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();
+ } catch (Exception ex){
+ return null;
+ }
+ }
+}