diff --git a/prometeu-packer/prometeu-packer-api/src/main/java/p/packer/assets/PackerAssetDetailsDTO.java b/prometeu-packer/prometeu-packer-api/src/main/java/p/packer/assets/PackerAssetDetailsDTO.java new file mode 100644 index 00000000..eb33e42a --- /dev/null +++ b/prometeu-packer/prometeu-packer-api/src/main/java/p/packer/assets/PackerAssetDetailsDTO.java @@ -0,0 +1,28 @@ +package p.packer.assets; + +import p.packer.diagnostics.PackerDiagnosticDTO; + +import java.nio.file.Path; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +public record PackerAssetDetailsDTO( + PackerAssetSummaryDTO summary, + String outputFormat, + OutputCodecCatalog outputCodec, + List availableOutputCodecs, + Map> codecConfigurationFieldsByCodec, + Map> inputsByRole, + List diagnostics) { + + public PackerAssetDetailsDTO { + Objects.requireNonNull(summary, "summary"); + outputFormat = Objects.requireNonNullElse(outputFormat, "unknown").trim(); + outputCodec = Objects.requireNonNullElse(outputCodec, OutputCodecCatalog.UNKNOWN); + availableOutputCodecs = List.copyOf(Objects.requireNonNull(availableOutputCodecs, "availableOutputCodecs")); + codecConfigurationFieldsByCodec = Map.copyOf(Objects.requireNonNull(codecConfigurationFieldsByCodec, "codecConfigurationFieldsByCodec")); + inputsByRole = Map.copyOf(Objects.requireNonNull(inputsByRole, "inputsByRole")); + diagnostics = List.copyOf(Objects.requireNonNull(diagnostics, "diagnostics")); + } +} diff --git a/prometeu-packer/prometeu-packer-api/src/main/java/p/packer/assets/PackerAssetIdentityDTO.java b/prometeu-packer/prometeu-packer-api/src/main/java/p/packer/assets/PackerAssetIdentityDTO.java new file mode 100644 index 00000000..8a4affed --- /dev/null +++ b/prometeu-packer/prometeu-packer-api/src/main/java/p/packer/assets/PackerAssetIdentityDTO.java @@ -0,0 +1,20 @@ +package p.packer.assets; + +import java.nio.file.Path; +import java.util.Objects; + +public record PackerAssetIdentityDTO( + Integer assetId, + String assetUuid, + String assetName, + Path assetRoot) { + + public PackerAssetIdentityDTO { + assetUuid = assetUuid == null ? null : assetUuid.trim(); + assetName = Objects.requireNonNull(assetName, "assetName").trim(); + assetRoot = Objects.requireNonNull(assetRoot, "assetRoot").toAbsolutePath().normalize(); + if (assetName.isBlank()) { + throw new IllegalArgumentException("assetName must not be blank"); + } + } +} diff --git a/prometeu-packer/prometeu-packer-api/src/main/java/p/packer/assets/PackerAssetSummaryDTO.java b/prometeu-packer/prometeu-packer-api/src/main/java/p/packer/assets/PackerAssetSummaryDTO.java new file mode 100644 index 00000000..da27a2b7 --- /dev/null +++ b/prometeu-packer/prometeu-packer-api/src/main/java/p/packer/assets/PackerAssetSummaryDTO.java @@ -0,0 +1,27 @@ +package p.packer.assets; + +import java.util.Objects; + +public record PackerAssetSummaryDTO( + AssetReference assetReference, + PackerAssetIdentityDTO identity, + PackerAssetState state, + PackerBuildParticipation buildParticipation, + AssetFamilyCatalog assetFamily, + boolean preloadEnabled, + boolean hasDiagnostics) { + + public PackerAssetSummaryDTO { + Objects.requireNonNull(assetReference, "assetReference"); + Objects.requireNonNull(identity, "identity"); + Objects.requireNonNull(state, "state"); + Objects.requireNonNull(buildParticipation, "buildParticipation"); + assetFamily = Objects.requireNonNullElse(assetFamily, AssetFamilyCatalog.UNKNOWN); + if (state == PackerAssetState.REGISTERED && identity.assetId() == null) { + throw new IllegalArgumentException("registered asset must expose assetId"); + } + if (state == PackerAssetState.UNREGISTERED && buildParticipation != PackerBuildParticipation.EXCLUDED) { + throw new IllegalArgumentException("unregistered asset must stay excluded from build participation"); + } + } +} diff --git a/prometeu-packer/prometeu-packer-api/src/main/java/p/packer/assets/PackerCodecConfigurationFieldDTO.java b/prometeu-packer/prometeu-packer-api/src/main/java/p/packer/assets/PackerCodecConfigurationFieldDTO.java new file mode 100644 index 00000000..a24cfc18 --- /dev/null +++ b/prometeu-packer/prometeu-packer-api/src/main/java/p/packer/assets/PackerCodecConfigurationFieldDTO.java @@ -0,0 +1,24 @@ +package p.packer.assets; + +import java.util.List; +import java.util.Objects; + +public record PackerCodecConfigurationFieldDTO( + String key, + String label, + PackerCodecConfigurationFieldType fieldType, + String value, + boolean required, + List options) { + + public PackerCodecConfigurationFieldDTO { + key = Objects.requireNonNull(key, "key").trim(); + label = Objects.requireNonNull(label, "label").trim(); + Objects.requireNonNull(fieldType, "fieldType"); + value = Objects.requireNonNullElse(value, "").trim(); + options = List.copyOf(Objects.requireNonNull(options, "options")); + if (key.isBlank() || label.isBlank()) { + throw new IllegalArgumentException("codec configuration field key and label must not be blank"); + } + } +} diff --git a/prometeu-packer/prometeu-packer-api/src/main/java/p/packer/diagnostics/PackerDiagnosticDTO.java b/prometeu-packer/prometeu-packer-api/src/main/java/p/packer/diagnostics/PackerDiagnosticDTO.java new file mode 100644 index 00000000..7be102cb --- /dev/null +++ b/prometeu-packer/prometeu-packer-api/src/main/java/p/packer/diagnostics/PackerDiagnosticDTO.java @@ -0,0 +1,22 @@ +package p.packer.diagnostics; + +import java.nio.file.Path; +import java.util.Objects; + +public record PackerDiagnosticDTO( + PackerDiagnosticSeverity severity, + PackerDiagnosticCategory category, + String message, + Path evidencePath, + boolean blocking) { + + public PackerDiagnosticDTO { + Objects.requireNonNull(severity, "severity"); + Objects.requireNonNull(category, "category"); + message = Objects.requireNonNull(message, "message").trim(); + evidencePath = evidencePath == null ? null : evidencePath.toAbsolutePath().normalize(); + if (message.isBlank()) { + throw new IllegalArgumentException("message must not be blank"); + } + } +} diff --git a/prometeu-packer/prometeu-packer-api/src/main/java/p/packer/messages/GetAssetDetailsResult.java b/prometeu-packer/prometeu-packer-api/src/main/java/p/packer/messages/GetAssetDetailsResult.java index 2d4af342..d2c1088a 100644 --- a/prometeu-packer/prometeu-packer-api/src/main/java/p/packer/messages/GetAssetDetailsResult.java +++ b/prometeu-packer/prometeu-packer-api/src/main/java/p/packer/messages/GetAssetDetailsResult.java @@ -1,8 +1,8 @@ package p.packer.messages; import p.packer.PackerOperationStatus; -import p.packer.assets.PackerAssetDetails; -import p.packer.diagnostics.PackerDiagnostic; +import p.packer.assets.PackerAssetDetailsDTO; +import p.packer.diagnostics.PackerDiagnosticDTO; import java.util.List; import java.util.Objects; @@ -10,8 +10,8 @@ import java.util.Objects; public record GetAssetDetailsResult( PackerOperationStatus status, String summary, - PackerAssetDetails details, - List diagnostics) { + PackerAssetDetailsDTO details, + List diagnostics) { public GetAssetDetailsResult { Objects.requireNonNull(status, "status"); diff --git a/prometeu-packer/prometeu-packer-api/src/main/java/p/packer/messages/InitWorkspaceResult.java b/prometeu-packer/prometeu-packer-api/src/main/java/p/packer/messages/InitWorkspaceResult.java index bd5e533b..0fe9e7c1 100644 --- a/prometeu-packer/prometeu-packer-api/src/main/java/p/packer/messages/InitWorkspaceResult.java +++ b/prometeu-packer/prometeu-packer-api/src/main/java/p/packer/messages/InitWorkspaceResult.java @@ -1,7 +1,7 @@ package p.packer.messages; import p.packer.PackerOperationStatus; -import p.packer.diagnostics.PackerDiagnostic; +import p.packer.diagnostics.PackerDiagnosticDTO; import java.nio.file.Path; import java.util.List; @@ -11,7 +11,7 @@ public record InitWorkspaceResult( PackerOperationStatus status, String summary, Path registryPath, - List diagnostics) { + List diagnostics) { public InitWorkspaceResult { Objects.requireNonNull(status, "status"); diff --git a/prometeu-packer/prometeu-packer-api/src/main/java/p/packer/messages/ListAssetsResult.java b/prometeu-packer/prometeu-packer-api/src/main/java/p/packer/messages/ListAssetsResult.java index 5f298255..a862bcc7 100644 --- a/prometeu-packer/prometeu-packer-api/src/main/java/p/packer/messages/ListAssetsResult.java +++ b/prometeu-packer/prometeu-packer-api/src/main/java/p/packer/messages/ListAssetsResult.java @@ -1,8 +1,8 @@ package p.packer.messages; import p.packer.PackerOperationStatus; -import p.packer.assets.PackerAssetSummary; -import p.packer.diagnostics.PackerDiagnostic; +import p.packer.assets.PackerAssetSummaryDTO; +import p.packer.diagnostics.PackerDiagnosticDTO; import java.util.List; import java.util.Objects; @@ -10,8 +10,8 @@ import java.util.Objects; public record ListAssetsResult( PackerOperationStatus status, String summary, - List assets, - List diagnostics) { + List assets, + List diagnostics) { public ListAssetsResult { Objects.requireNonNull(status, "status"); diff --git a/prometeu-packer/prometeu-packer-v1/src/main/java/p/packer/models/PackerAssetDeclarationParseResult.java b/prometeu-packer/prometeu-packer-v1/src/main/java/p/packer/models/PackerAssetDeclarationParseResult.java index ed13e598..0cceef6e 100644 --- a/prometeu-packer/prometeu-packer-v1/src/main/java/p/packer/models/PackerAssetDeclarationParseResult.java +++ b/prometeu-packer/prometeu-packer-v1/src/main/java/p/packer/models/PackerAssetDeclarationParseResult.java @@ -1,7 +1,5 @@ package p.packer.models; -import p.packer.diagnostics.PackerDiagnostic; - import java.util.List; import java.util.Objects; diff --git a/prometeu-packer/prometeu-packer-api/src/main/java/p/packer/assets/PackerAssetDetails.java b/prometeu-packer/prometeu-packer-v1/src/main/java/p/packer/models/PackerAssetDetails.java similarity index 94% rename from prometeu-packer/prometeu-packer-api/src/main/java/p/packer/assets/PackerAssetDetails.java rename to prometeu-packer/prometeu-packer-v1/src/main/java/p/packer/models/PackerAssetDetails.java index 62325381..59f0db82 100644 --- a/prometeu-packer/prometeu-packer-api/src/main/java/p/packer/assets/PackerAssetDetails.java +++ b/prometeu-packer/prometeu-packer-v1/src/main/java/p/packer/models/PackerAssetDetails.java @@ -1,6 +1,6 @@ -package p.packer.assets; +package p.packer.models; -import p.packer.diagnostics.PackerDiagnostic; +import p.packer.assets.OutputCodecCatalog; import java.nio.file.Path; import java.util.List; diff --git a/prometeu-packer/prometeu-packer-api/src/main/java/p/packer/assets/PackerAssetIdentity.java b/prometeu-packer/prometeu-packer-v1/src/main/java/p/packer/models/PackerAssetIdentity.java similarity index 95% rename from prometeu-packer/prometeu-packer-api/src/main/java/p/packer/assets/PackerAssetIdentity.java rename to prometeu-packer/prometeu-packer-v1/src/main/java/p/packer/models/PackerAssetIdentity.java index 7ad625b5..d01daf89 100644 --- a/prometeu-packer/prometeu-packer-api/src/main/java/p/packer/assets/PackerAssetIdentity.java +++ b/prometeu-packer/prometeu-packer-v1/src/main/java/p/packer/models/PackerAssetIdentity.java @@ -1,4 +1,4 @@ -package p.packer.assets; +package p.packer.models; import java.nio.file.Path; import java.util.Objects; diff --git a/prometeu-packer/prometeu-packer-api/src/main/java/p/packer/assets/PackerAssetSummary.java b/prometeu-packer/prometeu-packer-v1/src/main/java/p/packer/models/PackerAssetSummary.java similarity index 84% rename from prometeu-packer/prometeu-packer-api/src/main/java/p/packer/assets/PackerAssetSummary.java rename to prometeu-packer/prometeu-packer-v1/src/main/java/p/packer/models/PackerAssetSummary.java index c00c1f0e..2dc0b258 100644 --- a/prometeu-packer/prometeu-packer-api/src/main/java/p/packer/assets/PackerAssetSummary.java +++ b/prometeu-packer/prometeu-packer-v1/src/main/java/p/packer/models/PackerAssetSummary.java @@ -1,4 +1,9 @@ -package p.packer.assets; +package p.packer.models; + +import p.packer.assets.AssetFamilyCatalog; +import p.packer.assets.AssetReference; +import p.packer.assets.PackerAssetState; +import p.packer.assets.PackerBuildParticipation; import java.util.Objects; diff --git a/prometeu-packer/prometeu-packer-api/src/main/java/p/packer/assets/PackerCodecConfigurationField.java b/prometeu-packer/prometeu-packer-v1/src/main/java/p/packer/models/PackerCodecConfigurationField.java similarity index 90% rename from prometeu-packer/prometeu-packer-api/src/main/java/p/packer/assets/PackerCodecConfigurationField.java rename to prometeu-packer/prometeu-packer-v1/src/main/java/p/packer/models/PackerCodecConfigurationField.java index faf0f127..f7467436 100644 --- a/prometeu-packer/prometeu-packer-api/src/main/java/p/packer/assets/PackerCodecConfigurationField.java +++ b/prometeu-packer/prometeu-packer-v1/src/main/java/p/packer/models/PackerCodecConfigurationField.java @@ -1,4 +1,6 @@ -package p.packer.assets; +package p.packer.models; + +import p.packer.assets.PackerCodecConfigurationFieldType; import java.util.List; import java.util.Objects; diff --git a/prometeu-packer/prometeu-packer-api/src/main/java/p/packer/diagnostics/PackerDiagnostic.java b/prometeu-packer/prometeu-packer-v1/src/main/java/p/packer/models/PackerDiagnostic.java similarity index 83% rename from prometeu-packer/prometeu-packer-api/src/main/java/p/packer/diagnostics/PackerDiagnostic.java rename to prometeu-packer/prometeu-packer-v1/src/main/java/p/packer/models/PackerDiagnostic.java index 47973d5f..e575d638 100644 --- a/prometeu-packer/prometeu-packer-api/src/main/java/p/packer/diagnostics/PackerDiagnostic.java +++ b/prometeu-packer/prometeu-packer-v1/src/main/java/p/packer/models/PackerDiagnostic.java @@ -1,4 +1,7 @@ -package p.packer.diagnostics; +package p.packer.models; + +import p.packer.diagnostics.PackerDiagnosticCategory; +import p.packer.diagnostics.PackerDiagnosticSeverity; import java.nio.file.Path; import java.util.Objects; diff --git a/prometeu-packer/prometeu-packer-v1/src/main/java/p/packer/services/FileSystemPackerWorkspaceService.java b/prometeu-packer/prometeu-packer-v1/src/main/java/p/packer/services/FileSystemPackerWorkspaceService.java index f413f77b..8360c1bb 100644 --- a/prometeu-packer/prometeu-packer-v1/src/main/java/p/packer/services/FileSystemPackerWorkspaceService.java +++ b/prometeu-packer/prometeu-packer-v1/src/main/java/p/packer/services/FileSystemPackerWorkspaceService.java @@ -6,11 +6,8 @@ import p.packer.PackerProjectContext; import p.packer.assets.AssetFamilyCatalog; import p.packer.assets.AssetReference; import p.packer.assets.OutputFormatCatalog; -import p.packer.assets.PackerAssetIdentity; import p.packer.assets.PackerAssetState; -import p.packer.assets.PackerAssetSummary; import p.packer.assets.PackerBuildParticipation; -import p.packer.diagnostics.PackerDiagnostic; import p.packer.diagnostics.PackerDiagnosticCategory; import p.packer.diagnostics.PackerDiagnosticSeverity; import p.packer.events.PackerEventKind; @@ -26,6 +23,9 @@ import p.packer.messages.ListAssetsRequest; import p.packer.messages.ListAssetsResult; import p.packer.PackerWorkspaceService; import p.packer.models.PackerAssetDeclarationParseResult; +import p.packer.models.PackerAssetIdentity; +import p.packer.models.PackerAssetSummary; +import p.packer.models.PackerDiagnostic; import p.packer.models.PackerRegistryEntry; import p.packer.models.PackerRegistryState; import p.packer.models.PackerRuntimeAsset; @@ -124,8 +124,8 @@ public final class FileSystemPackerWorkspaceService implements PackerWorkspaceSe return new ListAssetsResult( status, "Packer asset snapshot ready.", - assets, - diagnostics); + PackerReadMessageMapper.toAssetSummaryDTOs(assets), + PackerReadMessageMapper.toDiagnosticDTOs(diagnostics)); } @Override diff --git a/prometeu-packer/prometeu-packer-v1/src/main/java/p/packer/services/PackerAssetDeclarationParser.java b/prometeu-packer/prometeu-packer-v1/src/main/java/p/packer/services/PackerAssetDeclarationParser.java index 08f968b0..71979691 100644 --- a/prometeu-packer/prometeu-packer-v1/src/main/java/p/packer/services/PackerAssetDeclarationParser.java +++ b/prometeu-packer/prometeu-packer-v1/src/main/java/p/packer/services/PackerAssetDeclarationParser.java @@ -4,11 +4,11 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import p.packer.assets.AssetFamilyCatalog; import p.packer.assets.OutputCodecCatalog; -import p.packer.diagnostics.PackerDiagnostic; import p.packer.diagnostics.PackerDiagnosticCategory; import p.packer.diagnostics.PackerDiagnosticSeverity; import p.packer.models.PackerAssetDeclaration; import p.packer.models.PackerAssetDeclarationParseResult; +import p.packer.models.PackerDiagnostic; import java.io.IOException; import java.nio.file.Path; diff --git a/prometeu-packer/prometeu-packer-v1/src/main/java/p/packer/services/PackerAssetDetailsService.java b/prometeu-packer/prometeu-packer-v1/src/main/java/p/packer/services/PackerAssetDetailsService.java index 31a5c7f3..9bc1cdea 100644 --- a/prometeu-packer/prometeu-packer-v1/src/main/java/p/packer/services/PackerAssetDetailsService.java +++ b/prometeu-packer/prometeu-packer-v1/src/main/java/p/packer/services/PackerAssetDetailsService.java @@ -5,18 +5,18 @@ import p.packer.PackerProjectContext; import p.packer.assets.AssetFamilyCatalog; import p.packer.assets.AssetReference; import p.packer.assets.OutputCodecCatalog; -import p.packer.assets.PackerAssetDetails; -import p.packer.assets.PackerAssetIdentity; import p.packer.assets.PackerAssetState; -import p.packer.assets.PackerAssetSummary; import p.packer.assets.PackerBuildParticipation; -import p.packer.diagnostics.PackerDiagnostic; import p.packer.diagnostics.PackerDiagnosticCategory; import p.packer.diagnostics.PackerDiagnosticSeverity; import p.packer.messages.GetAssetDetailsRequest; import p.packer.messages.GetAssetDetailsResult; import p.packer.models.PackerAssetDeclaration; import p.packer.models.PackerAssetDeclarationParseResult; +import p.packer.models.PackerAssetDetails; +import p.packer.models.PackerAssetIdentity; +import p.packer.models.PackerAssetSummary; +import p.packer.models.PackerDiagnostic; import p.packer.models.PackerRegistryEntry; import p.packer.models.PackerRuntimeAsset; import p.packer.models.PackerRuntimeSnapshot; @@ -93,8 +93,8 @@ public final class PackerAssetDetailsService { return new GetAssetDetailsResult( diagnostics.stream().anyMatch(PackerDiagnostic::blocking) ? PackerOperationStatus.PARTIAL : PackerOperationStatus.SUCCESS, "Asset details resolved from runtime snapshot.", - details, - diagnostics); + PackerReadMessageMapper.toAssetDetailsDTO(details), + PackerReadMessageMapper.toDiagnosticDTOs(diagnostics)); } private GetAssetDetailsResult failureResult( @@ -130,8 +130,8 @@ public final class PackerAssetDetailsService { return new GetAssetDetailsResult( PackerOperationStatus.FAILED, "Asset declaration is invalid or unreadable.", - details, - diagnostics); + PackerReadMessageMapper.toAssetDetailsDTO(details), + PackerReadMessageMapper.toDiagnosticDTOs(diagnostics)); } private Map> resolveInputs(Path assetRoot, Map> inputsByRole) { diff --git a/prometeu-packer/prometeu-packer-v1/src/main/java/p/packer/services/PackerOutputContractCatalog.java b/prometeu-packer/prometeu-packer-v1/src/main/java/p/packer/services/PackerOutputContractCatalog.java index 53166967..762e487c 100644 --- a/prometeu-packer/prometeu-packer-v1/src/main/java/p/packer/services/PackerOutputContractCatalog.java +++ b/prometeu-packer/prometeu-packer-v1/src/main/java/p/packer/services/PackerOutputContractCatalog.java @@ -2,13 +2,13 @@ package p.packer.services; import p.packer.assets.OutputCodecCatalog; import p.packer.assets.OutputFormatCatalog; +import p.packer.models.PackerCodecConfigurationField; import java.util.LinkedHashSet; import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Objects; import java.util.Set; -import p.packer.assets.PackerCodecConfigurationField; final class PackerOutputContractCatalog { private PackerOutputContractCatalog() { diff --git a/prometeu-packer/prometeu-packer-v1/src/main/java/p/packer/services/PackerReadMessageMapper.java b/prometeu-packer/prometeu-packer-v1/src/main/java/p/packer/services/PackerReadMessageMapper.java new file mode 100644 index 00000000..7110d329 --- /dev/null +++ b/prometeu-packer/prometeu-packer-v1/src/main/java/p/packer/services/PackerReadMessageMapper.java @@ -0,0 +1,87 @@ +package p.packer.services; + +import p.packer.assets.PackerAssetDetailsDTO; +import p.packer.assets.PackerAssetIdentityDTO; +import p.packer.assets.PackerAssetSummaryDTO; +import p.packer.assets.PackerCodecConfigurationFieldDTO; +import p.packer.diagnostics.PackerDiagnosticDTO; +import p.packer.models.PackerAssetDetails; +import p.packer.models.PackerAssetIdentity; +import p.packer.models.PackerAssetSummary; +import p.packer.models.PackerCodecConfigurationField; +import p.packer.models.PackerDiagnostic; + +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +public final class PackerReadMessageMapper { + private PackerReadMessageMapper() { + } + + public static PackerAssetSummaryDTO toAssetSummaryDTO(PackerAssetSummary summary) { + return new PackerAssetSummaryDTO( + summary.assetReference(), + toAssetIdentityDTO(summary.identity()), + summary.state(), + summary.buildParticipation(), + summary.assetFamily(), + summary.preloadEnabled(), + summary.hasDiagnostics()); + } + + public static PackerAssetDetailsDTO toAssetDetailsDTO(PackerAssetDetails details) { + return new PackerAssetDetailsDTO( + toAssetSummaryDTO(details.summary()), + details.outputFormat(), + details.outputCodec(), + details.availableOutputCodecs(), + toCodecConfigurationFieldsByCodecDTO(details.codecConfigurationFieldsByCodec()), + details.inputsByRole(), + toDiagnosticDTOs(details.diagnostics())); + } + + public static List toAssetSummaryDTOs(List summaries) { + return summaries.stream().map(PackerReadMessageMapper::toAssetSummaryDTO).toList(); + } + + public static List toDiagnosticDTOs(List diagnostics) { + return diagnostics.stream().map(PackerReadMessageMapper::toDiagnosticDTO).toList(); + } + + private static PackerAssetIdentityDTO toAssetIdentityDTO(PackerAssetIdentity identity) { + return new PackerAssetIdentityDTO( + identity.assetId(), + identity.assetUuid(), + identity.assetName(), + identity.assetRoot()); + } + + private static Map> toCodecConfigurationFieldsByCodecDTO( + Map> fieldsByCodec) { + return fieldsByCodec.entrySet().stream().collect(Collectors.toMap( + Map.Entry::getKey, + entry -> entry.getValue().stream().map(PackerReadMessageMapper::toCodecConfigurationFieldDTO).toList(), + (left, right) -> left, + java.util.LinkedHashMap::new)); + } + + private static PackerCodecConfigurationFieldDTO toCodecConfigurationFieldDTO(PackerCodecConfigurationField field) { + return new PackerCodecConfigurationFieldDTO( + field.key(), + field.label(), + field.fieldType(), + field.value(), + field.required(), + field.options()); + } + + private static PackerDiagnosticDTO toDiagnosticDTO(PackerDiagnostic diagnostic) { + return new PackerDiagnosticDTO( + diagnostic.severity(), + diagnostic.category(), + diagnostic.message(), + diagnostic.evidencePath(), + diagnostic.blocking()); + } +} diff --git a/prometeu-studio/src/main/java/p/studio/workspaces/assets/details/AssetDetailsControl.java b/prometeu-studio/src/main/java/p/studio/workspaces/assets/details/AssetDetailsControl.java index 7e0cc970..005b2196 100644 --- a/prometeu-studio/src/main/java/p/studio/workspaces/assets/details/AssetDetailsControl.java +++ b/prometeu-studio/src/main/java/p/studio/workspaces/assets/details/AssetDetailsControl.java @@ -7,7 +7,7 @@ import javafx.scene.layout.HBox; import javafx.scene.layout.Priority; import javafx.scene.layout.VBox; import p.packer.assets.AssetReference; -import p.packer.assets.PackerAssetDetails; +import p.packer.assets.PackerAssetDetailsDTO; import p.packer.messages.GetAssetDetailsRequest; import p.studio.Container; import p.studio.events.StudioWorkspaceEventBus; @@ -244,7 +244,7 @@ public final class AssetDetailsControl extends VBox implements StudioEventAware workspaceSummaryLabel.setManaged(visible); } - private AssetWorkspaceAssetDetails mapDetails(PackerAssetDetails details) { + private AssetWorkspaceAssetDetails mapDetails(PackerAssetDetailsDTO details) { return new AssetWorkspaceAssetDetails( AssetListPackerMappings.mapSummary(details.summary()), details.outputFormat(), diff --git a/prometeu-studio/src/main/java/p/studio/workspaces/assets/details/AssetListPackerMappings.java b/prometeu-studio/src/main/java/p/studio/workspaces/assets/details/AssetListPackerMappings.java index 4128e370..6c0052af 100644 --- a/prometeu-studio/src/main/java/p/studio/workspaces/assets/details/AssetListPackerMappings.java +++ b/prometeu-studio/src/main/java/p/studio/workspaces/assets/details/AssetListPackerMappings.java @@ -1,6 +1,6 @@ package p.studio.workspaces.assets.details; -import p.packer.assets.PackerAssetSummary; +import p.packer.assets.PackerAssetSummaryDTO; import p.studio.workspaces.assets.messages.AssetWorkspaceAssetSummary; import p.studio.workspaces.assets.messages.AssetWorkspaceAssetState; import p.studio.workspaces.assets.messages.AssetWorkspaceBuildParticipation; @@ -9,7 +9,7 @@ public final class AssetListPackerMappings { private AssetListPackerMappings() { } - public static AssetWorkspaceAssetSummary mapSummary(PackerAssetSummary summary) { + public static AssetWorkspaceAssetSummary mapSummary(PackerAssetSummaryDTO summary) { final AssetWorkspaceAssetState state = switch (summary.state()) { case REGISTERED -> AssetWorkspaceAssetState.REGISTERED; case UNREGISTERED -> AssetWorkspaceAssetState.UNREGISTERED; diff --git a/prometeu-studio/src/main/java/p/studio/workspaces/assets/details/contract/AssetDetailsContractControl.java b/prometeu-studio/src/main/java/p/studio/workspaces/assets/details/contract/AssetDetailsContractControl.java index eaee0fc4..d5251ba9 100644 --- a/prometeu-studio/src/main/java/p/studio/workspaces/assets/details/contract/AssetDetailsContractControl.java +++ b/prometeu-studio/src/main/java/p/studio/workspaces/assets/details/contract/AssetDetailsContractControl.java @@ -11,7 +11,7 @@ import javafx.scene.layout.HBox; import javafx.scene.layout.Priority; import javafx.scene.layout.VBox; import p.packer.assets.OutputCodecCatalog; -import p.packer.assets.PackerCodecConfigurationField; +import p.packer.assets.PackerCodecConfigurationFieldDTO; import p.studio.Container; import p.studio.controls.forms.StudioFormActionBar; import p.studio.controls.forms.StudioFormMode; @@ -211,7 +211,7 @@ public final class AssetDetailsContractControl extends VBox implements StudioCon return createCodecMetadataPane(title, content); } - for (PackerCodecConfigurationField field : fields) { + for (PackerCodecConfigurationFieldDTO field : fields) { content.getChildren().add(createCodecFieldRow(field, draft, editing)); } return createCodecMetadataPane(title, content); @@ -230,7 +230,7 @@ public final class AssetDetailsContractControl extends VBox implements StudioCon } private Node createCodecFieldRow( - PackerCodecConfigurationField field, + PackerCodecConfigurationFieldDTO field, AssetContractDraft draft, boolean editing) { final Node valueNode = switch (field.fieldType()) { @@ -242,7 +242,7 @@ public final class AssetDetailsContractControl extends VBox implements StudioCon } private Node createBooleanField( - PackerCodecConfigurationField field, + PackerCodecConfigurationFieldDTO field, AssetContractDraft draft, boolean editing) { final CheckBox checkBox = new CheckBox(); @@ -265,7 +265,7 @@ public final class AssetDetailsContractControl extends VBox implements StudioCon } private Node createEnumField( - PackerCodecConfigurationField field, + PackerCodecConfigurationFieldDTO field, AssetContractDraft draft, boolean editing) { final ComboBox comboBox = new ComboBox<>(FXCollections.observableArrayList(field.options())); @@ -289,7 +289,7 @@ public final class AssetDetailsContractControl extends VBox implements StudioCon } private Node createTextField( - PackerCodecConfigurationField field, + PackerCodecConfigurationFieldDTO field, AssetContractDraft draft, boolean editing) { final TextField textField = new TextField(currentValue(field, draft)); @@ -313,7 +313,7 @@ public final class AssetDetailsContractControl extends VBox implements StudioCon return textField; } - private String currentValue(PackerCodecConfigurationField field, AssetContractDraft draft) { + private String currentValue(PackerCodecConfigurationFieldDTO field, AssetContractDraft draft) { return draft.codecFieldValue(draft.selectedCodec(), field.key(), field.value()); } diff --git a/prometeu-studio/src/main/java/p/studio/workspaces/assets/list/AssetListControl.java b/prometeu-studio/src/main/java/p/studio/workspaces/assets/list/AssetListControl.java index 17db1564..fd853832 100644 --- a/prometeu-studio/src/main/java/p/studio/workspaces/assets/list/AssetListControl.java +++ b/prometeu-studio/src/main/java/p/studio/workspaces/assets/list/AssetListControl.java @@ -11,7 +11,7 @@ import javafx.scene.layout.FlowPane; import javafx.scene.layout.Priority; import javafx.scene.layout.VBox; import p.packer.assets.AssetReference; -import p.packer.assets.PackerAssetSummary; +import p.packer.assets.PackerAssetSummaryDTO; import p.packer.messages.ListAssetsRequest; import p.studio.Container; import p.studio.events.StudioWorkspaceEventBus; @@ -233,7 +233,7 @@ public final class AssetListControl extends VBox implements StudioEventAware { workspaceBus.publish(new StudioAssetsNavigatorViewStateChangedEvent(nextViewState)); } - private AssetWorkspaceAssetSummary mapAsset(PackerAssetSummary summary) { + private AssetWorkspaceAssetSummary mapAsset(PackerAssetSummaryDTO summary) { return AssetListPackerMappings.mapSummary(summary); } diff --git a/prometeu-studio/src/main/java/p/studio/workspaces/assets/messages/AssetWorkspaceAssetDetails.java b/prometeu-studio/src/main/java/p/studio/workspaces/assets/messages/AssetWorkspaceAssetDetails.java index 0f8c657b..7694cb33 100644 --- a/prometeu-studio/src/main/java/p/studio/workspaces/assets/messages/AssetWorkspaceAssetDetails.java +++ b/prometeu-studio/src/main/java/p/studio/workspaces/assets/messages/AssetWorkspaceAssetDetails.java @@ -1,6 +1,6 @@ package p.studio.workspaces.assets.messages; -import p.packer.assets.PackerCodecConfigurationField; +import p.packer.assets.PackerCodecConfigurationFieldDTO; import p.packer.assets.OutputCodecCatalog; import java.nio.file.Path; @@ -13,7 +13,7 @@ public record AssetWorkspaceAssetDetails( String outputFormat, OutputCodecCatalog outputCodec, List availableOutputCodecs, - Map> codecConfigurationFieldsByCodec, + Map> codecConfigurationFieldsByCodec, Map> inputsByRole) { public AssetWorkspaceAssetDetails {