diff --git a/src/main/java/be/seeseepuff/pcinv/controllers/WebController.java b/src/main/java/be/seeseepuff/pcinv/controllers/WebController.java index 32f49bc..51680c9 100644 --- a/src/main/java/be/seeseepuff/pcinv/controllers/WebController.java +++ b/src/main/java/be/seeseepuff/pcinv/controllers/WebController.java @@ -1,9 +1,12 @@ package be.seeseepuff.pcinv.controllers; +import be.seeseepuff.pcinv.meta.AssetDescriptor; import be.seeseepuff.pcinv.models.Asset; +import be.seeseepuff.pcinv.models.GenericAsset; import be.seeseepuff.pcinv.models.WorkLogEntry; import be.seeseepuff.pcinv.services.AssetService; import be.seeseepuff.pcinv.services.BuildService; +import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; import org.springframework.data.repository.query.Param; import org.springframework.http.MediaType; @@ -16,8 +19,10 @@ import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import java.time.format.DateTimeFormatter; +import java.util.ArrayList; import java.util.Comparator; import java.util.HashMap; +import java.util.Set; /** * Controller for handling web requests related to assets. @@ -132,6 +137,40 @@ public class WebController { return "build_view"; } + /** + * Shows a view where the user can create a specific type of composite asset. + * + * @param type The type of composite asset to create. + */ + @GetMapping("/create_composite") + public String createCompositeType(Model model, HttpServletRequest request) { + var parameters = request.getParameterMap(); + if (parameters == null || parameters.isEmpty()) { + model.addAttribute(TIME, System.currentTimeMillis()); + model.addAttribute(DESCRIPTORS, assetService.getAssetDescriptors()); + return "create_composite"; + } else { + model.addAttribute(TIME, System.currentTimeMillis()); + model.addAttribute(ACTION, "create"); + var descriptors = new ArrayList(); + var inputLists = new HashMap>(); + descriptors.add(assetService.getAssetDescriptor(GenericAsset.TYPE)); + for (String assetType : parameters.keySet()) { + descriptors.add(assetService.getAssetDescriptor(assetType)); + inputLists.putAll(assetService.getInputList(assetType)); + } + model.addAttribute(DESCRIPTORS, descriptors); + model.addAttribute(DESCRIPTOR, AssetDescriptor.builder() + .type("composite") + .displayName("Composite Asset") + .pluralName("Composite Assets") + .build()); + model.addAttribute(INPUT_LIST, inputLists); + model.addAttribute(BUILDS, buildService.getAllBuilds()); + return "create_asset"; + } + } + /** * Handles the creation of a new build. */ diff --git a/src/main/java/be/seeseepuff/pcinv/meta/AssetDescriptors.java b/src/main/java/be/seeseepuff/pcinv/meta/AssetDescriptors.java index 293af72..357e1f0 100644 --- a/src/main/java/be/seeseepuff/pcinv/meta/AssetDescriptors.java +++ b/src/main/java/be/seeseepuff/pcinv/meta/AssetDescriptors.java @@ -20,8 +20,16 @@ public class AssetDescriptors { * @param assetType The type of the asset to load properties for. */ public void loadFrom(Class assetType) { - var property = AssetDescriptor.loadFrom(assetType); - assets.add(property); + add(AssetDescriptor.loadFrom(assetType)); + } + + /** + * Adds a new asset descriptor to the collection. + * + * @param assetDescriptor The asset descriptor to add. + */ + public void add(AssetDescriptor assetDescriptor) { + assets.add(assetDescriptor); } /** diff --git a/src/main/resources/templates/create_composite.html b/src/main/resources/templates/create_composite.html new file mode 100644 index 0000000..c59ab10 --- /dev/null +++ b/src/main/resources/templates/create_composite.html @@ -0,0 +1,11 @@ + +
+

Create a new composite device

+
+
+

+ +

+
+
+ diff --git a/src/main/resources/templates/create_select.html b/src/main/resources/templates/create_select.html index e23b6a9..238bb0e 100644 --- a/src/main/resources/templates/create_select.html +++ b/src/main/resources/templates/create_select.html @@ -2,6 +2,7 @@

Create a new device