From b03a0e42084702111684cd45e46fac11eec47dfc Mon Sep 17 00:00:00 2001 From: DemchaAV Date: Tue, 9 Jun 2026 12:55:26 +0100 Subject: [PATCH 1/2] chore(engine): deprecate the legacy ECS PDF renderer Follow-up to F11/PR #148, which deprecated the engine.core/layout/pagination ECS packages. engine.render.pdf is a canonical-mixed package -- it also holds the canonical-shared PdfFont, GlyphFallbackLogger, and the header/footer + watermark renderers used by document.backend.fixed.pdf -- so the legacy Entity-based PDF renderer could not be marked @Deprecated at package level without dragging those along. Physically split it: move the dead ECS renderer (PdfRenderingSystemECS plus PdfRenderSession/PdfCanvas/PdfStream/PdfImageCache/PdfFileManagerSystem/PdfGuidesRenderer, the 13 render-marker handlers, and the TableCellBox/PdfBookmarkBuilder helpers) into a new engine.render.pdf.ecs with .handlers/.helpers sub-packages, then mark those three packages @Deprecated at package level (no deprecation-warning cascade, same pattern as F11). The four canonical-shared types stay in engine.render.pdf; colocated tests move with the package-private classes. The relocated renderer has no public entry point (canonical PDF output goes through document.backend.fixed.pdf) and carries no binary-compatibility promise, so the package move is excluded from the japicmp gate rather than treated as a breaking removal. Package docs (engine.render.pdf, package-map, implementation-guide) updated to reflect the canonical/legacy split. No behaviour change; verify -P japicmp green (1152 tests + guards + japicmp). --- CHANGELOG.md | 18 ++++++++++ docs/architecture/package-map.md | 3 +- docs/contributing/implementation-guide.md | 16 ++++++--- pom.xml | 23 +++++++++++++ .../render/pdf/{ => ecs}/PdfCanvas.java | 2 +- .../pdf/{ => ecs}/PdfFileManagerSystem.java | 2 +- .../pdf/{ => ecs}/PdfGuidesRenderer.java | 2 +- .../render/pdf/{ => ecs}/PdfImageCache.java | 2 +- .../pdf/{ => ecs}/PdfRenderSession.java | 2 +- .../pdf/{ => ecs}/PdfRenderingSystemECS.java | 28 +++++++-------- .../render/pdf/{ => ecs}/PdfStream.java | 2 +- .../handlers/PdfBarcodeRenderHandler.java | 4 +-- .../handlers/PdfBlockTextRenderHandler.java | 4 +-- .../PdfChunkedBlockTextRenderHandler.java | 4 +-- .../handlers/PdfCircleRenderHandler.java | 4 +-- .../handlers/PdfContainerRenderHandler.java | 4 +-- .../handlers/PdfElementRenderHandler.java | 4 +-- .../handlers/PdfImageRenderHandler.java | 4 +-- .../handlers/PdfLineRenderHandler.java | 4 +-- .../handlers/PdfLinkRenderHandler.java | 4 +-- .../handlers/PdfPageBreakRenderHandler.java | 4 +-- .../handlers/PdfRectangleRenderHandler.java | 4 +-- .../handlers/PdfTableRowRenderHandler.java | 6 ++-- .../handlers/PdfTextRenderHandler.java | 4 +-- .../render/pdf/ecs/handlers/package-info.java | 17 ++++++++++ .../{ => ecs}/helpers/PdfBookmarkBuilder.java | 2 +- .../pdf/{ => ecs}/helpers/TableCellBox.java | 4 +-- .../render/pdf/ecs/helpers/package-info.java | 16 +++++++++ .../engine/render/pdf/ecs/package-info.java | 29 ++++++++++++++++ .../render/pdf/handlers/package-info.java | 4 --- .../render/pdf/helpers/package-info.java | 9 ++++- .../engine/render/pdf/package-info.java | 34 +++++++++---------- .../render/RenderHandlerRegistryTest.java | 2 +- .../render/guides/GuidesRendererTest.java | 4 +-- .../pdf/{ => ecs}/PdfRenderSessionTest.java | 4 +-- .../PdfRenderingSystemECSDispatchTest.java | 2 +- .../PdfRenderingSystemECSImageCacheTest.java | 2 +- .../handlers/PdfLinkRenderHandlerTest.java | 6 ++-- .../PdfTableRowRenderHandlerTest.java | 2 +- .../testsupport/EngineComposerHarness.java | 8 ++--- .../engine/assembly/ImageBuilderTest.java | 4 +-- .../PdfBackendIsolationGuardTest.java | 3 +- .../layout/LayoutSnapshotExtractorTest.java | 2 +- 43 files changed, 212 insertions(+), 96 deletions(-) rename src/main/java/com/demcha/compose/engine/render/pdf/{ => ecs}/PdfCanvas.java (97%) rename src/main/java/com/demcha/compose/engine/render/pdf/{ => ecs}/PdfFileManagerSystem.java (97%) rename src/main/java/com/demcha/compose/engine/render/pdf/{ => ecs}/PdfGuidesRenderer.java (93%) rename src/main/java/com/demcha/compose/engine/render/pdf/{ => ecs}/PdfImageCache.java (99%) rename src/main/java/com/demcha/compose/engine/render/pdf/{ => ecs}/PdfRenderSession.java (98%) rename src/main/java/com/demcha/compose/engine/render/pdf/{ => ecs}/PdfRenderingSystemECS.java (94%) rename src/main/java/com/demcha/compose/engine/render/pdf/{ => ecs}/PdfStream.java (96%) rename src/main/java/com/demcha/compose/engine/render/pdf/{ => ecs}/handlers/PdfBarcodeRenderHandler.java (98%) rename src/main/java/com/demcha/compose/engine/render/pdf/{ => ecs}/handlers/PdfBlockTextRenderHandler.java (98%) rename src/main/java/com/demcha/compose/engine/render/pdf/{ => ecs}/handlers/PdfChunkedBlockTextRenderHandler.java (97%) rename src/main/java/com/demcha/compose/engine/render/pdf/{ => ecs}/handlers/PdfCircleRenderHandler.java (97%) rename src/main/java/com/demcha/compose/engine/render/pdf/{ => ecs}/handlers/PdfContainerRenderHandler.java (87%) rename src/main/java/com/demcha/compose/engine/render/pdf/{ => ecs}/handlers/PdfElementRenderHandler.java (89%) rename src/main/java/com/demcha/compose/engine/render/pdf/{ => ecs}/handlers/PdfImageRenderHandler.java (95%) rename src/main/java/com/demcha/compose/engine/render/pdf/{ => ecs}/handlers/PdfLineRenderHandler.java (96%) rename src/main/java/com/demcha/compose/engine/render/pdf/{ => ecs}/handlers/PdfLinkRenderHandler.java (96%) rename src/main/java/com/demcha/compose/engine/render/pdf/{ => ecs}/handlers/PdfPageBreakRenderHandler.java (89%) rename src/main/java/com/demcha/compose/engine/render/pdf/{ => ecs}/handlers/PdfRectangleRenderHandler.java (97%) rename src/main/java/com/demcha/compose/engine/render/pdf/{ => ecs}/handlers/PdfTableRowRenderHandler.java (97%) rename src/main/java/com/demcha/compose/engine/render/pdf/{ => ecs}/handlers/PdfTextRenderHandler.java (97%) create mode 100644 src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/package-info.java rename src/main/java/com/demcha/compose/engine/render/pdf/{ => ecs}/helpers/PdfBookmarkBuilder.java (98%) rename src/main/java/com/demcha/compose/engine/render/pdf/{ => ecs}/helpers/TableCellBox.java (96%) create mode 100644 src/main/java/com/demcha/compose/engine/render/pdf/ecs/helpers/package-info.java create mode 100644 src/main/java/com/demcha/compose/engine/render/pdf/ecs/package-info.java delete mode 100644 src/main/java/com/demcha/compose/engine/render/pdf/handlers/package-info.java rename src/test/java/com/demcha/compose/engine/render/pdf/{ => ecs}/PdfRenderSessionTest.java (96%) rename src/test/java/com/demcha/compose/engine/render/pdf/{ => ecs}/PdfRenderingSystemECSDispatchTest.java (99%) rename src/test/java/com/demcha/compose/engine/render/pdf/{ => ecs}/PdfRenderingSystemECSImageCacheTest.java (98%) rename src/test/java/com/demcha/compose/engine/render/pdf/{ => ecs}/handlers/PdfLinkRenderHandlerTest.java (92%) rename src/test/java/com/demcha/compose/engine/render/pdf/{ => ecs}/handlers/PdfTableRowRenderHandlerTest.java (99%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 76df4809..f6aa22a5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -133,6 +133,24 @@ Open cycle — bug-fix / housekeeping. Entries land here as they merge. `engine.measurement`, `engine.font`, `engine.render`) are **not** deprecated. No public API or behaviour change. +- **The legacy ECS PDF render pipeline is deprecated.** Follow-up to the ECS + engine deprecation above. The `Entity`-based PDFBox renderer + (`PdfRenderingSystemECS` and its collaborators — `PdfRenderSession`, `PdfCanvas`, + `PdfStream`, `PdfImageCache`, `PdfFileManagerSystem`, `PdfGuidesRenderer`, the + render-marker handlers, and the `TableCellBox` / `PdfBookmarkBuilder` helpers) is + the renderer for the removed `GraphCompose.pdf(...)` surface and now runs only + under the legacy engine regression tests; canonical PDF output goes through + `com.demcha.compose.document.backend.fixed.pdf`. Because `engine.render.pdf` is a + *mixed* package — it also holds the canonical-shared `PdfFont`, + `GlyphFallbackLogger`, and the header/footer + watermark post-processors — the + legacy classes were physically moved into a new `engine.render.pdf.ecs` + (with `.handlers` / `.helpers` sub-packages), which is then `@Deprecated` at + package level (so no deprecation-warning cascade, same pattern as the ECS engine + packages). The four genuinely shared `engine.render.pdf` types are **not** + deprecated and stay put. No behaviour change. The relocated renderer has no + public entry point and carries no binary-compatibility promise, so the move is + excluded from the japicmp gate rather than treated as a breaking removal. + ### Tests / tooling - **Benchmark regression gate and measurement probe (benchmarks module, not part diff --git a/docs/architecture/package-map.md b/docs/architecture/package-map.md index 4cb497a0..fcf77042 100644 --- a/docs/architecture/package-map.md +++ b/docs/architecture/package-map.md @@ -49,7 +49,8 @@ intended. | `com.demcha.compose.engine.pagination` | Page-breaking helpers and pagination fallback systems. | Maintain child-first ordering and page-shift propagation rules. | | `com.demcha.compose.engine.measurement` | Text measurement contracts and font-backed implementations. | Builders/layout helpers depend on this seam instead of reaching into renderers. | | `com.demcha.compose.engine.render` | Backend-neutral render contracts, handler registry, render ordering, and render-pass session lifetime. | Add backend-neutral contracts here, backend-specific drawing elsewhere. | -| `com.demcha.compose.engine.render.pdf` | Low-level PDF backend internals for ECS rendering. | PDFBox state stays here and in child handler/helper packages. | +| `com.demcha.compose.engine.render.pdf` | Shared PDFBox primitives for the canonical fixed-layout backend: `PdfFont`, `GlyphFallbackLogger`, and the header/footer + watermark renderers under `helpers`. | Add canonical-shared PDF support here; the legacy ECS renderer lives in the deprecated `ecs` sub-package. | +| `com.demcha.compose.engine.render.pdf.ecs` | **Deprecated.** Legacy `Entity`-based ECS PDF renderer (`PdfRenderingSystemECS` and collaborators, plus the `ecs.handlers` / `ecs.helpers` sub-packages). | Dead renderer kept only for legacy regression tests; do not extend or optimize. | | `com.demcha.compose.engine.render.word` | Experimental Word backend internals. | Treat as research until a supported public surface is designed. | | `com.demcha.compose.engine.text` | Internal text hot-path utilities shared by layout and render stages. | Keep helpers backend-neutral and avoid public authoring concepts here. | | `com.demcha.compose.engine.text.markdown` | Markdown token parsing used by text preparation. | Keep output backend-neutral. | diff --git a/docs/contributing/implementation-guide.md b/docs/contributing/implementation-guide.md index 340ef547..e830b281 100644 --- a/docs/contributing/implementation-guide.md +++ b/docs/contributing/implementation-guide.md @@ -321,21 +321,29 @@ Preferred extension pattern for new backends: 4. keep backend-only helper drawing in renderer-owned helper packages when the code is not an entity render marker 5. keep renderer ordering policy in the rendering layer rather than in pagination utilities +> **Deprecated reference implementation.** The PDF renderer named below +> (`PdfRenderingSystemECS` and the `engine.render.pdf.ecs` handlers/helpers) is the +> legacy `Entity`-based ECS renderer, kept only for regression tests; canonical PDF +> output is produced by `com.demcha.compose.document.backend.fixed.pdf`. The +> backend-neutral `engine.render` *contracts* (`Render`, `RenderPassSession`, +> `RenderStream`, `EntityRenderOrder`) are **not** deprecated — only the ECS PDF +> implementation is. Do not extend the `ecs` renderer. + Important files: - [Render.java](./../src/main/java/com/demcha/compose/engine/render/Render.java) - [RenderPassSession.java](./../src/main/java/com/demcha/compose/engine/render/RenderPassSession.java) - [RenderStream.java](./../src/main/java/com/demcha/compose/engine/render/RenderStream.java) -- [PdfRenderingSystemECS.java](./../src/main/java/com/demcha/compose/engine/render/pdf/PdfRenderingSystemECS.java) -- [PdfRenderSession.java](./../src/main/java/com/demcha/compose/engine/render/pdf/PdfRenderSession.java) +- [PdfRenderingSystemECS.java](./../src/main/java/com/demcha/compose/engine/render/pdf/ecs/PdfRenderingSystemECS.java) +- [PdfRenderSession.java](./../src/main/java/com/demcha/compose/engine/render/pdf/ecs/PdfRenderSession.java) - [EntityRenderOrder.java](./../src/main/java/com/demcha/compose/engine/render/EntityRenderOrder.java) Migration rule for new engine components: - implement backend-neutral `Render`, not backend-specific render interfaces -- move PDF drawing into `...render.pdf.handlers` +- move PDF drawing into `...render.pdf.ecs.handlers` - use `TextMeasurementSystem` for text width and line metrics instead of reaching through `LayoutSystem` -- place PDF-only helper objects in `...render.pdf.helpers` +- place PDF-only helper objects in `...render.pdf.ecs.helpers` - keep page-surface lifetime in a backend-specific `RenderPassSession`, not in engine builders or render markers - keep resolved draw ordering in renderer-owned or renderer-neutral rendering helpers such as `EntityRenderOrder` - register a render handler for every engine render marker because the PDF entity path no longer supports a backend-specific render fallback diff --git a/pom.xml b/pom.xml index 9bf2eccd..fbebc312 100644 --- a/pom.xml +++ b/pom.xml @@ -692,6 +692,29 @@ --> com.demcha.compose.document.layout.payloads + + com.demcha.compose.engine.render.pdf.ecs + com.demcha.compose.engine.render.pdf.ecs.handlers + com.demcha.compose.engine.render.pdf.ecs.helpers + com.demcha.compose.engine.render.pdf.handlers + com.demcha.compose.engine.render.pdf.PdfRenderingSystemECS + com.demcha.compose.engine.render.pdf.PdfCanvas + com.demcha.compose.engine.render.pdf.PdfStream + com.demcha.compose.engine.render.pdf.PdfFileManagerSystem + com.demcha.compose.engine.render.pdf.PdfGuidesRenderer + com.demcha.compose.engine.render.pdf.helpers.TableCellBox + com.demcha.compose.engine.render.pdf.helpers.PdfBookmarkBuilder diff --git a/src/main/java/com/demcha/compose/engine/render/pdf/PdfCanvas.java b/src/main/java/com/demcha/compose/engine/render/pdf/ecs/PdfCanvas.java similarity index 97% rename from src/main/java/com/demcha/compose/engine/render/pdf/PdfCanvas.java rename to src/main/java/com/demcha/compose/engine/render/pdf/ecs/PdfCanvas.java index e9a96697..12f6a513 100644 --- a/src/main/java/com/demcha/compose/engine/render/pdf/PdfCanvas.java +++ b/src/main/java/com/demcha/compose/engine/render/pdf/ecs/PdfCanvas.java @@ -1,4 +1,4 @@ -package com.demcha.compose.engine.render.pdf; +package com.demcha.compose.engine.render.pdf.ecs; import com.demcha.compose.engine.core.Canvas; import com.demcha.compose.engine.components.style.Margin; diff --git a/src/main/java/com/demcha/compose/engine/render/pdf/PdfFileManagerSystem.java b/src/main/java/com/demcha/compose/engine/render/pdf/ecs/PdfFileManagerSystem.java similarity index 97% rename from src/main/java/com/demcha/compose/engine/render/pdf/PdfFileManagerSystem.java rename to src/main/java/com/demcha/compose/engine/render/pdf/ecs/PdfFileManagerSystem.java index cbb5a3c1..4c33fa1f 100644 --- a/src/main/java/com/demcha/compose/engine/render/pdf/PdfFileManagerSystem.java +++ b/src/main/java/com/demcha/compose/engine/render/pdf/ecs/PdfFileManagerSystem.java @@ -1,4 +1,4 @@ -package com.demcha.compose.engine.render.pdf; +package com.demcha.compose.engine.render.pdf.ecs; import com.demcha.compose.engine.core.EntityManager; import com.demcha.compose.engine.io.FileManagerSystem; diff --git a/src/main/java/com/demcha/compose/engine/render/pdf/PdfGuidesRenderer.java b/src/main/java/com/demcha/compose/engine/render/pdf/ecs/PdfGuidesRenderer.java similarity index 93% rename from src/main/java/com/demcha/compose/engine/render/pdf/PdfGuidesRenderer.java rename to src/main/java/com/demcha/compose/engine/render/pdf/ecs/PdfGuidesRenderer.java index 3c79235d..ed2f86a3 100644 --- a/src/main/java/com/demcha/compose/engine/render/pdf/PdfGuidesRenderer.java +++ b/src/main/java/com/demcha/compose/engine/render/pdf/ecs/PdfGuidesRenderer.java @@ -1,4 +1,4 @@ -package com.demcha.compose.engine.render.pdf; +package com.demcha.compose.engine.render.pdf.ecs; import com.demcha.compose.engine.render.guides.GuidesRenderer; import com.demcha.compose.engine.render.guides.impl.BoxRenderImpl; diff --git a/src/main/java/com/demcha/compose/engine/render/pdf/PdfImageCache.java b/src/main/java/com/demcha/compose/engine/render/pdf/ecs/PdfImageCache.java similarity index 99% rename from src/main/java/com/demcha/compose/engine/render/pdf/PdfImageCache.java rename to src/main/java/com/demcha/compose/engine/render/pdf/ecs/PdfImageCache.java index 6999322f..f9069967 100644 --- a/src/main/java/com/demcha/compose/engine/render/pdf/PdfImageCache.java +++ b/src/main/java/com/demcha/compose/engine/render/pdf/ecs/PdfImageCache.java @@ -1,4 +1,4 @@ -package com.demcha.compose.engine.render.pdf; +package com.demcha.compose.engine.render.pdf.ecs; import com.demcha.compose.engine.components.content.ImageData; import com.demcha.compose.engine.components.content.ImageMetadata; diff --git a/src/main/java/com/demcha/compose/engine/render/pdf/PdfRenderSession.java b/src/main/java/com/demcha/compose/engine/render/pdf/ecs/PdfRenderSession.java similarity index 98% rename from src/main/java/com/demcha/compose/engine/render/pdf/PdfRenderSession.java rename to src/main/java/com/demcha/compose/engine/render/pdf/ecs/PdfRenderSession.java index 6a6dc8ef..b9142a78 100644 --- a/src/main/java/com/demcha/compose/engine/render/pdf/PdfRenderSession.java +++ b/src/main/java/com/demcha/compose/engine/render/pdf/ecs/PdfRenderSession.java @@ -1,4 +1,4 @@ -package com.demcha.compose.engine.render.pdf; +package com.demcha.compose.engine.render.pdf.ecs; import com.demcha.compose.engine.render.RenderPassSession; import org.apache.pdfbox.pdmodel.PDPageContentStream; diff --git a/src/main/java/com/demcha/compose/engine/render/pdf/PdfRenderingSystemECS.java b/src/main/java/com/demcha/compose/engine/render/pdf/ecs/PdfRenderingSystemECS.java similarity index 94% rename from src/main/java/com/demcha/compose/engine/render/pdf/PdfRenderingSystemECS.java rename to src/main/java/com/demcha/compose/engine/render/pdf/ecs/PdfRenderingSystemECS.java index 466eb602..029d043f 100644 --- a/src/main/java/com/demcha/compose/engine/render/pdf/PdfRenderingSystemECS.java +++ b/src/main/java/com/demcha/compose/engine/render/pdf/ecs/PdfRenderingSystemECS.java @@ -1,4 +1,4 @@ -package com.demcha.compose.engine.render.pdf; +package com.demcha.compose.engine.render.pdf.ecs; import com.demcha.compose.engine.core.Canvas; import com.demcha.compose.engine.components.content.ImageData; @@ -9,19 +9,19 @@ import com.demcha.compose.engine.core.EntityManager; import com.demcha.compose.engine.render.guides.GuidLineSettings; import com.demcha.compose.engine.render.RenderingSystemBase; -import com.demcha.compose.engine.render.pdf.handlers.PdfBarcodeRenderHandler; -import com.demcha.compose.engine.render.pdf.handlers.PdfBlockTextRenderHandler; -import com.demcha.compose.engine.render.pdf.handlers.PdfCircleRenderHandler; -import com.demcha.compose.engine.render.pdf.handlers.PdfChunkedBlockTextRenderHandler; -import com.demcha.compose.engine.render.pdf.handlers.PdfContainerRenderHandler; -import com.demcha.compose.engine.render.pdf.handlers.PdfElementRenderHandler; -import com.demcha.compose.engine.render.pdf.handlers.PdfImageRenderHandler; -import com.demcha.compose.engine.render.pdf.handlers.PdfLineRenderHandler; -import com.demcha.compose.engine.render.pdf.handlers.PdfLinkRenderHandler; -import com.demcha.compose.engine.render.pdf.handlers.PdfPageBreakRenderHandler; -import com.demcha.compose.engine.render.pdf.handlers.PdfRectangleRenderHandler; -import com.demcha.compose.engine.render.pdf.handlers.PdfTableRowRenderHandler; -import com.demcha.compose.engine.render.pdf.handlers.PdfTextRenderHandler; +import com.demcha.compose.engine.render.pdf.ecs.handlers.PdfBarcodeRenderHandler; +import com.demcha.compose.engine.render.pdf.ecs.handlers.PdfBlockTextRenderHandler; +import com.demcha.compose.engine.render.pdf.ecs.handlers.PdfCircleRenderHandler; +import com.demcha.compose.engine.render.pdf.ecs.handlers.PdfChunkedBlockTextRenderHandler; +import com.demcha.compose.engine.render.pdf.ecs.handlers.PdfContainerRenderHandler; +import com.demcha.compose.engine.render.pdf.ecs.handlers.PdfElementRenderHandler; +import com.demcha.compose.engine.render.pdf.ecs.handlers.PdfImageRenderHandler; +import com.demcha.compose.engine.render.pdf.ecs.handlers.PdfLineRenderHandler; +import com.demcha.compose.engine.render.pdf.ecs.handlers.PdfLinkRenderHandler; +import com.demcha.compose.engine.render.pdf.ecs.handlers.PdfPageBreakRenderHandler; +import com.demcha.compose.engine.render.pdf.ecs.handlers.PdfRectangleRenderHandler; +import com.demcha.compose.engine.render.pdf.ecs.handlers.PdfTableRowRenderHandler; +import com.demcha.compose.engine.render.pdf.ecs.handlers.PdfTextRenderHandler; import com.demcha.compose.engine.render.guides.GuidesRenderer; import com.demcha.compose.engine.render.RenderHandler; import com.demcha.compose.engine.render.EntityRenderOrder; diff --git a/src/main/java/com/demcha/compose/engine/render/pdf/PdfStream.java b/src/main/java/com/demcha/compose/engine/render/pdf/ecs/PdfStream.java similarity index 96% rename from src/main/java/com/demcha/compose/engine/render/pdf/PdfStream.java rename to src/main/java/com/demcha/compose/engine/render/pdf/ecs/PdfStream.java index ad33c426..460baba9 100644 --- a/src/main/java/com/demcha/compose/engine/render/pdf/PdfStream.java +++ b/src/main/java/com/demcha/compose/engine/render/pdf/ecs/PdfStream.java @@ -1,4 +1,4 @@ -package com.demcha.compose.engine.render.pdf; +package com.demcha.compose.engine.render.pdf.ecs; import com.demcha.compose.engine.core.Canvas; import com.demcha.compose.engine.render.RenderPassSession; diff --git a/src/main/java/com/demcha/compose/engine/render/pdf/handlers/PdfBarcodeRenderHandler.java b/src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfBarcodeRenderHandler.java similarity index 98% rename from src/main/java/com/demcha/compose/engine/render/pdf/handlers/PdfBarcodeRenderHandler.java rename to src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfBarcodeRenderHandler.java index ed206305..e47730d1 100644 --- a/src/main/java/com/demcha/compose/engine/render/pdf/handlers/PdfBarcodeRenderHandler.java +++ b/src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfBarcodeRenderHandler.java @@ -1,4 +1,4 @@ -package com.demcha.compose.engine.render.pdf.handlers; +package com.demcha.compose.engine.render.pdf.ecs.handlers; import com.demcha.compose.engine.components.content.barcode.BarcodeData; import com.demcha.compose.engine.components.content.barcode.BarcodeType; @@ -7,7 +7,7 @@ import com.demcha.compose.engine.components.renderable.BarcodeComponent; import com.demcha.compose.engine.components.style.Padding; import com.demcha.compose.engine.core.EntityManager; -import com.demcha.compose.engine.render.pdf.PdfRenderingSystemECS; +import com.demcha.compose.engine.render.pdf.ecs.PdfRenderingSystemECS; import com.demcha.compose.engine.render.guides.GuidesRenderer; import com.demcha.compose.engine.render.RenderHandler; import com.google.zxing.BarcodeFormat; diff --git a/src/main/java/com/demcha/compose/engine/render/pdf/handlers/PdfBlockTextRenderHandler.java b/src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfBlockTextRenderHandler.java similarity index 98% rename from src/main/java/com/demcha/compose/engine/render/pdf/handlers/PdfBlockTextRenderHandler.java rename to src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfBlockTextRenderHandler.java index 1ac4e946..6cdb3a03 100644 --- a/src/main/java/com/demcha/compose/engine/render/pdf/handlers/PdfBlockTextRenderHandler.java +++ b/src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfBlockTextRenderHandler.java @@ -1,4 +1,4 @@ -package com.demcha.compose.engine.render.pdf.handlers; +package com.demcha.compose.engine.render.pdf.ecs.handlers; import com.demcha.compose.engine.components.content.text.LineTextData; import com.demcha.compose.engine.components.content.text.TextDataBody; @@ -8,7 +8,7 @@ import com.demcha.compose.engine.core.EntityManager; import com.demcha.compose.engine.render.pdf.GlyphFallbackLogger; import com.demcha.compose.engine.render.pdf.PdfFont; -import com.demcha.compose.engine.render.pdf.PdfRenderingSystemECS; +import com.demcha.compose.engine.render.pdf.ecs.PdfRenderingSystemECS; import com.demcha.compose.engine.render.guides.GuidesRenderer; import com.demcha.compose.engine.render.RenderHandler; import lombok.extern.slf4j.Slf4j; diff --git a/src/main/java/com/demcha/compose/engine/render/pdf/handlers/PdfChunkedBlockTextRenderHandler.java b/src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfChunkedBlockTextRenderHandler.java similarity index 97% rename from src/main/java/com/demcha/compose/engine/render/pdf/handlers/PdfChunkedBlockTextRenderHandler.java rename to src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfChunkedBlockTextRenderHandler.java index bafbed81..45101f69 100644 --- a/src/main/java/com/demcha/compose/engine/render/pdf/handlers/PdfChunkedBlockTextRenderHandler.java +++ b/src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfChunkedBlockTextRenderHandler.java @@ -1,4 +1,4 @@ -package com.demcha.compose.engine.render.pdf.handlers; +package com.demcha.compose.engine.render.pdf.ecs.handlers; import com.demcha.compose.engine.components.content.text.BlockTextData; import com.demcha.compose.engine.components.content.text.LineTextData; @@ -11,7 +11,7 @@ import com.demcha.compose.engine.core.EntityManager; import com.demcha.compose.engine.exceptions.RenderGuideLinesException; import com.demcha.compose.engine.render.pdf.PdfFont; -import com.demcha.compose.engine.render.pdf.PdfRenderingSystemECS; +import com.demcha.compose.engine.render.pdf.ecs.PdfRenderingSystemECS; import com.demcha.compose.engine.render.guides.GuidesRenderer; import com.demcha.compose.engine.render.RenderHandler; import lombok.extern.slf4j.Slf4j; diff --git a/src/main/java/com/demcha/compose/engine/render/pdf/handlers/PdfCircleRenderHandler.java b/src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfCircleRenderHandler.java similarity index 97% rename from src/main/java/com/demcha/compose/engine/render/pdf/handlers/PdfCircleRenderHandler.java rename to src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfCircleRenderHandler.java index 210990de..064020b7 100644 --- a/src/main/java/com/demcha/compose/engine/render/pdf/handlers/PdfCircleRenderHandler.java +++ b/src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfCircleRenderHandler.java @@ -1,4 +1,4 @@ -package com.demcha.compose.engine.render.pdf.handlers; +package com.demcha.compose.engine.render.pdf.ecs.handlers; import com.demcha.compose.engine.components.content.shape.FillColor; import com.demcha.compose.engine.components.content.shape.Stroke; @@ -7,7 +7,7 @@ import com.demcha.compose.engine.components.renderable.Circle; import com.demcha.compose.engine.components.style.Padding; import com.demcha.compose.engine.core.EntityManager; -import com.demcha.compose.engine.render.pdf.PdfRenderingSystemECS; +import com.demcha.compose.engine.render.pdf.ecs.PdfRenderingSystemECS; import com.demcha.compose.engine.render.guides.GuidesRenderer; import com.demcha.compose.engine.render.RenderHandler; import lombok.extern.slf4j.Slf4j; diff --git a/src/main/java/com/demcha/compose/engine/render/pdf/handlers/PdfContainerRenderHandler.java b/src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfContainerRenderHandler.java similarity index 87% rename from src/main/java/com/demcha/compose/engine/render/pdf/handlers/PdfContainerRenderHandler.java rename to src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfContainerRenderHandler.java index e4536a9e..413fe243 100644 --- a/src/main/java/com/demcha/compose/engine/render/pdf/handlers/PdfContainerRenderHandler.java +++ b/src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfContainerRenderHandler.java @@ -1,9 +1,9 @@ -package com.demcha.compose.engine.render.pdf.handlers; +package com.demcha.compose.engine.render.pdf.ecs.handlers; import com.demcha.compose.engine.components.core.Entity; import com.demcha.compose.engine.components.renderable.Container; import com.demcha.compose.engine.core.EntityManager; -import com.demcha.compose.engine.render.pdf.PdfRenderingSystemECS; +import com.demcha.compose.engine.render.pdf.ecs.PdfRenderingSystemECS; import com.demcha.compose.engine.render.RenderHandler; import java.io.IOException; diff --git a/src/main/java/com/demcha/compose/engine/render/pdf/handlers/PdfElementRenderHandler.java b/src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfElementRenderHandler.java similarity index 89% rename from src/main/java/com/demcha/compose/engine/render/pdf/handlers/PdfElementRenderHandler.java rename to src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfElementRenderHandler.java index 247fb192..2313f672 100644 --- a/src/main/java/com/demcha/compose/engine/render/pdf/handlers/PdfElementRenderHandler.java +++ b/src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfElementRenderHandler.java @@ -1,9 +1,9 @@ -package com.demcha.compose.engine.render.pdf.handlers; +package com.demcha.compose.engine.render.pdf.ecs.handlers; import com.demcha.compose.engine.components.core.Entity; import com.demcha.compose.engine.components.renderable.Element; import com.demcha.compose.engine.core.EntityManager; -import com.demcha.compose.engine.render.pdf.PdfRenderingSystemECS; +import com.demcha.compose.engine.render.pdf.ecs.PdfRenderingSystemECS; import com.demcha.compose.engine.render.guides.GuidesRenderer; import com.demcha.compose.engine.render.RenderHandler; diff --git a/src/main/java/com/demcha/compose/engine/render/pdf/handlers/PdfImageRenderHandler.java b/src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfImageRenderHandler.java similarity index 95% rename from src/main/java/com/demcha/compose/engine/render/pdf/handlers/PdfImageRenderHandler.java rename to src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfImageRenderHandler.java index 3d57987c..4a14c258 100644 --- a/src/main/java/com/demcha/compose/engine/render/pdf/handlers/PdfImageRenderHandler.java +++ b/src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfImageRenderHandler.java @@ -1,4 +1,4 @@ -package com.demcha.compose.engine.render.pdf.handlers; +package com.demcha.compose.engine.render.pdf.ecs.handlers; import com.demcha.compose.engine.components.content.ImageData; import com.demcha.compose.engine.components.core.Entity; @@ -6,7 +6,7 @@ import com.demcha.compose.engine.components.renderable.ImageComponent; import com.demcha.compose.engine.components.style.Padding; import com.demcha.compose.engine.core.EntityManager; -import com.demcha.compose.engine.render.pdf.PdfRenderingSystemECS; +import com.demcha.compose.engine.render.pdf.ecs.PdfRenderingSystemECS; import com.demcha.compose.engine.render.guides.GuidesRenderer; import com.demcha.compose.engine.render.RenderHandler; import lombok.extern.slf4j.Slf4j; diff --git a/src/main/java/com/demcha/compose/engine/render/pdf/handlers/PdfLineRenderHandler.java b/src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfLineRenderHandler.java similarity index 96% rename from src/main/java/com/demcha/compose/engine/render/pdf/handlers/PdfLineRenderHandler.java rename to src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfLineRenderHandler.java index 17a51b13..d59dfc60 100644 --- a/src/main/java/com/demcha/compose/engine/render/pdf/handlers/PdfLineRenderHandler.java +++ b/src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfLineRenderHandler.java @@ -1,4 +1,4 @@ -package com.demcha.compose.engine.render.pdf.handlers; +package com.demcha.compose.engine.render.pdf.ecs.handlers; import com.demcha.compose.engine.components.content.shape.LinePath; import com.demcha.compose.engine.components.content.shape.Stroke; @@ -7,7 +7,7 @@ import com.demcha.compose.engine.components.renderable.Line; import com.demcha.compose.engine.components.style.Padding; import com.demcha.compose.engine.core.EntityManager; -import com.demcha.compose.engine.render.pdf.PdfRenderingSystemECS; +import com.demcha.compose.engine.render.pdf.ecs.PdfRenderingSystemECS; import com.demcha.compose.engine.render.guides.GuidesRenderer; import com.demcha.compose.engine.render.RenderHandler; import lombok.extern.slf4j.Slf4j; diff --git a/src/main/java/com/demcha/compose/engine/render/pdf/handlers/PdfLinkRenderHandler.java b/src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfLinkRenderHandler.java similarity index 96% rename from src/main/java/com/demcha/compose/engine/render/pdf/handlers/PdfLinkRenderHandler.java rename to src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfLinkRenderHandler.java index 7ac19c5a..7d80313d 100644 --- a/src/main/java/com/demcha/compose/engine/render/pdf/handlers/PdfLinkRenderHandler.java +++ b/src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfLinkRenderHandler.java @@ -1,4 +1,4 @@ -package com.demcha.compose.engine.render.pdf.handlers; +package com.demcha.compose.engine.render.pdf.ecs.handlers; import com.demcha.compose.engine.components.content.link.Email; import com.demcha.compose.engine.components.content.link.LinkUrl; @@ -8,7 +8,7 @@ import com.demcha.compose.engine.components.renderable.Link; import com.demcha.compose.engine.components.style.Padding; import com.demcha.compose.engine.core.EntityManager; -import com.demcha.compose.engine.render.pdf.PdfRenderingSystemECS; +import com.demcha.compose.engine.render.pdf.ecs.PdfRenderingSystemECS; import com.demcha.compose.engine.render.RenderHandler; import org.apache.pdfbox.cos.COSArray; import org.apache.pdfbox.cos.COSInteger; diff --git a/src/main/java/com/demcha/compose/engine/render/pdf/handlers/PdfPageBreakRenderHandler.java b/src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfPageBreakRenderHandler.java similarity index 89% rename from src/main/java/com/demcha/compose/engine/render/pdf/handlers/PdfPageBreakRenderHandler.java rename to src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfPageBreakRenderHandler.java index 30c23688..af85e53b 100644 --- a/src/main/java/com/demcha/compose/engine/render/pdf/handlers/PdfPageBreakRenderHandler.java +++ b/src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfPageBreakRenderHandler.java @@ -1,9 +1,9 @@ -package com.demcha.compose.engine.render.pdf.handlers; +package com.demcha.compose.engine.render.pdf.ecs.handlers; import com.demcha.compose.engine.components.core.Entity; import com.demcha.compose.engine.components.renderable.PageBreakComponent; import com.demcha.compose.engine.core.EntityManager; -import com.demcha.compose.engine.render.pdf.PdfRenderingSystemECS; +import com.demcha.compose.engine.render.pdf.ecs.PdfRenderingSystemECS; import com.demcha.compose.engine.render.RenderHandler; import java.io.IOException; diff --git a/src/main/java/com/demcha/compose/engine/render/pdf/handlers/PdfRectangleRenderHandler.java b/src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfRectangleRenderHandler.java similarity index 97% rename from src/main/java/com/demcha/compose/engine/render/pdf/handlers/PdfRectangleRenderHandler.java rename to src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfRectangleRenderHandler.java index 0a770df6..f9a3dae4 100644 --- a/src/main/java/com/demcha/compose/engine/render/pdf/handlers/PdfRectangleRenderHandler.java +++ b/src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfRectangleRenderHandler.java @@ -1,4 +1,4 @@ -package com.demcha.compose.engine.render.pdf.handlers; +package com.demcha.compose.engine.render.pdf.ecs.handlers; import com.demcha.compose.engine.components.content.shape.CornerRadius; import com.demcha.compose.engine.components.content.shape.FillColor; @@ -9,7 +9,7 @@ import com.demcha.compose.engine.components.renderable.Rectangle; import com.demcha.compose.engine.core.EntityManager; import com.demcha.compose.engine.exceptions.ContentSizeNotFoundException; -import com.demcha.compose.engine.render.pdf.PdfRenderingSystemECS; +import com.demcha.compose.engine.render.pdf.ecs.PdfRenderingSystemECS; import com.demcha.compose.engine.render.guides.GuidesRenderer; import com.demcha.compose.engine.render.RenderHandler; import lombok.extern.slf4j.Slf4j; diff --git a/src/main/java/com/demcha/compose/engine/render/pdf/handlers/PdfTableRowRenderHandler.java b/src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfTableRowRenderHandler.java similarity index 97% rename from src/main/java/com/demcha/compose/engine/render/pdf/handlers/PdfTableRowRenderHandler.java rename to src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfTableRowRenderHandler.java index d659a9fa..c0c572d2 100644 --- a/src/main/java/com/demcha/compose/engine/render/pdf/handlers/PdfTableRowRenderHandler.java +++ b/src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfTableRowRenderHandler.java @@ -1,4 +1,4 @@ -package com.demcha.compose.engine.render.pdf.handlers; +package com.demcha.compose.engine.render.pdf.ecs.handlers; import com.demcha.compose.engine.components.content.table.TableCellLayoutStyle; import com.demcha.compose.engine.components.content.shape.FillColor; @@ -14,8 +14,8 @@ import com.demcha.compose.engine.components.style.Padding; import com.demcha.compose.engine.core.EntityManager; import com.demcha.compose.engine.render.pdf.PdfFont; -import com.demcha.compose.engine.render.pdf.PdfRenderingSystemECS; -import com.demcha.compose.engine.render.pdf.helpers.TableCellBox; +import com.demcha.compose.engine.render.pdf.ecs.PdfRenderingSystemECS; +import com.demcha.compose.engine.render.pdf.ecs.helpers.TableCellBox; import com.demcha.compose.engine.render.guides.GuidesRenderer; import com.demcha.compose.engine.render.RenderHandler; import org.apache.pdfbox.pdmodel.PDPageContentStream; diff --git a/src/main/java/com/demcha/compose/engine/render/pdf/handlers/PdfTextRenderHandler.java b/src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfTextRenderHandler.java similarity index 97% rename from src/main/java/com/demcha/compose/engine/render/pdf/handlers/PdfTextRenderHandler.java rename to src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfTextRenderHandler.java index 88ddabb7..a356e420 100644 --- a/src/main/java/com/demcha/compose/engine/render/pdf/handlers/PdfTextRenderHandler.java +++ b/src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfTextRenderHandler.java @@ -1,4 +1,4 @@ -package com.demcha.compose.engine.render.pdf.handlers; +package com.demcha.compose.engine.render.pdf.ecs.handlers; import com.demcha.compose.engine.components.core.Entity; import com.demcha.compose.engine.components.layout.coordinator.Placement; @@ -6,7 +6,7 @@ import com.demcha.compose.engine.components.style.Padding; import com.demcha.compose.engine.core.EntityManager; import com.demcha.compose.engine.render.pdf.PdfFont; -import com.demcha.compose.engine.render.pdf.PdfRenderingSystemECS; +import com.demcha.compose.engine.render.pdf.ecs.PdfRenderingSystemECS; import com.demcha.compose.engine.font.Font; import com.demcha.compose.engine.render.guides.GuidesRenderer; import com.demcha.compose.engine.render.RenderHandler; diff --git a/src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/package-info.java b/src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/package-info.java new file mode 100644 index 00000000..48b84c37 --- /dev/null +++ b/src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/package-info.java @@ -0,0 +1,17 @@ +/** + * Legacy ECS render-marker handlers for the + * {@code com.demcha.compose.engine.render.pdf.ecs.PdfRenderingSystemECS} renderer. + * + *

