2 * Copyright © 2016-2017 European Support Limited.
4 package org.openecomp.core.tools.exportinfo;
6 import static org.openecomp.core.tools.exportinfo.ExportDataCommand.NULL_REPRESENTATION;
7 import static org.openecomp.core.tools.importinfo.ImportSingleTable.dataTypesMap;
9 import com.datastax.driver.core.DataType.Name;
10 import com.datastax.driver.core.ResultSet;
11 import com.datastax.driver.core.Row;
12 import com.google.gson.JsonElement;
13 import com.google.gson.JsonParser;
14 import com.google.gson.JsonSyntaxException;
16 import java.io.IOException;
17 import java.nio.ByteBuffer;
18 import java.nio.file.Paths;
19 import java.util.ArrayList;
20 import java.util.Base64;
21 import java.util.Date;
22 import java.util.Iterator;
23 import java.util.List;
26 import java.util.stream.Collectors;
27 import org.apache.commons.lang3.StringUtils;
28 import org.codehaus.jackson.map.ObjectMapper;
29 import org.openecomp.core.tools.importinfo.ImportProperties;
30 import org.openecomp.core.tools.model.ColumnDefinition;
31 import org.openecomp.core.tools.model.TableData;
32 import org.openecomp.core.tools.util.Utils;
33 import org.openecomp.sdc.logging.api.Logger;
34 import org.openecomp.sdc.logging.api.LoggerFactory;
36 public class ExportSerializer {
38 private static final Logger logger = LoggerFactory.getLogger(ExportSerializer.class);
39 private static final String ELEMENT_TABLE_NAME = "element";
40 private static final String ELEMENT_INFO_COLUMN_NAME = "info";
43 public void serializeResult(final ResultSet resultSet, final Set<String> filteredItems, final String filteredColumn, Set<String> vlms) {
45 TableData tableData = new TableData();
46 tableData.definitions = resultSet.getColumnDefinitions().asList().stream().map(ColumnDefinition::new).collect(Collectors.toList());
47 String table = tableData.definitions.iterator().next().getTable();
48 boolean isElementTable = table.equals(ELEMENT_TABLE_NAME);
49 Iterator<Row> iterator = resultSet.iterator();
50 iterator.forEachRemaining(row -> {
51 if (!filteredItems.contains(row.getString(filteredColumn))) {
54 List<String> rowData = new ArrayList<>();
55 for (int i = 0; i < tableData.definitions.size(); i++) {
56 ColumnDefinition columnDefinition = tableData.definitions.get(i);
57 Name name = dataTypesMap.get(columnDefinition.getType());
58 boolean checkForVLM = isElementTable && columnDefinition.getName().equals(ELEMENT_INFO_COLUMN_NAME);
59 Object data = convertByType(vlms, row, i, name, checkForVLM);
60 rowData.add(data.toString());
62 tableData.rows.add(rowData);
64 ObjectMapper objectMapper = new ObjectMapper();
65 String fileName = ImportProperties.ROOT_DIRECTORY + File.separator + table + "_" + System.currentTimeMillis() + ".json";
66 objectMapper.writeValue(Paths.get(fileName).toFile(), tableData);
67 Utils.printMessage(logger, "File exported is :" + fileName);
69 } catch (IOException e) {
70 Utils.logError(logger, e);
75 private Object convertByType(Set<String> vlms, Row row, int i, Name name, boolean checkForVLM) {
81 String string = row.getString(i);
83 string = NULL_REPRESENTATION;
85 if (checkForVLM && vlms != null) {
86 String vlm = extractVlm(string);
91 data = Base64.getEncoder().encodeToString(string.getBytes());
94 ByteBuffer bytes = row.getBytes(i);
96 bytes = ByteBuffer.wrap("".getBytes());
98 data = Base64.getEncoder().encodeToString(bytes.array());
101 Date rowDate = row.getTimestamp(i);
102 if (rowDate != null) {
103 data = rowDate.getTime();
109 data = row.getBool(i);
112 data = row.getLong(i);
115 data = row.getInt(i);
118 data = row.getFloat(i);
121 Set<Object> set = (Set<Object>) row.getObject(i);
122 Object joined = set.stream().map(Object::toString).collect(Collectors.joining(ExportDataCommand.JOIN_DELIMITER));
123 data = Base64.getEncoder().encodeToString(joined.toString().getBytes());
126 Map<Object, Object> map = (Map<Object, Object>) row.getObject(i);
127 Set<Map.Entry<Object, Object>> entrySet = map.entrySet();
128 Object mapAsString = entrySet.parallelStream().map(entry -> entry.getKey().toString() + ExportDataCommand.MAP_DELIMITER + entry.getValue().toString())
129 .collect(Collectors.joining(ExportDataCommand.JOIN_DELIMITER));
130 data = Base64.getEncoder().encodeToString(mapAsString.toString().getBytes());
133 throw new UnsupportedOperationException("Name is not supported :" + name);
138 protected String extractVlm(String inJson) {
139 if (StringUtils.isEmpty(inJson.trim())) {
144 root = new JsonParser().parse(inJson);
145 } catch (JsonSyntaxException e) {
146 Utils.logError(logger, "Failed to parse json " + inJson, e);
152 JsonElement properties = root.getAsJsonObject().get("properties");
153 if (properties == null) {
156 JsonElement vendorId = properties.getAsJsonObject().get("vendorId");
157 if (vendorId == null) {
160 return vendorId.getAsString();