Skip to content

Commit 5b281b4

Browse files
author
Rob Tjalma
authored
Merge pull request #51 from com-pas/move-element-converter-to-core
Moved Element Converter to Compas Core Repository and some small changes
2 parents ee17ab1 + c774600 commit 5b281b4

File tree

22 files changed

+164
-266
lines changed

22 files changed

+164
-266
lines changed

app/src/main/java/org/lfenergy/compas/scl/data/rest/model/CreateRequest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ public class CreateRequest {
1919
private String name;
2020
@Schema(example = "SCL XML...")
2121
@XmlAnyElement
22-
protected Element scl;
22+
private Element scl;
2323

2424
public String getName() {
2525
return name;

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@
33
// SPDX-License-Identifier: Apache-2.0
44
package org.lfenergy.compas.scl.data.rest.v1;
55

6+
import org.lfenergy.compas.core.commons.ElementConverter;
67
import org.lfenergy.compas.scl.data.model.SclType;
78
import org.lfenergy.compas.scl.data.model.Version;
89
import org.lfenergy.compas.scl.data.rest.model.*;
910
import org.lfenergy.compas.scl.data.service.CompasSclDataService;
10-
import org.lfenergy.compas.scl.data.util.SclElementConverter;
1111

1212
import javax.inject.Inject;
1313
import javax.ws.rs.*;
@@ -20,7 +20,7 @@
2020
public class CompasSclDataResource {
2121
private CompasSclDataService compasSclDataService;
2222

23-
private SclElementConverter converter = new SclElementConverter();
23+
private ElementConverter converter = new ElementConverter();
2424

2525
@Inject
2626
public CompasSclDataResource(CompasSclDataService compasSclDataService) {

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,14 @@
88
import io.quarkus.test.junit.mockito.InjectMock;
99
import io.restassured.http.ContentType;
1010
import org.junit.jupiter.api.Test;
11+
import org.lfenergy.compas.core.commons.ElementConverter;
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;
1415
import org.lfenergy.compas.scl.data.model.Version;
1516
import org.lfenergy.compas.scl.data.rest.model.CreateRequest;
1617
import org.lfenergy.compas.scl.data.rest.model.UpdateRequest;
1718
import org.lfenergy.compas.scl.data.service.CompasSclDataService;
18-
import org.lfenergy.compas.scl.data.util.SclElementConverter;
1919
import org.w3c.dom.Element;
2020

2121
import java.util.Collections;
@@ -24,6 +24,7 @@
2424
import static io.restassured.RestAssured.given;
2525
import static io.restassured.path.xml.config.XmlPathConfig.xmlPathConfig;
2626
import static org.junit.jupiter.api.Assertions.assertEquals;
27+
import static org.lfenergy.compas.scl.data.Constants.SCL_ELEMENT_NAME;
2728
import static org.lfenergy.compas.scl.data.Constants.SCL_NS_URI;
2829
import static org.lfenergy.compas.scl.data.rest.Constants.*;
2930
import static org.mockito.Mockito.*;
@@ -34,7 +35,7 @@ class CompasSclDataResourceTest {
3435
@InjectMock
3536
private CompasSclDataService compasSclDataService;
3637

37-
private final SclElementConverter converter = new SclElementConverter();
38+
private final ElementConverter converter = new ElementConverter();
3839

3940
@Test
4041
void list_WhenCalled_ThenItemResponseRetrieved() {
@@ -275,6 +276,6 @@ private Element readSCL() {
275276
var inputStream = getClass().getResourceAsStream("/scl/icd_import_ied_test.scd");
276277
assert inputStream != null;
277278

278-
return converter.convertToElement(inputStream);
279+
return converter.convertToElement(inputStream, SCL_ELEMENT_NAME, SCL_NS_URI);
279280
}
280281
}

pom.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ SPDX-License-Identifier: Apache-2.0
2424
<surefire-plugin.version>3.0.0-M5</surefire-plugin.version>
2525
<sonarqube-plugin.version>3.2.0</sonarqube-plugin.version>
2626

27+
<compas.core.version>0.1.1</compas.core.version>
2728
<jakarta-bind-api.version>2.3.3</jakarta-bind-api.version>
2829
<jakarta-cdi-api.version>2.0.2</jakarta-cdi-api.version>
2930
<microprofile-config-api.version>2.0</microprofile-config-api.version>
@@ -62,6 +63,12 @@ SPDX-License-Identifier: Apache-2.0
6263

6364
<dependencyManagement>
6465
<dependencies>
66+
<dependency>
67+
<groupId>org.lfenergy.compas.core</groupId>
68+
<artifactId>commons</artifactId>
69+
<version>${compas.core.version}</version>
70+
</dependency>
71+
6572
<dependency>
6673
<groupId>jakarta.xml.bind</groupId>
6774
<artifactId>jakarta.xml.bind-api</artifactId>

repository-basex/src/main/java/org/lfenergy/compas/scl/data/basex/BaseXClient.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

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

7-
import org.lfenergy.compas.scl.data.repository.SclDataRepositoryException;
7+
import org.lfenergy.compas.scl.data.exception.CompasSclDataServiceException;
88

99
import java.io.*;
1010
import java.net.InetSocketAddress;
@@ -14,6 +14,7 @@
1414
import java.util.ArrayList;
1515

1616
import static java.nio.charset.StandardCharsets.UTF_8;
17+
import static org.lfenergy.compas.scl.data.exception.CompasSclDataServiceErrorCode.BASEX_CLIENT_CREATION_ERROR_CODE;
1718

1819
/**
1920
* Java client for BaseX.
@@ -288,8 +289,8 @@ private static String md5(final String pw) {
288289
if (s.length() == 1) sb.append('0');
289290
sb.append(s);
290291
}
291-
} catch (final NoSuchAlgorithmException ex) {
292-
throw new SclDataRepositoryException(ex);
292+
} catch (final NoSuchAlgorithmException exp) {
293+
throw new CompasSclDataServiceException(BASEX_CLIENT_CREATION_ERROR_CODE, "Unknwn Algorithm", exp);
293294
}
294295
return sb.toString();
295296
}

repository-basex/src/main/java/org/lfenergy/compas/scl/data/repository/CompasSclDataBaseXRepository.java

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,14 @@
33
// SPDX-License-Identifier: Apache-2.0
44
package org.lfenergy.compas.scl.data.repository;
55

6+
import org.lfenergy.compas.core.commons.ElementConverter;
67
import org.lfenergy.compas.scl.data.basex.BaseXClient;
78
import org.lfenergy.compas.scl.data.basex.BaseXClientFactory;
9+
import org.lfenergy.compas.scl.data.exception.CompasSclDataServiceException;
810
import org.lfenergy.compas.scl.data.model.Item;
911
import org.lfenergy.compas.scl.data.model.SclType;
1012
import org.lfenergy.compas.scl.data.model.Version;
1113
import org.lfenergy.compas.scl.data.util.SclDataModelMarshaller;
12-
import org.lfenergy.compas.scl.data.util.SclElementConverter;
1314
import org.slf4j.Logger;
1415
import org.slf4j.LoggerFactory;
1516
import org.w3c.dom.Element;
@@ -26,6 +27,8 @@
2627

2728
import static java.lang.String.format;
2829
import static org.lfenergy.compas.scl.data.Constants.*;
30+
import static org.lfenergy.compas.scl.data.exception.CompasSclDataServiceErrorCode.BASEX_COMMAND_ERROR_CODE;
31+
import static org.lfenergy.compas.scl.data.exception.CompasSclDataServiceErrorCode.BASEX_QUERY_ERROR_CODE;
2932

3033
@ApplicationScoped
3134
public class CompasSclDataBaseXRepository implements CompasSclDataRepository {
@@ -52,14 +55,14 @@ public class CompasSclDataBaseXRepository implements CompasSclDataRepository {
5255

5356
private final BaseXClientFactory baseXClientFactory;
5457
private final SclDataModelMarshaller sclDataMarshaller;
55-
private final SclElementConverter sclElementConverter;
58+
private final ElementConverter elementConverter;
5659

5760
@Inject
5861
public CompasSclDataBaseXRepository(BaseXClientFactory baseXClientFactory) {
5962
this.baseXClientFactory = baseXClientFactory;
6063

6164
this.sclDataMarshaller = new SclDataModelMarshaller();
62-
this.sclElementConverter = new SclElementConverter();
65+
this.elementConverter = new ElementConverter();
6366

6467
// At startup create all needed databases.
6568
Arrays.stream(SclType.values()).forEach(type ->
@@ -120,7 +123,7 @@ public Element findByUUID(SclType type, UUID id) {
120123
format(DECLARE_DB_VARIABLE, type) +
121124
format(DECLARE_ID_VARIABLE, id) +
122125
"local:latest-version($db, $id)",
123-
sclElementConverter::convertToElement);
126+
xmlString -> elementConverter.convertToElement(xmlString, SCL_ELEMENT_NAME, SCL_NS_URI));
124127
return result.get(0);
125128
}
126129

@@ -129,13 +132,13 @@ public Element findByUUID(SclType type, UUID id, Version version) {
129132
// This find method searches for a specific version.
130133
var result = executeQuery(type,
131134
"doc('" + type + "/" + createDocumentPath(id, version) + "')",
132-
sclElementConverter::convertToElement);
135+
xmlString -> elementConverter.convertToElement(xmlString, SCL_ELEMENT_NAME, SCL_NS_URI));
133136
return result.get(0);
134137
}
135138

136139
@Override
137140
public void create(SclType type, UUID id, Element scl, Version version) {
138-
var inputStream = new ByteArrayInputStream(sclElementConverter.convertToString(scl).getBytes(StandardCharsets.UTF_8));
141+
var inputStream = new ByteArrayInputStream(elementConverter.convertToString(scl).getBytes(StandardCharsets.UTF_8));
139142
executeCommand(client -> {
140143
openDatabase(client, type);
141144
client.add(createDocumentPath(id, version) + "/scl.xml", inputStream);
@@ -182,8 +185,8 @@ private <R> List<R> executeQuery(SclType type, String query, ResultRowMapper<R>
182185
return response;
183186
} catch (IOException exception) {
184187
final var exceptionMessage = exception.getLocalizedMessage();
185-
LOGGER.error("executeCommand: {}", exceptionMessage);
186-
throw new SclDataRepositoryException("Error executing command!", exception);
188+
LOGGER.error("executeQuery: {}", exceptionMessage, exception);
189+
throw new CompasSclDataServiceException(BASEX_QUERY_ERROR_CODE, "Error executing query!");
187190
}
188191
});
189192
}
@@ -201,8 +204,8 @@ private <R> R executeCommand(ClientExecutor<R> command) {
201204
return command.execute(client);
202205
} catch (IOException exception) {
203206
final var exceptionMessage = exception.getLocalizedMessage();
204-
LOGGER.error("executeCommand: {}", exceptionMessage);
205-
throw new SclDataRepositoryException("Error executing command!", exception);
207+
LOGGER.error("executeCommand: {}", exceptionMessage, exception);
208+
throw new CompasSclDataServiceException(BASEX_COMMAND_ERROR_CODE, "Error executing command!");
206209
}
207210
}
208211

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

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,22 +7,23 @@
77
import org.junit.jupiter.api.BeforeEach;
88
import org.junit.jupiter.api.Test;
99
import org.junit.jupiter.api.extension.ExtendWith;
10+
import org.lfenergy.compas.core.commons.ElementConverter;
1011
import org.lfenergy.compas.scl.data.basex.BaseXClientFactory;
1112
import org.lfenergy.compas.scl.data.basex.BaseXServerJUnitExtension;
13+
import org.lfenergy.compas.scl.data.exception.CompasSclDataServiceException;
1214
import org.lfenergy.compas.scl.data.model.ChangeSetType;
1315
import org.lfenergy.compas.scl.data.model.SclType;
1416
import org.lfenergy.compas.scl.data.model.Version;
15-
import org.lfenergy.compas.scl.data.util.SclElementConverter;
1617
import org.lfenergy.compas.scl.data.util.SclElementProcessor;
1718
import org.mockito.junit.jupiter.MockitoExtension;
1819
import org.w3c.dom.Element;
1920

2021
import java.util.UUID;
2122

2223
import static org.junit.jupiter.api.Assertions.*;
23-
import static org.lfenergy.compas.scl.data.Constants.SCL_HEADER_ID_ATTR;
24-
import static org.lfenergy.compas.scl.data.Constants.SCL_HEADER_VERSION_ATTR;
24+
import static org.lfenergy.compas.scl.data.Constants.*;
2525
import static org.lfenergy.compas.scl.data.basex.BaseXServerUtil.createClientFactory;
26+
import static org.lfenergy.compas.scl.data.exception.CompasSclDataServiceErrorCode.*;
2627

2728
@ExtendWith({MockitoExtension.class, BaseXServerJUnitExtension.class})
2829
class CompasSclDataBaseXRepositoryTest {
@@ -32,7 +33,7 @@ class CompasSclDataBaseXRepositoryTest {
3233

3334
private CompasSclDataBaseXRepository repository;
3435

35-
private final SclElementConverter converter = new SclElementConverter();
36+
private final ElementConverter converter = new ElementConverter();
3637
private final SclElementProcessor processor = new SclElementProcessor();
3738

3839
@BeforeAll
@@ -124,9 +125,10 @@ void listVersionsByUUID_WhenTwoVersionsOfARecordAdded_ThenAllRecordAreFound() {
124125
void find_WhenCalledWithUnknownUUID_ThenExceptionIsThrown() {
125126
var uuid = UUID.randomUUID();
126127

127-
assertThrows(SclDataRepositoryException.class, () -> {
128+
var exception = assertThrows(CompasSclDataServiceException.class, () -> {
128129
repository.findByUUID(TYPE, uuid);
129130
});
131+
assertEquals(BASEX_QUERY_ERROR_CODE, exception.getErrorCode());
130132
}
131133

132134
@Test
@@ -191,9 +193,10 @@ void createAndDelete_WhenSclAddedAndDelete_ThenScLStoredAndRemoved() {
191193
assertEquals(getIdFromHeader(scl), getIdFromHeader(foundScl));
192194

193195
repository.delete(TYPE, uuid, version);
194-
assertThrows(SclDataRepositoryException.class, () -> {
196+
var exception = assertThrows(CompasSclDataServiceException.class, () -> {
195197
repository.findByUUID(TYPE, uuid);
196198
});
199+
assertEquals(BASEX_QUERY_ERROR_CODE, exception.getErrorCode());
197200
}
198201

199202
@Test
@@ -216,21 +219,24 @@ void createAndDeleteAll_WhenSclAddedAndDelete_ThenScLStoredAndRemoved() {
216219
assertEquals(getVersionFromHeader(scl), getVersionFromHeader(foundScl));
217220

218221
repository.delete(TYPE, uuid);
219-
assertThrows(SclDataRepositoryException.class, () -> {
222+
var exception = assertThrows(CompasSclDataServiceException.class, () -> {
220223
repository.findByUUID(TYPE, uuid);
221224
});
225+
assertEquals(BASEX_QUERY_ERROR_CODE, exception.getErrorCode());
222226
}
223227

224228
private String getIdFromHeader(Element scl) {
225229
var header = processor.getSclHeader(scl)
226-
.orElseThrow(() -> new SclDataRepositoryException("Header not found in SCL!"));
230+
.orElseThrow(() ->
231+
new CompasSclDataServiceException(HEADER_NOT_FOUND_ERROR_CODE, "Header not found in SCL!"));
227232
return processor.getAttributeValue(header, SCL_HEADER_ID_ATTR)
228233
.orElse("");
229234
}
230235

231236
private String getVersionFromHeader(Element scl) {
232237
var header = processor.getSclHeader(scl)
233-
.orElseThrow(() -> new SclDataRepositoryException("Header not found in SCL!"));
238+
.orElseThrow(() ->
239+
new CompasSclDataServiceException(HEADER_NOT_FOUND_ERROR_CODE, "Header not found in SCL!"));
234240
return processor.getAttributeValue(header, SCL_HEADER_VERSION_ATTR)
235241
.orElse("");
236242
}
@@ -239,7 +245,7 @@ private Element readSCL(UUID uuid, Version version) {
239245
var inputStream = getClass().getResourceAsStream("/scl/icd_import_ied_test.scd");
240246
assert inputStream != null;
241247

242-
var scl = converter.convertToElement(inputStream);
248+
var scl = converter.convertToElement(inputStream, SCL_ELEMENT_NAME, SCL_NS_URI);
243249
var header = processor.getSclHeader(scl).orElseGet(() -> processor.addSclHeader(scl));
244250
header.setAttribute(SCL_HEADER_ID_ATTR, uuid.toString());
245251
header.setAttribute(SCL_HEADER_VERSION_ATTR, version.toString());

repository/pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,11 @@ SPDX-License-Identifier: Apache-2.0
1818
<packaging>jar</packaging>
1919

2020
<dependencies>
21+
<dependency>
22+
<groupId>org.lfenergy.compas.core</groupId>
23+
<artifactId>commons</artifactId>
24+
</dependency>
25+
2126
<dependency>
2227
<groupId>jakarta.xml.bind</groupId>
2328
<artifactId>jakarta.xml.bind-api</artifactId>
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
// SPDX-FileCopyrightText: 2021 Alliander N.V.
2+
//
3+
// SPDX-License-Identifier: Apache-2.0
4+
package org.lfenergy.compas.scl.data.exception;
5+
6+
public class CompasSclDataServiceErrorCode {
7+
CompasSclDataServiceErrorCode() {
8+
throw new UnsupportedOperationException("CompasSclDataRepositoryErrorCode class");
9+
}
10+
11+
public static final String UNKNOWN_CHANGE_SET_TYPE_ERROR_CODE = "SDS-0001";
12+
public static final String CREATION_ERROR_CODE = "SDS-0002";
13+
public static final String UNMARSHAL_ERROR_CODE = "SDS-0003";
14+
public static final String HEADER_NOT_FOUND_ERROR_CODE = "SDS-0004";
15+
16+
public static final String BASEX_CLIENT_CREATION_ERROR_CODE = "SDS-1000";
17+
public static final String BASEX_QUERY_ERROR_CODE = "SDS-1001";
18+
public static final String BASEX_COMMAND_ERROR_CODE = "SDS-1002";
19+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
// SPDX-FileCopyrightText: 2021 Alliander N.V.
2+
//
3+
// SPDX-License-Identifier: Apache-2.0
4+
package org.lfenergy.compas.scl.data.exception;
5+
6+
import org.lfenergy.compas.core.commons.exception.CompasException;
7+
8+
public class CompasSclDataServiceException extends CompasException {
9+
public CompasSclDataServiceException(String errorCode, String message) {
10+
super(errorCode,message);
11+
}
12+
13+
public CompasSclDataServiceException(String errorCode, String message, Throwable cause) {
14+
super(errorCode,message, cause);
15+
}
16+
}

0 commit comments

Comments
 (0)