From 56ad1a7c580a7507a251879192c8e28c53f2c652 Mon Sep 17 00:00:00 2001 From: Nitish Sharma <50713102+rednitish@users.noreply.github.com> Date: Fri, 4 Jun 2021 23:53:06 +0530 Subject: [PATCH] Xref validation (#604) * make helper singlton to improve memory * Bug fix: NPE issue due to no initialization at test run * Refactor static variable to non static * clear helper variable --- .../extension/PantheonXrefProcessor.java | 2 +- .../pantheon/servlet/DocumentPreviewFilter.java | 1 - .../servlet/DocumentVariantRenderServlet.java | 2 ++ .../pantheon/servlet/PublishDraftVersion.java | 2 ++ .../servlet/util/VersionUploadOperation.java | 2 +- .../validation/helper/XrefValidationHelper.java | 15 +++++++++++---- .../validation/validators/XrefValidator.java | 3 +-- 7 files changed, 18 insertions(+), 9 deletions(-) diff --git a/pantheon-bundle/src/main/java/com/redhat/pantheon/asciidoctor/extension/PantheonXrefProcessor.java b/pantheon-bundle/src/main/java/com/redhat/pantheon/asciidoctor/extension/PantheonXrefProcessor.java index 1cbd46b0c..6f485e380 100644 --- a/pantheon-bundle/src/main/java/com/redhat/pantheon/asciidoctor/extension/PantheonXrefProcessor.java +++ b/pantheon-bundle/src/main/java/com/redhat/pantheon/asciidoctor/extension/PantheonXrefProcessor.java @@ -58,7 +58,7 @@ public String preprocess(String content) { content = preprocessWithPattern(content, XREF_PATTERN, urlList); content = preprocessWithPattern(content, TRIANGLE_PATTERN, urlList); } - new XrefValidationHelper().setObjectsToValidate(urlList); + XrefValidationHelper.getInstance().setObjectsToValidate(urlList); return content; } diff --git a/pantheon-bundle/src/main/java/com/redhat/pantheon/servlet/DocumentPreviewFilter.java b/pantheon-bundle/src/main/java/com/redhat/pantheon/servlet/DocumentPreviewFilter.java index 661394fa4..839dd9604 100644 --- a/pantheon-bundle/src/main/java/com/redhat/pantheon/servlet/DocumentPreviewFilter.java +++ b/pantheon-bundle/src/main/java/com/redhat/pantheon/servlet/DocumentPreviewFilter.java @@ -59,7 +59,6 @@ public void doFilter(ServletRequest request, ServletResponse response, FilterCha } // FIXME - need to rework document preview servlets to support latest suffix (variant preview servlet already works) String forwardString = firstResource.get().getPath() + ".preview/" + mode; - new XrefValidationHelper().initList(); request.getRequestDispatcher(forwardString).forward(request, response); } catch (RepositoryException e) { throw new ServletException(e); diff --git a/pantheon-bundle/src/main/java/com/redhat/pantheon/servlet/DocumentVariantRenderServlet.java b/pantheon-bundle/src/main/java/com/redhat/pantheon/servlet/DocumentVariantRenderServlet.java index a615366a5..3d81c745e 100644 --- a/pantheon-bundle/src/main/java/com/redhat/pantheon/servlet/DocumentVariantRenderServlet.java +++ b/pantheon-bundle/src/main/java/com/redhat/pantheon/servlet/DocumentVariantRenderServlet.java @@ -3,6 +3,7 @@ import com.redhat.pantheon.asciidoctor.AsciidoctorService; import com.redhat.pantheon.helper.PantheonConstants; import com.redhat.pantheon.model.document.DocumentVariant; +import com.redhat.pantheon.validation.helper.XrefValidationHelper; import org.apache.commons.lang3.LocaleUtils; import org.apache.sling.api.SlingHttpServletRequest; import org.apache.sling.api.SlingHttpServletResponse; @@ -93,6 +94,7 @@ protected void doGet(SlingHttpServletRequest request, // only allow forced rerendering if this is a draft version. Released and historical revs are written in stone. boolean draft = latest && variant.hasDraft(); + XrefValidationHelper.getInstance().initList(); String html = asciidoctorService.getDocumentHtml( variant.getParentLocale().getParent(), LocaleUtils.toLocale(variant.getParentLocale().getName()), diff --git a/pantheon-bundle/src/main/java/com/redhat/pantheon/servlet/PublishDraftVersion.java b/pantheon-bundle/src/main/java/com/redhat/pantheon/servlet/PublishDraftVersion.java index 333cd181f..2e2902e8d 100644 --- a/pantheon-bundle/src/main/java/com/redhat/pantheon/servlet/PublishDraftVersion.java +++ b/pantheon-bundle/src/main/java/com/redhat/pantheon/servlet/PublishDraftVersion.java @@ -14,6 +14,7 @@ import com.redhat.pantheon.model.document.DocumentVersion; import com.redhat.pantheon.servlet.util.ServletHelper; import com.redhat.pantheon.sling.ServiceResourceResolverProvider; +import com.redhat.pantheon.validation.helper.XrefValidationHelper; import org.apache.http.HttpStatus; import org.apache.sling.api.SlingHttpServletRequest; import org.apache.sling.api.resource.PersistenceException; @@ -100,6 +101,7 @@ public void run(SlingHttpServletRequest request, PostResponse response, SlingPos .released().get(); // Regenerate the document once more + XrefValidationHelper.getInstance().initList(); asciidoctorService.getDocumentHtml(document, locale, variant, false, new HashMap(),true); events.fireEvent(new DocumentVersionPublishedEvent(documentVersion), 15); ServletUtils.getCustomerPortalUrl(request, response); diff --git a/pantheon-bundle/src/main/java/com/redhat/pantheon/servlet/util/VersionUploadOperation.java b/pantheon-bundle/src/main/java/com/redhat/pantheon/servlet/util/VersionUploadOperation.java index 8bb1e17e3..b1f5d0707 100644 --- a/pantheon-bundle/src/main/java/com/redhat/pantheon/servlet/util/VersionUploadOperation.java +++ b/pantheon-bundle/src/main/java/com/redhat/pantheon/servlet/util/VersionUploadOperation.java @@ -127,7 +127,7 @@ protected void versionUpload(SlingHttpServletRequest request, resolver.commit(); Map context = asciidoctorService.buildContextFromRequest(request); - new XrefValidationHelper().initList(); + XrefValidationHelper.getInstance().initList(); asciidoctorService.getDocumentHtml(document, localeObj, document.getWorkspace().getCanonicalVariantName(), true, context, true); diff --git a/pantheon-bundle/src/main/java/com/redhat/pantheon/validation/helper/XrefValidationHelper.java b/pantheon-bundle/src/main/java/com/redhat/pantheon/validation/helper/XrefValidationHelper.java index 3b49f00eb..bd9836854 100644 --- a/pantheon-bundle/src/main/java/com/redhat/pantheon/validation/helper/XrefValidationHelper.java +++ b/pantheon-bundle/src/main/java/com/redhat/pantheon/validation/helper/XrefValidationHelper.java @@ -10,10 +10,16 @@ public class XrefValidationHelper { private List xRefs; - public XrefValidationHelper() { - initList(); + private XrefValidationHelper() { } + private static class SingletonHelper{ + private static final XrefValidationHelper INSTANCE = new XrefValidationHelper(); + } + + public static XrefValidationHelper getInstance(){ + return SingletonHelper.INSTANCE; + } public List getObjectsToValidate() { return xRefs; } @@ -23,8 +29,9 @@ public void initList() { } public void setObjectsToValidate(List objectsToValidate) { - if(objectsToValidate.size()>0){ - xRefs.addAll(objectsToValidate); + if(null == xRefs || objectsToValidate.isEmpty()){ + return; } + xRefs.addAll(objectsToValidate); } } diff --git a/pantheon-bundle/src/main/java/com/redhat/pantheon/validation/validators/XrefValidator.java b/pantheon-bundle/src/main/java/com/redhat/pantheon/validation/validators/XrefValidator.java index a74eba5b2..9834e77d3 100644 --- a/pantheon-bundle/src/main/java/com/redhat/pantheon/validation/validators/XrefValidator.java +++ b/pantheon-bundle/src/main/java/com/redhat/pantheon/validation/validators/XrefValidator.java @@ -67,8 +67,7 @@ private Violations checkIfXrefValid(Violations violations) { private ErrorDetails checkXref() { ErrorDetails errorDetails = new ErrorDetails(); try { - XrefValidationHelper xrefValidationHelper = new XrefValidationHelper(); - List xrefTargets = xrefValidationHelper.getObjectsToValidate(); + List xrefTargets = XrefValidationHelper.getInstance().getObjectsToValidate(); if(null == xrefTargets || xrefTargets.size()==0){ return errorDetails; }