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>() {}); + } + } + } + return null; + } + } diff --git a/bundles/af-core/src/main/java/com/adobe/cq/forms/core/components/views/Views.java b/bundles/af-core/src/main/java/com/adobe/cq/forms/core/components/views/Views.java index 9411d261ac..62dd56a224 100644 --- a/bundles/af-core/src/main/java/com/adobe/cq/forms/core/components/views/Views.java +++ b/bundles/af-core/src/main/java/com/adobe/cq/forms/core/components/views/Views.java @@ -29,4 +29,10 @@ public static class Publish {} */ public static class Author extends Publish {} + /** + * Use this view for including the print-specific properties + * Eg; dorContainer and pageTemplate + */ + public static class DoR extends Author {} + } diff --git a/bundles/af-core/src/test/java/com/adobe/cq/forms/core/components/internal/models/v1/form/ButtonImplTest.java b/bundles/af-core/src/test/java/com/adobe/cq/forms/core/components/internal/models/v1/form/ButtonImplTest.java index cd6d9cda37..ac7429ac97 100644 --- a/bundles/af-core/src/test/java/com/adobe/cq/forms/core/components/internal/models/v1/form/ButtonImplTest.java +++ b/bundles/af-core/src/test/java/com/adobe/cq/forms/core/components/internal/models/v1/form/ButtonImplTest.java @@ -15,6 +15,9 @@ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ package com.adobe.cq.forms.core.components.internal.models.v1.form; +import java.util.HashMap; +import java.util.Map; + import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -22,12 +25,14 @@ import com.adobe.cq.forms.core.Utils; import com.adobe.cq.forms.core.components.internal.form.FormConstants; -import com.adobe.cq.forms.core.components.models.form.*; +import com.adobe.cq.forms.core.components.models.form.Button; +import com.adobe.cq.forms.core.components.models.form.FieldType; import com.adobe.cq.forms.core.context.FormsCoreComponentTestContext; import io.wcm.testing.mock.aem.junit5.AemContext; import io.wcm.testing.mock.aem.junit5.AemContextExtension; import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; @ExtendWith(AemContextExtension.class) public class ButtonImplTest { @@ -148,4 +153,13 @@ void testNoFieldType() { Button button = Utils.getComponentUnderTest(PATH_BUTTON_NO_FIELDTYPE, Button.class, context); assertEquals(FieldType.BUTTON.getValue(), button.getFieldType()); } + + @Test + void testDorContainer() { + Button mockButton = Mockito.mock(ButtonImpl.class); + Mockito.when(mockButton.getDorContainer()).thenReturn(new HashMap<>()); + Mockito.when(mockButton.getDorProperties()).thenCallRealMethod(); + Map dorProperties = mockButton.getDorProperties(); + assertTrue(dorProperties.containsKey(ButtonImpl.CUSTOM_DOR_CONTAINER_WRAPPER)); + } } diff --git a/bundles/af-core/src/test/java/com/adobe/cq/forms/core/components/internal/models/v1/form/PanelImplTest.java b/bundles/af-core/src/test/java/com/adobe/cq/forms/core/components/internal/models/v1/form/PanelImplTest.java index 506291c089..cbe0d92d7b 100644 --- a/bundles/af-core/src/test/java/com/adobe/cq/forms/core/components/internal/models/v1/form/PanelImplTest.java +++ b/bundles/af-core/src/test/java/com/adobe/cq/forms/core/components/internal/models/v1/form/PanelImplTest.java @@ -15,6 +15,7 @@ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ package com.adobe.cq.forms.core.components.internal.models.v1.form; +import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; @@ -40,6 +41,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; @ExtendWith(AemContextExtension.class) public class PanelImplTest { @@ -137,4 +139,13 @@ void testNoFieldType() { Panel panel = Utils.getComponentUnderTest(PATH_PANEL_WITHOUT_FIELDTYPE, Panel.class, context); assertEquals(FieldType.PANEL.getValue(), panel.getFieldType()); } + + @Test + void testDorContainer() { + Panel mockPanel = Mockito.mock(PanelImpl.class); + Mockito.when(mockPanel.getDorContainer()).thenReturn(new HashMap<>()); + Mockito.when(mockPanel.getDorProperties()).thenCallRealMethod(); + Map dorProperties = mockPanel.getDorProperties(); + assertTrue(dorProperties.containsKey(PanelImpl.CUSTOM_DOR_CONTAINER_WRAPPER)); + } } diff --git a/bundles/af-core/src/test/java/com/adobe/cq/forms/core/components/internal/models/v1/form/RadioButtonImplTest.java b/bundles/af-core/src/test/java/com/adobe/cq/forms/core/components/internal/models/v1/form/RadioButtonImplTest.java index c2048cb14a..7e1f2e191a 100644 --- a/bundles/af-core/src/test/java/com/adobe/cq/forms/core/components/internal/models/v1/form/RadioButtonImplTest.java +++ b/bundles/af-core/src/test/java/com/adobe/cq/forms/core/components/internal/models/v1/form/RadioButtonImplTest.java @@ -427,4 +427,4 @@ void testNoFieldType() { RadioButton radioButton = getRadioButtonUnderTest(PATH_RADIOBUTTON_WITHOUT_FIELDTYPE); assertEquals(FieldType.RADIO_GROUP.getValue(), radioButton.getFieldType()); } -} +} \ No newline at end of file diff --git a/bundles/af-core/src/test/java/com/adobe/cq/forms/core/components/internal/models/v2/form/FormContainerImplTest.java b/bundles/af-core/src/test/java/com/adobe/cq/forms/core/components/internal/models/v2/form/FormContainerImplTest.java index ed2628bbbd..23440193c2 100644 --- a/bundles/af-core/src/test/java/com/adobe/cq/forms/core/components/internal/models/v2/form/FormContainerImplTest.java +++ b/bundles/af-core/src/test/java/com/adobe/cq/forms/core/components/internal/models/v2/form/FormContainerImplTest.java @@ -35,6 +35,7 @@ import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.osgi.services.HttpClientBuilderFactory; import org.apache.sling.api.resource.Resource; +import org.apache.sling.api.resource.ValueMap; import org.apache.sling.i18n.ResourceBundleProvider; import org.apache.sling.testing.mock.sling.MockResourceBundle; import org.apache.sling.testing.mock.sling.MockResourceBundleProvider; @@ -54,7 +55,13 @@ import com.adobe.cq.forms.core.Utils; import com.adobe.cq.forms.core.components.internal.form.FormConstants; import com.adobe.cq.forms.core.components.internal.form.ReservedProperties; -import com.adobe.cq.forms.core.components.models.form.*; +import com.adobe.cq.forms.core.components.models.form.AutoSaveConfiguration; +import com.adobe.cq.forms.core.components.models.form.FieldType; +import com.adobe.cq.forms.core.components.models.form.FormClientLibManager; +import com.adobe.cq.forms.core.components.models.form.FormContainer; +import com.adobe.cq.forms.core.components.models.form.FormMetaData; +import com.adobe.cq.forms.core.components.models.form.TextInput; +import com.adobe.cq.forms.core.components.models.form.ThankYouOption; import com.adobe.cq.forms.core.components.views.Views; import com.adobe.cq.forms.core.context.FormsCoreComponentTestContext; import com.day.cq.i18n.I18n; @@ -96,6 +103,7 @@ public class FormContainerImplTest { + "/formContainer-cc-form-spreadsheet-submission"; private static final String PATH_CC_FORM_REST_SUBMISSION = CONTENT_ROOT + "/formContainer-cc-form-rest-submission"; + private static final String PATH_FORM_WITH_FRAGMENT = CONTENT_ROOT + "/formcontainerv2-with-fragment"; private static final String PATH_FORM_WITHOUT_FIELDTYPE = CONTENT_ROOT + "/formcontainerv2-without-fieldtype"; private static final String PATH_FORM_WITH_AUTO_SAVE = CONTENT_ROOT + "/formcontainerv2WithAutoSave"; @@ -439,6 +447,7 @@ void testGetName() throws Exception { @Test public void testRequestAttributeIfContainerPageDifferent() { Resource resource = Mockito.mock(Resource.class); + Mockito.when(resource.getValueMap()).thenReturn(ValueMap.EMPTY); Page afPage = Mockito.mock(Page.class); Mockito.when(afPage.getPath()).thenReturn(AF_PATH); PageManager pageManager = Mockito.mock(PageManager.class); @@ -785,4 +794,10 @@ public void testActionForCCFormRestSubmission() throws Exception { !decodedAction.endsWith(".model.json")); Utils.testJSONExport(formContainer, Utils.getTestExporterJSONPath(BASE, PATH_CC_FORM_REST_SUBMISSION)); } + + @Test + void testJSONExportWithFragment() throws Exception { + FormContainer formContainer = Utils.getComponentUnderTest(PATH_FORM_WITH_FRAGMENT, FormContainerImpl.class, context); + Utils.testJSONExport(formContainer, Utils.getTestExporterJSONPath(BASE, PATH_FORM_WITH_FRAGMENT)); + } } diff --git a/bundles/af-core/src/test/java/com/adobe/cq/forms/core/components/models/form/FormComponentTest.java b/bundles/af-core/src/test/java/com/adobe/cq/forms/core/components/models/form/FormComponentTest.java new file mode 100644 index 0000000000..58dff2ea1f --- /dev/null +++ b/bundles/af-core/src/test/java/com/adobe/cq/forms/core/components/models/form/FormComponentTest.java @@ -0,0 +1,35 @@ +/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~ Copyright 2022 Adobe + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ +package com.adobe.cq.forms.core.components.models.form; + +import java.util.Collections; + +import org.junit.jupiter.api.Test; +import org.mockito.Mockito; +import org.osgi.annotation.versioning.ProviderType; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +@ProviderType +public class FormComponentTest { + @Test + public void testGetDorContainer() { + FormComponent formComponent = Mockito.mock(FormComponent.class); + Mockito.when(formComponent.getDorContainer()).thenCallRealMethod(); + assertEquals(Collections.emptyMap(), formComponent.getDorContainer()); + } + +} diff --git a/bundles/af-core/src/test/resources/form/formcontainer/exporter-formcontainerv2-with-fragment.json b/bundles/af-core/src/test/resources/form/formcontainer/exporter-formcontainerv2-with-fragment.json new file mode 100644 index 0000000000..08939197f1 --- /dev/null +++ b/bundles/af-core/src/test/resources/form/formcontainer/exporter-formcontainerv2-with-fragment.json @@ -0,0 +1,91 @@ +{ + ":items": { + "fragment": { + ":items": { + "textinput": { + ":type": "core/fd/components/form/textinput/v1/textinput", + "events": { + "custom:setProperty": [ + "$event.payload" + ] + }, + "fieldType": "text-input", + "id": "textinput-dea7152197", + "label": { + "value": "Text Input" + }, + "name": "fragmenttextinput", + "properties": { + "fd:dor": { + "dorExclusion": false + }, + "fd:path": "/content/forms/af/demo/jcr:content/printfragment/jcr:content/print/jcr:content/guideContainer/textinput" + }, + "type": "string" + } + }, + ":itemsOrder": [ + "textinput" + ], + ":type": "core/fd/components/form/fragment/v1/fragment", + "events": { + "custom:setProperty": [ + "$event.payload" + ] + }, + "fieldType": "panel", + "id": "fragment-cf97dd9759", + "label": { + "value": "Fragment" + }, + "maxOccur": 4, + "minOccur": 0, + "name": "fragment-123", + "properties": { + "customProp": "customPropValue", + "fd:dor": { + "dorExcludeDescription": false, + "dorExcludeTitle": false, + "dorExclusion": false + }, + "fd:fragment": true, + "fd:path": "/content/forms/af/demo/jcr:content/formcontainerv2-with-fragment/fragment", + "fd:viewType": "fragment" + }, + "repeatable": true, + "type": "object" + } + }, + ":itemsOrder": [ + "fragment" + ], + ":type": "core/fd/components/print/container/v1/container", + "action": "/adobe/forms/af/submit/L2NvbnRlbnQvZm9ybXMvYWYvZGVtbw==", + "adaptiveform": "0.14.2", + "events": { + "custom:setProperty": [ + "$event.payload" + ] + }, + "fieldType": "form", + "id": "L2NvbnRlbnQvZm9ybXMvYWYvZGVtbw==", + "lang": "en", + "metadata": { + "grammar": "json-formula-1.0.0", + "version": "1.0.0" + }, + "properties": { + "customProp": "customPropValue", + "fd:customFunctionsUrl": "/adobe/forms/af/customfunctions/L2NvbnRlbnQvZm9ybXMvYWYvZGVtbw==", + "fd:dataUrl": "/adobe/forms/af/data/L2NvbnRlbnQvZm9ybXMvYWYvZGVtbw==", + "fd:dor": { + "dorTemplateRef": "xyz", + "dorType": "generate" + }, + "fd:formDataEnabled": true, + "fd:isHamburgerMenuEnabled": false, + "fd:path": "/content/forms/af/demo/jcr:content/formcontainerv2-with-fragment", + "fd:roleAttribute": "test-role-attribute", + "fd:schemaType": "BASIC" + } +} diff --git a/bundles/af-core/src/test/resources/form/formcontainer/exporter-formcontainerv2.json b/bundles/af-core/src/test/resources/form/formcontainer/exporter-formcontainerv2.json index a2e27f5321..90c1b902b2 100644 --- a/bundles/af-core/src/test/resources/form/formcontainer/exporter-formcontainerv2.json +++ b/bundles/af-core/src/test/resources/form/formcontainer/exporter-formcontainerv2.json @@ -57,4 +57,4 @@ ":type": "core/fd/components/form/textinput/v1/textinput" } } -} +} \ No newline at end of file diff --git a/bundles/af-core/src/test/resources/form/formcontainer/test-page-content.json b/bundles/af-core/src/test/resources/form/formcontainer/test-page-content.json index 5b999c8856..87fada10af 100644 --- a/bundles/af-core/src/test/resources/form/formcontainer/test-page-content.json +++ b/bundles/af-core/src/test/resources/form/formcontainer/test-page-content.json @@ -210,6 +210,67 @@ "visible": false }, "actionType": "fd/af/components/guidesubmittype/rest" + }, + "formcontainerv2-with-fragment": { + "jcr:primaryType": "nt:unstructured", + "sling:resourceType" : "core/fd/components/print/container/v1/container", + "thankYouMessage": "Thank you for submitting.", + "fd:roleAttribute": "test-role-attribute", + "thankYouOption": "message", + "redirect": "/content/wknd", + "prefillService": "FDM", + "fieldType" : "form", + "dorType": "generate", + "dorTemplateRef": "xyz", + "clientLibRef": "abc", + "customProp": "customPropValue", + "fragment": { + "jcr:primaryType": "nt:unstructured", + "wrapData": true, + "jcr:title": "Fragment", + "minOccur": "0", + "jcr:lastModifiedBy": "admin", + "name": "fragment-123", + "maxOccur": "4", + "jcr:lastModified": "Fri Jun 02 2023 12:34:24 GMT+0530", + "repeatable": true, + "sling:resourceType": "core/fd/components/form/fragment/v1/fragment", + "fieldType": "panel", + "fragmentPath": "/content/forms/af/demo/jcr:content/printfragment", + "customProp": "customPropValue" + } + }, + "printfragment": { + "jcr:primaryType": "nt:unstructured", + "jcr:title": "AF Fragment (v2)", + "jcr:content": { + "jcr:primaryType": "cq:PageContent", + "jcr:title": "AF Fragment (v2)", + "print": { + "jcr:primaryType": "nt:unstructured", + "jcr:title": "AF Fragment (v2)", + "jcr:content": { + "jcr:primaryType": "cq:PageContent", + "jcr:title": "AF Fragment (v2)", + "guideContainer": { + "jcr:primaryType": "nt:unstructured", + "thankYouOption": "page", + "fd:version": "2.1", + "title": "AF Fragment (v2)", + "sling:resourceType": "core/fd/components/form/fragmentcontainer/v1/fragmentcontainer", + "fieldType": "form", + "dorType": "none", + "textinput": { + "jcr:primaryType": "nt:unstructured", + "jcr:title": "Text Input", + "name": "fragmenttextinput", + "sling:resourceType" : "core/fd/components/form/textinput/v1/textinput", + "fieldType": "text-input" + } + } + } + } + } } } } \ No newline at end of file diff --git a/parent/pom.xml b/parent/pom.xml index 4c13badbb2..09935d056b 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -91,6 +91,7 @@ 2.24.6 2.24.6 + 1.0.8 UTF-8 2.16.0 @@ -1074,6 +1075,11 @@ core.wcm.components.core ${core.wcm.components.version} + + com.adobe.aem + core-forms-print-components-print-dor-api + ${core.print.api.version} + org.apache.commons commons-text