Skip to content

Commit b03a0e4

Browse files
committed
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).
1 parent cf840be commit b03a0e4

43 files changed

Lines changed: 212 additions & 96 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

CHANGELOG.md

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,24 @@ Open cycle — bug-fix / housekeeping. Entries land here as they merge.
133133
`engine.measurement`, `engine.font`, `engine.render`) are **not** deprecated.
134134
No public API or behaviour change.
135135

136+
- **The legacy ECS PDF render pipeline is deprecated.** Follow-up to the ECS
137+
engine deprecation above. The `Entity`-based PDFBox renderer
138+
(`PdfRenderingSystemECS` and its collaborators — `PdfRenderSession`, `PdfCanvas`,
139+
`PdfStream`, `PdfImageCache`, `PdfFileManagerSystem`, `PdfGuidesRenderer`, the
140+
render-marker handlers, and the `TableCellBox` / `PdfBookmarkBuilder` helpers) is
141+
the renderer for the removed `GraphCompose.pdf(...)` surface and now runs only
142+
under the legacy engine regression tests; canonical PDF output goes through
143+
`com.demcha.compose.document.backend.fixed.pdf`. Because `engine.render.pdf` is a
144+
*mixed* package — it also holds the canonical-shared `PdfFont`,
145+
`GlyphFallbackLogger`, and the header/footer + watermark post-processors — the
146+
legacy classes were physically moved into a new `engine.render.pdf.ecs`
147+
(with `.handlers` / `.helpers` sub-packages), which is then `@Deprecated` at
148+
package level (so no deprecation-warning cascade, same pattern as the ECS engine
149+
packages). The four genuinely shared `engine.render.pdf` types are **not**
150+
deprecated and stay put. No behaviour change. The relocated renderer has no
151+
public entry point and carries no binary-compatibility promise, so the move is
152+
excluded from the japicmp gate rather than treated as a breaking removal.
153+
136154
### Tests / tooling
137155