Part of the dead legacy ECS PDF render pipeline; see + * {@code com.demcha.compose.engine.render.pdf.ecs} for context. These handlers + * dispatch {@code Entity}-based render markers to PDFBox drawing operations and + * are retained only for the legacy engine regression tests. The canonical + * pipeline uses its own page-fragment render handlers under + * {@code com.demcha.compose.document.backend.fixed.pdf.handlers}.

+ * + * @deprecated Legacy ECS render handlers, superseded by + * {@code com.demcha.compose.document.backend.fixed.pdf.handlers}. Do not + * extend or spend optimization effort here. + */ +@Deprecated +package com.demcha.compose.engine.render.pdf.ecs.handlers; diff --git a/src/main/java/com/demcha/compose/engine/render/pdf/helpers/PdfBookmarkBuilder.java b/src/main/java/com/demcha/compose/engine/render/pdf/ecs/helpers/PdfBookmarkBuilder.java similarity index 98% rename from src/main/java/com/demcha/compose/engine/render/pdf/helpers/PdfBookmarkBuilder.java rename to src/main/java/com/demcha/compose/engine/render/pdf/ecs/helpers/PdfBookmarkBuilder.java index fe640395..a7eb6cb7 100644 --- a/src/main/java/com/demcha/compose/engine/render/pdf/helpers/PdfBookmarkBuilder.java +++ b/src/main/java/com/demcha/compose/engine/render/pdf/ecs/helpers/PdfBookmarkBuilder.java @@ -1,4 +1,4 @@ -package com.demcha.compose.engine.render.pdf.helpers; +package com.demcha.compose.engine.render.pdf.ecs.helpers; import com.demcha.compose.engine.components.content.bookmark.BookmarkEntry; import com.demcha.compose.engine.components.core.Entity; diff --git a/src/main/java/com/demcha/compose/engine/render/pdf/helpers/TableCellBox.java b/src/main/java/com/demcha/compose/engine/render/pdf/ecs/helpers/TableCellBox.java similarity index 96% rename from src/main/java/com/demcha/compose/engine/render/pdf/helpers/TableCellBox.java rename to src/main/java/com/demcha/compose/engine/render/pdf/ecs/helpers/TableCellBox.java index d0ea7033..993164eb 100644 --- a/src/main/java/com/demcha/compose/engine/render/pdf/helpers/TableCellBox.java +++ b/src/main/java/com/demcha/compose/engine/render/pdf/ecs/helpers/TableCellBox.java @@ -1,11 +1,11 @@ -package com.demcha.compose.engine.render.pdf.helpers; +package com.demcha.compose.engine.render.pdf.ecs.helpers; import com.demcha.compose.engine.components.content.shape.FillColor; import com.demcha.compose.engine.components.content.shape.Side; import com.demcha.compose.engine.components.content.shape.Stroke; import com.demcha.compose.engine.components.layout.coordinator.RenderCoordinateContext; import com.demcha.compose.engine.components.style.Padding; -import com.demcha.compose.engine.render.pdf.PdfRenderingSystemECS; +import com.demcha.compose.engine.render.pdf.ecs.PdfRenderingSystemECS; import org.apache.pdfbox.pdmodel.PDPageContentStream; import java.awt.*; diff --git a/src/main/java/com/demcha/compose/engine/render/pdf/ecs/helpers/package-info.java b/src/main/java/com/demcha/compose/engine/render/pdf/ecs/helpers/package-info.java new file mode 100644 index 00000000..38e61e15 --- /dev/null +++ b/src/main/java/com/demcha/compose/engine/render/pdf/ecs/helpers/package-info.java @@ -0,0 +1,16 @@ +/** + * Legacy ECS PDF render helper primitives: {@code TableCellBox} (cell-box drawing + * for the ECS table-row handler) and {@code PdfBookmarkBuilder} (PDF outline + * assembly from {@code Entity} bookmark components). + * + *

Part of the dead legacy ECS PDF render pipeline; see + * {@code com.demcha.compose.engine.render.pdf.ecs} for context. Retained only for + * the legacy engine regression tests. The canonical header/footer and watermark + * renderers live in {@code com.demcha.compose.engine.render.pdf.helpers} and are + * not deprecated.

+ * + * @deprecated Legacy ECS PDF render helpers — a candidate for removal. Do not + * extend or spend optimization effort here. + */ +@Deprecated +package com.demcha.compose.engine.render.pdf.ecs.helpers; diff --git a/src/main/java/com/demcha/compose/engine/render/pdf/ecs/package-info.java b/src/main/java/com/demcha/compose/engine/render/pdf/ecs/package-info.java new file mode 100644 index 00000000..b89841c2 --- /dev/null +++ b/src/main/java/com/demcha/compose/engine/render/pdf/ecs/package-info.java @@ -0,0 +1,29 @@ +/** + * Legacy ECS PDF render pipeline — the {@code Entity}-based PDFBox renderer that + * drew resolved entities for the former {@code GraphCompose.pdf(...)} surface. + * + *

This package is dead. The canonical pipeline + * ({@code GraphCompose.document() -> DocumentSession -> LayoutCompiler -> + * PdfFixedLayoutBackend}) renders PDFs through + * {@code com.demcha.compose.document.backend.fixed.pdf} and imports nothing from + * here, and the {@code GraphCompose.pdf(...)} entry point that drove this renderer + * has been removed. {@code PdfRenderingSystemECS} and its collaborators + * ({@code PdfRenderSession}, {@code PdfCanvas}, {@code PdfStream}, + * {@code PdfImageCache}, {@code PdfFileManagerSystem}, {@code PdfGuidesRenderer}, + * the {@code handlers} render-marker dispatch, and the {@code helpers} support + * primitives) survive only to back the legacy engine regression tests.

+ * + *

The genuinely shared PDF code is not here and is not + * deprecated: {@code engine.render.pdf.PdfFont} and + * {@code engine.render.pdf.GlyphFallbackLogger}, plus the canonical header/footer + * and watermark renderers in {@code engine.render.pdf.helpers}, are used by the + * canonical {@code document.backend.fixed.pdf} backend.

+ * + * @deprecated Legacy ECS PDF renderer, superseded by the canonical + * {@code com.demcha.compose.document.backend.fixed.pdf} backend. No public + * entry point runs it and it is not on the canonical hot path; it is retained + * only for the legacy engine regression tests — a candidate for removal. Do + * not extend it or spend optimization effort here. + */ +@Deprecated +package com.demcha.compose.engine.render.pdf.ecs; diff --git a/src/main/java/com/demcha/compose/engine/render/pdf/handlers/package-info.java b/src/main/java/com/demcha/compose/engine/render/pdf/handlers/package-info.java deleted file mode 100644 index cb500de8..00000000 --- a/src/main/java/com/demcha/compose/engine/render/pdf/handlers/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * PDF renderer-owned handlers for engine render markers. - */ -package com.demcha.compose.engine.render.pdf.handlers; diff --git a/src/main/java/com/demcha/compose/engine/render/pdf/helpers/package-info.java b/src/main/java/com/demcha/compose/engine/render/pdf/helpers/package-info.java index d079200d..431fb3e6 100644 --- a/src/main/java/com/demcha/compose/engine/render/pdf/helpers/package-info.java +++ b/src/main/java/com/demcha/compose/engine/render/pdf/helpers/package-info.java @@ -1,4 +1,11 @@ /** - * PDF renderer-owned helper primitives that are not engine render markers. + * Canonical PDF post-processing renderers for the fixed-layout backend: + * {@code PdfHeaderFooterRenderer} (running headers and footers) and + * {@code PdfWatermarkRenderer} (page watermarks), applied by + * {@code com.demcha.compose.document.backend.fixed.pdf.PdfDocumentPostProcessor}. + * + *

The legacy ECS render helpers ({@code TableCellBox}, + * {@code PdfBookmarkBuilder}) have moved to the deprecated + * {@code com.demcha.compose.engine.render.pdf.ecs.helpers} package.

*/ package com.demcha.compose.engine.render.pdf.helpers; diff --git a/src/main/java/com/demcha/compose/engine/render/pdf/package-info.java b/src/main/java/com/demcha/compose/engine/render/pdf/package-info.java index 0a3cd140..62af5416 100644 --- a/src/main/java/com/demcha/compose/engine/render/pdf/package-info.java +++ b/src/main/java/com/demcha/compose/engine/render/pdf/package-info.java @@ -1,26 +1,26 @@ /** - * PDF backend implementation for the GraphCompose rendering pipeline. + * Shared PDFBox primitives used by the canonical fixed-layout PDF backend. * - *

This package contains the concrete PDF renderer and its backend-owned - * lifecycle helpers. The shared engine reaches this package only after layout - * and pagination have already produced resolved, page-aware entities.

- * - *

Main responsibilities here include:

+ *

This package holds the PDF support types that the canonical pipeline + * ({@code com.demcha.compose.document.backend.fixed.pdf}) depends on:

* * * - *

Package policy is to keep PDFBox concerns here rather than leaking them - * into shared engine components or builders. Engine-side render markers stay - * backend-neutral, while this package decides how those markers are translated - * into concrete PDFBox drawing operations.

+ *

Package policy is to keep PDFBox concerns behind this package (and the + * canonical {@code document.backend.fixed.pdf} backend) rather than leaking them + * into backend-neutral engine components or builders.

* - *

See the sibling {@code handlers} package for render-marker dispatch - * implementations and the {@code helpers} package for PDF-only support objects - * that are not themselves engine render markers.

+ *

The legacy {@code Entity}-based ECS PDF renderer has moved to the + * {@code ecs} sub-package and is {@code @Deprecated}; nothing in this package or + * the canonical pipeline depends on it.

*/ package com.demcha.compose.engine.render.pdf; diff --git a/src/test/java/com/demcha/compose/engine/render/RenderHandlerRegistryTest.java b/src/test/java/com/demcha/compose/engine/render/RenderHandlerRegistryTest.java index 4ab27d17..586ce7b4 100644 --- a/src/test/java/com/demcha/compose/engine/render/RenderHandlerRegistryTest.java +++ b/src/test/java/com/demcha/compose/engine/render/RenderHandlerRegistryTest.java @@ -2,7 +2,7 @@ import com.demcha.compose.engine.components.core.Entity; import com.demcha.compose.engine.core.EntityManager; -import com.demcha.compose.engine.render.pdf.PdfRenderingSystemECS; +import com.demcha.compose.engine.render.pdf.ecs.PdfRenderingSystemECS; import com.demcha.compose.engine.render.Render; import org.junit.jupiter.api.Test; diff --git a/src/test/java/com/demcha/compose/engine/render/guides/GuidesRendererTest.java b/src/test/java/com/demcha/compose/engine/render/guides/GuidesRendererTest.java index 5506b020..ef77eca0 100644 --- a/src/test/java/com/demcha/compose/engine/render/guides/GuidesRendererTest.java +++ b/src/test/java/com/demcha/compose/engine/render/guides/GuidesRendererTest.java @@ -6,8 +6,8 @@ import com.demcha.mock.FactoryPresets; import com.demcha.mock.data.CanvasData; import com.demcha.mock.data.SizeData; -import com.demcha.compose.engine.render.pdf.PdfGuidesRenderer; -import com.demcha.compose.engine.render.pdf.PdfRenderingSystemECS; +import com.demcha.compose.engine.render.pdf.ecs.PdfGuidesRenderer; +import com.demcha.compose.engine.render.pdf.ecs.PdfRenderingSystemECS; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; diff --git a/src/test/java/com/demcha/compose/engine/render/pdf/PdfRenderSessionTest.java b/src/test/java/com/demcha/compose/engine/render/pdf/ecs/PdfRenderSessionTest.java similarity index 96% rename from src/test/java/com/demcha/compose/engine/render/pdf/PdfRenderSessionTest.java rename to src/test/java/com/demcha/compose/engine/render/pdf/ecs/PdfRenderSessionTest.java index 7836d4c3..4e241391 100644 --- a/src/test/java/com/demcha/compose/engine/render/pdf/PdfRenderSessionTest.java +++ b/src/test/java/com/demcha/compose/engine/render/pdf/ecs/PdfRenderSessionTest.java @@ -1,4 +1,4 @@ -package com.demcha.compose.engine.render.pdf; +package com.demcha.compose.engine.render.pdf.ecs; import com.demcha.compose.engine.components.content.shape.FillColor; import com.demcha.compose.engine.components.core.Entity; @@ -6,7 +6,7 @@ import com.demcha.compose.engine.components.layout.coordinator.Placement; import com.demcha.compose.engine.components.renderable.Rectangle; import com.demcha.compose.engine.core.EntityManager; -import com.demcha.compose.engine.render.pdf.handlers.PdfRectangleRenderHandler; +import com.demcha.compose.engine.render.pdf.ecs.handlers.PdfRectangleRenderHandler; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.PDPageContentStream; import org.apache.pdfbox.pdmodel.common.PDRectangle; diff --git a/src/test/java/com/demcha/compose/engine/render/pdf/PdfRenderingSystemECSDispatchTest.java b/src/test/java/com/demcha/compose/engine/render/pdf/ecs/PdfRenderingSystemECSDispatchTest.java similarity index 99% rename from src/test/java/com/demcha/compose/engine/render/pdf/PdfRenderingSystemECSDispatchTest.java rename to src/test/java/com/demcha/compose/engine/render/pdf/ecs/PdfRenderingSystemECSDispatchTest.java index ff73f87b..cbd48f0d 100644 --- a/src/test/java/com/demcha/compose/engine/render/pdf/PdfRenderingSystemECSDispatchTest.java +++ b/src/test/java/com/demcha/compose/engine/render/pdf/ecs/PdfRenderingSystemECSDispatchTest.java @@ -1,4 +1,4 @@ -package com.demcha.compose.engine.render.pdf; +package com.demcha.compose.engine.render.pdf.ecs; import com.demcha.compose.engine.components.core.Entity; import com.demcha.compose.engine.components.layout.coordinator.ComputedPosition; diff --git a/src/test/java/com/demcha/compose/engine/render/pdf/PdfRenderingSystemECSImageCacheTest.java b/src/test/java/com/demcha/compose/engine/render/pdf/ecs/PdfRenderingSystemECSImageCacheTest.java similarity index 98% rename from src/test/java/com/demcha/compose/engine/render/pdf/PdfRenderingSystemECSImageCacheTest.java rename to src/test/java/com/demcha/compose/engine/render/pdf/ecs/PdfRenderingSystemECSImageCacheTest.java index dc777a6b..69f6f45d 100644 --- a/src/test/java/com/demcha/compose/engine/render/pdf/PdfRenderingSystemECSImageCacheTest.java +++ b/src/test/java/com/demcha/compose/engine/render/pdf/ecs/PdfRenderingSystemECSImageCacheTest.java @@ -1,4 +1,4 @@ -package com.demcha.compose.engine.render.pdf; +package com.demcha.compose.engine.render.pdf.ecs; import com.demcha.compose.engine.components.content.ImageData; import org.apache.pdfbox.pdmodel.PDDocument; diff --git a/src/test/java/com/demcha/compose/engine/render/pdf/handlers/PdfLinkRenderHandlerTest.java b/src/test/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfLinkRenderHandlerTest.java similarity index 92% rename from src/test/java/com/demcha/compose/engine/render/pdf/handlers/PdfLinkRenderHandlerTest.java rename to src/test/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfLinkRenderHandlerTest.java index 85c330ee..6d1279cc 100644 --- a/src/test/java/com/demcha/compose/engine/render/pdf/handlers/PdfLinkRenderHandlerTest.java +++ b/src/test/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfLinkRenderHandlerTest.java @@ -1,4 +1,4 @@ -package com.demcha.compose.engine.render.pdf.handlers; +package com.demcha.compose.engine.render.pdf.ecs.handlers; import com.demcha.compose.engine.components.content.link.LinkUrl; import com.demcha.compose.engine.components.core.Entity; @@ -7,8 +7,8 @@ import com.demcha.compose.engine.components.renderable.Link; import com.demcha.compose.engine.components.style.Padding; import com.demcha.compose.engine.core.EntityManager; -import com.demcha.compose.engine.render.pdf.PdfCanvas; -import com.demcha.compose.engine.render.pdf.PdfRenderingSystemECS; +import com.demcha.compose.engine.render.pdf.ecs.PdfCanvas; +import com.demcha.compose.engine.render.pdf.ecs.PdfRenderingSystemECS; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.common.PDRectangle; import org.apache.pdfbox.pdmodel.interactive.action.PDActionURI; diff --git a/src/test/java/com/demcha/compose/engine/render/pdf/handlers/PdfTableRowRenderHandlerTest.java b/src/test/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfTableRowRenderHandlerTest.java similarity index 99% rename from src/test/java/com/demcha/compose/engine/render/pdf/handlers/PdfTableRowRenderHandlerTest.java rename to src/test/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfTableRowRenderHandlerTest.java index 4c402eeb..f41b38a8 100644 --- a/src/test/java/com/demcha/compose/engine/render/pdf/handlers/PdfTableRowRenderHandlerTest.java +++ b/src/test/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfTableRowRenderHandlerTest.java @@ -1,4 +1,4 @@ -package com.demcha.compose.engine.render.pdf.handlers; +package com.demcha.compose.engine.render.pdf.ecs.handlers; import com.demcha.compose.font.DefaultFonts; import com.demcha.compose.engine.components.content.table.TableCellLayoutStyle; diff --git a/src/test/java/com/demcha/compose/testsupport/EngineComposerHarness.java b/src/test/java/com/demcha/compose/testsupport/EngineComposerHarness.java index 6200b5f3..93d98e6b 100644 --- a/src/test/java/com/demcha/compose/testsupport/EngineComposerHarness.java +++ b/src/test/java/com/demcha/compose/testsupport/EngineComposerHarness.java @@ -15,11 +15,11 @@ import com.demcha.compose.engine.debug.LayoutSnapshot; import com.demcha.compose.engine.debug.LayoutSnapshotExtractor; import com.demcha.compose.engine.layout.LayoutSystem; -import com.demcha.compose.engine.render.pdf.PdfCanvas; -import com.demcha.compose.engine.render.pdf.PdfFileManagerSystem; +import com.demcha.compose.engine.render.pdf.ecs.PdfCanvas; +import com.demcha.compose.engine.render.pdf.ecs.PdfFileManagerSystem; import com.demcha.compose.engine.render.pdf.PdfFont; -import com.demcha.compose.engine.render.pdf.PdfRenderingSystemECS; -import com.demcha.compose.engine.render.pdf.helpers.PdfBookmarkBuilder; +import com.demcha.compose.engine.render.pdf.ecs.PdfRenderingSystemECS; +import com.demcha.compose.engine.render.pdf.ecs.helpers.PdfBookmarkBuilder; import com.demcha.compose.engine.render.pdf.helpers.PdfHeaderFooterRenderer; import com.demcha.compose.engine.render.pdf.helpers.PdfWatermarkRenderer; import com.demcha.compose.engine.measurement.FontLibraryTextMeasurementSystem; diff --git a/src/test/java/com/demcha/compose/testsupport/engine/assembly/ImageBuilderTest.java b/src/test/java/com/demcha/compose/testsupport/engine/assembly/ImageBuilderTest.java index 5cc5a9e5..474ba4fe 100644 --- a/src/test/java/com/demcha/compose/testsupport/engine/assembly/ImageBuilderTest.java +++ b/src/test/java/com/demcha/compose/testsupport/engine/assembly/ImageBuilderTest.java @@ -7,8 +7,8 @@ import com.demcha.compose.engine.components.style.Padding; import com.demcha.compose.engine.core.EntityManager; import com.demcha.compose.engine.layout.LayoutSystem; -import com.demcha.compose.engine.render.pdf.PdfCanvas; -import com.demcha.compose.engine.render.pdf.PdfRenderingSystemECS; +import com.demcha.compose.engine.render.pdf.ecs.PdfCanvas; +import com.demcha.compose.engine.render.pdf.ecs.PdfRenderingSystemECS; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.common.PDRectangle; import org.junit.jupiter.api.BeforeEach; diff --git a/src/test/java/com/demcha/documentation/PdfBackendIsolationGuardTest.java b/src/test/java/com/demcha/documentation/PdfBackendIsolationGuardTest.java index 8ab4b274..d93658bc 100644 --- a/src/test/java/com/demcha/documentation/PdfBackendIsolationGuardTest.java +++ b/src/test/java/com/demcha/documentation/PdfBackendIsolationGuardTest.java @@ -51,7 +51,8 @@ void pdfboxShouldStayOutOfCanonicalAndNonPdfBackendContracts() throws IOExceptio assertThat(violations) .describedAs("PDFBox dependencies must stay behind document.backend.fixed.pdf.* " - + "or the legacy engine.render.pdf.* renderer. Canonical API and layout contracts " + + "or under engine.render.pdf.* (shared PDFBox primitives plus the legacy " + + "ECS renderer in engine.render.pdf.ecs.*). Canonical API and layout contracts " + "should use document-level value objects such as DocumentPageSize.") .isEmpty(); } diff --git a/src/test/java/com/demcha/testing/layout/LayoutSnapshotExtractorTest.java b/src/test/java/com/demcha/testing/layout/LayoutSnapshotExtractorTest.java index 23c0b528..0201e536 100644 --- a/src/test/java/com/demcha/testing/layout/LayoutSnapshotExtractorTest.java +++ b/src/test/java/com/demcha/testing/layout/LayoutSnapshotExtractorTest.java @@ -21,7 +21,7 @@ import com.demcha.compose.engine.debug.LayoutNodeSnapshot; import com.demcha.compose.engine.debug.LayoutSnapshot; import com.demcha.compose.testing.layout.LayoutSnapshotJson; -import com.demcha.compose.engine.render.pdf.PdfCanvas; +import com.demcha.compose.engine.render.pdf.ecs.PdfCanvas; import org.apache.pdfbox.pdmodel.common.PDRectangle; import org.junit.jupiter.api.Test; From dbd3b100c599f5a3b3017073289e05150d5e56a9 Mon Sep 17 00:00:00 2001 From: DemchaAV Date: Tue, 9 Jun 2026 13:25:08 +0100 Subject: [PATCH 2/2] docs(engine): fix stale ECS renderer paths after the .ecs split Follow-up to the legacy ECS PDF renderer split: CONTRIBUTING.md and docs/architecture/overview.md still pointed at the vacated engine.render.pdf.handlers / .helpers locations, and CONTRIBUTING + implementation-guide had broken links to the moved PdfRenderingSystemECSDispatchTest and TableCellBox. Repath to engine.render.pdf.ecs.* and frame the ECS renderer guidance as legacy (canonical PDF output is document.backend.fixed.pdf). Doc-only; guard suite (DocumentationCoverageTest, CanonicalSurfaceGuardTest, DocumentationExamplesTest, PDF boundary guards) green. Surfaced by an independent review of the package-split PR. --- CONTRIBUTING.md | 11 ++++++----- docs/architecture/overview.md | 4 ++-- docs/contributing/implementation-guide.md | 2 +- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index a56d4855..3aef92a9 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -168,10 +168,11 @@ not need any of them. - Engine render markers implement backend-neutral `Render`. Do not add backend-specific render interfaces back into `engine/components`. -- PDF rendering logic lives in - `src/main/java/com/demcha/compose/engine/render/pdf/handlers/`. +- PDF rendering logic for the legacy ECS renderer (deprecated; canonical PDF + output goes through `com.demcha.compose.document.backend.fixed.pdf`) lives in + `src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/`. Backend-only helper objects live in - `com.demcha.compose.engine.render.pdf.helpers`, not in + `com.demcha.compose.engine.render.pdf.ecs.helpers`, not in `components/renderable`. - Builders and layout code get text width and line metrics from `TextMeasurementSystem`, not from @@ -208,7 +209,7 @@ The rules above are enforced by tests: [EnginePdfBoundaryTest.java](./src/test/java/com/demcha/compose/engine/architecture/EnginePdfBoundaryTest.java), [CanonicalTemplateComposerPdfBoundaryTest.java](./src/test/java/com/demcha/compose/document/templates/architecture/CanonicalTemplateComposerPdfBoundaryTest.java), [PdfRenderInterfaceGuardTest.java](./src/test/java/com/demcha/compose/engine/render/pdf/PdfRenderInterfaceGuardTest.java), - [PdfRenderingSystemECSDispatchTest.java](./src/test/java/com/demcha/compose/engine/render/pdf/PdfRenderingSystemECSDispatchTest.java) + [PdfRenderingSystemECSDispatchTest.java](./src/test/java/com/demcha/compose/engine/render/pdf/ecs/PdfRenderingSystemECSDispatchTest.java) ## Adding a new feature @@ -325,7 +326,7 @@ Choose the smallest tests that match the change: - For low-level test harness changes: [ComponentBuilderTest.java](./src/test/java/com/demcha/compose/engine/components/ComponentBuilderTest.java) - For render-marker dispatch changes: - [PdfRenderingSystemECSDispatchTest.java](./src/test/java/com/demcha/compose/engine/render/pdf/PdfRenderingSystemECSDispatchTest.java) + [PdfRenderingSystemECSDispatchTest.java](./src/test/java/com/demcha/compose/engine/render/pdf/ecs/PdfRenderingSystemECSDispatchTest.java) - For layout/positioning behavior: [ComputedPositionTest.java](./src/test/java/com/demcha/compose/engine/components/layout/ComputedPositionTest.java) - For pagination and multi-page behavior: diff --git a/docs/architecture/overview.md b/docs/architecture/overview.md index 09aa9566..f6da7b89 100644 --- a/docs/architecture/overview.md +++ b/docs/architecture/overview.md @@ -231,8 +231,8 @@ code should not need any of them. into the active renderer - render marker components identify *what* needs to be rendered; *how* it is drawn lives in renderer-owned handler packages such as - `...render.pdf.handlers` (with helper objects under - `...render.pdf.helpers`) + `...render.pdf.ecs.handlers` (with helper objects under + `...render.pdf.ecs.helpers`) - `RenderStream` acts as a session factory, not as a per-entity content-stream opener - `RenderPassSession` is the shared seam for page lifetime and diff --git a/docs/contributing/implementation-guide.md b/docs/contributing/implementation-guide.md index e830b281..d76b946d 100644 --- a/docs/contributing/implementation-guide.md +++ b/docs/contributing/implementation-guide.md @@ -259,7 +259,7 @@ Relevant files: - [TableBuilder.java](./../src/test/java/com/demcha/compose/testsupport/engine/assembly/TableBuilder.java) - [TableRow.java](./../src/main/java/com/demcha/compose/engine/components/renderable/TableRow.java) -- [TableCellBox.java](./../src/main/java/com/demcha/compose/engine/render/pdf/helpers/TableCellBox.java) +- [TableCellBox.java](./../src/main/java/com/demcha/compose/engine/render/pdf/ecs/helpers/TableCellBox.java) - [TableResolvedCell.java](./../src/main/java/com/demcha/compose/engine/components/content/table/TableResolvedCell.java) Rule of thumb: