NebulaGraph Java Client  release-3.8
EdgeProcessor.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.EdgeRow;
14 import com.vesoft.nebula.client.storage.data.EdgeTableRow;
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 EdgeProcessor {
22  private static final Logger LOGGER = LoggerFactory.getLogger(EdgeProcessor.class);
23 
24  public static List<EdgeRow> constructEdgeRow(List<DataSet> dataSets, String decodeType) {
25  List<EdgeRow> edgeRows = new ArrayList<>();
26  for (DataSet dataSet : dataSets) {
27  List<Row> rows = dataSet.getRows();
28  List<byte[]> colNames = dataSet.getColumn_names();
29  for (Row row : rows) {
30  List<Value> values = row.getValues();
31  if (values.size() < 3) {
32  LOGGER.error("values size error for row: " + row.toString());
33  } else {
34  Value srcId = null;
35  Value dstId = null;
36  Value rank = null;
37  Map<String, ValueWrapper> props = Maps.newHashMap();
38  for (int i = 0; i < values.size(); i++) {
39  String colName = new String(colNames.get(i));
40  if (!colName.contains(".")) {
41  continue;
42  }
43  if ("_src".equals(colName.split("\\.")[1])) {
44  srcId = values.get(i);
45  } else if ("_dst".equals(colName.split("\\.")[1])) {
46  dstId = values.get(i);
47  } else if ("_rank".equals(colName.split("\\.")[1])) {
48  rank = values.get(i);
49  } else {
50  props.put(colName.split("\\.")[1],
51  new ValueWrapper(values.get(i), decodeType));
52  }
53  }
54  EdgeRow edgeRow = new EdgeRow(new ValueWrapper(srcId, decodeType),
55  new ValueWrapper(dstId, decodeType), rank.getIVal(), props);
56  edgeRows.add(edgeRow);
57  }
58  }
59  }
60  return edgeRows;
61  }
62 
63  public static List<EdgeTableRow> constructEdgeTableRow(List<DataSet> dataSets,
64  String decodeType) {
65  List<EdgeTableRow> edgeRows = new ArrayList<>();
66  for (DataSet dataSet : dataSets) {
67  List<Row> rows = dataSet.getRows();
68  for (Row row : rows) {
69  List<Value> values = row.getValues();
70  List<ValueWrapper> props = new ArrayList<>();
71  for (int i = 0; i < values.size(); i++) {
72  props.add(new ValueWrapper(values.get(i), decodeType));
73  }
74  edgeRows.add(new EdgeTableRow(props));
75  }
76  }
77  return edgeRows;
78  }
79 }