use of com.runwaysdk.business.graph.VertexObject 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;
}
use of com.runwaysdk.business.graph.VertexObject in project geoprism-registry by terraframe.
the class VertexServerGeoObject method toGeoObjectOverTime.
public GeoObjectOverTime toGeoObjectOverTime(boolean generateUid) {
Map<String, ValueOverTimeCollectionDTO> votAttributeMap = GeoObjectOverTime.buildVotAttributeMap(type.getType());
Map<String, Attribute> attributeMap = GeoObjectOverTime.buildAttributeMap(type.getType());
GeoObjectOverTime geoObj = new GeoObjectOverTime(type.getType(), votAttributeMap, attributeMap);
Map<String, AttributeType> attributes = type.getAttributeMap();
attributes.forEach((attributeName, attribute) -> {
if (attributeName.equals(DefaultAttribute.DISPLAY_LABEL.getName())) {
ValueOverTimeCollection votc = this.getValuesOverTime(attributeName);
ValueOverTimeCollectionDTO votcDTO = new ValueOverTimeCollectionDTO(attribute);
for (ValueOverTime vot : votc) {
Object value = this.getDisplayLabel(vot.getStartDate());
ValueOverTimeDTO votDTO = new ValueOverTimeDTO(vot.getOid(), vot.getStartDate(), vot.getEndDate(), votcDTO);
votDTO.setValue(value);
votcDTO.add(votDTO);
}
geoObj.setValueCollection(attributeName, votcDTO);
} else // }
if (vertex.hasAttribute(attributeName)) {
if (attribute.isChangeOverTime()) {
ValueOverTimeCollection votc = this.getValuesOverTime(attributeName);
ValueOverTimeCollectionDTO votcDTO = new ValueOverTimeCollectionDTO(attribute);
for (ValueOverTime vot : votc) {
// if (attributeName.equals(DefaultAttribute.STATUS.getName()))
// {
// Term statusTerm =
// ServiceFactory.getConversionService().geoObjectStatusToTerm(this.getStatus(vot.getStartDate()));
//
// ValueOverTimeDTO votDTO = new ValueOverTimeDTO(vot.getOid(),
// vot.getStartDate(), vot.getEndDate(), votcDTO);
// votDTO.setValue(statusTerm.getCode());
// votcDTO.add(votDTO);
// }
// else
// {
Object value = vot.getValue();
if (value != null) {
if (attribute instanceof AttributeTermType) {
Classifier classifier = Classifier.get((String) value);
try {
ValueOverTimeDTO votDTO = new ValueOverTimeDTO(vot.getOid(), vot.getStartDate(), vot.getEndDate(), votcDTO);
votDTO.setValue(classifier.getClassifierId());
votcDTO.add(votDTO);
} catch (UnknownTermException e) {
TermValueException ex = new TermValueException();
ex.setAttributeLabel(e.getAttribute().getLabel().getValue());
ex.setCode(e.getCode());
throw e;
}
} else if (attribute instanceof AttributeClassificationType) {
String classificationTypeCode = ((AttributeClassificationType) attribute).getClassificationType();
ClassificationType classificationType = ClassificationType.getByCode(classificationTypeCode);
Classification classification = Classification.getByOid(classificationType, (String) value);
try {
ValueOverTimeDTO votDTO = new ValueOverTimeDTO(vot.getOid(), vot.getStartDate(), vot.getEndDate(), votcDTO);
votDTO.setValue(classification.toTerm());
votcDTO.add(votDTO);
} catch (UnknownTermException e) {
TermValueException ex = new TermValueException();
ex.setAttributeLabel(e.getAttribute().getLabel().getValue());
ex.setCode(e.getCode());
throw e;
}
} else {
ValueOverTimeDTO votDTO = new ValueOverTimeDTO(vot.getOid(), vot.getStartDate(), vot.getEndDate(), votcDTO);
votDTO.setValue(value);
votcDTO.add(votDTO);
}
}
// }
}
geoObj.setValueCollection(attributeName, votcDTO);
} else {
Object value = this.getValue(attributeName);
if (value != null) {
if (attribute instanceof AttributeTermType) {
Classifier classifier = Classifier.get((String) value);
try {
geoObj.setValue(attributeName, classifier.getClassifierId());
} catch (UnknownTermException e) {
TermValueException ex = new TermValueException();
ex.setAttributeLabel(e.getAttribute().getLabel().getValue());
ex.setCode(e.getCode());
throw e;
}
} else if (attribute instanceof AttributeClassificationType) {
String classificationType = ((AttributeClassificationType) attribute).getClassificationType();
MdClassificationDAOIF mdClassificationDAO = MdClassificationDAO.getMdClassificationDAO(classificationType);
MdVertexDAOIF mdVertexDAO = mdClassificationDAO.getReferenceMdVertexDAO();
VertexObject classification = VertexObject.get(mdVertexDAO, (String) value);
try {
geoObj.setValue(attributeName, classification.getObjectValue(AbstractClassification.CODE));
} catch (UnknownTermException e) {
TermValueException ex = new TermValueException();
ex.setAttributeLabel(e.getAttribute().getLabel().getValue());
ex.setCode(e.getCode());
throw e;
}
} else {
geoObj.setValue(attributeName, value);
}
}
}
}
});
if (// && !vertex.isAppliedToDB())
generateUid && vertex.isNew()) {
geoObj.setUid(RegistryIdService.getInstance().next());
// geoObj.setStatus(ServiceFactory.getAdapter().getMetadataCache().getTerm(DefaultTerms.GeoObjectStatusTerm.NEW.code).get(),
// this.date, this.date);
} else {
geoObj.setUid(vertex.getObjectValue(RegistryConstants.UUID));
}
ValueOverTimeCollection votc = this.getValuesOverTime(this.getGeometryAttributeName());
ValueOverTimeCollectionDTO votcDTO = new ValueOverTimeCollectionDTO(geoObj.getGeometryAttributeType());
for (ValueOverTime vot : votc) {
Object value = vot.getValue();
ValueOverTimeDTO votDTO = new ValueOverTimeDTO(vot.getOid(), vot.getStartDate(), vot.getEndDate(), votcDTO);
votDTO.setValue(value);
votcDTO.add(votDTO);
}
geoObj.setValueCollection(DefaultAttribute.GEOMETRY.getName(), votcDTO);
geoObj.setCode(vertex.getObjectValue(DefaultAttribute.CODE.getName()));
return geoObj;
}
use of com.runwaysdk.business.graph.VertexObject in project geoprism-registry by terraframe.
the class VertexServerGeoObject method setParentCollection.
public SortedSet<EdgeObject> setParentCollection(ServerHierarchyType hierarchyType, ValueOverTimeCollection votc) {
SortedSet<EdgeObject> newEdges = new TreeSet<EdgeObject>(new EdgeComparator());
SortedSet<EdgeObject> edges = this.getEdges(hierarchyType);
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 = this.getVertex().addParent(inGo.getVertex(), hierarchyType.getMdEdge());
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 = this.getVertex().addParent(((VertexServerGeoObject) vot.getValue()).getVertex(), hierarchyType.getMdEdge());
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.VertexObject in project geoprism-registry by terraframe.
the class BasicVertexQuery method getResults.
public List<ServerGeoObjectIF> getResults() {
List<ServerGeoObjectIF> list = new LinkedList<ServerGeoObjectIF>();
GraphQuery<VertexObject> query = this.getQuery();
List<VertexObject> results = query.getResults();
for (VertexObject result : results) {
list.add(new VertexServerGeoObject(type, result, this.date));
}
return list;
}
use of com.runwaysdk.business.graph.VertexObject in project geoprism-registry by terraframe.
the class BasicVertexQuery method getSingleResult.
public ServerGeoObjectIF getSingleResult() {
GraphQuery<VertexObject> query = this.getQuery();
VertexObject vertex = query.getSingleResult();
if (vertex != null) {
return new VertexServerGeoObject(type, vertex, this.date);
}
return null;
}
Aggregations