Skip to content

Commit 24db574

Browse files
authored
Refine Post Response Handling for Submodel Repository and Service (#638)
* Revert "fix: Response body for post (#484)" This reverts commit 03405aa. * fix: smrepo/smservice: response body for post * refactor: smrepo/smservice: use a different strategy for obtaining the return value
1 parent ad3d994 commit 24db574

File tree

20 files changed

+136
-148
lines changed

20 files changed

+136
-148
lines changed

basyx.submodelrepository/basyx.submodelrepository-backend/src/main/java/org/eclipse/digitaltwin/basyx/submodelrepository/backend/CrudSubmodelRepository.java

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -197,23 +197,21 @@ public void setSubmodelElementValue(String submodelId, String smeIdShort, Submod
197197
}
198198

199199
@Override
200-
public SubmodelElement createSubmodelElement(String submodelId, SubmodelElement smElement) {
200+
public void createSubmodelElement(String submodelId, SubmodelElement smElement) {
201201
SubmodelService submodelService = getSubmodelServiceOrThrow(submodelId);
202202

203-
SubmodelElement createdSME = submodelService.createSubmodelElement(smElement);
203+
submodelService.createSubmodelElement(smElement);
204204

205205
updateSubmodel(submodelId, submodelService.getSubmodel());
206-
return createdSME;
207206
}
208207

209208
@Override
210-
public SubmodelElement createSubmodelElement(String submodelId, String idShortPath, SubmodelElement smElement) throws ElementDoesNotExistException {
209+
public void createSubmodelElement(String submodelId, String idShortPath, SubmodelElement smElement) throws ElementDoesNotExistException {
211210
SubmodelService submodelService = getSubmodelServiceOrThrow(submodelId);
212211

213-
SubmodelElement createdSME = submodelService.createSubmodelElement(idShortPath, smElement);
212+
submodelService.createSubmodelElement(idShortPath, smElement);
214213

215214
updateSubmodel(submodelId, submodelService.getSubmodel());
216-
return createdSME;
217215
}
218216

219217
@Override

basyx.submodelrepository/basyx.submodelrepository-client/src/main/java/org/eclipse/digitaltwin/basyx/submodelrepository/client/ConnectedSubmodelRepository.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -196,13 +196,13 @@ public void setSubmodelElementValue(String submodelId, String smeIdShort, Submod
196196
}
197197

198198
@Override
199-
public SubmodelElement createSubmodelElement(String submodelId, SubmodelElement smElement) {
200-
return getConnectedSubmodelService(submodelId).createSubmodelElement(smElement);
199+
public void createSubmodelElement(String submodelId, SubmodelElement smElement) {
200+
getConnectedSubmodelService(submodelId).createSubmodelElement(smElement);
201201
}
202202

203203
@Override
204-
public SubmodelElement createSubmodelElement(String submodelId, String idShortPath, SubmodelElement smElement) throws ElementDoesNotExistException {
205-
return getConnectedSubmodelService(submodelId).createSubmodelElement(idShortPath, smElement);
204+
public void createSubmodelElement(String submodelId, String idShortPath, SubmodelElement smElement) throws ElementDoesNotExistException {
205+
getConnectedSubmodelService(submodelId).createSubmodelElement(idShortPath, smElement);
206206
}
207207

208208
@Override

basyx.submodelrepository/basyx.submodelrepository-core/src/main/java/org/eclipse/digitaltwin/basyx/submodelrepository/SubmodelRepository.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ public interface SubmodelRepository {
164164
* @param smElement
165165
* the SubmodelElement
166166
*/
167-
public SubmodelElement createSubmodelElement(String submodelId, SubmodelElement smElement);
167+
public void createSubmodelElement(String submodelId, SubmodelElement smElement);
168168

169169
/**
170170
* Creates a nested SubmodelElement
@@ -176,7 +176,7 @@ public interface SubmodelRepository {
176176
* @param smElement
177177
* the SubmodelElement
178178
*/
179-
public SubmodelElement createSubmodelElement(String submodelId, String idShortPath, SubmodelElement smElement) throws ElementDoesNotExistException;
179+
public void createSubmodelElement(String submodelId, String idShortPath, SubmodelElement smElement) throws ElementDoesNotExistException;
180180

181181
/**
182182
* Deletes a SubmodelElement

basyx.submodelrepository/basyx.submodelrepository-core/src/test/java/org/eclipse/digitaltwin/basyx/submodelrepository/core/SubmodelRepositorySubmodelServiceWrapper.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -86,14 +86,14 @@ public void setSubmodelElementValue(String idShortPath, SubmodelElementValue val
8686
}
8787

8888
@Override
89-
public SubmodelElement createSubmodelElement(SubmodelElement submodelElement) {
90-
return repoApi.createSubmodelElement(submodelId, submodelElement);
89+
public void createSubmodelElement(SubmodelElement submodelElement) {
90+
repoApi.createSubmodelElement(submodelId, submodelElement);
9191
}
9292

9393
@Override
94-
public SubmodelElement createSubmodelElement(String idShortPath, SubmodelElement submodelElement)
94+
public void createSubmodelElement(String idShortPath, SubmodelElement submodelElement)
9595
throws ElementDoesNotExistException {
96-
return repoApi.createSubmodelElement(submodelId, idShortPath, submodelElement);
96+
repoApi.createSubmodelElement(submodelId, idShortPath, submodelElement);
9797

9898
}
9999

basyx.submodelrepository/basyx.submodelrepository-feature-authorization/src/main/java/org/eclipse/digitaltwin/basyx/submodelrepository/feature/authorization/AuthorizedSubmodelRepository.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -205,21 +205,21 @@ public void setSubmodelElementValue(String submodelId, String smeIdShortPath, Su
205205
}
206206

207207
@Override
208-
public SubmodelElement createSubmodelElement(String submodelId, SubmodelElement smElement) {
208+
public void createSubmodelElement(String submodelId, SubmodelElement smElement) {
209209
boolean isAuthorized = permissionResolver.hasPermission(Action.UPDATE, new SubmodelTargetInformation(getIdAsList(submodelId), getIdAsList(ALL_ALLOWED_WILDCARD)));
210210

211211
throwExceptionIfInsufficientPermission(isAuthorized);
212212

213-
return decorated.createSubmodelElement(submodelId, smElement);
213+
decorated.createSubmodelElement(submodelId, smElement);
214214
}
215215

216216
@Override
217-
public SubmodelElement createSubmodelElement(String submodelId, String idShortPath, SubmodelElement smElement) throws ElementDoesNotExistException {
217+
public void createSubmodelElement(String submodelId, String idShortPath, SubmodelElement smElement) throws ElementDoesNotExistException {
218218
boolean isAuthorized = permissionResolver.hasPermission(Action.UPDATE, new SubmodelTargetInformation(getIdAsList(submodelId), getIdAsList(idShortPath)));
219219

220220
throwExceptionIfInsufficientPermission(isAuthorized);
221221

222-
return decorated.createSubmodelElement(submodelId, idShortPath, smElement);
222+
decorated.createSubmodelElement(submodelId, idShortPath, smElement);
223223
}
224224

225225
@Override

basyx.submodelrepository/basyx.submodelrepository-feature-mqtt/src/main/java/org/eclipse/digitaltwin/basyx/submodelrepository/feature/mqtt/MqttSubmodelRepository.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -125,17 +125,17 @@ public void setSubmodelElementValue(String submodelId, String idShortPath, Submo
125125
}
126126

127127
@Override
128-
public SubmodelElement createSubmodelElement(String submodelId, SubmodelElement smElement) {
129-
SubmodelElement submodelElement = decorated.createSubmodelElement(submodelId, smElement);
128+
public void createSubmodelElement(String submodelId, SubmodelElement smElement) {
129+
decorated.createSubmodelElement(submodelId, smElement);
130+
SubmodelElement submodelElement = decorated.getSubmodelElement(submodelId, smElement.getIdShort());
130131
submodelElementCreated(submodelElement, getName(), submodelId, smElement.getIdShort());
131-
return submodelElement;
132132
}
133133

134134
@Override
135-
public SubmodelElement createSubmodelElement(String submodelId, String idShortPath, SubmodelElement smElement) throws ElementDoesNotExistException {
136-
SubmodelElement submodelElement = decorated.createSubmodelElement(submodelId, smElement);
135+
public void createSubmodelElement(String submodelId, String idShortPath, SubmodelElement smElement) throws ElementDoesNotExistException {
136+
decorated.createSubmodelElement(submodelId, idShortPath, smElement);
137+
SubmodelElement submodelElement = decorated.getSubmodelElement(submodelId, idShortPath);
137138
submodelElementCreated(submodelElement, getName(), submodelId, idShortPath);
138-
return submodelElement;
139139
}
140140

141141
@Override

basyx.submodelrepository/basyx.submodelrepository-feature-mqtt/src/test/java/org/eclipse/digitaltwin/basyx/submodelrepository/feature/mqtt/TestMqttSubmodelObserver.java

Lines changed: 39 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,10 @@
1010
* distribute, sublicense, and/or sell copies of the Software, and to
1111
* permit persons to whom the Software is furnished to do so, subject to
1212
* the following conditions:
13-
*
13+
*
1414
* The above copyright notice and this permission notice shall be
1515
* included in all copies or substantial portions of the Software.
16-
*
16+
*
1717
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
1818
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
1919
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
@@ -86,13 +86,13 @@ public class TestMqttSubmodelObserver {
8686
private static MqttSubmodelRepositoryTopicFactory topicFactory = new MqttSubmodelRepositoryTopicFactory(new Base64URLEncoder());
8787

8888
private static SubmodelRepository submodelRepository;
89-
89+
9090
private static JsonDeserializer deserializer = new JsonDeserializer();
9191

9292
private static final String FILE_SUBMODEL_ELEMENT_NAME = "testFile.txt";
9393
private static final String FILE_SUBMODEL_ELEMENT_CONTENT = "This is a text file.";
9494
private static String SAVED_FILE_PATH = "";
95-
95+
9696
@BeforeClass
9797
public static void setUpClass() throws MqttException, IOException {
9898
mqttBroker = startBroker();
@@ -145,9 +145,8 @@ public void createSubmodelElementEvent() throws DeserializationException {
145145
Submodel submodel = createSubmodelDummy("createSubmodelForElementEventId");
146146
submodelRepository.createSubmodel(submodel);
147147
SubmodelElement submodelElement = createSubmodelElementDummy("createSubmodelElementEventId");
148-
SubmodelElement responseSubmodelElement = submodelRepository.createSubmodelElement(submodel.getId(), submodelElement);
148+
submodelRepository.createSubmodelElement(submodel.getId(), submodelElement);
149149

150-
assertEquals(submodelElement, responseSubmodelElement);
151150
assertEquals(topicFactory.createCreateSubmodelElementTopic(submodelRepository.getName(), submodel.getId(), submodelElement.getIdShort()), listener.lastTopic);
152151
assertEquals(submodelElement, deserializeSubmodelElementPayload(listener.lastPayload));
153152
}
@@ -156,9 +155,8 @@ public void createSubmodelElementEvent() throws DeserializationException {
156155
public void updateSubmodelElementEvent() throws DeserializationException {
157156
Submodel submodel = createSubmodelDummyWithSubmodelElement("updateSubmodelForElementEventId", "updateSubmodelElementEventId");
158157
submodelRepository.createSubmodel(submodel);
159-
160158
SubmodelElement submodelElement = submodel.getSubmodelElements().get(0);
161-
159+
162160
SubmodelElementValue value = new PropertyValue("updatedValue");
163161
submodelRepository.setSubmodelElementValue(submodel.getId(), submodelElement.getIdShort(), value);
164162

@@ -170,9 +168,9 @@ public void updateSubmodelElementEvent() throws DeserializationException {
170168
public void deleteSubmodelElementEvent() throws DeserializationException {
171169
Submodel submodel = createSubmodelDummyWithSubmodelElement("deleteSubmodelForElementEventId", "deleteSubmodelElementEventId");
172170
submodelRepository.createSubmodel(submodel);
173-
171+
174172
SubmodelElement submodelElement = submodel.getSubmodelElements().get(0);
175-
173+
176174
submodelRepository.deleteSubmodelElement(submodel.getId(), submodelElement.getIdShort());
177175

178176
assertEquals(topicFactory.createDeleteSubmodelElementTopic(submodelRepository.getName(), submodel.getId(), submodelElement.getIdShort()), listener.lastTopic);
@@ -186,9 +184,8 @@ public void createSubmodelElementWithoutValueEvent() throws DeserializationExcep
186184
SubmodelElement submodelElement = createSubmodelElementDummy("noValueSubmodelElementEventId");
187185
List<Qualifier> qualifierList = createNoValueQualifierList();
188186
submodelElement.setQualifiers(qualifierList);
189-
SubmodelElement responseSubmodelElement = submodelRepository.createSubmodelElement(submodel.getId(), submodelElement);
187+
submodelRepository.createSubmodelElement(submodel.getId(), submodelElement);
190188

191-
assertEquals(submodelElement, responseSubmodelElement);
192189
assertEquals(topicFactory.createCreateSubmodelElementTopic(submodelRepository.getName(), submodel.getId(), submodelElement.getIdShort()), listener.lastTopic);
193190
assertNotEquals(submodelElement, deserializeSubmodelElementPayload(listener.lastPayload));
194191

@@ -201,46 +198,46 @@ public void createSubmodelElementWithoutValueEvent() throws DeserializationExcep
201198
public void patchSubmodelElementsEvent() throws DeserializationException, JsonMappingException, JsonProcessingException {
202199
Submodel submodel = createSubmodelDummyWithSubmodelElements("patchSubmodelForElementEventId");
203200
submodelRepository.createSubmodel(submodel);
204-
201+
205202
List<SubmodelElement> submodelElements = submodel.getSubmodelElements();
206-
203+
207204
for (int i = 0; i < submodelElements.size(); i++) {
208205
SubmodelElement submodelElement = submodelElements.get(i);
209206
submodelElement.setIdShort("patchedSubmodelElementId_" + i);
210207
}
211208

212209
submodelRepository.patchSubmodelElements(submodel.getId(), submodelElements);
213-
210+
214211
assertEquals(topicFactory.createPatchSubmodelElementsTopic(submodelRepository.getName(), submodel.getId()), listener.lastTopic);
215212
assertEquals(submodelElements, deserializeSubmodelElementsListPayload(listener.lastPayload));
216213
}
217-
214+
218215
@Test
219216
public void setFileValueEvent() throws DeserializationException, IOException {
220217
Submodel submodel = createSubmodelDummyWithFileSubmodelElement("setSubmodelFileValueEventId", "setFileValueSubmodelElementEventId");
221218
submodelRepository.createSubmodel(submodel);
222-
223-
File submodelElement = (File) submodel.getSubmodelElements().get(0);
224-
219+
220+
File submodelElement = (File) submodel.getSubmodelElements().get(0);
221+
225222
submodelRepository.setFileValue(submodel.getId(), submodelElement.getIdShort(), FILE_SUBMODEL_ELEMENT_NAME, getInputStreamOfDummyFile(FILE_SUBMODEL_ELEMENT_CONTENT));
226-
223+
227224
assertEquals(topicFactory.createUpdateFileValueTopic(submodelRepository.getName(), submodel.getId(), submodelElement.getIdShort()), listener.lastTopic);
228225
assertEquals(submodelElement, deserializeSubmodelElementPayload(listener.lastPayload));
229226
}
230-
227+
231228
@Test
232229
public void deleteFileValueEvent() throws DeserializationException, IOException {
233230
Submodel submodel = createSubmodelDummyWithFileSubmodelElement("deleteSubmodelFileValueEventId", "deleteFileValueSubmodelElementEventId");
234231
submodelRepository.createSubmodel(submodel);
235-
232+
236233
File submodelElement = (File) submodel.getSubmodelElements().get(0);
237-
234+
238235
submodelRepository.deleteFileValue(submodel.getId(), submodelElement.getIdShort());
239236

240237
assertEquals(topicFactory.createDeleteFileValueTopic(submodelRepository.getName(), submodel.getId(), submodelElement.getIdShort()), listener.lastTopic);
241238
assertEquals(submodelElement, deserializeSubmodelElementPayload(listener.lastPayload));
242239
}
243-
240+
244241
private List<Qualifier> createNoValueQualifierList() {
245242
Qualifier emptyValueQualifier = new DefaultQualifier.Builder().type(SubmodelElementSerializer.EMPTYVALUEUPDATE_TYPE).value("true").build();
246243
return Arrays.asList(emptyValueQualifier);
@@ -253,66 +250,66 @@ private Submodel deserializeSubmodelPayload(String payload) throws Deserializati
253250
private SubmodelElement deserializeSubmodelElementPayload(String payload) throws DeserializationException {
254251
return new JsonDeserializer().read(payload, SubmodelElement.class);
255252
}
256-
257-
private List<SubmodelElement> deserializeSubmodelElementsListPayload(String payload) throws DeserializationException, JsonMappingException, JsonProcessingException {
253+
254+
private List<SubmodelElement> deserializeSubmodelElementsListPayload(String payload) throws DeserializationException, JsonMappingException, JsonProcessingException {
258255
return deserializer.readList(payload, SubmodelElement.class);
259256
}
260257

261258
private Submodel createSubmodelDummy(String submodelId) {
262259
return new DefaultSubmodel.Builder().id(submodelId).build();
263260
}
264-
261+
265262
private Submodel createSubmodelDummyWithSubmodelElement(String submodelId, String submodelElementId) {
266263
List<SubmodelElement> submodelElements = new ArrayList<>();
267-
264+
268265
submodelElements.add(createSubmodelElementDummy(submodelElementId));
269-
266+
270267
return new DefaultSubmodel.Builder().id(submodelId).submodelElements(submodelElements).build();
271268
}
272-
269+
273270
private Submodel createSubmodelDummyWithFileSubmodelElement(String submodelId, String submodelElementId) {
274271
List<SubmodelElement> submodelElements = new ArrayList<>();
275-
272+
276273
submodelElements.add(createFileSubmodelElement(submodelElementId));
277-
274+
278275
return new DefaultSubmodel.Builder().id(submodelId).submodelElements(submodelElements).build();
279276
}
280-
277+
281278
private Submodel createSubmodelDummyWithSubmodelElements(String submodelId) {
282279
List<SubmodelElement> submodelElements = createSubmodelElementsListDummy(2);
283-
280+
284281
return new DefaultSubmodel.Builder().id(submodelId).submodelElements(submodelElements).build();
285282
}
286283

287284
private SubmodelElement createSubmodelElementDummy(String submodelElementId) {
288285
Property defaultProp = new DefaultProperty.Builder().idShort(submodelElementId).value("defaultValue").build();
289-
286+
290287
return new DefaultProperty.Builder().idShort(submodelElementId).value("defaultValue").build();
291288
}
292-
289+
293290
public File createFileSubmodelElement(String submodelElementId) {
294291
return new DefaultFile.Builder().idShort(submodelElementId).value(SAVED_FILE_PATH).contentType("text/plain").build();
295292
}
296-
293+
297294
private static InputStream getInputStreamOfDummyFile(String fileContent) throws FileNotFoundException, IOException {
298295
return new ByteArrayInputStream(fileContent.getBytes());
299296
}
300-
297+
301298
private List<SubmodelElement> createSubmodelElementsListDummy(int count) {
302299
List<SubmodelElement> submodelElements = new ArrayList<SubmodelElement>();
303-
300+
304301
for (int i = 0; i < count; i++) {
305302
submodelElements.add(createSubmodelElementDummy("submodelElementId_" + i));
306303
}
307-
304+
308305
return submodelElements;
309306
}
310307

311308
private static SubmodelRepository createMqttSubmodelRepository(MqttClient client) throws FileHandlingException, FileNotFoundException, IOException {
312309
FileRepository fileRepository = new InMemoryFileRepository();
313-
310+
314311
SAVED_FILE_PATH = fileRepository.save(new FileMetadata(FILE_SUBMODEL_ELEMENT_NAME, "", getInputStreamOfDummyFile(FILE_SUBMODEL_ELEMENT_CONTENT)));
315-
312+
316313
SubmodelRepositoryFactory repoFactory = new SimpleSubmodelRepositoryFactory(new SubmodelInMemoryBackendProvider(), new InMemorySubmodelServiceFactory(fileRepository));
317314

318315
return new MqttSubmodelRepositoryFactory(repoFactory, client, new MqttSubmodelRepositoryTopicFactory(new Base64URLEncoder())).create();

basyx.submodelrepository/basyx.submodelrepository-feature-operation-delegation/src/main/java/org/eclipse/digitaltwin/basyx/submodelrepository/feature/operation/delegation/OperationDelegationSubmodelRepository.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -117,13 +117,13 @@ public void setSubmodelElementValue(String submodelId, String smeIdShort, Submod
117117
}
118118

119119
@Override
120-
public SubmodelElement createSubmodelElement(String submodelId, SubmodelElement smElement) {
121-
return decorated.createSubmodelElement(submodelId, smElement);
120+
public void createSubmodelElement(String submodelId, SubmodelElement smElement) {
121+
decorated.createSubmodelElement(submodelId, smElement);
122122
}
123123

124124
@Override
125-
public SubmodelElement createSubmodelElement(String submodelId, String idShortPath, SubmodelElement smElement) throws ElementDoesNotExistException {
126-
return decorated.createSubmodelElement(submodelId, idShortPath, smElement);
125+
public void createSubmodelElement(String submodelId, String idShortPath, SubmodelElement smElement) throws ElementDoesNotExistException {
126+
decorated.createSubmodelElement(submodelId, idShortPath, smElement);
127127
}
128128

129129
@Override

basyx.submodelrepository/basyx.submodelrepository-feature-registry-integration/src/main/java/org/eclipse/digitaltwin/basyx/submodelrepository/feature/registry/integration/RegistryIntegrationSubmodelRepository.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -134,13 +134,13 @@ public void setSubmodelElementValue(String submodelId, String idShortPath, Submo
134134
}
135135

136136
@Override
137-
public SubmodelElement createSubmodelElement(String submodelId, SubmodelElement submodelElement) {
138-
return decorated.createSubmodelElement(submodelId, submodelElement);
137+
public void createSubmodelElement(String submodelId, SubmodelElement submodelElement) {
138+
decorated.createSubmodelElement(submodelId, submodelElement);
139139
}
140140

141141
@Override
142-
public SubmodelElement createSubmodelElement(String submodelId, String idShortPath, SubmodelElement submodelElement) throws ElementDoesNotExistException {
143-
return decorated.createSubmodelElement(submodelId, idShortPath, submodelElement);
142+
public void createSubmodelElement(String submodelId, String idShortPath, SubmodelElement submodelElement) throws ElementDoesNotExistException {
143+
decorated.createSubmodelElement(submodelId, idShortPath, submodelElement);
144144
}
145145

146146
@Override

0 commit comments

Comments
 (0)