use of com.buschmais.jqassistant.core.report.api.graph.model.SubGraph in project jqa-core-framework by buschmais.
the class SubGraphFactoryTest method nodeAndRelationship.
@Test
public void nodeAndRelationship() throws ReportException {
MapBuilder<String, Object> builder = MapBuilder.builder();
Map<String, Object> nodeProperties = MapBuilder.<String, Object>builder().entry("nodeKey", "value").build();
builder.entry("node", getNeo4jNode(1l, nodeProperties, "Test1", "Test2"));
Map<String, Object> relationshipProperties = MapBuilder.<String, Object>builder().entry("relationshipKey", "value").build();
builder.entry("relation", getNeo4jRelationship(1l, relationshipProperties, "TEST"));
Result<ExecutableRule> result = Result.builder().rows(singletonList(builder.build())).build();
SubGraph graph = factory.createSubGraph(result);
assertThat(graph.getId()).isEqualTo(-1l);
assertThat(graph.getParent()).isNull();
assertThat(graph.getSubGraphs()).isEmpty();
Map<Long, Node> nodes = graph.getNodes();
assertThat(nodes).hasSize(1);
Node node = nodes.get(1l);
assertThat(node.getId()).isEqualTo(1l);
assertThat(node.getLabels()).containsExactly("Test1", "Test2");
assertThat(node.getProperties()).isEqualTo(nodeProperties);
Map<Long, Relationship> relationships = graph.getRelationships();
assertThat(relationships).hasSize(1);
Relationship relationship = relationships.get(1l);
assertThat(relationship.getId()).isEqualTo(1l);
assertThat(relationship.getType()).isEqualTo("TEST");
assertThat(relationship.getProperties()).isEqualTo(relationshipProperties);
}
use of com.buschmais.jqassistant.core.report.api.graph.model.SubGraph in project jqa-core-framework by buschmais.
the class SubGraphFactoryTest method collectionOfNodesAndCollectionOfRelationships.
@Test
public void collectionOfNodesAndCollectionOfRelationships() throws ReportException {
MapBuilder<String, Object> builder = MapBuilder.builder();
builder.entry("nodes", asList(asList(getNeo4jNode(1l), getNeo4jNode(2l))));
builder.entry("relations", asList(asList(getNeo4jRelationship(1l, "TEST"), getNeo4jRelationship(2l, "TEST"))));
Result<ExecutableRule> result = Result.builder().rows(singletonList(builder.build())).build();
SubGraph graph = factory.createSubGraph(result);
assertThat(graph.getId()).isEqualTo(-1l);
assertThat(graph.getParent()).isNull();
assertThat(graph.getSubGraphs()).isEmpty();
Map<Long, Node> nodes = graph.getNodes();
assertThat(nodes).hasSize(2);
Node node1 = nodes.get(1l);
assertThat(node1.getId()).isEqualTo(1l);
Node node2 = nodes.get(2l);
assertThat(node2.getId()).isEqualTo(2l);
Map<Long, Relationship> relationships = graph.getRelationships();
assertThat(relationships).hasSize(2);
Relationship relationship1 = relationships.get(1l);
assertThat(relationship1.getId()).isEqualTo(1l);
Relationship relationship2 = relationships.get(2l);
assertThat(relationship2.getId()).isEqualTo(2l);
}
use of com.buschmais.jqassistant.core.report.api.graph.model.SubGraph in project jqa-core-framework by buschmais.
the class SubGraphFactoryTest method virtualRelationship.
@Test
public void virtualRelationship() throws ReportException {
Map<Object, Object> properties = MapBuilder.builder().entry("key", "value").build();
Map<String, Object> virtualNode = //
MapBuilder.<String, Object>builder().entry("role", //
"relationship").entry("label", //
"Virtual Relationship").entry("type", //
"TEST").entry("properties", //
properties).entry("startNode", //
getNeo4jNode(1l)).entry("endNode", //
getNeo4jNode(2l)).build();
MapBuilder<String, Object> builder = MapBuilder.builder();
builder.entry("relationships", singletonList(virtualNode));
Result<ExecutableRule> result = Result.builder().rows(singletonList(builder.build())).build();
SubGraph graph = factory.createSubGraph(result);
Map<Long, Relationship> relationships = graph.getRelationships();
assertThat(relationships.size()).isEqualTo(1);
Relationship relationship = relationships.get(-1l);
assertThat(relationship).isNotNull();
assertThat(relationship.getId()).isEqualTo(-1l);
assertThat(relationship.getLabel()).isEqualTo("Virtual Relationship");
assertThat(relationship.getType()).isEqualTo("TEST");
assertThat(relationship.getProperties()).isEqualTo(properties);
Node startNode = relationship.getStartNode();
assertThat(startNode).isNotNull();
assertThat(startNode.getId()).isEqualTo(1l);
Node endNode = relationship.getEndNode();
assertThat(endNode).isNotNull();
assertThat(endNode.getId()).isEqualTo(2l);
}
use of com.buschmais.jqassistant.core.report.api.graph.model.SubGraph in project jqa-core-framework by buschmais.
the class SubGraphFactory method toIdentifiable.
/**
* Convert a given value to an {@link Identifiable} element of a
* {@link SubGraph}.
*
* @param value
* The value.
* @return The {@link Identifiable}.
* @throws ReportException
* If value that cannot be converted to an {@link Identifiable}.
*/
public <I extends Identifiable> I toIdentifiable(Object value) throws ReportException {
if (value == null) {
return null;
} else if (value instanceof Map) {
Map<String, Object> virtualObject = (Map) value;
Object role = virtualObject.get(ROLE);
if (role != null) {
Map<String, Object> properties = (Map<String, Object>) virtualObject.get(PROPERTIES);
switch(role.toString().toLowerCase()) {
case NODE:
Node node = new Node();
node.setId(nodeId--);
Collection<String> labels = (Collection<String>) virtualObject.get(LABELS);
node.getLabels().addAll(labels);
node.getProperties().putAll(properties);
node.setLabel((String) virtualObject.get(LABEL));
return (I) node;
case RELATIONSHIP:
Relationship relationship = new Relationship();
relationship.setId(relationshipId--);
Node startNode = toIdentifiable(virtualObject.get(START_NODE));
Node endNode = toIdentifiable(virtualObject.get(END_NODE));
String type = (String) virtualObject.get(TYPE);
relationship.setType(type);
relationship.setStartNode(startNode);
relationship.setEndNode(endNode);
relationship.getProperties().putAll(properties);
relationship.setLabel((String) virtualObject.get(LABEL));
if (startNode == null || endNode == null || type == null) {
throw new ReportException("The virtual relationship does not contain either start node, end node or type: " + relationship);
}
return (I) relationship;
case GRAPH:
SubGraph subgraph = new SubGraph();
subgraph.setId(subgraphId--);
Node parent = toIdentifiable(virtualObject.get(PARENT));
subgraph.setParent(parent);
subgraph.setLabel((String) virtualObject.get(LABEL));
addToValueGraph(subgraph, virtualObject.get(NODES));
addToValueGraph(subgraph, virtualObject.get(RELATIONSHIPS));
return (I) subgraph;
}
}
} else if (value instanceof CompositeObject) {
CompositeObject compositeObject = (CompositeObject) value;
Identifiable identifiable = toIdentifiable(compositeObject.getDelegate());
identifiable.setLabel(ReportHelper.getLabel(value));
return (I) identifiable;
} else if (value instanceof Neo4jNode) {
Neo4jNode<Neo4jLabel, ?, ?, ?> neo4jNode = (Neo4jNode<Neo4jLabel, ?, ?, ?>) value;
Node node = new Node();
node.setId(neo4jNode.getId());
for (Neo4jLabel label : neo4jNode.getLabels()) {
node.getLabels().add(label.getName());
}
node.getProperties().putAll(neo4jNode.getProperties());
return (I) node;
} else if (value instanceof Neo4jRelationship) {
Neo4jRelationship<?, ?, ?, ?, ?> neo4jRelationship = (Neo4jRelationship) value;
Relationship relationship = new Relationship();
relationship.setId(neo4jRelationship.getId());
relationship.setType(neo4jRelationship.getType().getName());
relationship.setStartNode(toIdentifiable(neo4jRelationship.getStartNode()));
relationship.setEndNode(toIdentifiable(neo4jRelationship.getEndNode()));
relationship.getProperties().putAll(neo4jRelationship.getProperties());
return (I) relationship;
}
throw new ReportException("Element type not supported: " + value);
}
Aggregations