2 * Copyright © 2016-2017 European Support Limited.
4 package org.openecomp.core.tools.exportinfo;
6 import com.datastax.driver.core.DataType.Name;
7 import com.datastax.driver.core.ResultSet;
8 import com.datastax.driver.core.Row;
9 import com.google.gson.JsonElement;
10 import com.google.gson.JsonParser;
11 import org.codehaus.jackson.map.ObjectMapper;
12 import org.openecomp.core.tools.importinfo.ImportProperties;
13 import org.openecomp.core.tools.model.ColumnDefinition;
14 import org.openecomp.core.tools.model.TableData;
15 import org.openecomp.core.tools.util.Utils;
16 import org.openecomp.sdc.logging.api.Logger;
17 import org.openecomp.sdc.logging.api.LoggerFactory;
20 import java.io.IOException;
21 import java.nio.ByteBuffer;
22 import java.nio.file.Paths;
23 import java.util.ArrayList;
24 import java.util.Base64;
25 import java.util.Iterator;
26 import java.util.List;
29 import java.util.stream.Collectors;
31 import static org.openecomp.core.tools.importinfo.ImportSingleTable.dataTypesMap;
33 public class ExportSerializer {
35 private static final Logger logger = LoggerFactory.getLogger(ExportDataCommand.class);
36 private static final String ELEMENT_TABLE_NAME = "element";
37 private static final String ELEMENT_INFO_COLUMN_NAME = "info";
39 public void serializeResult(final ResultSet resultSet, final Set<String> filteredItems, final String filteredColumn, Set<String> vlms) {
41 TableData tableData = new TableData();
42 tableData.definitions = resultSet.getColumnDefinitions().asList().stream().map(column -> new ColumnDefinition(column)).collect(Collectors.toList());
43 String table = tableData.definitions.iterator().next().getTable();
44 boolean isElementTable = table.equals(ELEMENT_TABLE_NAME);
45 Iterator<Row> iterator = resultSet.iterator();
46 iterator.forEachRemaining(row -> {
47 if (!filteredItems.contains(row.getString(filteredColumn))) {
50 List<String> rowData = new ArrayList<>();
51 for (int i = 0; i < tableData.definitions.size(); i++) {
52 ColumnDefinition columnDefinition = tableData.definitions.get(i);
53 Name name = dataTypesMap.get(columnDefinition.getType());
54 boolean checkForVLM = isElementTable && columnDefinition.getName().equals(ELEMENT_INFO_COLUMN_NAME);
56 data = convertByType(vlms, row, i, name, checkForVLM);
57 rowData.add(data.toString());
59 tableData.rows.add(rowData);
61 ObjectMapper objectMapper = new ObjectMapper();
62 String fileName = ImportProperties.ROOT_DIRECTORY + File.separator + table + "_" + System.currentTimeMillis() + ".json";
63 objectMapper.writeValue(Paths.get(fileName).toFile(), tableData);
64 Utils.printMessage(logger, "File exported is :" + fileName);
66 } catch (IOException e) {
67 Utils.logError(logger, e);
72 private Object convertByType(Set<String> vlms, Row row, int i, Name name, boolean checkForVLM) {
78 String string = row.getString(i);
82 if (checkForVLM && vlms != null){
83 String vlm = extractVlm(string);
88 data = Base64.getEncoder().encodeToString(string.getBytes());
91 ByteBuffer bytes = row.getBytes(i);
93 bytes = ByteBuffer.wrap("".getBytes());
95 data = Base64.getEncoder().encodeToString(bytes.array());
98 data = row.getDate(i).getTime();
101 data = row.getBool(i);
104 data = row.getLong(i);
107 data = row.getInt(i);
110 data = row.getFloat(i);
113 Set set = row.getSet(i, Object.class);
114 Object joined = set.stream().map(o -> o.toString()).collect(Collectors.joining(ExportDataCommand.JOIN_DELIMITER));
115 data = Base64.getEncoder().encodeToString(joined.toString().getBytes());
118 Map<Object,Object> map = row.getMap(i, Object.class, Object.class);
119 Set<Map.Entry<Object,Object>> entrySet = map.entrySet();
120 Object mapAsString = entrySet.parallelStream().map(entry -> entry.getKey().toString() + ExportDataCommand.MAP_DELIMITER +entry.getValue().toString())
121 .collect(Collectors.joining(ExportDataCommand.MAP_DELIMITER));
122 data = Base64.getEncoder().encodeToString(mapAsString.toString().getBytes());
125 throw new UnsupportedOperationException("Name is not supported :" + name);
130 protected String extractVlm(String injson) {
135 JsonElement root = new JsonParser().parse(injson);
139 JsonElement properties = root.getAsJsonObject().get("properties");
140 if (properties == null){
143 JsonElement vendorId = properties.getAsJsonObject().get("vendorId");
144 if (vendorId == null){
147 return vendorId.getAsString();
148 } catch (Exception ex){