diff --git a/engine/src/main/java/pro/verron/officestamper/api/OfficeStamperConfiguration.java b/engine/src/main/java/pro/verron/officestamper/api/OfficeStamperConfiguration.java index 8d4320a0..f8786bf2 100644 --- a/engine/src/main/java/pro/verron/officestamper/api/OfficeStamperConfiguration.java +++ b/engine/src/main/java/pro/verron/officestamper/api/OfficeStamperConfiguration.java @@ -46,9 +46,7 @@ OfficeStamperConfiguration addCommentProcessor( * * @param preprocessor the pre-processor to add */ - void addPreprocessor(PreProcessor preprocessor); - - + OfficeStamperConfiguration addPreprocessor(PreProcessor preprocessor); /** * Retrieves the EvaluationContextConfigurer for configuring the Spring Expression Language (SPEL) EvaluationContext @@ -152,5 +150,5 @@ NeedsTriFunctionImpl addCustomFunction( List getPostprocessors(); - void addPostprocessor(PostProcessor postProcessor); + OfficeStamperConfiguration addPostprocessor(PostProcessor postProcessor); } diff --git a/engine/src/main/java/pro/verron/officestamper/core/DocumentUtil.java b/engine/src/main/java/pro/verron/officestamper/core/DocumentUtil.java index d95cff5f..26b7c3ee 100644 --- a/engine/src/main/java/pro/verron/officestamper/core/DocumentUtil.java +++ b/engine/src/main/java/pro/verron/officestamper/core/DocumentUtil.java @@ -16,6 +16,7 @@ import org.springframework.util.function.ThrowingFunction; import pro.verron.officestamper.api.DocxPart; import pro.verron.officestamper.api.OfficeStamperException; +import pro.verron.officestamper.api.Paragraph; import java.util.*; import java.util.stream.Stream; @@ -38,13 +39,6 @@ private DocumentUtil() { throw new OfficeStamperException("Utility classes shouldn't be instantiated"); } - public static Stream streamObjectElements(DocxPart source, Class elementClass) { - ClassFinder finder = new ClassFinder(elementClass); - TraversalUtil.visit(source.part(), finder); - return finder.results.stream() - .map(elementClass::cast); - } - /** * Retrieve the last element from an object. * @@ -213,4 +207,22 @@ private static Stream> extractHeaderFooterParts(HeaderFooterPolic ofNullable(hfp.getEvenFooter()).ifPresent(builder::add); return builder.build(); } + + static Stream streamParagraphs(TextualDocxPart source) { + var paragraphs = streamObjectElements(source, P.class) + .map(p -> StandardParagraph.from(source, p)); + var sdtRuns = streamObjectElements(source, SdtRun.class) + .map(SdtRun::getSdtContent) + .filter(CTSdtContentRun.class::isInstance) + .map(CTSdtContentRun.class::cast) + .map(paragraph -> StandardParagraph.from(source, paragraph)); + return Stream.concat(paragraphs, sdtRuns); + } + + public static Stream streamObjectElements(DocxPart source, Class elementClass) { + ClassFinder finder = new ClassFinder(elementClass); + TraversalUtil.visit(source.part(), finder); + return finder.results.stream() + .map(elementClass::cast); + } } diff --git a/engine/src/main/java/pro/verron/officestamper/core/DocxStamperConfiguration.java b/engine/src/main/java/pro/verron/officestamper/core/DocxStamperConfiguration.java index abaadca6..69a73352 100644 --- a/engine/src/main/java/pro/verron/officestamper/core/DocxStamperConfiguration.java +++ b/engine/src/main/java/pro/verron/officestamper/core/DocxStamperConfiguration.java @@ -65,7 +65,7 @@ public void resetResolvers() { /// /// @param interfaceClass the interface holding methods to expose in the expression language. /// @param implementation the implementation to call to evaluate invocations of those methods. - /// Must implement the mentioned interface. + /// Must implement the mentioned interface. /// /// @return a [DocxStamperConfiguration] object @Override @@ -96,9 +96,9 @@ public DocxStamperConfiguration addCommentProcessor( /// /// @param preprocessor the preprocessor to add. @Override - public void addPreprocessor(PreProcessor preprocessor) { + public OfficeStamperConfiguration addPreprocessor(PreProcessor preprocessor) { preprocessors.add(preprocessor); - + return this; } @Override @@ -239,7 +239,8 @@ public List getPostprocessors() { } @Override - public void addPostprocessor(PostProcessor postprocessor) { + public OfficeStamperConfiguration addPostprocessor(PostProcessor postprocessor) { postprocessors.add(postprocessor); + return this; } } diff --git a/engine/src/main/java/pro/verron/officestamper/core/TextualDocxPart.java b/engine/src/main/java/pro/verron/officestamper/core/TextualDocxPart.java index 5eb6f69c..780547d8 100644 --- a/engine/src/main/java/pro/verron/officestamper/core/TextualDocxPart.java +++ b/engine/src/main/java/pro/verron/officestamper/core/TextualDocxPart.java @@ -4,7 +4,9 @@ import org.docx4j.openpackaging.parts.Part; import org.docx4j.openpackaging.parts.relationships.RelationshipsPart; import org.docx4j.relationships.Relationship; -import org.docx4j.wml.*; +import org.docx4j.wml.ContentAccessor; +import org.docx4j.wml.P; +import org.docx4j.wml.R; import pro.verron.officestamper.api.DocxPart; import pro.verron.officestamper.api.Paragraph; @@ -33,13 +35,7 @@ public TextualDocxPart( public Stream streamParagraphs() { - return Stream.concat(DocumentUtil.streamObjectElements(this, P.class) - .map(p -> StandardParagraph.from(this, p)), - DocumentUtil.streamObjectElements(this, SdtRun.class) - .map(SdtRun::getSdtContent) - .filter(CTSdtContentRun.class::isInstance) - .map(CTSdtContentRun.class::cast) - .map(paragraph -> StandardParagraph.from(this, paragraph))); + return DocumentUtil.streamParagraphs(this); } @Override public Stream streamRun() {