From 734b0cabfa26c5c0cf79192b5d5cf291ce796712 Mon Sep 17 00:00:00 2001 From: Mario Siegenthaler Date: Fri, 9 Apr 2021 14:08:23 +0200 Subject: [PATCH 01/51] fix: custom property resolvers not used in repeatDocPart --- src/main/java/org/wickedsource/docxstamper/DocxStamper.java | 4 ++-- .../processor/repeat/ParagraphRepeatProcessor.java | 4 +++- .../docxstamper/processor/repeat/RepeatDocPartProcessor.java | 4 +++- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/wickedsource/docxstamper/DocxStamper.java b/src/main/java/org/wickedsource/docxstamper/DocxStamper.java index a0d5345e..2da2a6d3 100644 --- a/src/main/java/org/wickedsource/docxstamper/DocxStamper.java +++ b/src/main/java/org/wickedsource/docxstamper/DocxStamper.java @@ -69,8 +69,8 @@ private void initFields() { commentProcessorRegistry.setExpressionResolver(expressionResolver); commentProcessorRegistry.setFailOnInvalidExpression(config.isFailOnUnresolvedExpression()); commentProcessorRegistry.registerCommentProcessor(IRepeatProcessor.class, new RepeatProcessor(typeResolverRegistry, expressionResolver)); - commentProcessorRegistry.registerCommentProcessor(IParagraphRepeatProcessor.class, new ParagraphRepeatProcessor(typeResolverRegistry)); - commentProcessorRegistry.registerCommentProcessor(IRepeatDocPartProcessor.class, new RepeatDocPartProcessor(typeResolverRegistry)); + commentProcessorRegistry.registerCommentProcessor(IParagraphRepeatProcessor.class, new ParagraphRepeatProcessor(typeResolverRegistry, expressionResolver)); + commentProcessorRegistry.registerCommentProcessor(IRepeatDocPartProcessor.class, new RepeatDocPartProcessor(typeResolverRegistry, expressionResolver)); commentProcessorRegistry.registerCommentProcessor(IDisplayIfProcessor.class, new DisplayIfProcessor()); commentProcessorRegistry.registerCommentProcessor(IReplaceWithProcessor.class, new ReplaceWithProcessor()); diff --git a/src/main/java/org/wickedsource/docxstamper/processor/repeat/ParagraphRepeatProcessor.java b/src/main/java/org/wickedsource/docxstamper/processor/repeat/ParagraphRepeatProcessor.java index 032341db..0ffc94ca 100644 --- a/src/main/java/org/wickedsource/docxstamper/processor/repeat/ParagraphRepeatProcessor.java +++ b/src/main/java/org/wickedsource/docxstamper/processor/repeat/ParagraphRepeatProcessor.java @@ -8,6 +8,7 @@ import org.docx4j.wml.P; import org.wickedsource.docxstamper.api.coordinates.ParagraphCoordinates; import org.wickedsource.docxstamper.api.typeresolver.TypeResolverRegistry; +import org.wickedsource.docxstamper.el.ExpressionResolver; import org.wickedsource.docxstamper.processor.BaseCommentProcessor; import org.wickedsource.docxstamper.replace.PlaceholderReplacer; import org.wickedsource.docxstamper.util.CommentUtil; @@ -29,8 +30,9 @@ private static class ParagraphsToRepeat { private PlaceholderReplacer placeholderReplacer; - public ParagraphRepeatProcessor(TypeResolverRegistry typeResolverRegistry) { + public ParagraphRepeatProcessor(TypeResolverRegistry typeResolverRegistry, ExpressionResolver expressionResolver) { this.placeholderReplacer = new PlaceholderReplacer<>(typeResolverRegistry); + this.placeholderReplacer.setExpressionResolver(expressionResolver); } @Override diff --git a/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatDocPartProcessor.java b/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatDocPartProcessor.java index d2d18aa9..1135859b 100644 --- a/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatDocPartProcessor.java +++ b/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatDocPartProcessor.java @@ -5,6 +5,7 @@ import org.docx4j.wml.*; import org.jvnet.jaxb2_commons.ppp.Child; import org.wickedsource.docxstamper.api.typeresolver.TypeResolverRegistry; +import org.wickedsource.docxstamper.el.ExpressionResolver; import org.wickedsource.docxstamper.processor.BaseCommentProcessor; import org.wickedsource.docxstamper.replace.PlaceholderReplacer; import org.wickedsource.docxstamper.util.CommentUtil; @@ -22,8 +23,9 @@ public class RepeatDocPartProcessor extends BaseCommentProcessor implements IRep private Map> partsToRepeat = new HashMap<>(); private PlaceholderReplacer placeholderReplacer; - public RepeatDocPartProcessor(TypeResolverRegistry typeResolverRegistry) { + public RepeatDocPartProcessor(TypeResolverRegistry typeResolverRegistry, ExpressionResolver expressionResolver) { this.placeholderReplacer = new PlaceholderReplacer<>(typeResolverRegistry); + this.placeholderReplacer.setExpressionResolver(expressionResolver); } @Override From ac22d1b903aee1562106ac74637f6a46b786c6a2 Mon Sep 17 00:00:00 2001 From: Youssouf Naciri Date: Tue, 16 Aug 2022 17:13:59 +0200 Subject: [PATCH 02/51] fixed unit test template for reservoirs updated docx-stamper pom --- pom.xml | 114 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 pom.xml diff --git a/pom.xml b/pom.xml new file mode 100644 index 00000000..008f7e7d --- /dev/null +++ b/pom.xml @@ -0,0 +1,114 @@ + + + 4.0.0 + linkyard + docx-stamper + 1.4.1-SNAPSHOT + jar + docx-stamper + + 1.8 + 1.8 + + Docx-stamper is a Java template engine for docx documents. This is a maintenance fork from + https://github.com/thombergs/docx-stamper. + + https://github.com/bflorat/docx-stamper + + https://github.com/bflorat/docx-stamper + scm:git:https://github.com/bflorat/docx-stamper.git + https://github.com/bflorat/docx-stamper.git + + + + + MIT License + http://opensource.org/licenses/MIT + + + + + + tom.hombergs@gmail.com + Tom Hombergs + http://wickedsource.org + + + bertrand@florat.net + Bertrand Florat + https://florat.net + + + + + + maven-source-plugin + + + attach-sources + + jar + + + + + + + + + + commons-io + commons-io + 2.5 + + + org.javassist + javassist + 3.21.0-GA + + + junit + junit + 4.4 + test + + + org.springframework + spring-expression + 4.3.6.RELEASE + + + + + + org.docx4j + docx4j-JAXB-MOXy + 11.2.9 + + + + + jakarta.xml.bind + jakarta.xml.bind-api + 2.3.2 + compile + + + + + + ossrh + https://s01.oss.sonatype.org/content/repositories/snapshots + + + ossrh + https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/ + + + + + + From 634f4e94e6a789c481f6a26906198d357bccc93f Mon Sep 17 00:00:00 2001 From: Youssouf Naciri Date: Tue, 16 Aug 2022 18:16:30 +0200 Subject: [PATCH 03/51] disabled stopping on evaluation errors added hierarchy to comments --- .../docxstamper/util/CommentUtil.java | 456 +++++++++--------- .../docxstamper/util/CommentWrapper.java | 13 + 2 files changed, 242 insertions(+), 227 deletions(-) diff --git a/src/main/java/org/wickedsource/docxstamper/util/CommentUtil.java b/src/main/java/org/wickedsource/docxstamper/util/CommentUtil.java index 73deffc6..89b3ac6f 100644 --- a/src/main/java/org/wickedsource/docxstamper/util/CommentUtil.java +++ b/src/main/java/org/wickedsource/docxstamper/util/CommentUtil.java @@ -17,235 +17,237 @@ import java.math.BigInteger; import java.util.HashMap; import java.util.Map; +import java.util.Stack; public class CommentUtil { - private static Logger logger = LoggerFactory.getLogger(CommentUtil.class); - - private CommentUtil() { - - } - - /** - * Returns the comment the given DOCX4J run is commented with. - * @param run the DOCX4J run whose comment to retrieve. - * @param document the document that contains the run. - * @return the comment, if found, null otherwise. - */ - public static Comments.Comment getCommentAround(R run, - WordprocessingMLPackage document) { - try { - if (run instanceof Child) { - Child child = (Child) run; - ContentAccessor parent = (ContentAccessor) child.getParent(); - if (parent == null) - return null; - CommentRangeStart possibleComment = null; - boolean foundChild = false; - for (Object contentElement : parent.getContent()) { - - // so first we look for the start of the comment - if (XmlUtils.unwrap(contentElement) instanceof CommentRangeStart) { - possibleComment = (CommentRangeStart) contentElement; - } - // then we check if the child we are looking for is ours - else if (possibleComment != null && child.equals(contentElement)) { - foundChild = true; - } - // and then if we have an end of a comment we are good! - else if (possibleComment != null && foundChild && XmlUtils - .unwrap(contentElement) instanceof CommentRangeEnd) { - try { - BigInteger id = possibleComment.getId(); - CommentsPart commentsPart = (CommentsPart) document.getParts() - .get(new PartName("/word/comments.xml")); - Comments comments = commentsPart.getContents(); - for (Comments.Comment comment : comments.getComment()) { - if (comment.getId().equals(id)) { - return comment; - } - } - } - catch (InvalidFormatException e) { - logger.warn(String.format( - "Error while searching comment. Skipping run %s.", - run), e); - } - } - // else restart - else { - possibleComment = null; - foundChild = false; - } - } - } - return null; - } - catch (Docx4JException e) { - throw new DocxStamperException( - "error accessing the comments of the document!", e); - } - } - - /** - * Returns the first comment found for the given docx object. Note that an object is - * only considered commented if the comment STARTS within the object. Comments - * spanning several objects are not supported by this method. - * - * @param object the object whose comment to load. - * @param document the document in which the object is embedded (needed to load the - * comment from the comments.xml part). - * @return the concatenated string of all paragraphs of text within the comment or - * null if the specified object is not commented. - * @throws Docx4JException in case of a Docx4J processing error. - */ - public static Comments.Comment getCommentFor(ContentAccessor object, - WordprocessingMLPackage document) { - try { - for (Object contentObject : object.getContent()) { - if (contentObject instanceof CommentRangeStart) { - try { - BigInteger id = ((CommentRangeStart) contentObject).getId(); - CommentsPart commentsPart = (CommentsPart) document.getParts() - .get(new PartName("/word/comments.xml")); - Comments comments = commentsPart.getContents(); - for (Comments.Comment comment : comments.getComment()) { - if (comment.getId().equals(id)) { - return comment; - } - } - } - catch (InvalidFormatException e) { - logger.warn(String.format( - "Error while searching comment. Skipping object %s.", - object), e); - } - } - } - return null; - } - catch (Docx4JException e) { - throw new DocxStamperException( - "error accessing the comments of the document!", e); - } - } - - public static String getCommentStringFor(ContentAccessor object, - WordprocessingMLPackage document) throws Docx4JException { - Comments.Comment comment = getCommentFor(object, document); - return getCommentString(comment); - } - - /** - * Returns the string value of the specified comment object. - */ - public static String getCommentString(Comments.Comment comment) { - StringBuilder builder = new StringBuilder(); - for (Object commentChildObject : comment.getContent()) { - if (commentChildObject instanceof P) { - builder.append(new ParagraphWrapper((P) commentChildObject).getText()); - } - } - return builder.toString(); - } - - public static void deleteComment(CommentWrapper comment) { - if (comment.getCommentRangeEnd() != null) { - ContentAccessor commentRangeEndParent = (ContentAccessor) comment - .getCommentRangeEnd().getParent(); - commentRangeEndParent.getContent().remove(comment.getCommentRangeEnd()); - deleteCommentReference(commentRangeEndParent, - comment.getCommentRangeEnd().getId()); - } - if (comment.getCommentRangeStart() != null) { - ContentAccessor commentRangeStartParent = (ContentAccessor) comment - .getCommentRangeStart().getParent(); - commentRangeStartParent.getContent().remove(comment.getCommentRangeStart()); - deleteCommentReference(commentRangeStartParent, - comment.getCommentRangeStart().getId()); - } - // TODO: also delete comment from comments.xml - } - - private static boolean deleteCommentReference(ContentAccessor parent, - BigInteger commentId) { - for (int i = 0; i < parent.getContent().size(); i++) { - Object contentObject = XmlUtils.unwrap(parent.getContent().get(i)); - if (contentObject instanceof ContentAccessor) { - if (deleteCommentReference((ContentAccessor) contentObject, commentId)) { - return true; - } - } - if (contentObject instanceof R) { - for (Object runContentObject : ((R) contentObject).getContent()) { - Object unwrapped = XmlUtils.unwrap(runContentObject); - if (unwrapped instanceof R.CommentReference) { - BigInteger foundCommentId = ((R.CommentReference) unwrapped) - .getId(); - if (foundCommentId.equals(commentId)) { - parent.getContent().remove(i); - return true; - } - } - } - } - } - return false; - } - - public static Map getComments( - WordprocessingMLPackage document) { - Map comments = new HashMap<>(); - collectCommentRanges(comments, document); - collectComments(comments, document); - return comments; - } - - private static void collectCommentRanges( - final Map comments, - WordprocessingMLPackage document) { - DocumentWalker documentWalker = new BaseDocumentWalker( - document.getMainDocumentPart()) { - @Override - protected void onCommentRangeStart(CommentRangeStart commentRangeStart) { - CommentWrapper commentWrapper = comments.get(commentRangeStart.getId()); - if (commentWrapper == null) { - commentWrapper = new CommentWrapper(); - comments.put(commentRangeStart.getId(), commentWrapper); - } - commentWrapper.setCommentRangeStart(commentRangeStart); - } - - @Override - protected void onCommentRangeEnd(CommentRangeEnd commentRangeEnd) { - CommentWrapper commentWrapper = comments.get(commentRangeEnd.getId()); - if (commentWrapper == null) { - commentWrapper = new CommentWrapper(); - comments.put(commentRangeEnd.getId(), commentWrapper); - } - commentWrapper.setCommentRangeEnd(commentRangeEnd); - } - }; - documentWalker.walk(); - } - - private static void collectComments(final Map comments, - WordprocessingMLPackage document) { - try { - CommentsPart commentsPart = (CommentsPart) document.getParts() - .get(new PartName("/word/comments.xml")); - if (commentsPart != null) { - for (Comments.Comment comment : commentsPart.getContents().getComment()) { - CommentWrapper commentWrapper = comments.get(comment.getId()); - if (commentWrapper != null) { - commentWrapper.setComment(comment); - } - } - } - } - catch (Docx4JException e) { - throw new IllegalStateException(e); - } - } + private static Logger logger = LoggerFactory.getLogger(CommentUtil.class); + + private CommentUtil() { + + } + + /** + * Returns the comment the given DOCX4J run is commented with. + * + * @param run the DOCX4J run whose comment to retrieve. + * @param document the document that contains the run. + * @return the comment, if found, null otherwise. + */ + public static Comments.Comment getCommentAround(R run, + WordprocessingMLPackage document) { + try { + if (run instanceof Child) { + Child child = (Child) run; + ContentAccessor parent = (ContentAccessor) child.getParent(); + if (parent == null) + return null; + CommentRangeStart possibleComment = null; + boolean foundChild = false; + for (Object contentElement : parent.getContent()) { + + // so first we look for the start of the comment + if (XmlUtils.unwrap(contentElement) instanceof CommentRangeStart) { + possibleComment = (CommentRangeStart) contentElement; + } + // then we check if the child we are looking for is ours + else if (possibleComment != null && child.equals(contentElement)) { + foundChild = true; + } + // and then if we have an end of a comment we are good! + else if (possibleComment != null && foundChild && XmlUtils + .unwrap(contentElement) instanceof CommentRangeEnd) { + try { + BigInteger id = possibleComment.getId(); + CommentsPart commentsPart = (CommentsPart) document.getParts() + .get(new PartName("/word/comments.xml")); + Comments comments = commentsPart.getContents(); + for (Comments.Comment comment : comments.getComment()) { + if (comment.getId().equals(id)) { + return comment; + } + } + } catch (InvalidFormatException e) { + logger.warn(String.format( + "Error while searching comment. Skipping run %s.", + run), e); + } + } + // else restart + else { + possibleComment = null; + foundChild = false; + } + } + } + return null; + } catch (Docx4JException e) { + throw new DocxStamperException( + "error accessing the comments of the document!", e); + } + } + + /** + * Returns the first comment found for the given docx object. Note that an object is + * only considered commented if the comment STARTS within the object. Comments + * spanning several objects are not supported by this method. + * + * @param object the object whose comment to load. + * @param document the document in which the object is embedded (needed to load the + * comment from the comments.xml part). + * @return the concatenated string of all paragraphs of text within the comment or + * null if the specified object is not commented. + * @throws Docx4JException in case of a Docx4J processing error. + */ + public static Comments.Comment getCommentFor(ContentAccessor object, + WordprocessingMLPackage document) { + try { + for (Object contentObject : object.getContent()) { + if (contentObject instanceof CommentRangeStart) { + try { + BigInteger id = ((CommentRangeStart) contentObject).getId(); + CommentsPart commentsPart = (CommentsPart) document.getParts() + .get(new PartName("/word/comments.xml")); + Comments comments = commentsPart.getContents(); + for (Comments.Comment comment : comments.getComment()) { + if (comment.getId().equals(id)) { + return comment; + } + } + } catch (InvalidFormatException e) { + logger.warn(String.format( + "Error while searching comment. Skipping object %s.", + object), e); + } + } + } + return null; + } catch (Docx4JException e) { + throw new DocxStamperException( + "error accessing the comments of the document!", e); + } + } + + public static String getCommentStringFor(ContentAccessor object, + WordprocessingMLPackage document) throws Docx4JException { + Comments.Comment comment = getCommentFor(object, document); + return getCommentString(comment); + } + + /** + * Returns the string value of the specified comment object. + */ + public static String getCommentString(Comments.Comment comment) { + StringBuilder builder = new StringBuilder(); + for (Object commentChildObject : comment.getContent()) { + if (commentChildObject instanceof P) { + builder.append(new ParagraphWrapper((P) commentChildObject).getText()); + } + } + return builder.toString(); + } + + public static void deleteComment(CommentWrapper comment) { + if (comment.getCommentRangeEnd() != null) { + ContentAccessor commentRangeEndParent = (ContentAccessor) comment + .getCommentRangeEnd().getParent(); + commentRangeEndParent.getContent().remove(comment.getCommentRangeEnd()); + deleteCommentReference(commentRangeEndParent, + comment.getCommentRangeEnd().getId()); + } + if (comment.getCommentRangeStart() != null) { + ContentAccessor commentRangeStartParent = (ContentAccessor) comment + .getCommentRangeStart().getParent(); + commentRangeStartParent.getContent().remove(comment.getCommentRangeStart()); + deleteCommentReference(commentRangeStartParent, + comment.getCommentRangeStart().getId()); + } + // TODO: also delete comment from comments.xml + } + + private static boolean deleteCommentReference(ContentAccessor parent, + BigInteger commentId) { + for (int i = 0; i < parent.getContent().size(); i++) { + Object contentObject = XmlUtils.unwrap(parent.getContent().get(i)); + if (contentObject instanceof ContentAccessor) { + if (deleteCommentReference((ContentAccessor) contentObject, commentId)) { + return true; + } + } + if (contentObject instanceof R) { + for (Object runContentObject : ((R) contentObject).getContent()) { + Object unwrapped = XmlUtils.unwrap(runContentObject); + if (unwrapped instanceof R.CommentReference) { + BigInteger foundCommentId = ((R.CommentReference) unwrapped) + .getId(); + if (foundCommentId.equals(commentId)) { + parent.getContent().remove(i); + return true; + } + } + } + } + } + return false; + } + + public static Map getComments( + WordprocessingMLPackage document) { + Map comments = new HashMap<>(); + collectCommentRanges(comments, document); + collectComments(comments, document); + return comments; + } + + private static void collectCommentRanges( + final Map comments, + WordprocessingMLPackage document) { + Stack stack = new Stack<>(); + DocumentWalker documentWalker = new BaseDocumentWalker( + document.getMainDocumentPart()) { + @Override + protected void onCommentRangeStart(CommentRangeStart commentRangeStart) { + CommentWrapper commentWrapper = comments.get(commentRangeStart.getId()); + if (commentWrapper == null) { + commentWrapper = new CommentWrapper(); + comments.put(commentRangeStart.getId(), commentWrapper); + if (!stack.isEmpty()) + comments.get(stack.peek()).getChildren().add(commentWrapper); + } + commentWrapper.setCommentRangeStart(commentRangeStart); + stack.push(commentRangeStart.getId()); + } + + @Override + protected void onCommentRangeEnd(CommentRangeEnd commentRangeEnd) { + CommentWrapper commentWrapper = comments.get(commentRangeEnd.getId()); + if (commentWrapper == null) { + throw new RuntimeException("UNEXPECTED !"); + } + commentWrapper.setCommentRangeEnd(commentRangeEnd); + if (!stack.isEmpty() && stack.peek().equals(commentRangeEnd.getId())) + stack.pop(); + } + }; + documentWalker.walk(); + } + + private static void collectComments(final Map comments, + WordprocessingMLPackage document) { + try { + CommentsPart commentsPart = (CommentsPart) document.getParts() + .get(new PartName("/word/comments.xml")); + if (commentsPart != null) { + for (Comments.Comment comment : commentsPart.getContents().getComment()) { + CommentWrapper commentWrapper = comments.get(comment.getId()); + if (commentWrapper != null) { + commentWrapper.setComment(comment); + } + } + } + } catch (Docx4JException e) { + throw new IllegalStateException(e); + } + } } diff --git a/src/main/java/org/wickedsource/docxstamper/util/CommentWrapper.java b/src/main/java/org/wickedsource/docxstamper/util/CommentWrapper.java index 50d0e8fb..3bfde03c 100644 --- a/src/main/java/org/wickedsource/docxstamper/util/CommentWrapper.java +++ b/src/main/java/org/wickedsource/docxstamper/util/CommentWrapper.java @@ -4,6 +4,9 @@ import org.docx4j.wml.CommentRangeStart; import org.docx4j.wml.Comments; +import java.util.HashSet; +import java.util.Set; + public class CommentWrapper { private Comments.Comment comment; @@ -12,6 +15,8 @@ public class CommentWrapper { private CommentRangeEnd commentRangeEnd; + private Set children = new HashSet(); + public CommentWrapper(Comments.Comment comment, CommentRangeStart commentRangeStart, CommentRangeEnd commentRangeEnd) { this.comment = comment; this.commentRangeStart = commentRangeStart; @@ -33,6 +38,10 @@ public CommentRangeEnd getCommentRangeEnd() { return commentRangeEnd; } + public Set getChildren() { + return children; + } + void setComment(Comments.Comment comment) { this.comment = comment; } @@ -44,4 +53,8 @@ void setCommentRangeStart(CommentRangeStart commentRangeStart) { void setCommentRangeEnd(CommentRangeEnd commentRangeEnd) { this.commentRangeEnd = commentRangeEnd; } + + void setChildren(Set children) { + this.children = children; + } } From b49469c1020e8182d98121e11a3404a8ae7d96d9 Mon Sep 17 00:00:00 2001 From: Youssouf Naciri Date: Wed, 17 Aug 2022 11:40:20 +0200 Subject: [PATCH 04/51] added comment on the spot --- .../repeat/RepeatDocPartProcessor.java | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatDocPartProcessor.java b/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatDocPartProcessor.java index 1135859b..c2aab9a5 100644 --- a/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatDocPartProcessor.java +++ b/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatDocPartProcessor.java @@ -7,6 +7,7 @@ import org.wickedsource.docxstamper.api.typeresolver.TypeResolverRegistry; import org.wickedsource.docxstamper.el.ExpressionResolver; import org.wickedsource.docxstamper.processor.BaseCommentProcessor; +import org.wickedsource.docxstamper.processor.CommentProcessorRegistry; import org.wickedsource.docxstamper.replace.PlaceholderReplacer; import org.wickedsource.docxstamper.util.CommentUtil; import org.wickedsource.docxstamper.util.CommentWrapper; @@ -22,10 +23,14 @@ public class RepeatDocPartProcessor extends BaseCommentProcessor implements IRep private Map> partsToRepeat = new HashMap<>(); private PlaceholderReplacer placeholderReplacer; + private CommentProcessorRegistry commentProcessorRegistry; public RepeatDocPartProcessor(TypeResolverRegistry typeResolverRegistry, ExpressionResolver expressionResolver) { this.placeholderReplacer = new PlaceholderReplacer<>(typeResolverRegistry); this.placeholderReplacer.setExpressionResolver(expressionResolver); + + this.commentProcessorRegistry = new CommentProcessorRegistry(this.placeholderReplacer); + this.commentProcessorRegistry.setExpressionResolver(expressionResolver); } @Override @@ -47,12 +52,19 @@ public void commitChanges(WordprocessingMLPackage document) { CommentUtil.deleteComment(commentWrapper); // for deep copy without comment for (final Object expressionContext : expressionContexts) { + for (final CommentWrapper comment : commentWrapper.getChildren()) { + System.out.println(comment); + // TODO : link the comment to the right repeatElement + // and then apply comment resolvers to it + // comment.getCommentRangeStart().parent.parent... -> until matching one of the elements in the list + } + for (final Object element : repeatElements) { Object elClone = XmlUtils.unwrap(XmlUtils.deepCopy(element)); if (elClone instanceof P) { placeholderReplacer.resolveExpressionsForParagraph((P) elClone, expressionContext, document); } else if (elClone instanceof ContentAccessor) { - DocumentWalker walker = new BaseDocumentWalker((ContentAccessor)elClone) { + DocumentWalker walker = new BaseDocumentWalker((ContentAccessor) elClone) { @Override protected void onParagraph(P paragraph) { placeholderReplacer.resolveExpressionsForParagraph(paragraph, expressionContext, document); @@ -75,7 +87,7 @@ public void reset() { private static List getRepeatElements(CommentWrapper commentWrapper, ContentAccessor greatestCommonParent) { List repeatElements = new ArrayList<>(); boolean startFound = false; - for (Object element : greatestCommonParent.getContent()){ + for (Object element : greatestCommonParent.getContent()) { if (!startFound && depthElementSearch(commentWrapper.getCommentRangeStart(), element)) { startFound = true; @@ -108,7 +120,7 @@ private static boolean depthElementSearch(Object searchTarget, Object content) { if (searchTarget.equals(content)) { return true; } else if (content instanceof ContentAccessor) { - for (Object object : ((ContentAccessor)content).getContent()) { + for (Object object : ((ContentAccessor) content).getContent()) { Object unwrappedObject = XmlUtils.unwrap(object); if (searchTarget.equals(unwrappedObject) || depthElementSearch(searchTarget, unwrappedObject)) { From f645379c0bf11d0a655f2dd46866fb6040fefab7 Mon Sep 17 00:00:00 2001 From: Youssouf Naciri Date: Thu, 18 Aug 2022 15:12:45 +0200 Subject: [PATCH 05/51] try implementation of generating a template in memory for the repeatDocPart --- .../repeat/RepeatDocPartProcessor.java | 78 ++++++++++--------- 1 file changed, 40 insertions(+), 38 deletions(-) diff --git a/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatDocPartProcessor.java b/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatDocPartProcessor.java index c2aab9a5..87d4fb80 100644 --- a/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatDocPartProcessor.java +++ b/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatDocPartProcessor.java @@ -11,9 +11,8 @@ import org.wickedsource.docxstamper.replace.PlaceholderReplacer; import org.wickedsource.docxstamper.util.CommentUtil; import org.wickedsource.docxstamper.util.CommentWrapper; -import org.wickedsource.docxstamper.util.walk.BaseDocumentWalker; -import org.wickedsource.docxstamper.util.walk.DocumentWalker; +import java.io.File; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -21,7 +20,9 @@ public class RepeatDocPartProcessor extends BaseCommentProcessor implements IRepeatDocPartProcessor { - private Map> partsToRepeat = new HashMap<>(); + private Map> subContexts = new HashMap<>(); + private Map subTemplates = new HashMap(); + private PlaceholderReplacer placeholderReplacer; private CommentProcessorRegistry commentProcessorRegistry; @@ -34,54 +35,55 @@ public RepeatDocPartProcessor(TypeResolverRegistry typeResolverRegistry, Express } @Override - public void repeatDocPart(List objects) { - partsToRepeat.put(getCurrentCommentWrapper(), objects); + public void repeatDocPart(List contexts) { + CommentWrapper currentCommentWrapper = getCurrentCommentWrapper(); + subContexts.put(currentCommentWrapper, contexts); + subTemplates.put(currentCommentWrapper, extractSubTemplate(currentCommentWrapper)); } @Override public void commitChanges(WordprocessingMLPackage document) { - for (CommentWrapper commentWrapper : partsToRepeat.keySet()) { - List expressionContexts = partsToRepeat.get(commentWrapper); + for (CommentWrapper commentWrapper : subContexts.keySet()) { + List expressionContexts = subContexts.get(commentWrapper); + WordprocessingMLPackage subTemplate = subTemplates.get(commentWrapper); CommentRangeStart start = commentWrapper.getCommentRangeStart(); - ContentAccessor gcp = findGreatestCommonParent(commentWrapper.getCommentRangeEnd(), (ContentAccessor) start.getParent()); - List repeatElements = getRepeatElements(commentWrapper, gcp); - int insertIndex = gcp.getContent().indexOf(repeatElements.stream().findFirst().orElse(null)); + // TODO : generate sub doc and insert content back in the document + } + } - CommentUtil.deleteComment(commentWrapper); // for deep copy without comment + @Override + public void reset() { + subContexts = new HashMap<>(); + subTemplates = new HashMap(); + } - for (final Object expressionContext : expressionContexts) { - for (final CommentWrapper comment : commentWrapper.getChildren()) { - System.out.println(comment); - // TODO : link the comment to the right repeatElement - // and then apply comment resolvers to it - // comment.getCommentRangeStart().parent.parent... -> until matching one of the elements in the list - } + private static WordprocessingMLPackage extractSubTemplate(CommentWrapper commentWrapper) { + CommentRangeStart start = commentWrapper.getCommentRangeStart(); - for (final Object element : repeatElements) { - Object elClone = XmlUtils.unwrap(XmlUtils.deepCopy(element)); - if (elClone instanceof P) { - placeholderReplacer.resolveExpressionsForParagraph((P) elClone, expressionContext, document); - } else if (elClone instanceof ContentAccessor) { - DocumentWalker walker = new BaseDocumentWalker((ContentAccessor) elClone) { - @Override - protected void onParagraph(P paragraph) { - placeholderReplacer.resolveExpressionsForParagraph(paragraph, expressionContext, document); - } - }; - walker.walk(); - } - gcp.getContent().add(insertIndex++, elClone); - } + ContentAccessor gcp = findGreatestCommonParent(commentWrapper.getCommentRangeEnd(), (ContentAccessor) start.getParent()); + List repeatElements = getRepeatElements(commentWrapper, gcp); + CommentUtil.deleteComment(commentWrapper); // for deep copy without comment + + WordprocessingMLPackage document = null; + + try { + document = WordprocessingMLPackage.createPackage(); + document.getMainDocumentPart().getContent().addAll(repeatElements); + List comments = new ArrayList<>(); + for (CommentWrapper wrapper : commentWrapper.getChildren()) { + Comments.Comment comment = wrapper.getComment(); + comments.add(comment); } - gcp.getContent().removeAll(repeatElements); + document.save(new File("temp.docx")); + } catch (Exception e) { + System.out.println(e); } - } - @Override - public void reset() { - partsToRepeat = new HashMap<>(); + // TODO insert child comments in the template + + return document; } private static List getRepeatElements(CommentWrapper commentWrapper, ContentAccessor greatestCommonParent) { From c054ee3e4df6e188dfd8819324811bb51893dd47 Mon Sep 17 00:00:00 2001 From: Youssouf Naciri Date: Thu, 18 Aug 2022 17:54:21 +0200 Subject: [PATCH 06/51] calling docx stamper for subtemplate :) --- .../wickedsource/docxstamper/DocxStamper.java | 238 +++++++++--------- .../repeat/RepeatDocPartProcessor.java | 44 +++- 2 files changed, 150 insertions(+), 132 deletions(-) diff --git a/src/main/java/org/wickedsource/docxstamper/DocxStamper.java b/src/main/java/org/wickedsource/docxstamper/DocxStamper.java index 2da2a6d3..2049ef4f 100644 --- a/src/main/java/org/wickedsource/docxstamper/DocxStamper.java +++ b/src/main/java/org/wickedsource/docxstamper/DocxStamper.java @@ -34,138 +34,138 @@ */ public class DocxStamper { - private PlaceholderReplacer placeholderReplacer; + private PlaceholderReplacer placeholderReplacer; - private CommentProcessorRegistry commentProcessorRegistry; + private CommentProcessorRegistry commentProcessorRegistry; - private TypeResolverRegistry typeResolverRegistry; + private TypeResolverRegistry typeResolverRegistry; - private DocxStamperConfiguration config = new DocxStamperConfiguration(); + private DocxStamperConfiguration config = new DocxStamperConfiguration(); - public DocxStamper() { - initFields(); - } - - public DocxStamper(DocxStamperConfiguration config) { - this.config = config; - initFields(); - } - - private void initFields() { - typeResolverRegistry = new TypeResolverRegistry(new FallbackResolver()); - typeResolverRegistry.registerTypeResolver(Image.class, new ImageResolver()); - typeResolverRegistry.registerTypeResolver(Date.class, new DateResolver("dd.MM.yyyy")); - for (Map.Entry, ITypeResolver> entry : config.getTypeResolvers().entrySet()) { - typeResolverRegistry.registerTypeResolver(entry.getKey(), entry.getValue()); + public DocxStamper() { + initFields(); } - ExpressionResolver expressionResolver = new ExpressionResolver(config.getEvaluationContextConfigurer()); - placeholderReplacer = new PlaceholderReplacer<>(typeResolverRegistry, config.getLineBreakPlaceholder()); - placeholderReplacer.setExpressionResolver(expressionResolver); - placeholderReplacer.setLeaveEmptyOnExpressionError(config.isLeaveEmptyOnExpressionError()); - placeholderReplacer.setReplaceNullValues(config.isReplaceNullValues()); - - commentProcessorRegistry = new CommentProcessorRegistry(placeholderReplacer); - commentProcessorRegistry.setExpressionResolver(expressionResolver); - commentProcessorRegistry.setFailOnInvalidExpression(config.isFailOnUnresolvedExpression()); - commentProcessorRegistry.registerCommentProcessor(IRepeatProcessor.class, new RepeatProcessor(typeResolverRegistry, expressionResolver)); - commentProcessorRegistry.registerCommentProcessor(IParagraphRepeatProcessor.class, new ParagraphRepeatProcessor(typeResolverRegistry, expressionResolver)); - commentProcessorRegistry.registerCommentProcessor(IRepeatDocPartProcessor.class, new RepeatDocPartProcessor(typeResolverRegistry, expressionResolver)); - commentProcessorRegistry.registerCommentProcessor(IDisplayIfProcessor.class, new DisplayIfProcessor()); - commentProcessorRegistry.registerCommentProcessor(IReplaceWithProcessor.class, - new ReplaceWithProcessor()); - for (Map.Entry, ICommentProcessor> entry : config.getCommentProcessors().entrySet()) { - commentProcessorRegistry.registerCommentProcessor(entry.getKey(), entry.getValue()); + public DocxStamper(DocxStamperConfiguration config) { + this.config = config; + initFields(); } - } - - /** - *

- * Reads in a .docx template and "stamps" it into the given OutputStream, using the specified context object to - * fill out any expressions it finds. - *

- *

- * In the .docx template you have the following options to influence the "stamping" process: - *

- *
    - *
  • Use expressions like ${name} or ${person.isOlderThan(18)} in the template's text. These expressions are resolved - * against the contextRoot object you pass into this method and are replaced by the results.
  • - *
  • Use comments within the .docx template to mark certain paragraphs to be manipulated.
  • - *
- *

- * Within comments, you can put expressions in which you can use the following methods by default: - *

- *
    - *
  • displayParagraphIf(boolean) to conditionally display paragraphs or not
  • - *
  • displayTableRowIf(boolean) to conditionally display table rows or not
  • - *
  • displayTableIf(boolean) to conditionally display whole tables or not
  • - *
  • repeatTableRow(List<Object>) to create a new table row for each object in the list and resolve expressions - * within the table cells against one of the objects within the list.
  • - *
- *

- * If you need a wider vocabulary of methods available in the comments, you can create your own ICommentProcessor - * and register it via getCommentProcessorRegistry().addCommentProcessor(). - *

- * - * @param template the .docx template. - * @param contextRoot the context root object against which all expressions found in the template are evaluated. - * @param out the output stream in which to write the resulting .docx document. - * @throws DocxStamperException in case of an error. - */ - public void stamp(InputStream template, T contextRoot, OutputStream out) throws DocxStamperException { - try { - WordprocessingMLPackage document = WordprocessingMLPackage.load(template); - stamp(document, contextRoot, out); - } catch (DocxStamperException e) { - throw e; - } catch (Exception e) { - throw new DocxStamperException(e); + + private void initFields() { + typeResolverRegistry = new TypeResolverRegistry(new FallbackResolver()); + typeResolverRegistry.registerTypeResolver(Image.class, new ImageResolver()); + typeResolverRegistry.registerTypeResolver(Date.class, new DateResolver("dd.MM.yyyy")); + for (Map.Entry, ITypeResolver> entry : config.getTypeResolvers().entrySet()) { + typeResolverRegistry.registerTypeResolver(entry.getKey(), entry.getValue()); + } + + ExpressionResolver expressionResolver = new ExpressionResolver(config.getEvaluationContextConfigurer()); + placeholderReplacer = new PlaceholderReplacer<>(typeResolverRegistry, config.getLineBreakPlaceholder()); + placeholderReplacer.setExpressionResolver(expressionResolver); + placeholderReplacer.setLeaveEmptyOnExpressionError(config.isLeaveEmptyOnExpressionError()); + placeholderReplacer.setReplaceNullValues(config.isReplaceNullValues()); + + commentProcessorRegistry = new CommentProcessorRegistry(placeholderReplacer); + commentProcessorRegistry.setExpressionResolver(expressionResolver); + commentProcessorRegistry.setFailOnInvalidExpression(config.isFailOnUnresolvedExpression()); + commentProcessorRegistry.registerCommentProcessor(IRepeatProcessor.class, new RepeatProcessor(typeResolverRegistry, expressionResolver)); + commentProcessorRegistry.registerCommentProcessor(IParagraphRepeatProcessor.class, new ParagraphRepeatProcessor(typeResolverRegistry, expressionResolver)); + commentProcessorRegistry.registerCommentProcessor(IRepeatDocPartProcessor.class, new RepeatDocPartProcessor(typeResolverRegistry, expressionResolver, config)); + commentProcessorRegistry.registerCommentProcessor(IDisplayIfProcessor.class, new DisplayIfProcessor()); + commentProcessorRegistry.registerCommentProcessor(IReplaceWithProcessor.class, + new ReplaceWithProcessor()); + for (Map.Entry, ICommentProcessor> entry : config.getCommentProcessors().entrySet()) { + commentProcessorRegistry.registerCommentProcessor(entry.getKey(), entry.getValue()); + } } - } - - /** - * Same as stamp(InputStream, T, OutputStream) except that you may pass in a DOCX4J document as a template instead - * of an InputStream. - * - * @param document the .docx template. - * @param contextRoot the context root object against which all expressions found in the template are evaluated. - * @param out the output stream in which to write the resulting .docx document. - * @throws DocxStamperException in case of an error. - */ - public void stamp(WordprocessingMLPackage document, T contextRoot, OutputStream out) throws DocxStamperException { - try { - ProxyBuilder proxyBuilder = addCustomInterfacesToContextRoot(contextRoot, this.config.getExpressionFunctions()); - processComments(document, proxyBuilder); - replaceExpressions(document, proxyBuilder); - document.save(out); - commentProcessorRegistry.reset(); - } catch (DocxStamperException e) { - throw e; - } catch (Exception e) { - throw new DocxStamperException(e); + + /** + *

+ * Reads in a .docx template and "stamps" it into the given OutputStream, using the specified context object to + * fill out any expressions it finds. + *

+ *

+ * In the .docx template you have the following options to influence the "stamping" process: + *

+ *
    + *
  • Use expressions like ${name} or ${person.isOlderThan(18)} in the template's text. These expressions are resolved + * against the contextRoot object you pass into this method and are replaced by the results.
  • + *
  • Use comments within the .docx template to mark certain paragraphs to be manipulated.
  • + *
+ *

+ * Within comments, you can put expressions in which you can use the following methods by default: + *

+ *
    + *
  • displayParagraphIf(boolean) to conditionally display paragraphs or not
  • + *
  • displayTableRowIf(boolean) to conditionally display table rows or not
  • + *
  • displayTableIf(boolean) to conditionally display whole tables or not
  • + *
  • repeatTableRow(List<Object>) to create a new table row for each object in the list and resolve expressions + * within the table cells against one of the objects within the list.
  • + *
+ *

+ * If you need a wider vocabulary of methods available in the comments, you can create your own ICommentProcessor + * and register it via getCommentProcessorRegistry().addCommentProcessor(). + *

+ * + * @param template the .docx template. + * @param contextRoot the context root object against which all expressions found in the template are evaluated. + * @param out the output stream in which to write the resulting .docx document. + * @throws DocxStamperException in case of an error. + */ + public void stamp(InputStream template, T contextRoot, OutputStream out) throws DocxStamperException { + try { + WordprocessingMLPackage document = WordprocessingMLPackage.load(template); + stamp(document, contextRoot, out); + } catch (DocxStamperException e) { + throw e; + } catch (Exception e) { + throw new DocxStamperException(e); + } } - } - private ProxyBuilder addCustomInterfacesToContextRoot(T contextRoot, Map, Object> interfacesToImplementations) { - ProxyBuilder proxyBuilder = new ProxyBuilder() - .withRoot(contextRoot); - if (interfacesToImplementations.isEmpty()) { - return proxyBuilder; + /** + * Same as stamp(InputStream, T, OutputStream) except that you may pass in a DOCX4J document as a template instead + * of an InputStream. + * + * @param document the .docx template. + * @param contextRoot the context root object against which all expressions found in the template are evaluated. + * @param out the output stream in which to write the resulting .docx document. + * @throws DocxStamperException in case of an error. + */ + public void stamp(WordprocessingMLPackage document, T contextRoot, OutputStream out) throws DocxStamperException { + try { + ProxyBuilder proxyBuilder = addCustomInterfacesToContextRoot(contextRoot, this.config.getExpressionFunctions()); + processComments(document, proxyBuilder); + replaceExpressions(document, proxyBuilder); + document.save(out); + commentProcessorRegistry.reset(); + } catch (DocxStamperException e) { + throw e; + } catch (Exception e) { + throw new DocxStamperException(e); + } } - for (Map.Entry, Object> entry : interfacesToImplementations.entrySet()) { - Class interfaceClass = entry.getKey(); - Object implementation = entry.getValue(); - proxyBuilder.withInterface(interfaceClass, implementation); + + private ProxyBuilder addCustomInterfacesToContextRoot(T contextRoot, Map, Object> interfacesToImplementations) { + ProxyBuilder proxyBuilder = new ProxyBuilder() + .withRoot(contextRoot); + if (interfacesToImplementations.isEmpty()) { + return proxyBuilder; + } + for (Map.Entry, Object> entry : interfacesToImplementations.entrySet()) { + Class interfaceClass = entry.getKey(); + Object implementation = entry.getValue(); + proxyBuilder.withInterface(interfaceClass, implementation); + } + return proxyBuilder; } - return proxyBuilder; - } - private void replaceExpressions(WordprocessingMLPackage document, ProxyBuilder proxyBuilder) { - placeholderReplacer.resolveExpressions(document, proxyBuilder); - } + private void replaceExpressions(WordprocessingMLPackage document, ProxyBuilder proxyBuilder) { + placeholderReplacer.resolveExpressions(document, proxyBuilder); + } - private void processComments(final WordprocessingMLPackage document, ProxyBuilder proxyBuilder) { - commentProcessorRegistry.runProcessors(document, proxyBuilder); - } + private void processComments(final WordprocessingMLPackage document, ProxyBuilder proxyBuilder) { + commentProcessorRegistry.runProcessors(document, proxyBuilder); + } } diff --git a/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatDocPartProcessor.java b/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatDocPartProcessor.java index 87d4fb80..ccd3b6ca 100644 --- a/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatDocPartProcessor.java +++ b/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatDocPartProcessor.java @@ -1,9 +1,12 @@ package org.wickedsource.docxstamper.processor.repeat; import org.docx4j.XmlUtils; +import org.docx4j.jaxb.Context; import org.docx4j.openpackaging.packages.WordprocessingMLPackage; import org.docx4j.wml.*; import org.jvnet.jaxb2_commons.ppp.Child; +import org.wickedsource.docxstamper.DocxStamper; +import org.wickedsource.docxstamper.DocxStamperConfiguration; import org.wickedsource.docxstamper.api.typeresolver.TypeResolverRegistry; import org.wickedsource.docxstamper.el.ExpressionResolver; import org.wickedsource.docxstamper.processor.BaseCommentProcessor; @@ -12,6 +15,8 @@ import org.wickedsource.docxstamper.util.CommentUtil; import org.wickedsource.docxstamper.util.CommentWrapper; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; import java.io.File; import java.util.ArrayList; import java.util.HashMap; @@ -20,13 +25,21 @@ public class RepeatDocPartProcessor extends BaseCommentProcessor implements IRepeatDocPartProcessor { + private final DocxStamperConfiguration config; + private Map> subContexts = new HashMap<>(); private Map subTemplates = new HashMap(); - private PlaceholderReplacer placeholderReplacer; - private CommentProcessorRegistry commentProcessorRegistry; + private final PlaceholderReplacer placeholderReplacer; + private final CommentProcessorRegistry commentProcessorRegistry; + + private final ObjectFactory objectFactory; + + public RepeatDocPartProcessor(TypeResolverRegistry typeResolverRegistry, ExpressionResolver expressionResolver, DocxStamperConfiguration config) { + this.config = config; + + this.objectFactory = Context.getWmlObjectFactory(); - public RepeatDocPartProcessor(TypeResolverRegistry typeResolverRegistry, ExpressionResolver expressionResolver) { this.placeholderReplacer = new PlaceholderReplacer<>(typeResolverRegistry); this.placeholderReplacer.setExpressionResolver(expressionResolver); @@ -43,13 +56,25 @@ public void repeatDocPart(List contexts) { @Override public void commitChanges(WordprocessingMLPackage document) { + int count = 0; + for (CommentWrapper commentWrapper : subContexts.keySet()) { List expressionContexts = subContexts.get(commentWrapper); WordprocessingMLPackage subTemplate = subTemplates.get(commentWrapper); - CommentRangeStart start = commentWrapper.getCommentRangeStart(); - - // TODO : generate sub doc and insert content back in the document + for (Object subContext : expressionContexts) { + // TODO : generate sub doc and insert content back in the document + DocxStamper stamper = new DocxStamper<>(config); + ByteArrayOutputStream output = new ByteArrayOutputStream(); + stamper.stamp(subTemplate, subContext, output); + try { + WordprocessingMLPackage subDocument = WordprocessingMLPackage.load(new ByteArrayInputStream(output.toByteArray())); + subDocument.save(new File("subdoc-" + count + ".docx")); + } catch (Exception e) { + System.out.println(e); + } + count++; + } } } @@ -71,18 +96,11 @@ private static WordprocessingMLPackage extractSubTemplate(CommentWrapper comment try { document = WordprocessingMLPackage.createPackage(); document.getMainDocumentPart().getContent().addAll(repeatElements); - List comments = new ArrayList<>(); - for (CommentWrapper wrapper : commentWrapper.getChildren()) { - Comments.Comment comment = wrapper.getComment(); - comments.add(comment); - } document.save(new File("temp.docx")); } catch (Exception e) { System.out.println(e); } - // TODO insert child comments in the template - return document; } From 99ebbe41b683144357fc84ce89d814b8fb58fc18 Mon Sep 17 00:00:00 2001 From: Youssouf Naciri Date: Thu, 18 Aug 2022 18:07:44 +0200 Subject: [PATCH 07/51] accumulating generated sub documents to commit everything at once --- .../docxstamper/processor/repeat/RepeatDocPartProcessor.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatDocPartProcessor.java b/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatDocPartProcessor.java index ccd3b6ca..c989ff27 100644 --- a/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatDocPartProcessor.java +++ b/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatDocPartProcessor.java @@ -58,23 +58,26 @@ public void repeatDocPart(List contexts) { public void commitChanges(WordprocessingMLPackage document) { int count = 0; + List changes = new ArrayList<>(); + for (CommentWrapper commentWrapper : subContexts.keySet()) { List expressionContexts = subContexts.get(commentWrapper); WordprocessingMLPackage subTemplate = subTemplates.get(commentWrapper); for (Object subContext : expressionContexts) { - // TODO : generate sub doc and insert content back in the document DocxStamper stamper = new DocxStamper<>(config); ByteArrayOutputStream output = new ByteArrayOutputStream(); stamper.stamp(subTemplate, subContext, output); try { WordprocessingMLPackage subDocument = WordprocessingMLPackage.load(new ByteArrayInputStream(output.toByteArray())); + changes.addAll(subDocument.getMainDocumentPart().getContent()); subDocument.save(new File("subdoc-" + count + ".docx")); } catch (Exception e) { System.out.println(e); } count++; } + // TODO : insert changes back in the document in the right place and remove comment } } From 5230c6010cc44b3092785c5f2a338aaae504fee2 Mon Sep 17 00:00:00 2001 From: Youssouf Naciri Date: Fri, 19 Aug 2022 11:25:55 +0200 Subject: [PATCH 08/51] fixed comments not inserted in submemo --- .../processor/repeat/RepeatDocPartProcessor.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatDocPartProcessor.java b/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatDocPartProcessor.java index c989ff27..82e4e44e 100644 --- a/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatDocPartProcessor.java +++ b/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatDocPartProcessor.java @@ -3,6 +3,7 @@ import org.docx4j.XmlUtils; import org.docx4j.jaxb.Context; import org.docx4j.openpackaging.packages.WordprocessingMLPackage; +import org.docx4j.openpackaging.parts.WordprocessingML.CommentsPart; import org.docx4j.wml.*; import org.jvnet.jaxb2_commons.ppp.Child; import org.wickedsource.docxstamper.DocxStamper; @@ -87,7 +88,7 @@ public void reset() { subTemplates = new HashMap(); } - private static WordprocessingMLPackage extractSubTemplate(CommentWrapper commentWrapper) { + private WordprocessingMLPackage extractSubTemplate(CommentWrapper commentWrapper) { CommentRangeStart start = commentWrapper.getCommentRangeStart(); ContentAccessor gcp = findGreatestCommonParent(commentWrapper.getCommentRangeEnd(), (ContentAccessor) start.getParent()); @@ -98,7 +99,15 @@ private static WordprocessingMLPackage extractSubTemplate(CommentWrapper comment try { document = WordprocessingMLPackage.createPackage(); + CommentsPart commentsPart = new CommentsPart(); + document.getMainDocumentPart().addTargetPart(commentsPart); + document.getMainDocumentPart().getContent().addAll(repeatElements); + + Comments comments = objectFactory.createComments(); + commentWrapper.getChildren().forEach(comment -> comments.getComment().add(comment.getComment())); + commentsPart.setContents(comments); + document.save(new File("temp.docx")); } catch (Exception e) { System.out.println(e); From 758c46a575e2aa9a1e8f674c9ba056423553bd6c Mon Sep 17 00:00:00 2001 From: Youssouf Naciri Date: Fri, 19 Aug 2022 11:31:47 +0200 Subject: [PATCH 09/51] removed orphan commentrangeend in repeatElements --- .../docxstamper/processor/repeat/RepeatDocPartProcessor.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatDocPartProcessor.java b/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatDocPartProcessor.java index 82e4e44e..21deb666 100644 --- a/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatDocPartProcessor.java +++ b/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatDocPartProcessor.java @@ -125,11 +125,10 @@ && depthElementSearch(commentWrapper.getCommentRangeStart(), element)) { startFound = true; } if (startFound) { - repeatElements.add(element); - if (depthElementSearch(commentWrapper.getCommentRangeEnd(), element)) { break; } + repeatElements.add(element); } } return repeatElements; From 01fd35609bd7932814e693a29f26920a17955d92 Mon Sep 17 00:00:00 2001 From: Youssouf Naciri Date: Fri, 19 Aug 2022 11:57:11 +0200 Subject: [PATCH 10/51] try inserting generated submemos --- .../repeat/RepeatDocPartProcessor.java | 36 +++++++++++++------ 1 file changed, 26 insertions(+), 10 deletions(-) diff --git a/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatDocPartProcessor.java b/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatDocPartProcessor.java index 21deb666..ccd94b71 100644 --- a/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatDocPartProcessor.java +++ b/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatDocPartProcessor.java @@ -30,6 +30,7 @@ public class RepeatDocPartProcessor extends BaseCommentProcessor implements IRep private Map> subContexts = new HashMap<>(); private Map subTemplates = new HashMap(); + private Map insertIndex = new HashMap<>(); private final PlaceholderReplacer placeholderReplacer; private final CommentProcessorRegistry commentProcessorRegistry; @@ -51,20 +52,24 @@ public RepeatDocPartProcessor(TypeResolverRegistry typeResolverRegistry, Express @Override public void repeatDocPart(List contexts) { CommentWrapper currentCommentWrapper = getCurrentCommentWrapper(); + ContentAccessor gcp = findGreatestCommonParent(currentCommentWrapper.getCommentRangeEnd(), (ContentAccessor) currentCommentWrapper.getCommentRangeStart().getParent()); + List repeatElements = getRepeatElements(currentCommentWrapper, gcp); + subContexts.put(currentCommentWrapper, contexts); - subTemplates.put(currentCommentWrapper, extractSubTemplate(currentCommentWrapper)); + insertIndex.put(currentCommentWrapper, gcp.getContent().indexOf(repeatElements.stream().findFirst().orElse(null))); + subTemplates.put(currentCommentWrapper, extractSubTemplate(currentCommentWrapper, repeatElements)); } @Override public void commitChanges(WordprocessingMLPackage document) { int count = 0; - List changes = new ArrayList<>(); - for (CommentWrapper commentWrapper : subContexts.keySet()) { List expressionContexts = subContexts.get(commentWrapper); WordprocessingMLPackage subTemplate = subTemplates.get(commentWrapper); + List changes = new ArrayList<>(); + for (Object subContext : expressionContexts) { DocxStamper stamper = new DocxStamper<>(config); ByteArrayOutputStream output = new ByteArrayOutputStream(); @@ -78,21 +83,21 @@ public void commitChanges(WordprocessingMLPackage document) { } count++; } - // TODO : insert changes back in the document in the right place and remove comment + + // TODO debug this part + ContentAccessor gcp = findInsertableParent((ContentAccessor) commentWrapper.getCommentRangeStart().getParent()); + gcp.getContent().addAll(changes); } } @Override public void reset() { subContexts = new HashMap<>(); - subTemplates = new HashMap(); + subTemplates = new HashMap<>(); + insertIndex = new HashMap<>(); } - private WordprocessingMLPackage extractSubTemplate(CommentWrapper commentWrapper) { - CommentRangeStart start = commentWrapper.getCommentRangeStart(); - - ContentAccessor gcp = findGreatestCommonParent(commentWrapper.getCommentRangeEnd(), (ContentAccessor) start.getParent()); - List repeatElements = getRepeatElements(commentWrapper, gcp); + private WordprocessingMLPackage extractSubTemplate(CommentWrapper commentWrapper, List repeatElements) { CommentUtil.deleteComment(commentWrapper); // for deep copy without comment WordprocessingMLPackage document = null; @@ -134,6 +139,17 @@ && depthElementSearch(commentWrapper.getCommentRangeStart(), element)) { return repeatElements; } + private static ContentAccessor findInsertableParent(ContentAccessor searchFrom) { + if (searchFrom instanceof Tr) { // if it's Tr - need add new line to table + return (ContentAccessor) ((Tr) searchFrom).getParent(); + } else if (searchFrom instanceof Tc) { // if it's Tc - need add new cell to row + return (ContentAccessor) ((Tc) searchFrom).getParent(); + } else if (searchFrom instanceof P) { + return (ContentAccessor) ((P) searchFrom).getParent(); + } + return findInsertableParent((ContentAccessor) ((Child) searchFrom).getParent()); + } + private static ContentAccessor findGreatestCommonParent(Object targetSearch, ContentAccessor searchFrom) { if (depthElementSearch(targetSearch, searchFrom)) { if (searchFrom instanceof Tr) { // if it's Tr - need add new line to table From acd7bdea15de9a1c587014867c3208c01211bcd0 Mon Sep 17 00:00:00 2001 From: Youssouf Naciri Date: Fri, 19 Aug 2022 12:03:32 +0200 Subject: [PATCH 11/51] try copying sub template before stamping --- .../processor/repeat/RepeatDocPartProcessor.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatDocPartProcessor.java b/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatDocPartProcessor.java index ccd94b71..9beab5fc 100644 --- a/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatDocPartProcessor.java +++ b/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatDocPartProcessor.java @@ -60,13 +60,24 @@ public void repeatDocPart(List contexts) { subTemplates.put(currentCommentWrapper, extractSubTemplate(currentCommentWrapper, repeatElements)); } + private WordprocessingMLPackage copyTemplate(WordprocessingMLPackage doc) { + try { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + doc.save(baos); + return WordprocessingMLPackage.load(new ByteArrayInputStream(baos.toByteArray())); + } catch (Exception e) { + System.out.println(e); + return null; + } + } + @Override public void commitChanges(WordprocessingMLPackage document) { int count = 0; for (CommentWrapper commentWrapper : subContexts.keySet()) { List expressionContexts = subContexts.get(commentWrapper); - WordprocessingMLPackage subTemplate = subTemplates.get(commentWrapper); + WordprocessingMLPackage subTemplate = copyTemplate(subTemplates.get(commentWrapper)); List changes = new ArrayList<>(); From 005b634ab86cf0a4dc6389466e539ffeeb710b68 Mon Sep 17 00:00:00 2001 From: Youssouf Naciri Date: Fri, 19 Aug 2022 14:52:38 +0200 Subject: [PATCH 12/51] fixed some bugs --- .../repeat/RepeatDocPartProcessor.java | 30 ++++++------- .../docxstamper/util/CommentUtil.java | 43 +++++++++++-------- 2 files changed, 41 insertions(+), 32 deletions(-) diff --git a/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatDocPartProcessor.java b/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatDocPartProcessor.java index 9beab5fc..015ae103 100644 --- a/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatDocPartProcessor.java +++ b/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatDocPartProcessor.java @@ -37,6 +37,8 @@ public class RepeatDocPartProcessor extends BaseCommentProcessor implements IRep private final ObjectFactory objectFactory; + int count = 0; + public RepeatDocPartProcessor(TypeResolverRegistry typeResolverRegistry, ExpressionResolver expressionResolver, DocxStamperConfiguration config) { this.config = config; @@ -73,19 +75,17 @@ private WordprocessingMLPackage copyTemplate(WordprocessingMLPackage doc) { @Override public void commitChanges(WordprocessingMLPackage document) { - int count = 0; - for (CommentWrapper commentWrapper : subContexts.keySet()) { List expressionContexts = subContexts.get(commentWrapper); - WordprocessingMLPackage subTemplate = copyTemplate(subTemplates.get(commentWrapper)); List changes = new ArrayList<>(); - for (Object subContext : expressionContexts) { - DocxStamper stamper = new DocxStamper<>(config); - ByteArrayOutputStream output = new ByteArrayOutputStream(); - stamper.stamp(subTemplate, subContext, output); + expressionContexts.forEach(subContext -> { try { + WordprocessingMLPackage subTemplate = copyTemplate(subTemplates.get(commentWrapper)); + DocxStamper stamper = new DocxStamper<>(config); + ByteArrayOutputStream output = new ByteArrayOutputStream(); + stamper.stamp(subTemplate, subContext, output); WordprocessingMLPackage subDocument = WordprocessingMLPackage.load(new ByteArrayInputStream(output.toByteArray())); changes.addAll(subDocument.getMainDocumentPart().getContent()); subDocument.save(new File("subdoc-" + count + ".docx")); @@ -93,11 +93,13 @@ public void commitChanges(WordprocessingMLPackage document) { System.out.println(e); } count++; - } + }); // TODO debug this part - ContentAccessor gcp = findInsertableParent((ContentAccessor) commentWrapper.getCommentRangeStart().getParent()); - gcp.getContent().addAll(changes); + if (!changes.isEmpty()) { + ContentAccessor gcp = findInsertableParent((ContentAccessor) commentWrapper.getCommentRangeStart().getParent()); + gcp.getContent().addAll(changes); + } } } @@ -151,12 +153,10 @@ && depthElementSearch(commentWrapper.getCommentRangeStart(), element)) { } private static ContentAccessor findInsertableParent(ContentAccessor searchFrom) { - if (searchFrom instanceof Tr) { // if it's Tr - need add new line to table - return (ContentAccessor) ((Tr) searchFrom).getParent(); - } else if (searchFrom instanceof Tc) { // if it's Tc - need add new cell to row - return (ContentAccessor) ((Tc) searchFrom).getParent(); + if (searchFrom instanceof Tc) { // if it's Tc - need add new cell to row + return searchFrom; } else if (searchFrom instanceof P) { - return (ContentAccessor) ((P) searchFrom).getParent(); + return searchFrom; } return findInsertableParent((ContentAccessor) ((Child) searchFrom).getParent()); } diff --git a/src/main/java/org/wickedsource/docxstamper/util/CommentUtil.java b/src/main/java/org/wickedsource/docxstamper/util/CommentUtil.java index 89b3ac6f..53854b36 100644 --- a/src/main/java/org/wickedsource/docxstamper/util/CommentUtil.java +++ b/src/main/java/org/wickedsource/docxstamper/util/CommentUtil.java @@ -193,53 +193,62 @@ private static boolean deleteCommentReference(ContentAccessor parent, public static Map getComments( WordprocessingMLPackage document) { - Map comments = new HashMap<>(); - collectCommentRanges(comments, document); - collectComments(comments, document); - return comments; + Map rootComments = new HashMap<>(); + Map allComments = new HashMap<>(); + collectCommentRanges(rootComments, allComments, document); + collectComments(rootComments, allComments, document); + return rootComments; } private static void collectCommentRanges( - final Map comments, + Map rootComments, final Map allComments, WordprocessingMLPackage document) { - Stack stack = new Stack<>(); + Stack stack = new Stack<>(); DocumentWalker documentWalker = new BaseDocumentWalker( document.getMainDocumentPart()) { @Override protected void onCommentRangeStart(CommentRangeStart commentRangeStart) { - CommentWrapper commentWrapper = comments.get(commentRangeStart.getId()); + CommentWrapper commentWrapper = allComments.get(commentRangeStart.getId()); if (commentWrapper == null) { commentWrapper = new CommentWrapper(); - comments.put(commentRangeStart.getId(), commentWrapper); - if (!stack.isEmpty()) - comments.get(stack.peek()).getChildren().add(commentWrapper); + allComments.put(commentRangeStart.getId(), commentWrapper); + if (stack.isEmpty()) { + rootComments.put(commentRangeStart.getId(), commentWrapper); + } else { + stack.peek().getChildren().add(commentWrapper); + } } commentWrapper.setCommentRangeStart(commentRangeStart); - stack.push(commentRangeStart.getId()); + stack.push(commentWrapper); } @Override protected void onCommentRangeEnd(CommentRangeEnd commentRangeEnd) { - CommentWrapper commentWrapper = comments.get(commentRangeEnd.getId()); + CommentWrapper commentWrapper = allComments.get(commentRangeEnd.getId()); if (commentWrapper == null) { throw new RuntimeException("UNEXPECTED !"); } commentWrapper.setCommentRangeEnd(commentRangeEnd); - if (!stack.isEmpty() && stack.peek().equals(commentRangeEnd.getId())) - stack.pop(); + if (!stack.isEmpty()) { + if (stack.peek().equals(commentWrapper)) { + stack.pop(); + } else { + throw new RuntimeException("UNEXPECTED 2 !"); + } + } } }; documentWalker.walk(); } - private static void collectComments(final Map comments, - WordprocessingMLPackage document) { + private static void collectComments(final Map rootComments, + Map allComments, WordprocessingMLPackage document) { try { CommentsPart commentsPart = (CommentsPart) document.getParts() .get(new PartName("/word/comments.xml")); if (commentsPart != null) { for (Comments.Comment comment : commentsPart.getContents().getComment()) { - CommentWrapper commentWrapper = comments.get(comment.getId()); + CommentWrapper commentWrapper = allComments.get(comment.getId()); if (commentWrapper != null) { commentWrapper.setComment(comment); } From dba69607468073763ddc550d53eeae338bd00c8b Mon Sep 17 00:00:00 2001 From: Youssouf Naciri Date: Fri, 19 Aug 2022 14:54:57 +0200 Subject: [PATCH 13/51] removed P as insertable parent --- .../docxstamper/processor/repeat/RepeatDocPartProcessor.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatDocPartProcessor.java b/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatDocPartProcessor.java index 015ae103..b55d1dc5 100644 --- a/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatDocPartProcessor.java +++ b/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatDocPartProcessor.java @@ -155,8 +155,6 @@ && depthElementSearch(commentWrapper.getCommentRangeStart(), element)) { private static ContentAccessor findInsertableParent(ContentAccessor searchFrom) { if (searchFrom instanceof Tc) { // if it's Tc - need add new cell to row return searchFrom; - } else if (searchFrom instanceof P) { - return searchFrom; } return findInsertableParent((ContentAccessor) ((Child) searchFrom).getParent()); } From 4fb6d329db6349775708fa3e66f3bbcb43b869ad Mon Sep 17 00:00:00 2001 From: Youssouf Naciri Date: Fri, 19 Aug 2022 16:59:17 +0200 Subject: [PATCH 14/51] debugged the whole thing --- .../repeat/RepeatDocPartProcessor.java | 52 ++++++++++--------- 1 file changed, 28 insertions(+), 24 deletions(-) diff --git a/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatDocPartProcessor.java b/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatDocPartProcessor.java index b55d1dc5..68ddc5c2 100644 --- a/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatDocPartProcessor.java +++ b/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatDocPartProcessor.java @@ -18,7 +18,6 @@ import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; -import java.io.File; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -29,7 +28,9 @@ public class RepeatDocPartProcessor extends BaseCommentProcessor implements IRep private final DocxStamperConfiguration config; private Map> subContexts = new HashMap<>(); + private Map> repeatElementsMap = new HashMap<>(); private Map subTemplates = new HashMap(); + private Map gcpMap = new HashMap<>(); private Map insertIndex = new HashMap<>(); private final PlaceholderReplacer placeholderReplacer; @@ -54,12 +55,19 @@ public RepeatDocPartProcessor(TypeResolverRegistry typeResolverRegistry, Express @Override public void repeatDocPart(List contexts) { CommentWrapper currentCommentWrapper = getCurrentCommentWrapper(); - ContentAccessor gcp = findGreatestCommonParent(currentCommentWrapper.getCommentRangeEnd(), (ContentAccessor) currentCommentWrapper.getCommentRangeStart().getParent()); + ContentAccessor gcp = findGreatestCommonParent( + currentCommentWrapper.getCommentRangeEnd().getParent(), + (ContentAccessor) currentCommentWrapper.getCommentRangeStart().getParent() + ); List repeatElements = getRepeatElements(currentCommentWrapper, gcp); - subContexts.put(currentCommentWrapper, contexts); - insertIndex.put(currentCommentWrapper, gcp.getContent().indexOf(repeatElements.stream().findFirst().orElse(null))); - subTemplates.put(currentCommentWrapper, extractSubTemplate(currentCommentWrapper, repeatElements)); + if (repeatElements.size() > 0) { + subContexts.put(currentCommentWrapper, contexts); + subTemplates.put(currentCommentWrapper, extractSubTemplate(currentCommentWrapper, repeatElements)); + gcpMap.put(currentCommentWrapper, gcp); + insertIndex.put(currentCommentWrapper, gcp.getContent().indexOf(repeatElements.get(0))); + repeatElementsMap.put(currentCommentWrapper, repeatElements); + } } private WordprocessingMLPackage copyTemplate(WordprocessingMLPackage doc) { @@ -80,6 +88,8 @@ public void commitChanges(WordprocessingMLPackage document) { List changes = new ArrayList<>(); + Integer index = insertIndex.get(commentWrapper); + expressionContexts.forEach(subContext -> { try { WordprocessingMLPackage subTemplate = copyTemplate(subTemplates.get(commentWrapper)); @@ -88,17 +98,17 @@ public void commitChanges(WordprocessingMLPackage document) { stamper.stamp(subTemplate, subContext, output); WordprocessingMLPackage subDocument = WordprocessingMLPackage.load(new ByteArrayInputStream(output.toByteArray())); changes.addAll(subDocument.getMainDocumentPart().getContent()); - subDocument.save(new File("subdoc-" + count + ".docx")); } catch (Exception e) { System.out.println(e); } count++; }); - // TODO debug this part if (!changes.isEmpty()) { - ContentAccessor gcp = findInsertableParent((ContentAccessor) commentWrapper.getCommentRangeStart().getParent()); - gcp.getContent().addAll(changes); + ContentAccessor gcp = gcpMap.get(commentWrapper); + CommentUtil.deleteComment(commentWrapper); + gcp.getContent().removeAll(repeatElementsMap.get(commentWrapper)); + gcp.getContent().addAll(index, changes); } } } @@ -108,6 +118,7 @@ public void reset() { subContexts = new HashMap<>(); subTemplates = new HashMap<>(); insertIndex = new HashMap<>(); + gcpMap = new HashMap<>(); } private WordprocessingMLPackage extractSubTemplate(CommentWrapper commentWrapper, List repeatElements) { @@ -125,8 +136,6 @@ private WordprocessingMLPackage extractSubTemplate(CommentWrapper commentWrapper Comments comments = objectFactory.createComments(); commentWrapper.getChildren().forEach(comment -> comments.getComment().add(comment.getComment())); commentsPart.setContents(comments); - - document.save(new File("temp.docx")); } catch (Exception e) { System.out.println(e); } @@ -152,25 +161,20 @@ && depthElementSearch(commentWrapper.getCommentRangeStart(), element)) { return repeatElements; } - private static ContentAccessor findInsertableParent(ContentAccessor searchFrom) { - if (searchFrom instanceof Tc) { // if it's Tc - need add new cell to row - return searchFrom; - } - return findInsertableParent((ContentAccessor) ((Child) searchFrom).getParent()); - } - private static ContentAccessor findGreatestCommonParent(Object targetSearch, ContentAccessor searchFrom) { if (depthElementSearch(targetSearch, searchFrom)) { - if (searchFrom instanceof Tr) { // if it's Tr - need add new line to table - return (ContentAccessor) ((Tr) searchFrom).getParent(); - } else if (searchFrom instanceof Tc) { // if it's Tc - need add new cell to row - return (ContentAccessor) ((Tc) searchFrom).getParent(); - } - return searchFrom; + return findInsertableParent(searchFrom); } return findGreatestCommonParent(targetSearch, (ContentAccessor) ((Child) searchFrom).getParent()); } + private static ContentAccessor findInsertableParent(ContentAccessor searchFrom) { + if (!(searchFrom instanceof Tc || searchFrom instanceof Body)) { + return findInsertableParent((ContentAccessor) ((Child) searchFrom).getParent()); + } + return searchFrom; + } + private static boolean depthElementSearch(Object searchTarget, Object content) { content = XmlUtils.unwrap(content); if (searchTarget.equals(content)) { From 4b42fc6e7f009337df183bc3e4566c5cf916c1cf Mon Sep 17 00:00:00 2001 From: Youssouf Naciri Date: Fri, 19 Aug 2022 17:18:57 +0200 Subject: [PATCH 15/51] enhanced exception handling --- .../wickedsource/docxstamper/DocxStamper.java | 2 +- .../repeat/RepeatDocPartProcessor.java | 80 +++++++------------ 2 files changed, 31 insertions(+), 51 deletions(-) diff --git a/src/main/java/org/wickedsource/docxstamper/DocxStamper.java b/src/main/java/org/wickedsource/docxstamper/DocxStamper.java index 2049ef4f..76e6ced6 100644 --- a/src/main/java/org/wickedsource/docxstamper/DocxStamper.java +++ b/src/main/java/org/wickedsource/docxstamper/DocxStamper.java @@ -70,7 +70,7 @@ private void initFields() { commentProcessorRegistry.setFailOnInvalidExpression(config.isFailOnUnresolvedExpression()); commentProcessorRegistry.registerCommentProcessor(IRepeatProcessor.class, new RepeatProcessor(typeResolverRegistry, expressionResolver)); commentProcessorRegistry.registerCommentProcessor(IParagraphRepeatProcessor.class, new ParagraphRepeatProcessor(typeResolverRegistry, expressionResolver)); - commentProcessorRegistry.registerCommentProcessor(IRepeatDocPartProcessor.class, new RepeatDocPartProcessor(typeResolverRegistry, expressionResolver, config)); + commentProcessorRegistry.registerCommentProcessor(IRepeatDocPartProcessor.class, new RepeatDocPartProcessor(config)); commentProcessorRegistry.registerCommentProcessor(IDisplayIfProcessor.class, new DisplayIfProcessor()); commentProcessorRegistry.registerCommentProcessor(IReplaceWithProcessor.class, new ReplaceWithProcessor()); diff --git a/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatDocPartProcessor.java b/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatDocPartProcessor.java index 68ddc5c2..69fa2b26 100644 --- a/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatDocPartProcessor.java +++ b/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatDocPartProcessor.java @@ -2,17 +2,15 @@ import org.docx4j.XmlUtils; import org.docx4j.jaxb.Context; +import org.docx4j.openpackaging.exceptions.Docx4JException; +import org.docx4j.openpackaging.exceptions.InvalidFormatException; import org.docx4j.openpackaging.packages.WordprocessingMLPackage; import org.docx4j.openpackaging.parts.WordprocessingML.CommentsPart; import org.docx4j.wml.*; import org.jvnet.jaxb2_commons.ppp.Child; import org.wickedsource.docxstamper.DocxStamper; import org.wickedsource.docxstamper.DocxStamperConfiguration; -import org.wickedsource.docxstamper.api.typeresolver.TypeResolverRegistry; -import org.wickedsource.docxstamper.el.ExpressionResolver; import org.wickedsource.docxstamper.processor.BaseCommentProcessor; -import org.wickedsource.docxstamper.processor.CommentProcessorRegistry; -import org.wickedsource.docxstamper.replace.PlaceholderReplacer; import org.wickedsource.docxstamper.util.CommentUtil; import org.wickedsource.docxstamper.util.CommentWrapper; @@ -29,27 +27,15 @@ public class RepeatDocPartProcessor extends BaseCommentProcessor implements IRep private Map> subContexts = new HashMap<>(); private Map> repeatElementsMap = new HashMap<>(); - private Map subTemplates = new HashMap(); + private Map subTemplates = new HashMap<>(); private Map gcpMap = new HashMap<>(); private Map insertIndex = new HashMap<>(); - private final PlaceholderReplacer placeholderReplacer; - private final CommentProcessorRegistry commentProcessorRegistry; - private final ObjectFactory objectFactory; - int count = 0; - - public RepeatDocPartProcessor(TypeResolverRegistry typeResolverRegistry, ExpressionResolver expressionResolver, DocxStamperConfiguration config) { + public RepeatDocPartProcessor(DocxStamperConfiguration config) { this.config = config; - this.objectFactory = Context.getWmlObjectFactory(); - - this.placeholderReplacer = new PlaceholderReplacer<>(typeResolverRegistry); - this.placeholderReplacer.setExpressionResolver(expressionResolver); - - this.commentProcessorRegistry = new CommentProcessorRegistry(this.placeholderReplacer); - this.commentProcessorRegistry.setExpressionResolver(expressionResolver); } @Override @@ -62,23 +48,22 @@ public void repeatDocPart(List contexts) { List repeatElements = getRepeatElements(currentCommentWrapper, gcp); if (repeatElements.size() > 0) { - subContexts.put(currentCommentWrapper, contexts); - subTemplates.put(currentCommentWrapper, extractSubTemplate(currentCommentWrapper, repeatElements)); - gcpMap.put(currentCommentWrapper, gcp); - insertIndex.put(currentCommentWrapper, gcp.getContent().indexOf(repeatElements.get(0))); - repeatElementsMap.put(currentCommentWrapper, repeatElements); + try { + subContexts.put(currentCommentWrapper, contexts); + subTemplates.put(currentCommentWrapper, extractSubTemplate(currentCommentWrapper, repeatElements)); + gcpMap.put(currentCommentWrapper, gcp); + insertIndex.put(currentCommentWrapper, gcp.getContent().indexOf(repeatElements.get(0))); + repeatElementsMap.put(currentCommentWrapper, repeatElements); + } catch (InvalidFormatException e) { + throw new RuntimeException(e); + } } } - private WordprocessingMLPackage copyTemplate(WordprocessingMLPackage doc) { - try { - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - doc.save(baos); - return WordprocessingMLPackage.load(new ByteArrayInputStream(baos.toByteArray())); - } catch (Exception e) { - System.out.println(e); - return null; - } + private WordprocessingMLPackage copyTemplate(WordprocessingMLPackage doc) throws Docx4JException { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + doc.save(baos); + return WordprocessingMLPackage.load(new ByteArrayInputStream(baos.toByteArray())); } @Override @@ -90,7 +75,7 @@ public void commitChanges(WordprocessingMLPackage document) { Integer index = insertIndex.get(commentWrapper); - expressionContexts.forEach(subContext -> { + for (Object subContext : expressionContexts) { try { WordprocessingMLPackage subTemplate = copyTemplate(subTemplates.get(commentWrapper)); DocxStamper stamper = new DocxStamper<>(config); @@ -98,11 +83,10 @@ public void commitChanges(WordprocessingMLPackage document) { stamper.stamp(subTemplate, subContext, output); WordprocessingMLPackage subDocument = WordprocessingMLPackage.load(new ByteArrayInputStream(output.toByteArray())); changes.addAll(subDocument.getMainDocumentPart().getContent()); - } catch (Exception e) { - System.out.println(e); + } catch (Docx4JException e) { + throw new RuntimeException(e); } - count++; - }); + } if (!changes.isEmpty()) { ContentAccessor gcp = gcpMap.get(commentWrapper); @@ -119,26 +103,22 @@ public void reset() { subTemplates = new HashMap<>(); insertIndex = new HashMap<>(); gcpMap = new HashMap<>(); + repeatElementsMap = new HashMap<>(); } - private WordprocessingMLPackage extractSubTemplate(CommentWrapper commentWrapper, List repeatElements) { + private WordprocessingMLPackage extractSubTemplate(CommentWrapper commentWrapper, List repeatElements) throws InvalidFormatException { CommentUtil.deleteComment(commentWrapper); // for deep copy without comment - WordprocessingMLPackage document = null; + WordprocessingMLPackage document = WordprocessingMLPackage.createPackage(); - try { - document = WordprocessingMLPackage.createPackage(); - CommentsPart commentsPart = new CommentsPart(); - document.getMainDocumentPart().addTargetPart(commentsPart); + CommentsPart commentsPart = new CommentsPart(); + document.getMainDocumentPart().addTargetPart(commentsPart); - document.getMainDocumentPart().getContent().addAll(repeatElements); + document.getMainDocumentPart().getContent().addAll(repeatElements); - Comments comments = objectFactory.createComments(); - commentWrapper.getChildren().forEach(comment -> comments.getComment().add(comment.getComment())); - commentsPart.setContents(comments); - } catch (Exception e) { - System.out.println(e); - } + Comments comments = objectFactory.createComments(); + commentWrapper.getChildren().forEach(comment -> comments.getComment().add(comment.getComment())); + commentsPart.setContents(comments); return document; } From c9df0545cc12afa01dd15cbf0e4bd89b0e7ff79b Mon Sep 17 00:00:00 2001 From: Youssouf Naciri <95088722+AL1047088@users.noreply.github.com> Date: Mon, 22 Aug 2022 14:32:07 +0200 Subject: [PATCH 16/51] Update pom.xml --- pom.xml | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 008f7e7d..e7950ab2 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - linkyard + pro.verron docx-stamper 1.4.1-SNAPSHOT jar @@ -30,6 +30,16 @@ + + ynaciri@gmail.com + Youssouf Naciri + https://youssouf.naciri.fr + + + joseph@verron.pro + Joseph Verron + https://verron.pro + tom.hombergs@gmail.com Tom Hombergs From a43714ad20a75cdf53b29dfda4c0c5d3035f04f4 Mon Sep 17 00:00:00 2001 From: Youssouf Naciri Date: Tue, 30 Aug 2022 17:22:44 +0200 Subject: [PATCH 17/51] fixed excluded placeholder issue in repeatDocPart --- pom.xml | 2 +- .../docxstamper/processor/repeat/RepeatDocPartProcessor.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index e7950ab2..ac2c818a 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 pro.verron docx-stamper - 1.4.1-SNAPSHOT + 1.4.2-SNAPSHOT jar docx-stamper diff --git a/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatDocPartProcessor.java b/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatDocPartProcessor.java index 69fa2b26..10857764 100644 --- a/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatDocPartProcessor.java +++ b/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatDocPartProcessor.java @@ -132,10 +132,10 @@ && depthElementSearch(commentWrapper.getCommentRangeStart(), element)) { startFound = true; } if (startFound) { + repeatElements.add(element); if (depthElementSearch(commentWrapper.getCommentRangeEnd(), element)) { break; } - repeatElements.add(element); } } return repeatElements; From b7e57f65bda67ada7e2fbcc4202626b8af55be85 Mon Sep 17 00:00:00 2001 From: Youssouf Naciri <95088722+AL1047088@users.noreply.github.com> Date: Wed, 7 Sep 2022 17:09:48 +0200 Subject: [PATCH 18/51] Improve Processor tolerance to non valued fields in context * added ability to replace unresolved placeholders with a global default value * fixed repeatDocPart cases when no data given * added a displayParagraphIfPresent comment processor --- pom.xml | 4 +- .../wickedsource/docxstamper/DocxStamper.java | 3 + .../docxstamper/DocxStamperConfiguration.java | 380 ++++++++++-------- .../docxstamper/el/ExpressionResolver.java | 2 + .../displayif/DisplayIfProcessor.java | 127 +++--- .../displayif/IDisplayIfProcessor.java | 8 + .../repeat/ParagraphRepeatProcessor.java | 16 +- .../repeat/RepeatDocPartProcessor.java | 9 +- .../replace/PlaceholderReplacer.java | 214 +++++----- 9 files changed, 436 insertions(+), 327 deletions(-) diff --git a/pom.xml b/pom.xml index ac2c818a..97f4d37b 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 pro.verron docx-stamper - 1.4.2-SNAPSHOT + 1.4.3-SNAPSHOT jar docx-stamper @@ -66,7 +66,7 @@ - + commons-io diff --git a/src/main/java/org/wickedsource/docxstamper/DocxStamper.java b/src/main/java/org/wickedsource/docxstamper/DocxStamper.java index 76e6ced6..aa0a5cfd 100644 --- a/src/main/java/org/wickedsource/docxstamper/DocxStamper.java +++ b/src/main/java/org/wickedsource/docxstamper/DocxStamper.java @@ -64,6 +64,9 @@ private void initFields() { placeholderReplacer.setExpressionResolver(expressionResolver); placeholderReplacer.setLeaveEmptyOnExpressionError(config.isLeaveEmptyOnExpressionError()); placeholderReplacer.setReplaceNullValues(config.isReplaceNullValues()); + placeholderReplacer.setNullValuesDefault(config.getNullValuesDefault()); + placeholderReplacer.setReplaceUnresolvedExpressions(config.isReplaceUnresolvedExpressions()); + placeholderReplacer.setUnresolvedExpressionsDefaultValue(config.getUnresolvedExpressionsDefaultValue()); commentProcessorRegistry = new CommentProcessorRegistry(placeholderReplacer); commentProcessorRegistry.setExpressionResolver(expressionResolver); diff --git a/src/main/java/org/wickedsource/docxstamper/DocxStamperConfiguration.java b/src/main/java/org/wickedsource/docxstamper/DocxStamperConfiguration.java index 1dfe448a..513ae5c3 100644 --- a/src/main/java/org/wickedsource/docxstamper/DocxStamperConfiguration.java +++ b/src/main/java/org/wickedsource/docxstamper/DocxStamperConfiguration.java @@ -1,177 +1,231 @@ package org.wickedsource.docxstamper; -import java.util.HashMap; -import java.util.Map; - import org.wickedsource.docxstamper.api.EvaluationContextConfigurer; import org.wickedsource.docxstamper.api.commentprocessor.ICommentProcessor; import org.wickedsource.docxstamper.api.typeresolver.ITypeResolver; import org.wickedsource.docxstamper.el.NoOpEvaluationContextConfigurer; import org.wickedsource.docxstamper.replace.typeresolver.FallbackResolver; +import java.util.HashMap; +import java.util.Map; + /** * Provides configuration parameters for DocxStamper. */ public class DocxStamperConfiguration { - private String lineBreakPlaceholder; - - private EvaluationContextConfigurer evaluationContextConfigurer = new NoOpEvaluationContextConfigurer(); - - private boolean failOnUnresolvedExpression = true; - - private boolean leaveEmptyOnExpressionError = false; - - private boolean replaceNullValues = false; - - private Map, ICommentProcessor> commentProcessors = new HashMap<>(); - - private Map, ITypeResolver> typeResolvers = new HashMap<>(); - - private ITypeResolver defaultTypeResolver = new FallbackResolver(); - - private Map, Object> expressionFunctions = new HashMap<>(); - - /** - * The String provided as lineBreakPlaceholder will be replaces with a line break - * when stamping a document. If no lineBreakPlaceholder is provided, no replacement - * will take place. - * - * @param lineBreakPlaceholder the String that should be replaced with line breaks during stamping. - * @return the configuration object for chaining. - */ - public DocxStamperConfiguration setLineBreakPlaceholder(String lineBreakPlaceholder) { - this.lineBreakPlaceholder = lineBreakPlaceholder; - return this; - } - - /** - * Provides an {@link EvaluationContextConfigurer} which may change the configuration of a Spring - * {@link org.springframework.expression.EvaluationContext} which is used for evaluating expressions - * in comments and text. - * @param evaluationContextConfigurer the configurer to use. - */ - public DocxStamperConfiguration setEvaluationContextConfigurer(EvaluationContextConfigurer evaluationContextConfigurer) { - this.evaluationContextConfigurer = evaluationContextConfigurer; - return this; - } - - /** - * If set to true, stamper will throw an {@link org.wickedsource.docxstamper.api.UnresolvedExpressionException} - * if a variable expression or processor expression within the document or within the comments is encountered that cannot be resolved. Is set to true by default. - */ - public DocxStamperConfiguration setFailOnUnresolvedExpression(boolean failOnUnresolvedExpression) { - this.failOnUnresolvedExpression = failOnUnresolvedExpression; - return this; - } - - /** - * Registers the specified ICommentProcessor as an implementation of the - * specified interface. - * - * @param interfaceClass the Interface which is implemented by the commentProcessor. - * @param commentProcessor the commentProcessor implementing the specified interface. - */ - public DocxStamperConfiguration addCommentProcessor(Class interfaceClass, - ICommentProcessor commentProcessor) { - this.commentProcessors.put(interfaceClass, commentProcessor); - return this; - } - - /** - *

- * Registers the given ITypeResolver for the given class. The registered ITypeResolver's resolve() method will only - * be called with objects of the specified class. - *

- *

- * Note that each type can only be resolved by ONE ITypeResolver implementation. Multiple calls to addTypeResolver() - * with the same resolvedType parameter will override earlier calls. - *

- * - * @param resolvedType the class whose objects are to be passed to the given ITypeResolver. - * @param resolver the resolver to resolve objects of the given type. - * @param the type resolved by the ITypeResolver. - */ - public DocxStamperConfiguration addTypeResolver(Class resolvedType, ITypeResolver resolver) { - this.typeResolvers.put(resolvedType, resolver); - return this; - } - - /** - * Exposes all methods of a given interface to the expression language. - * @param interfaceClass the interface whose methods should be exposed in the expression language. - * @param implementation the implementation that should be called to evaluate invocations of the interface methods - * within the expression language. Must implement the interface above. - */ - public DocxStamperConfiguration exposeInterfaceToExpressionLanguage(Class interfaceClass, Object implementation) { - this.expressionFunctions.put(interfaceClass, implementation); - return this; - } - - /** - * If an error is caught while evaluating an expression the expression will be replaced with an empty string instead - * of leaving the original expression in the document. - * @param leaveEmpty true to replace expressions with empty string when an error is caught while evaluating - */ - public DocxStamperConfiguration leaveEmptyOnExpressionError(boolean leaveEmpty) { - this.leaveEmptyOnExpressionError = leaveEmpty; - return this; - } - - /** - * Indicates if expressions that resolve to null should be processed. - * @param replaceNullValues true to replace null value expression with resolved value (which is null), false to leave the expression as is - */ - public DocxStamperConfiguration replaceNullValues(boolean replaceNullValues) { - this.replaceNullValues = replaceNullValues; - return this; - } - - /** - * Creates a {@link DocxStamper} instance configured with this configuration. - */ - public DocxStamper build() { - return new DocxStamper(this); - } - - EvaluationContextConfigurer getEvaluationContextConfigurer() { - return evaluationContextConfigurer; - } - - boolean isFailOnUnresolvedExpression() { - return failOnUnresolvedExpression; - } - - Map, ICommentProcessor> getCommentProcessors() { - return commentProcessors; - } - - Map, ITypeResolver> getTypeResolvers() { - return typeResolvers; - } - - ITypeResolver getDefaultTypeResolver() { - return defaultTypeResolver; - } - - public DocxStamperConfiguration setDefaultTypeResolver(ITypeResolver defaultTypeResolver) { - this.defaultTypeResolver = defaultTypeResolver; - return this; - } - - public boolean isLeaveEmptyOnExpressionError() { - return leaveEmptyOnExpressionError; - } - - public boolean isReplaceNullValues() { - return replaceNullValues; - } - - String getLineBreakPlaceholder() { - return lineBreakPlaceholder; - } - - public Map, Object> getExpressionFunctions() { - return expressionFunctions; - } + private String lineBreakPlaceholder; + + private EvaluationContextConfigurer evaluationContextConfigurer = new NoOpEvaluationContextConfigurer(); + + private boolean failOnUnresolvedExpression = true; + + private boolean leaveEmptyOnExpressionError = false; + + private boolean replaceUnresolvedExpressions = false; + + private String unresolvedExpressionsDefaultValue = null; + + private boolean replaceNullValues = false; + + private String nullValuesDefault = null; + + private Map, ICommentProcessor> commentProcessors = new HashMap<>(); + + private Map, ITypeResolver> typeResolvers = new HashMap<>(); + + private ITypeResolver defaultTypeResolver = new FallbackResolver(); + + private Map, Object> expressionFunctions = new HashMap<>(); + + /** + * The String provided as lineBreakPlaceholder will be replaces with a line break + * when stamping a document. If no lineBreakPlaceholder is provided, no replacement + * will take place. + * + * @param lineBreakPlaceholder the String that should be replaced with line breaks during stamping. + * @return the configuration object for chaining. + */ + public DocxStamperConfiguration setLineBreakPlaceholder(String lineBreakPlaceholder) { + this.lineBreakPlaceholder = lineBreakPlaceholder; + return this; + } + + /** + * Provides an {@link EvaluationContextConfigurer} which may change the configuration of a Spring + * {@link org.springframework.expression.EvaluationContext} which is used for evaluating expressions + * in comments and text. + * + * @param evaluationContextConfigurer the configurer to use. + */ + public DocxStamperConfiguration setEvaluationContextConfigurer(EvaluationContextConfigurer evaluationContextConfigurer) { + this.evaluationContextConfigurer = evaluationContextConfigurer; + return this; + } + + /** + * If set to true, stamper will throw an {@link org.wickedsource.docxstamper.api.UnresolvedExpressionException} + * if a variable expression or processor expression within the document or within the comments is encountered that cannot be resolved. Is set to true by default. + */ + public DocxStamperConfiguration setFailOnUnresolvedExpression(boolean failOnUnresolvedExpression) { + this.failOnUnresolvedExpression = failOnUnresolvedExpression; + return this; + } + + /** + * Registers the specified ICommentProcessor as an implementation of the + * specified interface. + * + * @param interfaceClass the Interface which is implemented by the commentProcessor. + * @param commentProcessor the commentProcessor implementing the specified interface. + */ + public DocxStamperConfiguration addCommentProcessor(Class interfaceClass, + ICommentProcessor commentProcessor) { + this.commentProcessors.put(interfaceClass, commentProcessor); + return this; + } + + /** + *

+ * Registers the given ITypeResolver for the given class. The registered ITypeResolver's resolve() method will only + * be called with objects of the specified class. + *

+ *

+ * Note that each type can only be resolved by ONE ITypeResolver implementation. Multiple calls to addTypeResolver() + * with the same resolvedType parameter will override earlier calls. + *

+ * + * @param resolvedType the class whose objects are to be passed to the given ITypeResolver. + * @param resolver the resolver to resolve objects of the given type. + * @param the type resolved by the ITypeResolver. + */ + public DocxStamperConfiguration addTypeResolver(Class resolvedType, ITypeResolver resolver) { + this.typeResolvers.put(resolvedType, resolver); + return this; + } + + /** + * Exposes all methods of a given interface to the expression language. + * + * @param interfaceClass the interface whose methods should be exposed in the expression language. + * @param implementation the implementation that should be called to evaluate invocations of the interface methods + * within the expression language. Must implement the interface above. + */ + public DocxStamperConfiguration exposeInterfaceToExpressionLanguage(Class interfaceClass, Object implementation) { + this.expressionFunctions.put(interfaceClass, implementation); + return this; + } + + /** + * If an error is caught while evaluating an expression the expression will be replaced with an empty string instead + * of leaving the original expression in the document. + * + * @param leaveEmpty true to replace expressions with empty string when an error is caught while evaluating + */ + public DocxStamperConfiguration leaveEmptyOnExpressionError(boolean leaveEmpty) { + this.leaveEmptyOnExpressionError = leaveEmpty; + return this; + } + + /** + * Indicates if expressions that resolve to null should be processed. + * + * @param replaceNullValues true to replace null value expression with resolved value (which is null), false to leave the expression as is + */ + public DocxStamperConfiguration replaceNullValues(boolean replaceNullValues) { + this.replaceNullValues = replaceNullValues; + return this; + } + + /** + * Indicates if expressions that resolve to null should be replaced by a global default value. + * + * @param nullValuesDefault value to use instead for expression resolving to null + * @see DocxStamperConfiguration#replaceNullValues + */ + public DocxStamperConfiguration nullValuesDefault(String nullValuesDefault) { + this.nullValuesDefault = nullValuesDefault; + return this; + } + + /** + * Indicates if expressions that doesn't resolve should be replaced by a default value. + * + * @param replaceUnresolvedExpressions true to replace null value expression with resolved value (which is null), false to leave the expression as is + */ + public DocxStamperConfiguration replaceUnresolvedExpressions(boolean replaceUnresolvedExpressions) { + this.replaceUnresolvedExpressions = replaceUnresolvedExpressions; + return this; + } + + /** + * Indicates the default value to use for expressions that doesn't resolve. + * + * @param unresolvedExpressionsDefaultValue value to use instead for expression that doesn't resolve + * @see DocxStamperConfiguration#replaceUnresolvedExpressions + */ + public DocxStamperConfiguration unresolvedExpressionsDefaultValue(String unresolvedExpressionsDefaultValue) { + this.unresolvedExpressionsDefaultValue = unresolvedExpressionsDefaultValue; + return this; + } + + /** + * Creates a {@link DocxStamper} instance configured with this configuration. + */ + public DocxStamper build() { + return new DocxStamper(this); + } + + EvaluationContextConfigurer getEvaluationContextConfigurer() { + return evaluationContextConfigurer; + } + + boolean isFailOnUnresolvedExpression() { + return failOnUnresolvedExpression; + } + + Map, ICommentProcessor> getCommentProcessors() { + return commentProcessors; + } + + Map, ITypeResolver> getTypeResolvers() { + return typeResolvers; + } + + ITypeResolver getDefaultTypeResolver() { + return defaultTypeResolver; + } + + public DocxStamperConfiguration setDefaultTypeResolver(ITypeResolver defaultTypeResolver) { + this.defaultTypeResolver = defaultTypeResolver; + return this; + } + + public boolean isLeaveEmptyOnExpressionError() { + return leaveEmptyOnExpressionError; + } + + public boolean isReplaceNullValues() { + return replaceNullValues; + } + + public String getNullValuesDefault() { + return nullValuesDefault; + } + + public boolean isReplaceUnresolvedExpressions() { + return replaceUnresolvedExpressions; + } + + public String getUnresolvedExpressionsDefaultValue() { + return unresolvedExpressionsDefaultValue; + } + + String getLineBreakPlaceholder() { + return lineBreakPlaceholder; + } + + public Map, Object> getExpressionFunctions() { + return expressionFunctions; + } } diff --git a/src/main/java/org/wickedsource/docxstamper/el/ExpressionResolver.java b/src/main/java/org/wickedsource/docxstamper/el/ExpressionResolver.java index 4749a9a5..88c66ff3 100644 --- a/src/main/java/org/wickedsource/docxstamper/el/ExpressionResolver.java +++ b/src/main/java/org/wickedsource/docxstamper/el/ExpressionResolver.java @@ -32,6 +32,8 @@ public Object resolveExpression(String expressionString, Object contextRoot) { expressionString = expressionUtil.stripExpression(expressionString); } ExpressionParser parser = new SpelExpressionParser(); + // TODO create a custom evaluation context to allow skipping the use of a proxy to inject processor methods + // processors methods should be registered as methodaccessors instead of added as proxy method on the context StandardEvaluationContext evaluationContext = new StandardEvaluationContext(contextRoot); evaluationContextConfigurer.configureEvaluationContext(evaluationContext); Expression expression = parser.parseExpression(expressionString); diff --git a/src/main/java/org/wickedsource/docxstamper/processor/displayif/DisplayIfProcessor.java b/src/main/java/org/wickedsource/docxstamper/processor/displayif/DisplayIfProcessor.java index 3c00e664..98f83054 100644 --- a/src/main/java/org/wickedsource/docxstamper/processor/displayif/DisplayIfProcessor.java +++ b/src/main/java/org/wickedsource/docxstamper/processor/displayif/DisplayIfProcessor.java @@ -13,75 +13,80 @@ public class DisplayIfProcessor extends BaseCommentProcessor implements IDisplayIfProcessor { - private List paragraphsToBeRemoved = new ArrayList<>(); + private List paragraphsToBeRemoved = new ArrayList<>(); - private List tablesToBeRemoved = new ArrayList<>(); + private List tablesToBeRemoved = new ArrayList<>(); - private List tableRowsToBeRemoved = new ArrayList<>(); + private List tableRowsToBeRemoved = new ArrayList<>(); - @Override - public void commitChanges(WordprocessingMLPackage document) { - ObjectDeleter deleter = new ObjectDeleter(document); - removeParagraphs(deleter); - removeTables(deleter); - removeTableRows(deleter); - } + @Override + public void commitChanges(WordprocessingMLPackage document) { + ObjectDeleter deleter = new ObjectDeleter(document); + removeParagraphs(deleter); + removeTables(deleter); + removeTableRows(deleter); + } - @Override - public void reset() { - paragraphsToBeRemoved = new ArrayList<>(); - tablesToBeRemoved = new ArrayList<>(); - tableRowsToBeRemoved = new ArrayList<>(); - } + @Override + public void reset() { + paragraphsToBeRemoved = new ArrayList<>(); + tablesToBeRemoved = new ArrayList<>(); + tableRowsToBeRemoved = new ArrayList<>(); + } - private void removeParagraphs(ObjectDeleter deleter) { - for (ParagraphCoordinates pCoords : paragraphsToBeRemoved) { - deleter.deleteParagraph(pCoords); - } - } + private void removeParagraphs(ObjectDeleter deleter) { + for (ParagraphCoordinates pCoords : paragraphsToBeRemoved) { + deleter.deleteParagraph(pCoords); + } + } - private void removeTables(ObjectDeleter deleter) { - for (TableCoordinates tCoords : tablesToBeRemoved) { - deleter.deleteTable(tCoords); - } - } + private void removeTables(ObjectDeleter deleter) { + for (TableCoordinates tCoords : tablesToBeRemoved) { + deleter.deleteTable(tCoords); + } + } - private void removeTableRows(ObjectDeleter deleter) { - for (TableRowCoordinates rCoords : tableRowsToBeRemoved) { - deleter.deleteTableRow(rCoords); - } - } + private void removeTableRows(ObjectDeleter deleter) { + for (TableRowCoordinates rCoords : tableRowsToBeRemoved) { + deleter.deleteTableRow(rCoords); + } + } - @Override - public void displayParagraphIf(Boolean condition) { - if (!condition) { - ParagraphCoordinates coords = getCurrentParagraphCoordinates(); - paragraphsToBeRemoved.add(coords); - } - } + @Override + public void displayParagraphIf(Boolean condition) { + if (!condition) { + ParagraphCoordinates coords = getCurrentParagraphCoordinates(); + paragraphsToBeRemoved.add(coords); + } + } - @Override - public void displayTableIf(Boolean condition) { - if (!condition) { - ParagraphCoordinates pCoords = getCurrentParagraphCoordinates(); - if (pCoords.getParentTableCellCoordinates() == null || - pCoords.getParentTableCellCoordinates().getParentTableRowCoordinates() == null || - pCoords.getParentTableCellCoordinates().getParentTableRowCoordinates().getParentTableCoordinates() == null) { - throw new CommentProcessingException("Paragraph is not within a table!", pCoords); - } - tablesToBeRemoved.add(pCoords.getParentTableCellCoordinates().getParentTableRowCoordinates().getParentTableCoordinates()); - } - } + @Override + public void displayParagraphIfPresent(Object condition) { + displayParagraphIf(condition != null); + } - @Override - public void displayTableRowIf(Boolean condition) { - if (!condition) { - ParagraphCoordinates pCoords = getCurrentParagraphCoordinates(); - if (pCoords.getParentTableCellCoordinates() == null || - pCoords.getParentTableCellCoordinates().getParentTableRowCoordinates() == null) { - throw new CommentProcessingException("Paragraph is not within a table!", pCoords); - } - tableRowsToBeRemoved.add(pCoords.getParentTableCellCoordinates().getParentTableRowCoordinates()); - } - } + @Override + public void displayTableIf(Boolean condition) { + if (!condition) { + ParagraphCoordinates pCoords = getCurrentParagraphCoordinates(); + if (pCoords.getParentTableCellCoordinates() == null || + pCoords.getParentTableCellCoordinates().getParentTableRowCoordinates() == null || + pCoords.getParentTableCellCoordinates().getParentTableRowCoordinates().getParentTableCoordinates() == null) { + throw new CommentProcessingException("Paragraph is not within a table!", pCoords); + } + tablesToBeRemoved.add(pCoords.getParentTableCellCoordinates().getParentTableRowCoordinates().getParentTableCoordinates()); + } + } + + @Override + public void displayTableRowIf(Boolean condition) { + if (!condition) { + ParagraphCoordinates pCoords = getCurrentParagraphCoordinates(); + if (pCoords.getParentTableCellCoordinates() == null || + pCoords.getParentTableCellCoordinates().getParentTableRowCoordinates() == null) { + throw new CommentProcessingException("Paragraph is not within a table!", pCoords); + } + tableRowsToBeRemoved.add(pCoords.getParentTableCellCoordinates().getParentTableRowCoordinates()); + } + } } diff --git a/src/main/java/org/wickedsource/docxstamper/processor/displayif/IDisplayIfProcessor.java b/src/main/java/org/wickedsource/docxstamper/processor/displayif/IDisplayIfProcessor.java index 30f3a591..e9b97088 100644 --- a/src/main/java/org/wickedsource/docxstamper/processor/displayif/IDisplayIfProcessor.java +++ b/src/main/java/org/wickedsource/docxstamper/processor/displayif/IDisplayIfProcessor.java @@ -10,6 +10,14 @@ public interface IDisplayIfProcessor { */ void displayParagraphIf(Boolean condition); + /** + * May be called to delete the commented paragraph or not, depending on the presence of the given data. + * + * @param condition if non null, the commented paragraph will remain in the document. If null, the commented paragraph + * will be deleted at stamping. + */ + void displayParagraphIfPresent(Object condition); + /** * May be called to delete the table surrounding the commented paragraph, depending on the given boolean condition. * diff --git a/src/main/java/org/wickedsource/docxstamper/processor/repeat/ParagraphRepeatProcessor.java b/src/main/java/org/wickedsource/docxstamper/processor/repeat/ParagraphRepeatProcessor.java index 0ffc94ca..3b5462e3 100644 --- a/src/main/java/org/wickedsource/docxstamper/processor/repeat/ParagraphRepeatProcessor.java +++ b/src/main/java/org/wickedsource/docxstamper/processor/repeat/ParagraphRepeatProcessor.java @@ -56,14 +56,16 @@ public void commitChanges(WordprocessingMLPackage document) { ParagraphsToRepeat paragraphsToRepeat = pToRepeat.get(rCoords); List expressionContexts = paragraphsToRepeat.data; - List

paragraphsToAdd = new ArrayList<>(); - for (final Object expressionContext : expressionContexts) { - for (P paragraphToClone : paragraphsToRepeat.paragraphs) { - P pClone = XmlUtils.deepCopy(paragraphToClone); - placeholderReplacer.resolveExpressionsForParagraph(pClone, expressionContext, document); - paragraphsToAdd.add(pClone); + if (expressionContexts != null) { + for (final Object expressionContext : expressionContexts) { + for (P paragraphToClone : paragraphsToRepeat.paragraphs) { + P pClone = XmlUtils.deepCopy(paragraphToClone); + placeholderReplacer.resolveExpressionsForParagraph(pClone, expressionContext, document); + + paragraphsToAdd.add(pClone); + } } } @@ -105,7 +107,7 @@ public static List

getParagraphsInsideComment(P paragraph) { if (parent instanceof ContentAccessor) { ContentAccessor contentAccessor = (ContentAccessor) parent; int index = contentAccessor.getContent().indexOf(paragraph); - for (int i = index + 1; i < contentAccessor.getContent().size() && !foundEnd; i ++) { + for (int i = index + 1; i < contentAccessor.getContent().size() && !foundEnd; i++) { Object next = contentAccessor.getContent().get(i); if (next instanceof CommentRangeEnd && ((CommentRangeEnd) next).getId().equals(commentId)) { diff --git a/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatDocPartProcessor.java b/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatDocPartProcessor.java index 10857764..8ab95fcf 100644 --- a/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatDocPartProcessor.java +++ b/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatDocPartProcessor.java @@ -13,6 +13,7 @@ import org.wickedsource.docxstamper.processor.BaseCommentProcessor; import org.wickedsource.docxstamper.util.CommentUtil; import org.wickedsource.docxstamper.util.CommentWrapper; +import org.wickedsource.docxstamper.util.RunUtil; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; @@ -88,7 +89,13 @@ public void commitChanges(WordprocessingMLPackage document) { } } - if (!changes.isEmpty()) { + if (changes.size() == 0 && config.getUnresolvedExpressionsDefaultValue() != null) { + P p = new P(); + p.getContent().add(RunUtil.create(config.getUnresolvedExpressionsDefaultValue(), p)); + changes.add(p); + } + + if (changes.size() > 0 || config.isReplaceUnresolvedExpressions()) { ContentAccessor gcp = gcpMap.get(commentWrapper); CommentUtil.deleteComment(commentWrapper); gcp.getContent().removeAll(repeatElementsMap.get(commentWrapper)); diff --git a/src/main/java/org/wickedsource/docxstamper/replace/PlaceholderReplacer.java b/src/main/java/org/wickedsource/docxstamper/replace/PlaceholderReplacer.java index c1752218..9118232f 100644 --- a/src/main/java/org/wickedsource/docxstamper/replace/PlaceholderReplacer.java +++ b/src/main/java/org/wickedsource/docxstamper/replace/PlaceholderReplacer.java @@ -1,7 +1,5 @@ package org.wickedsource.docxstamper.replace; -import java.util.List; - import org.docx4j.jaxb.Context; import org.docx4j.openpackaging.packages.WordprocessingMLPackage; import org.docx4j.wml.Br; @@ -24,119 +22,149 @@ import org.wickedsource.docxstamper.util.walk.BaseCoordinatesWalker; import org.wickedsource.docxstamper.util.walk.CoordinatesWalker; +import java.util.List; + public class PlaceholderReplacer { - private Logger logger = LoggerFactory.getLogger(PlaceholderReplacer.class); + private Logger logger = LoggerFactory.getLogger(PlaceholderReplacer.class); + + private ExpressionUtil expressionUtil = new ExpressionUtil(); + + private ExpressionResolver expressionResolver = new ExpressionResolver(); + + private TypeResolverRegistry typeResolverRegistry; + + private String lineBreakPlaceholder; - private ExpressionUtil expressionUtil = new ExpressionUtil(); + private boolean leaveEmptyOnExpressionError = false; - private ExpressionResolver expressionResolver = new ExpressionResolver(); + private boolean replaceNullValues = false; + + private String nullValuesDefault = null; + + private boolean replaceUnresolvedExpressions = false; + + private String unresolvedExpressionsDefaultValue = null; + + public PlaceholderReplacer(TypeResolverRegistry typeResolverRegistry) { + this.typeResolverRegistry = typeResolverRegistry; + } + + public PlaceholderReplacer(TypeResolverRegistry typeResolverRegistry, String lineBreakPlaceholder) { + this.typeResolverRegistry = typeResolverRegistry; + this.lineBreakPlaceholder = lineBreakPlaceholder; + } - private TypeResolverRegistry typeResolverRegistry; + public boolean isLeaveEmptyOnExpressionError() { + return leaveEmptyOnExpressionError; + } - private String lineBreakPlaceholder; + public void setLeaveEmptyOnExpressionError(boolean leaveEmptyOnExpressionError) { + this.leaveEmptyOnExpressionError = leaveEmptyOnExpressionError; + } - private boolean leaveEmptyOnExpressionError = false; + public void setReplaceNullValues(boolean replaceNullValues) { + this.replaceNullValues = replaceNullValues; + } - private boolean replaceNullValues = false; - public PlaceholderReplacer(TypeResolverRegistry typeResolverRegistry) { - this.typeResolverRegistry = typeResolverRegistry; - } + public void setNullValuesDefault(String nullValuesDefault) { + this.nullValuesDefault = nullValuesDefault; + } - public PlaceholderReplacer(TypeResolverRegistry typeResolverRegistry, String lineBreakPlaceholder) { - this.typeResolverRegistry = typeResolverRegistry; - this.lineBreakPlaceholder = lineBreakPlaceholder; - } + public boolean isReplaceUnresolvedExpressions() { + return replaceUnresolvedExpressions; + } - public boolean isLeaveEmptyOnExpressionError() { - return leaveEmptyOnExpressionError; - } + public void setReplaceUnresolvedExpressions(boolean replaceUnresolvedExpressions) { + this.replaceUnresolvedExpressions = replaceUnresolvedExpressions; + } - public void setLeaveEmptyOnExpressionError(boolean leaveEmptyOnExpressionError) { - this.leaveEmptyOnExpressionError = leaveEmptyOnExpressionError; - } + public void setUnresolvedExpressionsDefaultValue(String unresolvedExpressionsDefaultValue) { + this.unresolvedExpressionsDefaultValue = unresolvedExpressionsDefaultValue; + } - public void setReplaceNullValues(boolean replaceNullValues) { - this.replaceNullValues = replaceNullValues; - } - - public void setExpressionResolver(ExpressionResolver expressionResolver) { - this.expressionResolver = expressionResolver; - } + public void setExpressionResolver(ExpressionResolver expressionResolver) { + this.expressionResolver = expressionResolver; + } - /** - * Finds expressions in a document and resolves them against the specified context object. The expressions in the - * document are then replaced by the resolved values. - * - * @param document the document in which to replace all expressions. - * @param proxyBuilder builder for a proxy around the context root to customize its interface - */ - public void resolveExpressions(final WordprocessingMLPackage document, ProxyBuilder proxyBuilder) { - try { - final T expressionContext = proxyBuilder.build(); - CoordinatesWalker walker = new BaseCoordinatesWalker(document) { - @Override - protected void onParagraph(ParagraphCoordinates paragraphCoordinates) { - resolveExpressionsForParagraph(paragraphCoordinates.getParagraph(), expressionContext, document); + /** + * Finds expressions in a document and resolves them against the specified context object. The expressions in the + * document are then replaced by the resolved values. + * + * @param document the document in which to replace all expressions. + * @param proxyBuilder builder for a proxy around the context root to customize its interface + */ + public void resolveExpressions(final WordprocessingMLPackage document, ProxyBuilder proxyBuilder) { + try { + final T expressionContext = proxyBuilder.build(); + CoordinatesWalker walker = new BaseCoordinatesWalker(document) { + @Override + protected void onParagraph(ParagraphCoordinates paragraphCoordinates) { + resolveExpressionsForParagraph(paragraphCoordinates.getParagraph(), expressionContext, document); + } + }; + walker.walk(); + } catch (ProxyException e) { + throw new DocxStamperException("could not create proxy around context root!", e); } - }; - walker.walk(); - } catch (ProxyException e) { - throw new DocxStamperException("could not create proxy around context root!", e); } - } - - @SuppressWarnings("unchecked") - public void resolveExpressionsForParagraph(P p, T expressionContext, WordprocessingMLPackage document) { - ParagraphWrapper paragraphWrapper = new ParagraphWrapper(p); - List placeholders = expressionUtil.findVariableExpressions(paragraphWrapper.getText()); - for (String placeholder : placeholders) { - try { - Object replacement = expressionResolver.resolveExpression(placeholder, expressionContext); - if (replacement != null) { - ITypeResolver resolver = typeResolverRegistry.getResolverForType(replacement.getClass()); - Object replacementObject = resolver.resolve(document, replacement); - replace(paragraphWrapper, placeholder, replacementObject); - logger.debug(String.format("Replaced expression '%s' with value provided by TypeResolver %s", placeholder, resolver.getClass())); - } else if(replaceNullValues) { - ITypeResolver resolver = typeResolverRegistry.getDefaultResolver(); - Object replacementObject = resolver.resolve(document, replacement); - replace(paragraphWrapper, placeholder, replacementObject); - logger.debug(String.format("Replaced expression '%s' with value provided by TypeResolver %s", placeholder, resolver.getClass())); + + @SuppressWarnings("unchecked") + public void resolveExpressionsForParagraph(P p, T expressionContext, WordprocessingMLPackage document) { + ParagraphWrapper paragraphWrapper = new ParagraphWrapper(p); + List placeholders = expressionUtil.findVariableExpressions(paragraphWrapper.getText()); + for (String placeholder : placeholders) { + try { + Object replacement = expressionResolver.resolveExpression(placeholder, expressionContext); + if (replacement != null) { + ITypeResolver resolver = typeResolverRegistry.getResolverForType(replacement.getClass()); + Object replacementObject = resolver.resolve(document, replacement); + replace(paragraphWrapper, placeholder, replacementObject); + logger.debug(String.format("Replaced expression '%s' with value provided by TypeResolver %s", placeholder, resolver.getClass())); + } else if (replaceNullValues) { + ITypeResolver resolver = typeResolverRegistry.getDefaultResolver(); + Object replacementObject = resolver.resolve(document, nullValuesDefault); + replace(paragraphWrapper, placeholder, replacementObject); + logger.debug(String.format("Replaced expression '%s' with value provided by TypeResolver %s", placeholder, resolver.getClass())); + } + } catch (SpelEvaluationException | SpelParseException e) { + logger.warn(String.format( + "Expression %s could not be resolved against context root of type %s. Reason: %s. Set log level to TRACE to view Stacktrace.", + placeholder, expressionContext.getClass(), e.getMessage())); + logger.trace("Reason for skipping expression:", e); + + if (isLeaveEmptyOnExpressionError()) { + replace(paragraphWrapper, placeholder, null); + } else if (isReplaceUnresolvedExpressions()) { + replace(paragraphWrapper, placeholder, unresolvedExpressionsDefaultValue); + } + } } - } catch (SpelEvaluationException | SpelParseException e) { - logger.warn(String.format( - "Expression %s could not be resolved against context root of type %s. Reason: %s. Set log level to TRACE to view Stacktrace.", - placeholder, expressionContext.getClass(), e.getMessage())); - logger.trace("Reason for skipping expression:", e); - - if(isLeaveEmptyOnExpressionError()) { - replace(paragraphWrapper,placeholder,null); + if (this.lineBreakPlaceholder != null) { + replaceLineBreaks(paragraphWrapper); } - } - } - if (this.lineBreakPlaceholder != null) { - replaceLineBreaks(paragraphWrapper); } - } - private void replaceLineBreaks(ParagraphWrapper paragraphWrapper) { - Br lineBreak = Context.getWmlObjectFactory().createBr(); - R run = RunUtil.create(lineBreak); - while (paragraphWrapper.getText().contains(this.lineBreakPlaceholder)) { - replace(paragraphWrapper, this.lineBreakPlaceholder, run); + private void replaceLineBreaks(ParagraphWrapper paragraphWrapper) { + Br lineBreak = Context.getWmlObjectFactory().createBr(); + R run = RunUtil.create(lineBreak); + while (paragraphWrapper.getText().contains(this.lineBreakPlaceholder)) { + replace(paragraphWrapper, this.lineBreakPlaceholder, run); + } } - } - public void replace(ParagraphWrapper p, String placeholder, Object replacementObject) { - if (replacementObject == null) { - replacementObject = RunUtil.create(""); - } - if (replacementObject instanceof R) { - RunUtil.applyParagraphStyle(p.getParagraph(), (R) replacementObject); + public void replace(ParagraphWrapper p, String placeholder, Object replacementObject) { + if (replacementObject == null) { + replacementObject = RunUtil.create(""); + } + if (replacementObject instanceof String) { + replacementObject = RunUtil.create((String) replacementObject, p.getParagraph()); + } + if (replacementObject instanceof R) { + RunUtil.applyParagraphStyle(p.getParagraph(), (R) replacementObject); + } + p.replace(placeholder, replacementObject); } - p.replace(placeholder, replacementObject); - } } From 5926603e5d52408dae98714416ee25da5007eb42 Mon Sep 17 00:00:00 2001 From: Joseph Verron <3975735+josephverron@users.noreply.github.com> Date: Wed, 7 Sep 2022 18:03:03 +0200 Subject: [PATCH 19/51] bootstrap maintenance tooling * add github actions for helping with maintenance * remove gradle reference Co-authored-by: Joseph Verron --- .github/dependabot.yml | 11 +++ .github/workflows/codeql.yml | 72 +++++++++++++++ .github/workflows/maven.yml | 26 ++++++ .travis.yml | 35 ------- build.gradle | 146 ----------------------------- gradlew | 172 ----------------------------------- gradlew.bat | 84 ----------------- pom.xml | 40 +++++++- 8 files changed, 148 insertions(+), 438 deletions(-) create mode 100644 .github/dependabot.yml create mode 100644 .github/workflows/codeql.yml create mode 100644 .github/workflows/maven.yml delete mode 100644 .travis.yml delete mode 100644 build.gradle delete mode 100644 gradlew delete mode 100644 gradlew.bat diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 00000000..1f63bf5f --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,11 @@ +# To get started with Dependabot version updates, you'll need to specify which +# package ecosystems to update and where the package manifests are located. +# Please see the documentation for all configuration options: +# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates + +version: 2 +updates: + - package-ecosystem: "maven" # See documentation for possible values + directory: "/" # Location of package manifests + schedule: + interval: "weekly" \ No newline at end of file diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml new file mode 100644 index 00000000..747e59ec --- /dev/null +++ b/.github/workflows/codeql.yml @@ -0,0 +1,72 @@ +# For most projects, this workflow file will not need changing; you simply need +# to commit it to your repository. +# +# You may wish to alter this file to override the set of languages analyzed, +# or to provide custom queries or build logic. +# +# ******** NOTE ******** +# We have attempted to detect the languages in your repository. Please check +# the `language` matrix defined below to confirm you have the correct set of +# supported CodeQL languages. +# +name: "CodeQL" + +on: + push: + branches: [ "master" ] + pull_request: + # The branches below must be a subset of the branches above + branches: [ "master" ] + schedule: + - cron: '39 9 * * 5' + +jobs: + analyze: + name: Analyze + runs-on: ubuntu-latest + permissions: + actions: read + contents: read + security-events: write + + strategy: + fail-fast: false + matrix: + language: [ 'java' ] + # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ] + # Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support + + steps: + - name: Checkout repository + uses: actions/checkout@v3 + + # Initializes the CodeQL tools for scanning. + - name: Initialize CodeQL + uses: github/codeql-action/init@v2 + with: + languages: ${{ matrix.language }} + # If you wish to specify custom queries, you can do so here or in a config file. + # By default, queries listed here will override any specified in a config file. + # Prefix the list here with "+" to use these queries and those in the config file. + + # Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs + # queries: security-extended,security-and-quality + + + # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). + # If this step fails, then you should remove it and run the build manually (see below) + - name: Autobuild + uses: github/codeql-action/autobuild@v2 + + # ℹ️ Command-line programs to run using the OS shell. + # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun + + # If the Autobuild fails above, remove it and uncomment the following three lines. + # modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance. + + # - run: | + # echo "Run, Build Application using script" + # ./location_of_script_within_repo/buildscript.sh + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v2 diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml new file mode 100644 index 00000000..2df84e40 --- /dev/null +++ b/.github/workflows/maven.yml @@ -0,0 +1,26 @@ +# This workflow will build a Java project with Maven, and cache/restore any dependencies to improve the workflow execution time +# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven + +name: Java CI with Maven + +on: + push: + branches: [ "master" ] + pull_request: + branches: [ "master" ] + +jobs: + build: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + - name: Set up JDK 11 + uses: actions/setup-java@v3 + with: + java-version: '11' + distribution: 'temurin' + cache: maven + - name: Build with Maven + run: mvn -B package --file pom.xml \ No newline at end of file diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index aa758d77..00000000 --- a/.travis.yml +++ /dev/null @@ -1,35 +0,0 @@ -language: java -install: true -jdk: - - openjdk8 - -sudo: false - -before_install: - - chmod +x gradlew - -stages: - - name: build -# - name: snapshot -# only publish snapshots from "master" branch and not in pull requests -# if: branch = master AND type IN (push) - - name: release - # only publish releases from "release" branch and not in pull requests - if: branch = release AND type IN (push) - -jobs: - include: - - # run gradle build - - stage: build - script: - - ./gradlew build -Ddocx4j.version=6.1.2 - - ./gradlew build -Ddocx4j.version=6.0.1 - - # publish snapshot to oss.jfrog.org -# - stage: snapshot -# script: ./gradlew artifactoryPublish -x test -Dsnapshot=true -Dbintray.user=$BINTRAY_USER -Dbintray.key=$BINTRAY_KEY -Dbuild.number=$TRAVIS_BUILD_NUMBER - - # release a new stable version to bintray - - stage: release - script: ./gradlew bintrayUpload -x test -Dbintray.user=$BINTRAY_USER -Dbintray.key=$BINTRAY_KEY -Dbuild.number=$TRAVIS_BUILD_NUMBER diff --git a/build.gradle b/build.gradle deleted file mode 100644 index e0b4d488..00000000 --- a/build.gradle +++ /dev/null @@ -1,146 +0,0 @@ -plugins { - id "java" - id "java-library" - id "com.jfrog.artifactory" version "4.5.4" - id "com.jfrog.bintray" version "1.8.1" - id "maven-publish" -} - -repositories { - mavenLocal() - mavenCentral() - jcenter() -} - -// run gradle with "-Dsnapshot=true" to automatically append "-SNAPSHOT" to the version -version = '1.4.0' + (Boolean.valueOf(System.getProperty("snapshot")) ? "-SNAPSHOT" : "") -sourceCompatibility = 1.8 - -ext{ - bintrayUser = System.getProperty("bintray.user") - bintrayKey = System.getProperty("bintray.key") - buildNumber = System.getProperty("build.number") - docx4JVersion = System.getProperty("docx4j.version") ? System.getProperty("docx4j.version") : '6.1.2' -} - -dependencies { - implementation("commons-io:commons-io:2.5") - implementation("org.javassist:javassist:3.21.0-GA") - implementation("org.springframework:spring-expression:4.3.6.RELEASE") - - // We want docx-stamper to be usable with any docx4j version, so the dependency to docx4J - // has to be provided by the client. - compileOnly("org.docx4j:docx4j:${docx4JVersion}") - - testImplementation("org.docx4j:docx4j:${docx4JVersion}") - testImplementation("junit:junit:4.4") -} - -task sourcesJar(type: Jar, dependsOn: classes) { - classifier = 'sources' - from sourceSets.main.allSource -} - -javadoc.failOnError = false -task javadocJar(type: Jar, dependsOn: javadoc) { - classifier = 'javadoc' - from javadoc.destinationDir -} - -artifacts { - archives sourcesJar - archives javadocJar -} - -def pomConfig = { - licenses { - license { - name "MIT" - url "https://opensource.org/licenses/MIT" - distribution "repo" - } - } - developers { - developer { - id "thombergs" - name "Tom Hombergs" - email "tom.hombergs@gmail.com" - } - } - - scm { - url "https://github.com/thombergs/docx-stamper" - } -} - -publishing { - publications { - mavenPublication(MavenPublication) { - from components.java - artifact sourcesJar { - classifier "sources" - } - artifact javadocJar { - classifier "javadoc" - } - groupId 'org.wickedsource.docx-stamper' - artifactId 'docx-stamper' - version project.version - pom.withXml { - def root = asNode() - root.appendNode('description', 'Template engine for .docx documents.') - root.appendNode('name', 'docx-stamper') - root.appendNode('url', 'https://github.com/thombergs/docx-stamper') - root.children().last() + pomConfig - } - } - } -} - -artifactory { - contextUrl = 'http://oss.jfrog.org' - publish { - repository { - repoKey = 'oss-snapshot-local' - username = bintrayUser - password = bintrayKey - } - defaults { - publications('mavenPublication') - publishArtifacts = true - publishPom = true - properties = [ - 'build.number': buildNumber, - 'build.name': 'docx-stamper' - ] - } - } - resolve { - repoKey = 'jcenter' - } - clientConfig.info.setBuildNumber(buildNumber) - clientConfig.info.setBuildName('docx-stamper') -} - -bintray { - user = bintrayUser - key = bintrayKey - publications = ['mavenPublication'] - - pkg { - repo = 'maven-releases' - name = 'docx-stamper' - userOrg = 'reflectoring' - licenses = ['Apache-2.0'] - vcsUrl = 'https://github.com/thombergs/docx-stamper' - version { - name = project.version - desc = "build ${buildNumber}" - released = new Date() - } - } - - publish = true -} - - diff --git a/gradlew b/gradlew deleted file mode 100644 index 4453ccea..00000000 --- a/gradlew +++ /dev/null @@ -1,172 +0,0 @@ -#!/usr/bin/env sh - -############################################################################## -## -## Gradle start up script for UN*X -## -############################################################################## - -# Attempt to set APP_HOME -# Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi -done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null - -APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS="" - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" - -warn ( ) { - echo "$*" -} - -die ( ) { - echo - echo "$*" - echo - exit 1 -} - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -nonstop=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; - NONSTOP* ) - nonstop=true - ;; -esac - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD="java" - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." -fi - -# Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi -fi - -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi - -# For Cygwin, switch paths to Windows format before running java -if $cygwin ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - JAVACMD=`cygpath --unix "$JAVACMD"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi - # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" - fi - i=$((i+1)) - done - case $i in - (0) set -- ;; - (1) set -- "$args0" ;; - (2) set -- "$args0" "$args1" ;; - (3) set -- "$args0" "$args1" "$args2" ;; - (4) set -- "$args0" "$args1" "$args2" "$args3" ;; - (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; - esac -fi - -# Escape application args -save ( ) { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " -} -APP_ARGS=$(save "$@") - -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" - -# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong -if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then - cd "$(dirname "$0")" -fi - -exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat deleted file mode 100644 index f9553162..00000000 --- a/gradlew.bat +++ /dev/null @@ -1,84 +0,0 @@ -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto init - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:init -@rem Get command-line arguments, handling Windows variants - -if not "%OS%" == "Windows_NT" goto win9xME_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/pom.xml b/pom.xml index 97f4d37b..aad3270e 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 pro.verron docx-stamper - 1.4.3-SNAPSHOT + 1.4.4-SNAPSHOT jar docx-stamper @@ -54,7 +54,25 @@ + org.apache.maven.plugins + maven-javadoc-plugin + 3.3.1 + + false + + + + attach-javadocs + + jar + + + + + + org.apache.maven.plugins maven-source-plugin + 3.2.1 attach-sources @@ -64,6 +82,26 @@ + + org.apache.maven.plugins + maven-gpg-plugin + 3.0.1 + + + sign-artifacts + verify + + sign + + + + --pinentry-mode + loopback + + + + + From 78f61e929fc63242e482250836d99c14f677d33f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 7 Sep 2022 18:30:18 +0200 Subject: [PATCH 20/51] Bump junit from 4.4 to 4.13.2 (#11) Bumps [junit](https://github.com/junit-team/junit4) from 4.4 to 4.13.2. - [Release notes](https://github.com/junit-team/junit4/releases) - [Changelog](https://github.com/junit-team/junit4/blob/main/doc/ReleaseNotes4.13.2.md) - [Commits](https://github.com/junit-team/junit4/commits/r4.13.2) --- updated-dependencies: - dependency-name: junit:junit dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index aad3270e..ff64e9fb 100644 --- a/pom.xml +++ b/pom.xml @@ -119,7 +119,7 @@ junit junit - 4.4 + 4.13.2 test From ac04ac31353b9cc98d113a72f7861efb44653a25 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 8 Sep 2022 12:14:34 +0200 Subject: [PATCH 21/51] Bump commons-io from 2.5 to 2.11.0 (#12) Bumps commons-io from 2.5 to 2.11.0. --- updated-dependencies: - dependency-name: commons-io:commons-io dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index ff64e9fb..be056620 100644 --- a/pom.xml +++ b/pom.xml @@ -109,7 +109,7 @@ commons-io commons-io - 2.5 + 2.11.0 org.javassist From 24979b60290549c352e3fa0fee5ba629c9961d03 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 8 Sep 2022 13:53:43 +0200 Subject: [PATCH 22/51] Bump spring-expression from 4.3.6.RELEASE to 5.3.22 (#10) Bumps [spring-expression](https://github.com/spring-projects/spring-framework) from 4.3.6.RELEASE to 5.3.22. - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v4.3.6.RELEASE...v5.3.22) --- updated-dependencies: - dependency-name: org.springframework:spring-expression dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index be056620..39c351d8 100644 --- a/pom.xml +++ b/pom.xml @@ -125,7 +125,7 @@ org.springframework spring-expression - 4.3.6.RELEASE + 5.3.22 From 7e4c00afb6131b5b5d17a16c14653cdf3a75b551 Mon Sep 17 00:00:00 2001 From: Youssouf Naciri <95088722+AL1047088@users.noreply.github.com> Date: Thu, 8 Sep 2022 17:16:18 +0200 Subject: [PATCH 23/51] Fix/null values in processors (#13) * added resilience to null values in repeating processors * added behaviors for replace null values option in comment processors * added deprecation notice on replaceWith comment processor --- .../wickedsource/docxstamper/DocxStamper.java | 8 +-- .../displayif/DisplayIfProcessor.java | 6 ++ .../repeat/ParagraphRepeatProcessor.java | 8 ++- .../repeat/RepeatDocPartProcessor.java | 51 ++++++++-------- .../processor/repeat/RepeatProcessor.java | 32 +++++----- .../ReplaceWithProcessor.java | 58 +++++++++++-------- 6 files changed, 95 insertions(+), 68 deletions(-) diff --git a/src/main/java/org/wickedsource/docxstamper/DocxStamper.java b/src/main/java/org/wickedsource/docxstamper/DocxStamper.java index aa0a5cfd..22702581 100644 --- a/src/main/java/org/wickedsource/docxstamper/DocxStamper.java +++ b/src/main/java/org/wickedsource/docxstamper/DocxStamper.java @@ -71,12 +71,12 @@ private void initFields() { commentProcessorRegistry = new CommentProcessorRegistry(placeholderReplacer); commentProcessorRegistry.setExpressionResolver(expressionResolver); commentProcessorRegistry.setFailOnInvalidExpression(config.isFailOnUnresolvedExpression()); - commentProcessorRegistry.registerCommentProcessor(IRepeatProcessor.class, new RepeatProcessor(typeResolverRegistry, expressionResolver)); - commentProcessorRegistry.registerCommentProcessor(IParagraphRepeatProcessor.class, new ParagraphRepeatProcessor(typeResolverRegistry, expressionResolver)); + commentProcessorRegistry.registerCommentProcessor(IRepeatProcessor.class, new RepeatProcessor(typeResolverRegistry, expressionResolver, config)); + commentProcessorRegistry.registerCommentProcessor(IParagraphRepeatProcessor.class, new ParagraphRepeatProcessor(typeResolverRegistry, expressionResolver, config)); commentProcessorRegistry.registerCommentProcessor(IRepeatDocPartProcessor.class, new RepeatDocPartProcessor(config)); - commentProcessorRegistry.registerCommentProcessor(IDisplayIfProcessor.class, new DisplayIfProcessor()); + commentProcessorRegistry.registerCommentProcessor(IDisplayIfProcessor.class, new DisplayIfProcessor(config)); commentProcessorRegistry.registerCommentProcessor(IReplaceWithProcessor.class, - new ReplaceWithProcessor()); + new ReplaceWithProcessor(config)); for (Map.Entry, ICommentProcessor> entry : config.getCommentProcessors().entrySet()) { commentProcessorRegistry.registerCommentProcessor(entry.getKey(), entry.getValue()); } diff --git a/src/main/java/org/wickedsource/docxstamper/processor/displayif/DisplayIfProcessor.java b/src/main/java/org/wickedsource/docxstamper/processor/displayif/DisplayIfProcessor.java index 98f83054..0753c2cb 100644 --- a/src/main/java/org/wickedsource/docxstamper/processor/displayif/DisplayIfProcessor.java +++ b/src/main/java/org/wickedsource/docxstamper/processor/displayif/DisplayIfProcessor.java @@ -1,6 +1,7 @@ package org.wickedsource.docxstamper.processor.displayif; import org.docx4j.openpackaging.packages.WordprocessingMLPackage; +import org.wickedsource.docxstamper.DocxStamperConfiguration; import org.wickedsource.docxstamper.api.coordinates.ParagraphCoordinates; import org.wickedsource.docxstamper.api.coordinates.TableCoordinates; import org.wickedsource.docxstamper.api.coordinates.TableRowCoordinates; @@ -13,12 +14,17 @@ public class DisplayIfProcessor extends BaseCommentProcessor implements IDisplayIfProcessor { + private final DocxStamperConfiguration config; private List paragraphsToBeRemoved = new ArrayList<>(); private List tablesToBeRemoved = new ArrayList<>(); private List tableRowsToBeRemoved = new ArrayList<>(); + public DisplayIfProcessor(DocxStamperConfiguration config) { + this.config = config; + } + @Override public void commitChanges(WordprocessingMLPackage document) { ObjectDeleter deleter = new ObjectDeleter(document); diff --git a/src/main/java/org/wickedsource/docxstamper/processor/repeat/ParagraphRepeatProcessor.java b/src/main/java/org/wickedsource/docxstamper/processor/repeat/ParagraphRepeatProcessor.java index 3b5462e3..f7229aed 100644 --- a/src/main/java/org/wickedsource/docxstamper/processor/repeat/ParagraphRepeatProcessor.java +++ b/src/main/java/org/wickedsource/docxstamper/processor/repeat/ParagraphRepeatProcessor.java @@ -6,12 +6,14 @@ import org.docx4j.wml.CommentRangeStart; import org.docx4j.wml.ContentAccessor; import org.docx4j.wml.P; +import org.wickedsource.docxstamper.DocxStamperConfiguration; import org.wickedsource.docxstamper.api.coordinates.ParagraphCoordinates; import org.wickedsource.docxstamper.api.typeresolver.TypeResolverRegistry; import org.wickedsource.docxstamper.el.ExpressionResolver; import org.wickedsource.docxstamper.processor.BaseCommentProcessor; import org.wickedsource.docxstamper.replace.PlaceholderReplacer; import org.wickedsource.docxstamper.util.CommentUtil; +import org.wickedsource.docxstamper.util.ParagraphUtil; import java.math.BigInteger; import java.util.ArrayList; @@ -29,9 +31,11 @@ private static class ParagraphsToRepeat { private Map pToRepeat = new HashMap<>(); private PlaceholderReplacer placeholderReplacer; + private final DocxStamperConfiguration config; - public ParagraphRepeatProcessor(TypeResolverRegistry typeResolverRegistry, ExpressionResolver expressionResolver) { + public ParagraphRepeatProcessor(TypeResolverRegistry typeResolverRegistry, ExpressionResolver expressionResolver, DocxStamperConfiguration config) { this.placeholderReplacer = new PlaceholderReplacer<>(typeResolverRegistry); + this.config = config; this.placeholderReplacer.setExpressionResolver(expressionResolver); } @@ -67,6 +71,8 @@ public void commitChanges(WordprocessingMLPackage document) { paragraphsToAdd.add(pClone); } } + } else if (config.isReplaceNullValues() && config.getNullValuesDefault() != null) { + paragraphsToAdd.add(ParagraphUtil.create(config.getNullValuesDefault())); } Object parent = rCoords.getParagraph().getParent(); diff --git a/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatDocPartProcessor.java b/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatDocPartProcessor.java index 8ab95fcf..4078ae0a 100644 --- a/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatDocPartProcessor.java +++ b/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatDocPartProcessor.java @@ -13,14 +13,11 @@ import org.wickedsource.docxstamper.processor.BaseCommentProcessor; import org.wickedsource.docxstamper.util.CommentUtil; import org.wickedsource.docxstamper.util.CommentWrapper; -import org.wickedsource.docxstamper.util.RunUtil; +import org.wickedsource.docxstamper.util.ParagraphUtil; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; public class RepeatDocPartProcessor extends BaseCommentProcessor implements IRepeatDocPartProcessor { @@ -41,6 +38,10 @@ public RepeatDocPartProcessor(DocxStamperConfiguration config) { @Override public void repeatDocPart(List contexts) { + if (contexts == null) { + contexts = Collections.emptyList(); + } + CommentWrapper currentCommentWrapper = getCurrentCommentWrapper(); ContentAccessor gcp = findGreatestCommonParent( currentCommentWrapper.getCommentRangeEnd().getParent(), @@ -76,31 +77,27 @@ public void commitChanges(WordprocessingMLPackage document) { Integer index = insertIndex.get(commentWrapper); - for (Object subContext : expressionContexts) { - try { - WordprocessingMLPackage subTemplate = copyTemplate(subTemplates.get(commentWrapper)); - DocxStamper stamper = new DocxStamper<>(config); - ByteArrayOutputStream output = new ByteArrayOutputStream(); - stamper.stamp(subTemplate, subContext, output); - WordprocessingMLPackage subDocument = WordprocessingMLPackage.load(new ByteArrayInputStream(output.toByteArray())); - changes.addAll(subDocument.getMainDocumentPart().getContent()); - } catch (Docx4JException e) { - throw new RuntimeException(e); + if (expressionContexts != null) { + for (Object subContext : expressionContexts) { + try { + WordprocessingMLPackage subTemplate = copyTemplate(subTemplates.get(commentWrapper)); + DocxStamper stamper = new DocxStamper<>(config); + ByteArrayOutputStream output = new ByteArrayOutputStream(); + stamper.stamp(subTemplate, subContext, output); + WordprocessingMLPackage subDocument = WordprocessingMLPackage.load(new ByteArrayInputStream(output.toByteArray())); + changes.addAll(subDocument.getMainDocumentPart().getContent()); + } catch (Docx4JException e) { + throw new RuntimeException(e); + } } + } else if (config.isReplaceNullValues() && config.getNullValuesDefault() != null) { + changes.add(ParagraphUtil.create(config.getNullValuesDefault())); } - if (changes.size() == 0 && config.getUnresolvedExpressionsDefaultValue() != null) { - P p = new P(); - p.getContent().add(RunUtil.create(config.getUnresolvedExpressionsDefaultValue(), p)); - changes.add(p); - } - - if (changes.size() > 0 || config.isReplaceUnresolvedExpressions()) { - ContentAccessor gcp = gcpMap.get(commentWrapper); - CommentUtil.deleteComment(commentWrapper); - gcp.getContent().removeAll(repeatElementsMap.get(commentWrapper)); - gcp.getContent().addAll(index, changes); - } + ContentAccessor gcp = gcpMap.get(commentWrapper); + CommentUtil.deleteComment(commentWrapper); + gcp.getContent().removeAll(repeatElementsMap.get(commentWrapper)); + gcp.getContent().addAll(index, changes); } } diff --git a/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatProcessor.java b/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatProcessor.java index 28c7e168..14fbe01a 100644 --- a/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatProcessor.java +++ b/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatProcessor.java @@ -4,6 +4,7 @@ import org.docx4j.openpackaging.packages.WordprocessingMLPackage; import org.docx4j.wml.P; import org.docx4j.wml.Tr; +import org.wickedsource.docxstamper.DocxStamperConfiguration; import org.wickedsource.docxstamper.api.coordinates.ParagraphCoordinates; import org.wickedsource.docxstamper.api.coordinates.TableRowCoordinates; import org.wickedsource.docxstamper.api.typeresolver.TypeResolverRegistry; @@ -24,9 +25,11 @@ public class RepeatProcessor extends BaseCommentProcessor implements IRepeatProc private Map> tableRowsToRepeat = new HashMap<>(); private PlaceholderReplacer placeholderReplacer; + private final DocxStamperConfiguration config; - public RepeatProcessor(TypeResolverRegistry typeResolverRegistry, ExpressionResolver expressionResolver) { + public RepeatProcessor(TypeResolverRegistry typeResolverRegistry, ExpressionResolver expressionResolver, DocxStamperConfiguration config) { this.placeholderReplacer = new PlaceholderReplacer<>(typeResolverRegistry); + this.config = config; this.placeholderReplacer.setExpressionResolver(expressionResolver); } @@ -44,22 +47,26 @@ private void repeatRows(final WordprocessingMLPackage document) { for (TableRowCoordinates rCoords : tableRowsToRepeat.keySet()) { List expressionContexts = tableRowsToRepeat.get(rCoords); int index = rCoords.getIndex(); - for (final Object expressionContext : expressionContexts) { - Tr rowClone = XmlUtils.deepCopy(rCoords.getRow()); - DocumentWalker walker = new BaseDocumentWalker(rowClone) { - @Override - protected void onParagraph(P paragraph) { - placeholderReplacer.resolveExpressionsForParagraph(paragraph, expressionContext, document); - } - }; - walker.walk(); - rCoords.getParentTableCoordinates().getTable().getContent().add(++index, rowClone); + + if (expressionContexts != null) { + for (final Object expressionContext : expressionContexts) { + Tr rowClone = XmlUtils.deepCopy(rCoords.getRow()); + DocumentWalker walker = new BaseDocumentWalker(rowClone) { + @Override + protected void onParagraph(P paragraph) { + placeholderReplacer.resolveExpressionsForParagraph(paragraph, expressionContext, document); + } + }; + walker.walk(); + rCoords.getParentTableCoordinates().getTable().getContent().add(++index, rowClone); + } } + + // TODO : how to replace null values here ? rCoords.getParentTableCoordinates().getTable().getContent().remove(rCoords.getRow()); } } - @Override public void repeatTableRow(List objects) { ParagraphCoordinates pCoords = getCurrentParagraphCoordinates(); @@ -70,5 +77,4 @@ public void repeatTableRow(List objects) { tableRowsToRepeat.put(getCurrentParagraphCoordinates().getParentTableCellCoordinates().getParentTableRowCoordinates(), objects); CommentUtil.deleteComment(getCurrentCommentWrapper()); } - } diff --git a/src/main/java/org/wickedsource/docxstamper/processor/replaceExpression/ReplaceWithProcessor.java b/src/main/java/org/wickedsource/docxstamper/processor/replaceExpression/ReplaceWithProcessor.java index 892b59ad..1335da38 100644 --- a/src/main/java/org/wickedsource/docxstamper/processor/replaceExpression/ReplaceWithProcessor.java +++ b/src/main/java/org/wickedsource/docxstamper/processor/replaceExpression/ReplaceWithProcessor.java @@ -1,31 +1,43 @@ package org.wickedsource.docxstamper.processor.replaceExpression; import org.docx4j.openpackaging.packages.WordprocessingMLPackage; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.wickedsource.docxstamper.DocxStamperConfiguration; import org.wickedsource.docxstamper.processor.BaseCommentProcessor; import org.wickedsource.docxstamper.util.RunUtil; +/** + * @deprecated + */ +@Deprecated public class ReplaceWithProcessor extends BaseCommentProcessor - implements IReplaceWithProcessor { - - public ReplaceWithProcessor() { - - } - - @Override - public void commitChanges(WordprocessingMLPackage document) { - } - - @Override - public void reset() { - // nothing to rest - } - - @Override - public void replaceWordWith(String expression) { - if (this.getCurrentRunCoordinates() != null) { - RunUtil.setText(this.getCurrentRunCoordinates().getRun(), expression); - } - - } - + implements IReplaceWithProcessor { + + private Logger logger = LoggerFactory.getLogger(ReplaceWithProcessor.class); + + private final DocxStamperConfiguration config; + + public ReplaceWithProcessor(DocxStamperConfiguration config) { + this.config = config; + } + + @Override + public void commitChanges(WordprocessingMLPackage document) { + } + + @Override + public void reset() { + // nothing to rest + } + + @Override + public void replaceWordWith(String expression) { + logger.warn("replaceWordWith has been deprecated in favor of inplace placeholders (${expression})"); + if (expression != null && this.getCurrentRunCoordinates() != null) { + RunUtil.setText(this.getCurrentRunCoordinates().getRun(), expression); + } else if (config.isReplaceNullValues() && config.getNullValuesDefault() != null) { + RunUtil.setText(this.getCurrentRunCoordinates().getRun(), config.getNullValuesDefault()); + } + } } From b77b94aa4c685409bcc4ae8be12f44d86b96fec4 Mon Sep 17 00:00:00 2001 From: Joseph Verron <3975735+josephverron@users.noreply.github.com> Date: Fri, 9 Sep 2022 16:45:38 +0200 Subject: [PATCH 24/51] Improve maven build setup (#14) * Improve maven test run setup * Remove gradle reference * add maven site setup * add pitest mutation testing * update scm url Co-authored-by: Joseph Verron --- gradle/wrapper/gradle-wrapper.jar | Bin 54711 -> 0 bytes gradle/wrapper/gradle-wrapper.properties | 5 - pom.xml | 146 ++++++++++++++++++++--- 3 files changed, 130 insertions(+), 21 deletions(-) delete mode 100644 gradle/wrapper/gradle-wrapper.jar delete mode 100644 gradle/wrapper/gradle-wrapper.properties diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index 1a958be6420a4dd04b588fe4b31eb5d7ff8748c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 54711 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.0.0 pro.verron docx-stamper - 1.4.4-SNAPSHOT + 1.4.4 jar docx-stamper - - 1.8 - 1.8 - + Docx-stamper is a Java template engine for docx documents. This is a maintenance fork from https://github.com/thombergs/docx-stamper. - https://github.com/bflorat/docx-stamper + https://github.com/verronpro/docx-stamper - https://github.com/bflorat/docx-stamper - scm:git:https://github.com/bflorat/docx-stamper.git - https://github.com/bflorat/docx-stamper.git + scm:git:https://github.com/verronpro/docx-stamper + scm:git:https://github.com/verronpro/docx-stamper.git + scm:git:https://github.com/verronpro/docx-stamper.git MIT License - http://opensource.org/licenses/MIT + https://opensource.org/licenses/MIT @@ -53,11 +50,30 @@ + + org.apache.maven.plugins + maven-resources-plugin + 3.2.0 + + UTF-8 + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.10.1 + + UTF-8 + 1.8 + 1.8 + + org.apache.maven.plugins maven-javadoc-plugin 3.3.1 + UTF-8 false @@ -93,18 +109,116 @@ sign - - - --pinentry-mode - loopback - - + + + + + org.apache.maven.plugins + maven-surefire-plugin + 3.0.0-M5 + + --add-opens java.base/java.lang=ALL-UNNAMED + + + + + org.apache.maven.plugins + maven-site-plugin + 3.9.1 + + + org.pitest + pitest-maven + 1.7.2 + + + --add-opens + java.base/java.lang=ALL-UNNAMED + + + + + pre-site + + mutationCoverage + + + + + + org.jacoco + jacoco-maven-plugin + 0.8.8 + + + + prepare-agent + + + + report + test + + report + + + + + org.apache.maven.plugins + maven-surefire-report-plugin + 3.0.0-M5 + + + org.apache.maven.plugins + maven-project-info-reports-plugin + 3.3.0 + + UTF-8 + UTF-8 + + + + org.apache.maven.plugins + maven-javadoc-plugin + 3.3.1 + + UTF-8 + false + + + + + javadoc + test-javadoc + + + + + + org.jacoco + jacoco-maven-plugin + + + + report + + + + + + org.pitest + pitest-maven + 1.7.2 + + + + commons-io From 9c7a2c655886f733c942038ae360adda2367dc31 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 12 Sep 2022 20:14:00 +0200 Subject: [PATCH 25/51] Bump pitest-maven from 1.7.2 to 1.9.5 (#16) Bumps [pitest-maven](https://github.com/hcoles/pitest) from 1.7.2 to 1.9.5. - [Release notes](https://github.com/hcoles/pitest/releases) - [Commits](https://github.com/hcoles/pitest/compare/1.7.2...1.9.5) --- updated-dependencies: - dependency-name: org.pitest:pitest-maven dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 038bf71d..c387487e 100644 --- a/pom.xml +++ b/pom.xml @@ -129,7 +129,7 @@ org.pitest pitest-maven - 1.7.2 + 1.9.5 --add-opens @@ -214,7 +214,7 @@ org.pitest pitest-maven - 1.7.2 + 1.9.5 From 44d98814f94433df45a4c0f5260974f3effc5e99 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 12 Sep 2022 20:18:08 +0200 Subject: [PATCH 26/51] Bump maven-project-info-reports-plugin from 3.3.0 to 3.4.1 (#20) Bumps [maven-project-info-reports-plugin](https://github.com/apache/maven-project-info-reports-plugin) from 3.3.0 to 3.4.1. - [Release notes](https://github.com/apache/maven-project-info-reports-plugin/releases) - [Commits](https://github.com/apache/maven-project-info-reports-plugin/compare/maven-project-info-reports-plugin-3.3.0...maven-project-info-reports-plugin-3.4.1) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-project-info-reports-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index c387487e..072e9f74 100644 --- a/pom.xml +++ b/pom.xml @@ -177,7 +177,7 @@ org.apache.maven.plugins maven-project-info-reports-plugin - 3.3.0 + 3.4.1 UTF-8 UTF-8 From 84c89207d391afe4e4cf1a8bdda8ceae3969b11d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 12 Sep 2022 20:18:25 +0200 Subject: [PATCH 27/51] Bump maven-resources-plugin from 3.2.0 to 3.3.0 (#18) Bumps [maven-resources-plugin](https://github.com/apache/maven-resources-plugin) from 3.2.0 to 3.3.0. - [Release notes](https://github.com/apache/maven-resources-plugin/releases) - [Commits](https://github.com/apache/maven-resources-plugin/compare/maven-resources-plugin-3.2.0...maven-resources-plugin-3.3.0) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-resources-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 072e9f74..e16984be 100644 --- a/pom.xml +++ b/pom.xml @@ -53,7 +53,7 @@ org.apache.maven.plugins maven-resources-plugin - 3.2.0 + 3.3.0 UTF-8 From e478e0c3fddb36118fb375b786f769f5480a558e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 12 Sep 2022 20:20:58 +0200 Subject: [PATCH 28/51] Bump maven-surefire-plugin from 3.0.0-M5 to 3.0.0-M7 (#21) Bumps [maven-surefire-plugin](https://github.com/apache/maven-surefire) from 3.0.0-M5 to 3.0.0-M7. - [Release notes](https://github.com/apache/maven-surefire/releases) - [Commits](https://github.com/apache/maven-surefire/compare/surefire-3.0.0-M5...surefire-3.0.0-M7) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-surefire-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index e16984be..116f3dbe 100644 --- a/pom.xml +++ b/pom.xml @@ -115,7 +115,7 @@ org.apache.maven.plugins maven-surefire-plugin - 3.0.0-M5 + 3.0.0-M7 --add-opens java.base/java.lang=ALL-UNNAMED From b1f179131b5556f0f0d3128ae3296dedb68e4013 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 12 Sep 2022 20:30:50 +0200 Subject: [PATCH 29/51] Bump javassist from 3.21.0-GA to 3.29.1-GA (#17) Bumps [javassist](https://github.com/jboss-javassist/javassist) from 3.21.0-GA to 3.29.1-GA. - [Release notes](https://github.com/jboss-javassist/javassist/releases) - [Changelog](https://github.com/jboss-javassist/javassist/blob/master/Changes.md) - [Commits](https://github.com/jboss-javassist/javassist/commits) --- updated-dependencies: - dependency-name: org.javassist:javassist dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 116f3dbe..a18ab519 100644 --- a/pom.xml +++ b/pom.xml @@ -228,7 +228,7 @@ org.javassist javassist - 3.21.0-GA + 3.29.1-GA junit From 978013f0fe9550e93d3251f565fefa5ea30e59a0 Mon Sep 17 00:00:00 2001 From: Bertrand Florat Date: Thu, 18 Nov 2021 11:51:43 +0100 Subject: [PATCH 30/51] fix: #32 (some components not deleted due to wrong offset value) See https://github.com/thombergs/docx-stamper/issues/32 --- .../docxstamper/util/ObjectDeleter.java | 33 +++++++++--- .../ConditionalDisplayOfTablesBug32Test.java | 48 ++++++++++++++++++ .../docxstamper/util/ObjectDeleterTest.java | 5 +- .../ConditionalDisplayOfTablesBug32Test.docx | Bin 0 -> 6390 bytes 4 files changed, 76 insertions(+), 10 deletions(-) create mode 100644 src/test/java/org/wickedsource/docxstamper/ConditionalDisplayOfTablesBug32Test.java create mode 100644 src/test/resources/org/wickedsource/docxstamper/ConditionalDisplayOfTablesBug32Test.docx diff --git a/src/main/java/org/wickedsource/docxstamper/util/ObjectDeleter.java b/src/main/java/org/wickedsource/docxstamper/util/ObjectDeleter.java index a70faf81..47deedcd 100644 --- a/src/main/java/org/wickedsource/docxstamper/util/ObjectDeleter.java +++ b/src/main/java/org/wickedsource/docxstamper/util/ObjectDeleter.java @@ -7,15 +7,16 @@ import org.wickedsource.docxstamper.api.coordinates.ParagraphCoordinates; import org.wickedsource.docxstamper.api.coordinates.TableCoordinates; import org.wickedsource.docxstamper.api.coordinates.TableRowCoordinates; - +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; public class ObjectDeleter { private WordprocessingMLPackage document; - private int objectsDeletedFromMainDocument = 0; + private List deletedObjectsIndexes = new ArrayList<>(10); private Map deletedObjectsPerParent = new HashMap<>(); @@ -26,9 +27,9 @@ public ObjectDeleter(WordprocessingMLPackage document) { public void deleteParagraph(ParagraphCoordinates paragraphCoordinates) { if (paragraphCoordinates.getParentTableCellCoordinates() == null) { // global paragraph - int indexToDelete = paragraphCoordinates.getIndex() - objectsDeletedFromMainDocument; + int indexToDelete = getOffset(paragraphCoordinates.getIndex()); document.getMainDocumentPart().getContent().remove(indexToDelete); - objectsDeletedFromMainDocument++; + deletedObjectsIndexes.add(paragraphCoordinates.getIndex()); } else { // paragraph within a table cell Tc parentCell = paragraphCoordinates.getParentTableCellCoordinates().getCell(); @@ -47,15 +48,33 @@ private void deleteFromCell(Tc cell, int index) { TableCellUtil.addEmptyParagraph(cell); } deletedObjectsPerParent.put(cell, objectsDeletedFromParent + 1); - // TODO: find out why border lines are removed in some cells after having deleted a paragraph + // TODO: find out why border lines are removed in some cells after having + // deleted a paragraph + } + + /** + * Get new index of element to be deleted, taking into account previously + * deleted elements + * + * @param initialIndex initial index of the element to be deleted + * @return the index of the item to be removed + */ + private int getOffset(final int initialIndex) { + int newIndex = initialIndex; + for (Integer deletedIndex : this.deletedObjectsIndexes) { + if (initialIndex > deletedIndex) { + newIndex--; + } + } + return newIndex; } public void deleteTable(TableCoordinates tableCoordinates) { if (tableCoordinates.getParentTableCellCoordinates() == null) { // global table - int indexToDelete = tableCoordinates.getIndex() - objectsDeletedFromMainDocument; + int indexToDelete = getOffset(tableCoordinates.getIndex()); document.getMainDocumentPart().getContent().remove(indexToDelete); - objectsDeletedFromMainDocument++; + deletedObjectsIndexes.add(tableCoordinates.getIndex()); } else { // nested table within an table cell Tc parentCell = tableCoordinates.getParentTableCellCoordinates().getCell(); diff --git a/src/test/java/org/wickedsource/docxstamper/ConditionalDisplayOfTablesBug32Test.java b/src/test/java/org/wickedsource/docxstamper/ConditionalDisplayOfTablesBug32Test.java new file mode 100644 index 00000000..fe853eca --- /dev/null +++ b/src/test/java/org/wickedsource/docxstamper/ConditionalDisplayOfTablesBug32Test.java @@ -0,0 +1,48 @@ +package org.wickedsource.docxstamper; + +import org.docx4j.openpackaging.exceptions.Docx4JException; +import org.docx4j.openpackaging.packages.WordprocessingMLPackage; +import org.docx4j.wml.P; +import org.docx4j.wml.Tbl; +import org.docx4j.wml.Tc; +import org.docx4j.wml.Tr; +import org.junit.Assert; +import org.junit.Test; +import org.wickedsource.docxstamper.context.NameContext; +import org.wickedsource.docxstamper.util.ParagraphWrapper; +import javax.xml.bind.JAXBElement; +import java.io.IOException; +import java.io.InputStream; + +public class ConditionalDisplayOfTablesBug32Test extends AbstractDocx4jTest { + + @Test + public void test() throws Docx4JException, IOException { + NameContext context = new NameContext(); + context.setName("Homer"); + InputStream template = getClass().getResourceAsStream("ConditionalDisplayOfTablesBug32Test.docx"); + WordprocessingMLPackage document = stampAndLoad(template, context); + globalTablesAreRemoved(document); + nestedTablesAreRemoved(document); + } + + private void globalTablesAreRemoved(WordprocessingMLPackage document) { + Assert.assertTrue(document.getMainDocumentPart().getContent().get(1) instanceof P); + P p1 = (P) document.getMainDocumentPart().getContent().get(1); + Tbl table2 = (Tbl) ((JAXBElement) document.getMainDocumentPart().getContent().get(3)).getValue(); + Tbl table3 = (Tbl) ((JAXBElement) document.getMainDocumentPart().getContent().get(5)).getValue(); + P p4 = (P) document.getMainDocumentPart().getContent().get(7); + + Assert.assertEquals("This paragraph stays untouched.", new ParagraphWrapper(p1).getText()); + Assert.assertNotNull(table2); + Assert.assertNotNull(table3); + Assert.assertEquals("This paragraph stays untouched.", new ParagraphWrapper(p4).getText()); + } + + private void nestedTablesAreRemoved(WordprocessingMLPackage document) { + Tbl outerTable = (Tbl) ((JAXBElement) document.getMainDocumentPart().getContent().get(3)).getValue(); + Tc cell = (Tc) ((JAXBElement) ((Tr) outerTable.getContent().get(1)).getContent().get(1)).getValue(); + Assert.assertEquals("", new ParagraphWrapper((P) cell.getContent().get(0)).getText()); // empty paragraph, since the last element inside the cell was removed + } + +} \ No newline at end of file diff --git a/src/test/java/org/wickedsource/docxstamper/util/ObjectDeleterTest.java b/src/test/java/org/wickedsource/docxstamper/util/ObjectDeleterTest.java index 469716ff..19095c8d 100644 --- a/src/test/java/org/wickedsource/docxstamper/util/ObjectDeleterTest.java +++ b/src/test/java/org/wickedsource/docxstamper/util/ObjectDeleterTest.java @@ -10,9 +10,8 @@ import org.wickedsource.docxstamper.api.coordinates.TableCellCoordinates; import org.wickedsource.docxstamper.api.coordinates.TableCoordinates; import org.wickedsource.docxstamper.api.coordinates.TableRowCoordinates; -import org.wickedsource.docxstamper.util.ParagraphWrapper; -import org.wickedsource.docxstamper.util.walk.*; - +import org.wickedsource.docxstamper.util.walk.BaseCoordinatesWalker; +import org.wickedsource.docxstamper.util.walk.CoordinatesWalker; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; diff --git a/src/test/resources/org/wickedsource/docxstamper/ConditionalDisplayOfTablesBug32Test.docx b/src/test/resources/org/wickedsource/docxstamper/ConditionalDisplayOfTablesBug32Test.docx new file mode 100644 index 0000000000000000000000000000000000000000..fea0c23c964f73f2f60e2ee02ab0555d2e3b28b5 GIT binary patch literal 6390 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 O$Nf6U#@C}A0PsKG1?iLk literal 0 HcmV?d00001 From 4b9a5874dfd3ab0c0bfd5877074569aa0d288b8e Mon Sep 17 00:00:00 2001 From: Joseph Verron Date: Tue, 13 Sep 2022 00:41:08 +0200 Subject: [PATCH 31/51] setup jacoco reports --- .settings/.gitignore | 2 -- pom.xml | 11 ++++------- 2 files changed, 4 insertions(+), 9 deletions(-) delete mode 100644 .settings/.gitignore diff --git a/.settings/.gitignore b/.settings/.gitignore deleted file mode 100644 index e2635f07..00000000 --- a/.settings/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -/org.eclipse.jdt.core.prefs -/org.eclipse.m2e.core.prefs diff --git a/pom.xml b/pom.xml index a18ab519..f6ffb26c 100644 --- a/pom.xml +++ b/pom.xml @@ -117,7 +117,7 @@ maven-surefire-plugin 3.0.0-M7 - --add-opens java.base/java.lang=ALL-UNNAMED + @{argLine} --add-opens java.base/java.lang=ALL-UNNAMED @@ -151,6 +151,7 @@ 0.8.8 + prepare-agent prepare-agent @@ -192,8 +193,8 @@ false - - + + javadoc test-javadoc @@ -241,8 +242,6 @@ spring-expression 5.3.22 - - @@ -270,7 +269,5 @@ https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/ - - From d2991c4bd9aad9c9fd91e69f4055bfb39eaaf601 Mon Sep 17 00:00:00 2001 From: Joseph Verron Date: Tue, 13 Sep 2022 01:11:56 +0200 Subject: [PATCH 32/51] add pages setup --- .github/workflows/pages.yaml | 42 ++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 .github/workflows/pages.yaml diff --git a/.github/workflows/pages.yaml b/.github/workflows/pages.yaml new file mode 100644 index 00000000..3f1fe322 --- /dev/null +++ b/.github/workflows/pages.yaml @@ -0,0 +1,42 @@ +name: Deploy static content to Pages + +on: + push: + branches: ["master"] + workflow_dispatch: + +permissions: + contents: read + pages: write + id-token: write + +concurrency: + group: "pages" + cancel-in-progress: true + +jobs: + deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Set up JDK 11 + uses: actions/setup-java@v3 + with: + java-version: '11' + distribution: 'temurin' + cache: maven + - name: Build with Maven + run: mvn -B package site --file pom.xml + - name: Setup Pages + uses: actions/configure-pages@v2 + - name: Upload artifact + uses: actions/upload-pages-artifact@v1 + with: + path: 'target/site' + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v1 From bc902c00cb17508f4edaa181959945eb6c874519 Mon Sep 17 00:00:00 2001 From: Youssouf Naciri <95088722+AL1047088@users.noreply.github.com> Date: Thu, 15 Sep 2022 10:31:24 +0200 Subject: [PATCH 33/51] skipping malformed comments in CommentUtil.getComments to avoid NullPointerException later (#25) * skipping malformed comments in CommentUtil.getComments to avoid NullPointerException later * bump version --- pom.xml | 2 +- .../docxstamper/util/CommentUtil.java | 47 ++++++++++++++++++- 2 files changed, 47 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index f6ffb26c..8fbf80f9 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 pro.verron docx-stamper - 1.4.4 + 1.4.6-SNAPSHOT jar docx-stamper diff --git a/src/main/java/org/wickedsource/docxstamper/util/CommentUtil.java b/src/main/java/org/wickedsource/docxstamper/util/CommentUtil.java index 53854b36..9c593295 100644 --- a/src/main/java/org/wickedsource/docxstamper/util/CommentUtil.java +++ b/src/main/java/org/wickedsource/docxstamper/util/CommentUtil.java @@ -1,5 +1,6 @@ package org.wickedsource.docxstamper.util; +import org.docx4j.TextUtils; import org.docx4j.XmlUtils; import org.docx4j.openpackaging.exceptions.Docx4JException; import org.docx4j.openpackaging.exceptions.InvalidFormatException; @@ -17,7 +18,9 @@ import java.math.BigInteger; import java.util.HashMap; import java.util.Map; +import java.util.Set; import java.util.Stack; +import java.util.stream.Collectors; public class CommentUtil { @@ -197,7 +200,49 @@ public static Map getComments( Map allComments = new HashMap<>(); collectCommentRanges(rootComments, allComments, document); collectComments(rootComments, allComments, document); - return rootComments; + return cleanMalformedComments(rootComments); + } + + private static Map cleanMalformedComments(Map rootComments) { + Map filteredCommentEntries = new HashMap<>(); + + rootComments.forEach((key, comment) -> { + if (isCommentMalformed(comment)) { + logger.error( + "Skipping malformed comment, missing range start and/or range end : {}", + getCommentContent(comment) + ); + } else { + filteredCommentEntries.put(key, comment); + comment.setChildren(cleanMalformedComments(comment.getChildren())); + } + }); + + return filteredCommentEntries; + } + + private static Set cleanMalformedComments(Set children) { + return children.stream().filter(comment -> { + if (isCommentMalformed(comment)) { + logger.error( + "Skipping malformed comment, missing range start and/or range end : {}", + getCommentContent(comment) + ); + return false; + } + comment.setChildren(cleanMalformedComments(comment.getChildren())); + return true; + }).collect(Collectors.toSet()); + } + + private static String getCommentContent(CommentWrapper comment) { + return comment.getComment() != null + ? comment.getComment().getContent().stream().map(TextUtils::getText).collect(Collectors.joining("")) + : ""; + } + + private static boolean isCommentMalformed(CommentWrapper comment) { + return comment.getCommentRangeStart() == null || comment.getCommentRangeEnd() == null || comment.getComment() == null; } private static void collectCommentRanges( From de0208e89b8206b25b02a0ba1992d96df1a0b4e0 Mon Sep 17 00:00:00 2001 From: Youssouf Naciri Date: Thu, 15 Sep 2022 10:51:51 +0200 Subject: [PATCH 34/51] fixed RepeatProcessor not using the configuration settings --- .../docxstamper/DocxStamperConfiguration.java | 2 +- .../docxstamper/processor/repeat/RepeatProcessor.java | 10 ++++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/wickedsource/docxstamper/DocxStamperConfiguration.java b/src/main/java/org/wickedsource/docxstamper/DocxStamperConfiguration.java index 513ae5c3..94c7dc5f 100644 --- a/src/main/java/org/wickedsource/docxstamper/DocxStamperConfiguration.java +++ b/src/main/java/org/wickedsource/docxstamper/DocxStamperConfiguration.java @@ -221,7 +221,7 @@ public String getUnresolvedExpressionsDefaultValue() { return unresolvedExpressionsDefaultValue; } - String getLineBreakPlaceholder() { + public String getLineBreakPlaceholder() { return lineBreakPlaceholder; } diff --git a/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatProcessor.java b/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatProcessor.java index 14fbe01a..33c44d27 100644 --- a/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatProcessor.java +++ b/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatProcessor.java @@ -28,9 +28,15 @@ public class RepeatProcessor extends BaseCommentProcessor implements IRepeatProc private final DocxStamperConfiguration config; public RepeatProcessor(TypeResolverRegistry typeResolverRegistry, ExpressionResolver expressionResolver, DocxStamperConfiguration config) { - this.placeholderReplacer = new PlaceholderReplacer<>(typeResolverRegistry); this.config = config; - this.placeholderReplacer.setExpressionResolver(expressionResolver); + + this.placeholderReplacer = new PlaceholderReplacer<>(typeResolverRegistry, config.getLineBreakPlaceholder()); + placeholderReplacer.setExpressionResolver(expressionResolver); + placeholderReplacer.setLeaveEmptyOnExpressionError(config.isLeaveEmptyOnExpressionError()); + placeholderReplacer.setReplaceNullValues(config.isReplaceNullValues()); + placeholderReplacer.setNullValuesDefault(config.getNullValuesDefault()); + placeholderReplacer.setReplaceUnresolvedExpressions(config.isReplaceUnresolvedExpressions()); + placeholderReplacer.setUnresolvedExpressionsDefaultValue(config.getUnresolvedExpressionsDefaultValue()); } @Override From 359102e424dc5324299ba3d9459cf01c69138a02 Mon Sep 17 00:00:00 2001 From: Joseph Verron Date: Thu, 15 Sep 2022 12:14:59 +0200 Subject: [PATCH 35/51] ci deploy to maven central --- .github/workflows/codeql.yml | 34 --------------------- .github/workflows/maven.yml | 4 +-- .github/workflows/{pages.yaml => pages.yml} | 4 +-- .github/workflows/release.yml | 29 ++++++++++++++++++ pom.xml | 6 ++++ 5 files changed, 39 insertions(+), 38 deletions(-) rename .github/workflows/{pages.yaml => pages.yml} (90%) create mode 100644 .github/workflows/release.yml diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 747e59ec..42003db2 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -1,21 +1,9 @@ -# For most projects, this workflow file will not need changing; you simply need -# to commit it to your repository. -# -# You may wish to alter this file to override the set of languages analyzed, -# or to provide custom queries or build logic. -# -# ******** NOTE ******** -# We have attempted to detect the languages in your repository. Please check -# the `language` matrix defined below to confirm you have the correct set of -# supported CodeQL languages. -# name: "CodeQL" on: push: branches: [ "master" ] pull_request: - # The branches below must be a subset of the branches above branches: [ "master" ] schedule: - cron: '39 9 * * 5' @@ -33,40 +21,18 @@ jobs: fail-fast: false matrix: language: [ 'java' ] - # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ] - # Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support steps: - name: Checkout repository uses: actions/checkout@v3 - # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL uses: github/codeql-action/init@v2 with: languages: ${{ matrix.language }} - # If you wish to specify custom queries, you can do so here or in a config file. - # By default, queries listed here will override any specified in a config file. - # Prefix the list here with "+" to use these queries and those in the config file. - # Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs - # queries: security-extended,security-and-quality - - - # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). - # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild uses: github/codeql-action/autobuild@v2 - # ℹ️ Command-line programs to run using the OS shell. - # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun - - # If the Autobuild fails above, remove it and uncomment the following three lines. - # modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance. - - # - run: | - # echo "Run, Build Application using script" - # ./location_of_script_within_repo/buildscript.sh - - name: Perform CodeQL Analysis uses: github/codeql-action/analyze@v2 diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index 2df84e40..a94b10c2 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -21,6 +21,6 @@ jobs: with: java-version: '11' distribution: 'temurin' - cache: maven + cache: 'maven' - name: Build with Maven - run: mvn -B package --file pom.xml \ No newline at end of file + run: mvn --batch-mode --no-transfer-progress package \ No newline at end of file diff --git a/.github/workflows/pages.yaml b/.github/workflows/pages.yml similarity index 90% rename from .github/workflows/pages.yaml rename to .github/workflows/pages.yml index 3f1fe322..c148fb38 100644 --- a/.github/workflows/pages.yaml +++ b/.github/workflows/pages.yml @@ -28,9 +28,9 @@ jobs: with: java-version: '11' distribution: 'temurin' - cache: maven + cache: 'maven' - name: Build with Maven - run: mvn -B package site --file pom.xml + run: mvn --batch-mode --no-transfer-progress package site - name: Setup Pages uses: actions/configure-pages@v2 - name: Upload artifact diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 00000000..46d477fa --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,29 @@ +name: Publish package to the Maven Central Repository +on: + release: + types: [created] +jobs: + publish: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Set up Maven Central Repository + uses: actions/setup-java@v3 + with: + java-version: '11' + distribution: 'temurin' + cache: 'maven' + server-id: ossrh + server-username: MAVEN_USERNAME + server-password: MAVEN_PASSWORD + - id: install-secret-key + name: Install gpg secret key + run: | + cat <(echo -e "${{ secrets.GPG_SECRET_KEY }}") | gpg --batch --import + gpg --list-secret-keys --keyid-format LONG + - name: Publish package + run: mvn --batch-mode --no-transfer-progress clean deploy + env: + MAVEN_USERNAME: ${{ secrets.OSS_SONATYPE_NAME }} + MAVEN_PASSWORD: ${{ secrets.OSS_SONATYPE_PASS }} + gpg.passphrase: ${{ secrets.GPG_SECRET_PASS }} \ No newline at end of file diff --git a/pom.xml b/pom.xml index 8fbf80f9..ad01fbbe 100644 --- a/pom.xml +++ b/pom.xml @@ -111,6 +111,12 @@ + + + --pinentry-mode + loopback + + org.apache.maven.plugins From d0ddd0b826a24b9d3b4ab8caa90a5f1c2f3ca449 Mon Sep 17 00:00:00 2001 From: Joseph Verron Date: Thu, 15 Sep 2022 12:17:17 +0200 Subject: [PATCH 36/51] bump version --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index ad01fbbe..71983aec 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 pro.verron docx-stamper - 1.4.6-SNAPSHOT + 1.4.6 jar docx-stamper From fbd3a6a8a1e4526d0aa58bab4cdc0742f981e8bf Mon Sep 17 00:00:00 2001 From: Joseph Verron <3975735+josephverron@users.noreply.github.com> Date: Thu, 15 Sep 2022 14:41:02 +0200 Subject: [PATCH 37/51] fix ci (#28) Co-authored-by: Joseph Verron --- .github/workflows/release.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 46d477fa..392cebad 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -22,8 +22,7 @@ jobs: cat <(echo -e "${{ secrets.GPG_SECRET_KEY }}") | gpg --batch --import gpg --list-secret-keys --keyid-format LONG - name: Publish package - run: mvn --batch-mode --no-transfer-progress clean deploy + run: mvn --batch-mode --no-transfer-progress clean deploy -Dgpg.passphrase=${{ secrets.GPG_SECRET_PASS }} env: MAVEN_USERNAME: ${{ secrets.OSS_SONATYPE_NAME }} - MAVEN_PASSWORD: ${{ secrets.OSS_SONATYPE_PASS }} - gpg.passphrase: ${{ secrets.GPG_SECRET_PASS }} \ No newline at end of file + MAVEN_PASSWORD: ${{ secrets.OSS_SONATYPE_PASS }} \ No newline at end of file From 968d1a44dccce545a584900c9acfda957387955c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 15 Sep 2022 17:12:54 +0200 Subject: [PATCH 38/51] Bump maven-javadoc-plugin from 3.3.1 to 3.4.1 (#31) Bumps [maven-javadoc-plugin](https://github.com/apache/maven-javadoc-plugin) from 3.3.1 to 3.4.1. - [Release notes](https://github.com/apache/maven-javadoc-plugin/releases) - [Commits](https://github.com/apache/maven-javadoc-plugin/compare/maven-javadoc-plugin-3.3.1...maven-javadoc-plugin-3.4.1) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-javadoc-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 71983aec..5081b74e 100644 --- a/pom.xml +++ b/pom.xml @@ -71,7 +71,7 @@ org.apache.maven.plugins maven-javadoc-plugin - 3.3.1 + 3.4.1 UTF-8 false @@ -193,7 +193,7 @@ org.apache.maven.plugins maven-javadoc-plugin - 3.3.1 + 3.4.1 UTF-8 false From d6680d562f99c71bea37e9df97977449b62bca54 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 15 Sep 2022 17:14:50 +0200 Subject: [PATCH 39/51] Bump maven-surefire-report-plugin from 3.0.0-M5 to 3.0.0-M7 (#30) Bumps [maven-surefire-report-plugin](https://github.com/apache/maven-surefire) from 3.0.0-M5 to 3.0.0-M7. - [Release notes](https://github.com/apache/maven-surefire/releases) - [Commits](https://github.com/apache/maven-surefire/compare/surefire-3.0.0-M5...surefire-3.0.0-M7) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-surefire-report-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 5081b74e..9246717e 100644 --- a/pom.xml +++ b/pom.xml @@ -179,7 +179,7 @@ org.apache.maven.plugins maven-surefire-report-plugin - 3.0.0-M5 + 3.0.0-M7 org.apache.maven.plugins From c367b91a92c9d1800c12be83d1310e8a0f6eec48 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 15 Sep 2022 19:20:01 +0200 Subject: [PATCH 40/51] Bump spring-expression from 5.3.22 to 5.3.23 (#29) Bumps [spring-expression](https://github.com/spring-projects/spring-framework) from 5.3.22 to 5.3.23. - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v5.3.22...v5.3.23) --- updated-dependencies: - dependency-name: org.springframework:spring-expression dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 9246717e..0a52b5e7 100644 --- a/pom.xml +++ b/pom.xml @@ -246,7 +246,7 @@ org.springframework spring-expression - 5.3.22 + 5.3.23 From 997ed62dc4607f13832cccd1773d1b3aa606d73f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 15 Sep 2022 19:20:31 +0200 Subject: [PATCH 41/51] Bump maven-site-plugin from 3.9.1 to 3.12.1 (#33) Bumps [maven-site-plugin](https://github.com/apache/maven-site-plugin) from 3.9.1 to 3.12.1. - [Release notes](https://github.com/apache/maven-site-plugin/releases) - [Commits](https://github.com/apache/maven-site-plugin/compare/maven-site-plugin-3.9.1...maven-site-plugin-3.12.1) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-site-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 0a52b5e7..850a33c4 100644 --- a/pom.xml +++ b/pom.xml @@ -130,7 +130,7 @@ org.apache.maven.plugins maven-site-plugin - 3.9.1 + 3.12.1 org.pitest From c42a23e7075b0068bc80c9135be017cc9566f875 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 15 Sep 2022 19:21:01 +0200 Subject: [PATCH 42/51] Bump javassist from 3.29.1-GA to 3.29.2-GA (#32) Bumps [javassist](https://github.com/jboss-javassist/javassist) from 3.29.1-GA to 3.29.2-GA. - [Release notes](https://github.com/jboss-javassist/javassist/releases) - [Changelog](https://github.com/jboss-javassist/javassist/blob/master/Changes.md) - [Commits](https://github.com/jboss-javassist/javassist/commits) --- updated-dependencies: - dependency-name: org.javassist:javassist dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 850a33c4..cd4926fa 100644 --- a/pom.xml +++ b/pom.xml @@ -235,7 +235,7 @@ org.javassist javassist - 3.29.1-GA + 3.29.2-GA junit From e36b00d45c9b1842a143382483f27d55f01cd561 Mon Sep 17 00:00:00 2001 From: Youssouf Naciri Date: Fri, 23 Sep 2022 15:13:34 +0200 Subject: [PATCH 43/51] Fix for issue #34 (#37) * rework generated doc part to import images the right way (wip) * import images data in the final doc before adding content from the generated doc part sub documents * prepare next snapshot for testing Co-authored-by: Youssouf Naciri --- pom.xml | 8 +- .../repeat/RepeatDocPartProcessor.java | 21 +-- .../docxstamper/util/DocumentUtil.java | 170 ++++++++++++++++++ .../docxstamper/RepeatDocPartTest.java | 4 +- .../RepeatDocPartWithImageTest.java | 48 +++++ .../RepeatDocPartWithImageTest.docx | Bin 0 -> 16623 bytes .../wickedsource/docxstamper/butterfly.png | Bin 0 -> 193586 bytes .../org/wickedsource/docxstamper/map.jpg | Bin 0 -> 407519 bytes 8 files changed, 238 insertions(+), 13 deletions(-) create mode 100644 src/main/java/org/wickedsource/docxstamper/util/DocumentUtil.java create mode 100644 src/test/java/org/wickedsource/docxstamper/RepeatDocPartWithImageTest.java create mode 100644 src/test/resources/org/wickedsource/docxstamper/RepeatDocPartWithImageTest.docx create mode 100644 src/test/resources/org/wickedsource/docxstamper/butterfly.png create mode 100644 src/test/resources/org/wickedsource/docxstamper/map.jpg diff --git a/pom.xml b/pom.xml index cd4926fa..41c4e920 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 pro.verron docx-stamper - 1.4.6 + 1.4.7-SNAPSHOT jar docx-stamper @@ -263,6 +263,12 @@ 2.3.2 compile + + org.springframework + spring-context + 5.3.14 + test + diff --git a/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatDocPartProcessor.java b/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatDocPartProcessor.java index 4078ae0a..a007e554 100644 --- a/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatDocPartProcessor.java +++ b/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatDocPartProcessor.java @@ -13,6 +13,7 @@ import org.wickedsource.docxstamper.processor.BaseCommentProcessor; import org.wickedsource.docxstamper.util.CommentUtil; import org.wickedsource.docxstamper.util.CommentWrapper; +import org.wickedsource.docxstamper.util.DocumentUtil; import org.wickedsource.docxstamper.util.ParagraphUtil; import java.io.ByteArrayInputStream; @@ -27,8 +28,6 @@ public class RepeatDocPartProcessor extends BaseCommentProcessor implements IRep private Map> repeatElementsMap = new HashMap<>(); private Map subTemplates = new HashMap<>(); private Map gcpMap = new HashMap<>(); - private Map insertIndex = new HashMap<>(); - private final ObjectFactory objectFactory; public RepeatDocPartProcessor(DocxStamperConfiguration config) { @@ -54,7 +53,6 @@ public void repeatDocPart(List contexts) { subContexts.put(currentCommentWrapper, contexts); subTemplates.put(currentCommentWrapper, extractSubTemplate(currentCommentWrapper, repeatElements)); gcpMap.put(currentCommentWrapper, gcp); - insertIndex.put(currentCommentWrapper, gcp.getContent().indexOf(repeatElements.get(0))); repeatElementsMap.put(currentCommentWrapper, repeatElements); } catch (InvalidFormatException e) { throw new RuntimeException(e); @@ -73,9 +71,8 @@ public void commitChanges(WordprocessingMLPackage document) { for (CommentWrapper commentWrapper : subContexts.keySet()) { List expressionContexts = subContexts.get(commentWrapper); - List changes = new ArrayList<>(); - - Integer index = insertIndex.get(commentWrapper); + // index changes after each replacement so we need to get the insert index at the right moment. + Integer index = gcpMap.get(commentWrapper).getContent().indexOf(repeatElementsMap.get(commentWrapper).get(0)); if (expressionContexts != null) { for (Object subContext : expressionContexts) { @@ -85,19 +82,24 @@ public void commitChanges(WordprocessingMLPackage document) { ByteArrayOutputStream output = new ByteArrayOutputStream(); stamper.stamp(subTemplate, subContext, output); WordprocessingMLPackage subDocument = WordprocessingMLPackage.load(new ByteArrayInputStream(output.toByteArray())); - changes.addAll(subDocument.getMainDocumentPart().getContent()); + try { + List changes = DocumentUtil.prepareDocumentForInsert(subDocument, document); + document.getMainDocumentPart().getContent().addAll(index, changes); + index += changes.size(); + } catch (Exception e) { + throw new RuntimeException("Unexpected error occured ! Skipping this comment", e); + } } catch (Docx4JException e) { throw new RuntimeException(e); } } } else if (config.isReplaceNullValues() && config.getNullValuesDefault() != null) { - changes.add(ParagraphUtil.create(config.getNullValuesDefault())); + document.getMainDocumentPart().getContent().add(index, ParagraphUtil.create(config.getNullValuesDefault())); } ContentAccessor gcp = gcpMap.get(commentWrapper); CommentUtil.deleteComment(commentWrapper); gcp.getContent().removeAll(repeatElementsMap.get(commentWrapper)); - gcp.getContent().addAll(index, changes); } } @@ -105,7 +107,6 @@ public void commitChanges(WordprocessingMLPackage document) { public void reset() { subContexts = new HashMap<>(); subTemplates = new HashMap<>(); - insertIndex = new HashMap<>(); gcpMap = new HashMap<>(); repeatElementsMap = new HashMap<>(); } diff --git a/src/main/java/org/wickedsource/docxstamper/util/DocumentUtil.java b/src/main/java/org/wickedsource/docxstamper/util/DocumentUtil.java new file mode 100644 index 00000000..b00ad4f8 --- /dev/null +++ b/src/main/java/org/wickedsource/docxstamper/util/DocumentUtil.java @@ -0,0 +1,170 @@ +package org.wickedsource.docxstamper.util; + +import org.docx4j.dml.Graphic; +import org.docx4j.dml.wordprocessingDrawing.Inline; +import org.docx4j.openpackaging.exceptions.Docx4JException; +import org.docx4j.openpackaging.packages.WordprocessingMLPackage; +import org.docx4j.openpackaging.parts.Part; +import org.docx4j.wml.ContentAccessor; +import org.docx4j.wml.Drawing; +import org.docx4j.wml.R; +import org.wickedsource.docxstamper.replace.typeresolver.image.ImageResolver; + +import javax.xml.bind.JAXBElement; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; + +public class DocumentUtil { + /** + * Recursively walk through the content accessor to replace embedded images and import the matching + * files to the destination document before importing content. + * + * @param sourceDocument document to import. + * @param destDocument document to add the source document content to. + * @return the whole content of the source document with imported images replaced. + * @throws Exception + */ + public static List prepareDocumentForInsert(WordprocessingMLPackage sourceDocument, WordprocessingMLPackage destDocument) throws Exception { + return walkObjects(sourceDocument.getMainDocumentPart(), sourceDocument, destDocument); + } + + /** + * Recursively walk through the content accessor to replace embedded images and import the matching + * files to the destination document. + * + * @param sourceContainer source container to walk. + * @param sourceDocument source document containing image files. + * @param destDocument destination document to add image files to. + * @return the list of imported objects from the source container. + * @throws Exception + */ + private static List walkObjects(ContentAccessor sourceContainer, WordprocessingMLPackage sourceDocument, WordprocessingMLPackage destDocument) throws Exception { + List result = new ArrayList<>(); + for (Object obj : sourceContainer.getContent()) { + if (obj instanceof R && isImageRun((R) obj)) { + byte[] imageData = getRunDrawingData((R) obj, sourceDocument); + // TODO : retrieve filename, altText and width from source document + result.add(ImageResolver.createRunWithImage(destDocument, imageData, null, null, null)); + } else if (obj instanceof ContentAccessor) { + List importedChildren = walkObjects((ContentAccessor) obj, sourceDocument, destDocument); + ((ContentAccessor) obj).getContent().clear(); + ((ContentAccessor) obj).getContent().addAll(importedChildren); + result.add(obj); + } else { + result.add(obj); + } + } + return result; + } + + /** + * Extract an image bytes from an embedded image run. + * + * @param run run containing the embedded drawing. + * @param document document to read the file from. + * @return + * @throws Docx4JException + * @throws IOException + */ + private static byte[] getRunDrawingData(R run, WordprocessingMLPackage document) throws Docx4JException, IOException { + for (Object runElement : run.getContent()) { + if (runElement instanceof JAXBElement && ((JAXBElement) runElement).getValue() instanceof Drawing) { + Drawing drawing = (Drawing) ((JAXBElement) runElement).getValue(); + byte[] imageData = getImageData(document, drawing); + return imageData; + } + } + throw new RuntimeException("Run drawing not found !"); + } + + /** + * Retrieve an image bytes from the document part store. + * + * @param document document to read the file from. + * @param drawing drawing embedding the image. + * @return + * @throws IOException + * @throws Docx4JException + */ + private static byte[] getImageData(WordprocessingMLPackage document, Drawing drawing) throws IOException, Docx4JException { + String imageRelId = getImageRelationshipId(drawing); + Part imageRelPart = document.getMainDocumentPart().getRelationshipsPart().getPart(imageRelId); + // TODO : find a better way to find image rel part name in source part store + String imageRelPartName = imageRelPart.getPartName().getName().substring(1); + byte[] imageData = streamToByteArray( + document.getSourcePartStore().getPartSize(imageRelPartName), + document.getSourcePartStore().loadPart(imageRelPartName) + ); + return imageData; + } + + /** + * Check if a run contains an embedded image. + * + * @param run + * @return true if the run contains an image, false otherwise. + */ + private static boolean isImageRun(R run) { + for (Object runElement : run.getContent()) { + if (runElement instanceof JAXBElement && ((JAXBElement) runElement).getValue() instanceof Drawing) { + return true; + } + } + return false; + } + + /** + * Retrieve an embedded drawing relationship id. + * + * @param drawing the drawing to get the relationship id. + * @return + */ + private static String getImageRelationshipId(Drawing drawing) { + Graphic graphic = getInlineGraphic(drawing); + return graphic.getGraphicData().getPic().getBlipFill().getBlip().getEmbed(); + } + + /** + * Extract an inline graphic from a drawing. + * + * @param drawing the drawing containing the graphic. + * @return + */ + private static Graphic getInlineGraphic(Drawing drawing) { + if (drawing.getAnchorOrInline().isEmpty()) { + throw new RuntimeException("Anchor or Inline is empty !"); + } + Object anchorOrInline = drawing.getAnchorOrInline().get(0); + if (anchorOrInline instanceof Inline) { + Inline inline = ((Inline) anchorOrInline); + return inline.getGraphic(); + } else { + throw new RuntimeException("Don't know how to process anchor !"); + } + } + + /** + * Converts an InputStream to byte array. + * + * @param size expected size of the byte array. + * @param is input stream to read data from. + * @return the data from the input stream. + * @throws IOException + */ + private static byte[] streamToByteArray(long size, InputStream is) throws IOException { + if (size > Integer.MAX_VALUE) { + throw new RuntimeException("Image size exceeds maximum allowed (2GB)"); + } + int intSize = (int) size; + byte[] data = new byte[intSize]; + int offset = 0; + int numRead; + while ((numRead = is.read(data, offset, intSize - offset)) > 0) { + offset += numRead; + } + is.close(); + return data; + } +} diff --git a/src/test/java/org/wickedsource/docxstamper/RepeatDocPartTest.java b/src/test/java/org/wickedsource/docxstamper/RepeatDocPartTest.java index cb5fb608..aa93c4d7 100644 --- a/src/test/java/org/wickedsource/docxstamper/RepeatDocPartTest.java +++ b/src/test/java/org/wickedsource/docxstamper/RepeatDocPartTest.java @@ -36,7 +36,7 @@ public void test() throws Docx4JException, IOException { int index = 2; // skip init paragraphs for (Character character : context.getCharacters()) { - for (int j=0; j < 3; j++) { // 3 elements should be repeated + for (int j = 0; j < 3; j++) { // 3 elements should be repeated Object object = XmlUtils.unwrap(documentContent.get(index++)); switch (j) { case 0: { @@ -65,7 +65,7 @@ protected void onTableCell(Tc tableCell) { List runs = paragraph.getContent(); Assert.assertEquals(2, runs.size()); - List targetRunContent = ((R)runs.get(1)).getContent(); + List targetRunContent = ((R) runs.get(1)).getContent(); Assert.assertEquals(1, targetRunContent.size()); Assert.assertTrue(targetRunContent.get(0) instanceof Br); break; diff --git a/src/test/java/org/wickedsource/docxstamper/RepeatDocPartWithImageTest.java b/src/test/java/org/wickedsource/docxstamper/RepeatDocPartWithImageTest.java new file mode 100644 index 00000000..ea35e9a2 --- /dev/null +++ b/src/test/java/org/wickedsource/docxstamper/RepeatDocPartWithImageTest.java @@ -0,0 +1,48 @@ +package org.wickedsource.docxstamper; + +import org.docx4j.openpackaging.exceptions.Docx4JException; +import org.docx4j.openpackaging.packages.WordprocessingMLPackage; +import org.junit.Assert; +import org.junit.Test; +import org.springframework.context.expression.MapAccessor; +import org.springframework.expression.spel.support.StandardEvaluationContext; +import org.wickedsource.docxstamper.replace.typeresolver.image.Image; + +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class RepeatDocPartWithImageTest extends AbstractDocx4jTest { + @Test + public void shouldImportImageDataInTheMainDocument() throws Docx4JException, IOException { + List images = new ArrayList<>(); + images.add(new Image(getClass().getResourceAsStream("butterfly.png"))); + images.add(new Image(getClass().getResourceAsStream("map.jpg"))); + + Map context = new HashMap<>(); + ArrayList units = new ArrayList<>(); + + images.forEach(image -> { + Map unit = new HashMap<>(); + Map productionFacility = new HashMap<>(); + unit.put("productionFacility", productionFacility); + productionFacility.put("coverImage", image); + units.add(unit); + }); + + context.put("units", units); + + DocxStamperConfiguration config = new DocxStamperConfiguration() + .setEvaluationContextConfigurer((StandardEvaluationContext ctx) -> ctx.addPropertyAccessor(new MapAccessor())); + + InputStream template = getClass().getResourceAsStream("RepeatDocPartWithImageTest.docx"); + WordprocessingMLPackage document = stampAndLoad(template, context, config); + + Assert.assertEquals(images.get(0).getImageBytes().length, document.getSourcePartStore().getPartSize("word/media/document_image_rId11.png")); + Assert.assertEquals(images.get(1).getImageBytes().length, document.getSourcePartStore().getPartSize("word/media/document_image_rId12.jpeg")); + Assert.assertEquals(images.get(0).getImageBytes().length, document.getSourcePartStore().getPartSize("word/media/document_image_rId13.png")); + } +} diff --git a/src/test/resources/org/wickedsource/docxstamper/RepeatDocPartWithImageTest.docx b/src/test/resources/org/wickedsource/docxstamper/RepeatDocPartWithImageTest.docx new file mode 100644 index 0000000000000000000000000000000000000000..034743c4f8a0a84658c6651ec22c390bbf853576 GIT binary patch literal 16623 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 Sep)FcAVfgN=Lql5tN#zc0H!to literal 0 HcmV?d00001 diff --git a/src/test/resources/org/wickedsource/docxstamper/butterfly.png b/src/test/resources/org/wickedsource/docxstamper/butterfly.png new file mode 100644 index 0000000000000000000000000000000000000000..134b9ef62bb01f3577d858ba97938891d864466d GIT binary patch literal 193586 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
RH#K&o;}HYcrRD%)K^G$DIN`N*JCN$}| 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⪼m<>tqeXO}iB;5xq0*@G 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%0Dr%N7-BnLL?;M>B)bm**ZPt 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 z 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 literal 0 HcmV?d00001 diff --git a/src/test/resources/org/wickedsource/docxstamper/map.jpg b/src/test/resources/org/wickedsource/docxstamper/map.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e986c9a2bebde81e19d488874a5b9afb61976754 GIT binary patch literal 407519 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

Ectp>ybW^Xm- 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 z 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

aWn{`dHyX$OGymS?aiE0 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 y;k8#pxv^>Wlf$rc*ormn?HRp?@I%%={0NMw@;B literal 0 HcmV?d00001 From d076fdf05d00259d2ec8f7e2dfc4fa1cd18cb9bd Mon Sep 17 00:00:00 2001 From: Joseph Verron <3975735+josephverron@users.noreply.github.com> Date: Fri, 23 Sep 2022 15:40:54 +0200 Subject: [PATCH 44/51] make manual publish possible (#38) Co-authored-by: Joseph Verron --- .github/workflows/release.yml | 1 + README.md | 67 +++++++++-------------------------- 2 files changed, 18 insertions(+), 50 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 392cebad..bd3678f5 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -2,6 +2,7 @@ name: Publish package to the Maven Central Repository on: release: types: [created] + workflow_dispatch: jobs: publish: runs-on: ubuntu-latest diff --git a/README.md b/README.md index 00673cb7..005ed042 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # docx-stamper -[![Build Status](https://travis-ci.org/thombergs/docx-stamper.png?branch=master)](https://travis-ci.org/thombergs/docx-stamper) +[![Build Status](https://github.com/verronpro/docx-stamper/actions/workflows/maven.yml/badge.svg)](https://github.com/verronpro/docx-stamper/actions/workflows/maven.yml) docx-stamper is a Java template engine for docx documents. You create a template .docx document with your favorite word processor and feed it to a DocxStamper instance to create a document based on the template at runtime. Example code: @@ -20,12 +20,12 @@ The main feature of docx-stamper is **replacement of expressions** within the te The value an expression resolves to may be of the following types: -| Type of expression value | Effect | -| ---|---| -| java.lang.Object | The expression is replaced by the String representation of the object (`String.valueOf()`). -| java.lang.String | The expression is replaced with the String value.| -| java.util.Date | The expression is replaced by a formatted Date string (by default "dd.MM.yyyy"). You can change the format string by registering your own [DateResolver](src/main/java/org/wickedsource/docxstamper/replace/typeresolver/DateResolver.java).| -| [org.wickedsource.docxstamper...Image](src/main/java/org/wickedsource/docxstamper/replace/typeresolver/image/Image.java) | The expression is replaced with an inline image.| +| Type of expression value | Effect | +|--------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| java.lang.Object | The expression is replaced by the String representation of the object (`String.valueOf()`). | +| java.lang.String | The expression is replaced with the String value. | +| java.util.Date | The expression is replaced by a formatted Date string (by default "dd.MM.yyyy"). You can change the format string by registering your own [DateResolver](src/main/java/org/wickedsource/docxstamper/replace/typeresolver/DateResolver.java). | +| [org.wickedsource.docxstamper...Image](src/main/java/org/wickedsource/docxstamper/replace/typeresolver/image/Image.java) | The expression is replaced with an inline image. | If an expression cannot be resolved successfully, it will be skipped (meaning the expression stays in the document as it was in the template). To support more than the above types you can implement your own [TypeResolver](src/main/java/org/wickedsource/docxstamper/api/typeresolver/ITypeResolver.java). To register your own TypeResolver with docx-stamper, use the following code: @@ -76,14 +76,14 @@ public static class UppercaseFunctionImpl implements UppercaseFunction { ## Conditional Display and Repeating of Elements Besides replacing expressions, docx-stamper can **process comments on paragraphs of text** in the template .docx document and do manipulations on the template based on these comments. By default, you can use the following expressions in comments: -| Expression in .docx comment | Effect | -| --------------------------------- |---------| -| `displayParagraphIf(boolean)` | The commented paragraph is only displayed in the resulting .docx document if the boolean condition resolves to `true`.| -| `displayTableRowIf(boolean)` | The table row surrounding the commented paragraph is only displayed in the resulting .docx document if the boolean condition resolves to `true`.| -| `displayTableIf(boolean)` | The whole table surrounding the commented paragraph is only displayed in the resulting .docx document if the boolean condition resolves to `true`.| -| `repeatTableRow(List)` | The table row surrounding the commented paragraph is copied once for each object in the passed-in list. Expressions found in the cells of the table row are evaluated against the object from the list. -| `repeatDocPart(List)` | Repeats the part of the document surrounded by the comment. The document part is copied once for each object in the passed-in list. Expressions found in the elements of the document part are evaluated against the object from the list. Can be used instead repeatTableRow and repeatParagraph if you want to repeat more than table rows and paragraphs. -| `replaceWordWith(expression)` | Replaces the commented word (must be a single word!) with the value of the given expression. | +| Expression in .docx comment | Effect | +|--------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `displayParagraphIf(boolean)` | The commented paragraph is only displayed in the resulting .docx document if the boolean condition resolves to `true`. | +| `displayTableRowIf(boolean)` | The table row surrounding the commented paragraph is only displayed in the resulting .docx document if the boolean condition resolves to `true`. | +| `displayTableIf(boolean)` | The whole table surrounding the commented paragraph is only displayed in the resulting .docx document if the boolean condition resolves to `true`. | +| `repeatTableRow(List)` | The table row surrounding the commented paragraph is copied once for each object in the passed-in list. Expressions found in the cells of the table row are evaluated against the object from the list. | +| `repeatDocPart(List)` | Repeats the part of the document surrounded by the comment. The document part is copied once for each object in the passed-in list. Expressions found in the elements of the document part are evaluated against the object from the list. Can be used instead repeatTableRow and repeatParagraph if you want to repeat more than table rows and paragraphs. | +| `replaceWordWith(expression)` | Replaces the commented word (must be a single word!) with the value of the given expression. | If a comment cannot be processed, by default an exception will be thrown. Successfully processed comments are removed from the document. You can add support to more expressions in comments by implementing your own [ICommentProcessor](src/main/java/org/wickedsource/docxstamper/api/commentprocessor/ICommentProcessor.java). To register you comment processor to docx-stamper, use the following code: @@ -101,7 +101,7 @@ For an in-depth description of how to create a comment processor, see the javado The docx file format does not allow comments in Headers or Footers of a document. To be able to conditionally display content in a header or footer, simply surround the expression you would put in a comment with "#{}" and put it at the beginning of the paragraph you want to manipulate. The expression will be evaluated as it would be in a comment. ## Error Handling -By default DocxStamper fails with an UnresolvedExpressionException if an expression within the document or within the comments cannot be resolved successfully. If you want to change this behavior, you can do the following: +By default, DocxStamper fails with an UnresolvedExpressionException if an expression within the document or within the comments cannot be resolved successfully. If you want to change this behavior, you can do the following: ```java DocxStamper stamper = new DocxStamperConfiguration() @@ -142,40 +142,7 @@ Note that as of version 1.4.0 you have to provide the dependency to your version ``` -This way, you can choose which version of Docx4J you want to use instead having it dictated by docx-stamper. Look into -the [.travis.yml](.travis.yml) file to see against which versions of Docx4J docx-stamper has been tested. - -## Changelog -* 1.4.0 (2019-09-20) - feature release - * [issues](https://github.com/thombergs/docx-stamper/issues?q=is%3Aissue+milestone%3A1.4.0+is%3Aclosed) - * [pull requests](https://github.com/thombergs/docx-stamper/pulls?utf8=%E2%9C%93&q=is%3Apr+is%3Aclosed+milestone%3A1.4.0+) -* 1.3.0 (2018-08-11) - feature release - * [issues](https://github.com/thombergs/docx-stamper/issues?q=is%3Aissue+milestone%3A1.3.0+is%3Aclosed) - * [pull requests](https://github.com/thombergs/docx-stamper/pulls?utf8=%E2%9C%93&q=is%3Apr+is%3Aclosed+milestone%3A1.3.0+) -* 1.2.2 (2017-12-31) - [minor feature release](https://github.com/thombergs/docx-stamper/issues?q=is%3Aissue+milestone%3A1.2.2+is%3Aclosed) -* 1.2.1 (2017-10-18) - [bugfix release](https://github.com/thombergs/docx-stamper/issues?q=is%3Aissue+milestone%3A1.2.1+is%3Aclosed) -* 1.2.0 (2017-09-26) - [feature release](https://github.com/thombergs/docx-stamper/issues?q=is%3Aissue+milestone%3A1.2.0+is%3Aclosed) -* 1.1.0 (2017-09-18) - [feature release](https://github.com/thombergs/docx-stamper/issues?q=is%3Aissue+milestone%3A1.1.0+is%3Aclosed) - * *API Break:* All methods that configure `DocxStamper` have been moved into `DocxStamperConfiguration`. - * *API Break:* Methods `getCommentProcessorRegistry()` and `getTypeResolverRegistry()` have been removed from `DocxStamper`. You can - configure CommentProcessors and TypeResolvers via `DocxStamperConfiguration` now. - * `DocxStamperConfiguration` can now be used as a Builder for `DocxStamper` objects. -* 1.0.12 (2017-09-08) - [bugfix release](https://github.com/thombergs/docx-stamper/issues?q=is%3Aissue+milestone%3A1.0.12+is%3Aclosed) -* 1.0.11 (2017-06-09) - [bugfix release](https://github.com/thombergs/docx-stamper/issues?q=is%3Aissue+milestone%3A1.0.11+is%3Aclosed) -* 1.0.10 (2017-04-03) - [bugfix release](https://github.com/thombergs/docx-stamper/issues?q=is%3Aissue+milestone%3A1.0.10+is%3Aclosed) -* 1.0.9 (2017-03-18) - [bugfix release](https://github.com/thombergs/docx-stamper/issues?q=is%3Aissue+milestone%3A1.0.9+is%3Aclosed) -* 1.0.8 (2017-02-24) - [minor feature release](https://github.com/thombergs/docx-stamper/issues?q=is%3Aissue+milestone%3A1.0.8+is%3Aclosed) -* 1.0.7 (2017-01-30) - [bugfix release](https://github.com/thombergs/docx-stamper/issues?q=is%3Aissue+milestone%3A1.0.7+is%3Aclosed) -* 1.0.6 (2017-01-20) - [minor feature release](/issues?q=is%3Aissue+milestone%3A1.0.6+is%3Aclosed) -* 1.0.5 (2017-01-09) - bugfix release -* 1.0.4 (2016-11-20) - [bugfix release](https://github.com/thombergs/docx-stamper/issues?q=is%3Aissue+milestone%3A1.0.4+is%3Aclosed) -* 1.0.3 (2016-11-05) - [bugfix release](https://github.com/thombergs/docx-stamper/issues?q=is%3Aissue+milestone%3A1.0.3+is%3Aclosed) -* 1.0.2 (2016-10-02) - [bugfix release](https://github.com/thombergs/docx-stamper/issues?q=is%3Aissue+milestone%3A1.0.2+is%3Aclosed) +This way, you can choose which version of Docx4J you want to use instead having it dictated by docx-stamper. ## Contribute If you have an issue or created a comment processor or type resolver that you think deserves to be part of the default distribution, feel free to open an issue or - even better - a pull request with your contribution. - -## Frequently Asked Questions -See the [Frequently Asked Questions](/wiki/Frequently-Asked-Questions) wiki page for some answers to recurring questions. - - From a923ddc14a01d3817a58db0be5cb9452e7b5de0e Mon Sep 17 00:00:00 2001 From: Youssouf Naciri Date: Fri, 23 Sep 2022 17:36:45 +0200 Subject: [PATCH 45/51] fixed introduced regression in 1.4.7-SNAPSHOT (#39) Co-authored-by: Youssouf Naciri --- .../processor/repeat/RepeatDocPartProcessor.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatDocPartProcessor.java b/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatDocPartProcessor.java index a007e554..96ec5a21 100644 --- a/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatDocPartProcessor.java +++ b/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatDocPartProcessor.java @@ -72,7 +72,8 @@ public void commitChanges(WordprocessingMLPackage document) { List expressionContexts = subContexts.get(commentWrapper); // index changes after each replacement so we need to get the insert index at the right moment. - Integer index = gcpMap.get(commentWrapper).getContent().indexOf(repeatElementsMap.get(commentWrapper).get(0)); + ContentAccessor insertParentContentAccessor = gcpMap.get(commentWrapper); + Integer index = insertParentContentAccessor.getContent().indexOf(repeatElementsMap.get(commentWrapper).get(0)); if (expressionContexts != null) { for (Object subContext : expressionContexts) { @@ -84,7 +85,7 @@ public void commitChanges(WordprocessingMLPackage document) { WordprocessingMLPackage subDocument = WordprocessingMLPackage.load(new ByteArrayInputStream(output.toByteArray())); try { List changes = DocumentUtil.prepareDocumentForInsert(subDocument, document); - document.getMainDocumentPart().getContent().addAll(index, changes); + insertParentContentAccessor.getContent().addAll(index, changes); index += changes.size(); } catch (Exception e) { throw new RuntimeException("Unexpected error occured ! Skipping this comment", e); @@ -94,12 +95,11 @@ public void commitChanges(WordprocessingMLPackage document) { } } } else if (config.isReplaceNullValues() && config.getNullValuesDefault() != null) { - document.getMainDocumentPart().getContent().add(index, ParagraphUtil.create(config.getNullValuesDefault())); + insertParentContentAccessor.getContent().add(index, ParagraphUtil.create(config.getNullValuesDefault())); } - ContentAccessor gcp = gcpMap.get(commentWrapper); CommentUtil.deleteComment(commentWrapper); - gcp.getContent().removeAll(repeatElementsMap.get(commentWrapper)); + insertParentContentAccessor.getContent().removeAll(repeatElementsMap.get(commentWrapper)); } } From e1329d9e628fc12edbb59d0db72364f2865588c6 Mon Sep 17 00:00:00 2001 From: Joseph Verron <3975735+josephverron@users.noreply.github.com> Date: Fri, 23 Sep 2022 18:11:32 +0200 Subject: [PATCH 46/51] 1.4.7 (#41) Co-authored-by: Joseph Verron --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 41c4e920..b4e332d2 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 pro.verron docx-stamper - 1.4.7-SNAPSHOT + 1.4.7 jar docx-stamper From 2100d6cd4cdbc3a6ddb7136dc672986384d17866 Mon Sep 17 00:00:00 2001 From: Thomas Oster Date: Fri, 23 Sep 2022 18:14:15 +0200 Subject: [PATCH 47/51] Feature: Replace text in text-boxes (#36) Co-authored-by: Thomas Oster --- .../docxstamper/util/ParagraphUtil.java | 23 +++++++++++ .../util/walk/CoordinatesWalker.java | 4 ++ .../ExpressionReplacementInTextBoxesTest.java | 37 ++++++++++++++++++ .../ExpressionReplacementInTextBoxesTest.docx | Bin 0 -> 6281 bytes 4 files changed, 64 insertions(+) create mode 100644 src/test/java/org/wickedsource/docxstamper/ExpressionReplacementInTextBoxesTest.java create mode 100644 src/test/resources/org/wickedsource/docxstamper/ExpressionReplacementInTextBoxesTest.docx diff --git a/src/main/java/org/wickedsource/docxstamper/util/ParagraphUtil.java b/src/main/java/org/wickedsource/docxstamper/util/ParagraphUtil.java index fb06994a..b17f66cd 100644 --- a/src/main/java/org/wickedsource/docxstamper/util/ParagraphUtil.java +++ b/src/main/java/org/wickedsource/docxstamper/util/ParagraphUtil.java @@ -1,6 +1,12 @@ package org.wickedsource.docxstamper.util; +import java.util.ArrayList; +import java.util.List; +import org.docx4j.TraversalUtil; +import org.docx4j.finders.ClassFinder; import org.docx4j.jaxb.Context; +import org.docx4j.openpackaging.packages.WordprocessingMLPackage; +import org.docx4j.wml.CTTxbxContent; import org.docx4j.wml.ObjectFactory; import org.docx4j.wml.P; import org.docx4j.wml.R; @@ -28,5 +34,22 @@ public static P create(String... texts) { return p; } + /** + * Finds all Paragraphs in a Document which are in a TextBox + * @param document + * @return + */ + public static List getAllTextBoxes(WordprocessingMLPackage document) { + ClassFinder finder = new ClassFinder(P.class); // docx4j class + //necessary even if not used + new TraversalUtil(document.getMainDocumentPart().getContent(),finder); // docx4j class + ArrayList result = new ArrayList<>(finder.results.size()); + for (Object o : finder.results) { + if (o instanceof P && ((P) o).getParent() instanceof CTTxbxContent) { + result.add(o); + } + } + return result; + } } diff --git a/src/main/java/org/wickedsource/docxstamper/util/walk/CoordinatesWalker.java b/src/main/java/org/wickedsource/docxstamper/util/walk/CoordinatesWalker.java index 30b95bb2..34e0b4d7 100644 --- a/src/main/java/org/wickedsource/docxstamper/util/walk/CoordinatesWalker.java +++ b/src/main/java/org/wickedsource/docxstamper/util/walk/CoordinatesWalker.java @@ -13,6 +13,7 @@ import javax.xml.bind.JAXBElement; import java.util.ArrayList; import java.util.List; +import org.wickedsource.docxstamper.util.ParagraphUtil; public abstract class CoordinatesWalker { @@ -35,6 +36,9 @@ public void walk() { // walk through elements in main document part walkContent(document.getMainDocumentPart().getContent()); + + // walk through textboxes in main document + walkContent(ParagraphUtil.getAllTextBoxes(document)); // walk through elements in headers List footerRelationships = getRelationshipsOfType(document, Namespaces.FOOTER); diff --git a/src/test/java/org/wickedsource/docxstamper/ExpressionReplacementInTextBoxesTest.java b/src/test/java/org/wickedsource/docxstamper/ExpressionReplacementInTextBoxesTest.java new file mode 100644 index 00000000..d45ed342 --- /dev/null +++ b/src/test/java/org/wickedsource/docxstamper/ExpressionReplacementInTextBoxesTest.java @@ -0,0 +1,37 @@ +package org.wickedsource.docxstamper; + +import org.docx4j.openpackaging.exceptions.Docx4JException; +import org.docx4j.openpackaging.packages.WordprocessingMLPackage; +import org.docx4j.wml.P; +import org.junit.Assert; +import org.junit.Test; +import org.wickedsource.docxstamper.context.NameContext; +import org.wickedsource.docxstamper.util.ParagraphWrapper; + +import java.io.IOException; +import java.io.InputStream; +import org.wickedsource.docxstamper.util.ParagraphUtil; + +public class ExpressionReplacementInTextBoxesTest extends AbstractDocx4jTest { + + @Test + public void test() throws Docx4JException, IOException { + NameContext context = new NameContext(); + context.setName("Bart Simpson"); + InputStream template = getClass().getResourceAsStream("ExpressionReplacementInTextBoxesTest.docx"); + WordprocessingMLPackage document = stampAndLoad(template, context); + resolvedExpressionsAreReplacedInFirstLevelTextBox(document); + unresolvedExpressionsAreNotReplacedInFirstTextBox(document); + } + + private void resolvedExpressionsAreReplacedInFirstLevelTextBox(WordprocessingMLPackage document) { + P nameParagraph = (P) ParagraphUtil.getAllTextBoxes(document).get(0); + Assert.assertEquals("Bart Simpson", new ParagraphWrapper(nameParagraph).getText()); + } + + private void unresolvedExpressionsAreNotReplacedInFirstTextBox(WordprocessingMLPackage document) { + P nameParagraph = (P) ParagraphUtil.getAllTextBoxes(document).get(2); + Assert.assertEquals("${foo}", new ParagraphWrapper(nameParagraph).getText()); + } + +} diff --git a/src/test/resources/org/wickedsource/docxstamper/ExpressionReplacementInTextBoxesTest.docx b/src/test/resources/org/wickedsource/docxstamper/ExpressionReplacementInTextBoxesTest.docx new file mode 100644 index 0000000000000000000000000000000000000000..83227cf8e463907f9da81f2c98ea574288e26796 GIT binary patch literal 6281 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 literal 0 HcmV?d00001 From fc1ab14c332080e46ccd1a37dbe8f73e27fb6f0c Mon Sep 17 00:00:00 2001 From: Joseph Verron <3975735+josephverron@users.noreply.github.com> Date: Tue, 10 Jan 2023 12:32:59 +0100 Subject: [PATCH 48/51] Fix/context method access (#112) * working on a test for #109 * fixed configuration attribute FailOnUnresolvedExpression ignored by ParagraphRepeatProcessor * removed proxy utilization in favor of MethodResolver and MethodExecutor unified reading configuration from different classes instead of copying them * extracted MethodExecutor from MethodResolver for fine tuning according to runtime configuration renamed CommentProcessorMethodResolver.java since it resolves expression context methods too * removed unused configuration from DisplayIfProcessor fixed StandardMethodResolver when method arguments resolve to null value to make it match any type * removed writing docx result to disk in favor of assertions in unit test Co-authored-by: Youssouf Naciri --- pom.xml | 2 +- .../wickedsource/docxstamper/DocxStamper.java | 59 +-- .../docxstamper/DocxStamperConfiguration.java | 12 +- .../docxstamper/el/ExpressionResolver.java | 18 +- .../el/StandardMethodExecutor.java | 35 ++ .../el/StandardMethodResolver.java | 72 ++++ .../processor/CommentProcessorRegistry.java | 346 ++++++++---------- .../displayif/DisplayIfProcessor.java | 5 +- .../repeat/ParagraphRepeatProcessor.java | 8 +- .../processor/repeat/RepeatProcessor.java | 16 +- .../docxstamper/proxy/ProxyBuilder.java | 75 ---- .../docxstamper/proxy/ProxyException.java | 9 - .../docxstamper/proxy/ProxyMethodHandler.java | 51 --- .../replace/PlaceholderReplacer.java | 130 +++---- .../docxstamper/AbstractDocx4jTest.java | 4 +- .../ConditionalDisplayOfTablesBug32Test.java | 1 + .../LeaveEmptyOnExpressionErrorTest.java | 45 +-- ...ssorAndReflectivePropertyAccessorTest.java | 58 +++ .../docxstamper/MultiStampTest.java | 100 ++--- .../proxy/ProxyMethodHandlerTest.java | 45 --- ...ssorAndReflectivePropertyAccessorTest.docx | Bin 0 -> 17242 bytes 21 files changed, 474 insertions(+), 617 deletions(-) create mode 100644 src/main/java/org/wickedsource/docxstamper/el/StandardMethodExecutor.java create mode 100644 src/main/java/org/wickedsource/docxstamper/el/StandardMethodResolver.java delete mode 100644 src/main/java/org/wickedsource/docxstamper/proxy/ProxyBuilder.java delete mode 100644 src/main/java/org/wickedsource/docxstamper/proxy/ProxyException.java delete mode 100644 src/main/java/org/wickedsource/docxstamper/proxy/ProxyMethodHandler.java create mode 100644 src/test/java/org/wickedsource/docxstamper/MapAccessorAndReflectivePropertyAccessorTest.java delete mode 100644 src/test/java/org/wickedsource/docxstamper/proxy/ProxyMethodHandlerTest.java create mode 100644 src/test/resources/org/wickedsource/docxstamper/MapAccessorAndReflectivePropertyAccessorTest.docx diff --git a/pom.xml b/pom.xml index b4e332d2..7e5b88d2 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 pro.verron docx-stamper - 1.4.7 + 1.4.7-fix jar docx-stamper diff --git a/src/main/java/org/wickedsource/docxstamper/DocxStamper.java b/src/main/java/org/wickedsource/docxstamper/DocxStamper.java index 22702581..aaec1799 100644 --- a/src/main/java/org/wickedsource/docxstamper/DocxStamper.java +++ b/src/main/java/org/wickedsource/docxstamper/DocxStamper.java @@ -2,7 +2,6 @@ import org.docx4j.openpackaging.packages.WordprocessingMLPackage; import org.wickedsource.docxstamper.api.DocxStamperException; -import org.wickedsource.docxstamper.api.commentprocessor.ICommentProcessor; import org.wickedsource.docxstamper.api.typeresolver.ITypeResolver; import org.wickedsource.docxstamper.api.typeresolver.TypeResolverRegistry; import org.wickedsource.docxstamper.el.ExpressionResolver; @@ -12,7 +11,6 @@ import org.wickedsource.docxstamper.processor.repeat.*; import org.wickedsource.docxstamper.processor.replaceExpression.IReplaceWithProcessor; import org.wickedsource.docxstamper.processor.replaceExpression.ReplaceWithProcessor; -import org.wickedsource.docxstamper.proxy.ProxyBuilder; import org.wickedsource.docxstamper.replace.PlaceholderReplacer; import org.wickedsource.docxstamper.replace.typeresolver.DateResolver; import org.wickedsource.docxstamper.replace.typeresolver.FallbackResolver; @@ -34,7 +32,7 @@ */ public class DocxStamper { - private PlaceholderReplacer placeholderReplacer; + private PlaceholderReplacer placeholderReplacer; private CommentProcessorRegistry commentProcessorRegistry; @@ -59,27 +57,17 @@ private void initFields() { typeResolverRegistry.registerTypeResolver(entry.getKey(), entry.getValue()); } - ExpressionResolver expressionResolver = new ExpressionResolver(config.getEvaluationContextConfigurer()); - placeholderReplacer = new PlaceholderReplacer<>(typeResolverRegistry, config.getLineBreakPlaceholder()); - placeholderReplacer.setExpressionResolver(expressionResolver); - placeholderReplacer.setLeaveEmptyOnExpressionError(config.isLeaveEmptyOnExpressionError()); - placeholderReplacer.setReplaceNullValues(config.isReplaceNullValues()); - placeholderReplacer.setNullValuesDefault(config.getNullValuesDefault()); - placeholderReplacer.setReplaceUnresolvedExpressions(config.isReplaceUnresolvedExpressions()); - placeholderReplacer.setUnresolvedExpressionsDefaultValue(config.getUnresolvedExpressionsDefaultValue()); + ExpressionResolver expressionResolver = new ExpressionResolver(config); + placeholderReplacer = new PlaceholderReplacer(typeResolverRegistry, config); - commentProcessorRegistry = new CommentProcessorRegistry(placeholderReplacer); + config.getCommentProcessors().put(IRepeatProcessor.class, new RepeatProcessor(typeResolverRegistry, config)); + config.getCommentProcessors().put(IParagraphRepeatProcessor.class, new ParagraphRepeatProcessor(typeResolverRegistry, config)); + config.getCommentProcessors().put(IRepeatDocPartProcessor.class, new RepeatDocPartProcessor(config)); + config.getCommentProcessors().put(IDisplayIfProcessor.class, new DisplayIfProcessor()); + config.getCommentProcessors().put(IReplaceWithProcessor.class, new ReplaceWithProcessor(config)); + + commentProcessorRegistry = new CommentProcessorRegistry(placeholderReplacer, config); commentProcessorRegistry.setExpressionResolver(expressionResolver); - commentProcessorRegistry.setFailOnInvalidExpression(config.isFailOnUnresolvedExpression()); - commentProcessorRegistry.registerCommentProcessor(IRepeatProcessor.class, new RepeatProcessor(typeResolverRegistry, expressionResolver, config)); - commentProcessorRegistry.registerCommentProcessor(IParagraphRepeatProcessor.class, new ParagraphRepeatProcessor(typeResolverRegistry, expressionResolver, config)); - commentProcessorRegistry.registerCommentProcessor(IRepeatDocPartProcessor.class, new RepeatDocPartProcessor(config)); - commentProcessorRegistry.registerCommentProcessor(IDisplayIfProcessor.class, new DisplayIfProcessor(config)); - commentProcessorRegistry.registerCommentProcessor(IReplaceWithProcessor.class, - new ReplaceWithProcessor(config)); - for (Map.Entry, ICommentProcessor> entry : config.getCommentProcessors().entrySet()) { - commentProcessorRegistry.registerCommentProcessor(entry.getKey(), entry.getValue()); - } } /** @@ -137,9 +125,8 @@ public void stamp(InputStream template, T contextRoot, OutputStream out) throws */ public void stamp(WordprocessingMLPackage document, T contextRoot, OutputStream out) throws DocxStamperException { try { - ProxyBuilder proxyBuilder = addCustomInterfacesToContextRoot(contextRoot, this.config.getExpressionFunctions()); - processComments(document, proxyBuilder); - replaceExpressions(document, proxyBuilder); + processComments(document, contextRoot); + replaceExpressions(document, contextRoot); document.save(out); commentProcessorRegistry.reset(); } catch (DocxStamperException e) { @@ -149,26 +136,12 @@ public void stamp(WordprocessingMLPackage document, T contextRoot, OutputStream } } - private ProxyBuilder addCustomInterfacesToContextRoot(T contextRoot, Map, Object> interfacesToImplementations) { - ProxyBuilder proxyBuilder = new ProxyBuilder() - .withRoot(contextRoot); - if (interfacesToImplementations.isEmpty()) { - return proxyBuilder; - } - for (Map.Entry, Object> entry : interfacesToImplementations.entrySet()) { - Class interfaceClass = entry.getKey(); - Object implementation = entry.getValue(); - proxyBuilder.withInterface(interfaceClass, implementation); - } - return proxyBuilder; - } - - private void replaceExpressions(WordprocessingMLPackage document, ProxyBuilder proxyBuilder) { - placeholderReplacer.resolveExpressions(document, proxyBuilder); + private void replaceExpressions(WordprocessingMLPackage document, T contextObject) { + placeholderReplacer.resolveExpressions(document, contextObject); } - private void processComments(final WordprocessingMLPackage document, ProxyBuilder proxyBuilder) { - commentProcessorRegistry.runProcessors(document, proxyBuilder); + private void processComments(final WordprocessingMLPackage document, T contextObject) { + commentProcessorRegistry.runProcessors(document, contextObject); } } diff --git a/src/main/java/org/wickedsource/docxstamper/DocxStamperConfiguration.java b/src/main/java/org/wickedsource/docxstamper/DocxStamperConfiguration.java index 94c7dc5f..d19a1603 100644 --- a/src/main/java/org/wickedsource/docxstamper/DocxStamperConfiguration.java +++ b/src/main/java/org/wickedsource/docxstamper/DocxStamperConfiguration.java @@ -30,13 +30,13 @@ public class DocxStamperConfiguration { private String nullValuesDefault = null; - private Map, ICommentProcessor> commentProcessors = new HashMap<>(); + private final Map, Object> commentProcessors = new HashMap<>(); - private Map, ITypeResolver> typeResolvers = new HashMap<>(); + private final Map, ITypeResolver> typeResolvers = new HashMap<>(); private ITypeResolver defaultTypeResolver = new FallbackResolver(); - private Map, Object> expressionFunctions = new HashMap<>(); + private final Map, Object> expressionFunctions = new HashMap<>(); /** * The String provided as lineBreakPlaceholder will be replaces with a line break @@ -176,15 +176,15 @@ public DocxStamper build() { return new DocxStamper(this); } - EvaluationContextConfigurer getEvaluationContextConfigurer() { + public EvaluationContextConfigurer getEvaluationContextConfigurer() { return evaluationContextConfigurer; } - boolean isFailOnUnresolvedExpression() { + public boolean isFailOnUnresolvedExpression() { return failOnUnresolvedExpression; } - Map, ICommentProcessor> getCommentProcessors() { + public Map, Object> getCommentProcessors() { return commentProcessors; } diff --git a/src/main/java/org/wickedsource/docxstamper/el/ExpressionResolver.java b/src/main/java/org/wickedsource/docxstamper/el/ExpressionResolver.java index 88c66ff3..729960f0 100644 --- a/src/main/java/org/wickedsource/docxstamper/el/ExpressionResolver.java +++ b/src/main/java/org/wickedsource/docxstamper/el/ExpressionResolver.java @@ -4,20 +4,15 @@ import org.springframework.expression.ExpressionParser; import org.springframework.expression.spel.standard.SpelExpressionParser; import org.springframework.expression.spel.support.StandardEvaluationContext; -import org.wickedsource.docxstamper.api.EvaluationContextConfigurer; +import org.wickedsource.docxstamper.DocxStamperConfiguration; public class ExpressionResolver { private static final ExpressionUtil expressionUtil = new ExpressionUtil(); + private final DocxStamperConfiguration configuration; - private final EvaluationContextConfigurer evaluationContextConfigurer; - - public ExpressionResolver() { - this.evaluationContextConfigurer = new NoOpEvaluationContextConfigurer(); - } - - public ExpressionResolver(EvaluationContextConfigurer evaluationContextConfigurer) { - this.evaluationContextConfigurer = evaluationContextConfigurer; + public ExpressionResolver(DocxStamperConfiguration configuration) { + this.configuration = configuration; } /** @@ -32,10 +27,9 @@ public Object resolveExpression(String expressionString, Object contextRoot) { expressionString = expressionUtil.stripExpression(expressionString); } ExpressionParser parser = new SpelExpressionParser(); - // TODO create a custom evaluation context to allow skipping the use of a proxy to inject processor methods - // processors methods should be registered as methodaccessors instead of added as proxy method on the context StandardEvaluationContext evaluationContext = new StandardEvaluationContext(contextRoot); - evaluationContextConfigurer.configureEvaluationContext(evaluationContext); + evaluationContext.addMethodResolver(new StandardMethodResolver(configuration)); + configuration.getEvaluationContextConfigurer().configureEvaluationContext(evaluationContext); Expression expression = parser.parseExpression(expressionString); return expression.getValue(evaluationContext); } diff --git a/src/main/java/org/wickedsource/docxstamper/el/StandardMethodExecutor.java b/src/main/java/org/wickedsource/docxstamper/el/StandardMethodExecutor.java new file mode 100644 index 00000000..3399afc8 --- /dev/null +++ b/src/main/java/org/wickedsource/docxstamper/el/StandardMethodExecutor.java @@ -0,0 +1,35 @@ +package org.wickedsource.docxstamper.el; + +import org.springframework.expression.AccessException; +import org.springframework.expression.EvaluationContext; +import org.springframework.expression.MethodExecutor; +import org.springframework.expression.TypedValue; +import org.wickedsource.docxstamper.DocxStamperConfiguration; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; + +public class StandardMethodExecutor implements MethodExecutor { + private final DocxStamperConfiguration configuration; + private final Method method; + private final Object implementation; + + public StandardMethodExecutor(DocxStamperConfiguration configuration, Method method, Object implementation) { + this.configuration = configuration; + this.method = method; + this.implementation = implementation; + } + + @Override + public TypedValue execute(EvaluationContext context, Object target, Object... arguments) throws AccessException { + try { + return new TypedValue(method.invoke(implementation, arguments)); + } catch (InvocationTargetException | IllegalAccessException e) { + if (configuration.isFailOnUnresolvedExpression()) { + throw new AccessException(String.format("Error calling method %s", method.getName()), e); + } else { + return new TypedValue(null); + } + } + } +} diff --git a/src/main/java/org/wickedsource/docxstamper/el/StandardMethodResolver.java b/src/main/java/org/wickedsource/docxstamper/el/StandardMethodResolver.java new file mode 100644 index 00000000..d0223ecb --- /dev/null +++ b/src/main/java/org/wickedsource/docxstamper/el/StandardMethodResolver.java @@ -0,0 +1,72 @@ +package org.wickedsource.docxstamper.el; + +import org.springframework.core.convert.TypeDescriptor; +import org.springframework.expression.AccessException; +import org.springframework.expression.EvaluationContext; +import org.springframework.expression.MethodExecutor; +import org.springframework.expression.MethodResolver; +import org.wickedsource.docxstamper.DocxStamperConfiguration; + +import java.lang.reflect.Method; +import java.util.AbstractMap; +import java.util.List; +import java.util.Map; + +public class StandardMethodResolver implements MethodResolver { + private final DocxStamperConfiguration configuration; + + public StandardMethodResolver(DocxStamperConfiguration configuration) { + this.configuration = configuration; + } + + @Override + public MethodExecutor resolve(EvaluationContext context, Object targetObject, String name, List argumentTypes) throws AccessException { + Map.Entry methodEntry = findCommentProcessorMethod(name, argumentTypes); + + if (methodEntry == null) { + methodEntry = findExpressionContextMethod(name, argumentTypes); + } + + if (methodEntry == null) return null; + + return new StandardMethodExecutor(configuration, methodEntry.getKey(), methodEntry.getValue()); + } + + private Map.Entry findCommentProcessorMethod(String expectedName, List expectedArguments) { + return findMethodInMap(configuration.getCommentProcessors(), expectedName, expectedArguments); + } + + private Map.Entry findExpressionContextMethod(String expectedName, List expectedArguments) { + return findMethodInMap(configuration.getExpressionFunctions(), expectedName, expectedArguments); + } + + private Map.Entry findMethodInMap(Map, Object> methodMap, String expectedName, List expectedArguments) { + for (Map.Entry, Object> entry : methodMap.entrySet()) { + Class iface = entry.getKey(); + + for (Method actualMethod : iface.getDeclaredMethods()) { + if (methodEquals(actualMethod, expectedName, expectedArguments)) { + return new AbstractMap.SimpleEntry<>(actualMethod, entry.getValue()); + } + } + } + + return null; + } + + private boolean methodEquals(Method actualMethod, String expectedName, List expectedArguments) { + if (!actualMethod.getName().equals(expectedName)) return false; + if (actualMethod.getParameterTypes().length != expectedArguments.size()) return false; + + for (int i = 0; i < expectedArguments.size(); i++) { + Class expectedType = expectedArguments.get(i) != null ? expectedArguments.get(i).getType() : null; + Class actualType = actualMethod.getParameterTypes()[i]; + // null is allowed in place of any type of argument + if (expectedType != null && !actualType.isAssignableFrom(expectedType)) { + return false; + } + } + + return true; + } +} diff --git a/src/main/java/org/wickedsource/docxstamper/processor/CommentProcessorRegistry.java b/src/main/java/org/wickedsource/docxstamper/processor/CommentProcessorRegistry.java index 201b3c4e..903b633d 100644 --- a/src/main/java/org/wickedsource/docxstamper/processor/CommentProcessorRegistry.java +++ b/src/main/java/org/wickedsource/docxstamper/processor/CommentProcessorRegistry.java @@ -6,15 +6,13 @@ import org.slf4j.LoggerFactory; import org.springframework.expression.spel.SpelEvaluationException; import org.springframework.expression.spel.SpelParseException; -import org.wickedsource.docxstamper.api.DocxStamperException; +import org.wickedsource.docxstamper.DocxStamperConfiguration; import org.wickedsource.docxstamper.api.UnresolvedExpressionException; import org.wickedsource.docxstamper.api.commentprocessor.ICommentProcessor; import org.wickedsource.docxstamper.api.coordinates.ParagraphCoordinates; import org.wickedsource.docxstamper.api.coordinates.RunCoordinates; import org.wickedsource.docxstamper.el.ExpressionResolver; import org.wickedsource.docxstamper.el.ExpressionUtil; -import org.wickedsource.docxstamper.proxy.ProxyBuilder; -import org.wickedsource.docxstamper.proxy.ProxyException; import org.wickedsource.docxstamper.replace.PlaceholderReplacer; import org.wickedsource.docxstamper.util.CommentUtil; import org.wickedsource.docxstamper.util.CommentWrapper; @@ -23,12 +21,7 @@ import org.wickedsource.docxstamper.util.walk.CoordinatesWalker; import java.math.BigInteger; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Optional; +import java.util.*; /** * Allows registration of ICommentProcessor objects. Each registered @@ -38,207 +31,178 @@ */ public class CommentProcessorRegistry { - private Logger logger = LoggerFactory.getLogger(CommentProcessorRegistry.class); + private final Logger logger = LoggerFactory.getLogger(CommentProcessorRegistry.class); + private final DocxStamperConfiguration configuration; - private Map> commentProcessorInterfaces = new HashMap<>(); + private ExpressionResolver expressionResolver; - private List commentProcessors = new ArrayList<>(); + private final ExpressionUtil expressionUtil = new ExpressionUtil(); - private ExpressionResolver expressionResolver = new ExpressionResolver(); + private final PlaceholderReplacer placeholderReplacer; - private ExpressionUtil expressionUtil = new ExpressionUtil(); - - private PlaceholderReplacer placeholderReplacer; + public CommentProcessorRegistry(PlaceholderReplacer placeholderReplacer, DocxStamperConfiguration configuration) { + this.placeholderReplacer = placeholderReplacer; + this.configuration = configuration; + this.expressionResolver = new ExpressionResolver(configuration); + } - private boolean failOnInvalidExpression = true; + public void setExpressionResolver(ExpressionResolver expressionResolver) { + this.expressionResolver = expressionResolver; + } - public CommentProcessorRegistry(PlaceholderReplacer placeholderReplacer) { - this.placeholderReplacer = placeholderReplacer; - } + /** + * Lets each registered ICommentProcessor have a run on the specified docx + * document. At the end of the document the commit method is called for each + * ICommentProcessor. The ICommentProcessors are run in the order they were + * registered. + * + * @param document the docx document over which to run the registered ICommentProcessors. + * @param expressionContext the context root object + */ + public void runProcessors(final WordprocessingMLPackage document, final T expressionContext) { + final Map comments = CommentUtil.getComments(document); + final List proceedComments = new ArrayList<>(); + + CoordinatesWalker walker = new BaseCoordinatesWalker(document) { + + @Override + protected void onParagraph(ParagraphCoordinates paragraphCoordinates) { + runProcessorsOnParagraphComment(document, comments, expressionContext, paragraphCoordinates) + .ifPresent(proceedComments::add); + runProcessorsOnInlineContent(expressionContext, paragraphCoordinates); + } + + @Override + protected void onRun(RunCoordinates runCoordinates, + ParagraphCoordinates paragraphCoordinates) { + runProcessorsOnRunComment(document, comments, expressionContext, paragraphCoordinates, runCoordinates) + .ifPresent(proceedComments::add); + } + + }; + walker.walk(); + + for (Object processor : configuration.getCommentProcessors().values()) { + ((ICommentProcessor) processor).commitChanges(document); + } + for (CommentWrapper commentWrapper : proceedComments) { + CommentUtil.deleteComment(commentWrapper); + } - public void setExpressionResolver(ExpressionResolver expressionResolver) { - this.expressionResolver = expressionResolver; - } + } - public void registerCommentProcessor(Class interfaceClass, - ICommentProcessor commentProcessor) { - this.commentProcessorInterfaces.put(commentProcessor, interfaceClass); - this.commentProcessors.add(commentProcessor); - } + /** + * Finds all processor expressions within the specified paragraph and tries + * to evaluate it against all registered {@link ICommentProcessor}s. + * + * @param expressionContext a builder for a proxy around the context root object to customize its interface + * @param paragraphCoordinates the paragraph to process. + * @param type of the context root object + */ + private void runProcessorsOnInlineContent(T expressionContext, + ParagraphCoordinates paragraphCoordinates) { + + ParagraphWrapper paragraph = new ParagraphWrapper(paragraphCoordinates.getParagraph()); + List processorExpressions = expressionUtil + .findProcessorExpressions(paragraph.getText()); + + for (String processorExpression : processorExpressions) { + String strippedExpression = expressionUtil.stripExpression(processorExpression); + + for (final Object processor : configuration.getCommentProcessors().values()) { + ((ICommentProcessor) processor).setCurrentParagraphCoordinates(paragraphCoordinates); + } + + try { + expressionResolver.resolveExpression(strippedExpression, expressionContext); + placeholderReplacer.replace(paragraph, processorExpression, null); + logger.debug(String.format( + "Processor expression '%s' has been successfully processed by a comment processor.", + processorExpression)); + } catch (SpelEvaluationException | SpelParseException e) { + if (configuration.isFailOnUnresolvedExpression()) { + throw new UnresolvedExpressionException(strippedExpression, e); + } else { + logger.warn(String.format( + "Skipping processor expression '%s' because it can not be resolved by any comment processor. Reason: %s. Set log level to TRACE to view Stacktrace.", + processorExpression, e.getMessage())); + logger.trace("Reason for skipping processor expression: ", e); + } + } + } + } - /** - * Lets each registered ICommentProcessor have a run on the specified docx - * document. At the end of the document the commit method is called for each - * ICommentProcessor. The ICommentProcessors are run in the order they were - * registered. - * - * @param document the docx document over which to run the registered ICommentProcessors. - * @param proxyBuilder a builder for a proxy around the context root object to customize its interface - * @param type of the contextRoot object. - */ - public void runProcessors(final WordprocessingMLPackage document, final ProxyBuilder proxyBuilder) { - final Map comments = CommentUtil.getComments(document); - final List proceedComments = new ArrayList<>(); - CoordinatesWalker walker = new BaseCoordinatesWalker(document) { + /** + * Takes the first comment on the specified paragraph and tries to evaluate + * the string within the comment against all registered + * {@link ICommentProcessor}s. + * + * @param document the word document. + * @param comments the comments within the document. + * @param expressionContext the context root object + * @param paragraphCoordinates the paragraph whose comments to evaluate. + * @param the type of the context root object. + */ + private Optional runProcessorsOnParagraphComment(final WordprocessingMLPackage document, + final Map comments, T expressionContext, + ParagraphCoordinates paragraphCoordinates) { + Comments.Comment comment = CommentUtil.getCommentFor(paragraphCoordinates.getParagraph(), document); + return runCommentProcessors(comments, expressionContext, comment, paragraphCoordinates, null); + } - @Override - protected void onParagraph(ParagraphCoordinates paragraphCoordinates) { - runProcessorsOnParagraphComment(document, comments, proxyBuilder, paragraphCoordinates) - .ifPresent(proceedComments::add); - runProcessorsOnInlineContent(proxyBuilder, paragraphCoordinates); - } + private Optional runProcessorsOnRunComment(final WordprocessingMLPackage document, + final Map comments, T expressionContext, + ParagraphCoordinates paragraphCoordinates, RunCoordinates runCoordinates) { + Comments.Comment comment = CommentUtil.getCommentAround(runCoordinates.getRun(), document); + return runCommentProcessors(comments, expressionContext, comment, paragraphCoordinates, runCoordinates); + } - @Override - protected void onRun(RunCoordinates runCoordinates, - ParagraphCoordinates paragraphCoordinates) { - runProcessorsOnRunComment(document, comments, proxyBuilder, paragraphCoordinates, runCoordinates) - .ifPresent(proceedComments::add); - } + private Optional runCommentProcessors(final Map comments, T expressionContext, + Comments.Comment comment, ParagraphCoordinates paragraphCoordinates, + RunCoordinates runCoordinates) { - }; - walker.walk(); + CommentWrapper commentWrapper = Optional.ofNullable(comment) + .map(Comments.Comment::getId) + .map(comments::get) + .orElse(null); - for (ICommentProcessor processor : commentProcessors) { - processor.commitChanges(document); - } - for (CommentWrapper commentWrapper : proceedComments) { - CommentUtil.deleteComment(commentWrapper); - } - - } - - /** - * Finds all processor expressions within the specified paragraph and tries - * to evaluate it against all registered {@link ICommentProcessor}s. - * - * @param proxyBuilder a builder for a proxy around the context root object to customize its interface - * @param paragraphCoordinates the paragraph to process. - * @param type of the context root object - */ - private void runProcessorsOnInlineContent(ProxyBuilder proxyBuilder, - ParagraphCoordinates paragraphCoordinates) { - - ParagraphWrapper paragraph = new ParagraphWrapper(paragraphCoordinates.getParagraph()); - List processorExpressions = expressionUtil - .findProcessorExpressions(paragraph.getText()); - - for (String processorExpression : processorExpressions) { - String strippedExpression = expressionUtil.stripExpression(processorExpression); - - for (final ICommentProcessor processor : commentProcessors) { - Class commentProcessorInterface = commentProcessorInterfaces.get(processor); - proxyBuilder.withInterface(commentProcessorInterface, processor); - processor.setCurrentParagraphCoordinates(paragraphCoordinates); - } - - try { - T contextRootProxy = proxyBuilder.build(); - expressionResolver.resolveExpression(strippedExpression, contextRootProxy); - placeholderReplacer.replace(paragraph, processorExpression, null); - logger.debug(String.format( - "Processor expression '%s' has been successfully processed by a comment processor.", - processorExpression)); - } catch (SpelEvaluationException | SpelParseException e) { - if (failOnInvalidExpression) { - throw new UnresolvedExpressionException(strippedExpression, e); - } else { - logger.warn(String.format( - "Skipping processor expression '%s' because it can not be resolved by any comment processor. Reason: %s. Set log level to TRACE to view Stacktrace.", - processorExpression, e.getMessage())); - logger.trace("Reason for skipping processor expression: ", e); + if (Objects.isNull(comment) || Objects.isNull(commentWrapper)) { + // no comment to process + return Optional.empty(); } - } catch (ProxyException e) { - throw new DocxStamperException("Could not create a proxy around context root object", e); - } - } - } - - - /** - * Takes the first comment on the specified paragraph and tries to evaluate - * the string within the comment against all registered - * {@link ICommentProcessor}s. - * - * @param document the word document. - * @param comments the comments within the document. - * @param proxyBuilder a builder for a proxy around the context root object to customize its interface - * @param paragraphCoordinates the paragraph whose comments to evaluate. - * @param the type of the context root object. - */ - private Optional runProcessorsOnParagraphComment(final WordprocessingMLPackage document, - final Map comments, ProxyBuilder proxyBuilder, - ParagraphCoordinates paragraphCoordinates) { - Comments.Comment comment = CommentUtil.getCommentFor(paragraphCoordinates.getParagraph(), document); - return runCommentProcessors(document, comments, proxyBuilder, comment, paragraphCoordinates, null); - } - - private Optional runProcessorsOnRunComment(final WordprocessingMLPackage document, - final Map comments, ProxyBuilder proxyBuilder, - ParagraphCoordinates paragraphCoordinates, RunCoordinates runCoordinates) { - Comments.Comment comment = CommentUtil.getCommentAround(runCoordinates.getRun(), document); - return runCommentProcessors(document, comments, proxyBuilder, comment, paragraphCoordinates, runCoordinates); - } - - private Optional runCommentProcessors(final WordprocessingMLPackage document, - final Map comments, ProxyBuilder proxyBuilder, - Comments.Comment comment, ParagraphCoordinates paragraphCoordinates, - RunCoordinates runCoordinates) { - - CommentWrapper commentWrapper = Optional.ofNullable(comment) - .map(Comments.Comment::getId) - .map(comments::get) - .orElse(null); - - if (Objects.isNull(comment) || Objects.isNull(commentWrapper)) { - // no comment to process - return Optional.empty(); - } - String commentString = CommentUtil.getCommentString(comment); + String commentString = CommentUtil.getCommentString(comment); - for (final ICommentProcessor processor : commentProcessors) { - Class commentProcessorInterface = commentProcessorInterfaces.get(processor); - proxyBuilder.withInterface(commentProcessorInterface, processor); - processor.setCurrentParagraphCoordinates(paragraphCoordinates); - processor.setCurrentRunCoordinates(runCoordinates); - processor.setCurrentCommentWrapper(commentWrapper); - } + for (final Object processor : configuration.getCommentProcessors().values()) { + ((ICommentProcessor) processor).setCurrentParagraphCoordinates(paragraphCoordinates); + ((ICommentProcessor) processor).setCurrentRunCoordinates(runCoordinates); + ((ICommentProcessor) processor).setCurrentCommentWrapper(commentWrapper); + } - try { - T contextRootProxy = proxyBuilder.build(); - expressionResolver.resolveExpression(commentString, contextRootProxy); - comments.remove(comment.getId()); // guarantee one-time processing - logger.debug( - String.format("Comment '%s' has been successfully processed by a comment processor.", - commentString)); - return Optional.of(commentWrapper); - } catch (SpelEvaluationException | SpelParseException e) { - if (failOnInvalidExpression) { - throw new UnresolvedExpressionException(commentString, e); - } else { - logger.warn(String.format( - "Skipping comment expression '%s' because it can not be resolved by any comment processor. Reason: %s. Set log level to TRACE to view Stacktrace.", - commentString, e.getMessage())); - logger.trace("Reason for skipping comment: ", e); - } - } catch (ProxyException e) { - throw new DocxStamperException("Could not create a proxy around context root object", e); + try { + expressionResolver.resolveExpression(commentString, expressionContext); + comments.remove(comment.getId()); // guarantee one-time processing + logger.debug( + String.format("Comment '%s' has been successfully processed by a comment processor.", + commentString)); + return Optional.of(commentWrapper); + } catch (SpelEvaluationException | SpelParseException e) { + if (configuration.isFailOnUnresolvedExpression()) { + throw new UnresolvedExpressionException(commentString, e); + } else { + logger.warn(String.format( + "Skipping comment expression '%s' because it can not be resolved by any comment processor. Reason: %s. Set log level to TRACE to view Stacktrace.", + commentString, e.getMessage())); + logger.trace("Reason for skipping comment: ", e); + } + } + return Optional.empty(); } - return Optional.empty(); - } - - public boolean isFailOnInvalidExpression() { - return failOnInvalidExpression; - } - public void setFailOnInvalidExpression(boolean failOnInvalidExpression) { - this.failOnInvalidExpression = failOnInvalidExpression; - } - - public void reset() { - for (ICommentProcessor processor : commentProcessors) { - processor.reset(); + public void reset() { + for (Object processor : configuration.getCommentProcessors().values()) { + ((ICommentProcessor) processor).reset(); + } } - } } diff --git a/src/main/java/org/wickedsource/docxstamper/processor/displayif/DisplayIfProcessor.java b/src/main/java/org/wickedsource/docxstamper/processor/displayif/DisplayIfProcessor.java index 0753c2cb..39a298c7 100644 --- a/src/main/java/org/wickedsource/docxstamper/processor/displayif/DisplayIfProcessor.java +++ b/src/main/java/org/wickedsource/docxstamper/processor/displayif/DisplayIfProcessor.java @@ -1,7 +1,6 @@ package org.wickedsource.docxstamper.processor.displayif; import org.docx4j.openpackaging.packages.WordprocessingMLPackage; -import org.wickedsource.docxstamper.DocxStamperConfiguration; import org.wickedsource.docxstamper.api.coordinates.ParagraphCoordinates; import org.wickedsource.docxstamper.api.coordinates.TableCoordinates; import org.wickedsource.docxstamper.api.coordinates.TableRowCoordinates; @@ -14,15 +13,13 @@ public class DisplayIfProcessor extends BaseCommentProcessor implements IDisplayIfProcessor { - private final DocxStamperConfiguration config; private List paragraphsToBeRemoved = new ArrayList<>(); private List tablesToBeRemoved = new ArrayList<>(); private List tableRowsToBeRemoved = new ArrayList<>(); - public DisplayIfProcessor(DocxStamperConfiguration config) { - this.config = config; + public DisplayIfProcessor() { } @Override diff --git a/src/main/java/org/wickedsource/docxstamper/processor/repeat/ParagraphRepeatProcessor.java b/src/main/java/org/wickedsource/docxstamper/processor/repeat/ParagraphRepeatProcessor.java index f7229aed..e03bb98f 100644 --- a/src/main/java/org/wickedsource/docxstamper/processor/repeat/ParagraphRepeatProcessor.java +++ b/src/main/java/org/wickedsource/docxstamper/processor/repeat/ParagraphRepeatProcessor.java @@ -9,7 +9,6 @@ import org.wickedsource.docxstamper.DocxStamperConfiguration; import org.wickedsource.docxstamper.api.coordinates.ParagraphCoordinates; import org.wickedsource.docxstamper.api.typeresolver.TypeResolverRegistry; -import org.wickedsource.docxstamper.el.ExpressionResolver; import org.wickedsource.docxstamper.processor.BaseCommentProcessor; import org.wickedsource.docxstamper.replace.PlaceholderReplacer; import org.wickedsource.docxstamper.util.CommentUtil; @@ -30,13 +29,12 @@ private static class ParagraphsToRepeat { private Map pToRepeat = new HashMap<>(); - private PlaceholderReplacer placeholderReplacer; + private final PlaceholderReplacer placeholderReplacer; private final DocxStamperConfiguration config; - public ParagraphRepeatProcessor(TypeResolverRegistry typeResolverRegistry, ExpressionResolver expressionResolver, DocxStamperConfiguration config) { - this.placeholderReplacer = new PlaceholderReplacer<>(typeResolverRegistry); + public ParagraphRepeatProcessor(TypeResolverRegistry typeResolverRegistry, DocxStamperConfiguration config) { + this.placeholderReplacer = new PlaceholderReplacer(typeResolverRegistry, config); this.config = config; - this.placeholderReplacer.setExpressionResolver(expressionResolver); } @Override diff --git a/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatProcessor.java b/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatProcessor.java index 33c44d27..4a9b781c 100644 --- a/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatProcessor.java +++ b/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatProcessor.java @@ -8,7 +8,6 @@ import org.wickedsource.docxstamper.api.coordinates.ParagraphCoordinates; import org.wickedsource.docxstamper.api.coordinates.TableRowCoordinates; import org.wickedsource.docxstamper.api.typeresolver.TypeResolverRegistry; -import org.wickedsource.docxstamper.el.ExpressionResolver; import org.wickedsource.docxstamper.processor.BaseCommentProcessor; import org.wickedsource.docxstamper.processor.CommentProcessingException; import org.wickedsource.docxstamper.replace.PlaceholderReplacer; @@ -24,19 +23,10 @@ public class RepeatProcessor extends BaseCommentProcessor implements IRepeatProc private Map> tableRowsToRepeat = new HashMap<>(); - private PlaceholderReplacer placeholderReplacer; - private final DocxStamperConfiguration config; + private final PlaceholderReplacer placeholderReplacer; - public RepeatProcessor(TypeResolverRegistry typeResolverRegistry, ExpressionResolver expressionResolver, DocxStamperConfiguration config) { - this.config = config; - - this.placeholderReplacer = new PlaceholderReplacer<>(typeResolverRegistry, config.getLineBreakPlaceholder()); - placeholderReplacer.setExpressionResolver(expressionResolver); - placeholderReplacer.setLeaveEmptyOnExpressionError(config.isLeaveEmptyOnExpressionError()); - placeholderReplacer.setReplaceNullValues(config.isReplaceNullValues()); - placeholderReplacer.setNullValuesDefault(config.getNullValuesDefault()); - placeholderReplacer.setReplaceUnresolvedExpressions(config.isReplaceUnresolvedExpressions()); - placeholderReplacer.setUnresolvedExpressionsDefaultValue(config.getUnresolvedExpressionsDefaultValue()); + public RepeatProcessor(TypeResolverRegistry typeResolverRegistry, DocxStamperConfiguration config) { + this.placeholderReplacer = new PlaceholderReplacer(typeResolverRegistry, config); } @Override diff --git a/src/main/java/org/wickedsource/docxstamper/proxy/ProxyBuilder.java b/src/main/java/org/wickedsource/docxstamper/proxy/ProxyBuilder.java deleted file mode 100644 index ca167321..00000000 --- a/src/main/java/org/wickedsource/docxstamper/proxy/ProxyBuilder.java +++ /dev/null @@ -1,75 +0,0 @@ -package org.wickedsource.docxstamper.proxy; - -import java.util.HashMap; -import java.util.Map; - -import javassist.util.proxy.ProxyFactory; - -/** - * Allows an object to be wrapped by a proxy so that it will implement additional interfaces. - * - * @param the type of the root object. - */ -public class ProxyBuilder { - - private T root; - - private Map, Object> interfacesToImplementations = new HashMap<>(); - - /** - * Specifies the root object for the proxy that shall be enhanced. - * - * @param rootObject the root object. - * @return this builder for chaining. - */ - public ProxyBuilder withRoot(T rootObject) { - this.root = rootObject; - return this; - } - - /** - * Specifies an interfaces and an implementation of an interface by which the root object - * shall be extended. - * - * @param interfaceClass the class of the interface - * @param interfaceImpl an implementation of the interface - * @return this builder for chaining. - */ - public ProxyBuilder withInterface(Class interfaceClass, Object interfaceImpl) { - this.interfacesToImplementations.put(interfaceClass, interfaceImpl); - return this; - } - - /** - * Creates a proxy object out of the specified root object and the specified interfaces - * and implementations. - * - * @return a proxy object that is still of type T but additionally implements all specified - * interfaces. - * @throws ProxyException if the proxy could not be created. - */ - public T build() throws ProxyException { - - if (this.root == null) { - throw new IllegalArgumentException("root must not be null!"); - } - - if (this.interfacesToImplementations.isEmpty()) { - // nothing to proxy - return this.root; - } - - try { - ProxyMethodHandler methodHandler = new ProxyMethodHandler(root, - interfacesToImplementations); - ProxyFactory proxyFactory = new ProxyFactory(); - proxyFactory.setSuperclass(root.getClass()); - proxyFactory.setInterfaces(interfacesToImplementations.keySet().toArray(new Class[]{})); - return (T) proxyFactory.create(new Class[0], new Object[0], methodHandler); - } catch (Exception e) { - throw new ProxyException(e); - } - } - - -} \ No newline at end of file diff --git a/src/main/java/org/wickedsource/docxstamper/proxy/ProxyException.java b/src/main/java/org/wickedsource/docxstamper/proxy/ProxyException.java deleted file mode 100644 index 176df66e..00000000 --- a/src/main/java/org/wickedsource/docxstamper/proxy/ProxyException.java +++ /dev/null @@ -1,9 +0,0 @@ -package org.wickedsource.docxstamper.proxy; - -public class ProxyException extends Exception { - - public ProxyException(Throwable cause) { - super(cause); - } - -} diff --git a/src/main/java/org/wickedsource/docxstamper/proxy/ProxyMethodHandler.java b/src/main/java/org/wickedsource/docxstamper/proxy/ProxyMethodHandler.java deleted file mode 100644 index 789ec410..00000000 --- a/src/main/java/org/wickedsource/docxstamper/proxy/ProxyMethodHandler.java +++ /dev/null @@ -1,51 +0,0 @@ -package org.wickedsource.docxstamper.proxy; - -import java.lang.reflect.Method; -import java.util.Map; - -import javassist.util.proxy.MethodHandler; - -public class ProxyMethodHandler implements MethodHandler { - - private final Object contextRoot; - - private final Map, Object> interfacesWithImplementations; - - public ProxyMethodHandler(Object root, - Map, Object> interfacesWithImplementations) { - this.contextRoot = root; - this.interfacesWithImplementations = interfacesWithImplementations; - for (Map.Entry, Object> entry : interfacesWithImplementations.entrySet()) { - Class interfaceClass = entry.getKey(); - Object implementation = entry.getValue(); - if (!interfaceClass.isAssignableFrom(implementation.getClass())) { - throw new IllegalArgumentException( - String.format("%s does not implement %s!", implementation, interfaceClass)); - } - } - } - - @Override - public Object invoke(Object o, Method method, Method method2, Object[] args) throws Throwable { - for (Map.Entry, Object> entry : interfacesWithImplementations.entrySet()) { - Class interfaceClass = entry.getKey(); - Object implementation = entry.getValue(); - if (methodCanBeHandledByInterface(method, interfaceClass)) { - return method.invoke(implementation, args); - } - } - - return method.invoke(contextRoot, args); - } - - public boolean methodCanBeHandledByInterface(Method method, Class interfaceClass) { - try { - interfaceClass.getMethod(method.getName(), method.getParameterTypes()); - // no exception, so we found the method we're looking for - return true; - } catch (NoSuchMethodException e) { - return false; - } - } - -} diff --git a/src/main/java/org/wickedsource/docxstamper/replace/PlaceholderReplacer.java b/src/main/java/org/wickedsource/docxstamper/replace/PlaceholderReplacer.java index 9118232f..8aa72400 100644 --- a/src/main/java/org/wickedsource/docxstamper/replace/PlaceholderReplacer.java +++ b/src/main/java/org/wickedsource/docxstamper/replace/PlaceholderReplacer.java @@ -9,14 +9,13 @@ import org.slf4j.LoggerFactory; import org.springframework.expression.spel.SpelEvaluationException; import org.springframework.expression.spel.SpelParseException; -import org.wickedsource.docxstamper.api.DocxStamperException; +import org.wickedsource.docxstamper.DocxStamperConfiguration; +import org.wickedsource.docxstamper.api.UnresolvedExpressionException; import org.wickedsource.docxstamper.api.coordinates.ParagraphCoordinates; import org.wickedsource.docxstamper.api.typeresolver.ITypeResolver; import org.wickedsource.docxstamper.api.typeresolver.TypeResolverRegistry; import org.wickedsource.docxstamper.el.ExpressionResolver; import org.wickedsource.docxstamper.el.ExpressionUtil; -import org.wickedsource.docxstamper.proxy.ProxyBuilder; -import org.wickedsource.docxstamper.proxy.ProxyException; import org.wickedsource.docxstamper.util.ParagraphWrapper; import org.wickedsource.docxstamper.util.RunUtil; import org.wickedsource.docxstamper.util.walk.BaseCoordinatesWalker; @@ -24,94 +23,43 @@ import java.util.List; -public class PlaceholderReplacer { +public class PlaceholderReplacer { - private Logger logger = LoggerFactory.getLogger(PlaceholderReplacer.class); + private final Logger logger = LoggerFactory.getLogger(PlaceholderReplacer.class); - private ExpressionUtil expressionUtil = new ExpressionUtil(); + private final ExpressionUtil expressionUtil = new ExpressionUtil(); - private ExpressionResolver expressionResolver = new ExpressionResolver(); + private final DocxStamperConfiguration configuration; - private TypeResolverRegistry typeResolverRegistry; + private final ExpressionResolver expressionResolver; - private String lineBreakPlaceholder; + private final TypeResolverRegistry typeResolverRegistry; - private boolean leaveEmptyOnExpressionError = false; - - private boolean replaceNullValues = false; - - private String nullValuesDefault = null; - - private boolean replaceUnresolvedExpressions = false; - - private String unresolvedExpressionsDefaultValue = null; - - public PlaceholderReplacer(TypeResolverRegistry typeResolverRegistry) { - this.typeResolverRegistry = typeResolverRegistry; - } - - public PlaceholderReplacer(TypeResolverRegistry typeResolverRegistry, String lineBreakPlaceholder) { + public PlaceholderReplacer(TypeResolverRegistry typeResolverRegistry, DocxStamperConfiguration configuration) { this.typeResolverRegistry = typeResolverRegistry; - this.lineBreakPlaceholder = lineBreakPlaceholder; - } - - public boolean isLeaveEmptyOnExpressionError() { - return leaveEmptyOnExpressionError; - } - - public void setLeaveEmptyOnExpressionError(boolean leaveEmptyOnExpressionError) { - this.leaveEmptyOnExpressionError = leaveEmptyOnExpressionError; - } - - public void setReplaceNullValues(boolean replaceNullValues) { - this.replaceNullValues = replaceNullValues; - } - - - public void setNullValuesDefault(String nullValuesDefault) { - this.nullValuesDefault = nullValuesDefault; - } - - public boolean isReplaceUnresolvedExpressions() { - return replaceUnresolvedExpressions; - } - - public void setReplaceUnresolvedExpressions(boolean replaceUnresolvedExpressions) { - this.replaceUnresolvedExpressions = replaceUnresolvedExpressions; - } - - public void setUnresolvedExpressionsDefaultValue(String unresolvedExpressionsDefaultValue) { - this.unresolvedExpressionsDefaultValue = unresolvedExpressionsDefaultValue; - } - - public void setExpressionResolver(ExpressionResolver expressionResolver) { - this.expressionResolver = expressionResolver; + this.configuration = configuration; + this.expressionResolver = new ExpressionResolver(configuration); } /** * Finds expressions in a document and resolves them against the specified context object. The expressions in the * document are then replaced by the resolved values. * - * @param document the document in which to replace all expressions. - * @param proxyBuilder builder for a proxy around the context root to customize its interface + * @param document the document in which to replace all expressions. + * @param expressionContext the context root */ - public void resolveExpressions(final WordprocessingMLPackage document, ProxyBuilder proxyBuilder) { - try { - final T expressionContext = proxyBuilder.build(); - CoordinatesWalker walker = new BaseCoordinatesWalker(document) { - @Override - protected void onParagraph(ParagraphCoordinates paragraphCoordinates) { - resolveExpressionsForParagraph(paragraphCoordinates.getParagraph(), expressionContext, document); - } - }; - walker.walk(); - } catch (ProxyException e) { - throw new DocxStamperException("could not create proxy around context root!", e); - } + public void resolveExpressions(final WordprocessingMLPackage document, Object expressionContext) { + CoordinatesWalker walker = new BaseCoordinatesWalker(document) { + @Override + protected void onParagraph(ParagraphCoordinates paragraphCoordinates) { + resolveExpressionsForParagraph(paragraphCoordinates.getParagraph(), expressionContext, document); + } + }; + walker.walk(); } @SuppressWarnings("unchecked") - public void resolveExpressionsForParagraph(P p, T expressionContext, WordprocessingMLPackage document) { + public void resolveExpressionsForParagraph(P p, Object expressionContext, WordprocessingMLPackage document) { ParagraphWrapper paragraphWrapper = new ParagraphWrapper(p); List placeholders = expressionUtil.findVariableExpressions(paragraphWrapper.getText()); for (String placeholder : placeholders) { @@ -122,26 +70,32 @@ public void resolveExpressionsForParagraph(P p, T expressionContext, Wordprocess Object replacementObject = resolver.resolve(document, replacement); replace(paragraphWrapper, placeholder, replacementObject); logger.debug(String.format("Replaced expression '%s' with value provided by TypeResolver %s", placeholder, resolver.getClass())); - } else if (replaceNullValues) { + } else if (configuration.isReplaceNullValues()) { ITypeResolver resolver = typeResolverRegistry.getDefaultResolver(); - Object replacementObject = resolver.resolve(document, nullValuesDefault); + Object replacementObject = resolver.resolve(document, configuration.getNullValuesDefault()); replace(paragraphWrapper, placeholder, replacementObject); logger.debug(String.format("Replaced expression '%s' with value provided by TypeResolver %s", placeholder, resolver.getClass())); } } catch (SpelEvaluationException | SpelParseException e) { - logger.warn(String.format( - "Expression %s could not be resolved against context root of type %s. Reason: %s. Set log level to TRACE to view Stacktrace.", - placeholder, expressionContext.getClass(), e.getMessage())); - logger.trace("Reason for skipping expression:", e); - - if (isLeaveEmptyOnExpressionError()) { - replace(paragraphWrapper, placeholder, null); - } else if (isReplaceUnresolvedExpressions()) { - replace(paragraphWrapper, placeholder, unresolvedExpressionsDefaultValue); + if (configuration.isFailOnUnresolvedExpression()) { + throw new UnresolvedExpressionException( + String.format("Expression %s could not be resolved against context root of type %s. Reason: %s. Set log level to TRACE to view Stacktrace.", placeholder, expressionContext.getClass(), e.getMessage()), + e); + } else { + logger.warn(String.format( + "Expression %s could not be resolved against context root of type %s. Reason: %s. Set log level to TRACE to view Stacktrace.", + placeholder, expressionContext.getClass(), e.getMessage())); + logger.trace("Reason for skipping expression:", e); + + if (configuration.isLeaveEmptyOnExpressionError()) { + replace(paragraphWrapper, placeholder, null); + } else if (configuration.isReplaceUnresolvedExpressions()) { + replace(paragraphWrapper, placeholder, configuration.getUnresolvedExpressionsDefaultValue()); + } } } } - if (this.lineBreakPlaceholder != null) { + if (configuration.getLineBreakPlaceholder() != null) { replaceLineBreaks(paragraphWrapper); } } @@ -149,8 +103,8 @@ public void resolveExpressionsForParagraph(P p, T expressionContext, Wordprocess private void replaceLineBreaks(ParagraphWrapper paragraphWrapper) { Br lineBreak = Context.getWmlObjectFactory().createBr(); R run = RunUtil.create(lineBreak); - while (paragraphWrapper.getText().contains(this.lineBreakPlaceholder)) { - replace(paragraphWrapper, this.lineBreakPlaceholder, run); + while (paragraphWrapper.getText().contains(configuration.getLineBreakPlaceholder())) { + replace(paragraphWrapper, configuration.getLineBreakPlaceholder(), run); } } diff --git a/src/test/java/org/wickedsource/docxstamper/AbstractDocx4jTest.java b/src/test/java/org/wickedsource/docxstamper/AbstractDocx4jTest.java index 4588f329..6fc89a57 100644 --- a/src/test/java/org/wickedsource/docxstamper/AbstractDocx4jTest.java +++ b/src/test/java/org/wickedsource/docxstamper/AbstractDocx4jTest.java @@ -12,7 +12,7 @@ */ public abstract class AbstractDocx4jTest { - private Logger logger = LoggerFactory.getLogger(AbstractDocx4jTest.class); + private final Logger logger = LoggerFactory.getLogger(AbstractDocx4jTest.class); private File tempFile; @@ -41,7 +41,7 @@ protected WordprocessingMLPackage saveAndLoadDocument(WordprocessingMLPackage do * object structure were really transported into the XML of the .docx file. */ protected WordprocessingMLPackage stampAndLoad(InputStream template, T contextRoot) throws IOException, Docx4JException { - return stampAndLoad(template, contextRoot, new DocxStamperConfiguration()); + return stampAndLoad(template, contextRoot, new DocxStamperConfiguration().setFailOnUnresolvedExpression(false)); } protected WordprocessingMLPackage stampAndLoad(InputStream template, T contextRoot, DocxStamperConfiguration config) throws IOException, Docx4JException { diff --git a/src/test/java/org/wickedsource/docxstamper/ConditionalDisplayOfTablesBug32Test.java b/src/test/java/org/wickedsource/docxstamper/ConditionalDisplayOfTablesBug32Test.java index fe853eca..60df53a7 100644 --- a/src/test/java/org/wickedsource/docxstamper/ConditionalDisplayOfTablesBug32Test.java +++ b/src/test/java/org/wickedsource/docxstamper/ConditionalDisplayOfTablesBug32Test.java @@ -10,6 +10,7 @@ import org.junit.Test; import org.wickedsource.docxstamper.context.NameContext; import org.wickedsource.docxstamper.util.ParagraphWrapper; + import javax.xml.bind.JAXBElement; import java.io.IOException; import java.io.InputStream; diff --git a/src/test/java/org/wickedsource/docxstamper/LeaveEmptyOnExpressionErrorTest.java b/src/test/java/org/wickedsource/docxstamper/LeaveEmptyOnExpressionErrorTest.java index ab83eada..63c7c2ae 100644 --- a/src/test/java/org/wickedsource/docxstamper/LeaveEmptyOnExpressionErrorTest.java +++ b/src/test/java/org/wickedsource/docxstamper/LeaveEmptyOnExpressionErrorTest.java @@ -1,9 +1,5 @@ package org.wickedsource.docxstamper; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; - import org.docx4j.openpackaging.exceptions.Docx4JException; import org.docx4j.openpackaging.packages.WordprocessingMLPackage; import org.docx4j.wml.P; @@ -12,25 +8,30 @@ import org.wickedsource.docxstamper.context.NameContext; import org.wickedsource.docxstamper.util.ParagraphWrapper; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; + public class LeaveEmptyOnExpressionErrorTest extends AbstractDocx4jTest { - @Test - public void test() throws Docx4JException, IOException { - NameContext context = new NameContext(); - context.setName("Homer Simpson"); - InputStream template = getClass().getResourceAsStream("LeaveEmptyOnExpressionErrorTest.docx"); - OutputStream out = getOutputStream(); - DocxStamper stamper = new DocxStamperConfiguration() - .leaveEmptyOnExpressionError(true) - .build(); - stamper.stamp(template, context, out); - InputStream in = getInputStream(out); - WordprocessingMLPackage document = WordprocessingMLPackage.load(in); - resolvedExpressionsAreReplaced(document); - } + @Test + public void test() throws Docx4JException, IOException { + NameContext context = new NameContext(); + context.setName("Homer Simpson"); + InputStream template = getClass().getResourceAsStream("LeaveEmptyOnExpressionErrorTest.docx"); + OutputStream out = getOutputStream(); + DocxStamper stamper = new DocxStamperConfiguration() + .setFailOnUnresolvedExpression(false) + .leaveEmptyOnExpressionError(true) + .build(); + stamper.stamp(template, context, out); + InputStream in = getInputStream(out); + WordprocessingMLPackage document = WordprocessingMLPackage.load(in); + resolvedExpressionsAreReplaced(document); + } - private void resolvedExpressionsAreReplaced(WordprocessingMLPackage document) { - P nameParagraph = (P) document.getMainDocumentPart().getContent().get(0); - Assert.assertEquals("Leave me empty .", new ParagraphWrapper(nameParagraph).getText()); - } + private void resolvedExpressionsAreReplaced(WordprocessingMLPackage document) { + P nameParagraph = (P) document.getMainDocumentPart().getContent().get(0); + Assert.assertEquals("Leave me empty .", new ParagraphWrapper(nameParagraph).getText()); + } } diff --git a/src/test/java/org/wickedsource/docxstamper/MapAccessorAndReflectivePropertyAccessorTest.java b/src/test/java/org/wickedsource/docxstamper/MapAccessorAndReflectivePropertyAccessorTest.java new file mode 100644 index 00000000..d3a11e78 --- /dev/null +++ b/src/test/java/org/wickedsource/docxstamper/MapAccessorAndReflectivePropertyAccessorTest.java @@ -0,0 +1,58 @@ +package org.wickedsource.docxstamper; + +import org.docx4j.openpackaging.exceptions.Docx4JException; +import org.docx4j.openpackaging.packages.WordprocessingMLPackage; +import org.docx4j.wml.P; +import org.docx4j.wml.R; +import org.docx4j.wml.Tbl; +import org.docx4j.wml.Text; +import org.junit.Assert; +import org.junit.Test; +import org.springframework.context.expression.MapAccessor; + +import javax.xml.bind.JAXBElement; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class MapAccessorAndReflectivePropertyAccessorTest extends AbstractDocx4jTest { + class Container { + public String value; + + public Container(String value) { + this.value = value; + } + } + + @Test + public void shouldResolveMapAndPropertyPlaceholders() throws Docx4JException, IOException { + List listProp = new ArrayList<>(); + listProp.add(new Container("first value")); + listProp.add(new Container("second value")); + + Map context = new HashMap<>(); + context.put("FLAT_STRING", "Flat string has been resolved"); + context.put("OBJECT_LIST_PROP", listProp); + + DocxStamperConfiguration config = new DocxStamperConfiguration() + .setFailOnUnresolvedExpression(false) + .setLineBreakPlaceholder("\n") + .replaceNullValues(true) + .nullValuesDefault("N/C") + .replaceUnresolvedExpressions(true) + .unresolvedExpressionsDefaultValue("N/C") + .setEvaluationContextConfigurer(ctx -> ctx.addPropertyAccessor(new MapAccessor())); + + InputStream template = getClass().getResourceAsStream("MapAccessorAndReflectivePropertyAccessorTest.docx"); + WordprocessingMLPackage result = stampAndLoad(template, context, config); + List contents = result.getMainDocumentPart().getContent(); + + Assert.assertEquals("Flat string has been resolved", ((Text) ((JAXBElement) ((R) ((P) contents.get(0)).getContent().get(1)).getContent().get(0)).getValue()).getValue()); + Assert.assertEquals(3, ((Tbl) ((JAXBElement) contents.get(2)).getValue()).getContent().size()); + Assert.assertEquals("first value", ((Text) ((JAXBElement) ((R) ((P) contents.get(6)).getContent().get(0)).getContent().get(0)).getValue()).getValue()); + Assert.assertEquals("second value", ((Text) ((JAXBElement) ((R) ((P) contents.get(9)).getContent().get(0)).getContent().get(0)).getValue()).getValue()); + } +} diff --git a/src/test/java/org/wickedsource/docxstamper/MultiStampTest.java b/src/test/java/org/wickedsource/docxstamper/MultiStampTest.java index 288db23e..68bc1d50 100644 --- a/src/test/java/org/wickedsource/docxstamper/MultiStampTest.java +++ b/src/test/java/org/wickedsource/docxstamper/MultiStampTest.java @@ -1,11 +1,5 @@ package org.wickedsource.docxstamper; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.util.ArrayList; -import java.util.List; - import org.docx4j.openpackaging.exceptions.Docx4JException; import org.docx4j.openpackaging.packages.WordprocessingMLPackage; import org.junit.Assert; @@ -14,59 +8,65 @@ import org.wickedsource.docxstamper.util.walk.BaseCoordinatesWalker; import org.wickedsource.docxstamper.util.walk.CoordinatesWalker; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.util.ArrayList; +import java.util.List; + public class MultiStampTest extends AbstractDocx4jTest { - @Test - public void expressionsAreResolvedOnMultiStamp() throws Docx4JException, IOException { - DocxStamper stamper = new DocxStamper(new DocxStamperConfiguration()); - NamesContext context = new NamesContext(); + @Test + public void expressionsAreResolvedOnMultiStamp() throws Docx4JException, IOException { + DocxStamper stamper = new DocxStamper(new DocxStamperConfiguration().setFailOnUnresolvedExpression(false)); + NamesContext context = new NamesContext(); - InputStream template = getClass().getResourceAsStream("MultiStampTest.docx"); - OutputStream out = getOutputStream(); - stamper.stamp(template, context, out); - InputStream in = getInputStream(out); - WordprocessingMLPackage document = WordprocessingMLPackage.load(in); - assertTableRows(document); + InputStream template = getClass().getResourceAsStream("MultiStampTest.docx"); + OutputStream out = getOutputStream(); + stamper.stamp(template, context, out); + InputStream in = getInputStream(out); + WordprocessingMLPackage document = WordprocessingMLPackage.load(in); + assertTableRows(document); - template = getClass().getResourceAsStream("MultiStampTest.docx"); - out = getOutputStream(); - stamper.stamp(template, context, out); - in = getInputStream(out); - document = WordprocessingMLPackage.load(in); - assertTableRows(document); - } + template = getClass().getResourceAsStream("MultiStampTest.docx"); + out = getOutputStream(); + stamper.stamp(template, context, out); + in = getInputStream(out); + document = WordprocessingMLPackage.load(in); + assertTableRows(document); + } - private void assertTableRows(WordprocessingMLPackage document) { - final List cells = new ArrayList<>(); - CoordinatesWalker cellWalker = new BaseCoordinatesWalker(document) { - @Override - protected void onTableCell(TableCellCoordinates tableCellCoordinates) { - cells.add(tableCellCoordinates); - } - }; - cellWalker.walk(); + private void assertTableRows(WordprocessingMLPackage document) { + final List cells = new ArrayList<>(); + CoordinatesWalker cellWalker = new BaseCoordinatesWalker(document) { + @Override + protected void onTableCell(TableCellCoordinates tableCellCoordinates) { + cells.add(tableCellCoordinates); + } + }; + cellWalker.walk(); - Assert.assertEquals(5, cells.size()); - } + Assert.assertEquals(5, cells.size()); + } - public static class NamesContext { - private List names = new ArrayList<>(); + public static class NamesContext { + private List names = new ArrayList<>(); - public NamesContext() { - this.names.add("Homer"); - this.names.add("Marge"); - this.names.add("Bart"); - this.names.add("Lisa"); - this.names.add("Maggie"); - } + public NamesContext() { + this.names.add("Homer"); + this.names.add("Marge"); + this.names.add("Bart"); + this.names.add("Lisa"); + this.names.add("Maggie"); + } - public List getNames() { - return names; - } + public List getNames() { + return names; + } - public void setNames(List names) { - this.names = names; - } - } + public void setNames(List names) { + this.names = names; + } + } } diff --git a/src/test/java/org/wickedsource/docxstamper/proxy/ProxyMethodHandlerTest.java b/src/test/java/org/wickedsource/docxstamper/proxy/ProxyMethodHandlerTest.java deleted file mode 100644 index b03ef46b..00000000 --- a/src/test/java/org/wickedsource/docxstamper/proxy/ProxyMethodHandlerTest.java +++ /dev/null @@ -1,45 +0,0 @@ -package org.wickedsource.docxstamper.proxy; - -import org.junit.Assert; -import org.junit.Test; -import org.springframework.expression.Expression; -import org.springframework.expression.ExpressionParser; -import org.springframework.expression.spel.standard.SpelExpressionParser; -import org.springframework.expression.spel.support.StandardEvaluationContext; -import org.wickedsource.docxstamper.api.typeresolver.TypeResolverRegistry; -import org.wickedsource.docxstamper.context.NameContext; -import org.wickedsource.docxstamper.processor.CommentProcessorRegistry; -import org.wickedsource.docxstamper.replace.PlaceholderReplacer; -import org.wickedsource.docxstamper.replace.typeresolver.FallbackResolver; - -public class ProxyMethodHandlerTest { - - private PlaceholderReplacer placeholderReplacer = new PlaceholderReplacer(new TypeResolverRegistry(new FallbackResolver())); - - @Test - public void proxyDelegatesToRegisteredCommentProcessors() throws Exception { - - CommentProcessorRegistry processorRegistry = new CommentProcessorRegistry(placeholderReplacer); - processorRegistry.registerCommentProcessor(ITestInterface.class, new TestImpl()); - - NameContext contextRoot = new NameContext(); - contextRoot.setName("Tom"); - NameContext context = new ProxyBuilder() - .withRoot(contextRoot) - .withInterface(ITestInterface.class, new TestImpl()) - .build(); - - ExpressionParser parser = new SpelExpressionParser(); - StandardEvaluationContext evaluationContext = new StandardEvaluationContext(context); - - Expression nameExpression = parser.parseExpression("name"); - String name = (String) nameExpression.getValue(evaluationContext); - - Expression methodExpression = parser.parseExpression("returnString(name)"); - String returnStringResult = (String) methodExpression.getValue(evaluationContext); - - Assert.assertEquals("Tom", returnStringResult); - Assert.assertEquals("Tom", name); - } - -} \ No newline at end of file diff --git a/src/test/resources/org/wickedsource/docxstamper/MapAccessorAndReflectivePropertyAccessorTest.docx b/src/test/resources/org/wickedsource/docxstamper/MapAccessorAndReflectivePropertyAccessorTest.docx new file mode 100644 index 0000000000000000000000000000000000000000..de2c92d52030fbade6d30a485c189f4df29b76c2 GIT binary patch literal 17242 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 IhY9lk0F4amP5=M^ literal 0 HcmV?d00001 From 8eee1a825a00349b3b7d3a38e3f0b351f6886a6e Mon Sep 17 00:00:00 2001 From: Joseph Verron <3975735+josephverron@users.noreply.github.com> Date: Tue, 10 Jan 2023 12:36:07 +0100 Subject: [PATCH 49/51] Update pom.xml --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 7e5b88d2..7e292430 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 pro.verron docx-stamper - 1.4.7-fix + 1.5.0-javax jar docx-stamper From 3ca0f5cbd5dea2d6299628ce4d948b992dfe8ebe Mon Sep 17 00:00:00 2001 From: Youssouf Naciri Date: Thu, 19 Jan 2023 17:22:54 +0100 Subject: [PATCH 50/51] added unit test for the failing use case (#116) BREAKING CHANGE * changed the way of adding comment processors, users give interfaces and class, not instances * all comment processors have the same constructor signature NEW FEATURE * added TableResolver to the standard list of resolvers * added documentation in the README for resolveTable processor NON-BREAKING CHANGE * fixed image bug and corresponding unit test in repeatDocPart * renamed some utility methods and make them public * changed exception messages in comment gathering to make errors more readable * added missing use cases in DocumentWalker (run at Tc level was ignored by it) * added a setDocument method on comment processor so that they can access the StoreParts * harmonize comments removal over all comments processors * fixed some bugs in RepeatDocPartProcessor detection of bounds for the part to repeat * fixed issue with comment range removal for repeatDocPart * fixed issue with comment range references removal for Tr copies for repeatTableRow * fixed issue with comment range references removal for P copies for repeatParagraph * added copy method on DocxStamperConfiguration * added DocxStamperConfiguration copy method for repeatDocPart * removed comment anchors from copied paragraphs in ParagraphRepeatProcessor * added a test case mixing repeatDocPart with repeatTableRow to ensure comment processor instances isolation --- README.md | 140 +++++++++++------- pom.xml | 2 +- .../wickedsource/docxstamper/DocxStamper.java | 35 +++-- .../docxstamper/DocxStamperConfiguration.java | 57 ++++++- .../commentprocessor/ICommentProcessor.java | 11 +- .../processor/BaseCommentProcessor.java | 76 ++++++---- .../processor/CommentProcessorRegistry.java | 9 +- .../displayif/DisplayIfProcessor.java | 5 +- .../repeat/IRepeatDocPartProcessor.java | 2 +- .../repeat/ParagraphRepeatProcessor.java | 17 +-- .../repeat/RepeatDocPartProcessor.java | 99 +++++++++---- .../processor/repeat/RepeatProcessor.java | 18 ++- .../ReplaceWithProcessor.java | 14 +- .../processor/table/ITableResolver.java | 5 + .../processor/table/StampTable.java | 36 +++++ .../processor/table/TableResolver.java | 135 +++++++++++++++++ .../typeresolver/image/ImageResolver.java | 2 +- .../docxstamper/util/CommentUtil.java | 66 ++++++--- .../docxstamper/util/DocumentUtil.java | 8 +- .../docxstamper/util/walk/DocumentWalker.java | 32 ++-- .../CustomCommentProcessorTest.java | 28 +++- ...PartAndCommentProcessorsIsolationTest.java | 96 ++++++++++++ .../RepeatDocPartWithImagesInSourceTest.java | 67 +++++++++ .../docxstamper/proxy/TestImpl.java | 45 +++--- ...PartAndCommentProcessorsIsolationTest.docx | Bin 0 -> 21113 bytes .../RepeatDocPartWithImagesInSourceTest.docx | Bin 0 -> 210695 bytes 26 files changed, 790 insertions(+), 215 deletions(-) create mode 100644 src/main/java/org/wickedsource/docxstamper/processor/table/ITableResolver.java create mode 100644 src/main/java/org/wickedsource/docxstamper/processor/table/StampTable.java create mode 100644 src/main/java/org/wickedsource/docxstamper/processor/table/TableResolver.java create mode 100644 src/test/java/org/wickedsource/docxstamper/RepeatDocPartAndCommentProcessorsIsolationTest.java create mode 100644 src/test/java/org/wickedsource/docxstamper/RepeatDocPartWithImagesInSourceTest.java create mode 100644 src/test/resources/org/wickedsource/docxstamper/RepeatDocPartAndCommentProcessorsIsolationTest.docx create mode 100644 src/test/resources/org/wickedsource/docxstamper/RepeatDocPartWithImagesInSourceTest.docx diff --git a/README.md b/README.md index 005ed042..2dd37f96 100644 --- a/README.md +++ b/README.md @@ -2,21 +2,29 @@ [![Build Status](https://github.com/verronpro/docx-stamper/actions/workflows/maven.yml/badge.svg)](https://github.com/verronpro/docx-stamper/actions/workflows/maven.yml) -docx-stamper is a Java template engine for docx documents. You create a template .docx document with your favorite word processor +docx-stamper is a Java template engine for docx documents. You create a template .docx document with your favorite word +processor and feed it to a DocxStamper instance to create a document based on the template at runtime. Example code: + ```java -MyContext context = ...; // your own POJO against which expressions found in the template - // will be resolved -InputStream template = ...; // InputStream to your .docx template file -OutputStream out = ...; // OutputStream in which to write the resulting .docx document -DocxStamper stamper = new DocxStamperConfiguration() - .build(); -stamper.stamp(template, context, out); -out.close(); +MyContext context=...; // your own POJO against which expressions found in the template + // will be resolved + InputStream template=...; // InputStream to your .docx template file + OutputStream out=...; // OutputStream in which to write the resulting .docx document + DocxStamper stamper=new DocxStamperConfiguration() + .build(); + stamper.stamp(template,context,out); + out.close(); ``` ## Replacing Expressions in a .docx Template -The main feature of docx-stamper is **replacement of expressions** within the text of the template document. Simply add expressions like `${person.name}` or `${person.name.equals("Homer") ? "Duff" : "Budweiser"}` in the text of your .docx template and provide a context object against which the expression can be resolved. docx-stamper will try to keep the original formatting of the text in the template intact. You can use the full feature set of [Spring Expression Language](http://docs.spring.io/spring/docs/current/spring-framework-reference/html/expressions.html) (SpEL). + +The main feature of docx-stamper is **replacement of expressions** within the text of the template document. Simply add +expressions like `${person.name}` or `${person.name.equals("Homer") ? "Duff" : "Budweiser"}` in the text of your .docx +template and provide a context object against which the expression can be resolved. docx-stamper will try to keep the +original formatting of the text in the template intact. You can use the full feature set +of [Spring Expression Language](http://docs.spring.io/spring/docs/current/spring-framework-reference/html/expressions.html) ( +SpEL). The value an expression resolves to may be of the following types: @@ -27,20 +35,25 @@ The value an expression resolves to may be of the following types: | java.util.Date | The expression is replaced by a formatted Date string (by default "dd.MM.yyyy"). You can change the format string by registering your own [DateResolver](src/main/java/org/wickedsource/docxstamper/replace/typeresolver/DateResolver.java). | | [org.wickedsource.docxstamper...Image](src/main/java/org/wickedsource/docxstamper/replace/typeresolver/image/Image.java) | The expression is replaced with an inline image. | -If an expression cannot be resolved successfully, it will be skipped (meaning the expression stays in the document as it was in the template). To support more than the above types you can implement your own [TypeResolver](src/main/java/org/wickedsource/docxstamper/api/typeresolver/ITypeResolver.java). To register your own TypeResolver with docx-stamper, use the following code: +If an expression cannot be resolved successfully, it will be skipped (meaning the expression stays in the document as it +was in the template). To support more than the above types you can implement your +own [TypeResolver](src/main/java/org/wickedsource/docxstamper/api/typeresolver/ITypeResolver.java). To register your own +TypeResolver with docx-stamper, use the following code: ```java -ITypeResolver typeResolver = ...; // instance of your own ITypeResolver implementation -Class type ...; // class of expression values your resolver handles -DocxStamper stamper = new DocxStamperConfiguration() - .addTypeResolver(type, typeResolver) - .build(); +ITypeResolver typeResolver=...; // instance of your own ITypeResolver implementation + Class type...; // class of expression values your resolver handles + DocxStamper stamper=new DocxStamperConfiguration() + .addTypeResolver(type,typeResolver) + .build(); ``` ## Customizing the SpEL Evaluation Context -If you want to take more control over the evaluation of expressions, you can implement a [EvaluationContextConfigurer](src/main/java/org/wickedsource/docxstamper/api/EvaluationContextConfigurer.java) -and customize Springs `StandardEvaluationContext` to your needs. You can register an `EvaluationContextConfigurer` like this: +If you want to take more control over the evaluation of expressions, you can implement +a [EvaluationContextConfigurer](src/main/java/org/wickedsource/docxstamper/api/EvaluationContextConfigurer.java) +and customize Springs `StandardEvaluationContext` to your needs. You can register an `EvaluationContextConfigurer` like +this: ```java EvaluationContextConfigurer configurer = ...; @@ -51,30 +64,33 @@ DocxStamper stamper = new DocxStamperConfiguration() ## Adding custom functions to the Expression Language -If you want to create custom functions (for different number formats or different date formats, for example), you can register functions +If you want to create custom functions (for different number formats or different date formats, for example), you can +register functions which can then be used in the expression language. The following code for example adds a function `toUppercase(String)` which can be used within the .docx document to uppercase a String: ```java -DocxStamper stamper = new DocxStamperConfiguration() - .exposeInterfaceToExpressionLanguage(UppercaseFunction.class, new UppercaseFunctionImpl()); - .build(); +DocxStamper stamper=new DocxStamperConfiguration() + .exposeInterfaceToExpressionLanguage(UppercaseFunction.class,new UppercaseFunctionImpl()); + .build(); public interface UppercaseFunction { - String toUppercase(String string); + String toUppercase(String string); } public static class UppercaseFunctionImpl implements UppercaseFunction { - @Override - public String toUppercase(String string) { - return string.toUpperCase(); - } + @Override + public String toUppercase(String string) { + return string.toUpperCase(); + } } ``` - ## Conditional Display and Repeating of Elements -Besides replacing expressions, docx-stamper can **process comments on paragraphs of text** in the template .docx document and do manipulations on the template based on these comments. By default, you can use the following expressions in comments: + +Besides replacing expressions, docx-stamper can **process comments on paragraphs of text** in the template .docx +document and do manipulations on the template based on these comments. By default, you can use the following expressions +in comments: | Expression in .docx comment | Effect | |--------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| @@ -84,57 +100,77 @@ Besides replacing expressions, docx-stamper can **process comments on paragraphs | `repeatTableRow(List)` | The table row surrounding the commented paragraph is copied once for each object in the passed-in list. Expressions found in the cells of the table row are evaluated against the object from the list. | | `repeatDocPart(List)` | Repeats the part of the document surrounded by the comment. The document part is copied once for each object in the passed-in list. Expressions found in the elements of the document part are evaluated against the object from the list. Can be used instead repeatTableRow and repeatParagraph if you want to repeat more than table rows and paragraphs. | | `replaceWordWith(expression)` | Replaces the commented word (must be a single word!) with the value of the given expression. | +| `resolveTable(StampTable)` | Replaces a table (must have 1 column and 2 rows) with the values given by the StampTable. The StampTable contains a list of headers for columns, and a 2 level list of rows containing values for each column. | -If a comment cannot be processed, by default an exception will be thrown. Successfully processed comments are removed from the document. You can add support to more expressions in comments by implementing your own [ICommentProcessor](src/main/java/org/wickedsource/docxstamper/api/commentprocessor/ICommentProcessor.java). To register you comment processor to docx-stamper, use the following code: +If a comment cannot be processed, by default an exception will be thrown. Successfully processed comments are removed +from the document. You can add support to more expressions in comments by implementing your +own [ICommentProcessor](src/main/java/org/wickedsource/docxstamper/api/commentprocessor/ICommentProcessor.java). To +register you comment processor to docx-stamper, use the following code: ```java -ICommentProcessor commentProcessor = ...; // instance of your own ICommentProcessor implementation -Class interfaceClass = ...; // class of the interface that defines the methods that are - // exposed into the expression language -DocxStamper stamper = new DocxStamperConfiguration() - .addCommentProcessor(interfaceClass, commentProcessor) - .build(); +ICommentProcessor commentProcessor=...; // instance of your own ICommentProcessor implementation + Class interfaceClass=...; // class of the interface that defines the methods that are + // exposed into the expression language + DocxStamper stamper=new DocxStamperConfiguration() + .addCommentProcessor(interfaceClass,commentProcessor) + .build(); ``` -For an in-depth description of how to create a comment processor, see the javadoc of [ICommentProcessor](src/main/java/org/wickedsource/docxstamper/api/commentprocessor/ICommentProcessor.java). + +For an in-depth description of how to create a comment processor, see the javadoc +of [ICommentProcessor](src/main/java/org/wickedsource/docxstamper/api/commentprocessor/ICommentProcessor.java). ## Conditional Display and Repeating of Elements in Headers or Footers -The docx file format does not allow comments in Headers or Footers of a document. To be able to conditionally display content in a header or footer, simply surround the expression you would put in a comment with "#{}" and put it at the beginning of the paragraph you want to manipulate. The expression will be evaluated as it would be in a comment. + +The docx file format does not allow comments in Headers or Footers of a document. To be able to conditionally display +content in a header or footer, simply surround the expression you would put in a comment with "#{}" and put it at the +beginning of the paragraph you want to manipulate. The expression will be evaluated as it would be in a comment. ## Error Handling -By default, DocxStamper fails with an UnresolvedExpressionException if an expression within the document or within the comments cannot be resolved successfully. If you want to change this behavior, you can do the following: + +By default, DocxStamper fails with an UnresolvedExpressionException if an expression within the document or within the +comments cannot be resolved successfully. If you want to change this behavior, you can do the following: ```java -DocxStamper stamper = new DocxStamperConfiguration() - .setFailOnUnresolvedExpression(false) - .build(); +DocxStamper stamper=new DocxStamperConfiguration() + .setFailOnUnresolvedExpression(false) + .build(); ``` ## Sample Code -The source code contains a set of tests show how to use the features. If you want to run them yourself, clone the repository and run [the tests in the main package](src/test/java/org/wickedsource/docxstamper) with the system property `-DkeepOutputFile=true` so that the resulting .docx documents will not be cleaned up so you can view them. The resulting files will be stored in your local temp folder (watch the logging output for the exact location of the files). -If you want to have a look at the .docx templates used in the tests, have a look at the [resources subfolder](src/test/resources/org/wickedsource/docxstamper) in the test folder. +The source code contains a set of tests show how to use the features. If you want to run them yourself, clone the +repository and run [the tests in the main package](src/test/java/org/wickedsource/docxstamper) with the system +property `-DkeepOutputFile=true` so that the resulting .docx documents will not be cleaned up so you can view them. The +resulting files will be stored in your local temp folder (watch the logging output for the exact location of the files). + +If you want to have a look at the .docx templates used in the tests, have a look at +the [resources subfolder](src/test/resources/org/wickedsource/docxstamper) in the test folder. ## Maven coordinates -To include docx-stamper in your project, you can use the following maven coordinates in your dependency management system: + +To include docx-stamper in your project, you can use the following maven coordinates in your dependency management +system: ```xml + - jcenter - https://jcenter.bintray.com/ + jcenter + https://jcenter.bintray.com/ - org.wickedsource.docx-stamper - docx-stamper - 1.4.0 +org.wickedsource.docx-stamper +docx-stamper +1.4.0 ``` Note that as of version 1.4.0 you have to provide the dependency to your version of Docx4J yourself: ```xml + org.docx4j docx4j @@ -145,4 +181,6 @@ Note that as of version 1.4.0 you have to provide the dependency to your version This way, you can choose which version of Docx4J you want to use instead having it dictated by docx-stamper. ## Contribute -If you have an issue or created a comment processor or type resolver that you think deserves to be part of the default distribution, feel free to open an issue or - even better - a pull request with your contribution. + +If you have an issue or created a comment processor or type resolver that you think deserves to be part of the default +distribution, feel free to open an issue or - even better - a pull request with your contribution. diff --git a/pom.xml b/pom.xml index 7e292430..ac3d8828 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 pro.verron docx-stamper - 1.5.0-javax + 1.6.0-javax jar docx-stamper diff --git a/src/main/java/org/wickedsource/docxstamper/DocxStamper.java b/src/main/java/org/wickedsource/docxstamper/DocxStamper.java index aaec1799..683dca5c 100644 --- a/src/main/java/org/wickedsource/docxstamper/DocxStamper.java +++ b/src/main/java/org/wickedsource/docxstamper/DocxStamper.java @@ -2,15 +2,11 @@ import org.docx4j.openpackaging.packages.WordprocessingMLPackage; import org.wickedsource.docxstamper.api.DocxStamperException; +import org.wickedsource.docxstamper.api.commentprocessor.ICommentProcessor; import org.wickedsource.docxstamper.api.typeresolver.ITypeResolver; import org.wickedsource.docxstamper.api.typeresolver.TypeResolverRegistry; import org.wickedsource.docxstamper.el.ExpressionResolver; import org.wickedsource.docxstamper.processor.CommentProcessorRegistry; -import org.wickedsource.docxstamper.processor.displayif.DisplayIfProcessor; -import org.wickedsource.docxstamper.processor.displayif.IDisplayIfProcessor; -import org.wickedsource.docxstamper.processor.repeat.*; -import org.wickedsource.docxstamper.processor.replaceExpression.IReplaceWithProcessor; -import org.wickedsource.docxstamper.processor.replaceExpression.ReplaceWithProcessor; import org.wickedsource.docxstamper.replace.PlaceholderReplacer; import org.wickedsource.docxstamper.replace.typeresolver.DateResolver; import org.wickedsource.docxstamper.replace.typeresolver.FallbackResolver; @@ -19,6 +15,8 @@ import java.io.InputStream; import java.io.OutputStream; +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationTargetException; import java.util.Date; import java.util.Map; @@ -60,11 +58,17 @@ private void initFields() { ExpressionResolver expressionResolver = new ExpressionResolver(config); placeholderReplacer = new PlaceholderReplacer(typeResolverRegistry, config); - config.getCommentProcessors().put(IRepeatProcessor.class, new RepeatProcessor(typeResolverRegistry, config)); - config.getCommentProcessors().put(IParagraphRepeatProcessor.class, new ParagraphRepeatProcessor(typeResolverRegistry, config)); - config.getCommentProcessors().put(IRepeatDocPartProcessor.class, new RepeatDocPartProcessor(config)); - config.getCommentProcessors().put(IDisplayIfProcessor.class, new DisplayIfProcessor()); - config.getCommentProcessors().put(IReplaceWithProcessor.class, new ReplaceWithProcessor(config)); + config.getCommentProcessorsToUse().entrySet().forEach(entry -> { + try { + Class processorImpl = entry.getValue(); + Constructor constructor = processorImpl.getDeclaredConstructor(DocxStamperConfiguration.class, TypeResolverRegistry.class); + Object processorInstance = constructor.newInstance(config, typeResolverRegistry); + config.getCommentProcessors().put(entry.getKey(), processorInstance); + } catch (NoSuchMethodException | InvocationTargetException | InstantiationException | + IllegalAccessException e) { + throw new RuntimeException(e); + } + }); commentProcessorRegistry = new CommentProcessorRegistry(placeholderReplacer, config); commentProcessorRegistry.setExpressionResolver(expressionResolver); @@ -136,6 +140,17 @@ public void stamp(WordprocessingMLPackage document, T contextRoot, OutputStream } } + /** + * This method allows getting comment processors instances in use to access their internal state. Useful for + * testing purposes. + * + * @param interfaceToGet ICommentProcessor interface to lookup. + * @return ICommentProcessor implementation instance or null if not used. + */ + public ICommentProcessor getCommentProcessorInstance(Class interfaceToGet) { + return (ICommentProcessor) config.getCommentProcessors().get(interfaceToGet); + } + private void replaceExpressions(WordprocessingMLPackage document, T contextObject) { placeholderReplacer.resolveExpressions(document, contextObject); } diff --git a/src/main/java/org/wickedsource/docxstamper/DocxStamperConfiguration.java b/src/main/java/org/wickedsource/docxstamper/DocxStamperConfiguration.java index d19a1603..e64bf651 100644 --- a/src/main/java/org/wickedsource/docxstamper/DocxStamperConfiguration.java +++ b/src/main/java/org/wickedsource/docxstamper/DocxStamperConfiguration.java @@ -1,9 +1,15 @@ package org.wickedsource.docxstamper; import org.wickedsource.docxstamper.api.EvaluationContextConfigurer; -import org.wickedsource.docxstamper.api.commentprocessor.ICommentProcessor; import org.wickedsource.docxstamper.api.typeresolver.ITypeResolver; import org.wickedsource.docxstamper.el.NoOpEvaluationContextConfigurer; +import org.wickedsource.docxstamper.processor.displayif.DisplayIfProcessor; +import org.wickedsource.docxstamper.processor.displayif.IDisplayIfProcessor; +import org.wickedsource.docxstamper.processor.repeat.*; +import org.wickedsource.docxstamper.processor.replaceExpression.IReplaceWithProcessor; +import org.wickedsource.docxstamper.processor.replaceExpression.ReplaceWithProcessor; +import org.wickedsource.docxstamper.processor.table.ITableResolver; +import org.wickedsource.docxstamper.processor.table.TableResolver; import org.wickedsource.docxstamper.replace.typeresolver.FallbackResolver; import java.util.HashMap; @@ -30,6 +36,8 @@ public class DocxStamperConfiguration { private String nullValuesDefault = null; + private final Map, Class> commentProcessorsToUse = new HashMap<>(); + private final Map, Object> commentProcessors = new HashMap<>(); private final Map, ITypeResolver> typeResolvers = new HashMap<>(); @@ -38,6 +46,41 @@ public class DocxStamperConfiguration { private final Map, Object> expressionFunctions = new HashMap<>(); + public DocxStamperConfiguration() { + commentProcessorsToUse.put(IRepeatProcessor.class, RepeatProcessor.class); + commentProcessorsToUse.put(IParagraphRepeatProcessor.class, ParagraphRepeatProcessor.class); + commentProcessorsToUse.put(IRepeatDocPartProcessor.class, RepeatDocPartProcessor.class); + commentProcessorsToUse.put(ITableResolver.class, TableResolver.class); + commentProcessorsToUse.put(IDisplayIfProcessor.class, DisplayIfProcessor.class); + commentProcessorsToUse.put(IReplaceWithProcessor.class, ReplaceWithProcessor.class); + } + + /** + * Copy operator for the whole DocxStamperConfiguration, including creating self comment processors instances + * to avoid unexpected resets, since comment processors are stateful their instances cannot be shared over + * multiple stampings. + * + * @return copied DocxStamperConfiguration. + */ + public DocxStamperConfiguration copy() { + DocxStamperConfiguration newConfig = new DocxStamperConfiguration() + .setLineBreakPlaceholder(lineBreakPlaceholder) + .setEvaluationContextConfigurer(evaluationContextConfigurer) + .setFailOnUnresolvedExpression(failOnUnresolvedExpression) + .leaveEmptyOnExpressionError(leaveEmptyOnExpressionError) + .replaceUnresolvedExpressions(replaceUnresolvedExpressions) + .unresolvedExpressionsDefaultValue(unresolvedExpressionsDefaultValue) + .replaceNullValues(replaceNullValues) + .nullValuesDefault(nullValuesDefault) + .setDefaultTypeResolver(defaultTypeResolver); + + typeResolvers.entrySet().forEach(entry -> newConfig.addTypeResolver(entry.getKey(), entry.getValue())); + expressionFunctions.entrySet().forEach(entry -> newConfig.exposeInterfaceToExpressionLanguage(entry.getKey(), entry.getValue())); + commentProcessorsToUse.entrySet().forEach(entry -> newConfig.addCommentProcessor(entry.getKey(), entry.getValue())); + + return newConfig; + } + /** * The String provided as lineBreakPlaceholder will be replaces with a line break * when stamping a document. If no lineBreakPlaceholder is provided, no replacement @@ -76,12 +119,12 @@ public DocxStamperConfiguration setFailOnUnresolvedExpression(boolean failOnUnre * Registers the specified ICommentProcessor as an implementation of the * specified interface. * - * @param interfaceClass the Interface which is implemented by the commentProcessor. - * @param commentProcessor the commentProcessor implementing the specified interface. + * @param interfaceClass the Interface which is implemented by the commentProcessor. + * @param commentProcessorImplClass the commentProcessor class implementing the specified interface. */ public DocxStamperConfiguration addCommentProcessor(Class interfaceClass, - ICommentProcessor commentProcessor) { - this.commentProcessors.put(interfaceClass, commentProcessor); + Class commentProcessorImplClass) { + this.commentProcessorsToUse.put(interfaceClass, commentProcessorImplClass); return this; } @@ -188,6 +231,10 @@ public Map, Object> getCommentProcessors() { return commentProcessors; } + public Map, Class> getCommentProcessorsToUse() { + return commentProcessorsToUse; + } + Map, ITypeResolver> getTypeResolvers() { return typeResolvers; } diff --git a/src/main/java/org/wickedsource/docxstamper/api/commentprocessor/ICommentProcessor.java b/src/main/java/org/wickedsource/docxstamper/api/commentprocessor/ICommentProcessor.java index 3ac338e8..6d3c3882 100644 --- a/src/main/java/org/wickedsource/docxstamper/api/commentprocessor/ICommentProcessor.java +++ b/src/main/java/org/wickedsource/docxstamper/api/commentprocessor/ICommentProcessor.java @@ -75,13 +75,20 @@ public interface ICommentProcessor { * This method is always called BEFORE the custom methods of the custom comment * processor interface are called. * - * @param commentWrapper of the currently processed comment within the template. + * @param commentWrapper of the currently processed comment within the template. */ void setCurrentCommentWrapper(CommentWrapper commentWrapper); + /** + * Passes the processed document, in order to make all linked data (images, etc) available + * to processors that need it (example : repeatDocPart) + * + * @param document DocX template being processed. + */ + void setDocument(WordprocessingMLPackage document); + /** * Resets all state in the comment processor so that it can be re-used in another stamping process. */ void reset(); - } diff --git a/src/main/java/org/wickedsource/docxstamper/processor/BaseCommentProcessor.java b/src/main/java/org/wickedsource/docxstamper/processor/BaseCommentProcessor.java index b209d798..0c74b3d9 100644 --- a/src/main/java/org/wickedsource/docxstamper/processor/BaseCommentProcessor.java +++ b/src/main/java/org/wickedsource/docxstamper/processor/BaseCommentProcessor.java @@ -1,46 +1,70 @@ package org.wickedsource.docxstamper.processor; +import org.docx4j.openpackaging.packages.WordprocessingMLPackage; +import org.wickedsource.docxstamper.DocxStamperConfiguration; import org.wickedsource.docxstamper.api.commentprocessor.ICommentProcessor; import org.wickedsource.docxstamper.api.coordinates.ParagraphCoordinates; import org.wickedsource.docxstamper.api.coordinates.RunCoordinates; +import org.wickedsource.docxstamper.api.typeresolver.TypeResolverRegistry; +import org.wickedsource.docxstamper.replace.PlaceholderReplacer; import org.wickedsource.docxstamper.util.CommentWrapper; import java.util.Objects; public abstract class BaseCommentProcessor implements ICommentProcessor { + protected final TypeResolverRegistry typeResolverRegistry; - private ParagraphCoordinates currentParagraphCoordinates; + protected final DocxStamperConfiguration configuration; + protected final PlaceholderReplacer placeholderReplacer; + private ParagraphCoordinates currentParagraphCoordinates; - private RunCoordinates currentRunCoordinates; + private RunCoordinates currentRunCoordinates; - private CommentWrapper currentCommentWrapper; + private CommentWrapper currentCommentWrapper; - public RunCoordinates getCurrentRunCoordinates() { - return currentRunCoordinates; - } + private WordprocessingMLPackage document; - @Override - public void setCurrentRunCoordinates(RunCoordinates currentRunCoordinates) { - this.currentRunCoordinates = currentRunCoordinates; - } + public BaseCommentProcessor(DocxStamperConfiguration config, TypeResolverRegistry typeResolverRegistry) { + this.configuration = config; + this.typeResolverRegistry = typeResolverRegistry; + this.placeholderReplacer = new PlaceholderReplacer(typeResolverRegistry, configuration); + } - @Override - public void setCurrentParagraphCoordinates(ParagraphCoordinates coordinates) { - this.currentParagraphCoordinates = coordinates; - } + public RunCoordinates getCurrentRunCoordinates() { + return currentRunCoordinates; + } - public ParagraphCoordinates getCurrentParagraphCoordinates() { - return currentParagraphCoordinates; - } + @Override + public void setCurrentRunCoordinates(RunCoordinates currentRunCoordinates) { + this.currentRunCoordinates = currentRunCoordinates; + } - @Override - public void setCurrentCommentWrapper(CommentWrapper currentCommentWrapper) { - Objects.requireNonNull(currentCommentWrapper.getCommentRangeStart()); - Objects.requireNonNull(currentCommentWrapper.getCommentRangeEnd()); - this.currentCommentWrapper = currentCommentWrapper; - } + @Override + public void setCurrentParagraphCoordinates(ParagraphCoordinates coordinates) { + this.currentParagraphCoordinates = coordinates; + } - public CommentWrapper getCurrentCommentWrapper() { - return currentCommentWrapper; - } + public ParagraphCoordinates getCurrentParagraphCoordinates() { + return currentParagraphCoordinates; + } + + @Override + public void setCurrentCommentWrapper(CommentWrapper currentCommentWrapper) { + Objects.requireNonNull(currentCommentWrapper.getCommentRangeStart()); + Objects.requireNonNull(currentCommentWrapper.getCommentRangeEnd()); + this.currentCommentWrapper = currentCommentWrapper; + } + + public CommentWrapper getCurrentCommentWrapper() { + return currentCommentWrapper; + } + + @Override + public void setDocument(WordprocessingMLPackage document) { + this.document = document; + } + + public WordprocessingMLPackage getDocument() { + return document; + } } diff --git a/src/main/java/org/wickedsource/docxstamper/processor/CommentProcessorRegistry.java b/src/main/java/org/wickedsource/docxstamper/processor/CommentProcessorRegistry.java index 903b633d..83b84a30 100644 --- a/src/main/java/org/wickedsource/docxstamper/processor/CommentProcessorRegistry.java +++ b/src/main/java/org/wickedsource/docxstamper/processor/CommentProcessorRegistry.java @@ -148,19 +148,19 @@ private Optional runProcessorsOnParagraphComment(final Wordp final Map comments, T expressionContext, ParagraphCoordinates paragraphCoordinates) { Comments.Comment comment = CommentUtil.getCommentFor(paragraphCoordinates.getParagraph(), document); - return runCommentProcessors(comments, expressionContext, comment, paragraphCoordinates, null); + return runCommentProcessors(comments, expressionContext, comment, paragraphCoordinates, null, document); } private Optional runProcessorsOnRunComment(final WordprocessingMLPackage document, final Map comments, T expressionContext, ParagraphCoordinates paragraphCoordinates, RunCoordinates runCoordinates) { Comments.Comment comment = CommentUtil.getCommentAround(runCoordinates.getRun(), document); - return runCommentProcessors(comments, expressionContext, comment, paragraphCoordinates, runCoordinates); + return runCommentProcessors(comments, expressionContext, comment, paragraphCoordinates, runCoordinates, document); } private Optional runCommentProcessors(final Map comments, T expressionContext, Comments.Comment comment, ParagraphCoordinates paragraphCoordinates, - RunCoordinates runCoordinates) { + RunCoordinates runCoordinates, WordprocessingMLPackage document) { CommentWrapper commentWrapper = Optional.ofNullable(comment) .map(Comments.Comment::getId) @@ -178,11 +178,12 @@ private Optional runCommentProcessors(final Map tableRowsToBeRemoved = new ArrayList<>(); - public DisplayIfProcessor() { + public DisplayIfProcessor(DocxStamperConfiguration config, TypeResolverRegistry typeResolverRegistry) { + super(config, typeResolverRegistry); } @Override diff --git a/src/main/java/org/wickedsource/docxstamper/processor/repeat/IRepeatDocPartProcessor.java b/src/main/java/org/wickedsource/docxstamper/processor/repeat/IRepeatDocPartProcessor.java index 52d5b0b5..29f13546 100644 --- a/src/main/java/org/wickedsource/docxstamper/processor/repeat/IRepeatDocPartProcessor.java +++ b/src/main/java/org/wickedsource/docxstamper/processor/repeat/IRepeatDocPartProcessor.java @@ -10,5 +10,5 @@ public interface IRepeatDocPartProcessor { * * @param objects the objects which serve as context root for expressions found in the template table row. */ - void repeatDocPart(List objects); + void repeatDocPart(List objects) throws Exception; } diff --git a/src/main/java/org/wickedsource/docxstamper/processor/repeat/ParagraphRepeatProcessor.java b/src/main/java/org/wickedsource/docxstamper/processor/repeat/ParagraphRepeatProcessor.java index e03bb98f..4f900e98 100644 --- a/src/main/java/org/wickedsource/docxstamper/processor/repeat/ParagraphRepeatProcessor.java +++ b/src/main/java/org/wickedsource/docxstamper/processor/repeat/ParagraphRepeatProcessor.java @@ -10,8 +10,8 @@ import org.wickedsource.docxstamper.api.coordinates.ParagraphCoordinates; import org.wickedsource.docxstamper.api.typeresolver.TypeResolverRegistry; import org.wickedsource.docxstamper.processor.BaseCommentProcessor; -import org.wickedsource.docxstamper.replace.PlaceholderReplacer; import org.wickedsource.docxstamper.util.CommentUtil; +import org.wickedsource.docxstamper.util.CommentWrapper; import org.wickedsource.docxstamper.util.ParagraphUtil; import java.math.BigInteger; @@ -23,18 +23,16 @@ public class ParagraphRepeatProcessor extends BaseCommentProcessor implements IParagraphRepeatProcessor { private static class ParagraphsToRepeat { + CommentWrapper commentWrapper; List data; List

paragraphs; } private Map pToRepeat = new HashMap<>(); - private final PlaceholderReplacer placeholderReplacer; - private final DocxStamperConfiguration config; - public ParagraphRepeatProcessor(TypeResolverRegistry typeResolverRegistry, DocxStamperConfiguration config) { - this.placeholderReplacer = new PlaceholderReplacer(typeResolverRegistry, config); - this.config = config; + public ParagraphRepeatProcessor(DocxStamperConfiguration config, TypeResolverRegistry typeResolverRegistry) { + super(config, typeResolverRegistry); } @Override @@ -45,11 +43,11 @@ public void repeatParagraph(List objects) { List

paragraphs = getParagraphsInsideComment(paragraph); ParagraphsToRepeat toRepeat = new ParagraphsToRepeat(); + toRepeat.commentWrapper = getCurrentCommentWrapper(); toRepeat.data = objects; toRepeat.paragraphs = paragraphs; pToRepeat.put(paragraphCoordinates, toRepeat); - CommentUtil.deleteComment(getCurrentCommentWrapper()); } @Override @@ -64,13 +62,14 @@ public void commitChanges(WordprocessingMLPackage document) { for (final Object expressionContext : expressionContexts) { for (P paragraphToClone : paragraphsToRepeat.paragraphs) { P pClone = XmlUtils.deepCopy(paragraphToClone); + CommentUtil.deleteCommentFromElement(pClone, paragraphsToRepeat.commentWrapper.getComment().getId()); placeholderReplacer.resolveExpressionsForParagraph(pClone, expressionContext, document); paragraphsToAdd.add(pClone); } } - } else if (config.isReplaceNullValues() && config.getNullValuesDefault() != null) { - paragraphsToAdd.add(ParagraphUtil.create(config.getNullValuesDefault())); + } else if (configuration.isReplaceNullValues() && configuration.getNullValuesDefault() != null) { + paragraphsToAdd.add(ParagraphUtil.create(configuration.getNullValuesDefault())); } Object parent = rCoords.getParagraph().getParent(); diff --git a/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatDocPartProcessor.java b/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatDocPartProcessor.java index 96ec5a21..8b1317bd 100644 --- a/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatDocPartProcessor.java +++ b/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatDocPartProcessor.java @@ -3,40 +3,40 @@ import org.docx4j.XmlUtils; import org.docx4j.jaxb.Context; import org.docx4j.openpackaging.exceptions.Docx4JException; -import org.docx4j.openpackaging.exceptions.InvalidFormatException; import org.docx4j.openpackaging.packages.WordprocessingMLPackage; import org.docx4j.openpackaging.parts.WordprocessingML.CommentsPart; import org.docx4j.wml.*; import org.jvnet.jaxb2_commons.ppp.Child; import org.wickedsource.docxstamper.DocxStamper; import org.wickedsource.docxstamper.DocxStamperConfiguration; +import org.wickedsource.docxstamper.api.typeresolver.TypeResolverRegistry; import org.wickedsource.docxstamper.processor.BaseCommentProcessor; -import org.wickedsource.docxstamper.util.CommentUtil; import org.wickedsource.docxstamper.util.CommentWrapper; import org.wickedsource.docxstamper.util.DocumentUtil; import org.wickedsource.docxstamper.util.ParagraphUtil; +import org.wickedsource.docxstamper.util.walk.BaseDocumentWalker; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.util.*; +import java.util.stream.Collectors; public class RepeatDocPartProcessor extends BaseCommentProcessor implements IRepeatDocPartProcessor { - private final DocxStamperConfiguration config; - private Map> subContexts = new HashMap<>(); private Map> repeatElementsMap = new HashMap<>(); private Map subTemplates = new HashMap<>(); private Map gcpMap = new HashMap<>(); - private final ObjectFactory objectFactory; - public RepeatDocPartProcessor(DocxStamperConfiguration config) { - this.config = config; - this.objectFactory = Context.getWmlObjectFactory(); + private static ObjectFactory objectFactory = null; + + public RepeatDocPartProcessor(DocxStamperConfiguration config, TypeResolverRegistry typeResolverRegistry) { + super(config, typeResolverRegistry); } + @Override - public void repeatDocPart(List contexts) { + public void repeatDocPart(List contexts) throws Exception { if (contexts == null) { contexts = Collections.emptyList(); } @@ -48,16 +48,19 @@ public void repeatDocPart(List contexts) { ); List repeatElements = getRepeatElements(currentCommentWrapper, gcp); - if (repeatElements.size() > 0) { - try { - subContexts.put(currentCommentWrapper, contexts); - subTemplates.put(currentCommentWrapper, extractSubTemplate(currentCommentWrapper, repeatElements)); - gcpMap.put(currentCommentWrapper, gcp); - repeatElementsMap.put(currentCommentWrapper, repeatElements); - } catch (InvalidFormatException e) { - throw new RuntimeException(e); - } + if (!repeatElements.isEmpty()) { + subTemplates.put(currentCommentWrapper, extractSubTemplate(currentCommentWrapper, repeatElements, getOrCreateObjectFactory())); + subContexts.put(currentCommentWrapper, contexts); + gcpMap.put(currentCommentWrapper, gcp); + repeatElementsMap.put(currentCommentWrapper, repeatElements); + } + } + + private static ObjectFactory getOrCreateObjectFactory() { + if (objectFactory == null) { + objectFactory = Context.getWmlObjectFactory(); } + return objectFactory; } private WordprocessingMLPackage copyTemplate(WordprocessingMLPackage doc) throws Docx4JException { @@ -79,7 +82,7 @@ public void commitChanges(WordprocessingMLPackage document) { for (Object subContext : expressionContexts) { try { WordprocessingMLPackage subTemplate = copyTemplate(subTemplates.get(commentWrapper)); - DocxStamper stamper = new DocxStamper<>(config); + DocxStamper stamper = new DocxStamper<>(configuration.copy()); ByteArrayOutputStream output = new ByteArrayOutputStream(); stamper.stamp(subTemplate, subContext, output); WordprocessingMLPackage subDocument = WordprocessingMLPackage.load(new ByteArrayInputStream(output.toByteArray())); @@ -94,11 +97,10 @@ public void commitChanges(WordprocessingMLPackage document) { throw new RuntimeException(e); } } - } else if (config.isReplaceNullValues() && config.getNullValuesDefault() != null) { - insertParentContentAccessor.getContent().add(index, ParagraphUtil.create(config.getNullValuesDefault())); + } else if (configuration.isReplaceNullValues() && configuration.getNullValuesDefault() != null) { + insertParentContentAccessor.getContent().add(index, ParagraphUtil.create(configuration.getNullValuesDefault())); } - CommentUtil.deleteComment(commentWrapper); insertParentContentAccessor.getContent().removeAll(repeatElementsMap.get(commentWrapper)); } } @@ -111,21 +113,60 @@ public void reset() { repeatElementsMap = new HashMap<>(); } - private WordprocessingMLPackage extractSubTemplate(CommentWrapper commentWrapper, List repeatElements) throws InvalidFormatException { - CommentUtil.deleteComment(commentWrapper); // for deep copy without comment - - WordprocessingMLPackage document = WordprocessingMLPackage.createPackage(); + private WordprocessingMLPackage extractSubTemplate(CommentWrapper commentWrapper, List repeatElements, ObjectFactory objectFactory) throws Exception { + WordprocessingMLPackage document = getDocument(); + WordprocessingMLPackage subDocument = WordprocessingMLPackage.createPackage(); CommentsPart commentsPart = new CommentsPart(); - document.getMainDocumentPart().addTargetPart(commentsPart); + subDocument.getMainDocumentPart().addTargetPart(commentsPart); - document.getMainDocumentPart().getContent().addAll(repeatElements); + // copy the elements to repeat without comment range anchors + List finalRepeatElements = repeatElements.stream().map(XmlUtils::deepCopy).collect(Collectors.toList()); + removeCommentAnchorsFromFinalElements(commentWrapper, finalRepeatElements); + subDocument.getMainDocumentPart().getContent().addAll(finalRepeatElements); + + // copy the images from parent document using the original repeat elements + ContentAccessor fakeBody = getOrCreateObjectFactory().createBody(); + fakeBody.getContent().addAll(repeatElements); + DocumentUtil.walkObjectsAndImportImages(fakeBody, document, subDocument); Comments comments = objectFactory.createComments(); commentWrapper.getChildren().forEach(comment -> comments.getComment().add(comment.getComment())); commentsPart.setContents(comments); - return document; + return subDocument; + } + + private static void removeCommentAnchorsFromFinalElements(CommentWrapper commentWrapper, List finalRepeatElements) { + List commentsToRemove = new ArrayList<>(); + + new BaseDocumentWalker(() -> finalRepeatElements) { + @Override + protected void onCommentRangeStart(CommentRangeStart commentRangeStart) { + if (commentRangeStart.getId().equals(commentWrapper.getComment().getId())) { + commentsToRemove.add(commentRangeStart); + } + } + + @Override + protected void onCommentRangeEnd(CommentRangeEnd commentRangeEnd) { + if (commentRangeEnd.getId().equals(commentWrapper.getComment().getId())) { + commentsToRemove.add(commentRangeEnd); + } + } + }.walk(); + + for (Object commentAnchorToRemove : commentsToRemove) { + if (commentAnchorToRemove instanceof CommentRangeStart) { + ContentAccessor parent = ((ContentAccessor) ((CommentRangeStart) commentAnchorToRemove).getParent()); + parent.getContent().removeAll(parent.getContent().subList(0, parent.getContent().indexOf(commentAnchorToRemove) + 1)); + } else if (commentAnchorToRemove instanceof CommentRangeEnd) { + ContentAccessor parent = ((ContentAccessor) ((CommentRangeEnd) commentAnchorToRemove).getParent()); + parent.getContent().removeAll(parent.getContent().subList(parent.getContent().indexOf(commentAnchorToRemove), parent.getContent().size())); + } else { + throw new RuntimeException("Unknown comment anchor type given to remove !"); + } + } } private static List getRepeatElements(CommentWrapper commentWrapper, ContentAccessor greatestCommonParent) { diff --git a/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatProcessor.java b/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatProcessor.java index 4a9b781c..9cff662c 100644 --- a/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatProcessor.java +++ b/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatProcessor.java @@ -10,8 +10,8 @@ import org.wickedsource.docxstamper.api.typeresolver.TypeResolverRegistry; import org.wickedsource.docxstamper.processor.BaseCommentProcessor; import org.wickedsource.docxstamper.processor.CommentProcessingException; -import org.wickedsource.docxstamper.replace.PlaceholderReplacer; import org.wickedsource.docxstamper.util.CommentUtil; +import org.wickedsource.docxstamper.util.CommentWrapper; import org.wickedsource.docxstamper.util.walk.BaseDocumentWalker; import org.wickedsource.docxstamper.util.walk.DocumentWalker; @@ -22,13 +22,13 @@ public class RepeatProcessor extends BaseCommentProcessor implements IRepeatProcessor { private Map> tableRowsToRepeat = new HashMap<>(); + private Map tableRowsCommentsToRemove = new HashMap<>(); - private final PlaceholderReplacer placeholderReplacer; - - public RepeatProcessor(TypeResolverRegistry typeResolverRegistry, DocxStamperConfiguration config) { - this.placeholderReplacer = new PlaceholderReplacer(typeResolverRegistry, config); + public RepeatProcessor(DocxStamperConfiguration config, TypeResolverRegistry typeResolverRegistry) { + super(config, typeResolverRegistry); } + @Override public void commitChanges(WordprocessingMLPackage document) { repeatRows(document); @@ -37,6 +37,7 @@ public void commitChanges(WordprocessingMLPackage document) { @Override public void reset() { this.tableRowsToRepeat = new HashMap<>(); + this.tableRowsCommentsToRemove = new HashMap<>(); } private void repeatRows(final WordprocessingMLPackage document) { @@ -47,6 +48,8 @@ private void repeatRows(final WordprocessingMLPackage document) { if (expressionContexts != null) { for (final Object expressionContext : expressionContexts) { Tr rowClone = XmlUtils.deepCopy(rCoords.getRow()); + CommentUtil.deleteCommentFromElement(rowClone, tableRowsCommentsToRemove.get(rCoords).getComment().getId()); + DocumentWalker walker = new BaseDocumentWalker(rowClone) { @Override protected void onParagraph(P paragraph) { @@ -70,7 +73,8 @@ public void repeatTableRow(List objects) { pCoords.getParentTableCellCoordinates().getParentTableRowCoordinates() == null) { throw new CommentProcessingException("Paragraph is not within a table!", pCoords); } - tableRowsToRepeat.put(getCurrentParagraphCoordinates().getParentTableCellCoordinates().getParentTableRowCoordinates(), objects); - CommentUtil.deleteComment(getCurrentCommentWrapper()); + TableRowCoordinates parentTableRowCoordinates = getCurrentParagraphCoordinates().getParentTableCellCoordinates().getParentTableRowCoordinates(); + tableRowsToRepeat.put(parentTableRowCoordinates, objects); + tableRowsCommentsToRemove.put(parentTableRowCoordinates, getCurrentCommentWrapper()); } } diff --git a/src/main/java/org/wickedsource/docxstamper/processor/replaceExpression/ReplaceWithProcessor.java b/src/main/java/org/wickedsource/docxstamper/processor/replaceExpression/ReplaceWithProcessor.java index 1335da38..cee5d7e4 100644 --- a/src/main/java/org/wickedsource/docxstamper/processor/replaceExpression/ReplaceWithProcessor.java +++ b/src/main/java/org/wickedsource/docxstamper/processor/replaceExpression/ReplaceWithProcessor.java @@ -4,6 +4,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.wickedsource.docxstamper.DocxStamperConfiguration; +import org.wickedsource.docxstamper.api.typeresolver.TypeResolverRegistry; import org.wickedsource.docxstamper.processor.BaseCommentProcessor; import org.wickedsource.docxstamper.util.RunUtil; @@ -14,14 +15,13 @@ public class ReplaceWithProcessor extends BaseCommentProcessor implements IReplaceWithProcessor { - private Logger logger = LoggerFactory.getLogger(ReplaceWithProcessor.class); + private final Logger logger = LoggerFactory.getLogger(ReplaceWithProcessor.class); - private final DocxStamperConfiguration config; - - public ReplaceWithProcessor(DocxStamperConfiguration config) { - this.config = config; + public ReplaceWithProcessor(DocxStamperConfiguration config, TypeResolverRegistry typeResolverRegistry) { + super(config, typeResolverRegistry); } + @Override public void commitChanges(WordprocessingMLPackage document) { } @@ -36,8 +36,8 @@ public void replaceWordWith(String expression) { logger.warn("replaceWordWith has been deprecated in favor of inplace placeholders (${expression})"); if (expression != null && this.getCurrentRunCoordinates() != null) { RunUtil.setText(this.getCurrentRunCoordinates().getRun(), expression); - } else if (config.isReplaceNullValues() && config.getNullValuesDefault() != null) { - RunUtil.setText(this.getCurrentRunCoordinates().getRun(), config.getNullValuesDefault()); + } else if (configuration.isReplaceNullValues() && configuration.getNullValuesDefault() != null) { + RunUtil.setText(this.getCurrentRunCoordinates().getRun(), configuration.getNullValuesDefault()); } } } diff --git a/src/main/java/org/wickedsource/docxstamper/processor/table/ITableResolver.java b/src/main/java/org/wickedsource/docxstamper/processor/table/ITableResolver.java new file mode 100644 index 00000000..48dc2eeb --- /dev/null +++ b/src/main/java/org/wickedsource/docxstamper/processor/table/ITableResolver.java @@ -0,0 +1,5 @@ +package org.wickedsource.docxstamper.processor.table; + +public interface ITableResolver { + void resolveTable(StampTable givenTable); +} diff --git a/src/main/java/org/wickedsource/docxstamper/processor/table/StampTable.java b/src/main/java/org/wickedsource/docxstamper/processor/table/StampTable.java new file mode 100644 index 00000000..39a873dd --- /dev/null +++ b/src/main/java/org/wickedsource/docxstamper/processor/table/StampTable.java @@ -0,0 +1,36 @@ +package org.wickedsource.docxstamper.processor.table; + +import java.util.ArrayList; +import java.util.List; + +import static java.util.Collections.singletonList; + +public class StampTable { + private final List headers; + private final List> records; + + public StampTable() { + this.headers = new ArrayList<>(); + this.records = new ArrayList<>(); + } + + public StampTable( + List headers, + List> records + ) { + this.headers = headers; + this.records = records; + } + + public List headers() { + return headers; + } + + public List> records() { + return records; + } + + public static StampTable empty() { + return new StampTable(singletonList("placeholder"), singletonList(singletonList("placeholder"))); + } +} diff --git a/src/main/java/org/wickedsource/docxstamper/processor/table/TableResolver.java b/src/main/java/org/wickedsource/docxstamper/processor/table/TableResolver.java new file mode 100644 index 00000000..a782f723 --- /dev/null +++ b/src/main/java/org/wickedsource/docxstamper/processor/table/TableResolver.java @@ -0,0 +1,135 @@ +package org.wickedsource.docxstamper.processor.table; + +import org.docx4j.XmlUtils; +import org.docx4j.openpackaging.packages.WordprocessingMLPackage; +import org.docx4j.wml.ContentAccessor; +import org.docx4j.wml.Tbl; +import org.docx4j.wml.Tc; +import org.docx4j.wml.Tr; +import org.wickedsource.docxstamper.DocxStamperConfiguration; +import org.wickedsource.docxstamper.api.coordinates.ParagraphCoordinates; +import org.wickedsource.docxstamper.api.coordinates.TableCellCoordinates; +import org.wickedsource.docxstamper.api.coordinates.TableCoordinates; +import org.wickedsource.docxstamper.api.coordinates.TableRowCoordinates; +import org.wickedsource.docxstamper.api.typeresolver.TypeResolverRegistry; +import org.wickedsource.docxstamper.processor.BaseCommentProcessor; +import org.wickedsource.docxstamper.processor.CommentProcessingException; +import org.wickedsource.docxstamper.util.ParagraphUtil; + +import javax.xml.bind.JAXBElement; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class TableResolver extends BaseCommentProcessor implements ITableResolver { + private final Map cols = new HashMap<>(); + + public TableResolver(DocxStamperConfiguration config, TypeResolverRegistry typeResolverRegistry) { + super(config, typeResolverRegistry); + } + + @Override + public void resolveTable(StampTable givenTable) { + ParagraphCoordinates pCoords = getCurrentParagraphCoordinates(); + if (pCoords.getParentTableCellCoordinates() == null || + pCoords.getParentTableCellCoordinates().getParentTableRowCoordinates() == null) { + throw new CommentProcessingException("Paragraph is not within a table!", pCoords); + } + + TableCellCoordinates parentTableCellCoordinates = pCoords.getParentTableCellCoordinates(); + TableRowCoordinates parentTableRowCoordinates = parentTableCellCoordinates.getParentTableRowCoordinates(); + TableCoordinates parentTableCoordinates = parentTableRowCoordinates.getParentTableCoordinates(); + Tbl table = parentTableCoordinates.getTable(); + + cols.put(table, givenTable); + } + + @Override + public void commitChanges(WordprocessingMLPackage document) { + for (Map.Entry entry : cols.entrySet()) { + Tbl wordTable = entry.getKey(); + + StampTable stampedTable = entry.getValue(); + + if (stampedTable != null) { + replaceTableInplace(wordTable, stampedTable); + } else if (configuration.isReplaceNullValues() && configuration.getNullValuesDefault() != null) { + replaceTableWithNullDefault(wordTable); + } else { + removeTableFromDocument(wordTable); + } + } + } + + private static void removeTableFromDocument(Tbl wordTable) { + ((ContentAccessor) wordTable.getParent()).getContent().remove(wordTable); + } + + private void replaceTableWithNullDefault(Tbl wordTable) { + ContentAccessor accessor = ((ContentAccessor) wordTable.getParent()); + int tablePosition = accessor.getContent().indexOf(wordTable); + if (tablePosition >= 0) { + accessor.getContent().set(tablePosition, ParagraphUtil.create(configuration.getNullValuesDefault())); + } + } + + private void replaceTableInplace(Tbl wordTable, StampTable stampedTable) { + List stampedHeaders = stampedTable.headers(); + List> stampedRecords = stampedTable.records(); + + List rows = wordTable.getContent(); + Tr headerRow = (Tr) rows.get(0); + Tr firstDataRow = (Tr) rows.get(1); + + growAndFillRow(headerRow, stampedHeaders); + + if (!stampedRecords.isEmpty()) { + growAndFillRow(firstDataRow, stampedRecords.get(0)); + + for (List rowContent : stampedRecords.subList(1, stampedRecords.size())) { + rows.add(copyRowFromTemplate(firstDataRow, rowContent)); + } + } else { + rows.remove(firstDataRow); + } + } + + private Tr copyRowFromTemplate(Tr firstDataRow, List rowContent) { + Tr newXmlRow = XmlUtils.deepCopy(firstDataRow); + List xmlRow = newXmlRow.getContent(); + for (int i = 0; i < rowContent.size(); i++) { + String cellContent = rowContent.get(i); + Tc xmlCell = ((JAXBElement) xmlRow.get(i)).getValue(); + setCellText(xmlCell, cellContent); + } + return newXmlRow; + } + + private void growAndFillRow(Tr row, List values) { + List cellRowContent = row.getContent(); + + //Replace text in first cell + JAXBElement cell0 = (JAXBElement) cellRowContent.get(0); + Tc cell0tc = cell0.getValue(); + setCellText(cell0tc, values.isEmpty() ? "" : values.get(0)); + + if (values.size() > 1) { + //Copy first cell and replace content for each remaining values + for (String cellContent : values.subList(1, values.size())) { + JAXBElement xmlCell = XmlUtils.deepCopy(cell0); + setCellText(xmlCell.getValue(), cellContent); + cellRowContent.add(xmlCell); + } + } + } + + private void setCellText(Tc tableCell, String content) { + tableCell.getContent().clear(); + tableCell.getContent().add(ParagraphUtil.create(content)); + } + + @Override + public void reset() { + cols.clear(); + } +} diff --git a/src/main/java/org/wickedsource/docxstamper/replace/typeresolver/image/ImageResolver.java b/src/main/java/org/wickedsource/docxstamper/replace/typeresolver/image/ImageResolver.java index 456c3773..aff5fa70 100644 --- a/src/main/java/org/wickedsource/docxstamper/replace/typeresolver/image/ImageResolver.java +++ b/src/main/java/org/wickedsource/docxstamper/replace/typeresolver/image/ImageResolver.java @@ -16,7 +16,7 @@ */ public class ImageResolver implements ITypeResolver { - private static Random random = new Random(); + private static final Random random = new Random(); @Override public R resolve(WordprocessingMLPackage document, Object image) { diff --git a/src/main/java/org/wickedsource/docxstamper/util/CommentUtil.java b/src/main/java/org/wickedsource/docxstamper/util/CommentUtil.java index 9c593295..169d92a8 100644 --- a/src/main/java/org/wickedsource/docxstamper/util/CommentUtil.java +++ b/src/main/java/org/wickedsource/docxstamper/util/CommentUtil.java @@ -16,15 +16,12 @@ import org.wickedsource.docxstamper.util.walk.DocumentWalker; import java.math.BigInteger; -import java.util.HashMap; -import java.util.Map; -import java.util.Set; -import java.util.Stack; +import java.util.*; import java.util.stream.Collectors; public class CommentUtil { - private static Logger logger = LoggerFactory.getLogger(CommentUtil.class); + private static final Logger logger = LoggerFactory.getLogger(CommentUtil.class); private CommentUtil() { @@ -41,7 +38,7 @@ public static Comments.Comment getCommentAround(R run, WordprocessingMLPackage document) { try { if (run instanceof Child) { - Child child = (Child) run; + Child child = run; ContentAccessor parent = (ContentAccessor) child.getParent(); if (parent == null) return null; @@ -165,9 +162,34 @@ public static void deleteComment(CommentWrapper comment) { deleteCommentReference(commentRangeStartParent, comment.getCommentRangeStart().getId()); } - // TODO: also delete comment from comments.xml } + public static void deleteCommentFromElement(ContentAccessor element, BigInteger commentId) { + List elementsToRemove = new ArrayList<>(); + + for (Object obj : element.getContent()) { + Object unwrapped = XmlUtils.unwrap(obj); + if (unwrapped instanceof CommentRangeStart) { + if (((CommentRangeStart) unwrapped).getId().equals(commentId)) { + elementsToRemove.add(obj); + } + } else if (unwrapped instanceof CommentRangeEnd) { + if (((CommentRangeEnd) unwrapped).getId().equals(commentId)) { + elementsToRemove.add(obj); + } + } else if (unwrapped instanceof R.CommentReference) { + if (((R.CommentReference) unwrapped).getId().equals(commentId)) { + elementsToRemove.add(obj); + } + } else if (unwrapped instanceof ContentAccessor) { + deleteCommentFromElement((ContentAccessor) unwrapped, commentId); + } + } + + element.getContent().removeAll(elementsToRemove); + } + + private static boolean deleteCommentReference(ContentAccessor parent, BigInteger commentId) { for (int i = 0; i < parent.getContent().size(); i++) { @@ -176,24 +198,30 @@ private static boolean deleteCommentReference(ContentAccessor parent, if (deleteCommentReference((ContentAccessor) contentObject, commentId)) { return true; } - } - if (contentObject instanceof R) { + } else if (contentObject instanceof R) { for (Object runContentObject : ((R) contentObject).getContent()) { Object unwrapped = XmlUtils.unwrap(runContentObject); - if (unwrapped instanceof R.CommentReference) { - BigInteger foundCommentId = ((R.CommentReference) unwrapped) - .getId(); - if (foundCommentId.equals(commentId)) { - parent.getContent().remove(i); - return true; - } - } + if (unwrapped instanceof R.CommentReference && removeCommentReference(parent, commentId, i, (R.CommentReference) unwrapped)) + return true; } + } else if (contentObject instanceof R.CommentReference) { + if (removeCommentReference(parent, commentId, i, (R.CommentReference) contentObject)) + return true; } } return false; } + private static boolean removeCommentReference(ContentAccessor parent, BigInteger commentId, int i, R.CommentReference contentObject) { + BigInteger foundCommentId = contentObject + .getId(); + if (foundCommentId.equals(commentId)) { + parent.getContent().remove(i); + return true; + } + return false; + } + public static Map getComments( WordprocessingMLPackage document) { Map rootComments = new HashMap<>(); @@ -271,14 +299,14 @@ protected void onCommentRangeStart(CommentRangeStart commentRangeStart) { protected void onCommentRangeEnd(CommentRangeEnd commentRangeEnd) { CommentWrapper commentWrapper = allComments.get(commentRangeEnd.getId()); if (commentWrapper == null) { - throw new RuntimeException("UNEXPECTED !"); + throw new RuntimeException("Found a comment range end before the comment range start !"); } commentWrapper.setCommentRangeEnd(commentRangeEnd); if (!stack.isEmpty()) { if (stack.peek().equals(commentWrapper)) { stack.pop(); } else { - throw new RuntimeException("UNEXPECTED 2 !"); + throw new RuntimeException("Cannot figure which comment contains the other !"); } } } diff --git a/src/main/java/org/wickedsource/docxstamper/util/DocumentUtil.java b/src/main/java/org/wickedsource/docxstamper/util/DocumentUtil.java index b00ad4f8..5b2c49a2 100644 --- a/src/main/java/org/wickedsource/docxstamper/util/DocumentUtil.java +++ b/src/main/java/org/wickedsource/docxstamper/util/DocumentUtil.java @@ -27,7 +27,7 @@ public class DocumentUtil { * @throws Exception */ public static List prepareDocumentForInsert(WordprocessingMLPackage sourceDocument, WordprocessingMLPackage destDocument) throws Exception { - return walkObjects(sourceDocument.getMainDocumentPart(), sourceDocument, destDocument); + return walkObjectsAndImportImages(sourceDocument.getMainDocumentPart(), sourceDocument, destDocument); } /** @@ -40,7 +40,7 @@ public static List prepareDocumentForInsert(WordprocessingMLPackage sour * @return the list of imported objects from the source container. * @throws Exception */ - private static List walkObjects(ContentAccessor sourceContainer, WordprocessingMLPackage sourceDocument, WordprocessingMLPackage destDocument) throws Exception { + public static List walkObjectsAndImportImages(ContentAccessor sourceContainer, WordprocessingMLPackage sourceDocument, WordprocessingMLPackage destDocument) throws Exception { List result = new ArrayList<>(); for (Object obj : sourceContainer.getContent()) { if (obj instanceof R && isImageRun((R) obj)) { @@ -48,7 +48,7 @@ private static List walkObjects(ContentAccessor sourceContainer, Wordpro // TODO : retrieve filename, altText and width from source document result.add(ImageResolver.createRunWithImage(destDocument, imageData, null, null, null)); } else if (obj instanceof ContentAccessor) { - List importedChildren = walkObjects((ContentAccessor) obj, sourceDocument, destDocument); + List importedChildren = walkObjectsAndImportImages((ContentAccessor) obj, sourceDocument, destDocument); ((ContentAccessor) obj).getContent().clear(); ((ContentAccessor) obj).getContent().addAll(importedChildren); result.add(obj); @@ -121,7 +121,7 @@ private static boolean isImageRun(R run) { * @param drawing the drawing to get the relationship id. * @return */ - private static String getImageRelationshipId(Drawing drawing) { + public static String getImageRelationshipId(Drawing drawing) { Graphic graphic = getInlineGraphic(drawing); return graphic.getGraphicData().getPic().getBlipFill().getBlip().getEmbed(); } diff --git a/src/main/java/org/wickedsource/docxstamper/util/walk/DocumentWalker.java b/src/main/java/org/wickedsource/docxstamper/util/walk/DocumentWalker.java index 1f1bb102..6a2cb939 100644 --- a/src/main/java/org/wickedsource/docxstamper/util/walk/DocumentWalker.java +++ b/src/main/java/org/wickedsource/docxstamper/util/walk/DocumentWalker.java @@ -41,8 +41,9 @@ public void walk() { private void walkTable(Tbl table) { onTable(table); for (Object contentElement : table.getContent()) { - if (XmlUtils.unwrap(contentElement) instanceof Tr) { - Tr row = (Tr) contentElement; + Object unwrappedObject = XmlUtils.unwrap(contentElement); + if (unwrappedObject instanceof Tr) { + Tr row = (Tr) unwrappedObject; walkTableRow(row); } } @@ -52,8 +53,9 @@ private void walkTable(Tbl table) { private void walkTableRow(Tr row) { onTableRow(row); for (Object rowContentElement : row.getContent()) { - if (XmlUtils.unwrap(rowContentElement) instanceof Tc) { - Tc cell = rowContentElement instanceof Tc ? (Tc) rowContentElement : (Tc) ((JAXBElement) rowContentElement).getValue(); + Object unwrappedObject = XmlUtils.unwrap(rowContentElement); + if (unwrappedObject instanceof Tc) { + Tc cell = (Tc) unwrappedObject; walkTableCell(cell); } } @@ -62,12 +64,19 @@ private void walkTableRow(Tr row) { private void walkTableCell(Tc cell) { onTableCell(cell); for (Object cellContentElement : cell.getContent()) { - if (XmlUtils.unwrap(cellContentElement) instanceof P) { + Object unwrappedObject = XmlUtils.unwrap(cellContentElement); + if (unwrappedObject instanceof P) { P p = (P) cellContentElement; walkParagraph(p); - } else if (XmlUtils.unwrap(cellContentElement) instanceof Tbl) { - Tbl nestedTable = (Tbl) ((JAXBElement) cellContentElement).getValue(); + } else if (unwrappedObject instanceof Tbl) { + Tbl nestedTable = (Tbl) unwrappedObject; walkTable(nestedTable); + } else if (unwrappedObject instanceof CommentRangeStart) { + CommentRangeStart commentRangeStart = (CommentRangeStart) unwrappedObject; + onCommentRangeStart(commentRangeStart); + } else if (unwrappedObject instanceof CommentRangeEnd) { + CommentRangeEnd commentRangeEnd = (CommentRangeEnd) unwrappedObject; + onCommentRangeEnd(commentRangeEnd); } } } @@ -75,11 +84,12 @@ private void walkTableCell(Tc cell) { private void walkParagraph(P p) { onParagraph(p); for (Object element : p.getContent()) { - if (XmlUtils.unwrap(element) instanceof CommentRangeStart) { - CommentRangeStart commentRangeStart = (CommentRangeStart) element; + Object unwrappedObject = XmlUtils.unwrap(element); + if (unwrappedObject instanceof CommentRangeStart) { + CommentRangeStart commentRangeStart = (CommentRangeStart) unwrappedObject; onCommentRangeStart(commentRangeStart); - } else if (XmlUtils.unwrap(element) instanceof CommentRangeEnd) { - CommentRangeEnd commentRangeEnd = (CommentRangeEnd) element; + } else if (unwrappedObject instanceof CommentRangeEnd) { + CommentRangeEnd commentRangeEnd = (CommentRangeEnd) unwrappedObject; onCommentRangeEnd(commentRangeEnd); } } diff --git a/src/test/java/org/wickedsource/docxstamper/CustomCommentProcessorTest.java b/src/test/java/org/wickedsource/docxstamper/CustomCommentProcessorTest.java index 96e3194a..499eb07e 100644 --- a/src/test/java/org/wickedsource/docxstamper/CustomCommentProcessorTest.java +++ b/src/test/java/org/wickedsource/docxstamper/CustomCommentProcessorTest.java @@ -7,10 +7,13 @@ import org.wickedsource.docxstamper.api.commentprocessor.ICommentProcessor; import org.wickedsource.docxstamper.api.coordinates.ParagraphCoordinates; import org.wickedsource.docxstamper.api.coordinates.RunCoordinates; +import org.wickedsource.docxstamper.api.typeresolver.TypeResolverRegistry; +import org.wickedsource.docxstamper.processor.BaseCommentProcessor; import org.wickedsource.docxstamper.util.CommentWrapper; import java.io.IOException; import java.io.InputStream; +import java.io.OutputStream; import java.util.ArrayList; import java.util.List; @@ -18,30 +21,36 @@ public class CustomCommentProcessorTest extends AbstractDocx4jTest { @Test public void test() throws Docx4JException, IOException { - CustomCommentProcessor processor = new CustomCommentProcessor(); DocxStamperConfiguration config = new DocxStamperConfiguration() - .addCommentProcessor(ICustomCommentProcessor.class, processor); + .addCommentProcessor(ICustomCommentProcessor.class, CustomCommentProcessor.class); InputStream template = getClass().getResourceAsStream("CustomCommentProcessorTest.docx"); - stampAndLoad(template, new EmptyContext(), config); + OutputStream out = getOutputStream(); + DocxStamper stamper = new DocxStamper(config); + stamper.stamp(template, new EmptyContext(), out); + CustomCommentProcessor processor = (CustomCommentProcessor) stamper.getCommentProcessorInstance(ICustomCommentProcessor.class); Assert.assertEquals(2, processor.getVisitedParagraphs().size()); } - static class EmptyContext{ + static class EmptyContext { } - public interface ICustomCommentProcessor { + public interface ICustomCommentProcessor extends ICommentProcessor { void visitParagraph(); } - public static class CustomCommentProcessor implements ICommentProcessor, ICustomCommentProcessor{ + public static class CustomCommentProcessor extends BaseCommentProcessor implements ICustomCommentProcessor { - private List visitedParagraphs = new ArrayList<>(); + private final List visitedParagraphs = new ArrayList<>(); private ParagraphCoordinates currentParagraph; + public CustomCommentProcessor(DocxStamperConfiguration config, TypeResolverRegistry typeResolverRegistry) { + super(config, typeResolverRegistry); + } + @Override public void commitChanges(WordprocessingMLPackage document) { @@ -62,6 +71,11 @@ public void setCurrentCommentWrapper(CommentWrapper commentWrapper) { } + @Override + public void setDocument(WordprocessingMLPackage document) { + + } + @Override public void reset() { diff --git a/src/test/java/org/wickedsource/docxstamper/RepeatDocPartAndCommentProcessorsIsolationTest.java b/src/test/java/org/wickedsource/docxstamper/RepeatDocPartAndCommentProcessorsIsolationTest.java new file mode 100644 index 00000000..48a82d41 --- /dev/null +++ b/src/test/java/org/wickedsource/docxstamper/RepeatDocPartAndCommentProcessorsIsolationTest.java @@ -0,0 +1,96 @@ +package org.wickedsource.docxstamper; + +import org.docx4j.XmlUtils; +import org.docx4j.openpackaging.exceptions.Docx4JException; +import org.docx4j.openpackaging.packages.WordprocessingMLPackage; +import org.docx4j.wml.Tbl; +import org.docx4j.wml.Tc; +import org.docx4j.wml.Tr; +import org.junit.Assert; +import org.junit.Test; +import org.springframework.context.expression.MapAccessor; + +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class RepeatDocPartAndCommentProcessorsIsolationTest extends AbstractDocx4jTest { + + static class TableValue { + public String value; + + TableValue(String value) { + this.value = value; + } + } + + @Test + public void repeatDocPartShouldNotUseSameCommentProcessorInstancesForSubtemplate() throws Docx4JException, IOException { + Map context = new HashMap<>(); + + List firstTable = new ArrayList<>(); + firstTable.add(new TableValue("firstTable value1")); + firstTable.add(new TableValue("firstTable value2")); + + List secondTable = new ArrayList<>(); + secondTable.add(new TableValue("repeatDocPart value1")); + secondTable.add(new TableValue("repeatDocPart value2")); + secondTable.add(new TableValue("repeatDocPart value3")); + + List thirdTable = new ArrayList<>(); + thirdTable.add(new TableValue("secondTable value1")); + thirdTable.add(new TableValue("secondTable value2")); + thirdTable.add(new TableValue("secondTable value3")); + thirdTable.add(new TableValue("secondTable value4")); + + context.put("firstTable", firstTable); + context.put("secondTable", secondTable); + context.put("thirdTable", thirdTable); + + InputStream template = getClass().getResourceAsStream("RepeatDocPartAndCommentProcessorsIsolationTest.docx"); + DocxStamperConfiguration config = new DocxStamperConfiguration(); + config.setEvaluationContextConfigurer((ctx) -> ctx.addPropertyAccessor(new MapAccessor())); + WordprocessingMLPackage document = stampAndLoad(template, context, config); + + List documentContent = document.getMainDocumentPart().getContent(); + + Assert.assertEquals(19, documentContent.size()); + + Assert.assertEquals("This will stay untouched.", documentContent.get(0).toString()); + Assert.assertEquals("This will also stay untouched.", documentContent.get(4).toString()); + Assert.assertEquals("This will stay untouched too.", documentContent.get(18).toString()); + + // checking table before repeating paragraph + Tbl table1 = (Tbl) XmlUtils.unwrap(documentContent.get(2)); + checkTableAgainstContextValues(firstTable, table1); + + // checking repeating paragraph + Assert.assertEquals("Repeating paragraph :", documentContent.get(6).toString()); + Assert.assertEquals("Repeating paragraph :", documentContent.get(9).toString()); + Assert.assertEquals("Repeating paragraph :", documentContent.get(12).toString()); + + Assert.assertEquals("repeatDocPart value1", documentContent.get(8).toString()); + Assert.assertEquals("repeatDocPart value2", documentContent.get(11).toString()); + Assert.assertEquals("repeatDocPart value3", documentContent.get(14).toString()); + + // checking table after repeating paragraph + Tbl table2 = (Tbl) XmlUtils.unwrap(documentContent.get(16)); + checkTableAgainstContextValues(thirdTable, table2); + } + + private static void checkTableAgainstContextValues(List tableValues, Tbl docxTable) { + Assert.assertEquals(tableValues.size(), docxTable.getContent().size()); + for (int i = 0; i < tableValues.size(); i++) { + Tr row = (Tr) docxTable.getContent().get(i); + Assert.assertEquals(1, row.getContent().size()); + + Tc cell = (Tc) XmlUtils.unwrap(row.getContent().get(0)); + String expected = tableValues.get(i).value; + Assert.assertEquals(1, cell.getContent().size()); + Assert.assertEquals(expected, cell.getContent().get(0).toString()); + } + } +} diff --git a/src/test/java/org/wickedsource/docxstamper/RepeatDocPartWithImagesInSourceTest.java b/src/test/java/org/wickedsource/docxstamper/RepeatDocPartWithImagesInSourceTest.java new file mode 100644 index 00000000..3b3073d0 --- /dev/null +++ b/src/test/java/org/wickedsource/docxstamper/RepeatDocPartWithImagesInSourceTest.java @@ -0,0 +1,67 @@ +package org.wickedsource.docxstamper; + +import org.docx4j.XmlUtils; +import org.docx4j.openpackaging.exceptions.Docx4JException; +import org.docx4j.openpackaging.packages.WordprocessingMLPackage; +import org.docx4j.openpackaging.parts.Part; +import org.docx4j.wml.ContentAccessor; +import org.docx4j.wml.Drawing; +import org.junit.Assert; +import org.junit.Test; +import org.springframework.context.expression.MapAccessor; +import org.springframework.expression.spel.support.StandardEvaluationContext; +import org.wickedsource.docxstamper.util.DocumentUtil; + +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; + +public class RepeatDocPartWithImagesInSourceTest extends AbstractDocx4jTest { + @Test + public void shouldReplicateImageFromTheMainDocumentInTheSubTemplate() throws Docx4JException, IOException { + Map context = new HashMap<>(); + ArrayList> subDocParts = new ArrayList<>(); + + Map firstPart = new HashMap<>(); + firstPart.put("name", "first doc part"); + subDocParts.add(firstPart); + + Map secondPart = new HashMap<>(); + secondPart.put("name", "second doc part"); + subDocParts.add(secondPart); + + context.put("subDocParts", subDocParts); + + DocxStamperConfiguration config = new DocxStamperConfiguration() + .setEvaluationContextConfigurer((StandardEvaluationContext ctx) -> ctx.addPropertyAccessor(new MapAccessor())); + + InputStream template = getClass().getResourceAsStream("RepeatDocPartWithImagesInSourceTest.docx"); + WordprocessingMLPackage document = stampAndLoad(template, context, config); + + Assert.assertEquals(document.getMainDocumentPart().getContent().size(), 11); + + Assert.assertEquals(document.getMainDocumentPart().getContent().get(0).toString(), "This is not repeated"); + Assert.assertEquals(document.getMainDocumentPart().getContent().get(2).toString(), "This should be repeated : first doc part"); + Assert.assertEquals(document.getMainDocumentPart().getContent().get(4).toString(), "This should be repeated too"); + Assert.assertEquals(document.getMainDocumentPart().getContent().get(5).toString(), "This should be repeated : second doc part"); + Assert.assertEquals(document.getMainDocumentPart().getContent().get(7).toString(), "This should be repeated too"); + Assert.assertEquals(document.getMainDocumentPart().getContent().get(9).toString(), "Not this"); + + Drawing image1 = (Drawing) XmlUtils.unwrap(((ContentAccessor) ((ContentAccessor) document.getMainDocumentPart().getContent().get(3)).getContent().get(0)).getContent().get(0)); + Drawing image2 = (Drawing) XmlUtils.unwrap(((ContentAccessor) ((ContentAccessor) document.getMainDocumentPart().getContent().get(6)).getContent().get(0)).getContent().get(0)); + + String image1RelId = DocumentUtil.getImageRelationshipId(image1); + String image2RelId = DocumentUtil.getImageRelationshipId(image2); + + Part image1RelPart = document.getMainDocumentPart().getRelationshipsPart().getPart(image1RelId); + Part image2RelPart = document.getMainDocumentPart().getRelationshipsPart().getPart(image2RelId); + + Assert.assertNotNull(image1RelPart); + Assert.assertNotNull(image2RelPart); + + Assert.assertNotEquals(document.getSourcePartStore().getPartSize(image1RelPart.getPartName().getName().substring(1)), 0); + Assert.assertNotEquals(document.getSourcePartStore().getPartSize(image2RelPart.getPartName().getName().substring(1)), 0); + } +} diff --git a/src/test/java/org/wickedsource/docxstamper/proxy/TestImpl.java b/src/test/java/org/wickedsource/docxstamper/proxy/TestImpl.java index d5f64b45..6f31d765 100644 --- a/src/test/java/org/wickedsource/docxstamper/proxy/TestImpl.java +++ b/src/test/java/org/wickedsource/docxstamper/proxy/TestImpl.java @@ -8,35 +8,40 @@ public class TestImpl implements ITestInterface, ICommentProcessor { - @Override - public String returnString(String string) { - return string; - } + @Override + public String returnString(String string) { + return string; + } - @Override - public void commitChanges(WordprocessingMLPackage document) { + @Override + public void commitChanges(WordprocessingMLPackage document) { - } + } - @Override - public void setCurrentParagraphCoordinates(ParagraphCoordinates coordinates) { + @Override + public void setCurrentParagraphCoordinates(ParagraphCoordinates coordinates) { - } + } - @Override - public void setCurrentRunCoordinates(RunCoordinates coordinates) { - // TODO Auto-generated method stub + @Override + public void setCurrentRunCoordinates(RunCoordinates coordinates) { + // TODO Auto-generated method stub - } + } - @Override - public void setCurrentCommentWrapper(CommentWrapper commentWrapper) { + @Override + public void setCurrentCommentWrapper(CommentWrapper commentWrapper) { - } + } - @Override - public void reset() { + @Override + public void setDocument(WordprocessingMLPackage document) { - } + } + + @Override + public void reset() { + + } } diff --git a/src/test/resources/org/wickedsource/docxstamper/RepeatDocPartAndCommentProcessorsIsolationTest.docx b/src/test/resources/org/wickedsource/docxstamper/RepeatDocPartAndCommentProcessorsIsolationTest.docx new file mode 100644 index 0000000000000000000000000000000000000000..eadfc561fb7b3f4c1be2d4abc085c3ed50a865b6 GIT binary patch literal 21113 zcmeGEW00)Nwl5C1ZQHhOyL+~6+n8P}5g7miNK4qx*4f0?Sx?!+ z-o#0V&fUhEpa2AjA`bxQyZ`@O{|`%`F-6{LO#or=%HIdPe#x*pQJ8Yj5l$AUt0#FvU!&#(U2YdO9${g0KGM;FG75q-3tJV{ zjhh4W3mp^*YLp|R0BN(|uH)x{b@MV=Z$K%qs-bL>k3{%SSX~25WRRM9Mo&?%Of@FT zk33ZZ`jR<2#bE&ibD`*vw5ggrRc!IW2WI|D2__Dd!Ks@1n~ET*QH|=bvs=bAHM+!X z;n74J_!^u3+I50`!O)W1=04j?cJah&|6Mtg*J2*G(bBYNmLGOJ@+nv2INMP!Hmvt| z(VAmFfQig5byn0m8w{p=!-VbP3VNR8G=Y3mjr#8r9e&P;!82(bGkY;d*4;>t$b7vR z+|LFgNN9mSzkp<4*6||T^kM*T9|#7KtAAof?*=~;gvE3tV)`4_da(#~Y{918C_KW6 z6K`Z71{&PNngqI@=i_uZRSA8T0}L<%SAidaGhIJc`!EXS=#8e=Fjl}J zv?OJa*Oo1pK0kPtmw|Ln48+H0=MtxXI%SEuY$xelW2LCTMsz_gzUU5Uy>+?+BnNjE zGrBL@@4{prKAL`v5ld2z1x9M1MoeLW#XpCoP4prkP>DPqltNn&QBKVpk^CymaZp)$ zO7mgPOJ`hIw3N{D1h3!~?GC|hpTzWmGUcyNWu}db?cZ$B`K^4K*vb@bN%=s7Wz9fO zniX$Y1%-9pIdl56u%~n|JeUSDA2OW&&C669N%Qk4;t-Rc?TS#NQE$f%J4;9K?%Uh_ zcl|i^Una8x0{}S1002Pz7K)plqcOd)oso;pw=?|93!bZK*zK_)_|Q*(=|gyL9P=TX z5o$cL2|$BLuJSP>*+9pOBo}z;&wOp>+iGkoyEd5PpMw9un)G7Mirib93MI+8V3;6I zm;`+hLo(%nmB1*@Y`b2&J5410;}|lFFi0}!v=ipEbGH%8zkZn=2O=7v#0DJ3;`XS) zfZiNs5<_v=hel4(BU#{=kX5xJD}WSVwe-VpkT*ZSOrk-#+aw8uV@hxfsF*tmnpN9A zEd))m5!?W-EW8ixM+iJ_h!^6%|L+utBFOGIxVy_kkG(kSBR5NQcB zy?GSgUHwFHmWW8Kofv&6$Vj{Du-GU}=ujD4P4A_uIhmKrw-2*Y+wK{f3TBbdy}Mbg z4bBl)R1Q71G{s9I5k}X;1A-C${7QD&c2=2XQ~51xZH2RtH-W=k*h1FI)O8;!A1)Fbm42T{*7X|o?UF(te6L(1b}N-aTHi*1+=9;2`mC)4Ebl%z|UQ1jR?R%du;Hj6LPnM2ymm2lz5L z8T*|*?YN>~!>ak1djaVJ6ZeoAB=1f!(LY1y@Vtr^gTM#S)v2hG8gNx>6rcuCj)#Yc zNWVL@>P?ZjF+cU)rq&=x3OEjp_8nA=V~e`FEN?C+$wzy08-n9 z6$jHhbSaw-j3aXoA<&qGZnwV)^||7pMS-KBR!`&i0`MyD_MWE+R{iLc==gvptc49K zY9n3aD&X`aAsCe3|6TTZ%7#uthr}1k{sx(e= z*s#EcQn_cNj=_62tc!7PO;91pJ;G*enK3i&lQ{q?S z5kYG8snD`p4mQpC;7!?!Dr9r_vW-}b{r+2j7nsinQ9^~`jOX)&`gcRGFYK%Gl(m(rkuJ4a6=52(vFjsFoQgl~lH(f7@ zCmG)9CD=>xLa@`TQj^@8Dh917q@=C|dGD0^<(he66~45)OID#fPEC&{(m0joh0V&G zE@g~W^fYUD)G%K)6uqR~NZ&j~RDT(3C><;)6rR$~7wjo1C%-@#pZcnE4Goi0c9ZsBP z%gn-9gOxkKpI+OnHM+Y)1DtWteGrPw(*FdN-00xEjj#F04cdaU)=28~gN2Kz4BrOh zzW`^atZv_)-bG)-b=!ik&MlJ2^})M*f-9RoE^p@qj!|a>f644yfpc0!-$;6V++x$xrts1E%Xp3@ldSO=ZRDsWw@0^*};`%fi)Gxn1oCC zSUhDyoiLi>jtLyq!6Mnai!or4oKINo zm+${8RUz{UHNA4xQU(#;DIn8EMXnup)x_%XZQ!Qx@B)^G|ZG ze!`~K>OLd$)9L3>=#5gdDtpkcuTK(@c(_*?zzrRafcF$xW>~@dF@hyS$RXO7 z_`PW;vKev^JuT(k0a>=MLth7POu{Krf6MZb1@8(Xaa>%8KQ~Cs%7SI!`?^ zG(MnbeEw}_{_ng4@CrXx5*Pr03jROhDkD3azrre~zv8O>6j`TC2858S>=R#oj$&|e zeQaNbdggE)H!pLty`s?j58Dc3K9PY(2Gcm)9WTf83;?pTE?fno*O8_HCbDmqy zO!rr;kBqwqLNf5c`yp>X+H#5mM%=xj7@L;_jsHNqHr8#}$4f-|tfk*PFiT^<*^N7a z&H-u!i$g@;D-`cNQ70e5VIDyytIz`sVY=LsS=KjNhB*6!RbW7lAgn^ru|3|0x$OtL zVvi)28!>D~ktDmK5vS+`=%i79p3}H!5b8UsJVpO5XSgRoOnpHtOVKHSjFqw>gUJ*w z5m03W0_=Mtq!EfkZV+%!(RF${#39;a*O+eT<>BLCWdnf$cgwbI#E5RNVsdkV?4{!! z=@XKUMne^$pwI}h8B?Bv3T{CS%Q1}9$Ym4Ac|jdc>X7Sr^<(L5^Bjr2 z+oka41tHn!GMd$(>sd2QNf7E**L6x(@zEwNv|OZVI{+~}3lH_AD9Jtn-L4MS(B^ej zQgSs>C-ZFe4ingS)-+ch9F^x10Y8+>&mYB#~u->NWEdi9p z0)9={(-P8^T@vMq9IcIekKL-2z4e{y5nZ=ag#Pyp+z@2rczHx6K^c}FfrYyFA6`8S zFA;;WLC-}aau!ens@i&jO6++syM*c$)RGQ;wCZV$H4VbX!p)-c1A5qT8PG_`RhLce z*f}{i<#8`P@;}q4R({H@{DNpLulit529+IJ9GT_YRMGG>*VEJc8XxPo*+HZ8HbVk3 z^dUESBd4|stg?AJw`A0j3mJb>bv;&(%zw~3*FaU6kz0Ayn)Ln7=>K~@qugxNA^Yty z`mq22P`@?vZ?EBOZen9X|2Jp+JEzguh*%Rt>88KO4Z6e~Z{E)(-P9jN-Z((n0!0#E!w`` zT4TWwM8O)1F|2j%#BENmq(@#p$|?}>Hm@!F<;w6AnVAZUC+i&Yih=p{apmUT_|^H< z{pamDA3guU(o|73KTSAvwgNi&5MZxtBK$?-fVcZ^8DQWsck#K#{b3qgJ(|gA1}&q^ zUuUCJe{4;+;m2p`AYYw?*IdsntuFO|7_sIpw(kl$ETS{LTJyuxJ1G!1e?tw9__~kF_ zCnDki#ICgg6#4{2;i3e25yl9}P}nt(sZLc~>)kY&NQyyN3&#DD%j9XFC3(i2m!1w| zorrB!V+Qy5+#fx;*_+$blgH=b;Qh2+vYNZs=Nd@6h!(&P8NyWK(m$uqI1 z_x?N@x%K(X{v?zCa4;G6&|QeI37yC&jJ2K2py<~Tw9O{j z=+sU$G$w9<1OD2V=z!-2><7HDe5shyv4^+?E^#yqn=f?7bw~*g7)8h|f{!Uw#@G=Z zhqR=#Pa2c}$ZSho2ph*n@>W(`RT4a7f^yR-;|$`_oxFU$$+QY`w(hp=AF=NVte-6% zmdxM-Fa#r_IYiL!u@9%8AG5zna+BnzG{lT6AQM#sPr0z7ElmcsL9K0iZ?QF)C?QG) z1M4z^DY$3Kex0WFd**5*o%e1st|i@`e^5)jqYk#@+^V zf*y8^N#0Hi7~YOg?hcUWtgAiy05ND5@t)AhZ6~+c7RLAW8n5fbPH^&b+v9g|7Zdo9achSPQ482DFjkvnanhZ(O9d zK4m0S*l^87cQ8oKU(t2u=IZmoZ%s7&CMl@h_^m|yC8#i~Ea9BD;NB(d$Q7Ndl_ zkEr0>_WXa$;aqo!=thaHNi?4R(d?CTLGI7u?pa8b$)~K=qxAj7EAur5)qvf{ktKi-U(5bH$+OSZ8q8%5Z5)4cS5U`D&T>A- z^X=|ST!F@3>AsyM8?)`8cPF7jdZ8iy@=UTbDx?tO-K-*^9SECu=)Agfl<-l>g zrs-6t!^IBGitp|`BUtTr^%MM`{Lh(1jy$ z!+SUGJ|BXI6&||BW*~V3JMm+-i#2lZD+8IFZ@D zC+FgNKu;+9JR$X%c1#XE!9GUJ#jqk9E+Xy>iUfikawu^E74T@d&@_ZZ2|t$5Ig3$R z1PL5AYS?S_*EJwnEg{nKDm$RvtRg)VIKdkjA|k)s`6ypYRNXrE%~QkVx$eiKe@fd^ zMC!h@hulQz6A<6a$g7UQaJH7CcC3ssrj=)<)MvJO4X0T<9T1d&isC}vLhM@t^5Y3S zid7J4DUCq^83!)90Oy<|SDJ6^$j@T_?5@sB@kwKD-#~(cqnJO0O~O7nFS~n>*@nU! z!{0}zI=52@;XdCIO5dzbORDl$OrWZHtR_7OrCZDZx$A-dj3MjZ{DuFug{4|*BHVub<@ zs#+056oRJ4j@YrO6Z2!DZ@vOQ@ITU8DPXX7v~or3R{PzCsv+8K#@n{+(sj@u0g|Jo zZbc5~P5x`BIY=?A3Xulgzom|-JQQjROACwB!n8Wh*sw{3Fl4lVH*M4lm$yp2V{3GcYsx z=RTRNUHq=;0AbOBn^Bvu&jxn0xYdH(B>^*(}QaysHi$( z%|CUv^t-V=z+r8Z`-5(G{uGnp_51FfPd^;T@74HrMnzzQ1d`euu-ZgvWNwK@%@8^`x$GO=_DOUT}O_F8KG z%c-`6b>pJAvXRtFi)b)ms}T?Uy9L&w}Wa11R; zQPOv~OY?Op7XCBxtPHDJWFV-j-~8S+COg z?y{hN5OAX!6C46RDj3-%s8qW{$3dxSpP;9-Kpj>Gb}->QpSR58iCgRoFg1fGX&@rq zo1wCtn?W?Rjj5C9cfUe9EPNh&Uhx0P#`dV02@ikA_DtXP9%KLt03#PCXFD5p8*6$C zXA_&hBYc7a5&()kg6~fMzptvezt?_3^ahW+InMH<;)+mK@zw;Jb6g#8NEw$E>lWg> zKRS~yAYD;jKjA+r+^nuok&PT>V0q9o8GW^1tyA4O*e6u#`hcL{#?+}NPWjtiTMLCSL!Z9BCDJxFeNwOc zd`sZJ=Rnltc?Y}Szgy+I7306jN5Rp~-s%4@A!Yq9AzcM_3r}yj9Gbc)?j|**=P%Xw z)zs{fge=1~GqVkCdc$$M3}^o)C-mm8h{ZP@+f0UE)c|{1!(lQhK5N9q=kiGIJ6H%qZ#(aF0OTL}a;LV}<2Bo1KX49@y2pw%9UTJE{ROk!Q=Ojik$i z8JWc@XY0ajAyiAdkXH9=$#G#xvZF83;~ivu{yEn2AXANn|65A`U4G#Da$`;3wHrbt z0D$k;zj8=h7aKzp$8RtGR|46YvS$0eC>C-BeUA$R*dS)_qZ*(_S0$p=6? zgN7K7BJq0v$UQ$AegKjH^gPrkF**D)x?|t%#an0COsx2$4?V@nN{hK)DgH;dhWZyj zy&aKN3CkfS9SAw}nMBgV!{yUf_c?O62{n7&8{* z7(LTG3;olxSI;_TXO&2N<0g`XlFrfhUooA$sLx2C34X@i7tD?4*+!1 z9fnr41OwPy$3Tn}`n6lIUeZNpQRs@;-o`+*KuX{AZA5h!kVBI~NJ2v*;^5RKl=`~n z1oG$)Su;CrdCRww6B-FdYYlZevHd*gVl6FB<15QM@pxOzo%U5$5=p=}iqyT@YY>x!<_RlGAJ4#3dXtt?z>%PD>`u1CK)mas{~Flf6aYhD9{ zzS3ZFn~BN^7cjD1wCzU#K`AgkG+JUy3<};2+kt%GT9xr~`9b?*3!`j*&g=DbHGt$3 z8hlZQHE+=&G^;G51<-cF1P8eZ?)CVt)k4R+w#e&Ll(k!t!rVgMY{lJ8WpZNmiQu2! zqYFn_FX?+oOr+9@rLgEowNTd(HN!AOUaHxCFTnzgvJa^^6+TXj%!x)-+!U49QWoJ# zA6F?8n_j$v)>x#-W4;9ny9upbplA%>B*5 zC0nC0C{x1;jZU|FQnTmy%&KYiKWj`)W+uaqo}L~9FP4Z0Ct(!KElZJf(5|^cZuVN< z>})TD4~(oX=Uo+8=roqn*$TID->blL*V^`9 zMPxQgyA(PPf0tv)S~a=2yimW1x$-UhY#?bNKiOeU@PP<yH-s= zhK<|LmTpKzCiTY1{yau@EHv+jd|85Se=(QL(+?puh4VbN7|PeB8djHp3#zIo1re*ZOpEjOLd4l1~}TJ_4h;O~)F0YyC8tn%^0 zh0EalcRg;%(ZOJ%L*8wTP87EJ#$xc`2K_%OIiS9|h%7Bn6J;QQ@gO77(BVQunv znEpF^!*Pub&F{+1bj!c6awBs7OD>~)%^|DkhRt<-#KP z`hE}%KoDx4kOBwcp_#c})+oA5zjoZpt*aG3(>{L+|T$V_>}Dr;G(Aq=0VspWR<86%~v0Pmg2nqRfgu z14}IE+^L--5~ST|Zl0KwmuC;Z(#)(B>p`V89$MX6dwjX(()xq@Q>D@7mUwEIGt{Jf zYV*noZacN>T~=oCw9Vl=B^E(rEi@wJ%q#}RA;!7?^f3aM(9pS$rY^7-Ft>|Bk^Y8% zTqvd40Fbly69(XjK0(LX3pPE6luR5z!Z~W(tNXqE%sK>+B$-^LkTjrL>#3NcY%DsK zELqelmhId+EOSZ`si(Vn&`A)f92c}eY|tve%c zu2Rv5))wkR#aGF9^R|dxiid{@&}vrZ(- zWH3iZSGtdP~EmR>7A!$o(&tCWM%IUk(opssIfM><{WSFgKNWW9m5d(mzRWnu^pZu z*L#<8&pzuLFB`EP+}UpqZf17hZN||@Y)aL~ia{E>vM~*$M=F!lSSt79&RCGsoy-;0s4+=s z{FKZ{=$`LO9FS=EJIxN9btEP3E98{0!d!5N22rej+T=0JNdpI`>ta&;x$p0-)1W}L z&?J!krr>YtV*SLFvdch|_!qJ1*tJwisYI}w;euaUxuH|0R=y>!F`Bt?A|m^p3`FZP zN83sWUP3kKiaL6@V^}?6dgiF{ctqI>M_J%f&UfmzjRYUFj-Q=CUCao9strS<=;G2V z__=hR5W13d zBAWDvic)rZWj8I|<4?KTC6?IIPW43#4$$UaeJpGLKIM@)uJQ3WUe!)NT-DC$57=X- z2y}f^*&81kb)-KSP-tUF-vskbU{GlD0CRQ~jQVp|Ro~36)=G_=u5`$pQD)C?T(uLo>P~qDlB>~)JtTC&c3C_TBDD@U32Xvj!Hv` z4b@l-To&0-J{h*}M|9LZoaI|TK8C`sO~WoEb2y~>opLTy)@ATL6Q*!UcR2Mpq$(O$ z5^*9!mx@~Por8{yKIc&R(T+U%4n?!Cw=ITo$`f%M`;Lrs=b@92d14O6*c)TC{wyDC z1Ps%~h7)mvBFni(IBBmS8Ua4W`%bttI-N|x0hd2T;7UwV_s^p*|U7?(88;!A-Q*;I4(&|G5 zOs&r2q0hhS0EhxCQ#fm1b;Z?FadBXkvw2jqG|tA&X$%4Pf)6&e|?1d9#Q3P5Yiv& zz~P&`flw8_zG>S3uZF*-`fFT5pudKJQYN@WEsG2Iui=_rR{2?Y4)(u%2E=@ z!1j&$tct_RW;J05F#%7CDa;OV-)BiW!Nno&p+sw^cHYFbq2mR#4lK4TQIXRCx85CKE)? z0#c)jm6LXpG1i2feN#^Mwxt+1pou&+n4LN|l#K!R*wlQhrNzknr@tk+zHD@5N>#~_ zige+BF;}I%iekclu{Uxv?!NKA`p^HHjoMmjH?bK1Z+03E+<>}g_ty=}Z)VKSTBC`@ z^nb913@kO;=>K9Xf6W>q^MA1a>mk&Hfs*zFxjN#3z2!7796l5J3@7S&lx7U>BWvsZ$h zjW?a%wR`+n1eSgde0Ol_n^P5ev(Ttry7kvNav2Oh5lI{`sn%5Pv7}DHTMQrjnrwPs za<#hqNwY_*Rx!ifzT$G8q5{ebg1gqaC7Ep_7{tdf!ClrRRo0ZqAZGWr14>ziwKL%q zx#@d(KeH-#-F%R2nPQ)SUs zJeVwlL|m;R88ly*vtW#+h1|1H?xcn-8i{66=zFunBoDGJ*ppsqVRakKLQ($}P;!E5 z5p!tumQSgpItJ}jkvE+bnkuy?z)m~@*(HV1=RYDXw z2bf*?=2ud&HWR+rj`I3L5|YjF#U*+1Mdu~CK|M}T=>XC9z0?;bjC1_#m9NTz&-V|S zHZ6vYZr;*Xjo#wY7KPrNnRVY$cD&qKQNxB3^OAKjA@keeEoJG?H&FUT6QP4Qc;|B% z;{s2qrKR1lp`r=+4^Vx=+&ysE;!rA^zGxDkMi3V(Bf0ixnvD8RuoYmZpVi;Ujrpp*KJrZY&&6emrrFS>|zZI$e)7KSWldGCtbwvKys?Q zr~c4^!g3gM6C?b>UgfdXorDPSQu;~U&z=unf4BwBdjNsbdy6@s=O>m?-FLsUIbn~R zSQ?`Ss-?=n`*CwMu_;kXxi2$K`vfzQ9Rk~9o>X0BWg1DWL!Yryu<~eD1~p0PSuu+| zK3cKrrmSL@(Wa%+?!l{4ZsQwL5i_JxY*&_5L6z<4R#|azlveT6Wi-i!&cL6_)o zHqWUmo39I+r|gT9_=&zzK~!W?Di6>}j{!93*Jh8psQxv(mazNY4s^CpI#s60j3*m6 zr%Df`0;=^Lt$D7<>eua&{sONsb;e;A5sT5SJ+EM>r#&zjh zRUBE2I7u^fwJ>=Kco30w{^%weykeC#KR<-cM7L_U)E|?gz77iXPnxk7E{T#2h>K)~ z)EQBG=@U5T?MFri;jI$J;5aTYcKkD6WB>koT-POKmX0@df?GOMDs6PSW-}{w-Vv9p zsRImSZmhL*>PM0P!zs)y?SVF8&eNTgTiYq4;N!AgqVxzKnv5%F-V(k%G^A6RU&8gT zEwYqo7frEQO_k%FVz&|K;c2R6cBfcjT)N%vKiEIcR%AB%3C+-y^|lm#t|?P&pd!() zT%LxfI(ym-N~b~QN*s4s?Djl|Up*{rdBLJgYz#_n>p99hALDmVuqyZ1dnHJN(WS-* z>PbJ>Jx8lbUU0~?Tzz3O0i=c8*FIWbu*d?hU9%9c6`X_^WnZ554|J`lR&Y^CosMu! zo~{WiZ8?AvHH9iJB>usFFsBaDOb?AnK+E-q>kAyvxeF-Oh1)#uu^m6pPro+}M}2Jn zQ1_x!Q}g~`GV7@nhZPyRfS_5(}#xI=3xYd6yjJn#6Uy_Zrf0^m9dFyi_7ugP@G6d z&h!u|?mA!j*W&`L!Irn3mOgbmg7bR@`O~NU)S3iF;KSV>E$I7{iH7$-)~y@iGSTF} zclGc>0RUkBTloLpGbif)eLT zywF|yytH1S5s=rKBUQ6Dlr##H#dQK7F{pL>)^l-b5~`?WATxwg2}{Lh7&``%AnDfQ zfOkZKyO8cBQP992h>bN|c`Fog4hw|AdlFynZRR+mR|$uE5`w9X7~-c%$Y*G+BarOu z@Ip*Q6M7y&Fr!mSe2m*T7O#TL74#t|Vys|4J~{j2f3Sj}kpx0Ijfe;}5R_9Ig32Wf zvwsxLXr0}t_;RyAB|K;?(zFB>&8N>csXm5psC1(~8=Fa^vQkKz?ozZ$S!~LHv!$5Y zmay)>QvjHyEKH%cE&W>fWM6GwVrlHYw6l2T$o$Qf1kE*&$SXU=@$1cDG{T2;d^j|jOKs}c)i@yI@7|g!OwblPdVbC`U z|H}mY8-KQnV5?7*K|{xaY2VuWNRQ%Kn^As!9(ZHRBUxiWsDj$RG`VJj%AN z7TW^qfk;kXy>qhP-g_0NyATSMWZ77|T`r>;gzY6|vprtv-B_DwDGG)d3}LP;Ux}_K4VC;!E$1h6 z<2q@El_i|qU7}I3$vOv#4I{I%1|qszL8^csOGX2DkY>zhOW|dd3mR$preS4QB%bW; zZ9yx+_NUsl1#G{9sT@m-k;FCmC8zKgCY{N=A3=J|_pVLJJ6Epha+a<%mbh^Bn6$m>^;f+Hpm)o`)3w_ zT5t$N%;$P@jLHl^g{6&!P#c`mv51`_9sLb|=Ig>VY`@=7a#1;_S=+PzCM z)Uy``Cr~Y8Fll-^6o-nN305!b`>RaMLz_MvI=Ew9hk|gRJjc8DfdoF`f!P~0+fFB= zRUYHT$i8kVY|s3|(0j$mT$kQ4Pc{(4v2JG{mi0YTH+nGO_p#Ay|Ll|yeGRZozY#g} zjY#Z&w2Mv_hSny3S;oc`S-VUIoT014N8Grpa1RTi0I3Qao6@W$U00`QR8$_Y&2>f5ZXE`445e+ZLIm3*C9!;S0Sz`L;SI~lQJjalZzrp4C*~=iB+y9SEaX2M7~aQ z8DuPxS?dUonQ#^AW!lR*dmnA8oC`Cj!-gU9@&+OZ2{l|ufHX|_ZK)FmNrs^!JAbEIL!tf&C%8Ewqf4Q4}tQKvWp5Se2~@5nOMoiZaw+9biPgRK~2!Em1fxZYMQ)==j@0E_-np>txlR2Jb8Qx0J|zFgWMtt|K&B zNhGS-Z2l<03P?Yj=)4}(5s!4)Z|?!j0(k2A5_iA8pjvl=ZSxU+2DVnay@0kHuKwDUXfqm(p+ls2_d1eRGxta z$J=BaV!F0HEn}bCG(V-;5SYN8NX@&<;eh_B|JZx>JvWMxvy}w1ML9IdrW(8xn_tHl8#!0RP?oBn#c+jLW`4X8T^AqKtU@c^t z#7HrlWJwOKe^4Yvam#uEffv4KyGTpw<>fWpDDYfi2Ig2rXY7@Xxb#<0YuA;eK&-x?9V4A;@CdVh0vX)BP&d8yWlm+MRI3;V^ zp3Qrn`$93CR&??P$>A4&AC3bKwxm88y^7VvoA-j|g8h?J@^Xto7 z3q7hU_0O7!oWg>`#U54PK*7wOy0|K(YpP&Rx4ydoeO2%hOdhxE%w+@vG(H@)-mK^XDyQ23|mS?B|kk?cbk>2{wo^KDtighOwH1-Gc7J_0Abh_1Zq~NFU`Nq+ui-+Y%@5i3ylgp@fpUM9*{(!~lR!#Y~_L|?;{=XI`?M>|L z|7GEeQY636jeP4;_KBN*t5Lm&kzr}N@#;-+C>ig4nZ%SBG6`eC_3Z`q3XQD=bDB1Q z|E9ce7wpCczQ@jmpat3BSS(rol|MlOQ@z#;zg{;O^wu00bObb|{z0z5+tb-p?j_s| z3$Bi&0T||P80gltcgv=kz`^pajClqli z3&gU+@t^f=D;$dJYMpi&tVjfLD5s{CMdzJVKeU)GfcPY~)iJ zoO=mx&z5g?3*NmAQQ*Q#gd5R>N#5H`3xn2RF46D~GN_NlfHUQR!#w>k{r&kPL+Z;g z!<-i`IIQ(GShJ*+aY9{UqQM?}dj_=uSy)+m!jag0L?_X(vy3*#+KKyZ3QA}%f7f~` zU-GF!Y$a8V#SHO@tvS=)Y{QYW*PRBm(>Z=HGEQ;Q*_7^+tepobKR4AySbMm$4Rkqy ztS^v7bY$c2xcgigUbNxu)t)IO&nj~Kf>9$&ZFc%hNM3AM{kesY$Ij0-Ap*LJx2R9t ze9N;DvBC^xX*Bn|Gs@pnd2jNbWm1~KgqX%K*u4w}E46KCSkwm!p}-Bcdcitg5<~(S zjRq(y3^7X~6L`Rq13tc#q{yRH!jb-F?j6cCc+raswbb*EiCm{8hkw9#%lS8q5xIRJQrwd7XF%{_zwuRnxK z3OLa0gQ)JyzdL`XI3U|u?eAIut4iH2$SczBpMdaow?m4;{qhTFlhZE)m~5g=gD=<7 zA9zOB0=PtSjDWtDVVJTf#mH1ev>^etBbBwd(-g3W;Y7*n9B352i8<>-yPOKadKsiC z(!+jEYzNhP92-q()u!Vf*Oi66Q+jvwyi>2ml2-8;1T-n%4o~F^r5WsC5UKI{0=dj| z%nVA?($`%BGfzZ-wqKXp8wkd-uSK|wV?MGQ7(GP#eZb|pQ0&y6CGLiSb!^?fLl*A^_j>jhK7uJ6%xi^pIaj6q+hMeRAi92MBF!vb+gDiwBv{`}p^y(Hc zXd2*)+R>FZot85}!KttgHQ&82LpydYlJ4j3rNcd!avJ^k#r*b?$k8^ky8@lQ&nD&={Oyh6D78URY=>FG@lwwlnx z&DQd)2YS!oK|%Th{QHTmawUDBs>X=fZ(N*Dh^{Zor@H`r6jrLnT$GZ4Vyl|z8xiZO zc67Q4L?Q;3`PKfYoI(Vt?=Q^FH;ewUP(uDFWK|=4Vl721BfO17G7Q!Xv+7$BVI^BX z)>x$alat|T(#6!KZRHnITiLRf@73D3l zwZz2fE3Hx56=|_)MGu&NpAVu2-UF0P7!g-3f{1;^fWfF(#}ZS2?ST z!Z@@(b*B1aQ$Ys;9Oyes$GedXWhcafk(`}5$DOZFQZWKMf_MAQ8^)MgTjp^u%qy-& zjxMF2y51tLayMcxu?vmLLOn!d7I;o@dp!*8?i~?wp{teW5p1!nnLmY}Se7=dFqF+4 z9ZgE@-uv2{tC7LPWyOPjePY<^nAFZD^F-gRr{n&AJFvIw_gZ12x0(A+_$zjA(5+f{ z>~7y{N!d42)*q}sCa=BeSbOTH^@P6Hc|Y=hmKbV&e7XMRlf$zm>NWmxV_P0sVsBY> z2$%>ofEh&&m`M=JZy~$0;frubw`PMg3xw!7zp)E=$_(3szYp#m%*dZ}C*YLea&OHN zYcIZCQtqBU$)_W-GVkwuwoJR^g+}N9-+{aLwz|d|ZeE_TU}aW-geQ~}R_g?$CpYiVGm3+;OH4;(*e{COHoAoX(-=SR2De=^`wM<-$Yx#yhDO$a&wpThC zK43k3f7Qw^&RyAGFW27%7KV^TvW!f+z#%d0N2nor70kqPpjv=8ssX5HGa(!B0%#@D zNloY)(GRUbXypKI%E36o23=MR;Nynq z2BDAXAPn*b4g!IFgfhZ|t{=SK1WnhSPWnjSQOrUE=ZNwpK t7xO^U4sFt*>qf2Jkab&oBPVEVbzOirD{$*MXxc!8K?%4C(9svf0|1vo43_`^ literal 0 HcmV?d00001 diff --git a/src/test/resources/org/wickedsource/docxstamper/RepeatDocPartWithImagesInSourceTest.docx b/src/test/resources/org/wickedsource/docxstamper/RepeatDocPartWithImagesInSourceTest.docx new file mode 100644 index 0000000000000000000000000000000000000000..a0a9364aaf3cd611229a95be1beabe7688bfeeec GIT binary patch literal 210695 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�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%0AqDsYng(N`nAlN- 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 literal 0 HcmV?d00001 From e3395b071079655ea885b6760444226542e86867 Mon Sep 17 00:00:00 2001 From: Youssouf Naciri Date: Tue, 24 Jan 2023 11:37:57 +0100 Subject: [PATCH 51/51] ported NoNException PR #100 to master-javax --- .../repeat/RepeatDocPartProcessor.java | 13 +- .../docxstamper/RepeatDocPartNestingTest.java | 118 ++++++++++++++++++ .../docxstamper/context/AClass.java | 25 ++++ .../docxstamper/context/Grade.java | 25 ++++ .../docxstamper/context/SchoolContext.java | 25 ++++ .../docxstamper/context/Student.java | 32 +++++ .../docxstamper/RepeatDocPartNestingTest.docx | Bin 0 -> 19035 bytes 7 files changed, 237 insertions(+), 1 deletion(-) create mode 100644 src/test/java/org/wickedsource/docxstamper/RepeatDocPartNestingTest.java create mode 100644 src/test/java/org/wickedsource/docxstamper/context/AClass.java create mode 100644 src/test/java/org/wickedsource/docxstamper/context/Grade.java create mode 100644 src/test/java/org/wickedsource/docxstamper/context/SchoolContext.java create mode 100644 src/test/java/org/wickedsource/docxstamper/context/Student.java create mode 100644 src/test/resources/org/wickedsource/docxstamper/RepeatDocPartNestingTest.docx diff --git a/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatDocPartProcessor.java b/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatDocPartProcessor.java index 8b1317bd..705b0520 100644 --- a/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatDocPartProcessor.java +++ b/src/main/java/org/wickedsource/docxstamper/processor/repeat/RepeatDocPartProcessor.java @@ -7,6 +7,7 @@ import org.docx4j.openpackaging.parts.WordprocessingML.CommentsPart; import org.docx4j.wml.*; import org.jvnet.jaxb2_commons.ppp.Child; +import org.springframework.util.CollectionUtils; import org.wickedsource.docxstamper.DocxStamper; import org.wickedsource.docxstamper.DocxStamperConfiguration; import org.wickedsource.docxstamper.api.typeresolver.TypeResolverRegistry; @@ -131,12 +132,22 @@ private WordprocessingMLPackage extractSubTemplate(CommentWrapper commentWrapper DocumentUtil.walkObjectsAndImportImages(fakeBody, document, subDocument); Comments comments = objectFactory.createComments(); - commentWrapper.getChildren().forEach(comment -> comments.getComment().add(comment.getComment())); + extractedSubComments(commentWrapper, comments); commentsPart.setContents(comments); return subDocument; } + private void extractedSubComments(CommentWrapper commentWrapper, Comments comments) { + for (CommentWrapper child : commentWrapper.getChildren()) { + comments.getComment().add(child.getComment()); + if (CollectionUtils.isEmpty(child.getChildren())) { + continue; + } + extractedSubComments(child, comments); + } + } + private static void removeCommentAnchorsFromFinalElements(CommentWrapper commentWrapper, List finalRepeatElements) { List commentsToRemove = new ArrayList<>(); diff --git a/src/test/java/org/wickedsource/docxstamper/RepeatDocPartNestingTest.java b/src/test/java/org/wickedsource/docxstamper/RepeatDocPartNestingTest.java new file mode 100644 index 00000000..75a82609 --- /dev/null +++ b/src/test/java/org/wickedsource/docxstamper/RepeatDocPartNestingTest.java @@ -0,0 +1,118 @@ +package org.wickedsource.docxstamper; + +import org.docx4j.XmlUtils; +import org.docx4j.openpackaging.exceptions.Docx4JException; +import org.docx4j.openpackaging.packages.WordprocessingMLPackage; +import org.docx4j.wml.ContentAccessor; +import org.docx4j.wml.P; +import org.docx4j.wml.Tc; +import org.junit.Assert; +import org.junit.Test; +import org.wickedsource.docxstamper.context.AClass; +import org.wickedsource.docxstamper.context.Grade; +import org.wickedsource.docxstamper.context.SchoolContext; +import org.wickedsource.docxstamper.context.Student; +import org.wickedsource.docxstamper.util.ParagraphWrapper; +import org.wickedsource.docxstamper.util.walk.BaseDocumentWalker; +import org.wickedsource.docxstamper.util.walk.DocumentWalker; + +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; + +public class RepeatDocPartNestingTest extends AbstractDocx4jTest { + + int initParagraphsNumber = 2; + int schoolNameTitle = 1; + int numberOfGrades = 3; + int gradeTitle = 1; + int numberOfClasses = 3; + int classTitle = 1; + int numberOfStudents = 5; + int lastParagraphTitle = 1; + + private List documentContent = null; + + @Test + public void test() throws Docx4JException, IOException { + SchoolContext schoolContext = new SchoolContext("South Park Primary School"); + for (int i = 0; i < numberOfGrades; i++) { + schoolContext.getGrades().add(createOneGrade(i)); + } + InputStream template = getClass().getResourceAsStream("RepeatDocPartNestingTest.docx"); + WordprocessingMLPackage document = stampAndLoad(template, schoolContext); + + documentContent = document.getMainDocumentPart().getContent(); + // check object's num + int expectObjects = initParagraphsNumber + schoolNameTitle + numberOfGrades * (gradeTitle + numberOfClasses * (classTitle + numberOfStudents)) + lastParagraphTitle; + Assert.assertEquals(expectObjects, documentContent.size()); + + int index = 2; // skip init paragraphs + // check school name + checkParagraphContent(schoolContext.getSchoolName(), index++); + for (Grade grade : schoolContext.getGrades()) { + // check grade name + String expected = String.format("Grade No.%d there are %d classes", grade.getNumber(), grade.getClasses().size()); + checkParagraphContent(expected, index++); + for (AClass aClass : grade.getClasses()) { + // check class name + expected = String.format("Class No.%d there are %d students", aClass.getNumber(), aClass.getStudents() + .size()); + checkParagraphContent(expected, index++); + // check the student's list + for (Student s : aClass.getStudents()) { + Object object = XmlUtils.unwrap(documentContent.get(index++)); + final List cells = new ArrayList<>(); + DocumentWalker cellWalker = new BaseDocumentWalker((ContentAccessor) object) { + @Override + protected void onTableCell(Tc tableCell) { + cells.add(tableCell); + } + }; + cellWalker.walk(); + Assert.assertEquals(3, cells.size()); + Assert.assertEquals(String.valueOf(s.getNumber()), new ParagraphWrapper((P) cells.get(0) + .getContent() + .get(0)).getText()); + Assert.assertEquals(s.getName(), new ParagraphWrapper((P) cells.get(1).getContent() + .get(0)).getText()); + Assert.assertEquals(String.valueOf(s.getAge()), new ParagraphWrapper((P) cells.get(2) + .getContent() + .get(0)).getText()); + + } + } + } + checkParagraphContent(String.format("There are %d grades.", numberOfGrades), index); + + } + + private void checkParagraphContent(String expected, int index) { + Object object = XmlUtils.unwrap(documentContent.get(index)); + P paragraph = (P) object; + Assert.assertEquals(expected, new ParagraphWrapper(paragraph).getText()); + } + + private Grade createOneGrade(int number) { + + Grade grade = new Grade(number); + for (int i = 0; i < numberOfClasses; i++) { + grade.getClasses().add(createOneClass(i)); + } + return grade; + } + + private AClass createOneClass(int classNumber) { + AClass aClass = new AClass(classNumber); + for (int i = 0; i < 5; i++) { + aClass.getStudents().add(findOneStudent(i)); + } + return aClass; + } + + private Student findOneStudent(int i) { + return new Student(i, "Bruce·No" + i, 1 + i); + } + +} diff --git a/src/test/java/org/wickedsource/docxstamper/context/AClass.java b/src/test/java/org/wickedsource/docxstamper/context/AClass.java new file mode 100644 index 00000000..0b2382c8 --- /dev/null +++ b/src/test/java/org/wickedsource/docxstamper/context/AClass.java @@ -0,0 +1,25 @@ +package org.wickedsource.docxstamper.context; + +import java.util.ArrayList; +import java.util.List; + + +public class AClass { + public AClass() { + } + + int number; + List students = new ArrayList<>(); + + public int getNumber() { + return number; + } + + public List getStudents() { + return students; + } + + public AClass(int number) { + this.number = number; + } +} \ No newline at end of file diff --git a/src/test/java/org/wickedsource/docxstamper/context/Grade.java b/src/test/java/org/wickedsource/docxstamper/context/Grade.java new file mode 100644 index 00000000..03ac8d68 --- /dev/null +++ b/src/test/java/org/wickedsource/docxstamper/context/Grade.java @@ -0,0 +1,25 @@ +package org.wickedsource.docxstamper.context; + +import java.util.ArrayList; +import java.util.List; + + +public class Grade { + public Grade() { + } + + int number; + List classes = new ArrayList<>(); + + public int getNumber() { + return number; + } + + public Grade(int number) { + this.number = number; + } + + public List getClasses() { + return classes; + } +} \ No newline at end of file diff --git a/src/test/java/org/wickedsource/docxstamper/context/SchoolContext.java b/src/test/java/org/wickedsource/docxstamper/context/SchoolContext.java new file mode 100644 index 00000000..985076c6 --- /dev/null +++ b/src/test/java/org/wickedsource/docxstamper/context/SchoolContext.java @@ -0,0 +1,25 @@ +package org.wickedsource.docxstamper.context; + +import java.util.ArrayList; +import java.util.List; + +public class SchoolContext { + public SchoolContext() { + } + + String schoolName; + List grades = new ArrayList<>(); + + public SchoolContext(String schoolName) { + this.schoolName = schoolName; + } + + public String getSchoolName() { + return schoolName; + } + + public List getGrades() { + return grades; + } + +} \ No newline at end of file diff --git a/src/test/java/org/wickedsource/docxstamper/context/Student.java b/src/test/java/org/wickedsource/docxstamper/context/Student.java new file mode 100644 index 00000000..6d0ef855 --- /dev/null +++ b/src/test/java/org/wickedsource/docxstamper/context/Student.java @@ -0,0 +1,32 @@ +package org.wickedsource.docxstamper.context; + +public class Student { + public Student() { + } + + public int getNumber() { + return number; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public int getAge() { + return age; + } + + int number; + String name; + int age; + + public Student(int number, String name, int age) { + this.number = number; + this.name = name; + this.age = age; + } +} \ No newline at end of file diff --git a/src/test/resources/org/wickedsource/docxstamper/RepeatDocPartNestingTest.docx b/src/test/resources/org/wickedsource/docxstamper/RepeatDocPartNestingTest.docx new file mode 100644 index 0000000000000000000000000000000000000000..fd51b14ac00ee1102b511f28b8e55b415d964558 GIT binary patch literal 19035 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 literal 0 HcmV?d00001