Skip to content

Commit

Permalink
[Feature] Use descriptors from AAS4J (#152)
Browse files Browse the repository at this point in the history
Use descriptors from AAS4J
---------

Co-authored-by: Tino Bischoff <[email protected]>
  • Loading branch information
fvolz and tbischoff2 authored Aug 28, 2024
1 parent bbd3395 commit fe66bf0
Show file tree
Hide file tree
Showing 21 changed files with 171 additions and 144 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,10 @@

import de.fraunhofer.iosb.ilt.faaast.registry.core.exception.ResourceAlreadyExistsException;
import de.fraunhofer.iosb.ilt.faaast.registry.core.exception.ResourceNotFoundException;
import de.fraunhofer.iosb.ilt.faaast.service.model.descriptor.AssetAdministrationShellDescriptor;
import de.fraunhofer.iosb.ilt.faaast.service.model.descriptor.SubmodelDescriptor;
import java.util.List;
import org.eclipse.digitaltwin.aas4j.v3.model.AssetAdministrationShellDescriptor;
import org.eclipse.digitaltwin.aas4j.v3.model.AssetKind;
import org.eclipse.digitaltwin.aas4j.v3.model.SubmodelDescriptor;


/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,12 @@

import de.fraunhofer.iosb.ilt.faaast.registry.core.exception.ResourceAlreadyExistsException;
import de.fraunhofer.iosb.ilt.faaast.registry.core.exception.ResourceNotFoundException;
import de.fraunhofer.iosb.ilt.faaast.service.model.descriptor.AssetAdministrationShellDescriptor;
import de.fraunhofer.iosb.ilt.faaast.service.model.descriptor.SubmodelDescriptor;
import de.fraunhofer.iosb.ilt.faaast.service.util.Ensure;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import org.eclipse.digitaltwin.aas4j.v3.model.AssetAdministrationShellDescriptor;
import org.eclipse.digitaltwin.aas4j.v3.model.SubmodelDescriptor;


/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,23 +15,23 @@
package de.fraunhofer.iosb.ilt.faaast.registry.core;

import de.fraunhofer.iosb.ilt.faaast.registry.core.exception.ResourceNotFoundException;
import de.fraunhofer.iosb.ilt.faaast.service.model.descriptor.AssetAdministrationShellDescriptor;
import de.fraunhofer.iosb.ilt.faaast.service.model.descriptor.SubmodelDescriptor;
import de.fraunhofer.iosb.ilt.faaast.service.model.descriptor.impl.DefaultAssetAdministrationShellDescriptor;
import de.fraunhofer.iosb.ilt.faaast.service.model.descriptor.impl.DefaultEndpoint;
import de.fraunhofer.iosb.ilt.faaast.service.model.descriptor.impl.DefaultProtocolInformation;
import de.fraunhofer.iosb.ilt.faaast.service.model.descriptor.impl.DefaultSubmodelDescriptor;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.eclipse.digitaltwin.aas4j.v3.model.AssetAdministrationShellDescriptor;
import org.eclipse.digitaltwin.aas4j.v3.model.KeyTypes;
import org.eclipse.digitaltwin.aas4j.v3.model.ReferenceTypes;
import org.eclipse.digitaltwin.aas4j.v3.model.SubmodelDescriptor;
import org.eclipse.digitaltwin.aas4j.v3.model.impl.DefaultAdministrativeInformation;
import org.eclipse.digitaltwin.aas4j.v3.model.impl.DefaultAssetAdministrationShellDescriptor;
import org.eclipse.digitaltwin.aas4j.v3.model.impl.DefaultEndpoint;
import org.eclipse.digitaltwin.aas4j.v3.model.impl.DefaultKey;
import org.eclipse.digitaltwin.aas4j.v3.model.impl.DefaultLangStringNameType;
import org.eclipse.digitaltwin.aas4j.v3.model.impl.DefaultLangStringTextType;
import org.eclipse.digitaltwin.aas4j.v3.model.impl.DefaultProtocolInformation;
import org.eclipse.digitaltwin.aas4j.v3.model.impl.DefaultReference;
import org.eclipse.digitaltwin.aas4j.v3.model.impl.DefaultSpecificAssetId;
import org.eclipse.digitaltwin.aas4j.v3.model.impl.DefaultSubmodelDescriptor;
import org.junit.After;
import org.junit.Assert;
import org.junit.Test;
Expand All @@ -48,7 +48,7 @@ public void clearDatastore() {}


protected DefaultSubmodelDescriptor getSubmodel() {
return DefaultSubmodelDescriptor.builder()
return new DefaultSubmodelDescriptor.Builder()
.idShort("Submodel2")
.id("TestSubmodel2")
.description(new DefaultLangStringTextType.Builder().text("some submodel").language("en-US").build())
Expand All @@ -64,19 +64,20 @@ protected DefaultSubmodelDescriptor getSubmodel() {
.revision("1")
.version("1.1")
.build())
.endpoint(DefaultEndpoint.builder()
._interface("http")
.protocolInformation(DefaultProtocolInformation.builder()
.href("localhost:8080/factory1/submodel2")
.endpointProtocol("http")
.endpoints(
new DefaultEndpoint.Builder()
._interface("http")
.protocolInformation(new DefaultProtocolInformation.Builder()
.href("localhost:8080/factory1/submodel2")
.endpointProtocol("http")
.build())
.build())
.build())
.build();
}


protected AssetAdministrationShellDescriptor getAASWithSubmodel() {
AssetAdministrationShellDescriptor aas = DefaultAssetAdministrationShellDescriptor.builder()
AssetAdministrationShellDescriptor aas = new DefaultAssetAdministrationShellDescriptor.Builder()
.idShort("Test1")
.id("TestAAS1")
.description(new DefaultLangStringTextType.Builder().text("some aas").language("en-US").build())
Expand Down Expand Up @@ -104,16 +105,16 @@ protected AssetAdministrationShellDescriptor getAASWithSubmodel() {
.build())
.build())))
.globalAssetId("http://example.org/aasTest1")
.endpoint(DefaultEndpoint.builder()
.endpoints(new DefaultEndpoint.Builder()
._interface("http")
.protocolInformation(DefaultProtocolInformation.builder()
.protocolInformation(new DefaultProtocolInformation.Builder()
.href("localhost:8080/factory1")
.endpointProtocol("http")
.build())
.build())
.build();
List<SubmodelDescriptor> submodels = new ArrayList<>();
submodels.add(DefaultSubmodelDescriptor.builder()
submodels.add(new DefaultSubmodelDescriptor.Builder()
.idShort("Submodel1")
.id("TestSubmodel1")
.description(new DefaultLangStringTextType.Builder().text("some submodel").language("en-US").build())
Expand All @@ -129,15 +130,15 @@ protected AssetAdministrationShellDescriptor getAASWithSubmodel() {
.revision("1")
.version("1.1")
.build())
.endpoint(DefaultEndpoint.builder()
.endpoints(new DefaultEndpoint.Builder()
._interface("http")
.protocolInformation(DefaultProtocolInformation.builder()
.protocolInformation(new DefaultProtocolInformation.Builder()
.href("localhost:8080/factory1/submodel")
.endpointProtocol("http")
.build())
.build())
.build());
aas.setSubmodels(submodels);
aas.setSubmodelDescriptors(submodels);
return aas;
}

Expand Down Expand Up @@ -171,11 +172,11 @@ public void updateAAS() throws Exception {
// We have to create a new AAS here, otherwise the test won't work
AssetAdministrationShellDescriptor aas = getAASWithSubmodel();
aas.setIdShort("NewIdShort");
aas.getSubmodels().get(0).setIdShort("NewSubmodelIdShort");
aas.getSubmodelDescriptors().get(0).setIdShort("NewSubmodelIdShort");
repository.update(aasId, aas);
aas = repository.getAAS(aas.getId());
Assert.assertEquals("NewIdShort", aas.getIdShort());
Assert.assertEquals("NewSubmodelIdShort", aas.getSubmodels().get(0).getIdShort());
Assert.assertEquals("NewSubmodelIdShort", aas.getSubmodelDescriptors().get(0).getIdShort());
}


Expand Down Expand Up @@ -224,7 +225,7 @@ public void findStandAloneSubmodelById() throws Exception {

SubmodelDescriptor findSubmodel;
// Ensure, submodel of the AAS is not registered
Assert.assertThrows(ResourceNotFoundException.class, () -> repository.getSubmodel(aas.getSubmodels().get(0).getId()));
Assert.assertThrows(ResourceNotFoundException.class, () -> repository.getSubmodel(aas.getSubmodelDescriptors().get(0).getId()));
findSubmodel = repository.getSubmodel(submodel.getId());
Assert.assertNotNull(findSubmodel);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,16 +22,16 @@
import de.fraunhofer.iosb.ilt.faaast.registry.jpa.model.JpaSubmodelDescriptorStandalone;
import de.fraunhofer.iosb.ilt.faaast.registry.jpa.util.EntityManagerHelper;
import de.fraunhofer.iosb.ilt.faaast.registry.jpa.util.ModelTransformationHelper;
import de.fraunhofer.iosb.ilt.faaast.service.model.descriptor.AssetAdministrationShellDescriptor;
import de.fraunhofer.iosb.ilt.faaast.service.model.descriptor.SubmodelDescriptor;
import de.fraunhofer.iosb.ilt.faaast.service.util.Ensure;
import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;
import jakarta.transaction.Transactional;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import org.eclipse.digitaltwin.aas4j.v3.model.AssetAdministrationShellDescriptor;
import org.eclipse.digitaltwin.aas4j.v3.model.AssetKind;
import org.eclipse.digitaltwin.aas4j.v3.model.SubmodelDescriptor;
import org.springframework.stereotype.Repository;


Expand Down Expand Up @@ -103,7 +103,7 @@ public List<SubmodelDescriptor> getSubmodels(String aasId) throws ResourceNotFou
ensureAasId(aasId);
AssetAdministrationShellDescriptor aas = fetchAAS(aasId);
Ensure.requireNonNull(aas, buildAASNotFoundException(aasId));
return aas.getSubmodels();
return aas.getSubmodelDescriptors();
}


Expand All @@ -120,7 +120,7 @@ public SubmodelDescriptor getSubmodel(String aasId, String submodelId) throws Re
AssetAdministrationShellDescriptor aas = fetchAAS(aasId);
Ensure.requireNonNull(aas, buildAASNotFoundException(aasId));

List<SubmodelDescriptor> submodels = aas.getSubmodels();
List<SubmodelDescriptor> submodels = aas.getSubmodelDescriptors();
Optional<SubmodelDescriptor> submodel = submodels.stream()
.filter(x -> Objects.nonNull(x.getId())
&& Objects.equals(x.getId(), submodelId))
Expand All @@ -145,11 +145,11 @@ public SubmodelDescriptor addSubmodel(String aasId, SubmodelDescriptor descripto
ensureDescriptorId(descriptor);
AssetAdministrationShellDescriptor aas = fetchAAS(aasId);
Ensure.requireNonNull(aas, buildAASNotFoundException(aasId));
if (getSubmodelInternal(aas.getSubmodels(), descriptor.getId()).isPresent()) {
if (getSubmodelInternal(aas.getSubmodelDescriptors(), descriptor.getId()).isPresent()) {
throw buildSubmodelAlreadyExistsException(descriptor.getId());
}
JpaSubmodelDescriptor submodel = ModelTransformationHelper.convertSubmodel(descriptor);
aas.getSubmodels().add(submodel);
aas.getSubmodelDescriptors().add(submodel);
entityManager.merge(aas);
return submodel;
}
Expand All @@ -172,14 +172,14 @@ public void deleteSubmodel(String aasId, String submodelId) throws ResourceNotFo
ensureSubmodelId(submodelId);
AssetAdministrationShellDescriptor aas = fetchAAS(aasId);
Ensure.requireNonNull(aas, buildAASNotFoundException(aasId));
Optional<SubmodelDescriptor> submodel = aas.getSubmodels().stream()
Optional<SubmodelDescriptor> submodel = aas.getSubmodelDescriptors().stream()
.filter(x -> Objects.equals(x.getId(), submodelId)
|| (Objects.nonNull(x.getId())
&& x.getId().equalsIgnoreCase(submodelId)))
.findAny();
Ensure.require(submodel.isPresent(), buildSubmodelNotFoundInAASException(aasId, submodelId));
entityManager.remove(aas);
aas.getSubmodels().removeIf(x -> x.getId().equals(submodelId));
aas.getSubmodelDescriptors().removeIf(x -> x.getId().equals(submodelId));
entityManager.persist(aas);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,10 @@
package de.fraunhofer.iosb.ilt.faaast.registry.jpa.model;

import de.fraunhofer.iosb.ilt.faaast.registry.jpa.util.ModelTransformationHelper;
import de.fraunhofer.iosb.ilt.faaast.service.model.descriptor.AssetAdministrationShellDescriptor;
import de.fraunhofer.iosb.ilt.faaast.service.model.descriptor.impl.DefaultAssetAdministrationShellDescriptor;
import java.util.Objects;
import org.eclipse.digitaltwin.aas4j.v3.model.AssetAdministrationShellDescriptor;
import org.eclipse.digitaltwin.aas4j.v3.model.builder.AssetAdministrationShellDescriptorBuilder;
import org.eclipse.digitaltwin.aas4j.v3.model.impl.DefaultAssetAdministrationShellDescriptor;


/**
Expand All @@ -26,9 +27,8 @@
public class JpaAssetAdministrationShellDescriptor extends DefaultAssetAdministrationShellDescriptor {

public abstract static class AbstractBuilder<T extends JpaAssetAdministrationShellDescriptor, B extends AbstractBuilder<T, B>>
extends DefaultAssetAdministrationShellDescriptor.AbstractBuilder<JpaAssetAdministrationShellDescriptor, B> {
extends AssetAdministrationShellDescriptorBuilder<T, B> {

@Override
public B from(AssetAdministrationShellDescriptor other) {
if (Objects.nonNull(other)) {
id(other.getId());
Expand All @@ -37,12 +37,12 @@ public B from(AssetAdministrationShellDescriptor other) {
assetType(other.getAssetType());
endpoints(ModelTransformationHelper.convertEndpoints(other.getEndpoints()));
administration(ModelTransformationHelper.convertAdministrativeInformation(other.getAdministration()));
descriptions(ModelTransformationHelper.convertDescriptions(other.getDescriptions()));
displayNames(ModelTransformationHelper.convertDisplayNames(other.getDisplayNames()));
description(ModelTransformationHelper.convertDescriptions(other.getDescription()));
displayName(ModelTransformationHelper.convertDisplayNames(other.getDisplayName()));
globalAssetId(other.getGlobalAssetId());
specificAssetIds(ModelTransformationHelper.convertSpecificAssetIds(other.getSpecificAssetIds()));
extensions(ModelTransformationHelper.convertExtensions(other.getExtensions()));
submodels(ModelTransformationHelper.convertSubmodels(other.getSubmodels()));
submodelDescriptors(ModelTransformationHelper.convertSubmodels(other.getSubmodelDescriptors()));
}
return getSelf();
}
Expand All @@ -60,5 +60,6 @@ protected Builder getSelf() {
protected JpaAssetAdministrationShellDescriptor newBuildingInstance() {
return new JpaAssetAdministrationShellDescriptor();
}

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,10 @@

import com.fasterxml.jackson.annotation.JsonIgnore;
import de.fraunhofer.iosb.ilt.faaast.registry.jpa.util.ModelTransformationHelper;
import de.fraunhofer.iosb.ilt.faaast.service.model.descriptor.Endpoint;
import de.fraunhofer.iosb.ilt.faaast.service.model.descriptor.impl.DefaultEndpoint;
import java.util.Objects;
import org.eclipse.digitaltwin.aas4j.v3.model.Endpoint;
import org.eclipse.digitaltwin.aas4j.v3.model.builder.EndpointBuilder;
import org.eclipse.digitaltwin.aas4j.v3.model.impl.DefaultEndpoint;


/**
Expand Down Expand Up @@ -68,18 +69,17 @@ else if (this.getClass() != obj.getClass()) {
}
}

public abstract static class AbstractBuilder<T extends JpaEndpoint, B extends AbstractBuilder<T, B>> extends DefaultEndpoint.AbstractBuilder<T, B> {
public abstract static class AbstractBuilder<T extends JpaEndpoint, B extends AbstractBuilder<T, B>> extends EndpointBuilder<T, B> {

public B id(String value) {
getBuildingInstance().setId(value);
return getSelf();
}


@Override
public B from(Endpoint other) {
if (other != null) {
_interface(other.getInterface());
_interface(other.get_interface());
protocolInformation(ModelTransformationHelper.convertProtocolInformation(other.getProtocolInformation()));
}
return getSelf();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,12 @@

import com.fasterxml.jackson.annotation.JsonIgnore;
import de.fraunhofer.iosb.ilt.faaast.registry.jpa.util.ModelTransformationHelper;
import de.fraunhofer.iosb.ilt.faaast.service.model.descriptor.ProtocolInformation;
import de.fraunhofer.iosb.ilt.faaast.service.model.descriptor.impl.DefaultProtocolInformation;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import org.eclipse.digitaltwin.aas4j.v3.model.ProtocolInformation;
import org.eclipse.digitaltwin.aas4j.v3.model.builder.ProtocolInformationBuilder;
import org.eclipse.digitaltwin.aas4j.v3.model.impl.DefaultProtocolInformation;


/**
Expand Down Expand Up @@ -96,7 +97,7 @@ else if (this.getClass() != obj.getClass()) {
}

public abstract static class AbstractBuilder<T extends JpaProtocolInformation, B extends AbstractBuilder<T, B>>
extends DefaultProtocolInformation.AbstractBuilder<JpaProtocolInformation, B> {
extends ProtocolInformationBuilder<T, B> {

public B id(String value) {
getBuildingInstance().setId(value);
Expand All @@ -110,16 +111,17 @@ public B jpaEndpointProtocolVersion(List<JpaString> value) {
}


@Override
public B from(ProtocolInformation other) {
endpointProtocol(other.getEndpointProtocol());
// endpointProtocolVersion is set in jpaEndpointProtocolVersion
jpaEndpointProtocolVersion(ModelTransformationHelper.convertStrings(other.getEndpointProtocolVersion()));
href(other.getHref());
securityAttributes(ModelTransformationHelper.convertSecurityAttributes(other.getSecurityAttributes()));
subprotocol(other.getSubprotocol());
subprotocolBody(other.getSubprotocolBody());
subprotocolBodyEncoding(other.getSubprotocolBodyEncoding());
if (Objects.nonNull(other)) {
endpointProtocol(other.getEndpointProtocol());
// endpointProtocolVersion is set in jpaEndpointProtocolVersion
jpaEndpointProtocolVersion(ModelTransformationHelper.convertStrings(other.getEndpointProtocolVersion()));
href(other.getHref());
securityAttributes(ModelTransformationHelper.convertSecurityAttributes(other.getSecurityAttributes()));
subprotocol(other.getSubprotocol());
subprotocolBody(other.getSubprotocolBody());
subprotocolBodyEncoding(other.getSubprotocolBodyEncoding());
}
return getSelf();
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
public class JpaSubmodelDescriptor extends JpaSubmodelDescriptorBase {

public abstract static class AbstractBuilder<T extends JpaSubmodelDescriptor, B extends AbstractBuilder<T, B>>
extends JpaSubmodelDescriptorBase.AbstractBuilder<JpaSubmodelDescriptor, B> {}
extends JpaSubmodelDescriptorBase.AbstractBuilder<T, B> {}

public static class Builder extends AbstractBuilder<JpaSubmodelDescriptor, Builder> {

Expand Down
Loading

0 comments on commit fe66bf0

Please sign in to comment.