asset workspace progress
This commit is contained in:
parent
2d923455f5
commit
bb2c33a952
@ -0,0 +1,98 @@
|
||||
# PR-19 API Surface Audit, Model Separation, and Public Read DTOs
|
||||
|
||||
Domain Owner: `docs/packer`
|
||||
Cross-Domain Impact: `docs/studio`
|
||||
|
||||
## Briefing
|
||||
|
||||
The current packer API still exposes some read payload types that are simultaneously acting as public transport objects and internal implementation models.
|
||||
|
||||
This is acceptable during early convergence, but it weakens the boundary between `prometeu-packer-api` and `prometeu-packer-v1`.
|
||||
|
||||
The next cleanup step is to make the API explicit about three different categories:
|
||||
|
||||
- domain contracts,
|
||||
- request/response messages,
|
||||
- public read DTOs.
|
||||
|
||||
At the same time, the internal implementation models used by `prometeu-packer-v1` should stop leaking through the API as if they were stable public models.
|
||||
|
||||
## Objective
|
||||
|
||||
Separate internal `v1` read models from public API read DTOs while preserving:
|
||||
|
||||
- request/response messages as immutable messages,
|
||||
- domain contracts as domain contracts,
|
||||
- exceptions as part of the public API,
|
||||
- and Studio compatibility through explicit mapper-based conversion inside `prometeu-packer-v1`.
|
||||
|
||||
## Dependencies
|
||||
|
||||
- [`./PR-15-snapshot-backed-asset-query-services.md`](./PR-15-snapshot-backed-asset-query-services.md)
|
||||
- [`./PR-16-write-lane-command-completion-and-used-write-services.md`](./PR-16-write-lane-command-completion-and-used-write-services.md)
|
||||
- [`./PR-17-studio-runtime-adapter-and-assets-workspace-consumption.md`](./PR-17-studio-runtime-adapter-and-assets-workspace-consumption.md)
|
||||
- [`./PR-18-legacy-service-retirement-and-regression-hardening.md`](./PR-18-legacy-service-retirement-and-regression-hardening.md)
|
||||
|
||||
## Scope
|
||||
|
||||
- audit the current public packer API against real external consumption
|
||||
- preserve public exceptions in the API even when only `v1` currently throws them
|
||||
- preserve request/response records as request/response messages rather than renaming them as generic DTOs
|
||||
- move the current mixed model/transport read types out of the API and into `prometeu-packer-v1`
|
||||
- introduce public read DTOs in the API for the information Studio actually consumes
|
||||
- add explicit mapper classes in `prometeu-packer-v1` to convert internal models into API DTOs
|
||||
- keep the active service wave limited to `initWorkspace`, `listAssets`, `getAssetDetails`, and `createAsset`
|
||||
|
||||
## Non-Goals
|
||||
|
||||
- no new packer capabilities
|
||||
- no write API redesign
|
||||
- no doctor or build/pack reintroduction
|
||||
- no reconcile observer work
|
||||
- no semantic change to asset identity, registry ownership, or snapshot authority
|
||||
|
||||
## Execution Method
|
||||
|
||||
1. Classify the current API surface into:
|
||||
- public domain contracts,
|
||||
- public request/response messages,
|
||||
- public read DTOs,
|
||||
- internal implementation models.
|
||||
2. Keep domain contracts in `prometeu-packer-api` without `DTO` suffixes.
|
||||
3. Keep request/response types in `prometeu-packer-api` as immutable message records with `Request` and `Response` naming.
|
||||
4. Move the current mixed read shapes now exposed as `PackerAssetSummary`, `PackerAssetDetails`, and `PackerAssetIdentity` into `prometeu-packer-v1` as internal models.
|
||||
5. Introduce explicit public DTOs in the API for runtime-backed read payloads, such as:
|
||||
- `PackerAssetSummaryDTO`
|
||||
- `PackerAssetDetailsDTO`
|
||||
- `PackerAssetIdentityDTO`
|
||||
- `PackerCodecConfigurationFieldDTO`
|
||||
- and `PackerDiagnosticDTO` if diagnostics remain part of public responses.
|
||||
6. Add explicit mapper classes in `prometeu-packer-v1` to convert internal models into API DTOs before responses cross the module boundary.
|
||||
7. Update response messages to carry the new DTO types instead of leaking `v1` models through the API.
|
||||
8. Update Studio consumers to read from the new DTO types while preserving the same user-facing behavior.
|
||||
|
||||
## Acceptance Criteria
|
||||
|
||||
- the API surface is explicitly partitioned between domain contracts, request/response messages, and read DTOs
|
||||
- request/response messages remain immutable message records and are not renamed as generic DTOs
|
||||
- public exceptions remain in the API
|
||||
- internal `v1` models are no longer exposed as if they were public API models
|
||||
- Studio depends only on API contracts and DTOs, not on `v1` model semantics
|
||||
- conversion from `v1` internal models to public API DTOs happens through explicit mapper code
|
||||
- no behavior regression is introduced in `initWorkspace`, `listAssets`, `getAssetDetails`, or `createAsset`
|
||||
|
||||
## Validation
|
||||
|
||||
- compile-time audit proving `prometeu-studio` and `prometeu-app` consume only API contracts
|
||||
- packer regression tests for read and write flows
|
||||
- Studio regression tests for asset list, asset details, and add asset flows
|
||||
- targeted tests for mapper coverage between internal models and public API DTOs
|
||||
|
||||
## Affected Artifacts
|
||||
|
||||
- `prometeu-packer/prometeu-packer-api/src/main/java/p/packer/**`
|
||||
- `prometeu-packer/prometeu-packer-v1/src/main/java/p/packer/**`
|
||||
- `prometeu-packer/prometeu-packer-v1/src/test/java/p/packer/**`
|
||||
- `prometeu-studio/src/main/java/p/studio/**`
|
||||
- `prometeu-studio/src/test/java/p/studio/**`
|
||||
|
||||
@ -78,6 +78,7 @@ The current production track for the standalone `prometeu-packer` project is:
|
||||
16. [`PR-16-write-lane-command-completion-and-used-write-services.md`](./PR-16-write-lane-command-completion-and-used-write-services.md)
|
||||
17. [`PR-17-studio-runtime-adapter-and-assets-workspace-consumption.md`](./PR-17-studio-runtime-adapter-and-assets-workspace-consumption.md)
|
||||
18. [`PR-18-legacy-service-retirement-and-regression-hardening.md`](./PR-18-legacy-service-retirement-and-regression-hardening.md)
|
||||
19. [`PR-19-api-surface-audit-model-separation-and-public-read-dtos.md`](./PR-19-api-surface-audit-model-separation-and-public-read-dtos.md)
|
||||
|
||||
Current wave discipline from `PR-11` onward:
|
||||
|
||||
@ -88,4 +89,4 @@ Current wave discipline from `PR-11` onward:
|
||||
|
||||
Recommended dependency chain:
|
||||
|
||||
`PR-01 -> PR-02 -> PR-03 -> PR-04 -> PR-05 -> PR-06 -> PR-07 -> PR-08 -> PR-09 -> PR-10 -> PR-11 -> PR-12 -> PR-13 -> PR-14 -> PR-15 -> PR-16 -> PR-17 -> PR-18`
|
||||
`PR-01 -> PR-02 -> PR-03 -> PR-04 -> PR-05 -> PR-06 -> PR-07 -> PR-08 -> PR-09 -> PR-10 -> PR-11 -> PR-12 -> PR-13 -> PR-14 -> PR-15 -> PR-16 -> PR-17 -> PR-18 -> PR-19`
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
package p.packer.assets;
|
||||
package p.packer.dtos;
|
||||
|
||||
import p.packer.diagnostics.PackerDiagnosticDTO;
|
||||
import p.packer.messages.assets.OutputCodecCatalog;
|
||||
|
||||
import java.nio.file.Path;
|
||||
import java.util.List;
|
||||
@ -1,4 +1,4 @@
|
||||
package p.packer.assets;
|
||||
package p.packer.dtos;
|
||||
|
||||
import java.nio.file.Path;
|
||||
import java.util.Objects;
|
||||
@ -1,4 +1,9 @@
|
||||
package p.packer.assets;
|
||||
package p.packer.dtos;
|
||||
|
||||
import p.packer.messages.AssetReference;
|
||||
import p.packer.messages.assets.AssetFamilyCatalog;
|
||||
import p.packer.messages.assets.PackerAssetState;
|
||||
import p.packer.messages.assets.PackerBuildParticipation;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
@ -1,4 +1,6 @@
|
||||
package p.packer.assets;
|
||||
package p.packer.dtos;
|
||||
|
||||
import p.packer.messages.assets.PackerCodecConfigurationFieldType;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
@ -1,4 +1,7 @@
|
||||
package p.packer.diagnostics;
|
||||
package p.packer.dtos;
|
||||
|
||||
import p.packer.messages.diagnostics.PackerDiagnosticCategory;
|
||||
import p.packer.messages.diagnostics.PackerDiagnosticSeverity;
|
||||
|
||||
import java.nio.file.Path;
|
||||
import java.util.Objects;
|
||||
@ -1,4 +1,4 @@
|
||||
package p.packer.assets;
|
||||
package p.packer.messages;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
@ -1,9 +1,8 @@
|
||||
package p.packer.messages;
|
||||
|
||||
import p.packer.PackerProjectContext;
|
||||
import p.packer.assets.AssetFamilyCatalog;
|
||||
import p.packer.assets.OutputCodecCatalog;
|
||||
import p.packer.assets.OutputFormatCatalog;
|
||||
import p.packer.messages.assets.AssetFamilyCatalog;
|
||||
import p.packer.messages.assets.OutputCodecCatalog;
|
||||
import p.packer.messages.assets.OutputFormatCatalog;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
|
||||
@ -1,8 +1,5 @@
|
||||
package p.packer.messages;
|
||||
|
||||
import p.packer.PackerOperationStatus;
|
||||
import p.packer.assets.AssetReference;
|
||||
|
||||
import java.nio.file.Path;
|
||||
|
||||
public record CreateAssetResult(
|
||||
|
||||
@ -1,8 +1,5 @@
|
||||
package p.packer.messages;
|
||||
|
||||
import p.packer.PackerProjectContext;
|
||||
import p.packer.assets.AssetReference;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
public record GetAssetDetailsRequest(
|
||||
|
||||
@ -1,8 +1,7 @@
|
||||
package p.packer.messages;
|
||||
|
||||
import p.packer.PackerOperationStatus;
|
||||
import p.packer.assets.PackerAssetDetailsDTO;
|
||||
import p.packer.diagnostics.PackerDiagnosticDTO;
|
||||
import p.packer.dtos.PackerAssetDetailsDTO;
|
||||
import p.packer.dtos.PackerDiagnosticDTO;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
@ -1,7 +1,5 @@
|
||||
package p.packer.messages;
|
||||
|
||||
import p.packer.PackerProjectContext;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
public record InitWorkspaceRequest(
|
||||
|
||||
@ -1,7 +1,6 @@
|
||||
package p.packer.messages;
|
||||
|
||||
import p.packer.PackerOperationStatus;
|
||||
import p.packer.diagnostics.PackerDiagnosticDTO;
|
||||
import p.packer.dtos.PackerDiagnosticDTO;
|
||||
|
||||
import java.nio.file.Path;
|
||||
import java.util.List;
|
||||
|
||||
@ -1,7 +1,5 @@
|
||||
package p.packer.messages;
|
||||
|
||||
import p.packer.PackerProjectContext;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
public record ListAssetsRequest(
|
||||
|
||||
@ -1,8 +1,7 @@
|
||||
package p.packer.messages;
|
||||
|
||||
import p.packer.PackerOperationStatus;
|
||||
import p.packer.assets.PackerAssetSummaryDTO;
|
||||
import p.packer.diagnostics.PackerDiagnosticDTO;
|
||||
import p.packer.dtos.PackerAssetSummaryDTO;
|
||||
import p.packer.dtos.PackerDiagnosticDTO;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package p.packer;
|
||||
package p.packer.messages;
|
||||
|
||||
public enum PackerOperationStatus {
|
||||
SUCCESS,
|
||||
@ -1,4 +1,4 @@
|
||||
package p.packer;
|
||||
package p.packer.messages;
|
||||
|
||||
import java.nio.file.Path;
|
||||
import java.util.Objects;
|
||||
@ -1,32 +1,25 @@
|
||||
package p.packer.assets;
|
||||
package p.packer.messages.assets;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
public enum AssetFamilyCatalog {
|
||||
IMAGE_BANK("image_bank", "Image Bank"),
|
||||
PALETTE_BANK("palette_bank", "Palette Bank"),
|
||||
SOUND_BANK("sound_bank", "Sound Bank"),
|
||||
UNKNOWN("unknown", "Unknown");
|
||||
IMAGE_BANK("image_bank"),
|
||||
PALETTE_BANK("palette_bank"),
|
||||
SOUND_BANK("sound_bank"),
|
||||
UNKNOWN("unknown");
|
||||
|
||||
private final String manifestType;
|
||||
private final String displayName;
|
||||
|
||||
AssetFamilyCatalog(String manifestType, String displayName) {
|
||||
AssetFamilyCatalog(String manifestType) {
|
||||
this.manifestType = manifestType;
|
||||
this.displayName = displayName;
|
||||
}
|
||||
|
||||
public String manifestType() {
|
||||
return manifestType;
|
||||
}
|
||||
|
||||
public String displayName() {
|
||||
return displayName;
|
||||
}
|
||||
|
||||
public boolean matchesQuery(String normalizedQuery) {
|
||||
return manifestType.contains(normalizedQuery)
|
||||
|| displayName.toLowerCase(Locale.ROOT).contains(normalizedQuery);
|
||||
return manifestType.contains(normalizedQuery);
|
||||
}
|
||||
|
||||
public static AssetFamilyCatalog fromManifestType(String manifestType) {
|
||||
@ -1,4 +1,4 @@
|
||||
package p.packer.assets;
|
||||
package p.packer.messages.assets;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package p.packer.assets;
|
||||
package p.packer.messages.assets;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
@ -1,4 +1,4 @@
|
||||
package p.packer.assets;
|
||||
package p.packer.messages.assets;
|
||||
|
||||
public enum PackerAssetState {
|
||||
REGISTERED,
|
||||
@ -1,4 +1,4 @@
|
||||
package p.packer.assets;
|
||||
package p.packer.messages.assets;
|
||||
|
||||
public enum PackerBuildParticipation {
|
||||
INCLUDED,
|
||||
@ -1,4 +1,4 @@
|
||||
package p.packer.assets;
|
||||
package p.packer.messages.assets;
|
||||
|
||||
public enum PackerCodecConfigurationFieldType {
|
||||
TEXT,
|
||||
@ -1,4 +1,4 @@
|
||||
package p.packer.diagnostics;
|
||||
package p.packer.messages.diagnostics;
|
||||
|
||||
public enum PackerDiagnosticCategory {
|
||||
STRUCTURAL,
|
||||
@ -1,4 +1,4 @@
|
||||
package p.packer.diagnostics;
|
||||
package p.packer.messages.diagnostics;
|
||||
|
||||
public enum PackerDiagnosticSeverity {
|
||||
INFO,
|
||||
@ -1,7 +1,7 @@
|
||||
package p.packer.models;
|
||||
|
||||
import p.packer.assets.AssetFamilyCatalog;
|
||||
import p.packer.assets.OutputCodecCatalog;
|
||||
import p.packer.messages.assets.AssetFamilyCatalog;
|
||||
import p.packer.messages.assets.OutputCodecCatalog;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
package p.packer.models;
|
||||
|
||||
import p.packer.assets.OutputCodecCatalog;
|
||||
import p.packer.messages.assets.OutputCodecCatalog;
|
||||
|
||||
import java.nio.file.Path;
|
||||
import java.util.List;
|
||||
|
||||
@ -1,9 +1,9 @@
|
||||
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 p.packer.messages.assets.AssetFamilyCatalog;
|
||||
import p.packer.messages.AssetReference;
|
||||
import p.packer.messages.assets.PackerAssetState;
|
||||
import p.packer.messages.assets.PackerBuildParticipation;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
package p.packer.models;
|
||||
|
||||
import p.packer.assets.PackerCodecConfigurationFieldType;
|
||||
import p.packer.messages.assets.PackerCodecConfigurationFieldType;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
package p.packer.models;
|
||||
|
||||
import p.packer.diagnostics.PackerDiagnosticCategory;
|
||||
import p.packer.diagnostics.PackerDiagnosticSeverity;
|
||||
import p.packer.messages.diagnostics.PackerDiagnosticCategory;
|
||||
import p.packer.messages.diagnostics.PackerDiagnosticSeverity;
|
||||
|
||||
import java.nio.file.Path;
|
||||
import java.util.Objects;
|
||||
|
||||
@ -3,7 +3,7 @@ package p.packer.services;
|
||||
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import p.packer.PackerProjectContext;
|
||||
import p.packer.messages.PackerProjectContext;
|
||||
import p.packer.models.PackerRegistryEntry;
|
||||
import p.packer.models.PackerRegistryState;
|
||||
|
||||
|
||||
@ -1,15 +1,15 @@
|
||||
package p.packer.services;
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import p.packer.PackerOperationStatus;
|
||||
import p.packer.PackerProjectContext;
|
||||
import p.packer.assets.AssetFamilyCatalog;
|
||||
import p.packer.assets.AssetReference;
|
||||
import p.packer.assets.OutputFormatCatalog;
|
||||
import p.packer.assets.PackerAssetState;
|
||||
import p.packer.assets.PackerBuildParticipation;
|
||||
import p.packer.diagnostics.PackerDiagnosticCategory;
|
||||
import p.packer.diagnostics.PackerDiagnosticSeverity;
|
||||
import p.packer.messages.PackerOperationStatus;
|
||||
import p.packer.messages.PackerProjectContext;
|
||||
import p.packer.messages.assets.AssetFamilyCatalog;
|
||||
import p.packer.messages.AssetReference;
|
||||
import p.packer.messages.assets.OutputFormatCatalog;
|
||||
import p.packer.messages.assets.PackerAssetState;
|
||||
import p.packer.messages.assets.PackerBuildParticipation;
|
||||
import p.packer.messages.diagnostics.PackerDiagnosticCategory;
|
||||
import p.packer.messages.diagnostics.PackerDiagnosticSeverity;
|
||||
import p.packer.events.PackerEventKind;
|
||||
import p.packer.events.PackerEventSink;
|
||||
import p.packer.events.PackerProgress;
|
||||
|
||||
@ -2,10 +2,10 @@ package p.packer.services;
|
||||
|
||||
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.PackerDiagnosticCategory;
|
||||
import p.packer.diagnostics.PackerDiagnosticSeverity;
|
||||
import p.packer.messages.assets.AssetFamilyCatalog;
|
||||
import p.packer.messages.assets.OutputCodecCatalog;
|
||||
import p.packer.messages.diagnostics.PackerDiagnosticCategory;
|
||||
import p.packer.messages.diagnostics.PackerDiagnosticSeverity;
|
||||
import p.packer.models.PackerAssetDeclaration;
|
||||
import p.packer.models.PackerAssetDeclarationParseResult;
|
||||
import p.packer.models.PackerDiagnostic;
|
||||
|
||||
@ -1,14 +1,14 @@
|
||||
package p.packer.services;
|
||||
|
||||
import p.packer.PackerOperationStatus;
|
||||
import p.packer.PackerProjectContext;
|
||||
import p.packer.assets.AssetFamilyCatalog;
|
||||
import p.packer.assets.AssetReference;
|
||||
import p.packer.assets.OutputCodecCatalog;
|
||||
import p.packer.assets.PackerAssetState;
|
||||
import p.packer.assets.PackerBuildParticipation;
|
||||
import p.packer.diagnostics.PackerDiagnosticCategory;
|
||||
import p.packer.diagnostics.PackerDiagnosticSeverity;
|
||||
import p.packer.messages.PackerOperationStatus;
|
||||
import p.packer.messages.PackerProjectContext;
|
||||
import p.packer.messages.assets.AssetFamilyCatalog;
|
||||
import p.packer.messages.AssetReference;
|
||||
import p.packer.messages.assets.OutputCodecCatalog;
|
||||
import p.packer.messages.assets.PackerAssetState;
|
||||
import p.packer.messages.assets.PackerBuildParticipation;
|
||||
import p.packer.messages.diagnostics.PackerDiagnosticCategory;
|
||||
import p.packer.messages.diagnostics.PackerDiagnosticSeverity;
|
||||
import p.packer.messages.GetAssetDetailsRequest;
|
||||
import p.packer.messages.GetAssetDetailsResult;
|
||||
import p.packer.models.PackerAssetDeclaration;
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
package p.packer.services;
|
||||
|
||||
import p.packer.PackerProjectContext;
|
||||
import p.packer.messages.PackerProjectContext;
|
||||
import p.packer.models.PackerRegistryEntry;
|
||||
import p.packer.models.PackerRegistryState;
|
||||
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
package p.packer.services;
|
||||
|
||||
import p.packer.PackerProjectContext;
|
||||
import p.packer.messages.PackerProjectContext;
|
||||
import p.packer.events.PackerEvent;
|
||||
import p.packer.events.PackerEventKind;
|
||||
import p.packer.events.PackerEventSink;
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
package p.packer.services;
|
||||
|
||||
import p.packer.assets.OutputCodecCatalog;
|
||||
import p.packer.assets.OutputFormatCatalog;
|
||||
import p.packer.messages.assets.OutputCodecCatalog;
|
||||
import p.packer.messages.assets.OutputFormatCatalog;
|
||||
import p.packer.models.PackerCodecConfigurationField;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.List;
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
package p.packer.services;
|
||||
|
||||
import p.packer.PackerProjectContext;
|
||||
import p.packer.messages.PackerProjectContext;
|
||||
import p.packer.models.PackerRuntimeSnapshot;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
package p.packer.services;
|
||||
|
||||
import p.packer.PackerProjectContext;
|
||||
import p.packer.messages.PackerProjectContext;
|
||||
|
||||
import java.io.Closeable;
|
||||
import java.nio.file.Path;
|
||||
|
||||
@ -1,10 +1,11 @@
|
||||
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.dtos.PackerAssetDetailsDTO;
|
||||
import p.packer.dtos.PackerAssetIdentityDTO;
|
||||
import p.packer.dtos.PackerAssetSummaryDTO;
|
||||
import p.packer.dtos.PackerCodecConfigurationFieldDTO;
|
||||
import p.packer.dtos.PackerDiagnosticDTO;
|
||||
import p.packer.messages.assets.OutputCodecCatalog;
|
||||
import p.packer.models.PackerAssetDetails;
|
||||
import p.packer.models.PackerAssetIdentity;
|
||||
import p.packer.models.PackerAssetSummary;
|
||||
@ -57,8 +58,8 @@ public final class PackerReadMessageMapper {
|
||||
identity.assetRoot());
|
||||
}
|
||||
|
||||
private static Map<p.packer.assets.OutputCodecCatalog, List<PackerCodecConfigurationFieldDTO>> toCodecConfigurationFieldsByCodecDTO(
|
||||
Map<p.packer.assets.OutputCodecCatalog, List<PackerCodecConfigurationField>> fieldsByCodec) {
|
||||
private static Map<OutputCodecCatalog, List<PackerCodecConfigurationFieldDTO>> toCodecConfigurationFieldsByCodecDTO(
|
||||
Map<OutputCodecCatalog, List<PackerCodecConfigurationField>> fieldsByCodec) {
|
||||
return fieldsByCodec.entrySet().stream().collect(Collectors.toMap(
|
||||
Map.Entry::getKey,
|
||||
entry -> entry.getValue().stream().map(PackerReadMessageMapper::toCodecConfigurationFieldDTO).toList(),
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
package p.packer.services;
|
||||
|
||||
import p.packer.PackerProjectContext;
|
||||
import p.packer.messages.PackerProjectContext;
|
||||
import p.packer.models.PackerRegistryEntry;
|
||||
import p.packer.models.PackerRegistryState;
|
||||
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
package p.packer.services;
|
||||
|
||||
import p.packer.PackerProjectContext;
|
||||
import p.packer.messages.PackerProjectContext;
|
||||
import p.packer.messages.InitWorkspaceRequest;
|
||||
import p.packer.models.PackerRegistryEntry;
|
||||
import p.packer.models.PackerRegistryState;
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
package p.packer.services;
|
||||
|
||||
import p.packer.PackerProjectContext;
|
||||
import p.packer.messages.PackerProjectContext;
|
||||
|
||||
import java.nio.file.Path;
|
||||
import java.util.Objects;
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
package p.packer.services;
|
||||
|
||||
import p.packer.PackerOperationStatus;
|
||||
import p.packer.PackerProjectContext;
|
||||
import p.packer.messages.PackerOperationStatus;
|
||||
import p.packer.messages.PackerProjectContext;
|
||||
import p.packer.messages.InitWorkspaceRequest;
|
||||
import p.packer.messages.InitWorkspaceResult;
|
||||
import p.packer.models.PackerRegistryEntry;
|
||||
@ -12,7 +12,7 @@ import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
public final class PackerWorkspaceFoundation {
|
||||
private final PackerRegistryRepository registryRepository;
|
||||
private final FileSystemPackerRegistryRepository registryRepository;
|
||||
private final PackerIdentityAllocator identityAllocator;
|
||||
private final PackerRegistryLookup registryLookup;
|
||||
|
||||
@ -21,7 +21,7 @@ public final class PackerWorkspaceFoundation {
|
||||
}
|
||||
|
||||
public PackerWorkspaceFoundation(
|
||||
PackerRegistryRepository registryRepository,
|
||||
FileSystemPackerRegistryRepository registryRepository,
|
||||
PackerIdentityAllocator identityAllocator,
|
||||
PackerRegistryLookup registryLookup) {
|
||||
this.registryRepository = Objects.requireNonNull(registryRepository, "registryRepository");
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
package p.packer.services;
|
||||
|
||||
import p.packer.PackerProjectContext;
|
||||
import p.packer.messages.PackerProjectContext;
|
||||
|
||||
import java.nio.file.Path;
|
||||
import java.util.Objects;
|
||||
|
||||
@ -2,14 +2,14 @@ package p.packer.services;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.io.TempDir;
|
||||
import p.packer.PackerOperationStatus;
|
||||
import p.packer.PackerProjectContext;
|
||||
import p.packer.assets.AssetFamilyCatalog;
|
||||
import p.packer.assets.OutputCodecCatalog;
|
||||
import p.packer.assets.OutputFormatCatalog;
|
||||
import p.packer.assets.AssetReference;
|
||||
import p.packer.assets.PackerBuildParticipation;
|
||||
import p.packer.assets.PackerAssetState;
|
||||
import p.packer.messages.PackerOperationStatus;
|
||||
import p.packer.messages.PackerProjectContext;
|
||||
import p.packer.messages.assets.AssetFamilyCatalog;
|
||||
import p.packer.messages.assets.OutputCodecCatalog;
|
||||
import p.packer.messages.assets.OutputFormatCatalog;
|
||||
import p.packer.messages.AssetReference;
|
||||
import p.packer.messages.assets.PackerBuildParticipation;
|
||||
import p.packer.messages.assets.PackerAssetState;
|
||||
import p.packer.events.PackerEvent;
|
||||
import p.packer.events.PackerEventKind;
|
||||
import p.packer.messages.CreateAssetRequest;
|
||||
|
||||
@ -2,9 +2,9 @@ package p.packer.services;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.io.TempDir;
|
||||
import p.packer.assets.AssetFamilyCatalog;
|
||||
import p.packer.assets.OutputCodecCatalog;
|
||||
import p.packer.diagnostics.PackerDiagnosticCategory;
|
||||
import p.packer.messages.assets.AssetFamilyCatalog;
|
||||
import p.packer.messages.assets.OutputCodecCatalog;
|
||||
import p.packer.messages.diagnostics.PackerDiagnosticCategory;
|
||||
import p.packer.testing.PackerFixtureLocator;
|
||||
|
||||
import java.nio.file.Files;
|
||||
|
||||
@ -2,12 +2,12 @@ package p.packer.services;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.io.TempDir;
|
||||
import p.packer.PackerOperationStatus;
|
||||
import p.packer.PackerProjectContext;
|
||||
import p.packer.assets.AssetReference;
|
||||
import p.packer.assets.PackerBuildParticipation;
|
||||
import p.packer.assets.OutputCodecCatalog;
|
||||
import p.packer.assets.PackerAssetState;
|
||||
import p.packer.messages.PackerOperationStatus;
|
||||
import p.packer.messages.PackerProjectContext;
|
||||
import p.packer.messages.AssetReference;
|
||||
import p.packer.messages.assets.PackerBuildParticipation;
|
||||
import p.packer.messages.assets.OutputCodecCatalog;
|
||||
import p.packer.messages.assets.PackerAssetState;
|
||||
import p.packer.messages.GetAssetDetailsRequest;
|
||||
import p.packer.testing.PackerFixtureLocator;
|
||||
|
||||
|
||||
@ -3,7 +3,7 @@ package p.packer.services;
|
||||
import org.junit.jupiter.api.AfterEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.io.TempDir;
|
||||
import p.packer.PackerProjectContext;
|
||||
import p.packer.messages.PackerProjectContext;
|
||||
|
||||
import java.nio.file.Path;
|
||||
import java.util.List;
|
||||
|
||||
@ -2,7 +2,7 @@ package p.packer.services;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.io.TempDir;
|
||||
import p.packer.PackerProjectContext;
|
||||
import p.packer.messages.PackerProjectContext;
|
||||
import p.packer.testing.PackerFixtureLocator;
|
||||
|
||||
import java.nio.file.Files;
|
||||
|
||||
@ -2,7 +2,7 @@ package p.packer.services;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.io.TempDir;
|
||||
import p.packer.PackerProjectContext;
|
||||
import p.packer.messages.PackerProjectContext;
|
||||
import p.packer.messages.InitWorkspaceRequest;
|
||||
import p.packer.models.PackerRegistryEntry;
|
||||
import p.packer.models.PackerRegistryState;
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
package p.studio.projects;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import p.packer.PackerProjectContext;
|
||||
import p.packer.messages.PackerProjectContext;
|
||||
|
||||
import java.nio.file.Path;
|
||||
|
||||
|
||||
@ -132,6 +132,10 @@ public enum I18n {
|
||||
ASSETS_LABEL_BUILD_PARTICIPATION("assets.label.buildParticipation"),
|
||||
ASSETS_LABEL_ASSET_ID("assets.label.assetId"),
|
||||
ASSETS_LABEL_TYPE("assets.label.type"),
|
||||
ASSETS_TYPE_IMAGE_BANK("assets.type.imageBank"),
|
||||
ASSETS_TYPE_PALETTE_BANK("assets.type.paletteBank"),
|
||||
ASSETS_TYPE_SOUND_BANK("assets.type.soundBank"),
|
||||
ASSETS_TYPE_UNKNOWN("assets.type.unknown"),
|
||||
ASSETS_LABEL_LOCATION("assets.label.location"),
|
||||
ASSETS_LABEL_BANK("assets.label.bank"),
|
||||
ASSETS_LABEL_TARGET_LOCATION("assets.label.targetLocation"),
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
package p.studio.workspaces.assets;
|
||||
|
||||
import p.packer.assets.AssetReference;
|
||||
import p.packer.messages.AssetReference;
|
||||
import p.studio.workspaces.assets.messages.AssetWorkspaceAssetSummary;
|
||||
import p.studio.workspaces.assets.messages.AssetWorkspaceStatus;
|
||||
|
||||
|
||||
@ -6,8 +6,8 @@ import javafx.scene.control.ScrollPane;
|
||||
import javafx.scene.layout.HBox;
|
||||
import javafx.scene.layout.Priority;
|
||||
import javafx.scene.layout.VBox;
|
||||
import p.packer.assets.AssetReference;
|
||||
import p.packer.assets.PackerAssetDetailsDTO;
|
||||
import p.packer.messages.AssetReference;
|
||||
import p.packer.dtos.PackerAssetDetailsDTO;
|
||||
import p.packer.messages.GetAssetDetailsRequest;
|
||||
import p.studio.Container;
|
||||
import p.studio.events.StudioWorkspaceEventBus;
|
||||
|
||||
@ -6,7 +6,7 @@ import javafx.scene.control.Label;
|
||||
import javafx.scene.layout.HBox;
|
||||
import javafx.scene.layout.Priority;
|
||||
import javafx.scene.layout.VBox;
|
||||
import p.packer.assets.AssetFamilyCatalog;
|
||||
import p.packer.messages.assets.AssetFamilyCatalog;
|
||||
import p.studio.Container;
|
||||
import p.studio.projects.ProjectReference;
|
||||
import p.studio.utilities.i18n.I18n;
|
||||
@ -79,7 +79,12 @@ public final class AssetDetailsUiSupport {
|
||||
}
|
||||
|
||||
public static String typeLabel(AssetFamilyCatalog assetFamily) {
|
||||
return assetFamily.displayName();
|
||||
return switch (assetFamily) {
|
||||
case IMAGE_BANK -> Container.i18n().text(I18n.ASSETS_TYPE_IMAGE_BANK);
|
||||
case PALETTE_BANK -> Container.i18n().text(I18n.ASSETS_TYPE_PALETTE_BANK);
|
||||
case SOUND_BANK -> Container.i18n().text(I18n.ASSETS_TYPE_SOUND_BANK);
|
||||
case UNKNOWN -> Container.i18n().text(I18n.ASSETS_TYPE_UNKNOWN);
|
||||
};
|
||||
}
|
||||
|
||||
public static String typeChipTone(AssetFamilyCatalog assetFamily) {
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
package p.studio.workspaces.assets.details;
|
||||
|
||||
import p.packer.assets.AssetReference;
|
||||
import p.packer.messages.AssetReference;
|
||||
import p.studio.workspaces.assets.messages.AssetWorkspaceAssetDetails;
|
||||
import p.studio.workspaces.assets.messages.AssetWorkspaceDetailsStatus;
|
||||
import p.studio.workspaces.assets.messages.AssetWorkspaceDetailsViewState;
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
package p.studio.workspaces.assets.details;
|
||||
|
||||
import p.packer.assets.PackerAssetSummaryDTO;
|
||||
import p.packer.dtos.PackerAssetSummaryDTO;
|
||||
import p.studio.workspaces.assets.messages.AssetWorkspaceAssetSummary;
|
||||
import p.studio.workspaces.assets.messages.AssetWorkspaceAssetState;
|
||||
import p.studio.workspaces.assets.messages.AssetWorkspaceBuildParticipation;
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
package p.studio.workspaces.assets.details.contract;
|
||||
|
||||
import p.packer.assets.AssetReference;
|
||||
import p.packer.assets.OutputCodecCatalog;
|
||||
import p.packer.messages.AssetReference;
|
||||
import p.packer.messages.assets.OutputCodecCatalog;
|
||||
import p.studio.workspaces.assets.messages.AssetWorkspaceAssetDetails;
|
||||
|
||||
import java.util.LinkedHashMap;
|
||||
|
||||
@ -10,8 +10,8 @@ import javafx.scene.control.TextField;
|
||||
import javafx.scene.layout.HBox;
|
||||
import javafx.scene.layout.Priority;
|
||||
import javafx.scene.layout.VBox;
|
||||
import p.packer.assets.OutputCodecCatalog;
|
||||
import p.packer.assets.PackerCodecConfigurationFieldDTO;
|
||||
import p.packer.messages.assets.OutputCodecCatalog;
|
||||
import p.packer.dtos.PackerCodecConfigurationFieldDTO;
|
||||
import p.studio.Container;
|
||||
import p.studio.controls.forms.StudioFormActionBar;
|
||||
import p.studio.controls.forms.StudioFormMode;
|
||||
|
||||
@ -10,8 +10,8 @@ import javafx.scene.control.ToggleButton;
|
||||
import javafx.scene.layout.FlowPane;
|
||||
import javafx.scene.layout.Priority;
|
||||
import javafx.scene.layout.VBox;
|
||||
import p.packer.assets.AssetReference;
|
||||
import p.packer.assets.PackerAssetSummaryDTO;
|
||||
import p.packer.messages.AssetReference;
|
||||
import p.packer.dtos.PackerAssetSummaryDTO;
|
||||
import p.packer.messages.ListAssetsRequest;
|
||||
import p.studio.Container;
|
||||
import p.studio.events.StudioWorkspaceEventBus;
|
||||
|
||||
@ -6,7 +6,7 @@ import javafx.scene.layout.HBox;
|
||||
import javafx.scene.layout.Priority;
|
||||
import javafx.scene.layout.Region;
|
||||
import javafx.scene.layout.VBox;
|
||||
import p.packer.assets.AssetFamilyCatalog;
|
||||
import p.packer.messages.assets.AssetFamilyCatalog;
|
||||
import p.studio.Container;
|
||||
import p.studio.workspaces.assets.messages.events.StudioAssetsWorkspaceSelectionRequestedEvent;
|
||||
import p.studio.events.StudioWorkspaceEventBus;
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
package p.studio.workspaces.assets.messages;
|
||||
|
||||
import p.packer.assets.PackerCodecConfigurationFieldDTO;
|
||||
import p.packer.assets.OutputCodecCatalog;
|
||||
import p.packer.dtos.PackerCodecConfigurationFieldDTO;
|
||||
import p.packer.messages.assets.OutputCodecCatalog;
|
||||
|
||||
import java.nio.file.Path;
|
||||
import java.util.List;
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
package p.studio.workspaces.assets.messages;
|
||||
|
||||
import p.packer.assets.AssetFamilyCatalog;
|
||||
import p.packer.assets.AssetReference;
|
||||
import p.packer.messages.assets.AssetFamilyCatalog;
|
||||
import p.packer.messages.AssetReference;
|
||||
|
||||
import java.nio.file.Path;
|
||||
import java.util.Objects;
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
package p.studio.workspaces.assets.messages;
|
||||
|
||||
import p.packer.assets.AssetReference;
|
||||
import p.packer.messages.AssetReference;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
package p.studio.workspaces.assets.messages.events;
|
||||
|
||||
import p.packer.assets.AssetReference;
|
||||
import p.packer.messages.AssetReference;
|
||||
import p.studio.events.StudioEvent;
|
||||
|
||||
public record StudioAssetsRefreshRequestedEvent(
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
package p.studio.workspaces.assets.messages.events;
|
||||
|
||||
import p.packer.assets.AssetReference;
|
||||
import p.packer.messages.AssetReference;
|
||||
import p.studio.events.StudioEvent;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
@ -17,16 +17,17 @@ import javafx.stage.DirectoryChooser;
|
||||
import javafx.stage.Modality;
|
||||
import javafx.stage.Stage;
|
||||
import javafx.stage.Window;
|
||||
import p.packer.PackerOperationStatus;
|
||||
import p.packer.assets.AssetFamilyCatalog;
|
||||
import p.packer.assets.AssetReference;
|
||||
import p.packer.assets.OutputCodecCatalog;
|
||||
import p.packer.assets.OutputFormatCatalog;
|
||||
import p.packer.messages.PackerOperationStatus;
|
||||
import p.packer.messages.assets.AssetFamilyCatalog;
|
||||
import p.packer.messages.AssetReference;
|
||||
import p.packer.messages.assets.OutputCodecCatalog;
|
||||
import p.packer.messages.assets.OutputFormatCatalog;
|
||||
import p.packer.messages.CreateAssetRequest;
|
||||
import p.packer.messages.CreateAssetResult;
|
||||
import p.studio.Container;
|
||||
import p.studio.projects.ProjectReference;
|
||||
import p.studio.utilities.i18n.I18n;
|
||||
import p.studio.workspaces.assets.details.AssetDetailsUiSupport;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
@ -122,14 +123,14 @@ public final class AddAssetWizard {
|
||||
@Override
|
||||
protected void updateItem(AssetFamilyCatalog item, boolean empty) {
|
||||
super.updateItem(item, empty);
|
||||
setText(empty || item == null ? null : item.displayName());
|
||||
setText(empty || item == null ? null : AssetDetailsUiSupport.typeLabel(item));
|
||||
}
|
||||
});
|
||||
assetFamilyCombo.setButtonCell(new javafx.scene.control.ListCell<>() {
|
||||
@Override
|
||||
protected void updateItem(AssetFamilyCatalog item, boolean empty) {
|
||||
super.updateItem(item, empty);
|
||||
setText(empty || item == null ? null : item.displayName());
|
||||
setText(empty || item == null ? null : AssetDetailsUiSupport.typeLabel(item));
|
||||
}
|
||||
});
|
||||
assetFamilyCombo.valueProperty().addListener((ignored, oldValue, newValue) -> {
|
||||
|
||||
@ -122,6 +122,10 @@ assets.label.registration=Registration
|
||||
assets.label.buildParticipation=Build Participation
|
||||
assets.label.assetId=Asset ID
|
||||
assets.label.type=Type
|
||||
assets.type.imageBank=Image Bank
|
||||
assets.type.paletteBank=Palette Bank
|
||||
assets.type.soundBank=Sound Bank
|
||||
assets.type.unknown=Unknown
|
||||
assets.label.location=Location
|
||||
assets.label.bank=Bank
|
||||
assets.label.targetLocation=Target Location
|
||||
|
||||
@ -98,6 +98,56 @@
|
||||
"message" : "Asset scan started",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "8 assets loaded",
|
||||
"severity" : "SUCCESS",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: test",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: one-more-atlas",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: ui_atlas",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: bla",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: one-more-atlas",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: Novo Asset",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: ui_atlas",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: Bigode",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Asset scan started",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "6 assets loaded",
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user