138156
- **Benchmark regression gate and measurement probe (benchmarks module, not part

docs/architecture/package-map.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,8 @@ intended.
4949
| `com.demcha.compose.engine.pagination` | Page-breaking helpers and pagination fallback systems. | Maintain child-first ordering and page-shift propagation rules. |
5050
| `com.demcha.compose.engine.measurement` | Text measurement contracts and font-backed implementations. | Builders/layout helpers depend on this seam instead of reaching into renderers. |
5151
| `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. |
52-
| `com.demcha.compose.engine.render.pdf` | Low-level PDF backend internals for ECS rendering. | PDFBox state stays here and in child handler/helper packages. |
52+
| `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. |
53+
| `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. |
5354
| `com.demcha.compose.engine.render.word` | Experimental Word backend internals. | Treat as research until a supported public surface is designed. |
5455
| `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. |
5556
| `com.demcha.compose.engine.text.markdown` | Markdown token parsing used by text preparation. | Keep output backend-neutral. |

docs/contributing/implementation-guide.md

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -321,21 +321,29 @@ Preferred extension pattern for new backends:
321321
4. keep backend-only helper drawing in renderer-owned helper packages when the code is not an entity render marker
322322
5. keep renderer ordering policy in the rendering layer rather than in pagination utilities
323323

324+
> **Deprecated reference implementation.** The PDF renderer named below
325+
> (`PdfRenderingSystemECS` and the `engine.render.pdf.ecs` handlers/helpers) is the
326+
> legacy `Entity`-based ECS renderer, kept only for regression tests; canonical PDF
327+
> output is produced by `com.demcha.compose.document.backend.fixed.pdf`. The
328+
> backend-neutral `engine.render` *contracts* (`Render`, `RenderPassSession`,
329+
> `RenderStream`, `EntityRenderOrder`) are **not** deprecated — only the ECS PDF
330+
> implementation is. Do not extend the `ecs` renderer.
331+
324332
Important files:
325333

326334
- [Render.java](./../src/main/java/com/demcha/compose/engine/render/Render.java)
327335
- [RenderPassSession.java](./../src/main/java/com/demcha/compose/engine/render/RenderPassSession.java)
328336
- [RenderStream.java](./../src/main/java/com/demcha/compose/engine/render/RenderStream.java)
329-
- [PdfRenderingSystemECS.java](./../src/main/java/com/demcha/compose/engine/render/pdf/PdfRenderingSystemECS.java)
330-
- [PdfRenderSession.java](./../src/main/java/com/demcha/compose/engine/render/pdf/PdfRenderSession.java)
337+
- [PdfRenderingSystemECS.java](./../src/main/java/com/demcha/compose/engine/render/pdf/ecs/PdfRenderingSystemECS.java)
338+
- [PdfRenderSession.java](./../src/main/java/com/demcha/compose/engine/render/pdf/ecs/PdfRenderSession.java)
331339
- [EntityRenderOrder.java](./../src/main/java/com/demcha/compose/engine/render/EntityRenderOrder.java)
332340

333341
Migration rule for new engine components:
334342

335343
- implement backend-neutral `Render`, not backend-specific render interfaces
336-
- move PDF drawing into `...render.pdf.handlers`
344+
- move PDF drawing into `...render.pdf.ecs.handlers`
337345
- use `TextMeasurementSystem` for text width and line metrics instead of reaching through `LayoutSystem`
338-
- place PDF-only helper objects in `...render.pdf.helpers`
346+
- place PDF-only helper objects in `...render.pdf.ecs.helpers`
339347
- keep page-surface lifetime in a backend-specific `RenderPassSession`, not in engine builders or render markers
340348
- keep resolved draw ordering in renderer-owned or renderer-neutral rendering helpers such as `EntityRenderOrder`
341349
- register a render handler for every engine render marker because the PDF entity path no longer supports a backend-specific render fallback

pom.xml

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -692,6 +692,29 @@
692692
-->
693693
<excludes>
694694
<exclude>com.demcha.compose.document.layout.payloads</exclude>
695+
<!--
696+
Legacy ECS PDF renderer (PdfRenderingSystemECS and its
697+
collaborators), relocated to
698+
com.demcha.compose.engine.render.pdf.ecs[.handlers|.helpers]
699+
and @Deprecated at package level. This is the dead
700+
Entity-based renderer that no public entry point reaches
701+
(canonical PDF output goes through
702+
document.backend.fixed.pdf); it carries no
703+
binary-compatibility promise. Both the relocated packages
704+
and the vacated original fully-qualified names are excluded
705+
so the package split is not flagged as a breaking removal.
706+
-->
707+
<exclude>com.demcha.compose.engine.render.pdf.ecs</exclude>
708+
<exclude>com.demcha.compose.engine.render.pdf.ecs.handlers</exclude>
709+
<exclude>com.demcha.compose.engine.render.pdf.ecs.helpers</exclude>
710+
<exclude>com.demcha.compose.engine.render.pdf.handlers</exclude>
711+
<exclude>com.demcha.compose.engine.render.pdf.PdfRenderingSystemECS</exclude>
712+
<exclude>com.demcha.compose.engine.render.pdf.PdfCanvas</exclude>
713+
<exclude>com.demcha.compose.engine.render.pdf.PdfStream</exclude>
714+
<exclude>com.demcha.compose.engine.render.pdf.PdfFileManagerSystem</exclude>
715+
<exclude>com.demcha.compose.engine.render.pdf.PdfGuidesRenderer</exclude>
716+
<exclude>com.demcha.compose.engine.render.pdf.helpers.TableCellBox</exclude>
717+
<exclude>com.demcha.compose.engine.render.pdf.helpers.PdfBookmarkBuilder</exclude>
695718
</excludes>
696719
</parameter>
697720
</configuration>

src/main/java/com/demcha/compose/engine/render/pdf/PdfCanvas.java renamed to src/main/java/com/demcha/compose/engine/render/pdf/ecs/PdfCanvas.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.demcha.compose.engine.render.pdf;
1+
package com.demcha.compose.engine.render.pdf.ecs;
22

33
import com.demcha.compose.engine.core.Canvas;
44
import com.demcha.compose.engine.components.style.Margin;

src/main/java/com/demcha/compose/engine/render/pdf/PdfFileManagerSystem.java renamed to src/main/java/com/demcha/compose/engine/render/pdf/ecs/PdfFileManagerSystem.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.demcha.compose.engine.render.pdf;
1+
package com.demcha.compose.engine.render.pdf.ecs;
22

33
import com.demcha.compose.engine.core.EntityManager;
44
import com.demcha.compose.engine.io.FileManagerSystem;

src/main/java/com/demcha/compose/engine/render/pdf/PdfGuidesRenderer.java renamed to src/main/java/com/demcha/compose/engine/render/pdf/ecs/PdfGuidesRenderer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.demcha.compose.engine.render.pdf;
1+
package com.demcha.compose.engine.render.pdf.ecs;
22

33
import com.demcha.compose.engine.render.guides.GuidesRenderer;
44
import com.demcha.compose.engine.render.guides.impl.BoxRenderImpl;

src/main/java/com/demcha/compose/engine/render/pdf/PdfImageCache.java renamed to src/main/java/com/demcha/compose/engine/render/pdf/ecs/PdfImageCache.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.demcha.compose.engine.render.pdf;
1+
package com.demcha.compose.engine.render.pdf.ecs;
22

33
import com.demcha.compose.engine.components.content.ImageData;
44
import com.demcha.compose.engine.components.content.ImageMetadata;

src/main/java/com/demcha/compose/engine/render/pdf/PdfRenderSession.java renamed to src/main/java/com/demcha/compose/engine/render/pdf/ecs/PdfRenderSession.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.demcha.compose.engine.render.pdf;
1+
package com.demcha.compose.engine.render.pdf.ecs;
22

33
import com.demcha.compose.engine.render.RenderPassSession;
44
import org.apache.pdfbox.pdmodel.PDPageContentStream;

src/main/java/com/demcha/compose/engine/render/pdf/PdfRenderingSystemECS.java renamed to src/main/java/com/demcha/compose/engine/render/pdf/ecs/PdfRenderingSystemECS.java

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.demcha.compose.engine.render.pdf;
1+
package com.demcha.compose.engine.render.pdf.ecs;
22

33
import com.demcha.compose.engine.core.Canvas;
44
import com.demcha.compose.engine.components.content.ImageData;
@@ -9,19 +9,19 @@
99
import com.demcha.compose.engine.core.EntityManager;
1010
import com.demcha.compose.engine.render.guides.GuidLineSettings;
1111
import com.demcha.compose.engine.render.RenderingSystemBase;
12-
import com.demcha.compose.engine.render.pdf.handlers.PdfBarcodeRenderHandler;
13-
import com.demcha.compose.engine.render.pdf.handlers.PdfBlockTextRenderHandler;
14-
import com.demcha.compose.engine.render.pdf.handlers.PdfCircleRenderHandler;
15-
import com.demcha.compose.engine.render.pdf.handlers.PdfChunkedBlockTextRenderHandler;
16-
import com.demcha.compose.engine.render.pdf.handlers.PdfContainerRenderHandler;
17-
import com.demcha.compose.engine.render.pdf.handlers.PdfElementRenderHandler;
18-
import com.demcha.compose.engine.render.pdf.handlers.PdfImageRenderHandler;
19-
import com.demcha.compose.engine.render.pdf.handlers.PdfLineRenderHandler;
20-
import com.demcha.compose.engine.render.pdf.handlers.PdfLinkRenderHandler;
21-
import com.demcha.compose.engine.render.pdf.handlers.PdfPageBreakRenderHandler;
22-
import com.demcha.compose.engine.render.pdf.handlers.PdfRectangleRenderHandler;
23-
import com.demcha.compose.engine.render.pdf.handlers.PdfTableRowRenderHandler;
24-
import com.demcha.compose.engine.render.pdf.handlers.PdfTextRenderHandler;
12+
import com.demcha.compose.engine.render.pdf.ecs.handlers.PdfBarcodeRenderHandler;
13+
import com.demcha.compose.engine.render.pdf.ecs.handlers.PdfBlockTextRenderHandler;
14+
import com.demcha.compose.engine.render.pdf.ecs.handlers.PdfCircleRenderHandler;
15+
import com.demcha.compose.engine.render.pdf.ecs.handlers.PdfChunkedBlockTextRenderHandler;
16+
import com.demcha.compose.engine.render.pdf.ecs.handlers.PdfContainerRenderHandler;
17+
import com.demcha.compose.engine.render.pdf.ecs.handlers.PdfElementRenderHandler;
18+
import com.demcha.compose.engine.render.pdf.ecs.handlers.PdfImageRenderHandler;
19+
import com.demcha.compose.engine.render.pdf.ecs.handlers.PdfLineRenderHandler;
20+
import com.demcha.compose.engine.render.pdf.ecs.handlers.PdfLinkRenderHandler;
21+
import com.demcha.compose.engine.render.pdf.ecs.handlers.PdfPageBreakRenderHandler;
22+
import com.demcha.compose.engine.render.pdf.ecs.handlers.PdfRectangleRenderHandler;
23+
import com.demcha.compose.engine.render.pdf.ecs.handlers.PdfTableRowRenderHandler;
24+
import com.demcha.compose.engine.render.pdf.ecs.handlers.PdfTextRenderHandler;
2525
import com.demcha.compose.engine.render.guides.GuidesRenderer;
2626
import com.demcha.compose.engine.render.RenderHandler;
2727
import com.demcha.compose.engine.render.EntityRenderOrder;

0 commit comments

Comments
 (0)