Skip to content

Commit 62a4aef

Browse files
authored
Merge pull request #117 from vsreekanti/master
Lineage Edge Adjacency API
2 parents 03cef1b + 1996ac6 commit 62a4aef

File tree

5 files changed

+73
-39
lines changed

5 files changed

+73
-39
lines changed

modules/common/app/edu/berkeley/ground/common/dao/core/NodeVersionDao.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ public interface NodeVersionDao extends RichVersionDao<NodeVersion> {
2323
@Override
2424
NodeVersion retrieveFromDatabase(long id) throws GroundException;
2525

26+
List<Long> retrieveAdjacentLineageEdgeVersion(long startId) throws GroundException;
27+
2628
@Override
2729
default Class<NodeVersion> getType() {
2830
return NodeVersion.class;

modules/postgres/app/edu/berkeley/ground/postgres/controllers/NodeController.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,4 +149,22 @@ public final CompletionStage<Result> getHistory(String sourceKey) {
149149
.thenApply(Results::ok)
150150
.exceptionally(e -> GroundUtils.handleException(e, request()));
151151
}
152+
153+
public final CompletionStage<Result> getAdjacentLineage(Long id) {
154+
return CompletableFuture.supplyAsync(
155+
() -> {
156+
try {
157+
return this.cache.getOrElse(
158+
"node_version_adj_lineage." + id,
159+
() -> Json.toJson(this.postgresNodeVersionDao.retrieveAdjacentLineageEdgeVersion(id)),
160+
Integer.parseInt(System.getProperty("ground.cache.expire.secs")));
161+
} catch (Exception e) {
162+
throw new CompletionException(e);
163+
}
164+
},
165+
PostgresUtils.getDbSourceHttpContext(actorSystem))
166+
.thenApply(Results::ok)
167+
.exceptionally(e -> GroundUtils.handleException(e, request()));
168+
}
169+
152170
}

modules/postgres/app/edu/berkeley/ground/postgres/dao/SqlConstants.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ public class SqlConstants {
5252

5353
/* Node-specific statements */
5454
public static final String INSERT_NODE_VERSION = "INSERT INTO node_version (id, node_id) VALUES (%d, %d);";
55+
public static final String SELECT_NODE_VERSION_ADJACENT_LINEAGE = "SELECT * FROM lineage_edge_version WHERE from_rich_version_id = %d;";
5556

5657
/* Rich Version-specific statements */
5758
public static final String INSERT_RICH_VERSION_WITH_REFERENCE = "INSERT INTO rich_version (id, structure_version_id, reference) VALUES (%d, %d, "

modules/postgres/app/edu/berkeley/ground/postgres/dao/core/PostgresNodeVersionDao.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import edu.berkeley.ground.postgres.dao.SqlConstants;
1111
import edu.berkeley.ground.postgres.util.PostgresStatements;
1212
import edu.berkeley.ground.postgres.util.PostgresUtils;
13+
import java.util.ArrayList;
1314
import java.util.List;
1415
import play.db.Database;
1516
import play.libs.Json;
@@ -58,7 +59,7 @@ public PostgresStatements delete(long id) {
5859
@Override
5960
public NodeVersion retrieveFromDatabase(long id) throws GroundException {
6061
String sql = String.format(SqlConstants.SELECT_STAR_BY_ID, "node_version", id);
61-
JsonNode json = Json.parse(PostgresUtils.executeQueryToJson(dbSource, sql));
62+
JsonNode json = Json.parse(PostgresUtils.executeQueryToJson(this.dbSource, sql));
6263

6364
if (json.size() == 0) {
6465
throw new GroundException(ExceptionType.VERSION_NOT_FOUND, this.getType().getSimpleName(), String.format("%d", id));
@@ -69,4 +70,15 @@ public NodeVersion retrieveFromDatabase(long id) throws GroundException {
6970

7071
return new NodeVersion(id, richVersion, nodeVersion);
7172
}
73+
74+
@Override
75+
public List<Long> retrieveAdjacentLineageEdgeVersion(long startId) throws GroundException {
76+
String sql = String.format(SqlConstants.SELECT_NODE_VERSION_ADJACENT_LINEAGE, startId);
77+
JsonNode json = Json.parse(PostgresUtils.executeQueryToJson(this.dbSource, sql));
78+
79+
List<Long> result = new ArrayList<>();
80+
json.forEach(x -> result.add(x.get("id").asLong()));
81+
82+
return result;
83+
}
7284
}

modules/postgres/conf/routes

Lines changed: 39 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -3,56 +3,57 @@
33
# ~~~~
44

55
# An example controller showing a sample home page
6-
GET / edu.berkeley.ground.postgres.controllers.HomeController.index
6+
GET / edu.berkeley.ground.postgres.controllers.HomeController.index
77

88
# Map static resources from the /public folder to the /assets URL path
9-
GET /assets/*file controllers.Assets.versioned(path="/public", file: Asset)
9+
GET /assets/*file controllers.Assets.versioned(path="/public", file: Asset)
1010

1111
# edge endpoints
12-
POST /edges edu.berkeley.ground.postgres.controllers.EdgeController.addEdge()
13-
GET /edges/:sourceKey edu.berkeley.ground.postgres.controllers.EdgeController.getEdge(sourceKey: String)
14-
POST /versions/edges edu.berkeley.ground.postgres.controllers.EdgeController.addEdgeVersion()
15-
GET /versions/edges/:id edu.berkeley.ground.postgres.controllers.EdgeController.getEdgeVersion(id: Long)
16-
GET /edges/:sourceKey/latest edu.berkeley.ground.postgres.controllers.EdgeController.getLatest(sourceKey: String)
17-
GET /edges/:sourceKey/history edu.berkeley.ground.postgres.controllers.EdgeController.getHistory(sourceKey: String)
12+
POST /edges edu.berkeley.ground.postgres.controllers.EdgeController.addEdge()
13+
GET /edges/:sourceKey edu.berkeley.ground.postgres.controllers.EdgeController.getEdge(sourceKey: String)
14+
POST /versions/edges edu.berkeley.ground.postgres.controllers.EdgeController.addEdgeVersion()
15+
GET /versions/edges/:id edu.berkeley.ground.postgres.controllers.EdgeController.getEdgeVersion(id: Long)
16+
GET /edges/:sourceKey/latest edu.berkeley.ground.postgres.controllers.EdgeController.getLatest(sourceKey: String)
17+
GET /edges/:sourceKey/history edu.berkeley.ground.postgres.controllers.EdgeController.getHistory(sourceKey: String)
1818

1919
# graph endpoints
20-
POST /graphs edu.berkeley.ground.postgres.controllers.GraphController.addGraph()
21-
GET /graphs/:sourceKey edu.berkeley.ground.postgres.controllers.GraphController.getGraph(sourceKey: String)
22-
POST /versions/graphs edu.berkeley.ground.postgres.controllers.GraphController.addGraphVersion()
23-
GET /versions/graphs/:id edu.berkeley.ground.postgres.controllers.GraphController.getGraphVersion(id: Long)
24-
GET /graphs/:sourceKey/latest edu.berkeley.ground.postgres.controllers.GraphController.getLatest(sourceKey: String)
25-
GET /graphs/:sourceKey/history edu.berkeley.ground.postgres.controllers.GraphController.getHistory(sourceKey: String)
20+
POST /graphs edu.berkeley.ground.postgres.controllers.GraphController.addGraph()
21+
GET /graphs/:sourceKey edu.berkeley.ground.postgres.controllers.GraphController.getGraph(sourceKey: String)
22+
POST /versions/graphs edu.berkeley.ground.postgres.controllers.GraphController.addGraphVersion()
23+
GET /versions/graphs/:id edu.berkeley.ground.postgres.controllers.GraphController.getGraphVersion(id: Long)
24+
GET /graphs/:sourceKey/latest edu.berkeley.ground.postgres.controllers.GraphController.getLatest(sourceKey: String)
25+
GET /graphs/:sourceKey/history edu.berkeley.ground.postgres.controllers.GraphController.getHistory(sourceKey: String)
2626

2727
# lineage edge endpoints
28-
POST /lineage_edges edu.berkeley.ground.postgres.controllers.LineageEdgeController.createLineageEdge()
29-
GET /lineage_edges/:sourceKey edu.berkeley.ground.postgres.controllers.LineageEdgeController.getLineageEdge(sourceKey: String)
30-
POST /versions/lineage_edges edu.berkeley.ground.postgres.controllers.LineageEdgeController.createLineageEdgeVersion()
31-
GET /versions/lineage_edges/:id edu.berkeley.ground.postgres.controllers.LineageEdgeController.getLineageEdgeVersion(id: Long)
32-
GET /lineage_edges/:sourceKey/latest edu.berkeley.ground.postgres.controllers.LineageEdgeController.getLatest(sourceKey: String)
33-
GET /lineage_edges/:sourceKey/history edu.berkeley.ground.postgres.controllers.LineageEdgeController.getHistory(sourceKey: String)
28+
POST /lineage_edges edu.berkeley.ground.postgres.controllers.LineageEdgeController.createLineageEdge()
29+
GET /lineage_edges/:sourceKey edu.berkeley.ground.postgres.controllers.LineageEdgeController.getLineageEdge(sourceKey: String)
30+
POST /versions/lineage_edges edu.berkeley.ground.postgres.controllers.LineageEdgeController.createLineageEdgeVersion()
31+
GET /versions/lineage_edges/:id edu.berkeley.ground.postgres.controllers.LineageEdgeController.getLineageEdgeVersion(id: Long)
32+
GET /lineage_edges/:sourceKey/latest edu.berkeley.ground.postgres.controllers.LineageEdgeController.getLatest(sourceKey: String)
33+
GET /lineage_edges/:sourceKey/history edu.berkeley.ground.postgres.controllers.LineageEdgeController.getHistory(sourceKey: String)
3434

3535
# lineage graph endpoints
36-
POST /lineage_graphs edu.berkeley.ground.postgres.controllers.LineageGraphController.createLineageGraph()
37-
GET /lineage_graphs/:sourceKey edu.berkeley.ground.postgres.controllers.LineageGraphController.getLineageGraph(sourceKey: String)
38-
POST /versions/lineage_graphs edu.berkeley.ground.postgres.controllers.LineageGraphController.createLineageGraphVersion()
39-
GET /versions/lineage_graphs/:id edu.berkeley.ground.postgres.controllers.LineageGraphController.getLineageGraphVersion(id: Long)
40-
GET /lineage_graphs/:sourceKey/latest edu.berkeley.ground.postgres.controllers.LineageGraphController.getLatest(sourceKey: String)
41-
GET /lineage_graphs/:sourceKey/history edu.berkeley.ground.postgres.controllers.LineageGraphController.getHistory(sourceKey: String)
36+
POST /lineage_graphs edu.berkeley.ground.postgres.controllers.LineageGraphController.createLineageGraph()
37+
GET /lineage_graphs/:sourceKey edu.berkeley.ground.postgres.controllers.LineageGraphController.getLineageGraph(sourceKey: String)
38+
POST /versions/lineage_graphs edu.berkeley.ground.postgres.controllers.LineageGraphController.createLineageGraphVersion()
39+
GET /versions/lineage_graphs/:id edu.berkeley.ground.postgres.controllers.LineageGraphController.getLineageGraphVersion(id: Long)
40+
GET /lineage_graphs/:sourceKey/latest edu.berkeley.ground.postgres.controllers.LineageGraphController.getLatest(sourceKey: String)
41+
GET /lineage_graphs/:sourceKey/history edu.berkeley.ground.postgres.controllers.LineageGraphController.getHistory(sourceKey: String)
4242

4343
# node endpoints
44-
POST /nodes edu.berkeley.ground.postgres.controllers.NodeController.addNode()
45-
GET /nodes/:sourceKey edu.berkeley.ground.postgres.controllers.NodeController.getNode(sourceKey: String)
46-
POST /versions/nodes edu.berkeley.ground.postgres.controllers.NodeController.addNodeVersion()
47-
GET /versions/nodes/:id edu.berkeley.ground.postgres.controllers.NodeController.getNodeVersion(id: Long)
48-
GET /nodes/:sourceKey/latest edu.berkeley.ground.postgres.controllers.NodeController.getLatest(sourceKey: String)
49-
GET /nodes/:sourceKey/history edu.berkeley.ground.postgres.controllers.NodeController.getHistory(sourceKey: String)
44+
POST /nodes edu.berkeley.ground.postgres.controllers.NodeController.addNode()
45+
GET /nodes/:sourceKey edu.berkeley.ground.postgres.controllers.NodeController.getNode(sourceKey: String)
46+
POST /versions/nodes edu.berkeley.ground.postgres.controllers.NodeController.addNodeVersion()
47+
GET /versions/nodes/:id edu.berkeley.ground.postgres.controllers.NodeController.getNodeVersion(id: Long)
48+
GET /nodes/:sourceKey/latest edu.berkeley.ground.postgres.controllers.NodeController.getLatest(sourceKey: String)
49+
GET /nodes/:sourceKey/history edu.berkeley.ground.postgres.controllers.NodeController.getHistory(sourceKey: String)
50+
GET /versions/nodes/adjacent/lineage/:id edu.berkeley.ground.postgres.controllers.NodeController.getAdjacentLineage(id: Long)
5051

5152
# structure endpoints
52-
POST /structures edu.berkeley.ground.postgres.controllers.StructureController.addStructure()
53-
GET /structures/:sourceKey edu.berkeley.ground.postgres.controllers.StructureController.getStructure(sourceKey: String)
54-
POST /versions/structures edu.berkeley.ground.postgres.controllers.StructureController.addStructureVersion()
55-
GET /versions/structures/:id edu.berkeley.ground.postgres.controllers.StructureController.getStructureVersion(id: Long)
56-
GET /structures/:sourceKey/latest edu.berkeley.ground.postgres.controllers.StructureController.getLatest(sourceKey: String)
57-
GET /structures/:sourceKey/history edu.berkeley.ground.postgres.controllers.StructureController.getHistory(sourceKey: String)
53+
POST /structures edu.berkeley.ground.postgres.controllers.StructureController.addStructure()
54+
GET /structures/:sourceKey edu.berkeley.ground.postgres.controllers.StructureController.getStructure(sourceKey: String)
55+
POST /versions/structures edu.berkeley.ground.postgres.controllers.StructureController.addStructureVersion()
56+
GET /versions/structures/:id edu.berkeley.ground.postgres.controllers.StructureController.getStructureVersion(id: Long)
57+
GET /structures/:sourceKey/latest edu.berkeley.ground.postgres.controllers.StructureController.getLatest(sourceKey: String)
58+
GET /structures/:sourceKey/history edu.berkeley.ground.postgres.controllers.StructureController.getHistory(sourceKey: String)
5859

0 commit comments

Comments
 (0)