Skip to content

Commit b83c058

Browse files
Dennis LabordusRob Tjalma
authored andcommitted
Add and update private CoMPAS Elements.
Signed-off-by: Dennis Labordus <[email protected]>
1 parent c9f2d9b commit b83c058

File tree

10 files changed

+147
-29
lines changed

10 files changed

+147
-29
lines changed

.github/workflows/dockerhub_deployment.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
#
33
# SPDX-License-Identifier: Apache-2.0
44

5-
name: Docker Hub Deployment
5+
name: Docker Hub Publish
66

77
on:
88
release:

app/build.gradle

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ dependencies {
2222
implementation 'org.lfenergy.compas:scl-extension'
2323

2424
implementation project(':service')
25+
implementation project(':repository')
26+
implementation project(':repository-basex')
2527

2628
testImplementation 'io.quarkus:quarkus-junit5'
2729
testImplementation 'io.quarkus:quarkus-junit5-mockito'
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
// SPDX-FileCopyrightText: 2021 Alliander N.V.
2+
//
3+
// SPDX-License-Identifier: Apache-2.0
4+
package org.lfenergy.compas.scl.data.rest;
5+
6+
import org.lfenergy.compas.scl.data.repository.SclDataException;
7+
8+
import javax.ws.rs.Produces;
9+
import javax.ws.rs.ext.ContextResolver;
10+
import javax.ws.rs.ext.Provider;
11+
import javax.xml.bind.JAXBContext;
12+
import javax.xml.bind.JAXBException;
13+
14+
@Provider
15+
@Produces("application/xml")
16+
public class CompasJAXBContextResolver implements ContextResolver<JAXBContext> {
17+
public JAXBContext getContext(Class<?> type) {
18+
try {
19+
return JAXBContext.newInstance(
20+
org.lfenergy.compas.scl.data.rest.model.ObjectFactory.class,
21+
org.lfenergy.compas.scl.data.model.ObjectFactory.class,
22+
org.lfenergy.compas.scl.ObjectFactory.class,
23+
org.lfenergy.compas.extensions.ObjectFactory.class);
24+
} catch (JAXBException exp) {
25+
throw new SclDataException(exp);
26+
}
27+
}
28+
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
// SPDX-FileCopyrightText: 2021 Alliander N.V.
2+
//
3+
// SPDX-License-Identifier: Apache-2.0
4+
package org.lfenergy.compas.scl.data.rest.model;
5+
6+
import javax.xml.bind.JAXBElement;
7+
import javax.xml.bind.annotation.XmlElementDecl;
8+
import javax.xml.bind.annotation.XmlRegistry;
9+
import javax.xml.namespace.QName;
10+
11+
@XmlRegistry
12+
public class ObjectFactory {
13+
@XmlElementDecl(namespace = "", name = "CreateRequest")
14+
public JAXBElement<CreateRequest> createCreateRequest(CreateRequest value) {
15+
return new JAXBElement<>(new QName("", ""), CreateRequest.class, value);
16+
}
17+
18+
@XmlElementDecl(namespace = "", name = "CreateResponse")
19+
public JAXBElement<CreateResponse> createCreateResponse(CreateResponse value) {
20+
return new JAXBElement<>(new QName("", ""), CreateResponse.class, value);
21+
}
22+
23+
@XmlElementDecl(namespace = "", name = "GetResponse")
24+
public JAXBElement<GetResponse> createGetResponse(GetResponse value) {
25+
return new JAXBElement<>(new QName("", ""), GetResponse.class, value);
26+
}
27+
28+
@XmlElementDecl(namespace = "", name = "ListResponse")
29+
public JAXBElement<ListResponse> createListResponse(ListResponse value) {
30+
return new JAXBElement<>(new QName("", ""), ListResponse.class, value);
31+
}
32+
33+
@XmlElementDecl(namespace = "", name = "TypeListResponse")
34+
public JAXBElement<TypeListResponse> createTypeListResponse(TypeListResponse value) {
35+
return new JAXBElement<>(new QName("", ""), TypeListResponse.class, value);
36+
}
37+
38+
@XmlElementDecl(namespace = "", name = "UpdateRequest")
39+
public JAXBElement<UpdateRequest> createUpdateRequest(UpdateRequest value) {
40+
return new JAXBElement<>(new QName("", ""), UpdateRequest.class, value);
41+
}
42+
43+
@XmlElementDecl(namespace = "", name = "VersionsResponse")
44+
public JAXBElement<VersionsResponse> createVersionsResponse(VersionsResponse value) {
45+
return new JAXBElement<>(new QName("", ""), VersionsResponse.class, value);
46+
}
47+
}

app/src/main/java/org/lfenergy/compas/scl/data/rest/v1/CompasSclDataResource.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import javax.inject.Inject;
1414
import javax.ws.rs.*;
1515
import javax.ws.rs.core.MediaType;
16+
import javax.xml.bind.JAXBElement;
1617
import java.util.UUID;
1718

1819
import static org.lfenergy.compas.scl.data.rest.Constants.*;
@@ -30,9 +31,9 @@ public CompasSclDataResource(CompasSclDataService compasSclDataService) {
3031
@Consumes(MediaType.APPLICATION_XML)
3132
@Produces(MediaType.APPLICATION_XML)
3233
public CreateResponse create(@PathParam(TYPE_PATH_PARAM) SclType type,
33-
CreateRequest request) {
34+
JAXBElement<CreateRequest> request) {
3435
var response = new CreateResponse();
35-
response.setId(compasSclDataService.create(type, request.getName(), request.getScl()));
36+
response.setId(compasSclDataService.create(type, request.getValue().getName(), request.getValue().getScl()));
3637
return response;
3738
}
3839

@@ -99,8 +100,8 @@ public SCL findRawSCLByUUIDAndVersion(@PathParam(TYPE_PATH_PARAM) SclType type,
99100
@Produces(MediaType.APPLICATION_XML)
100101
public void update(@PathParam(TYPE_PATH_PARAM) SclType type,
101102
@PathParam(ID_PATH_PARAM) UUID id,
102-
UpdateRequest request) {
103-
compasSclDataService.update(type, id, request.getChangeSetType(), request.getScl());
103+
JAXBElement<UpdateRequest> request) {
104+
compasSclDataService.update(type, id, request.getValue().getChangeSetType(), request.getValue().getScl());
104105
}
105106

106107
@DELETE

app/src/test/java/org/lfenergy/compas/scl/data/rest/v1/CompasSclDataResourceTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -263,7 +263,7 @@ void deleteVersion_WhenCalled_ThenServiceCalled() {
263263
}
264264

265265
private SCL readSCL() throws Exception {
266-
var inputStream = getClass().getResourceAsStream("/scl/icd_import_ied_test.xml");
266+
var inputStream = getClass().getResourceAsStream("/scl/icd_import_ied_test.scd");
267267
assert inputStream != null;
268268
return new MarshallerWrapper.Builder().build().unmarshall(inputStream);
269269
}
File renamed without changes.

repository-basex/src/test/java/org/lfenergy/compas/scl/data/repository/CompasSclDataBaseXRepositoryTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,7 @@ void createAndDeleteAll_WhenSclAddedAndDelete_ThenScLStoredAndRemoved() throws E
214214
}
215215

216216
private SCL readSCL(UUID uuid, Version version) throws Exception {
217-
var inputStream = getClass().getResourceAsStream("/scl/icd_import_ied_test.xml");
217+
var inputStream = getClass().getResourceAsStream("/scl/icd_import_ied_test.scd");
218218
assert inputStream != null;
219219
var scl = new MarshallerWrapper.Builder().build().unmarshall(inputStream);
220220
scl.getHeader().setId(uuid.toString());
File renamed without changes.

service/src/main/java/org/lfenergy/compas/scl/data/service/CompasSclDataService.java

Lines changed: 62 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,11 @@
44

55
package org.lfenergy.compas.scl.data.service;
66

7+
import org.lfenergy.compas.extensions.ObjectFactory;
8+
import org.lfenergy.compas.extensions.TSclFileType;
79
import org.lfenergy.compas.scl.SCL;
10+
import org.lfenergy.compas.scl.TAnyContentFromOtherNamespace;
811
import org.lfenergy.compas.scl.TPrivate;
9-
import org.lfenergy.compas.scl.compas.ObjectFactory;
10-
import org.lfenergy.compas.scl.compas.TSclFileType;
1112
import org.lfenergy.compas.scl.data.model.ChangeSetType;
1213
import org.lfenergy.compas.scl.data.model.Item;
1314
import org.lfenergy.compas.scl.data.model.SclType;
@@ -17,7 +18,7 @@
1718
import javax.enterprise.context.ApplicationScoped;
1819
import javax.inject.Inject;
1920
import javax.xml.bind.JAXBElement;
20-
21+
import javax.xml.namespace.QName;
2122
import java.util.List;
2223
import java.util.Optional;
2324
import java.util.UUID;
@@ -54,7 +55,8 @@ public UUID create(SclType type, String name, SCL scl) {
5455
var version = new Version(1, 0, 0);
5556
scl.getHeader().setVersion(version.toString());
5657

57-
setSclCompasPrivateElement(scl, name, type);
58+
// Set name and type to SCL before storing the SCL.
59+
setSclCompasPrivateElement(scl, Optional.of(name), type);
5860

5961
repository.create(type, id, scl, version);
6062
return id;
@@ -67,42 +69,80 @@ public void update(SclType type, UUID id, ChangeSetType changeSetType, SCL scl)
6769
version = version.getNextVersion(changeSetType);
6870
scl.getHeader().setId(id.toString());
6971
scl.getHeader().setVersion(version.toString());
70-
// TODO: Add name and type to SCL before storing the SCL. Retrieve name from original SCL.
71-
var name = "";
72+
73+
// Retrieve name from original SCL.
74+
var name = getCompasElement(scl, "SclFilename")
75+
.stream()
76+
.map(JAXBElement::getValue)
77+
.map(Object::toString)
78+
.findFirst();
79+
// Add name and type to SCL before storing the SCL.
80+
setSclCompasPrivateElement(scl, name, type);
7281

7382
repository.create(type, id, scl, version);
7483
}
7584

7685
public void delete(SclType type, UUID id) {
7786
repository.delete(type, id);
7887
}
79-
88+
8089
public void delete(SclType type, UUID id, Version version) {
8190
repository.delete(type, id, version);
8291
}
8392

93+
private Optional<TPrivate> getCompasPrivate(SCL scl) {
94+
return scl.getPrivate()
95+
.stream()
96+
.filter(tPrivate -> tPrivate.getType().equals("compas_scl"))
97+
.findFirst();
98+
}
99+
100+
private Optional<JAXBElement> getCompasElement(SCL scl, String name) {
101+
return getCompasPrivate(scl).stream()
102+
.map(TAnyContentFromOtherNamespace::getContent)
103+
.flatMap(List::stream)
104+
.filter(element -> element.getClass().equals(JAXBElement.class))
105+
.map(element -> (JAXBElement) element)
106+
.filter(element -> element.getName().equals(new QName("https://www.lfenergy.org/compas/v1", name)))
107+
.findFirst();
108+
}
109+
84110
/**
85111
* Set the full CoMPAS private element for the given SCL file.
86-
* @param scl the SCL file to edit.
112+
*
113+
* @param scl the SCL file to edit.
87114
* @param filename the filename to add
88115
* @param fileType the file type to add.
89116
*/
90-
private void setSclCompasPrivateElement(SCL scl, String filename, SclType fileType) {
91-
// Creating a private
92-
var compasPrivate = new TPrivate();
117+
private void setSclCompasPrivateElement(SCL scl, Optional<String> filename, SclType fileType) {
93118
var compasPrivateElementFactory = new ObjectFactory();
94-
95-
// Setting the type (required for a SCL private element)
96-
compasPrivate.setType("compas_scl");
119+
var compasPrivate = getCompasPrivate(scl)
120+
.orElseGet(() -> {
121+
// Creating a private
122+
var newPrivate = new TPrivate();
123+
// Setting the type (required for a SCL private element)
124+
newPrivate.setType("compas_scl");
125+
// Adding it to the SCL file.
126+
scl.getPrivate().add(newPrivate);
127+
return newPrivate;
128+
});
97129

98130
// Adding the filename element and the file type element
99-
compasPrivate.getContent().add(compasPrivateElementFactory.createSclFilename(filename));
100-
101-
// TODO: Make this work!
102-
// TSclFileType sclFileType = TSclFileType.valueOf(fileType.toString());
103-
// compasPrivate.getContent().add(compasPrivateElementFactory.createSclFileType(sclFileType));
104-
105-
// Adding it to the SCL file.
106-
scl.getPrivate().add(compasPrivate);
131+
filename.ifPresent(value ->
132+
getCompasElement(scl, "SclFilename")
133+
.ifPresentOrElse(
134+
element -> {
135+
},
136+
() -> compasPrivate.getContent().add(compasPrivateElementFactory.createSclFilename(value)
137+
)
138+
)
139+
);
140+
141+
TSclFileType sclFileType = TSclFileType.valueOf(fileType.toString());
142+
getCompasElement(scl, "SclFileType")
143+
.ifPresentOrElse(
144+
element -> element.setValue(sclFileType),
145+
() -> compasPrivate.getContent().add(compasPrivateElementFactory.createSclFileType(sclFileType))
146+
);
107147
}
108148
}

0 commit comments

Comments
 (0)