Skip to content

Commit e5ba886

Browse files
authored
Merge pull request #260 from com-pas/validate-labels
Validate labels when add or updating a SCL File
2 parents 47b63e0 + 4d2ea57 commit e5ba886

File tree

11 files changed

+273
-96
lines changed

11 files changed

+273
-96
lines changed

repository/src/main/java/org/lfenergy/compas/scl/data/exception/CompasSclDataServiceErrorCode.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ public class CompasSclDataServiceErrorCode {
1515
public static final String NO_SCL_ELEMENT_FOUND_ERROR_CODE = "SDS-0005";
1616
public static final String NO_DATA_FOUND_ERROR_CODE = "SDS-0006";
1717
public static final String DUPLICATE_SCL_NAME_ERROR_CODE = "SDS-0007";
18+
public static final String INVALID_LABEL_ERROR_CODE = "SDS-0008";
19+
public static final String TOO_MANY_LABEL_ERROR_CODE = "SDS-0009";
1820

1921
public static final String BASEX_CLIENT_CREATION_ERROR_CODE = "SDS-1000";
2022
public static final String BASEX_QUERY_ERROR_CODE = "SDS-1001";

repository/src/main/java/org/lfenergy/compas/scl/data/util/SclElementProcessor.java

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public class SclElementProcessor {
3030
* @return The Header Element if found or empty() if not.
3131
*/
3232
public Optional<Element> getSclHeader(Element scl) {
33-
return getChildNodesByName(scl, SCL_HEADER_ELEMENT_NAME).stream()
33+
return getChildNodesByName(scl, SCL_HEADER_ELEMENT_NAME, SCL_NS_URI).stream()
3434
.findFirst();
3535
}
3636

@@ -55,7 +55,7 @@ public Element addSclHeader(Element scl) {
5555
* @return The Private Element with the correct type if found or empty() if not.
5656
*/
5757
public Optional<Element> getCompasPrivate(Element scl) {
58-
return getChildNodesByName(scl, SCL_PRIVATE_ELEMENT_NAME).stream()
58+
return getChildNodesByName(scl, SCL_PRIVATE_ELEMENT_NAME, SCL_NS_URI).stream()
5959
.filter(element -> element.hasAttribute(SCL_PRIVATE_TYPE_ATTR))
6060
.filter(element -> element.getAttribute(SCL_PRIVATE_TYPE_ATTR).equals(COMPAS_SCL_EXTENSION_TYPE))
6161
.findFirst();
@@ -111,7 +111,7 @@ public Element addHistoryItem(Element header, String who, String fullmessage, Ve
111111
var formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");
112112
var document = header.getOwnerDocument();
113113

114-
var history = getChildNodesByName(header, SCL_HISTORY_ELEMENT_NAME).stream().findFirst()
114+
var history = getChildNodesByName(header, SCL_HISTORY_ELEMENT_NAME, SCL_NS_URI).stream().findFirst()
115115
.orElseGet(() -> {
116116
Element newHistory = document.createElementNS(SCL_NS_URI, SCL_HISTORY_ELEMENT_NAME);
117117
header.appendChild(newHistory);
@@ -148,8 +148,8 @@ public Optional<String> getAttributeValue(Element element, String attributeName)
148148
* @param localName The name of the Child Node.
149149
* @return The Child Node if found or empty() if not.
150150
*/
151-
public Optional<Element> getChildNodeByName(Element root, String localName) {
152-
return getChildNodesByName(root, localName)
151+
public Optional<Element> getChildNodeByName(Element root, String localName, String namespaceURI) {
152+
return getChildNodesByName(root, localName, namespaceURI)
153153
.stream()
154154
.findFirst();
155155
}
@@ -161,13 +161,15 @@ public Optional<Element> getChildNodeByName(Element root, String localName) {
161161
* @param localName The name of the Child Node.
162162
* @return The list of Child Nodes found.
163163
*/
164-
public List<Element> getChildNodesByName(Element root, String localName) {
164+
public List<Element> getChildNodesByName(Element root, String localName, String namespaceURI) {
165165
var foundElements = new ArrayList<Element>();
166166
var childNodes = root.getChildNodes();
167167
if (childNodes.getLength() > 0) {
168168
for (int i = 0; i < childNodes.getLength(); i++) {
169169
Node node = childNodes.item(i);
170-
if (node instanceof Element element && localName.equals(element.getLocalName())) {
170+
if (node instanceof Element element
171+
&& localName.equals(element.getLocalName())
172+
&& namespaceURI.equals(element.getNamespaceURI())) {
171173
foundElements.add(element);
172174
}
173175
}

repository/src/test/java/org/lfenergy/compas/scl/data/model/VersionTest.java

Lines changed: 8 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -12,34 +12,20 @@ class VersionTest {
1212
void constructor_WhenCalledWithNullOrEmptyValue_ThenExceptionThrown() {
1313
var expectedMessage = "Version can't be null or empty";
1414

15-
assertThrows(IllegalArgumentException.class, () -> {
16-
new Version(null);
17-
}, expectedMessage);
15+
assertThrows(IllegalArgumentException.class, () -> new Version(null), expectedMessage);
1816

19-
assertThrows(IllegalArgumentException.class, () -> {
20-
new Version("");
21-
}, expectedMessage);
17+
assertThrows(IllegalArgumentException.class, () -> new Version(""), expectedMessage);
2218
}
2319

2420
@Test
2521
void constructor_WhenCalledWithInvalidValues_ThenExceptionThrown() {
2622
var expectedMessage = "Version is in the wrong format. Must consist of 3 number separated by dot (1.3.5)";
2723

28-
assertThrows(IllegalArgumentException.class, () -> {
29-
new Version("AS.ER.AD");
30-
}, expectedMessage);
31-
assertThrows(IllegalArgumentException.class, () -> {
32-
new Version("JANSEN");
33-
}, expectedMessage);
34-
assertThrows(IllegalArgumentException.class, () -> {
35-
new Version("1.0");
36-
}, expectedMessage);
37-
assertThrows(IllegalArgumentException.class, () -> {
38-
new Version("1");
39-
}, expectedMessage);
40-
assertThrows(IllegalArgumentException.class, () -> {
41-
new Version("0.0.0");
42-
}, expectedMessage);
24+
assertThrows(IllegalArgumentException.class, () -> new Version("AS.ER.AD"), expectedMessage);
25+
assertThrows(IllegalArgumentException.class, () -> new Version("JANSEN"), expectedMessage);
26+
assertThrows(IllegalArgumentException.class, () -> new Version("1.0"), expectedMessage);
27+
assertThrows(IllegalArgumentException.class, () -> new Version("1"), expectedMessage);
28+
assertThrows(IllegalArgumentException.class, () -> new Version("0.0.0"), expectedMessage);
4329
}
4430

4531
@Test
@@ -69,9 +55,7 @@ void getNextVersion_WhenCalledWithDiffentChangeSetTypes_ThenTheCorrectNextVersio
6955
void getNextVersion_WhenCalledWithNoChangeSetTypes_ThenExceptionThrown() {
7056
var currentVersion = new Version(1, 3, 5);
7157

72-
assertThrows(IllegalArgumentException.class, () -> {
73-
currentVersion.getNextVersion(null);
74-
});
58+
assertThrows(IllegalArgumentException.class, () -> currentVersion.getNextVersion(null));
7559
}
7660

7761
@Test

repository/src/test/java/org/lfenergy/compas/scl/data/repository/AbstractCompasSclDataRepositoryTest.java

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -146,9 +146,8 @@ void findByUUID_WhenCalledWithUnknownUUID_ThenExceptionIsThrown() {
146146
var uuid = UUID.randomUUID();
147147

148148
var repository = getRepository();
149-
var exception = assertThrows(CompasNoDataFoundException.class, () -> {
150-
repository.findByUUID(TYPE, uuid);
151-
});
149+
var exception = assertThrows(CompasNoDataFoundException.class,
150+
() -> repository.findByUUID(TYPE, uuid));
152151
assertEquals(NO_DATA_FOUND_ERROR_CODE, exception.getErrorCode());
153152
}
154153

@@ -179,9 +178,8 @@ void findByUUIDWithVersion_WhenCalledWithUnknownVersion_ThenExceptionIsThrown()
179178
repository.create(TYPE, uuid, NAME_1, scl, version, WHO);
180179

181180
var unknownVersion = new Version(1, 1, 1);
182-
var exception = assertThrows(CompasNoDataFoundException.class, () -> {
183-
repository.findByUUID(TYPE, uuid, unknownVersion);
184-
});
181+
var exception = assertThrows(CompasNoDataFoundException.class,
182+
() -> repository.findByUUID(TYPE, uuid, unknownVersion));
185183
assertEquals(NO_DATA_FOUND_ERROR_CODE, exception.getErrorCode());
186184
}
187185

@@ -235,9 +233,8 @@ void findMetaInfoByUUID_WhenCalledWithUnknownUUID_ThenExceptionIsThrown() {
235233
var uuid = UUID.randomUUID();
236234

237235
var repository = getRepository();
238-
var exception = assertThrows(CompasNoDataFoundException.class, () -> {
239-
repository.findMetaInfoByUUID(TYPE, uuid);
240-
});
236+
var exception = assertThrows(CompasNoDataFoundException.class,
237+
() -> repository.findMetaInfoByUUID(TYPE, uuid));
241238
assertEquals(NO_DATA_FOUND_ERROR_CODE, exception.getErrorCode());
242239
}
243240

@@ -304,9 +301,8 @@ void createAndDelete_WhenSclAddedAndDelete_ThenScLStoredAndRemoved() {
304301
assertEquals(getIdFromHeader(scl), getIdFromHeader(foundScl));
305302

306303
repository.delete(TYPE, uuid, version);
307-
var exception = assertThrows(CompasNoDataFoundException.class, () -> {
308-
repository.findByUUID(TYPE, uuid);
309-
});
304+
var exception = assertThrows(CompasNoDataFoundException.class,
305+
() -> repository.findByUUID(TYPE, uuid));
310306
assertEquals(NO_DATA_FOUND_ERROR_CODE, exception.getErrorCode());
311307
}
312308

@@ -331,9 +327,8 @@ void createAndDeleteAll_WhenSclAddedAndDelete_ThenScLStoredAndRemoved() {
331327
assertEquals(getVersionFromHeader(scl), getVersionFromHeader(foundScl));
332328

333329
repository.delete(TYPE, uuid);
334-
var exception = assertThrows(CompasNoDataFoundException.class, () -> {
335-
repository.findByUUID(TYPE, uuid);
336-
});
330+
var exception = assertThrows(CompasNoDataFoundException.class,
331+
() -> repository.findByUUID(TYPE, uuid));
337332
assertEquals(NO_DATA_FOUND_ERROR_CODE, exception.getErrorCode());
338333
}
339334

repository/src/test/java/org/lfenergy/compas/scl/data/util/SclElementProcessorTest.java

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,7 @@
1212
import static org.junit.jupiter.api.Assertions.*;
1313
import static org.lfenergy.compas.scl.data.SclDataServiceConstants.*;
1414
import static org.lfenergy.compas.scl.data.exception.CompasSclDataServiceErrorCode.HEADER_NOT_FOUND_ERROR_CODE;
15-
import static org.lfenergy.compas.scl.extensions.commons.CompasExtensionsConstants.COMPAS_SCL_EXTENSION_TYPE;
16-
import static org.lfenergy.compas.scl.extensions.commons.CompasExtensionsConstants.COMPAS_SCL_NAME_EXTENSION;
15+
import static org.lfenergy.compas.scl.extensions.commons.CompasExtensionsConstants.*;
1716

1817
class SclElementProcessorTest {
1918
private SclElementProcessor processor = new SclElementProcessor();
@@ -94,9 +93,8 @@ void addCompasPrivate_WhenCalledWithoutSclHeader_ThenExceptionIsThrown() {
9493
var foundElement = processor.getCompasPrivate(scl);
9594
assertFalse(foundElement.isPresent());
9695

97-
var exception = assertThrows(CompasSclDataServiceException.class, () -> {
98-
processor.addCompasPrivate(scl);
99-
});
96+
var exception = assertThrows(CompasSclDataServiceException.class,
97+
() -> processor.addCompasPrivate(scl));
10098
assertEquals(HEADER_NOT_FOUND_ERROR_CODE, exception.getErrorCode());
10199
}
102100

@@ -107,15 +105,17 @@ void addCompasElement_WhenCalledWithoutCompasElement_ThenNewElementIsAdded() {
107105

108106
var compasPrivate = processor.getCompasPrivate(scl);
109107
assertTrue(compasPrivate.isPresent());
110-
var foundElement = processor.getChildNodeByName(compasPrivate.get(), COMPAS_SCL_NAME_EXTENSION);
108+
var foundElement = processor.getChildNodeByName(compasPrivate.get(), COMPAS_SCL_NAME_EXTENSION,
109+
COMPAS_EXTENSION_NS_URI);
111110
assertFalse(foundElement.isPresent());
112111

113112
var result = processor.addCompasElement(compasPrivate.get(), COMPAS_SCL_NAME_EXTENSION, value);
114113

115114
assertNotNull(result);
116115
assertEquals(COMPAS_SCL_NAME_EXTENSION, result.getLocalName());
117116
assertEquals(value, result.getTextContent());
118-
foundElement = processor.getChildNodeByName(compasPrivate.get(), COMPAS_SCL_NAME_EXTENSION);
117+
foundElement = processor.getChildNodeByName(compasPrivate.get(), COMPAS_SCL_NAME_EXTENSION,
118+
COMPAS_EXTENSION_NS_URI);
119119
assertTrue(foundElement.isPresent());
120120
assertEquals(foundElement.get(), result);
121121
}
@@ -130,15 +130,15 @@ void addHistoryItem_WhenCalledWithoutHistoryElement_ThenElementIsAdded() {
130130
var header = processor.getSclHeader(scl);
131131
assertTrue(header.isPresent());
132132

133-
var historyElement = processor.getChildNodeByName(header.get(), SCL_HISTORY_ELEMENT_NAME);
133+
var historyElement = processor.getChildNodeByName(header.get(), SCL_HISTORY_ELEMENT_NAME, SCL_NS_URI);
134134
assertFalse(historyElement.isPresent());
135135

136136
var result = processor.addHistoryItem(header.get(), username, message, version);
137137
assertNotNull(result);
138138

139-
historyElement = processor.getChildNodeByName(header.get(), SCL_HISTORY_ELEMENT_NAME);
139+
historyElement = processor.getChildNodeByName(header.get(), SCL_HISTORY_ELEMENT_NAME, SCL_NS_URI);
140140
assertTrue(historyElement.isPresent());
141-
var hItemElement = processor.getChildNodeByName(historyElement.get(), SCL_HITEM_ELEMENT_NAME);
141+
var hItemElement = processor.getChildNodeByName(historyElement.get(), SCL_HITEM_ELEMENT_NAME, SCL_NS_URI);
142142
assertTrue(hItemElement.isPresent());
143143
assertEquals(version.toString(), hItemElement.get().getAttribute(SCL_VERSION_ATTR));
144144
assertTrue(hItemElement.get().hasAttribute(SCL_REVISION_ATTR));
@@ -154,16 +154,16 @@ void addHistoryItem_WhenCalledWithHistoryItemElement_ThenElementIsAdded() {
154154
var header = processor.getSclHeader(scl);
155155
assertTrue(header.isPresent());
156156

157-
var historyElement = processor.getChildNodeByName(header.get(), SCL_HISTORY_ELEMENT_NAME);
157+
var historyElement = processor.getChildNodeByName(header.get(), SCL_HISTORY_ELEMENT_NAME, SCL_NS_URI);
158158
assertTrue(historyElement.isPresent());
159159

160160
var result = processor.addHistoryItem(header.get(), "The Tester", "The Message", version);
161161
assertNotNull(result);
162162
assertEquals(version.toString(), result.getAttribute(SCL_VERSION_ATTR));
163163

164-
historyElement = processor.getChildNodeByName(header.get(), SCL_HISTORY_ELEMENT_NAME);
164+
historyElement = processor.getChildNodeByName(header.get(), SCL_HISTORY_ELEMENT_NAME, SCL_NS_URI);
165165
assertTrue(historyElement.isPresent());
166-
var hItemElements = processor.getChildNodesByName(historyElement.get(), SCL_HITEM_ELEMENT_NAME);
166+
var hItemElements = processor.getChildNodesByName(historyElement.get(), SCL_HITEM_ELEMENT_NAME, SCL_NS_URI);
167167
assertEquals(2, hItemElements.size());
168168
}
169169

0 commit comments

Comments
 (0)