Skip to content

Commit 5f57cc7

Browse files
committed
Enforcing specific fields. Updating the test grid.
1 parent 349f878 commit 5f57cc7

File tree

13 files changed

+587
-659
lines changed

13 files changed

+587
-659
lines changed

CHANGELOG.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77
## [Unreleased/Snapshot]
88

99
### Added
10-
- Added check for replaced field names in sources [#1383](https://github.com/ie3-institute/PowerSystemDataModel/issues/1383)
10+
- Enhanced check for invalid field names in sources [#1383](https://github.com/ie3-institute/PowerSystemDataModel/issues/1383)
1111

1212
### Fixed
1313

src/main/java/edu/ie3/datamodel/io/factory/Factory.java

Lines changed: 2 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -111,36 +111,24 @@ private void isSupportedClass(Class<?> desiredClass) {
111111
*/
112112
protected abstract List<Set<String>> getFields(Class<?> entityClass);
113113

114-
/**
115-
* Returns a map: old field name to new field name.
116-
*
117-
* @param entityClass class that can be used to specify the fields that are returned
118-
* @return map of replaced field names
119-
*/
120-
protected Map<String, String> getReplacedFields(Class<?> entityClass) {
121-
return Collections.emptyMap();
122-
}
123-
124114
/**
125115
* Method to find and return additional fields that were found in a source and are not used by the
126116
* data model. This method will return the minimal unused fields among all field sets, meaning
127117
* that the set of actual fields is compared to the field set with the least unused fields.
128118
*
129119
* @param actualFields found in the source
130120
* @param validFieldSets that contains at least all fields found in the source
131-
* @param replacedFields fields, that are replaced and therefore, reported as unused
132121
* @return a set of unused fields
133122
*/
134123
protected Set<String> getUnusedFields(
135-
Set<String> actualFields, List<Set<String>> validFieldSets, Set<String> replacedFields) {
124+
Set<String> actualFields, List<Set<String>> validFieldSets) {
136125
// checking for additional fields
137126
// and returning the set with the least additional fields
138127
return validFieldSets.stream()
139128
.map(
140129
s -> {
141130
Set<String> set = new HashSet<>(actualFields);
142131
set.removeAll(s);
143-
set.removeAll(replacedFields);
144132
return set;
145133
})
146134
.min(Comparator.comparing(Collection::size))
@@ -186,27 +174,8 @@ public Try<Void, ValidationException> validate(
186174
+ "' are possible (NOT case-sensitive!):\n"
187175
+ possibleOptions));
188176
} else {
189-
// find all replaced fields
190-
Map<String, String> replacedFields = getReplacedFields(entityClass);
191-
192-
Set<String> unsupportedFields =
193-
actualFields.stream().filter(replacedFields::containsKey).collect(Collectors.toSet());
194-
195-
if (!unsupportedFields.isEmpty()) {
196-
List<String> strings =
197-
unsupportedFields.stream()
198-
.map(field -> field + " -> " + replacedFields.get(field))
199-
.toList();
200-
201-
log.warn(
202-
"The following field were renamed '{}'. Please rename field like: [{}]",
203-
unsupportedFields,
204-
String.join(", ", strings));
205-
}
206-
207177
// find all unused fields
208-
Set<String> unused =
209-
getUnusedFields(harmonizedActualFields, validFieldSets, replacedFields.keySet());
178+
Set<String> unused = getUnusedFields(harmonizedActualFields, validFieldSets);
210179

211180
if (!unused.isEmpty()) {
212181
log.info(
@@ -248,17 +217,6 @@ protected static TreeSet<String> newSet(String... attributes) {
248217
return set;
249218
}
250219

251-
protected static Map.Entry<String, String> entry(String key, String value) {
252-
return new AbstractMap.SimpleEntry<>(key, value);
253-
}
254-
255-
@SafeVarargs
256-
protected static Map<String, String> newMap(Map.Entry<String, String>... attributes) {
257-
Map<String, String> map = new HashMap<>();
258-
Arrays.stream(attributes).forEach(e -> map.put(e.getKey(), e.getValue()));
259-
return map;
260-
}
261-
262220
/**
263221
* Expands a set of attributes with further attributes. This method should always be used when
264222
* returning attribute sets, i.e. through getting the needed fields. The set maintains a

src/main/java/edu/ie3/datamodel/io/factory/input/EmInputFactory.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,4 @@ protected EmInput buildModel(
3838

3939
return new EmInput(uuid, id, operator, operationTime, controlStrategy, parentEm);
4040
}
41-
42-
@Override
43-
protected Map<String, String> getReplacedFields(Class<?> entityClass) {
44-
return newMap(entry("parentEm", CONTROLLING_EM));
45-
}
4641
}

src/main/java/edu/ie3/datamodel/io/factory/input/participant/SystemParticipantInputEntityFactory.java

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -44,24 +44,16 @@ protected SystemParticipantInputEntityFactory(Class<? extends T>... allowedClass
4444
@Override
4545
protected List<Set<String>> getFields(Class<?> entityClass) {
4646
List<Set<String>> fields = new ArrayList<>(super.getFields(entityClass));
47+
4748
for (Set<String> set : fields) {
4849
set.add(Q_CHARACTERISTICS);
4950
set.add(NODE);
51+
set.add(CONTROLLING_EM);
5052
}
5153

52-
List<Set<String>> withEm =
53-
fields.stream().map(f -> (Set<String>) expandSet(f, CONTROLLING_EM)).toList();
54-
55-
fields.addAll(withEm);
56-
5754
return fields;
5855
}
5956

60-
@Override
61-
protected Map<String, String> getReplacedFields(Class<?> entityClass) {
62-
return newMap(entry("em", CONTROLLING_EM));
63-
}
64-
6557
@Override
6658
protected T buildModel(
6759
D data, UUID uuid, String id, OperatorInput operator, OperationTime operationTime) {

src/test/groovy/edu/ie3/datamodel/io/factory/FactoryTest.groovy

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ class FactoryTest extends Specification {
1818

1919
def "A Factory can return unused fields correctly"() {
2020
when:
21-
def unused = factory.getUnusedFields(actualFields as Set<String>, validFieldSets, [] as Set<String>)
21+
def unused = factory.getUnusedFields(actualFields as Set<String>, validFieldSets)
2222

2323
then:
2424
unused == expected as Set<String>
@@ -98,14 +98,5 @@ class FactoryTest extends Specification {
9898
["id", "time", "value1"] as Set<String>
9999
]
100100
}
101-
102-
@Override
103-
protected Map<String, String> getReplacedFields(Class<?> entityClass) {
104-
if (entityClass.isAssignableFrom(EmInput)) {
105-
return ["parentEm": "controllingEM"]
106-
} else {
107-
return [:]
108-
}
109-
}
110101
}
111102
}

src/test/groovy/edu/ie3/datamodel/io/factory/input/participant/FixedFeedInInputFactoryTest.groovy

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -88,21 +88,13 @@ class FixedFeedInInputFactoryTest extends Specification implements FactoryTestHe
8888
input.failure
8989
input.exception.get().message == "The provided fields [cosphi_rated, id, s_rated, uuid] are invalid for instance of 'FixedFeedInInput'. \n" +
9090
"The following fields (without complex objects e.g. nodes, operators, ...) to be passed to a constructor of 'FixedFeedInInput' are possible (NOT case-sensitive!):\n" +
91-
"0: [cosPhiRated, id, node, qCharacteristics, sRated, uuid] or [cos_phi_rated, id, node, q_characteristics, s_rated, uuid]\n" +
92-
"1: [cosPhiRated, id, node, operatesFrom, qCharacteristics, sRated, uuid] or [cos_phi_rated, id, node, operates_from, q_characteristics, s_rated, uuid]\n" +
93-
"2: [cosPhiRated, id, node, operatesUntil, qCharacteristics, sRated, uuid] or [cos_phi_rated, id, node, operates_until, q_characteristics, s_rated, uuid]\n" +
94-
"3: [cosPhiRated, id, node, operatesFrom, operatesUntil, qCharacteristics, sRated, uuid] or [cos_phi_rated, id, node, operates_from, operates_until, q_characteristics, s_rated, uuid]\n" +
95-
"4: [cosPhiRated, id, node, operator, qCharacteristics, sRated, uuid] or [cos_phi_rated, id, node, operator, q_characteristics, s_rated, uuid]\n" +
96-
"5: [cosPhiRated, id, node, operatesFrom, operator, qCharacteristics, sRated, uuid] or [cos_phi_rated, id, node, operates_from, operator, q_characteristics, s_rated, uuid]\n" +
97-
"6: [cosPhiRated, id, node, operatesUntil, operator, qCharacteristics, sRated, uuid] or [cos_phi_rated, id, node, operates_until, operator, q_characteristics, s_rated, uuid]\n" +
98-
"7: [cosPhiRated, id, node, operatesFrom, operatesUntil, operator, qCharacteristics, sRated, uuid] or [cos_phi_rated, id, node, operates_from, operates_until, operator, q_characteristics, s_rated, uuid]\n" +
99-
"8: [controllingEm, cosPhiRated, id, node, qCharacteristics, sRated, uuid] or [controlling_em, cos_phi_rated, id, node, q_characteristics, s_rated, uuid]\n" +
100-
"9: [controllingEm, cosPhiRated, id, node, operatesFrom, qCharacteristics, sRated, uuid] or [controlling_em, cos_phi_rated, id, node, operates_from, q_characteristics, s_rated, uuid]\n" +
101-
"10: [controllingEm, cosPhiRated, id, node, operatesUntil, qCharacteristics, sRated, uuid] or [controlling_em, cos_phi_rated, id, node, operates_until, q_characteristics, s_rated, uuid]\n" +
102-
"11: [controllingEm, cosPhiRated, id, node, operatesFrom, operatesUntil, qCharacteristics, sRated, uuid] or [controlling_em, cos_phi_rated, id, node, operates_from, operates_until, q_characteristics, s_rated, uuid]\n" +
103-
"12: [controllingEm, cosPhiRated, id, node, operator, qCharacteristics, sRated, uuid] or [controlling_em, cos_phi_rated, id, node, operator, q_characteristics, s_rated, uuid]\n" +
104-
"13: [controllingEm, cosPhiRated, id, node, operatesFrom, operator, qCharacteristics, sRated, uuid] or [controlling_em, cos_phi_rated, id, node, operates_from, operator, q_characteristics, s_rated, uuid]\n" +
105-
"14: [controllingEm, cosPhiRated, id, node, operatesUntil, operator, qCharacteristics, sRated, uuid] or [controlling_em, cos_phi_rated, id, node, operates_until, operator, q_characteristics, s_rated, uuid]\n" +
106-
"15: [controllingEm, cosPhiRated, id, node, operatesFrom, operatesUntil, operator, qCharacteristics, sRated, uuid] or [controlling_em, cos_phi_rated, id, node, operates_from, operates_until, operator, q_characteristics, s_rated, uuid]\n"
91+
"0: [controllingEm, cosPhiRated, id, node, qCharacteristics, sRated, uuid] or [controlling_em, cos_phi_rated, id, node, q_characteristics, s_rated, uuid]\n" +
92+
"1: [controllingEm, cosPhiRated, id, node, operatesFrom, qCharacteristics, sRated, uuid] or [controlling_em, cos_phi_rated, id, node, operates_from, q_characteristics, s_rated, uuid]\n" +
93+
"2: [controllingEm, cosPhiRated, id, node, operatesUntil, qCharacteristics, sRated, uuid] or [controlling_em, cos_phi_rated, id, node, operates_until, q_characteristics, s_rated, uuid]\n" +
94+
"3: [controllingEm, cosPhiRated, id, node, operatesFrom, operatesUntil, qCharacteristics, sRated, uuid] or [controlling_em, cos_phi_rated, id, node, operates_from, operates_until, q_characteristics, s_rated, uuid]\n" +
95+
"4: [controllingEm, cosPhiRated, id, node, operator, qCharacteristics, sRated, uuid] or [controlling_em, cos_phi_rated, id, node, operator, q_characteristics, s_rated, uuid]\n" +
96+
"5: [controllingEm, cosPhiRated, id, node, operatesFrom, operator, qCharacteristics, sRated, uuid] or [controlling_em, cos_phi_rated, id, node, operates_from, operator, q_characteristics, s_rated, uuid]\n" +
97+
"6: [controllingEm, cosPhiRated, id, node, operatesUntil, operator, qCharacteristics, sRated, uuid] or [controlling_em, cos_phi_rated, id, node, operates_until, operator, q_characteristics, s_rated, uuid]\n" +
98+
"7: [controllingEm, cosPhiRated, id, node, operatesFrom, operatesUntil, operator, qCharacteristics, sRated, uuid] or [controlling_em, cos_phi_rated, id, node, operates_from, operates_until, operator, q_characteristics, s_rated, uuid]\n"
10799
}
108100
}
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
uuid,cost_controlled,feed_in_tariff,id,market_reaction,node,operates_from,operates_until,operator,q_characteristics,type
2-
a3b7576b-cac7-4350-90ff-06316cdca192,true,51.0,BM_Test,true,f5839ade-5968-4879-a824-90b5fb3552cd,,,,"cosPhiFixed:{(0.0,1.0)}",2fdca5f1-c11b-4169-a695-4c98f0e0a84a
1+
uuid,cost_controlled,feed_in_tariff,id,market_reaction,node,operates_from,operates_until,operator,q_characteristics,type,controlling_em
2+
a3b7576b-cac7-4350-90ff-06316cdca192,true,51.0,BM_Test,true,f5839ade-5968-4879-a824-90b5fb3552cd,,,,"cosPhiFixed:{(0.0,1.0)}",2fdca5f1-c11b-4169-a695-4c98f0e0a84a,
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
uuid,charging_points,cos_phi_rated,id,location_type,node,operates_from,operates_until,operator,q_characteristics,type,v_2g_support
2-
06a14909-366e-4e94-a593-1016e1455b30,4,0.9,test_evcs_1,HOME,5f1c776c-6935-40f7-ba9e-60646e08992b,,,,"cosPhiFixed:{(0.0,1.0)}",ChargingStationType1,true
3-
104acdaa-5dc5-4197-aed2-2fddb3c4f237,4,0.9,test_evcs_2,HOME,ed4697fd-016c-40c2-a66b-e793878dadea,,,,"cosPhiFixed:{(0.0,1.0)}",ChargingStationType1,true
1+
uuid,charging_points,cos_phi_rated,id,location_type,node,operates_from,operates_until,operator,q_characteristics,type,v_2g_support,controlling_em
2+
06a14909-366e-4e94-a593-1016e1455b30,4,0.9,test_evcs_1,HOME,5f1c776c-6935-40f7-ba9e-60646e08992b,,,,"cosPhiFixed:{(0.0,1.0)}",ChargingStationType1,true,
3+
104acdaa-5dc5-4197-aed2-2fddb3c4f237,4,0.9,test_evcs_2,HOME,ed4697fd-016c-40c2-a66b-e793878dadea,,,,"cosPhiFixed:{(0.0,1.0)}",ChargingStationType1,true,
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
uuid,cos_phi_rated,id,node,operates_from,operates_until,operator,q_characteristics,s_rated
2-
9abe950d-362e-4efe-b686-500f84d8f368,0.9,test_feed_in,5f1c776c-6935-40f7-ba9e-60646e08992b,,,,"cosPhiFixed:{(0.0,0.95)}",200.0
1+
uuid,cos_phi_rated,id,node,operates_from,operates_until,operator,q_characteristics,s_rated,controlling_em
2+
9abe950d-362e-4efe-b686-500f84d8f368,0.9,test_feed_in,5f1c776c-6935-40f7-ba9e-60646e08992b,,,,"cosPhiFixed:{(0.0,0.95)}",200.0,

0 commit comments

Comments
 (0)