use of com.runwaysdk.business.graph.GraphQuery in project geoprism-registry by terraframe.
the class DirectedAcyclicGraphStrategy method isCycle.
private boolean isCycle(VertexServerGeoObject geoObject, VertexServerGeoObject parent, Date startDate, Date endDate) {
// SELECT count(*) FROM (MATCH {class: fastp_rovince0, where: (@rid =
// #355:29)}.(inE("test_dag")
// {where: (startDate = date('2020-04-04', 'yyyy-MM-dd'))}.outV())
// {as: friend, while: ($depth < 3)} RETURN friend.code AS code) WHERE code
// = "FASTCentralProvince"
// SELECT COUNT(*) FROM ( MATCH {class: fastp_rovince0, where: (@rid =
// :rid)}.(outE('test_dag')
// {where: (:startDate BETWEEN startDate AND endDate OR :endDate BETWEEN
// startDate AND endDate)}.inV())
// {as: friend, while: true} RETURN friend.code AS code) WHERE code = :code
VertexObject vertex = geoObject.getVertex();
StringBuffer statement = new StringBuffer();
statement.append("SELECT count(*) FROM (");
statement.append("MATCH {class: " + geoObject.getType().getMdVertex().getDBClassName() + ", where: (@rid = :rid)}.(outE('" + this.type.getMdEdgeDAO().getDBClassName() + "')");
statement.append(" {where: (:startDate BETWEEN startDate AND endDate OR :endDate BETWEEN startDate AND endDate)}.inV())");
statement.append(" {as: friend, while: ($depth < 10000)} RETURN friend.code AS code");
statement.append(")");
statement.append(" WHERE code = :code");
GraphQuery<Long> query = new GraphQuery<Long>(statement.toString());
query.setParameter("rid", vertex.getRID());
query.setParameter("startDate", startDate);
query.setParameter("endDate", endDate);
query.setParameter("code", parent.getCode());
Long count = query.getSingleResult();
return (count != null && count > 0);
}
use of com.runwaysdk.business.graph.GraphQuery in project geoprism-registry by terraframe.
the class ServerHierarchyStrategy method getChildren.
@SuppressWarnings("unchecked")
@Override
public ServerChildGraphNode getChildren(VertexServerGeoObject parent, Boolean recursive, Date date) {
ServerChildGraphNode tnRoot = new ServerChildGraphNode(parent, this.hierarchy, date, null, null);
Map<String, Object> parameters = new HashedMap<String, Object>();
parameters.put("rid", parent.getVertex().getRID());
StringBuilder statement = new StringBuilder();
statement.append("SELECT EXPAND( outE(");
statement.append("'" + this.hierarchy.getMdEdge().getDBClassName() + "'");
statement.append(")");
if (date != null) {
statement.append("[:date BETWEEN startDate AND endDate]");
parameters.put("date", date);
}
statement.append(") FROM :rid");
GraphQuery<EdgeObject> query = new GraphQuery<EdgeObject>(statement.toString(), parameters);
List<EdgeObject> edges = query.getResults();
for (EdgeObject edge : edges) {
final VertexObject childVertex = edge.getChild();
MdVertexDAOIF mdVertex = (MdVertexDAOIF) childVertex.getMdClass();
ServerGeoObjectType childType = ServerGeoObjectType.get(mdVertex);
VertexServerGeoObject child = new VertexServerGeoObject(childType, childVertex, date);
ServerChildGraphNode tnParent;
if (recursive) {
tnParent = this.getChildren(child, recursive, date);
tnParent.setOid(edge.getOid());
} else {
tnParent = new ServerChildGraphNode(child, this.hierarchy, date, null, edge.getOid());
}
tnRoot.addChild(tnParent);
}
return tnRoot;
}
use of com.runwaysdk.business.graph.GraphQuery in project geoprism-registry by terraframe.
the class VertexServerGeoObject method getEdges.
public SortedSet<EdgeObject> getEdges(ServerHierarchyType hierarchyType) {
TreeSet<EdgeObject> set = new TreeSet<EdgeObject>(new EdgeComparator());
String statement = "SELECT expand(inE('" + hierarchyType.getMdEdge().getDBClassName() + "'))";
statement += " FROM :child";
GraphQuery<EdgeObject> query = new GraphQuery<EdgeObject>(statement);
query.setParameter("child", this.getVertex().getRID());
set.addAll(query.getResults());
return set;
}
use of com.runwaysdk.business.graph.GraphQuery in project geoprism-registry by terraframe.
the class VertexServerGeoObject method findTypeOfGeoObjectCode.
/**
* Finds the ServerGeoObjectType associated with the particular Geo-Object
* code.
*
* @return
*/
public static ServerGeoObjectType findTypeOfGeoObjectCode(String code) {
StringBuilder statement = new StringBuilder();
statement.append("SELECT @class FROM geo_vertex WHERE code=:code");
GraphQuery<String> query = new GraphQuery<String>(statement.toString());
query.setParameter("code", code);
String className = query.getSingleResult();
MdVertexQuery mvq = new MdVertexQuery(new QueryFactory());
mvq.WHERE(mvq.getDbClassName().EQ(className));
MdVertex mdVertex = mvq.getIterator().getAll().get(0);
ServerGeoObjectType foundType = ServerGeoObjectType.get(MdGeoVertexDAO.get(mdVertex.getOid()));
return foundType;
}
use of com.runwaysdk.business.graph.GraphQuery in project geoprism-registry by terraframe.
the class VertexServerGeoObject method internalGetParentGeoObjects.
protected static ServerParentTreeNode internalGetParentGeoObjects(VertexServerGeoObject child, String[] parentTypes, boolean recursive, ServerHierarchyType htIn, Date date) {
ServerParentTreeNode tnRoot = new ServerParentTreeNode(child, htIn, date, null, null);
Map<String, Object> parameters = new HashedMap<String, Object>();
parameters.put("rid", child.getVertex().getRID());
StringBuilder statement = new StringBuilder();
statement.append("SELECT EXPAND( inE(");
if (htIn != null) {
statement.append("'" + htIn.getMdEdge().getDBClassName() + "'");
}
statement.append(")");
if (date != null || (parentTypes != null && parentTypes.length > 0)) {
statement.append("[");
if (date != null) {
statement.append(" :date BETWEEN startDate AND endDate");
parameters.put("date", date);
}
if (parentTypes != null && parentTypes.length > 0) {
if (date != null) {
statement.append(" AND");
}
statement.append("(");
for (int i = 0; i < parentTypes.length; i++) {
ServerGeoObjectType type = ServerGeoObjectType.get(parentTypes[i]);
final String paramName = "p" + Integer.toString(i);
if (i > 0) {
statement.append(" OR ");
}
statement.append("out.@class = :" + paramName);
parameters.put(paramName, type.getMdVertex().getDBClassName());
}
statement.append(")");
}
statement.append("]");
}
statement.append(") FROM :rid");
GraphQuery<EdgeObject> query = new GraphQuery<EdgeObject>(statement.toString(), parameters);
List<EdgeObject> edges = query.getResults();
for (EdgeObject edge : edges) {
MdEdgeDAOIF mdEdge = (MdEdgeDAOIF) edge.getMdClass();
if (HierarchicalRelationshipType.isEdgeAHierarchyType(mdEdge)) {
final VertexObject parentVertex = edge.getParent();
MdVertexDAOIF mdVertex = (MdVertexDAOIF) parentVertex.getMdClass();
ServerHierarchyType ht = ServerHierarchyType.get(mdEdge);
ServerGeoObjectType parentType = ServerGeoObjectType.get(mdVertex);
VertexServerGeoObject parent = new VertexServerGeoObject(parentType, parentVertex, date);
ServerParentTreeNode tnParent;
if (recursive) {
tnParent = internalGetParentGeoObjects(parent, parentTypes, recursive, ht, date);
} else {
tnParent = new ServerParentTreeNode(parent, ht, date, null, edge.getOid());
}
tnRoot.addParent(tnParent);
}
}
return tnRoot;
}
Aggregations