use of com.runwaysdk.business.graph.EdgeObject in project geoprism-registry by terraframe.
the class UpdateParentView method validateValuesOverTime.
public void validateValuesOverTime(SortedSet<EdgeObject> votc) {
for (EdgeObject edge : votc) {
Date startDate = edge.getObjectValue(GeoVertex.START_DATE);
Date endDate = edge.getObjectValue(GeoVertex.END_DATE);
if (startDate == null) {
throw new InvalidChangeRequestException();
}
if (endDate == null) {
edge.setValue(GeoVertex.END_DATE, ValueOverTime.INFINITY_END_DATE);
}
if (startDate.after(endDate)) {
throw new InvalidChangeRequestException();
}
}
for (EdgeObject edge : votc) {
Date s1 = edge.getObjectValue(GeoVertex.START_DATE);
Date e1 = edge.getObjectValue(GeoVertex.END_DATE);
for (EdgeObject edge2 : votc) {
if (edge != edge2) {
Date s2 = edge2.getObjectValue(GeoVertex.START_DATE);
Date e2 = edge2.getObjectValue(GeoVertex.END_DATE);
if (this.dateRangeOverlaps(s1.getTime(), e1.getTime(), s2.getTime(), e2.getTime())) {
throw new InvalidChangeRequestException();
}
}
}
}
}
use of com.runwaysdk.business.graph.EdgeObject in project geoprism-registry by terraframe.
the class Classification method addParent.
@Transaction
public void addParent(Classification parent) {
if (this.getVertex().isNew() || !this.exists(parent)) {
EdgeObject edge = this.getVertex().addParent(parent.getVertex(), this.type.getMdEdge());
edge.apply();
}
}
use of com.runwaysdk.business.graph.EdgeObject in project geoprism-registry by terraframe.
the class DirectedAcyclicGraphStrategy method addParent.
@SuppressWarnings("unchecked")
@Override
public ServerParentGraphNode addParent(VertexServerGeoObject geoObject, VertexServerGeoObject parent, Date startDate, Date endDate) {
GraphValidationService.validate(type, parent, parent);
if (this.isCycle(geoObject, parent, startDate, endDate)) {
throw new UnsupportedOperationException("Cannot add a cycle");
}
if (this.getParentEdges(geoObject, parent, startDate, endDate).size() > 0) {
throw new UnsupportedOperationException("Duplicate edge");
}
Set<ValueOverTime> votc = this.getParentCollection(geoObject);
votc.add(new ValueOverTime(startDate, endDate, parent));
SortedSet<EdgeObject> newEdges = this.setParentCollection(geoObject, votc);
ServerParentGraphNode node = new ServerParentGraphNode(geoObject, this.type, startDate, endDate, null);
node.addParent(new ServerParentGraphNode(parent, this.type, startDate, endDate, newEdges.first().getOid()));
return node;
}
use of com.runwaysdk.business.graph.EdgeObject in project geoprism-registry by terraframe.
the class DirectedAcyclicGraphStrategy method setParentCollection.
private SortedSet<EdgeObject> setParentCollection(VertexServerGeoObject geoObject, Set<ValueOverTime> votc) {
SortedSet<EdgeObject> newEdges = new TreeSet<EdgeObject>(new EdgeComparator());
SortedSet<EdgeObject> edges = this.getParentEdges(geoObject);
for (EdgeObject edge : edges) {
final Date startDate = edge.getObjectValue(GeoVertex.START_DATE);
final Date endDate = edge.getObjectValue(GeoVertex.END_DATE);
VertexObject parentVertex = edge.getParent();
MdVertexDAOIF mdVertex = (MdVertexDAOIF) parentVertex.getMdClass();
ServerGeoObjectType parentType = ServerGeoObjectType.get(mdVertex);
final VertexServerGeoObject edgeGo = new VertexServerGeoObject(parentType, parentVertex, startDate);
ValueOverTime inVot = null;
for (ValueOverTime vot : votc) {
if (vot.getOid() == edge.getOid()) {
inVot = vot;
break;
}
}
if (inVot == null) {
edge.delete();
} else {
VertexServerGeoObject inGo = (VertexServerGeoObject) inVot.getValue();
boolean hasValueChange = false;
if ((inGo == null && edgeGo != null) || (inGo != null && edgeGo == null)) {
hasValueChange = true;
} else if ((inGo != null && edgeGo != null) && !inGo.equals(edgeGo)) {
hasValueChange = true;
}
if (hasValueChange) {
edge.delete();
EdgeObject newEdge = geoObject.getVertex().addParent(inGo.getVertex(), this.type.getMdEdgeDAO());
newEdge.setValue(GeoVertex.START_DATE, startDate);
newEdge.setValue(GeoVertex.END_DATE, endDate);
newEdge.apply();
newEdges.add(newEdge);
} else {
boolean hasChanges = false;
if (startDate != inVot.getStartDate()) {
hasChanges = true;
edge.setValue(GeoVertex.START_DATE, startDate);
}
if (endDate != inVot.getEndDate()) {
hasChanges = true;
edge.setValue(GeoVertex.END_DATE, endDate);
}
if (hasChanges) {
edge.apply();
}
}
}
}
for (ValueOverTime vot : votc) {
boolean isNew = true;
for (EdgeObject edge : edges) {
if (vot.getOid() == edge.getOid()) {
isNew = false;
}
}
if (isNew) {
EdgeObject newEdge = geoObject.getVertex().addParent(((VertexServerGeoObject) vot.getValue()).getVertex(), this.type.getMdEdgeDAO());
newEdge.setValue(GeoVertex.START_DATE, vot.getStartDate());
newEdge.setValue(GeoVertex.END_DATE, vot.getEndDate());
newEdge.apply();
newEdges.add(newEdge);
}
}
return newEdges;
}
use of com.runwaysdk.business.graph.EdgeObject 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;
}
Aggregations