in src/Explorer/Graph/GraphExplorerComponent/GraphExplorer.tsx [503:561]
public fetchEdgeVertexPairs(
outE: boolean,
vertex: GraphData.GremlinVertex,
startIndex: number,
pageSize: number,
): Q.Promise<EdgeVertexPair[]> {
if (startIndex < 0) {
const error = `Attempt to fetch edge-vertex pairs with negative index: outE:${outE}, vertex id:${vertex.id}, startIndex:${startIndex}, pageSize:${pageSize}`;
GraphExplorer.reportToConsole(ConsoleDataType.Error, error);
throw error;
}
// Try hitting cache first
const cache = outE ? this.outECache : this.inECache;
const pairs = cache.retrieve(vertex.id, startIndex, pageSize);
if (pairs !== null && pairs.length === pageSize) {
const msg = `Retrieved ${pairs.length} ${outE ? "outE" : "inE"} edges from cache for vertex id: ${vertex.id}`;
GraphExplorer.reportToConsole(ConsoleDataType.Info, msg);
return Q.resolve(pairs);
}
const excludedEdgeIds = outE ? vertex._outEdgeIds : vertex._inEdgeIds;
const gremlinQuery = GraphUtil.createFetchEdgePairQuery(
outE,
this.getPkIdFromVertex(vertex),
excludedEdgeIds,
startIndex,
pageSize,
GraphExplorer.WITHOUT_STEP_ARGS_MAX_CHARS,
);
return this.submitToBackend(gremlinQuery).then((result: GremlinClient.GremlinRequestResult) => {
const data = result.data;
if (data === null) {
const error = `Failed to load incoming edge/pairs for ${vertex.id} (query result is null)`;
GraphExplorer.reportToConsole(ConsoleDataType.Error, error);
throw error;
}
// Check if result is an array of edge/vertex pairs
if (!GraphExplorer.isEdgeVertexPairArray(data)) {
const error = `Failed to load incoming edge/pairs for ${vertex.id} (query result not a valid array of edge/vertex pairs)`;
GraphExplorer.reportToConsole(ConsoleDataType.Error, error, data);
throw error;
}
// Cache result
const pairs = data as EdgeVertexPair[];
for (let i = 0; i < pairs.length; i++) {
const pair = pairs[i];
cache.insert(vertex.id, startIndex + i, pair);
// Merge with possible cached edge information
this.edgeInfoCache.mergeEdgeInfo(pair.v);
}
return pairs;
});
}