diff --git a/src/main/java/be/seeseepuff/pcinv/models/Composite.java b/src/main/java/be/seeseepuff/pcinv/models/Composite.java index b25a7d7..6f7a003 100644 --- a/src/main/java/be/seeseepuff/pcinv/models/Composite.java +++ b/src/main/java/be/seeseepuff/pcinv/models/Composite.java @@ -30,6 +30,24 @@ public class Composite implements Asset { addAsset(asset); } + /** + * Returns the composite asset as a specific type. + * @param assetType The type of asset to return, e.g., CpuAsset.class. + * @return The asset cast to the specified type. + * @param The type of asset to return, must extend Asset. + */ + public T getAsset(Class assetType) { + if (assetType.equals(Composite.class)) { + return assetType.cast(this); + } + for (Asset asset : assets) { + if (assetType.isInstance(asset)) { + return assetType.cast(asset); + } + } + throw new IllegalArgumentException("No asset of type " + assetType.getSimpleName() + " found in composite."); + } + /** * Adds an asset to the composite. * diff --git a/src/main/java/be/seeseepuff/pcinv/services/AssetService.java b/src/main/java/be/seeseepuff/pcinv/services/AssetService.java index f8b9dce..58ab1bf 100644 --- a/src/main/java/be/seeseepuff/pcinv/services/AssetService.java +++ b/src/main/java/be/seeseepuff/pcinv/services/AssetService.java @@ -213,6 +213,7 @@ public class AssetService { var genericAsset = new GenericAsset(); genericAsset.setType("composite"); fillIn(genericAsset, genericDescriptor, formData); + genericAsset = genericRepository.saveAndFlush(genericAsset); for (var assetType : type) { var assetDescriptor = getAssetDescriptor(assetType); @@ -222,7 +223,7 @@ public class AssetService { getRepositoryFor(assetType).saveAndFlushAsset(asset); } - return genericRepository.saveAndFlush(genericAsset); + return genericAsset; } /**