From c8829c5f7ca3a7cf44a929a65228843e4a71f186 Mon Sep 17 00:00:00 2001 From: Sebastiaan de Schaetzen Date: Sun, 8 Jun 2025 14:47:13 +0200 Subject: [PATCH] Add description support for asset properties and update related models --- .../seeseepuff/pcinv/meta/AssetProperty.java | 3 ++ .../be/seeseepuff/pcinv/meta/Description.java | 20 ++++++++ .../pcinv/models/DisplayAdapterAsset.java | 48 +++++++++++++++++++ .../seeseepuff/pcinv/models/GenericAsset.java | 11 +---- .../be/seeseepuff/pcinv/models/HddAsset.java | 11 ++--- .../be/seeseepuff/pcinv/models/RamAsset.java | 9 ++-- .../DisplayAdapterRepository.java | 12 +++++ ...ssetRepository.java => HddRepository.java} | 2 +- ...ssetRepository.java => RamRepository.java} | 2 +- .../resources/templates/create_asset.html | 2 +- 10 files changed, 94 insertions(+), 26 deletions(-) create mode 100644 src/main/java/be/seeseepuff/pcinv/meta/Description.java create mode 100644 src/main/java/be/seeseepuff/pcinv/models/DisplayAdapterAsset.java create mode 100644 src/main/java/be/seeseepuff/pcinv/repositories/DisplayAdapterRepository.java rename src/main/java/be/seeseepuff/pcinv/repositories/{HddAssetRepository.java => HddRepository.java} (72%) rename src/main/java/be/seeseepuff/pcinv/repositories/{RamAssetRepository.java => RamRepository.java} (72%) diff --git a/src/main/java/be/seeseepuff/pcinv/meta/AssetProperty.java b/src/main/java/be/seeseepuff/pcinv/meta/AssetProperty.java index 68e606a..a3c94f5 100644 --- a/src/main/java/be/seeseepuff/pcinv/meta/AssetProperty.java +++ b/src/main/java/be/seeseepuff/pcinv/meta/AssetProperty.java @@ -45,6 +45,8 @@ public class AssetProperty { private final boolean inputList; /// Whether the property should be hidden in the overview. private final boolean hideInOverview; + /// A description of the property, if any. + private final String description; /** * Enum representing the possible types of asset properties. @@ -90,6 +92,7 @@ public class AssetProperty { .required(annotation.required()) .inputList(property.isAnnotationPresent(InputList.class)) .hideInOverview(property.isAnnotationPresent(HideInOverview.class)) + .description(property.isAnnotationPresent(Description.class) ? property.getAnnotation(Description.class).value() : "") .setter((obj, value) -> { try { property.setAccessible(true); diff --git a/src/main/java/be/seeseepuff/pcinv/meta/Description.java b/src/main/java/be/seeseepuff/pcinv/meta/Description.java new file mode 100644 index 0000000..f453271 --- /dev/null +++ b/src/main/java/be/seeseepuff/pcinv/meta/Description.java @@ -0,0 +1,20 @@ +package be.seeseepuff.pcinv.meta; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * Annotation to provide a description for an asset. + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.FIELD) +public @interface Description { + /** + * The description of the asset. + * + * @return The description text. + */ + String value() default ""; +} diff --git a/src/main/java/be/seeseepuff/pcinv/models/DisplayAdapterAsset.java b/src/main/java/be/seeseepuff/pcinv/models/DisplayAdapterAsset.java new file mode 100644 index 0000000..ebe66ab --- /dev/null +++ b/src/main/java/be/seeseepuff/pcinv/models/DisplayAdapterAsset.java @@ -0,0 +1,48 @@ +package be.seeseepuff.pcinv.models; + +import be.seeseepuff.pcinv.meta.*; +import jakarta.persistence.*; +import lombok.Getter; +import lombok.Setter; + +/** + * Represents a RAM DIMM or similar memory asset in the inventory system. + */ +@Getter +@Setter +@Entity +@AssetInfo( + displayName = "Display Adapter", + pluralName = "Display Adapters", + type = "GPU" +) +@Table(name = "gpu_assets") +public class DisplayAdapterAsset implements Asset +{ + @Id + @GeneratedValue + private long id; + + /// The generic asset associated with this RAM. + @OneToOne(orphanRemoval = true) + private GenericAsset asset; + + @Property("VRAM Capacity") + @Capacity + private Long vramCapacity; + + @Description("The type of interface. E.g.: AGP, PCIe, ISA-8, etc...") + @Property("Interface") + @InputList + private String interfaceType; + + @Description("The highest version of DirectX supported by this display adapter.") + @Property("DirectX Version") + @InputList + private String directXVersion; + + @Description("The highest version of OpenGL supported by this display adapter.") + @Property("OpenGL Version") + @InputList + private String openGLVersion; +} diff --git a/src/main/java/be/seeseepuff/pcinv/models/GenericAsset.java b/src/main/java/be/seeseepuff/pcinv/models/GenericAsset.java index cbbfe47..00335bd 100644 --- a/src/main/java/be/seeseepuff/pcinv/models/GenericAsset.java +++ b/src/main/java/be/seeseepuff/pcinv/models/GenericAsset.java @@ -1,9 +1,6 @@ package be.seeseepuff.pcinv.models; -import be.seeseepuff.pcinv.meta.AssetInfo; -import be.seeseepuff.pcinv.meta.InputList; -import be.seeseepuff.pcinv.meta.HideInOverview; -import be.seeseepuff.pcinv.meta.Property; +import be.seeseepuff.pcinv.meta.*; import jakarta.persistence.*; import lombok.Getter; import lombok.Setter; @@ -33,30 +30,26 @@ public class GenericAsset /// The QR code attached to the asset, used for identification. @Property(value = "QR", required = true) + @Description("The QR code attached to the asset, used for identification.") private long qr; /// The type of asset private String type; - /// The brand of the asset. @Property("Brand") @InputList private String brand; - /// The model of the asset @Property("Model") private String model; - /// The asset's serial number. @Property("Serial Number") private String serialNumber; - /// A description of the asset, providing additional details. @Property("Description") @HideInOverview private String description; - /// The state of the asset, indicating its condition. @Property("Condition") private AssetCondition condition; } diff --git a/src/main/java/be/seeseepuff/pcinv/models/HddAsset.java b/src/main/java/be/seeseepuff/pcinv/models/HddAsset.java index 44ea113..9ca4f45 100644 --- a/src/main/java/be/seeseepuff/pcinv/models/HddAsset.java +++ b/src/main/java/be/seeseepuff/pcinv/models/HddAsset.java @@ -1,9 +1,6 @@ package be.seeseepuff.pcinv.models; -import be.seeseepuff.pcinv.meta.AssetInfo; -import be.seeseepuff.pcinv.meta.Capacity; -import be.seeseepuff.pcinv.meta.InputList; -import be.seeseepuff.pcinv.meta.Property; +import be.seeseepuff.pcinv.meta.*; import jakarta.persistence.*; import lombok.Getter; import lombok.Setter; @@ -26,21 +23,19 @@ public class HddAsset implements Asset @GeneratedValue private long id; - /// The generic asset associated with this HDD. @OneToOne(orphanRemoval = true) private GenericAsset asset; - /// The capacity of the drive in bytes. @Property("Capacity") @Capacity(si = true, iec = true) private Long capacity; - /// The drive's interface type, such as SATA, IDE, ISA-16, ... + @Description("The drive's interface type, such as SATA, IDE, ISA-16, ...") @Property("Interface Type") @InputList private String interfaceType; - /// The drive's form factor, such as 2.5", 3.5", etc. + @Description("The drive's form factor, such as 2.5\", 3.5\", etc.") @Property("Form Factor") @InputList private String formFactor; diff --git a/src/main/java/be/seeseepuff/pcinv/models/RamAsset.java b/src/main/java/be/seeseepuff/pcinv/models/RamAsset.java index 527649e..9752821 100644 --- a/src/main/java/be/seeseepuff/pcinv/models/RamAsset.java +++ b/src/main/java/be/seeseepuff/pcinv/models/RamAsset.java @@ -1,8 +1,6 @@ package be.seeseepuff.pcinv.models; -import be.seeseepuff.pcinv.meta.AssetInfo; -import be.seeseepuff.pcinv.meta.Capacity; -import be.seeseepuff.pcinv.meta.Property; +import be.seeseepuff.pcinv.meta.*; import jakarta.persistence.*; import lombok.Getter; import lombok.Setter; @@ -25,16 +23,15 @@ public class RamAsset implements Asset @GeneratedValue private long id; - /// The generic asset associated with this RAM. @OneToOne(orphanRemoval = true) private GenericAsset asset; - /// The capacity of the RAM in bytes. @Property("Capacity") @Capacity private Long capacity; - /// The type of memory. E.g.: DDR2, SDRAM, ISA-8, etc... + @Description("The type of memory. E.g.: DDR2, SDRAM, ISA-8, etc...") @Property("Type") + @InputList private String type; } diff --git a/src/main/java/be/seeseepuff/pcinv/repositories/DisplayAdapterRepository.java b/src/main/java/be/seeseepuff/pcinv/repositories/DisplayAdapterRepository.java new file mode 100644 index 0000000..638a85b --- /dev/null +++ b/src/main/java/be/seeseepuff/pcinv/repositories/DisplayAdapterRepository.java @@ -0,0 +1,12 @@ +package be.seeseepuff.pcinv.repositories; + +import be.seeseepuff.pcinv.models.DisplayAdapterAsset; +import org.springframework.data.jpa.repository.JpaRepository; + +@SuppressWarnings("unused") +public interface DisplayAdapterRepository extends JpaRepository, AssetRepository { + @Override + default Class getAssetType() { + return DisplayAdapterAsset.class; + } +} diff --git a/src/main/java/be/seeseepuff/pcinv/repositories/HddAssetRepository.java b/src/main/java/be/seeseepuff/pcinv/repositories/HddRepository.java similarity index 72% rename from src/main/java/be/seeseepuff/pcinv/repositories/HddAssetRepository.java rename to src/main/java/be/seeseepuff/pcinv/repositories/HddRepository.java index 625de83..464628a 100644 --- a/src/main/java/be/seeseepuff/pcinv/repositories/HddAssetRepository.java +++ b/src/main/java/be/seeseepuff/pcinv/repositories/HddRepository.java @@ -4,7 +4,7 @@ import be.seeseepuff.pcinv.models.HddAsset; import org.springframework.data.jpa.repository.JpaRepository; @SuppressWarnings("unused") -public interface HddAssetRepository extends JpaRepository, AssetRepository { +public interface HddRepository extends JpaRepository, AssetRepository { @Override default Class getAssetType() { return HddAsset.class; diff --git a/src/main/java/be/seeseepuff/pcinv/repositories/RamAssetRepository.java b/src/main/java/be/seeseepuff/pcinv/repositories/RamRepository.java similarity index 72% rename from src/main/java/be/seeseepuff/pcinv/repositories/RamAssetRepository.java rename to src/main/java/be/seeseepuff/pcinv/repositories/RamRepository.java index 2b8bf98..45e7119 100644 --- a/src/main/java/be/seeseepuff/pcinv/repositories/RamAssetRepository.java +++ b/src/main/java/be/seeseepuff/pcinv/repositories/RamRepository.java @@ -4,7 +4,7 @@ import be.seeseepuff.pcinv.models.RamAsset; import org.springframework.data.jpa.repository.JpaRepository; @SuppressWarnings("unused") -public interface RamAssetRepository extends JpaRepository, AssetRepository { +public interface RamRepository extends JpaRepository, AssetRepository { @Override default Class getAssetType() { return RamAsset.class; diff --git a/src/main/resources/templates/create_asset.html b/src/main/resources/templates/create_asset.html index 09ab10d..e900583 100644 --- a/src/main/resources/templates/create_asset.html +++ b/src/main/resources/templates/create_asset.html @@ -6,7 +6,7 @@

- +