Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -197,21 +197,23 @@ public void setSubmodelElementValue(String submodelId, String smeIdShort, Submod
}

@Override
public void createSubmodelElement(String submodelId, SubmodelElement smElement) {
public SubmodelElement createSubmodelElement(String submodelId, SubmodelElement smElement) {
SubmodelService submodelService = getSubmodelServiceOrThrow(submodelId);

submodelService.createSubmodelElement(smElement);
SubmodelElement createdSME = submodelService.createSubmodelElement(smElement);

updateSubmodel(submodelId, submodelService.getSubmodel());
return createdSME;
}

@Override
public void createSubmodelElement(String submodelId, String idShortPath, SubmodelElement smElement) throws ElementDoesNotExistException {
public SubmodelElement createSubmodelElement(String submodelId, String idShortPath, SubmodelElement smElement) throws ElementDoesNotExistException {
SubmodelService submodelService = getSubmodelServiceOrThrow(submodelId);

submodelService.createSubmodelElement(idShortPath, smElement);
SubmodelElement createdSME = submodelService.createSubmodelElement(idShortPath, smElement);

updateSubmodel(submodelId, submodelService.getSubmodel());
return createdSME;
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -196,13 +196,13 @@ public void setSubmodelElementValue(String submodelId, String smeIdShort, Submod
}

@Override
public void createSubmodelElement(String submodelId, SubmodelElement smElement) {
getConnectedSubmodelService(submodelId).createSubmodelElement(smElement);
public SubmodelElement createSubmodelElement(String submodelId, SubmodelElement smElement) {
return getConnectedSubmodelService(submodelId).createSubmodelElement(smElement);
}

@Override
public void createSubmodelElement(String submodelId, String idShortPath, SubmodelElement smElement) throws ElementDoesNotExistException {
getConnectedSubmodelService(submodelId).createSubmodelElement(idShortPath, smElement);
public SubmodelElement createSubmodelElement(String submodelId, String idShortPath, SubmodelElement smElement) throws ElementDoesNotExistException {
return getConnectedSubmodelService(submodelId).createSubmodelElement(idShortPath, smElement);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -164,7 +164,7 @@ public interface SubmodelRepository {
* @param smElement
* the SubmodelElement
*/
public void createSubmodelElement(String submodelId, SubmodelElement smElement);
public SubmodelElement createSubmodelElement(String submodelId, SubmodelElement smElement);

/**
* Creates a nested SubmodelElement
Expand All @@ -176,7 +176,7 @@ public interface SubmodelRepository {
* @param smElement
* the SubmodelElement
*/
public void createSubmodelElement(String submodelId, String idShortPath, SubmodelElement smElement) throws ElementDoesNotExistException;
public SubmodelElement createSubmodelElement(String submodelId, String idShortPath, SubmodelElement smElement) throws ElementDoesNotExistException;

/**
* Deletes a SubmodelElement
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,14 +86,14 @@ public void setSubmodelElementValue(String idShortPath, SubmodelElementValue val
}

@Override
public void createSubmodelElement(SubmodelElement submodelElement) {
repoApi.createSubmodelElement(submodelId, submodelElement);
public SubmodelElement createSubmodelElement(SubmodelElement submodelElement) {
return repoApi.createSubmodelElement(submodelId, submodelElement);
}

@Override
public void createSubmodelElement(String idShortPath, SubmodelElement submodelElement)
public SubmodelElement createSubmodelElement(String idShortPath, SubmodelElement submodelElement)
throws ElementDoesNotExistException {
repoApi.createSubmodelElement(submodelId, idShortPath, submodelElement);
return repoApi.createSubmodelElement(submodelId, idShortPath, submodelElement);

}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -205,21 +205,21 @@ public void setSubmodelElementValue(String submodelId, String smeIdShortPath, Su
}

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

throwExceptionIfInsufficientPermission(isAuthorized);

decorated.createSubmodelElement(submodelId, smElement);
return decorated.createSubmodelElement(submodelId, smElement);
}

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

throwExceptionIfInsufficientPermission(isAuthorized);

decorated.createSubmodelElement(submodelId, idShortPath, smElement);
return decorated.createSubmodelElement(submodelId, idShortPath, smElement);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -125,17 +125,17 @@ public void setSubmodelElementValue(String submodelId, String idShortPath, Submo
}

@Override
public void createSubmodelElement(String submodelId, SubmodelElement smElement) {
decorated.createSubmodelElement(submodelId, smElement);
SubmodelElement submodelElement = decorated.getSubmodelElement(submodelId, smElement.getIdShort());
public SubmodelElement createSubmodelElement(String submodelId, SubmodelElement smElement) {
SubmodelElement submodelElement = decorated.createSubmodelElement(submodelId, smElement);
submodelElementCreated(submodelElement, getName(), submodelId, smElement.getIdShort());
return submodelElement;
}

@Override
public void createSubmodelElement(String submodelId, String idShortPath, SubmodelElement smElement) throws ElementDoesNotExistException {
decorated.createSubmodelElement(submodelId, idShortPath, smElement);
SubmodelElement submodelElement = decorated.getSubmodelElement(submodelId, idShortPath);
public SubmodelElement createSubmodelElement(String submodelId, String idShortPath, SubmodelElement smElement) throws ElementDoesNotExistException {
SubmodelElement submodelElement = decorated.createSubmodelElement(submodelId, smElement);
submodelElementCreated(submodelElement, getName(), submodelId, idShortPath);
return submodelElement;
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,10 @@
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
Expand Down Expand Up @@ -86,13 +86,13 @@ public class TestMqttSubmodelObserver {
private static MqttSubmodelRepositoryTopicFactory topicFactory = new MqttSubmodelRepositoryTopicFactory(new Base64URLEncoder());

private static SubmodelRepository submodelRepository;

private static JsonDeserializer deserializer = new JsonDeserializer();

private static final String FILE_SUBMODEL_ELEMENT_NAME = "testFile.txt";
private static final String FILE_SUBMODEL_ELEMENT_CONTENT = "This is a text file.";
private static String SAVED_FILE_PATH = "";

@BeforeClass
public static void setUpClass() throws MqttException, IOException {
mqttBroker = startBroker();
Expand Down Expand Up @@ -145,8 +145,9 @@ public void createSubmodelElementEvent() throws DeserializationException {
Submodel submodel = createSubmodelDummy("createSubmodelForElementEventId");
submodelRepository.createSubmodel(submodel);
SubmodelElement submodelElement = createSubmodelElementDummy("createSubmodelElementEventId");
submodelRepository.createSubmodelElement(submodel.getId(), submodelElement);
SubmodelElement responseSubmodelElement = submodelRepository.createSubmodelElement(submodel.getId(), submodelElement);

assertEquals(submodelElement, responseSubmodelElement);
assertEquals(topicFactory.createCreateSubmodelElementTopic(submodelRepository.getName(), submodel.getId(), submodelElement.getIdShort()), listener.lastTopic);
assertEquals(submodelElement, deserializeSubmodelElementPayload(listener.lastPayload));
}
Expand All @@ -155,8 +156,9 @@ public void createSubmodelElementEvent() throws DeserializationException {
public void updateSubmodelElementEvent() throws DeserializationException {
Submodel submodel = createSubmodelDummyWithSubmodelElement("updateSubmodelForElementEventId", "updateSubmodelElementEventId");
submodelRepository.createSubmodel(submodel);

SubmodelElement submodelElement = submodel.getSubmodelElements().get(0);

SubmodelElementValue value = new PropertyValue("updatedValue");
submodelRepository.setSubmodelElementValue(submodel.getId(), submodelElement.getIdShort(), value);

Expand All @@ -168,9 +170,9 @@ public void updateSubmodelElementEvent() throws DeserializationException {
public void deleteSubmodelElementEvent() throws DeserializationException {
Submodel submodel = createSubmodelDummyWithSubmodelElement("deleteSubmodelForElementEventId", "deleteSubmodelElementEventId");
submodelRepository.createSubmodel(submodel);

SubmodelElement submodelElement = submodel.getSubmodelElements().get(0);

submodelRepository.deleteSubmodelElement(submodel.getId(), submodelElement.getIdShort());

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

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

Expand All @@ -198,46 +201,46 @@ public void createSubmodelElementWithoutValueEvent() throws DeserializationExcep
public void patchSubmodelElementsEvent() throws DeserializationException, JsonMappingException, JsonProcessingException {
Submodel submodel = createSubmodelDummyWithSubmodelElements("patchSubmodelForElementEventId");
submodelRepository.createSubmodel(submodel);

List<SubmodelElement> submodelElements = submodel.getSubmodelElements();

for (int i = 0; i < submodelElements.size(); i++) {
SubmodelElement submodelElement = submodelElements.get(i);
submodelElement.setIdShort("patchedSubmodelElementId_" + i);
}

submodelRepository.patchSubmodelElements(submodel.getId(), submodelElements);

assertEquals(topicFactory.createPatchSubmodelElementsTopic(submodelRepository.getName(), submodel.getId()), listener.lastTopic);
assertEquals(submodelElements, deserializeSubmodelElementsListPayload(listener.lastPayload));
}

@Test
public void setFileValueEvent() throws DeserializationException, IOException {
Submodel submodel = createSubmodelDummyWithFileSubmodelElement("setSubmodelFileValueEventId", "setFileValueSubmodelElementEventId");
submodelRepository.createSubmodel(submodel);
File submodelElement = (File) submodel.getSubmodelElements().get(0);

File submodelElement = (File) submodel.getSubmodelElements().get(0);

submodelRepository.setFileValue(submodel.getId(), submodelElement.getIdShort(), FILE_SUBMODEL_ELEMENT_NAME, getInputStreamOfDummyFile(FILE_SUBMODEL_ELEMENT_CONTENT));

assertEquals(topicFactory.createUpdateFileValueTopic(submodelRepository.getName(), submodel.getId(), submodelElement.getIdShort()), listener.lastTopic);
assertEquals(submodelElement, deserializeSubmodelElementPayload(listener.lastPayload));
}

@Test
public void deleteFileValueEvent() throws DeserializationException, IOException {
Submodel submodel = createSubmodelDummyWithFileSubmodelElement("deleteSubmodelFileValueEventId", "deleteFileValueSubmodelElementEventId");
submodelRepository.createSubmodel(submodel);

File submodelElement = (File) submodel.getSubmodelElements().get(0);

submodelRepository.deleteFileValue(submodel.getId(), submodelElement.getIdShort());

assertEquals(topicFactory.createDeleteFileValueTopic(submodelRepository.getName(), submodel.getId(), submodelElement.getIdShort()), listener.lastTopic);
assertEquals(submodelElement, deserializeSubmodelElementPayload(listener.lastPayload));
}

private List<Qualifier> createNoValueQualifierList() {
Qualifier emptyValueQualifier = new DefaultQualifier.Builder().type(SubmodelElementSerializer.EMPTYVALUEUPDATE_TYPE).value("true").build();
return Arrays.asList(emptyValueQualifier);
Expand All @@ -250,66 +253,66 @@ private Submodel deserializeSubmodelPayload(String payload) throws Deserializati
private SubmodelElement deserializeSubmodelElementPayload(String payload) throws DeserializationException {
return new JsonDeserializer().read(payload, SubmodelElement.class);
}
private List<SubmodelElement> deserializeSubmodelElementsListPayload(String payload) throws DeserializationException, JsonMappingException, JsonProcessingException {

private List<SubmodelElement> deserializeSubmodelElementsListPayload(String payload) throws DeserializationException, JsonMappingException, JsonProcessingException {
return deserializer.readList(payload, SubmodelElement.class);
}

private Submodel createSubmodelDummy(String submodelId) {
return new DefaultSubmodel.Builder().id(submodelId).build();
}

private Submodel createSubmodelDummyWithSubmodelElement(String submodelId, String submodelElementId) {
List<SubmodelElement> submodelElements = new ArrayList<>();

submodelElements.add(createSubmodelElementDummy(submodelElementId));

return new DefaultSubmodel.Builder().id(submodelId).submodelElements(submodelElements).build();
}

private Submodel createSubmodelDummyWithFileSubmodelElement(String submodelId, String submodelElementId) {
List<SubmodelElement> submodelElements = new ArrayList<>();

submodelElements.add(createFileSubmodelElement(submodelElementId));

return new DefaultSubmodel.Builder().id(submodelId).submodelElements(submodelElements).build();
}

private Submodel createSubmodelDummyWithSubmodelElements(String submodelId) {
List<SubmodelElement> submodelElements = createSubmodelElementsListDummy(2);

return new DefaultSubmodel.Builder().id(submodelId).submodelElements(submodelElements).build();
}

private SubmodelElement createSubmodelElementDummy(String submodelElementId) {
Property defaultProp = new DefaultProperty.Builder().idShort(submodelElementId).value("defaultValue").build();

return new DefaultProperty.Builder().idShort(submodelElementId).value("defaultValue").build();
}

public File createFileSubmodelElement(String submodelElementId) {
return new DefaultFile.Builder().idShort(submodelElementId).value(SAVED_FILE_PATH).contentType("text/plain").build();
}

private static InputStream getInputStreamOfDummyFile(String fileContent) throws FileNotFoundException, IOException {
return new ByteArrayInputStream(fileContent.getBytes());
}

private List<SubmodelElement> createSubmodelElementsListDummy(int count) {
List<SubmodelElement> submodelElements = new ArrayList<SubmodelElement>();

for (int i = 0; i < count; i++) {
submodelElements.add(createSubmodelElementDummy("submodelElementId_" + i));
}

return submodelElements;
}

private static SubmodelRepository createMqttSubmodelRepository(MqttClient client) throws FileHandlingException, FileNotFoundException, IOException {
FileRepository fileRepository = new InMemoryFileRepository();

SAVED_FILE_PATH = fileRepository.save(new FileMetadata(FILE_SUBMODEL_ELEMENT_NAME, "", getInputStreamOfDummyFile(FILE_SUBMODEL_ELEMENT_CONTENT)));

SubmodelRepositoryFactory repoFactory = new SimpleSubmodelRepositoryFactory(new SubmodelInMemoryBackendProvider(), new InMemorySubmodelServiceFactory(fileRepository));

return new MqttSubmodelRepositoryFactory(repoFactory, client, new MqttSubmodelRepositoryTopicFactory(new Base64URLEncoder())).create();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -117,13 +117,13 @@ public void setSubmodelElementValue(String submodelId, String smeIdShort, Submod
}

@Override
public void createSubmodelElement(String submodelId, SubmodelElement smElement) {
decorated.createSubmodelElement(submodelId, smElement);
public SubmodelElement createSubmodelElement(String submodelId, SubmodelElement smElement) {
return decorated.createSubmodelElement(submodelId, smElement);
}

@Override
public void createSubmodelElement(String submodelId, String idShortPath, SubmodelElement smElement) throws ElementDoesNotExistException {
decorated.createSubmodelElement(submodelId, idShortPath, smElement);
public SubmodelElement createSubmodelElement(String submodelId, String idShortPath, SubmodelElement smElement) throws ElementDoesNotExistException {
return decorated.createSubmodelElement(submodelId, idShortPath, smElement);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -134,13 +134,13 @@ public void setSubmodelElementValue(String submodelId, String idShortPath, Submo
}

@Override
public void createSubmodelElement(String submodelId, SubmodelElement submodelElement) {
decorated.createSubmodelElement(submodelId, submodelElement);
public SubmodelElement createSubmodelElement(String submodelId, SubmodelElement submodelElement) {
return decorated.createSubmodelElement(submodelId, submodelElement);
}

@Override
public void createSubmodelElement(String submodelId, String idShortPath, SubmodelElement submodelElement) throws ElementDoesNotExistException {
decorated.createSubmodelElement(submodelId, idShortPath, submodelElement);
public SubmodelElement createSubmodelElement(String submodelId, String idShortPath, SubmodelElement submodelElement) throws ElementDoesNotExistException {
return decorated.createSubmodelElement(submodelId, idShortPath, submodelElement);
}

@Override
Expand Down
Loading