diff --git a/basyx.aasregistry/basyx.aasregistry-feature-discovery-integration/src/main/java/org/eclipse/digitaltwin/basyx/aasregistry/feature/discovery/integration/DiscoveryIntegrationAasRegistry.java b/basyx.aasregistry/basyx.aasregistry-feature-discovery-integration/src/main/java/org/eclipse/digitaltwin/basyx/aasregistry/feature/discovery/integration/DiscoveryIntegrationAasRegistry.java index e00e450eb..41a11b14c 100644 --- a/basyx.aasregistry/basyx.aasregistry-feature-discovery-integration/src/main/java/org/eclipse/digitaltwin/basyx/aasregistry/feature/discovery/integration/DiscoveryIntegrationAasRegistry.java +++ b/basyx.aasregistry/basyx.aasregistry-feature-discovery-integration/src/main/java/org/eclipse/digitaltwin/basyx/aasregistry/feature/discovery/integration/DiscoveryIntegrationAasRegistry.java @@ -70,29 +70,49 @@ public AssetAdministrationShellDescriptor getAasDescriptor(@NonNull String aasDe } @Override - public void insertAasDescriptor(AssetAdministrationShellDescriptor descr) throws AasDescriptorAlreadyExistsException { + public void insertAasDescriptor(AssetAdministrationShellDescriptor descr) + throws AasDescriptorAlreadyExistsException { decorated.insertAasDescriptor(descr); - @Valid List ids = descr.getSpecificAssetIds(); - List specificAssetIds = ids.stream() - .map(rId -> { - SpecificAssetId assetId = new DefaultSpecificAssetId(); - assetId.setName(rId.getName()); - assetId.setValue(rId.getValue()); - return assetId; - }).collect(Collectors.toList()); + + List ids = descr.getSpecificAssetIds(); + if (ids == null || ids.isEmpty()) { + log.debug("No specificAssetIds present for AAS '{}', skipping discovery integration", descr.getId()); + return; + } + + List specificAssetIds = ids.stream() + .map(rId -> { + SpecificAssetId assetId = new DefaultSpecificAssetId(); + assetId.setName(rId.getName()); + assetId.setValue(rId.getValue()); + return assetId; + }).collect(Collectors.toList()); + discoveryApi.createAllAssetLinksById(descr.getId(), specificAssetIds); } @Override - public void replaceAasDescriptor(@NonNull String aasDescriptorId, @NonNull AssetAdministrationShellDescriptor descriptor) throws AasDescriptorNotFoundException { + public void replaceAasDescriptor(@NonNull String aasDescriptorId, + @NonNull AssetAdministrationShellDescriptor descriptor) + throws AasDescriptorNotFoundException { decorated.replaceAasDescriptor(aasDescriptorId, descriptor); - List specificAssetIds = descriptor.getSpecificAssetIds().stream() + + List ids = descriptor.getSpecificAssetIds(); + + if (ids == null || ids.isEmpty()) { + log.debug("No specificAssetIds present for AAS '{}', skipping discovery integration update", aasDescriptorId); + discoveryApi.deleteAllAssetLinksById(aasDescriptorId); + return; + } + + List specificAssetIds = ids.stream() .map(rId -> { SpecificAssetId assetId = new DefaultSpecificAssetId(); assetId.setName(rId.getName()); assetId.setValue(rId.getValue()); return assetId; - }).collect(Collectors.toList()); + }) + .collect(Collectors.toList()); discoveryApi.deleteAllAssetLinksById(aasDescriptorId); discoveryApi.createAllAssetLinksById(aasDescriptorId, specificAssetIds);