-
Notifications
You must be signed in to change notification settings - Fork 5
/
GraphicElements.java
128 lines (109 loc) · 4.12 KB
/
GraphicElements.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
/*
* © 2021. TU Dortmund University,
* Institute of Energy Systems, Energy Efficiency and Energy Economics,
* Research group Distribution grid planning and operation
*/
package edu.ie3.datamodel.models.input.container;
import edu.ie3.datamodel.models.input.graphics.GraphicInput;
import edu.ie3.datamodel.models.input.graphics.LineGraphicInput;
import edu.ie3.datamodel.models.input.graphics.NodeGraphicInput;
import java.util.*;
import java.util.stream.Collectors;
/** Represents the accumulation of graphic data elements (node graphics, line graphics) */
public class GraphicElements implements InputContainer<GraphicInput> {
private final Set<NodeGraphicInput> nodeGraphics;
private final Set<LineGraphicInput> lineGraphics;
public GraphicElements(Set<NodeGraphicInput> nodeGraphics, Set<LineGraphicInput> lineGraphics) {
this.nodeGraphics = nodeGraphics;
this.lineGraphics = lineGraphics;
}
/**
* Combine different already existing containers
*
* @param graphicElements Already existing containers
*/
public GraphicElements(Collection<GraphicElements> graphicElements) {
this.nodeGraphics =
graphicElements.stream()
.flatMap(graphics -> graphics.nodeGraphics.stream())
.collect(Collectors.toSet());
this.lineGraphics =
graphicElements.stream()
.flatMap(graphics -> graphics.lineGraphics.stream())
.collect(Collectors.toSet());
}
/**
* Create an instance based on a list of {@link GraphicInput} entities that are included in {@link
* GraphicElements}
*
* @param graphics list of grid elements this container instance should created from
*/
public GraphicElements(List<GraphicInput> graphics) {
/* init sets */
this.nodeGraphics =
graphics.parallelStream()
.filter(NodeGraphicInput.class::isInstance)
.map(NodeGraphicInput.class::cast)
.collect(Collectors.toSet());
this.lineGraphics =
graphics.parallelStream()
.filter(LineGraphicInput.class::isInstance)
.map(LineGraphicInput.class::cast)
.collect(Collectors.toSet());
}
@Override
public final List<GraphicInput> allEntitiesAsList() {
List<GraphicInput> allEntities = new LinkedList<>();
allEntities.addAll(nodeGraphics);
allEntities.addAll(lineGraphics);
return Collections.unmodifiableList(allEntities);
}
@Override
public GraphicElementsCopyBuilder copy() {
return new GraphicElementsCopyBuilder(this);
}
/** @return unmodifiable Set of all node graphic data for this grid */
public Set<NodeGraphicInput> getNodeGraphics() {
return Collections.unmodifiableSet(nodeGraphics);
}
/** @return unmodifiable Set of all line graphic data for this grid */
public Set<LineGraphicInput> getLineGraphics() {
return Collections.unmodifiableSet(lineGraphics);
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof GraphicElements that)) return false;
return nodeGraphics.equals(that.nodeGraphics) && lineGraphics.equals(that.lineGraphics);
}
@Override
public int hashCode() {
return Objects.hash(nodeGraphics, lineGraphics);
}
public static class GraphicElementsCopyBuilder
extends InputContainerCopyBuilder<GraphicInput, GraphicElements> {
private Set<NodeGraphicInput> nodeGraphics;
private Set<LineGraphicInput> lineGraphics;
protected GraphicElementsCopyBuilder(GraphicElements container) {
super(container);
this.nodeGraphics = container.getNodeGraphics();
this.lineGraphics = container.getLineGraphics();
}
public GraphicElementsCopyBuilder nodeGraphics(Set<NodeGraphicInput> nodeGraphics) {
this.nodeGraphics = nodeGraphics;
return childInstance();
}
public GraphicElementsCopyBuilder lineGraphics(Set<LineGraphicInput> lineGraphics) {
this.lineGraphics = lineGraphics;
return childInstance();
}
@Override
protected GraphicElementsCopyBuilder childInstance() {
return this;
}
@Override
GraphicElements build() {
return new GraphicElements(nodeGraphics, lineGraphics);
}
}
}