|
1 |
package cz.zcu.kiv.imiger.plugin.dot;
|
|
2 |
|
|
3 |
import cz.zcu.kiv.imiger.plugin.dot.dto.EdgeDTO;
|
|
4 |
import cz.zcu.kiv.imiger.plugin.dot.dto.VertexDTO;
|
|
5 |
import cz.zcu.kiv.imiger.plugin.dot.loader.BaseDOTLoader;
|
|
6 |
import cz.zcu.kiv.imiger.vo.*;
|
|
7 |
|
|
8 |
import java.util.*;
|
|
9 |
|
|
10 |
/**
|
|
11 |
* Date: 31.03.2019
|
|
12 |
*
|
|
13 |
* @author Martin Matas
|
|
14 |
*/
|
|
15 |
public class GraphFactory extends BaseGraphFactory<VertexDTO, EdgeDTO> {
|
|
16 |
|
|
17 |
private static final String EDGE_ARCHETYPE_NAME = "Edge";
|
|
18 |
private static final String VERTEX_ARCHETYPE_NAME = "Vertex";
|
|
19 |
private static final String ARCHETYPE_TEXT = "";
|
|
20 |
private static final int DEFAULT_ARCHETYPE_INDEX = 0;
|
|
21 |
|
|
22 |
public GraphFactory(BaseDOTLoader<VertexDTO,EdgeDTO> dotLoader) {
|
|
23 |
super(dotLoader);
|
|
24 |
vertices = new ArrayList<>();
|
|
25 |
edges = new ArrayList<>();
|
|
26 |
attributeTypes = new ArrayList<>();
|
|
27 |
prepareEdgeArchetypes();
|
|
28 |
prepareVertexArchetypes();
|
|
29 |
}
|
|
30 |
|
|
31 |
@Override
|
|
32 |
protected void loadData(BaseDOTLoader<VertexDTO,EdgeDTO> dotLoader) {
|
|
33 |
List<VertexDTO> loadedVertices = dotLoader.getVertices();
|
|
34 |
List<EdgeDTO> loadedEdges = dotLoader.getEdges();
|
|
35 |
Set<AttributeType> loadedAttributeTypes = dotLoader.getAttributeTypes();
|
|
36 |
|
|
37 |
if (loadedVertices != null) {
|
|
38 |
vertices = new ArrayList<>(loadedVertices);
|
|
39 |
}
|
|
40 |
|
|
41 |
if (loadedVertices != null) {
|
|
42 |
edges = new ArrayList<>(loadedEdges);
|
|
43 |
}
|
|
44 |
|
|
45 |
if (loadedVertices != null) {
|
|
46 |
attributeTypes = new ArrayList<>(loadedAttributeTypes);
|
|
47 |
}
|
|
48 |
}
|
|
49 |
|
|
50 |
@Override
|
|
51 |
public Graph createGraph() {
|
|
52 |
Graph graph = new Graph();
|
|
53 |
|
|
54 |
graph.setEdgeArchetypes(edgeArchetypes);
|
|
55 |
graph.setVertexArchetypes(vertexArchetypes);
|
|
56 |
graph.setAttributeTypes(attributeTypes);
|
|
57 |
addEdgesToGraph(graph, edges);
|
|
58 |
addVerticesToGraph(graph, vertices);
|
|
59 |
|
|
60 |
return graph;
|
|
61 |
}
|
|
62 |
|
|
63 |
private void addVerticesToGraph(Graph graph, List<VertexDTO> vertices) {
|
|
64 |
for (VertexDTO v : vertices) {
|
|
65 |
|
|
66 |
List<String[]> attributes = new ArrayList<>();
|
|
67 |
attributes.add((String[]) v.getAttributes().values().toArray());
|
|
68 |
Vertex vertex = new Vertex(v.getId(), v.getName(), DEFAULT_ARCHETYPE_INDEX, "", attributes);
|
|
69 |
graph.getVertices().add(vertex);
|
|
70 |
}
|
|
71 |
}
|
|
72 |
|
|
73 |
private void addEdgesToGraph(Graph graph, List<EdgeDTO> edges) {
|
|
74 |
for (EdgeDTO e : edges) {
|
|
75 |
|
|
76 |
List<String[]> attributes = new ArrayList<>();
|
|
77 |
attributes.add((String[]) e.getAttributes().values().toArray());
|
|
78 |
SubedgeInfo subedgeInfo = new SubedgeInfo(e.getId(), DEFAULT_ARCHETYPE_INDEX, attributes);
|
|
79 |
|
|
80 |
List<SubedgeInfo> subedgeInfos = new ArrayList<>();
|
|
81 |
subedgeInfos.add(subedgeInfo);
|
|
82 |
|
|
83 |
Edge eddge = new Edge(e.getId(), e.getIdFrom(), e.getIdTo(), e.getName(), subedgeInfos);
|
|
84 |
graph.getEdges().add(eddge);
|
|
85 |
}
|
|
86 |
}
|
|
87 |
|
|
88 |
private void prepareEdgeArchetypes() {
|
|
89 |
edgeArchetypes= new ArrayList<>();
|
|
90 |
edgeArchetypes.add(new EdgeArchetype(EDGE_ARCHETYPE_NAME, ARCHETYPE_TEXT));
|
|
91 |
}
|
|
92 |
|
|
93 |
private void prepareVertexArchetypes() {
|
|
94 |
vertexArchetypes = new ArrayList<>();
|
|
95 |
vertexArchetypes.add(new VertexArchetype(VERTEX_ARCHETYPE_NAME, ARCHETYPE_TEXT));
|
|
96 |
}
|
|
97 |
|
|
98 |
}
|
Introduced GraphFactory
Class prepares instance of Graph from data loaded by BaseDOTLoader