CommentProcessor.java

package pro.verron.officestamper.api;

import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
import org.docx4j.wml.P;
import org.docx4j.wml.R;
import org.springframework.lang.Nullable;

/**
 * CommentProcessor is an interface that defines the methods for processing comments in a .docx template.
 */
public interface CommentProcessor {

    void setProcessorContext(ProcessorContext processorContext);

    /**
     * Passes the run that is currently being processed (i.e., the run that is commented in the
     * .docx template). This method is always called BEFORE the custom
     * methods of the custom comment processor interface
     * are called.
     *
     * @param run coordinates of the currently processed run within the template.
     */
    void setCurrentRun(@Nullable R run);

    /**
     * This method is called after all comments in the .docx template have been passed to the comment processor.
     * All manipulations of the .docx document SHOULD BE done in this method.
     * If certain manipulations are already done
     * within the custom methods of a comment processor,
     * the ongoing iteration over the paragraphs in the document
     * may be disturbed.
     * <p>
     * This method replaces the previous {@link #commitChanges(WordprocessingMLPackage)} and called with a DocxPart
     * as the parameter.
     *
     * @param docxPart The DocxPart that can be manipulated by using the DOCX4J api.
     */
    default void commitChanges(DocxPart docxPart) {
        commitChanges(docxPart.document());
    }

    /**
     * This method is called after all comments in the .docx template have been passed to the comment processor.
     * All manipulations of the .docx document SHOULD BE done in this method.
     * If certain manipulations are already done
     * within the custom methods of a comment processor,
     * the ongoing iteration over the paragraphs in the document
     * may be disturbed.
     * <p>
     * This method replaces the previous {@link #commitChanges(DocxPart)} and called with a DocxPart
     * as the parameter.
     *
     * @param document The document that can be manipulated by using the DOCX4J api.
     *
     * @deprecated replaced by {@link #commitChanges(DocxPart)}
     */
    @Deprecated(since = "2.3", forRemoval = true) default void commitChanges(WordprocessingMLPackage document) {
        throw new OfficeStamperException("Should not be called since deprecation, only legacy implementations have a "
                                         + "reason to keep implementing this");
    }

    Paragraph getParagraph();

    /**
     * Passes the paragraph that is currently being processed (i.e., the paragraph that is commented in the
     * .docx template). This method is always called BEFORE the custom
     * methods of the custom comment processor interface
     * are called.
     *
     * @param paragraph coordinates of the currently processed paragraph within the template.
     *
     * @deprecated use {@link #setProcessorContext(ProcessorContext)} instead
     */
    @Deprecated(since = "2.6", forRemoval = true)
    void setParagraph(P paragraph);

    /**
     * Passes the comment range wrapper that is currently being processed
     * (i.e., the start and end of comment that in the .docx template).
     * This method is always called BEFORE the custom methods of the custom comment
     * processor interface are called.
     *
     * @param comment of the currently processed comment within the template.
     */
    void setCurrentCommentWrapper(Comment comment);

    /**
     * Resets all states in the comment processor so that it can be re-used in another stamping process.
     */
    void reset();
}