diff --git a/README b/README
index 9a501fae..849071ac 100644
--- a/README
+++ b/README
@@ -1,6 +1,6 @@
# Eclipse BaSyx Java Components [](https://hub.docker.com/search?q=eclipsebasyx)
[](https://www.eclipse.org/basyx/)
-
+
[](https://javadoc.io/doc/org.eclipse.basyx/basyx.components.AASServer) AAS Server
[](https://javadoc.io/doc/org.eclipse.basyx/basyx.components.registry) AAS Registry
diff --git a/basyx.aasrepository-backend-inmemory/pom.xml b/basyx.aasrepository-backend-inmemory/pom.xml
index c8e80dec..5945ab50 100644
--- a/basyx.aasrepository-backend-inmemory/pom.xml
+++ b/basyx.aasrepository-backend-inmemory/pom.xml
@@ -37,6 +37,14 @@
tests
test
+
+
+ org.eclipse.digitaltwin.basyx
+ basyx.aasservice-core
+ 2.0.0-SNAPSHOT
+ tests
+ test
+
org.eclipse.digitaltwin.basyx
diff --git a/basyx.aasrepository-backend-inmemory/src/main/java/org/eclipse/digitaltwin/basyx/aasrepository/InMemoryAasRepository.java b/basyx.aasrepository-backend-inmemory/src/main/java/org/eclipse/digitaltwin/basyx/aasrepository/InMemoryAasRepository.java
index eccf7026..dfd3e0c0 100644
--- a/basyx.aasrepository-backend-inmemory/src/main/java/org/eclipse/digitaltwin/basyx/aasrepository/InMemoryAasRepository.java
+++ b/basyx.aasrepository-backend-inmemory/src/main/java/org/eclipse/digitaltwin/basyx/aasrepository/InMemoryAasRepository.java
@@ -30,6 +30,7 @@
import java.util.stream.Collectors;
import org.eclipse.digitaltwin.aas4j.v3.model.AssetAdministrationShell;
+import org.eclipse.digitaltwin.aas4j.v3.model.AssetInformation;
import org.eclipse.digitaltwin.aas4j.v3.model.Reference;
import org.eclipse.digitaltwin.basyx.aasservice.AasService;
import org.eclipse.digitaltwin.basyx.aasservice.AasServiceFactory;
@@ -121,4 +122,16 @@ public void removeSubmodelReference(String aasId, String submodelId) {
aasServices.get(aasId).removeSubmodelReference(submodelId);
}
+ @Override
+ public void setAssetInformation(String aasId, AssetInformation aasInfo) throws ElementDoesNotExistException {
+ throwIfAasDoesNotExist(aasId);
+ aasServices.get(aasId).getAAS().setAssetInformation(aasInfo);
+ }
+
+ @Override
+ public AssetInformation getAssetInformation(String aasId) throws ElementDoesNotExistException{
+ throwIfAasDoesNotExist(aasId);
+ return aasServices.get(aasId).getAAS().getAssetInformation();
+ }
+
}
diff --git a/basyx.aasrepository-backend-mongodb/src/main/java/org/eclipse/digitaltwin/basyx/aasrepository/MongoDBAasRepository.java b/basyx.aasrepository-backend-mongodb/src/main/java/org/eclipse/digitaltwin/basyx/aasrepository/MongoDBAasRepository.java
index 9dd9a653..3d65ecdf 100644
--- a/basyx.aasrepository-backend-mongodb/src/main/java/org/eclipse/digitaltwin/basyx/aasrepository/MongoDBAasRepository.java
+++ b/basyx.aasrepository-backend-mongodb/src/main/java/org/eclipse/digitaltwin/basyx/aasrepository/MongoDBAasRepository.java
@@ -27,6 +27,7 @@
import java.util.List;
import org.eclipse.digitaltwin.aas4j.v3.model.AssetAdministrationShell;
+import org.eclipse.digitaltwin.aas4j.v3.model.AssetInformation;
import org.eclipse.digitaltwin.aas4j.v3.model.Reference;
import org.eclipse.digitaltwin.basyx.aasservice.backend.InMemoryAasService;
import org.eclipse.digitaltwin.basyx.core.exceptions.CollidingIdentifierException;
@@ -125,4 +126,18 @@ public void removeSubmodelReference(String aasId, String submodelId) {
updateAas(aasId, service.getAAS());
}
+
+ @Override
+ public void setAssetInformation(String aasId, AssetInformation aasInfo) throws ElementDoesNotExistException {
+ InMemoryAasService service = new InMemoryAasService(getAas(aasId));
+ service.setAssetInformation(aasInfo);
+
+ updateAas(aasId, service.getAAS());
+ }
+
+ @Override
+ public AssetInformation getAssetInformation(String aasId) throws ElementDoesNotExistException{
+ return this.getAas(aasId).getAssetInformation();
+ }
+
}
diff --git a/basyx.aasrepository-core/pom.xml b/basyx.aasrepository-core/pom.xml
index 5a96fba0..699f1dab 100644
--- a/basyx.aasrepository-core/pom.xml
+++ b/basyx.aasrepository-core/pom.xml
@@ -23,6 +23,14 @@
basyx.aasservice-core
2.0.0-SNAPSHOT
+
+
+ org.eclipse.digitaltwin.basyx
+ basyx.aasservice-core
+ 2.0.0-SNAPSHOT
+ tests
+ test
+
diff --git a/basyx.aasrepository-core/src/main/java/org/eclipse/digitaltwin/basyx/aasrepository/AasRepository.java b/basyx.aasrepository-core/src/main/java/org/eclipse/digitaltwin/basyx/aasrepository/AasRepository.java
index 6116b3c0..75ad714f 100644
--- a/basyx.aasrepository-core/src/main/java/org/eclipse/digitaltwin/basyx/aasrepository/AasRepository.java
+++ b/basyx.aasrepository-core/src/main/java/org/eclipse/digitaltwin/basyx/aasrepository/AasRepository.java
@@ -28,6 +28,7 @@
import java.util.List;
import org.eclipse.digitaltwin.aas4j.v3.model.AssetAdministrationShell;
+import org.eclipse.digitaltwin.aas4j.v3.model.AssetInformation;
import org.eclipse.digitaltwin.aas4j.v3.model.Reference;
import org.eclipse.digitaltwin.basyx.core.exceptions.CollidingIdentifierException;
import org.eclipse.digitaltwin.basyx.core.exceptions.ElementDoesNotExistException;
@@ -100,6 +101,26 @@ public interface AasRepository {
*/
public void removeSubmodelReference(String aasId, String submodelId);
+ /**
+ * Sets the asset-information of a specific AAS
+ *
+ * @param aasId
+ * the id of the AAS
+ *
+ * @return the requested Asset-Information of the specified AAS
+ */
+ public void setAssetInformation(String aasId, AssetInformation aasInfo) throws ElementDoesNotExistException;
+
+ /**
+ * Retrieves the asset-information of a specific AAS
+ *
+ * @param aasId
+ * the id of the AAS
+ *
+ * @return the requested AAS
+ */
+ public AssetInformation getAssetInformation(String aasId) throws ElementDoesNotExistException;
+
public default String getName() {
return "aasRepository-default-name";
}
diff --git a/basyx.aasrepository-core/src/test/java/org/eclipse/digitaltwin/basyx/aasrepository/AasRepositorySuite.java b/basyx.aasrepository-core/src/test/java/org/eclipse/digitaltwin/basyx/aasrepository/AasRepositorySuite.java
index 01c7f0fc..ec7e48f8 100644
--- a/basyx.aasrepository-core/src/test/java/org/eclipse/digitaltwin/basyx/aasrepository/AasRepositorySuite.java
+++ b/basyx.aasrepository-core/src/test/java/org/eclipse/digitaltwin/basyx/aasrepository/AasRepositorySuite.java
@@ -35,9 +35,12 @@
import java.util.List;
import org.eclipse.digitaltwin.aas4j.v3.model.AssetAdministrationShell;
+import org.eclipse.digitaltwin.aas4j.v3.model.AssetInformation;
+import org.eclipse.digitaltwin.aas4j.v3.model.AssetKind;
import org.eclipse.digitaltwin.aas4j.v3.model.KeyTypes;
import org.eclipse.digitaltwin.aas4j.v3.model.Reference;
import org.eclipse.digitaltwin.aas4j.v3.model.impl.DefaultAssetAdministrationShell;
+import org.eclipse.digitaltwin.aas4j.v3.model.impl.DefaultAssetInformation;
import org.eclipse.digitaltwin.aas4j.v3.model.impl.DefaultKey;
import org.eclipse.digitaltwin.aas4j.v3.model.impl.DefaultReference;
import org.eclipse.digitaltwin.basyx.core.exceptions.CollidingIdentifierException;
@@ -56,6 +59,7 @@ public abstract class AasRepositorySuite {
private static final String AAS_1_ID = "aas1/s";
private AssetAdministrationShell aas1;
private AssetAdministrationShell aas2;
+ private AssetAdministrationShell aas3;
private List preconfiguredShells = new ArrayList<>();
private static final String DUMMY_SUBMODEL_ID = "dummySubmodelId";
@@ -71,8 +75,9 @@ public void createAasRepoWithDummyAas() {
aas1 = new DefaultAssetAdministrationShell.Builder().id(AAS_1_ID).submodels(createDummyReference(DUMMY_SUBMODEL_ID))
.build();
- aas2 = new DefaultAssetAdministrationShell.Builder().id("aas2")
- .build();
+ aas2 = new DefaultAssetAdministrationShell.Builder().id("aas2").build();
+ AssetInformation assetInfo = createDummyAssetInformation();
+ aas2.setAssetInformation(assetInfo);
preconfiguredShells.add(aas1);
preconfiguredShells.add(aas2);
@@ -182,9 +187,36 @@ public void updateNonExistingAas() {
aasRepo.updateAas("nonExisting", aas1);
}
+ @Test
+ public void getAssetInformation() {
+ assertEquals(aas2.getAssetInformation(), aasRepo.getAssetInformation(aas2.getId()));
+ }
+
+ @Test(expected = ElementDoesNotExistException.class)
+ public void getAssetInformationOfNonExistingAas() {
+ aasRepo.getAssetInformation("nonExisting");
+ }
+
+ @Test
+ public void setAssetInformation() {
+ AssetInformation assetInfo = createDummyAssetInformation();
+ aasRepo.setAssetInformation(aas2.getId(), assetInfo);
+ assertEquals(assetInfo, aasRepo.getAssetInformation(aas2.getId()));
+ }
+
+ @Test(expected = ElementDoesNotExistException.class)
+ public void setAssetInformationOfNonExistingAas() {
+ aasRepo.setAssetInformation("nonExisting", createDummyAssetInformation());
+ }
+
public static Reference createDummyReference(String submodelId) {
return new DefaultReference.Builder()
.keys(new DefaultKey.Builder().type(KeyTypes.SUBMODEL).value(submodelId).build()).build();
}
+ private AssetInformation createDummyAssetInformation() {
+ return new DefaultAssetInformation.Builder().assetKind(AssetKind.INSTANCE).globalAssetId(
+ new DefaultReference.Builder().keys(new DefaultKey.Builder().value("assetIDTestKey").build()).build())
+ .build();
+ }
}
diff --git a/basyx.aasrepository-feature-mqtt/src/main/java/org/eclipse/digitaltwin/basyx/aasrepository/feature/mqtt/MqttAasRepository.java b/basyx.aasrepository-feature-mqtt/src/main/java/org/eclipse/digitaltwin/basyx/aasrepository/feature/mqtt/MqttAasRepository.java
index 12582b5d..2039bce4 100644
--- a/basyx.aasrepository-feature-mqtt/src/main/java/org/eclipse/digitaltwin/basyx/aasrepository/feature/mqtt/MqttAasRepository.java
+++ b/basyx.aasrepository-feature-mqtt/src/main/java/org/eclipse/digitaltwin/basyx/aasrepository/feature/mqtt/MqttAasRepository.java
@@ -30,6 +30,7 @@
import org.eclipse.digitaltwin.aas4j.v3.dataformat.SerializationException;
import org.eclipse.digitaltwin.aas4j.v3.dataformat.json.JsonSerializer;
import org.eclipse.digitaltwin.aas4j.v3.model.AssetAdministrationShell;
+import org.eclipse.digitaltwin.aas4j.v3.model.AssetInformation;
import org.eclipse.digitaltwin.aas4j.v3.model.Reference;
import org.eclipse.digitaltwin.basyx.aasrepository.AasRepository;
import org.eclipse.digitaltwin.basyx.core.exceptions.CollidingIdentifierException;
@@ -111,6 +112,16 @@ public void removeSubmodelReference(String aasId, String submodelId) {
decorated.removeSubmodelReference(aasId, submodelId);
}
+ @Override
+ public void setAssetInformation(String aasId, AssetInformation aasInfo) throws ElementDoesNotExistException {
+ decorated.setAssetInformation(aasId, aasInfo);
+ }
+
+ @Override
+ public AssetInformation getAssetInformation(String aasId) throws ElementDoesNotExistException{
+ return decorated.getAssetInformation(aasId);
+ }
+
private void aasCreated(AssetAdministrationShell shell, String repoId) {
sendMqttMessage(topicFactory.createCreateAASTopic(repoId), serializePayload(shell));
}
@@ -159,4 +170,5 @@ private MqttMessage createMqttMessage(String payload) {
return new MqttMessage(payload.getBytes());
}
}
+
}
diff --git a/basyx.aasrepository-http/src/main/java/org/eclipse/digitaltwin/basyx/aasrepository/http/AasRepositoryApiHTTPController.java b/basyx.aasrepository-http/src/main/java/org/eclipse/digitaltwin/basyx/aasrepository/http/AasRepositoryApiHTTPController.java
index 5b39d9f4..9aadcc95 100644
--- a/basyx.aasrepository-http/src/main/java/org/eclipse/digitaltwin/basyx/aasrepository/http/AasRepositoryApiHTTPController.java
+++ b/basyx.aasrepository-http/src/main/java/org/eclipse/digitaltwin/basyx/aasrepository/http/AasRepositoryApiHTTPController.java
@@ -29,10 +29,10 @@
import java.util.ArrayList;
import java.util.List;
-import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;
import org.eclipse.digitaltwin.aas4j.v3.model.AssetAdministrationShell;
+import org.eclipse.digitaltwin.aas4j.v3.model.AssetInformation;
import org.eclipse.digitaltwin.aas4j.v3.model.Reference;
import org.eclipse.digitaltwin.basyx.aasrepository.AasRepository;
import org.eclipse.digitaltwin.basyx.http.Base64UrlEncodedIdentifier;
@@ -59,15 +59,12 @@ public class AasRepositoryApiHTTPController implements AasRepositoryHTTPApi {
private static final Logger log = LoggerFactory.getLogger(AasRepositoryApiHTTPController.class);
private final ObjectMapper objectMapper;
-
- private final HttpServletRequest request;
private final AasRepository aasRepository;
@Autowired
- public AasRepositoryApiHTTPController(ObjectMapper objectMapper, HttpServletRequest request, AasRepository aasRepository) {
+ public AasRepositoryApiHTTPController(ObjectMapper objectMapper, AasRepository aasRepository) {
this.objectMapper = objectMapper;
- this.request = request;
this.aasRepository = aasRepository;
}
@@ -140,4 +137,19 @@ public ResponseEntity> getAllAssetAdministrationS
@Parameter(in = ParameterIn.QUERY, description = "The Asset Administration Shell’s IdShort", schema = @Schema()) @Valid @RequestParam(value = "idShort", required = false) String idShort) {
return new ResponseEntity>(new ArrayList<>(aasRepository.getAllAas()), HttpStatus.OK);
}
+
+ @Override
+ public ResponseEntity postAssetInformationByAasId(
+ @Parameter(in = ParameterIn.PATH, description = "The Asset Administration Shell’s unique id (BASE64-URL-encoded)", required = true, schema = @Schema()) @PathVariable("aasIdentifier") Base64UrlEncodedIdentifier aasIdentifier,
+ @Parameter(in = ParameterIn.DEFAULT, description = "Asset Information object", required = true, schema = @Schema()) @Valid @RequestBody AssetInformation body) {
+ aasRepository.setAssetInformation(aasIdentifier.getIdentifier(), body);
+ return new ResponseEntity(HttpStatus.OK);
+ }
+
+ @Override
+ public ResponseEntity getAssetInformationByAasId(
+ @Parameter(in = ParameterIn.PATH, description = "The Asset Administration Shell’s unique id (BASE64-URL-encoded)", required = true, schema = @Schema()) @PathVariable("aasIdentifier") Base64UrlEncodedIdentifier aasIdentifier) {
+ return new ResponseEntity(aasRepository.getAssetInformation(aasIdentifier.getIdentifier()), HttpStatus.OK);
+ }
+
}
diff --git a/basyx.aasrepository-http/src/main/java/org/eclipse/digitaltwin/basyx/aasrepository/http/AasRepositoryHTTPApi.java b/basyx.aasrepository-http/src/main/java/org/eclipse/digitaltwin/basyx/aasrepository/http/AasRepositoryHTTPApi.java
index 229b0c8b..76f1b6cb 100644
--- a/basyx.aasrepository-http/src/main/java/org/eclipse/digitaltwin/basyx/aasrepository/http/AasRepositoryHTTPApi.java
+++ b/basyx.aasrepository-http/src/main/java/org/eclipse/digitaltwin/basyx/aasrepository/http/AasRepositoryHTTPApi.java
@@ -36,6 +36,7 @@
import javax.validation.Valid;
import org.eclipse.digitaltwin.aas4j.v3.model.AssetAdministrationShell;
+import org.eclipse.digitaltwin.aas4j.v3.model.AssetInformation;
import org.eclipse.digitaltwin.aas4j.v3.model.Reference;
import org.eclipse.digitaltwin.basyx.http.Base64UrlEncodedIdentifier;
import org.springframework.http.ResponseEntity;
@@ -121,4 +122,20 @@ ResponseEntity postSubmodelReference(
ResponseEntity putAssetAdministrationShellById(
@Parameter(in = ParameterIn.PATH, description = "The Asset Administration Shell’s unique id (BASE64-URL-encoded)", required = true, schema = @Schema()) @PathVariable("aasIdentifier") Base64UrlEncodedIdentifier aasIdentifier,
@Parameter(in = ParameterIn.DEFAULT, description = "Asset Administration Shell object", required = true, schema = @Schema()) @Valid @RequestBody AssetAdministrationShell body);
+
+ @Operation(summary = "Updates the Asset Information of an existing Asset Administration Shell", description = "", tags = { "Asset Administration Shell Repository" })
+ @ApiResponses(value = { @ApiResponse(responseCode = "204", description = "Asset Information updated successfully") })
+ @RequestMapping(value = "/shells/{aasIdentifier}/asset-information", consumes = { "application/json" }, method = RequestMethod.POST)
+ ResponseEntity postAssetInformationByAasId(
+ @Parameter(in = ParameterIn.PATH, description = "The Asset Administration Shell’s unique id (BASE64-URL-encoded)", required = true, schema = @Schema()) @PathVariable("aasIdentifier") Base64UrlEncodedIdentifier aasIdentifier,
+ @Parameter(in = ParameterIn.DEFAULT, description = "Asset Information object", required = true, schema = @Schema()) @Valid @RequestBody AssetInformation body);
+
+ @Operation(summary = "Returns the Asset Information of a specific Asset Administration Shell", description = "", tags = { "Asset Administration Shell Repository" })
+ @ApiResponses(value = { @ApiResponse(responseCode = "200", description = "Requested Asset Information of Asset Administration Shell", content = @Content(mediaType = "application/json", schema = @Schema(implementation = AssetInformation.class))) })
+ @RequestMapping(value = "/shells/{aasIdentifier}/asset-information", produces = {
+ "application/json" }, method = RequestMethod.GET)
+ ResponseEntity getAssetInformationByAasId(
+ @Parameter(in = ParameterIn.PATH, description = "The Asset Administration Shell’s unique id (BASE64-URL-encoded)", required = true, schema = @Schema()) @PathVariable("aasIdentifier") Base64UrlEncodedIdentifier aasIdentifier);
+
+
}
diff --git a/basyx.aasrepository-http/src/test/java/org/eclipse/digitaltwin/basyx/aasrepository/http/TestAasRepositoryHTTP.java b/basyx.aasrepository-http/src/test/java/org/eclipse/digitaltwin/basyx/aasrepository/http/TestAasRepositoryHTTP.java
index 5d32bbe1..30d56a32 100644
--- a/basyx.aasrepository-http/src/test/java/org/eclipse/digitaltwin/basyx/aasrepository/http/TestAasRepositoryHTTP.java
+++ b/basyx.aasrepository-http/src/test/java/org/eclipse/digitaltwin/basyx/aasrepository/http/TestAasRepositoryHTTP.java
@@ -184,7 +184,58 @@ public void removeNonExistingSubmodelReference() throws FileNotFoundException, I
createDummyAasOnServer();
String url = getSpecificSubmodelReferenceUrl();
CloseableHttpResponse deleteResponse = BaSyxHttpTestUtils.executeDeleteOnURL(url);
- assertEquals(404, deleteResponse.getCode());
+ assertEquals(HttpStatus.NOT_FOUND.value(), deleteResponse.getCode());
+ }
+
+ @Test
+ public void getAssetInformationByIdentifier() throws FileNotFoundException, IOException, ParseException {
+ createDummyAasOnServer();
+ String url = getSpecificAssetInformationAccessURL(dummyAasId);
+ CloseableHttpResponse response = BaSyxHttpTestUtils.executeGetOnURL(url);
+
+ String expected = BaSyxHttpTestUtils.readJSONStringFromFile("classpath:assetInfoSimple.json");
+
+ BaSyxHttpTestUtils.assertSameJSONContent(expected, BaSyxHttpTestUtils.getResponseAsString(response));
+ }
+
+
+ @Test
+ public void getNonExistingAssetInformationByIdentifier() throws FileNotFoundException, IOException, ParseException {
+ String url = getSpecificAasAccessURL("nonExisting") + "/asset-information";
+ CloseableHttpResponse response = BaSyxHttpTestUtils.executeGetOnURL(url);
+
+ assertEquals(HttpStatus.NOT_FOUND.value(), response.getCode());
+ }
+
+ @Test
+ public void postAssetInformationByIdentifier() throws FileNotFoundException, IOException, ParseException {
+ createDummyAasOnServer();
+
+ String json = BaSyxHttpTestUtils.readJSONStringFromFile("classpath:exampleAssetInfo.json");
+
+ BaSyxHttpTestUtils.executePostOnServer(getSpecificAssetInformationAccessURL(dummyAasId), json);
+
+ CloseableHttpResponse response = BaSyxHttpTestUtils
+ .executeGetOnURL(getSpecificAssetInformationAccessURL(dummyAasId));
+
+ BaSyxHttpTestUtils.assertSameJSONContent(json, BaSyxHttpTestUtils.getResponseAsString(response));
+ }
+
+ @Test
+ public void postAssetInformationToNonExistingAasByIdentifier()
+ throws FileNotFoundException, IOException, ParseException {
+
+ String json = BaSyxHttpTestUtils.readJSONStringFromFile("classpath:exampleAssetInfo.json");
+
+ CloseableHttpResponse response = BaSyxHttpTestUtils
+ .executeGetOnURL(getSpecificAssetInformationAccessURL("nonExisting"));
+
+ assertEquals(HttpStatus.NOT_FOUND.value(), response.getCode());
+ }
+
+
+ private String getSpecificAssetInformationAccessURL(String aasID) {
+ return getSpecificAasAccessURL(aasID) + "/asset-information";
}
@Test
diff --git a/basyx.aasrepository-http/src/test/resources/assetInfoSimple.json b/basyx.aasrepository-http/src/test/resources/assetInfoSimple.json
new file mode 100644
index 00000000..4c87dc28
--- /dev/null
+++ b/basyx.aasrepository-http/src/test/resources/assetInfoSimple.json
@@ -0,0 +1,40 @@
+{
+ "assetKind":"Instance",
+ "globalAssetId":{
+ "keys":[
+ {
+ "type":"AssetAdministrationShell",
+ "value":"http://customer.com/assets/KHBVZJSQKIY"
+ }
+ ],
+ "type":"GlobalReference"
+ },
+ "specificAssetIds":[
+ {
+ "name":"EquipmentID",
+ "value":"538fd1b3-f99f-4a52-9c75-72e9fa921270",
+ "externalSubjectId":{
+ "keys":[
+ {
+ "type":"GlobalReference",
+ "value":"http://customer.com/Systems/ERP/012"
+ }
+ ],
+ "type":"GlobalReference"
+ }
+ },
+ {
+ "name":"DeviceID",
+ "value":"QjYgPggjwkiHk4RrQiYSLg==",
+ "externalSubjectId":{
+ "keys":[
+ {
+ "type":"GlobalReference",
+ "value":"http://customer.com/Systems/IoT/1"
+ }
+ ],
+ "type":"GlobalReference"
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/basyx.aasrepository-http/src/test/resources/exampleAssetInfo.json b/basyx.aasrepository-http/src/test/resources/exampleAssetInfo.json
new file mode 100644
index 00000000..958d6c60
--- /dev/null
+++ b/basyx.aasrepository-http/src/test/resources/exampleAssetInfo.json
@@ -0,0 +1,27 @@
+{
+ "assetKind":"Instance",
+ "globalAssetId":{
+ "keys":[
+ {
+ "type":"AssetAdministrationShell",
+ "value":"http://customer.com/assets/KHBVZJSQKIY"
+ }
+ ],
+ "type":"GlobalReference"
+ },
+ "specificAssetIds":[
+ {
+ "name":"EquipmentID",
+ "value":"007",
+ "externalSubjectId":{
+ "keys":[
+ {
+ "type":"GlobalReference",
+ "value":"http://customer.com/Systems/ERP/007"
+ }
+ ],
+ "type":"GlobalReference"
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/basyx.aasservice-backend-inmemory/src/main/java/org/eclipse/digitaltwin/basyx/aasservice/backend/InMemoryAasService.java b/basyx.aasservice-backend-inmemory/src/main/java/org/eclipse/digitaltwin/basyx/aasservice/backend/InMemoryAasService.java
index b1a1003b..370bf6de 100644
--- a/basyx.aasservice-backend-inmemory/src/main/java/org/eclipse/digitaltwin/basyx/aasservice/backend/InMemoryAasService.java
+++ b/basyx.aasservice-backend-inmemory/src/main/java/org/eclipse/digitaltwin/basyx/aasservice/backend/InMemoryAasService.java
@@ -27,6 +27,7 @@
import java.util.List;
import org.eclipse.digitaltwin.aas4j.v3.model.AssetAdministrationShell;
+import org.eclipse.digitaltwin.aas4j.v3.model.AssetInformation;
import org.eclipse.digitaltwin.aas4j.v3.model.Key;
import org.eclipse.digitaltwin.aas4j.v3.model.KeyTypes;
import org.eclipse.digitaltwin.aas4j.v3.model.Reference;
@@ -73,6 +74,16 @@ public void removeSubmodelReference(String submodelId) {
aas.getSubmodels().remove(specificSubmodelReference);
}
+ @Override
+ public void setAssetInformation(AssetInformation aasInfo) {
+ aas.setAssetInformation(aasInfo);
+ }
+
+ @Override
+ public AssetInformation getAssetInformation() {
+ return aas.getAssetInformation();
+ }
+
private Reference getSubmodelReferenceById(String submodelId) {
List submodelReferences = aas.getSubmodels();
@@ -84,4 +95,5 @@ private Reference getSubmodelReferenceById(String submodelId) {
return specificSubmodelReference;
}
+
}
diff --git a/basyx.aasservice-core/src/main/java/org/eclipse/digitaltwin/basyx/aasservice/AasService.java b/basyx.aasservice-core/src/main/java/org/eclipse/digitaltwin/basyx/aasservice/AasService.java
index 7c344b44..4857b7d5 100644
--- a/basyx.aasservice-core/src/main/java/org/eclipse/digitaltwin/basyx/aasservice/AasService.java
+++ b/basyx.aasservice-core/src/main/java/org/eclipse/digitaltwin/basyx/aasservice/AasService.java
@@ -27,6 +27,7 @@
import java.util.List;
import org.eclipse.digitaltwin.aas4j.v3.model.AssetAdministrationShell;
+import org.eclipse.digitaltwin.aas4j.v3.model.AssetInformation;
import org.eclipse.digitaltwin.aas4j.v3.model.Reference;
/**
@@ -60,4 +61,16 @@ public interface AasService {
* Removes a Submodel Reference
*/
public void removeSubmodelReference(String submodelId);
+
+ /**
+ * Sets the asset-information of the AAS contained in the server
+ */
+ public void setAssetInformation(AssetInformation aasInfo);
+
+ /**
+ * Retrieves the asset-information of the AAS contained in the server
+ *
+ * @return the Asset-Information of the AAS
+ */
+ public AssetInformation getAssetInformation();
}
diff --git a/basyx.aasservice-core/src/test/java/org/eclipse/digitaltwin/basyx/aasservice/AasServiceSuite.java b/basyx.aasservice-core/src/test/java/org/eclipse/digitaltwin/basyx/aasservice/AasServiceSuite.java
index 4810dd7a..2e3d6624 100644
--- a/basyx.aasservice-core/src/test/java/org/eclipse/digitaltwin/basyx/aasservice/AasServiceSuite.java
+++ b/basyx.aasservice-core/src/test/java/org/eclipse/digitaltwin/basyx/aasservice/AasServiceSuite.java
@@ -32,8 +32,11 @@
import java.util.List;
import org.eclipse.digitaltwin.aas4j.v3.model.AssetAdministrationShell;
+import org.eclipse.digitaltwin.aas4j.v3.model.AssetInformation;
+import org.eclipse.digitaltwin.aas4j.v3.model.AssetKind;
import org.eclipse.digitaltwin.aas4j.v3.model.Reference;
import org.eclipse.digitaltwin.aas4j.v3.model.Submodel;
+import org.eclipse.digitaltwin.aas4j.v3.model.impl.DefaultAssetInformation;
import org.eclipse.digitaltwin.aas4j.v3.model.impl.DefaultKey;
import org.eclipse.digitaltwin.aas4j.v3.model.impl.DefaultReference;
import org.eclipse.digitaltwin.aas4j.v3.model.impl.DefaultSubmodel;
@@ -62,7 +65,7 @@ public void initSuite() {
}
@Test
- public void aasRetrieval() {
+ public void getAas() {
assertEquals(aas, aasService.getAAS());
}
@@ -76,7 +79,7 @@ public void getSubmodelReference() {
@Test
public void addSubmodelReference() {
- Submodel submodel = createNewSubmodel();
+ Submodel submodel = createDummySubmodel();
aasService.addSubmodelReference(submodel.getSemanticId());
@@ -101,11 +104,31 @@ public void removeNonExistingSubmodelReference() {
aasService.removeSubmodelReference("doesNotMatter");
}
+ @Test
+ public void getAssetInformation() {
+ assertEquals(aas.getAssetInformation(), aasService.getAssetInformation());
+ }
+
+ @Test
+ public void setAssetInformation() {
+ AssetInformation assetInfo = createDummyAssetInformation();
+ aasService.setAssetInformation(assetInfo);
+ assertEquals(assetInfo, aasService.getAssetInformation());
+ }
+
+ private AssetInformation createDummyAssetInformation() {
+ AssetInformation assetInfo = new DefaultAssetInformation.Builder().assetKind(AssetKind.INSTANCE)
+ .globalAssetId(
+ new DefaultReference.Builder().keys(new DefaultKey.Builder().value("assetIDTestKey").build()).build())
+ .build();
+ return assetInfo;
+ }
+
private Reference getFirstSubmodelReference(List submodelReferences) {
return submodelReferences.get(0);
}
- private DefaultSubmodel createNewSubmodel() {
+ private DefaultSubmodel createDummySubmodel() {
return new DefaultSubmodel.Builder()
.semanticId(
new DefaultReference.Builder().keys(new DefaultKey.Builder().value("testKey").build()).build())
diff --git a/basyx.aasservice-core/src/test/java/org/eclipse/digitaltwin/basyx/aasservice/DummyAssetAdministrationShell.java b/basyx.aasservice-core/src/test/java/org/eclipse/digitaltwin/basyx/aasservice/DummyAssetAdministrationShell.java
index 7760cbb5..25791163 100644
--- a/basyx.aasservice-core/src/test/java/org/eclipse/digitaltwin/basyx/aasservice/DummyAssetAdministrationShell.java
+++ b/basyx.aasservice-core/src/test/java/org/eclipse/digitaltwin/basyx/aasservice/DummyAssetAdministrationShell.java
@@ -4,9 +4,11 @@
import java.util.List;
import org.eclipse.digitaltwin.aas4j.v3.model.AssetAdministrationShell;
+import org.eclipse.digitaltwin.aas4j.v3.model.AssetKind;
import org.eclipse.digitaltwin.aas4j.v3.model.KeyTypes;
import org.eclipse.digitaltwin.aas4j.v3.model.Reference;
import org.eclipse.digitaltwin.aas4j.v3.model.impl.DefaultAssetAdministrationShell;
+import org.eclipse.digitaltwin.aas4j.v3.model.impl.DefaultAssetInformation;
import org.eclipse.digitaltwin.aas4j.v3.model.impl.DefaultKey;
import org.eclipse.digitaltwin.aas4j.v3.model.impl.DefaultReference;
@@ -22,7 +24,10 @@ public class DummyAssetAdministrationShell {
public static Reference submodelReference = buildDummyReference();
public static AssetAdministrationShell getDummyShell() {
- return new DefaultAssetAdministrationShell.Builder().id("arbitrary").build();
+ return new DefaultAssetAdministrationShell.Builder().id("arbitrary")
+ .assetInformation(new DefaultAssetInformation.Builder().assetKind(AssetKind.INSTANCE)
+ .globalAssetId(buildDummyReference()).build())
+ .build();
}
/**