Skip to content

Commit e5df7b4

Browse files
committed
Simplify property selection
1 parent 85e7823 commit e5df7b4

File tree

5 files changed

+38
-40
lines changed

5 files changed

+38
-40
lines changed

engine/src/main/java/nl/geostandaarden/imx/orchestrate/engine/exchange/AbstractDataRequest.java

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -55,21 +55,17 @@ public B selectedProperties(Set<SelectedProperty> selectedProperties) {
5555
}
5656

5757
public B selectProperty(String name) {
58-
selectedProperties.add(SelectedProperty.builder()
59-
.property(objectType.getProperty(name))
60-
.build());
58+
selectedProperties.add(SelectedProperty.forProperty(objectType.getProperty(name)));
6159
return self();
6260
}
6361

6462
public B selectObjectProperty(String name, Function<ObjectRequest.Builder, DataRequest> selectionFn) {
6563
var property = objectType.getProperty(name);
6664

6765
if (property instanceof Relation relation) {
68-
selectedProperties.add(SelectedProperty.builder()
69-
.property(property)
70-
.nestedRequest(selectionFn.apply(ObjectRequest.builder(model)
71-
.objectType(relation.getTarget())))
72-
.build());
66+
var nestedRequest = selectionFn.apply(ObjectRequest.builder(model)
67+
.objectType(relation.getTarget()));
68+
selectedProperties.add(SelectedProperty.forProperty(property, nestedRequest));
7369
return self();
7470
}
7571

@@ -80,10 +76,9 @@ public B selectCollectionProperty(String name, Function<CollectionRequest.Builde
8076
var property = objectType.getProperty(name);
8177

8278
if (property instanceof Relation relation) {
83-
selectedProperties.add(SelectedProperty.builder()
84-
.property(property)
85-
.nestedRequest(selectionFn.apply(CollectionRequest.builder(model).objectType(relation.getTarget())))
86-
.build());
79+
var nestedRequest = selectionFn.apply(CollectionRequest.builder(model)
80+
.objectType(relation.getTarget()));
81+
selectedProperties.add(SelectedProperty.forProperty(property, nestedRequest));
8782
return self();
8883
}
8984

engine/src/main/java/nl/geostandaarden/imx/orchestrate/engine/exchange/SelectedProperty.java

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,17 @@
11
package nl.geostandaarden.imx.orchestrate.engine.exchange;
22

3-
import lombok.Builder;
3+
import lombok.AccessLevel;
44
import lombok.EqualsAndHashCode;
55
import lombok.Getter;
6+
import lombok.RequiredArgsConstructor;
67
import nl.geostandaarden.imx.orchestrate.engine.OrchestrateException;
8+
import nl.geostandaarden.imx.orchestrate.model.Attribute;
79
import nl.geostandaarden.imx.orchestrate.model.Property;
810
import nl.geostandaarden.imx.orchestrate.model.Relation;
911

1012
@Getter
1113
@EqualsAndHashCode
12-
@Builder(toBuilder = true)
14+
@RequiredArgsConstructor(access = AccessLevel.PRIVATE)
1315
public final class SelectedProperty {
1416

1517
private final Property property;
@@ -26,12 +28,18 @@ public String toString() {
2628
}
2729

2830
public static SelectedProperty forProperty(Property property) {
29-
if (property instanceof Relation) {
30-
throw new OrchestrateException("Using static constructor for Relation properties is not supported (yet).");
31+
return forProperty(property, null);
32+
}
33+
34+
public static SelectedProperty forProperty(Property property, DataRequest nestedRequest) {
35+
if (property instanceof Attribute && nestedRequest != null) {
36+
throw new OrchestrateException("Attribute properties can not have a nested request.");
37+
}
38+
39+
if (property instanceof Relation && nestedRequest == null) {
40+
throw new OrchestrateException("Relation properties require a nested request.");
3141
}
3242

33-
return SelectedProperty.builder()
34-
.property(property)
35-
.build();
43+
return new SelectedProperty(property, nestedRequest);
3644
}
3745
}

engine/src/main/java/nl/geostandaarden/imx/orchestrate/engine/fetch/FetchPlanner.java

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -203,23 +203,17 @@ private FetchOperation fetchSourceObject(ObjectTypeRef sourceTypeRef, Set<Path>
203203

204204
// TODO: Refactor
205205
if (property.getCardinality().isSingular()) {
206-
selectedProperties.add(SelectedProperty.builder()
207-
.property(property)
208-
.nestedRequest(ObjectRequest.builder(targetModel)
209-
.objectType(targetTypeRef)
210-
.objectKey(Map.of())
211-
.selectedProperties(selectIdentity(targetTypeRef))
212-
.build())
213-
.build());
206+
selectedProperties.add(SelectedProperty.forProperty(property, ObjectRequest.builder(targetModel)
207+
.objectType(targetTypeRef)
208+
.objectKey(Map.of())
209+
.selectedProperties(selectIdentity(targetTypeRef))
210+
.build()));
214211
} else {
215212
// TODO: Filter
216-
selectedProperties.add(SelectedProperty.builder()
217-
.property(property)
218-
.nestedRequest(CollectionRequest.builder(targetModel)
219-
.objectType(targetTypeRef)
220-
.selectedProperties(selectIdentity(targetTypeRef))
221-
.build())
222-
.build());
213+
selectedProperties.add(SelectedProperty.forProperty(property, CollectionRequest.builder(targetModel)
214+
.objectType(targetTypeRef)
215+
.selectedProperties(selectIdentity(targetTypeRef))
216+
.build()));
223217
}
224218
}
225219

engine/src/test/java/nl/geostandaarden/imx/orchestrate/engine/OrchestrateEngineTest.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -92,9 +92,7 @@ void fetch() {
9292
var resultMono = engine.fetch(request);
9393

9494
StepVerifier.create(resultMono)
95-
.assertNext(result -> {
96-
System.out.println(result.getProperties());
97-
})
95+
.expectNextCount(1)
9896
.expectComplete()
9997
.verify();
10098
}

source-file/src/test/java/nl/geostandaarden/imx/orchestrate/source/file/FileUtilsTest.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package nl.geostandaarden.imx.orchestrate.source.file;
22

3-
import static nl.geostandaarden.imx.orchestrate.source.file.FileUtils.*;
3+
import static nl.geostandaarden.imx.orchestrate.source.file.FileUtils.getBaseName;
4+
import static nl.geostandaarden.imx.orchestrate.source.file.FileUtils.getObjectKey;
5+
import static nl.geostandaarden.imx.orchestrate.source.file.FileUtils.getObjectProperties;
46
import static org.assertj.core.api.Assertions.assertThat;
57
import static org.assertj.core.api.Assertions.assertThatThrownBy;
68

@@ -48,9 +50,10 @@ void getObjectKey_ReturnsKeyMap_ForObjectType() {
4850
void getObjectProperties_ReturnsProperties_ForSelectedProperties() {
4951
var objectNode = createObjectNode();
5052
var objectType = createObjectType();
53+
5154
var selectedProperties = Set.of(
52-
SelectedProperty.builder().property(objectType.getProperty("id")).build(),
53-
SelectedProperty.builder().property(objectType.getProperty("name")).build());
55+
SelectedProperty.forProperty(objectType.getProperty("id")),
56+
SelectedProperty.forProperty(objectType.getProperty("name")));
5457

5558
var objectProperties = getObjectProperties(objectNode, selectedProperties);
5659

0 commit comments

Comments
 (0)