NebulaGraph Java Client  release-3.8
VertexProcessor.java
1 /* Copyright (c) 2020 vesoft inc. All rights reserved.
2  *
3  * This source code is licensed under Apache 2.0 License.
4  */
5 
6 package com.vesoft.nebula.client.storage.processor;
7 
8 import com.google.common.collect.Maps;
9 import com.vesoft.nebula.DataSet;
10 import com.vesoft.nebula.Row;
11 import com.vesoft.nebula.Value;
12 import com.vesoft.nebula.client.graph.data.ValueWrapper;
13 import com.vesoft.nebula.client.storage.data.VertexRow;
14 import com.vesoft.nebula.client.storage.data.VertexTableRow;
15 import java.util.ArrayList;
16 import java.util.List;
17 import java.util.Map;
18 import org.slf4j.Logger;
19 import org.slf4j.LoggerFactory;
20 
21 public class VertexProcessor {
22  private static final Logger LOGGER = LoggerFactory.getLogger(VertexProcessor.class);
23 
24  public static Map<ValueWrapper, VertexRow> constructVertexRow(List<DataSet> dataSets,
25  String decodeType) {
26  Map<ValueWrapper, VertexRow> vidVertices = Maps.newHashMap();
27  for (DataSet dataSet : dataSets) {
28  List<Row> rows = dataSet.getRows();
29  List<byte[]> colNames = dataSet.getColumn_names();
30  for (Row row : rows) {
31  List<Value> values = row.getValues();
32  if (values.size() < 1) {
33  LOGGER.error("values size error for row: " + row.toString());
34  } else {
35  Value vid = null;
36  Map<String, ValueWrapper> props = Maps.newHashMap();
37  for (int i = 0; i < values.size(); i++) {
38  String colName = new String(colNames.get(i));
39  if (!colName.contains(".")) {
40  continue;
41  }
42  if ("_vid".equals(colName.split("\\.")[1])) {
43  vid = values.get(i);
44  } else {
45  props.put(colName.split("\\.")[1],
46  new ValueWrapper(values.get(i), decodeType));
47  }
48  }
49  VertexRow vertexRow = new VertexRow(new ValueWrapper(vid, decodeType), props);
50  vidVertices.put(new ValueWrapper(vid, decodeType), vertexRow);
51  }
52  }
53  }
54  return vidVertices;
55  }
56 
57  public static List<VertexTableRow> constructVertexTableRow(List<DataSet> dataSets,
58  String decodeType) {
59  List<VertexTableRow> vertexRows = new ArrayList<>();
60  for (DataSet dataSet : dataSets) {
61  List<Row> rows = dataSet.getRows();
62  for (Row row : rows) {
63  List<Value> values = row.getValues();
64  List<ValueWrapper> props = new ArrayList<>();
65  // the first prop returned by server is vid, which is also contained in other cols.
66  for (int i = 1; i < values.size(); i++) {
67  props.add(new ValueWrapper(values.get(i), decodeType));
68  }
69  vertexRows.add(new VertexTableRow(props));
70  }
71  }
72  return vertexRows;
73  }
74 }