diff --git a/bundles/af-core/pom.xml b/bundles/af-core/pom.xml
index 54eed7c5b3..172f68d6fb 100644
--- a/bundles/af-core/pom.xml
+++ b/bundles/af-core/pom.xml
@@ -653,6 +653,10 @@
core.wcm.components.core
provided
+
+ com.adobe.aem
+ core-forms-print-components-print-dor-api
+
org.apache.sling
org.apache.sling.testing.caconfig-mock-plugin
diff --git a/bundles/af-core/src/main/java/com/adobe/cq/forms/core/components/internal/form/FormConstants.java b/bundles/af-core/src/main/java/com/adobe/cq/forms/core/components/internal/form/FormConstants.java
index d5f64f60d9..bca5f7a677 100644
--- a/bundles/af-core/src/main/java/com/adobe/cq/forms/core/components/internal/form/FormConstants.java
+++ b/bundles/af-core/src/main/java/com/adobe/cq/forms/core/components/internal/form/FormConstants.java
@@ -148,4 +148,6 @@ private FormConstants() {
/** Form definition type indicating submission view */
public static final String FORM_DEFINITION_SUBMISSION = "submission";
+
+ public static final String PRINT_CHANNEL_MARKER = "print";
}
diff --git a/bundles/af-core/src/main/java/com/adobe/cq/forms/core/components/internal/models/v1/form/ButtonImpl.java b/bundles/af-core/src/main/java/com/adobe/cq/forms/core/components/internal/models/v1/form/ButtonImpl.java
index 11d84d0fc6..6597f80a1b 100644
--- a/bundles/af-core/src/main/java/com/adobe/cq/forms/core/components/internal/models/v1/form/ButtonImpl.java
+++ b/bundles/af-core/src/main/java/com/adobe/cq/forms/core/components/internal/models/v1/form/ButtonImpl.java
@@ -109,6 +109,10 @@ public Map getDorProperties() {
if (dorColspan != null) {
customDorProperties.put("dorColspan", dorColspan);
}
+ Map dorContainer = getDorContainer();
+ if (dorContainer != null) {
+ customDorProperties.put(CUSTOM_DOR_CONTAINER_WRAPPER, dorContainer);
+ }
return customDorProperties;
}
diff --git a/bundles/af-core/src/main/java/com/adobe/cq/forms/core/components/internal/models/v1/form/FragmentImpl.java b/bundles/af-core/src/main/java/com/adobe/cq/forms/core/components/internal/models/v1/form/FragmentImpl.java
index 9cff4e983f..de531934a4 100644
--- a/bundles/af-core/src/main/java/com/adobe/cq/forms/core/components/internal/models/v1/form/FragmentImpl.java
+++ b/bundles/af-core/src/main/java/com/adobe/cq/forms/core/components/internal/models/v1/form/FragmentImpl.java
@@ -15,7 +15,9 @@
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
package com.adobe.cq.forms.core.components.internal.models.v1.form;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
import javax.annotation.PostConstruct;
@@ -43,6 +45,7 @@
import com.adobe.cq.forms.core.components.models.form.FormContainer;
import com.adobe.cq.forms.core.components.models.form.Fragment;
import com.adobe.cq.forms.core.components.util.ComponentUtils;
+import com.day.cq.commons.jcr.JcrConstants;
import com.fasterxml.jackson.annotation.JsonIgnore;
@Model(
@@ -55,6 +58,7 @@
public class FragmentImpl extends PanelImpl implements Fragment {
public static final String CUSTOM_FRAGMENT_PROPERTY_WRAPPER = "fd:fragment";
+ private static final String PRINT_CHANNEL_PATH = "/" + JcrConstants.JCR_CONTENT + "/" + "print";
@OSGiService
private SlingModelFilter slingModelFilter;
@@ -70,6 +74,9 @@ public class FragmentImpl extends PanelImpl implements Fragment {
@PostConstruct
private void initFragmentModel() {
ResourceResolver resourceResolver = resource.getResourceResolver();
+
+ fragmentPath = this.getFragmentPathBasedOnChannel(fragmentPath);
+
fragmentContainer = ComponentUtils.getFragmentContainer(resourceResolver, fragmentPath);
if (request != null) {
FormClientLibManager formClientLibManager = request.adaptTo(FormClientLibManager.class);
@@ -80,6 +87,20 @@ private void initFragmentModel() {
}
}
+ private String getFragmentPathBasedOnChannel(String fragmentPath) {
+ Resource formContainerResource = resource;
+ String fragmentPathOfChannel = fragmentPath;
+ while (formContainerResource != null) {
+ String resourceType = formContainerResource.getValueMap().get("sling:resourceType", String.class);
+ if (resourceType != null && resourceType.contains(FormConstants.PRINT_CHANNEL_MARKER)) {
+ fragmentPathOfChannel = fragmentPath + PRINT_CHANNEL_PATH;
+ break;
+ }
+ formContainerResource = formContainerResource.getParent();
+ }
+ return fragmentPathOfChannel;
+ }
+
@JsonIgnore
public String getFragmentPath() {
return fragmentPath;
diff --git a/bundles/af-core/src/main/java/com/adobe/cq/forms/core/components/internal/models/v1/form/PanelImpl.java b/bundles/af-core/src/main/java/com/adobe/cq/forms/core/components/internal/models/v1/form/PanelImpl.java
index b066e38587..4ae32726a3 100644
--- a/bundles/af-core/src/main/java/com/adobe/cq/forms/core/components/internal/models/v1/form/PanelImpl.java
+++ b/bundles/af-core/src/main/java/com/adobe/cq/forms/core/components/internal/models/v1/form/PanelImpl.java
@@ -145,6 +145,10 @@ public Map getDorProperties() {
if (dorLayoutType != null) {
customDorProperties.put(DOR_LAYOUT_TYPE, dorLayoutType);
}
+ Map dorContainer = getDorContainer();
+ if (dorContainer != null) {
+ customDorProperties.put(CUSTOM_DOR_CONTAINER_WRAPPER, dorContainer);
+ }
return customDorProperties;
}
diff --git a/bundles/af-core/src/main/java/com/adobe/cq/forms/core/components/models/form/FormComponent.java b/bundles/af-core/src/main/java/com/adobe/cq/forms/core/components/models/form/FormComponent.java
index 8416d4ca8c..ee4446c73b 100644
--- a/bundles/af-core/src/main/java/com/adobe/cq/forms/core/components/models/form/FormComponent.java
+++ b/bundles/af-core/src/main/java/com/adobe/cq/forms/core/components/models/form/FormComponent.java
@@ -76,6 +76,17 @@ default Map getDorProperties() {
return Collections.emptyMap();
}
+ /**
+ * DOR container
+ *
+ * @since com.adobe.cq.forms.core.components.models.form 2.1.0
+ */
+ @JsonView(Views.DoR.class)
+ @JsonInclude(JsonInclude.Include.NON_EMPTY)
+ default Map getDorContainer() {
+ return Collections.emptyMap();
+ }
+
/**
* Returns getPath of the form field
*
diff --git a/bundles/af-core/src/main/java/com/adobe/cq/forms/core/components/util/AbstractFormComponentImpl.java b/bundles/af-core/src/main/java/com/adobe/cq/forms/core/components/util/AbstractFormComponentImpl.java
index bf2ceebb9e..ece75eead7 100644
--- a/bundles/af-core/src/main/java/com/adobe/cq/forms/core/components/util/AbstractFormComponentImpl.java
+++ b/bundles/af-core/src/main/java/com/adobe/cq/forms/core/components/util/AbstractFormComponentImpl.java
@@ -17,7 +17,18 @@
import java.io.IOException;
import java.math.BigDecimal;
-import java.util.*;
+import java.util.AbstractMap;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Calendar;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.Set;
import java.util.function.Predicate;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
@@ -49,6 +60,7 @@
import com.adobe.cq.forms.core.components.models.form.FieldType;
import com.adobe.cq.forms.core.components.models.form.FormComponent;
import com.adobe.cq.forms.core.components.models.form.Label;
+import com.adobe.cq.forms.core.components.models.form.print.dorapi.DorContainer;
import com.adobe.cq.wcm.core.components.models.Component;
import com.adobe.cq.wcm.core.components.util.ComponentUtils;
import com.day.cq.i18n.I18n;
@@ -58,6 +70,7 @@
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.core.JsonGenerator;
+import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.ObjectMapper;
@@ -258,6 +271,7 @@ protected boolean getEditMode() {
}
public static final String CUSTOM_DOR_PROPERTY_WRAPPER = "fd:dor";
+ public static final String CUSTOM_DOR_CONTAINER_WRAPPER = "dorContainer";
// used for DOR and SPA editor to work
public static final String CUSTOM_JCR_PATH_PROPERTY_WRAPPER = "fd:path";
@@ -544,6 +558,10 @@ public Map getDorProperties() {
if (dorBindRef != null) {
customDorProperties.put("dorBindRef", dorBindRef);
}
+ Map dorContainer = getDorContainer();
+ if (dorContainer != null) {
+ customDorProperties.put(CUSTOM_DOR_CONTAINER_WRAPPER, dorContainer);
+ }
return customDorProperties;
}
@@ -567,4 +585,26 @@ private List getDisabledXFAScripts() {
}
return new ArrayList<>(disabledScripts);
}
+
+ /**
+ * Returns the dor container properties.
+ *
+ * @return Map of dor container properties if `fd:dorContainer` node is present otherwise returns null
+ */
+ @JsonIgnore
+ @Override
+ public Map getDorContainer() {
+ if (resource != null) {
+ Resource dorContainerResource = resource.getChild("fd:dorContainer");
+ if (dorContainerResource != null) {
+ DorContainer dorContainer = dorContainerResource.adaptTo(DorContainer.class);
+ ObjectMapper objectMapper = new ObjectMapper();
+ if (dorContainer != null) {
+ return objectMapper.convertValue(dorContainer, new TypeReference
+
+ com.adobe.aem
+ core-forms-print-components-print-dor-api
+ ${core.print.api.version}
+
org.apache.commons
commons-text