/** * Copyright (c) 2000-present Liferay, Inc. All rights reserved. * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation; either version 2.1 of the License, or (at your option) * any later version. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. */ package com.liferay.journal.util.test; import com.liferay.arquillian.extension.junit.bridge.junit.Arquillian; import com.liferay.dynamic.data.mapping.io.DDMFormJSONDeserializer; import com.liferay.dynamic.data.mapping.io.DDMFormXSDDeserializer; import com.liferay.dynamic.data.mapping.model.DDMForm; import com.liferay.dynamic.data.mapping.model.DDMFormField; import com.liferay.dynamic.data.mapping.model.DDMFormFieldOptions; import com.liferay.dynamic.data.mapping.model.DDMStructure; import com.liferay.dynamic.data.mapping.model.DDMStructureConstants; import com.liferay.dynamic.data.mapping.model.LocalizedValue; import com.liferay.dynamic.data.mapping.storage.Field; import com.liferay.dynamic.data.mapping.storage.Fields; import com.liferay.dynamic.data.mapping.storage.StorageType; import com.liferay.dynamic.data.mapping.test.util.DDMStructureTestHelper; import com.liferay.dynamic.data.mapping.util.DDM; import com.liferay.dynamic.data.mapping.util.DDMXML; import com.liferay.journal.model.JournalArticle; import com.liferay.journal.test.util.JournalTestUtil; import com.liferay.journal.util.JournalConverter; import com.liferay.portal.kernel.json.JSONFactoryUtil; import com.liferay.portal.kernel.json.JSONObject; import com.liferay.portal.kernel.model.Group; import com.liferay.portal.kernel.model.Layout; import com.liferay.portal.kernel.model.User; import com.liferay.portal.kernel.repository.model.FileEntry; import com.liferay.portal.kernel.test.rule.AggregateTestRule; import com.liferay.portal.kernel.test.rule.DeleteAfterTestRun; import com.liferay.portal.kernel.test.rule.Sync; import com.liferay.portal.kernel.test.rule.SynchronousDestinationTestRule; import com.liferay.portal.kernel.test.util.GroupTestUtil; import com.liferay.portal.kernel.test.util.TestPropsValues; import com.liferay.portal.kernel.util.LocaleUtil; import com.liferay.portal.kernel.util.PortalUtil; import com.liferay.portal.kernel.util.StringBundler; import com.liferay.portal.kernel.util.StringUtil; import com.liferay.portal.kernel.xml.Document; import com.liferay.portal.kernel.xml.Element; import com.liferay.portal.kernel.xml.UnsecureSAXReaderUtil; import com.liferay.portal.test.rule.LiferayIntegrationTestRule; import com.liferay.portal.util.test.LayoutTestUtil; import com.liferay.registry.Registry; import com.liferay.registry.RegistryUtil; import java.io.InputStream; import java.io.Serializable; import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Set; import org.junit.Assert; import org.junit.Before; import org.junit.BeforeClass; import org.junit.ClassRule; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; /** * @author Bruno Basto * @author Marcellus Tavares */ @RunWith(Arquillian.class) @Sync public class JournalConverterUtilTest { @ClassRule @Rule public static final AggregateTestRule aggregateTestRule = new AggregateTestRule( new LiferayIntegrationTestRule(), SynchronousDestinationTestRule.INSTANCE); @BeforeClass public static void setUpClass() { _enLocale = LocaleUtil.fromLanguageId("en_US"); _ptLocale = LocaleUtil.fromLanguageId("pt_BR"); } @Before public void setUp() throws Exception { setUpDDMFormJSONDeserializer(); setUpDDMFormXSDDeserializer(); setUpDDMXML(); _group = GroupTestUtil.addGroup(); _ddmStructureTestHelper = new DDMStructureTestHelper( PortalUtil.getClassNameId(JournalArticle.class), _group); _classNameId = PortalUtil.getClassNameId(JournalArticle.class); String definition = read("test-ddm-structure-all-fields.xml"); DDMForm ddmForm = _ddmFormXSDDeserializer.deserialize(definition); _ddmStructure = _ddmStructureTestHelper.addStructure( _classNameId, null, "Test Structure", ddmForm, StorageType.JSON.getValue(), DDMStructureConstants.TYPE_DEFAULT); Registry registry = RegistryUtil.getRegistry(); _ddmXML = registry.getService(DDMXML.class); _journalConverter = registry.getService(JournalConverter.class); } @Test public void testGetContentFromBooleanField() throws Exception { Fields fields = new Fields(); Field booleanField = getBooleanField(_ddmStructure.getStructureId()); fields.put(booleanField); Field fieldsDisplayField = getFieldsDisplayField( _ddmStructure.getStructureId(), "boolean_INSTANCE_Okhyj6Ni,boolean_INSTANCE_1SYNQuhg"); fields.put(fieldsDisplayField); String expectedContent = read( "test-journal-content-boolean-repeatable-field.xml"); String actualContent = _journalConverter.getContent( _ddmStructure, fields); assertEquals(expectedContent, actualContent); } @Test public void testGetContentFromLinkToLayoutField() throws Exception { Fields fields = new Fields(); Map<String, Layout> layouts = getLayoutsMap(); Field linkToLayoutField = getLinkToLayoutField( _ddmStructure.getStructureId(), layouts); fields.put(linkToLayoutField); StringBundler sb = new StringBundler(8); sb.append("link_to_layout_INSTANCE_MiO7vIJu,"); sb.append("link_to_layout_INSTANCE_9FLzJNUX,"); sb.append("link_to_layout_INSTANCE_WqABvmxw,"); sb.append("link_to_layout_INSTANCE_31abnWkB,"); sb.append("link_to_layout_INSTANCE_pWIUF15B,"); sb.append("link_to_layout_INSTANCE_OGQypdcj,"); sb.append("link_to_layout_INSTANCE_TB2XZ3wn,"); sb.append("link_to_layout_INSTANCE_3IRNS4jM"); Field fieldsDisplayField = getFieldsDisplayField( _ddmStructure.getStructureId(), sb.toString()); fields.put(fieldsDisplayField); String expectedContent = replaceLinksToLayoutsParameters( read("test-journal-content-link-to-page-field.xml"), layouts); String actualContent = _journalConverter.getContent( _ddmStructure, fields); assertEquals(expectedContent, actualContent); } @Test public void testGetContentFromListField() throws Exception { Fields fields = new Fields(); Field listField = getListField(_ddmStructure.getStructureId()); fields.put(listField); Field fieldsDisplayField = getFieldsDisplayField( _ddmStructure.getStructureId(), "list_INSTANCE_pcm9WPVX"); fields.put(fieldsDisplayField); String expectedContent = read("test-journal-content-list-field.xml"); String actualContent = _journalConverter.getContent( _ddmStructure, fields); assertEquals(expectedContent, actualContent); } @Test public void testGetContentFromMultiListField() throws Exception { Fields fields = new Fields(); Field multiListField = getMultiListField( _ddmStructure.getStructureId()); fields.put(multiListField); Field fieldsDisplayField = getFieldsDisplayField( _ddmStructure.getStructureId(), "multi_list_INSTANCE_9X5wVsSv"); fields.put(fieldsDisplayField); String expectedContent = read( "test-journal-content-multi-list-field.xml"); String actualContent = _journalConverter.getContent( _ddmStructure, fields); assertEquals(expectedContent, actualContent); } @Test public void testGetContentFromNestedFields() throws Exception { Fields fields = getNestedFields(_ddmStructure.getStructureId()); String expectedContent = read("test-journal-content-nested-fields.xml"); String actualContent = _journalConverter.getContent( _ddmStructure, fields); assertEquals(expectedContent, actualContent); } @Test public void testGetContentFromTextAreaField() throws Exception { Fields fields = new Fields(); Field textAreaField = getTextAreaField(_ddmStructure.getStructureId()); fields.put(textAreaField); Field fieldsDisplayField = getFieldsDisplayField( _ddmStructure.getStructureId(), "text_area_INSTANCE_RFnJ1nCn"); fields.put(fieldsDisplayField); String expectedContent = read( "test-journal-content-text-area-field.xml"); String actualContent = _journalConverter.getContent( _ddmStructure, fields); assertEquals(expectedContent, actualContent); } @Test public void testGetContentFromTextBoxField() throws Exception { Fields fields = new Fields(); Field textBoxField = getTextBoxField(_ddmStructure.getStructureId()); fields.put(textBoxField); Field fieldsDisplayField = getFieldsDisplayField( _ddmStructure.getStructureId(), "text_box_INSTANCE_ND057krU,text_box_INSTANCE_HvemvQgl," + "text_box_INSTANCE_enAnbvq6"); fields.put(fieldsDisplayField); String expectedContent = read( "test-journal-content-text-box-repeatable-field.xml"); String actualContent = _journalConverter.getContent( _ddmStructure, fields); assertEquals(expectedContent, actualContent); } @Test public void testGetContentFromTextField() throws Exception { Fields fields = new Fields(); Field textField = getTextField(_ddmStructure.getStructureId()); fields.put(textField); Field fieldsDisplayField = getFieldsDisplayField( _ddmStructure.getStructureId(), "text_INSTANCE_bf4sdx6Q"); fields.put(fieldsDisplayField); String expectedContent = read("test-journal-content-text-field.xml"); String actualContent = _journalConverter.getContent( _ddmStructure, fields); assertEquals(expectedContent, actualContent); } @Test public void testGetDDMXSD() throws Exception { String expectedXSD = read("test-ddm-structure-all-fields.xml"); DDMForm expectedDDMForm = _ddmFormXSDDeserializer.deserialize( expectedXSD); String actualXSD = _journalConverter.getDDMXSD( read("test-journal-structure-all-fields.xml")); validateDDMXSD(actualXSD); DDMForm actualDDMForm = _ddmFormXSDDeserializer.deserialize(actualXSD); assertEquals(expectedDDMForm, actualDDMForm); } @Test public void testGetFieldsFromContentWithBooleanElement() throws Exception { Fields expectedFields = new Fields(); Field booleanField = getBooleanField(_ddmStructure.getStructureId()); expectedFields.put(booleanField); Field fieldsDisplayField = getFieldsDisplayField( _ddmStructure.getStructureId(), "boolean_INSTANCE_Okhyj6Ni,boolean_INSTANCE_1SYNQuhg"); expectedFields.put(fieldsDisplayField); String content = read( "test-journal-content-boolean-repeatable-field.xml"); Fields actualFields = _journalConverter.getDDMFields( _ddmStructure, content); Assert.assertEquals(expectedFields, actualFields); } @Test public void testGetFieldsFromContentWithLinkToLayoutElement() throws Exception { Fields expectedFields = new Fields(); Map<String, Layout> layoutsMap = getLayoutsMap(); Field linkToLayoutField = getLinkToLayoutField( _ddmStructure.getStructureId(), layoutsMap); expectedFields.put(linkToLayoutField); StringBundler sb = new StringBundler(); sb.append("link_to_layout_INSTANCE_MiO7vIJu,"); sb.append("link_to_layout_INSTANCE_9FLzJNUX,"); sb.append("link_to_layout_INSTANCE_WqABvmxw,"); sb.append("link_to_layout_INSTANCE_31abnWkB,"); sb.append("link_to_layout_INSTANCE_pWIUF15B,"); sb.append("link_to_layout_INSTANCE_OGQypdcj,"); sb.append("link_to_layout_INSTANCE_TB2XZ3wn,"); sb.append("link_to_layout_INSTANCE_3IRNS4jM"); Field fieldsDisplayField = getFieldsDisplayField( _ddmStructure.getStructureId(), sb.toString()); expectedFields.put(fieldsDisplayField); String content = replaceLinksToLayoutsParameters( read("test-journal-content-link-to-page-field.xml"), layoutsMap); Fields actualFields = _journalConverter.getDDMFields( _ddmStructure, content); Assert.assertEquals(expectedFields, actualFields); } @Test public void testGetFieldsFromContentWithListElement() throws Exception { Fields expectedFields = new Fields(); Field listField = getListField(_ddmStructure.getStructureId()); expectedFields.put(listField); Field fieldsDisplayField = getFieldsDisplayField( _ddmStructure.getStructureId(), "list_INSTANCE_pcm9WPVX"); expectedFields.put(fieldsDisplayField); String content = read("test-journal-content-list-field.xml"); Fields actualFields = _journalConverter.getDDMFields( _ddmStructure, content); Assert.assertEquals(expectedFields, actualFields); } @Test public void testGetFieldsFromContentWithMultiListElement() throws Exception { Fields expectedFields = new Fields(); Field multiListField = getMultiListField( _ddmStructure.getStructureId()); expectedFields.put(multiListField); Field fieldsDisplayField = getFieldsDisplayField( _ddmStructure.getStructureId(), "multi_list_INSTANCE_9X5wVsSv"); expectedFields.put(fieldsDisplayField); String content = read("test-journal-content-multi-list-field.xml"); Fields actualFields = _journalConverter.getDDMFields( _ddmStructure, content); Assert.assertEquals(expectedFields, actualFields); } @Test public void testGetFieldsFromContentWithNestedElements() throws Exception { Fields expectedFields = getNestedFields(_ddmStructure.getStructureId()); String content = read("test-journal-content-nested-fields.xml"); Fields actualFields = _journalConverter.getDDMFields( _ddmStructure, content); Assert.assertEquals(expectedFields, actualFields); } @Test public void testGetFieldsFromContentWithUnlocalizedElement() throws Exception { Fields expectedFields = new Fields(); Field textField = getTextField(_ddmStructure.getStructureId()); textField.setValue(_ptLocale, textField.getValue(_enLocale)); expectedFields.put(textField); Field fieldsDisplayField = getFieldsDisplayField( _ddmStructure.getStructureId(), "text_INSTANCE_Okhyj7Ni"); expectedFields.put(fieldsDisplayField); String content = read( "test-journal-content-text-unlocalized-field.xml"); Fields actualFields = _journalConverter.getDDMFields( _ddmStructure, content); Assert.assertEquals(expectedFields, actualFields); } @Test public void testGetJournalXSD() throws Exception { String expectedXSD = read("test-journal-structure-all-fields.xml"); Map<String, Map<String, String>> expectedMap = JournalTestUtil.getXsdMap(expectedXSD); String actualXSD = _journalConverter.getJournalXSD( read("test-ddm-structure-all-fields.xml")); Map<String, Map<String, String>> actualMap = JournalTestUtil.getXsdMap( actualXSD); Assert.assertEquals(expectedMap, actualMap); } protected void assertEquals( DDMForm expectedDDMForm, DDMForm actualDDMForm) { Map<String, DDMFormField> expectedDDMFormFieldsMap = expectedDDMForm.getDDMFormFieldsMap(true); Map<String, DDMFormField> actualDDMFormFieldsMap = actualDDMForm.getDDMFormFieldsMap(true); for (Map.Entry<String, DDMFormField> expectedEntry : expectedDDMFormFieldsMap.entrySet()) { DDMFormField actualDDMFormField = actualDDMFormFieldsMap.get( expectedEntry.getKey()); assertEquals(expectedEntry.getValue(), actualDDMFormField); } } protected void assertEquals( DDMFormField expectedDDMFormField, DDMFormField actualDDMFormField) { Assert.assertEquals( expectedDDMFormField.getDataType(), actualDDMFormField.getDataType()); assertEquals( expectedDDMFormField.getDDMFormFieldOptions(), actualDDMFormField.getDDMFormFieldOptions()); Assert.assertEquals( expectedDDMFormField.getIndexType(), actualDDMFormField.getIndexType()); assertEquals( expectedDDMFormField.getLabel(), actualDDMFormField.getLabel()); Assert.assertEquals( expectedDDMFormField.getName(), actualDDMFormField.getName()); assertEquals( expectedDDMFormField.getStyle(), actualDDMFormField.getStyle()); assertEquals( expectedDDMFormField.getTip(), actualDDMFormField.getTip()); Assert.assertEquals( expectedDDMFormField.getType(), actualDDMFormField.getType()); Assert.assertEquals( expectedDDMFormField.isMultiple(), actualDDMFormField.isMultiple()); Assert.assertEquals( expectedDDMFormField.isRepeatable(), actualDDMFormField.isRepeatable()); Assert.assertEquals( expectedDDMFormField.isRequired(), actualDDMFormField.isRequired()); } protected void assertEquals( DDMFormFieldOptions expectedDDMFormFieldOptions, DDMFormFieldOptions actualDDMFormFieldOptions) { Set<String> expectedOptionValues = expectedDDMFormFieldOptions.getOptionsValues(); for (String expectedOptionValue : expectedOptionValues) { LocalizedValue expectedOptionLabels = expectedDDMFormFieldOptions.getOptionLabels( expectedOptionValue); LocalizedValue actualOptionLabels = actualDDMFormFieldOptions.getOptionLabels(expectedOptionValue); assertEquals(expectedOptionLabels, actualOptionLabels); } } protected void assertEquals( LocalizedValue expectedLocalizedValue, LocalizedValue actualLocalizedValue) { Set<Locale> expectedAvailableLocales = expectedLocalizedValue.getAvailableLocales(); for (Locale expectedLocale : expectedAvailableLocales) { String expectedValue = expectedLocalizedValue.getString( expectedLocale); String actualValue = actualLocalizedValue.getString(expectedLocale); Assert.assertEquals(expectedValue, actualValue); } } protected void assertEquals(String expectedContent, String actualContent) throws Exception { Map<String, Map<Locale, List<String>>> expectedFieldsMap = getFieldsMap( expectedContent); Map<String, Map<Locale, List<String>>> actualFieldsMap = getFieldsMap( actualContent); Assert.assertEquals(expectedFieldsMap, actualFieldsMap); } protected Field getBooleanField(long ddmStructureId) { Field field = new Field(); field.setDDMStructureId(ddmStructureId); field.setName("boolean"); List<Serializable> enValues = new ArrayList<>(); enValues.add(true); enValues.add(false); field.addValues(_enLocale, enValues); return field; } protected Field getDocumentLibraryField( FileEntry fileEntry, long ddmStructureId) { Field docLibraryField = new Field(); docLibraryField.setDDMStructureId(ddmStructureId); docLibraryField.setName("document_library"); JSONObject jsonObject = JSONFactoryUtil.createJSONObject(); jsonObject.put("groupId", fileEntry.getGroupId()); jsonObject.put("title", fileEntry.getTitle()); jsonObject.put("uuid", fileEntry.getUuid()); jsonObject.put("version", fileEntry.getVersion()); docLibraryField.addValue(_enLocale, jsonObject.toString()); return docLibraryField; } protected Field getFieldsDisplayField(long ddmStructureId, String value) { Field fieldsDisplayField = new Field(); fieldsDisplayField.setDDMStructureId(ddmStructureId); fieldsDisplayField.setName(DDM.FIELDS_DISPLAY_NAME); fieldsDisplayField.setValue(value); return fieldsDisplayField; } protected Map<String, Map<Locale, List<String>>> getFieldsMap( String content) throws Exception { Map<String, Map<Locale, List<String>>> fieldsMap = new HashMap<>(); Document document = UnsecureSAXReaderUtil.read(content); Element rootElement = document.getRootElement(); List<Element> dynamicElementElements = rootElement.elements( "dynamic-element"); for (Element dynamicElementElement : dynamicElementElements) { udpateFieldsMap(dynamicElementElement, fieldsMap); } return fieldsMap; } protected Map<String, Layout> getLayoutsMap() throws Exception { Map<String, Layout> layouts = new LinkedHashMap<>(4); User user = TestPropsValues.getUser(); layouts.put(_PRIVATE_LAYOUT, LayoutTestUtil.addLayout(_group, true)); layouts.put( _PRIVATE_USER_LAYOUT, LayoutTestUtil.addLayout(user.getGroupId(), true)); layouts.put(_PUBLIC_LAYOUT, LayoutTestUtil.addLayout(_group, false)); layouts.put( _PUBLIC_USER_LAYOUT, LayoutTestUtil.addLayout(user.getGroupId(), false)); return layouts; } protected Field getLinkToLayoutField( long ddmStructureId, Map<String, Layout> layoutsMap) { Field field = new Field(); field.setDDMStructureId(ddmStructureId); field.setName("link_to_layout"); List<Serializable> enValues = new ArrayList<>(); for (Layout layout : layoutsMap.values()) { enValues.add(getLinkToLayoutFieldValue(layout, false)); enValues.add(getLinkToLayoutFieldValue(layout, true)); } field.addValues(_enLocale, enValues); return field; } protected String getLinkToLayoutFieldValue( Layout layout, boolean includeGroupId) { JSONObject jsonObject = JSONFactoryUtil.createJSONObject(); if (includeGroupId) { jsonObject.put("groupId", layout.getGroupId()); } jsonObject.put("layoutId", layout.getLayoutId()); jsonObject.put("privateLayout", layout.isPrivateLayout()); return jsonObject.toString(); } protected Field getListField(long ddmStructureId) { Field field = new Field(); field.setDDMStructureId(ddmStructureId); field.setName("list"); field.addValue(_enLocale, "[\"value 01\"]"); return field; } protected Field getMultiListField(long ddmStructureId) { Field field = new Field(); field.setDDMStructureId(ddmStructureId); field.setName("multi_list"); field.addValue(_enLocale, "[\"value 01\",\"value 02\"]"); return field; } protected Fields getNestedFields(long ddmStructureId) { Fields fields = new Fields(); // Contact Field contact = new Field(); contact.setDDMStructureId(ddmStructureId); contact.setName("contact"); List<Serializable> enValues = new ArrayList<>(); enValues.add("joe"); enValues.add("richard"); contact.setValues(_enLocale, enValues); List<Serializable> ptValues = new ArrayList<>(); ptValues.add("joao"); ptValues.add("ricardo"); contact.addValues(_ptLocale, ptValues); fields.put(contact); // Phone Field phone = new Field(); phone.setDDMStructureId(ddmStructureId); phone.setName("phone"); List<Serializable> values = new ArrayList<>(); values.add("123"); values.add("456"); phone.setValues(_enLocale, values); phone.addValues(_ptLocale, values); fields.put(phone); // Ext Field ext = new Field(); ext.setDDMStructureId(ddmStructureId); ext.setName("ext"); values = new ArrayList<>(); values.add("1"); values.add("2"); values.add("3"); values.add("4"); values.add("5"); ext.setValues(_enLocale, values); ext.addValues(_ptLocale, values); fields.put(ext); StringBundler sb = new StringBundler(5); sb.append("contact_INSTANCE_RF3do1m5,phone_INSTANCE_QK6B0wK9,"); sb.append("ext_INSTANCE_L67MPqQf,ext_INSTANCE_8uxzZl41,"); sb.append("ext_INSTANCE_S58K861T,contact_INSTANCE_CUeFxcrA,"); sb.append("phone_INSTANCE_lVTcTviF,ext_INSTANCE_cZalDSll,"); sb.append("ext_INSTANCE_HDrK2Um5"); Field fieldsDisplayField = new Field( ddmStructureId, DDM.FIELDS_DISPLAY_NAME, sb.toString()); fields.put(fieldsDisplayField); return fields; } protected Field getTextAreaField(long ddmStructureId) { Field field = new Field(); field.setDDMStructureId(ddmStructureId); field.setName("text_area"); field.addValue(_enLocale, "<p>Hello World!</p>"); return field; } protected Field getTextBoxField(long ddmStructureId) { Field field = new Field(); field.setDDMStructureId(ddmStructureId); field.setName("text_box"); List<Serializable> enValues = new ArrayList<>(); enValues.add("one"); enValues.add("two"); enValues.add("three"); field.addValues(_enLocale, enValues); List<Serializable> ptValues = new ArrayList<>(); ptValues.add("um"); ptValues.add("dois"); ptValues.add("tres"); field.addValues(_ptLocale, ptValues); return field; } protected Field getTextField(long ddmStructureId) { Field field = new Field(); field.setDDMStructureId(ddmStructureId); field.setName("text"); field.addValue(_enLocale, "one"); field.addValue(_ptLocale, "um"); return field; } protected List<String> getValues( Map<Locale, List<String>> valuesMap, Locale locale) { List<String> values = valuesMap.get(locale); if (values == null) { values = new ArrayList<>(); valuesMap.put(locale, values); } return values; } protected String read(String fileName) throws Exception { Class<?> clazz = getClass(); ClassLoader classLoader = clazz.getClassLoader(); InputStream inputStream = classLoader.getResourceAsStream( "com/liferay/journal/dependencies/" + fileName); return StringUtil.read(inputStream); } protected String replaceLinksToLayoutsParameters( String content, Map<String, Layout> layoutsMap) throws Exception { Layout privateLayout = layoutsMap.get(_PRIVATE_LAYOUT); Layout privateUserLayout = layoutsMap.get(_PRIVATE_USER_LAYOUT); Layout publicLayout = layoutsMap.get(_PUBLIC_LAYOUT); Layout publicUserLayout = layoutsMap.get(_PUBLIC_USER_LAYOUT); return StringUtil.replace( content, new String[] { "[$GROUP_ID$]", "[$GROUP_ID_USER$]", "[$LAYOUT_ID_PRIVATE$]", "[$LAYOUT_ID_PRIVATE_USER$]", "[$LAYOUT_ID_PUBLIC$]", "[$LAYOUT_ID_PUBLIC_USER$]" }, new String[] { String.valueOf(privateLayout.getGroupId()), String.valueOf(privateUserLayout.getGroupId()), String.valueOf(privateLayout.getLayoutId()), String.valueOf(privateUserLayout.getLayoutId()), String.valueOf(publicLayout.getLayoutId()), String.valueOf(publicUserLayout.getLayoutId()) }); } protected void setUpDDMFormJSONDeserializer() { Registry registry = RegistryUtil.getRegistry(); _ddmFormJSONDeserializer = registry.getService( DDMFormJSONDeserializer.class); } protected void setUpDDMFormXSDDeserializer() { Registry registry = RegistryUtil.getRegistry(); _ddmFormXSDDeserializer = registry.getService( DDMFormXSDDeserializer.class); } protected void setUpDDMXML() throws Exception { Registry registry = RegistryUtil.getRegistry(); _ddmXML = registry.getService(DDMXML.class); } protected void udpateFieldsMap( Element dynamicElementElement, Map<String, Map<Locale, List<String>>> fieldsMap) { List<Element> childrenDynamicElementElements = dynamicElementElement.elements("dynamic-element"); for (Element childrenDynamicElementElement : childrenDynamicElementElements) { udpateFieldsMap(childrenDynamicElementElement, fieldsMap); } String name = dynamicElementElement.attributeValue("name"); Map<Locale, List<String>> valuesMap = fieldsMap.get(name); if (valuesMap == null) { valuesMap = new HashMap<>(); fieldsMap.put(name, valuesMap); } List<Element> dynamicContentElements = dynamicElementElement.elements( "dynamic-content"); for (Element dynamicContentElement : dynamicContentElements) { Locale locale = LocaleUtil.fromLanguageId( dynamicContentElement.attributeValue("language-id")); List<String> values = getValues(valuesMap, locale); List<Element> optionElements = dynamicContentElement.elements( "option"); if (!optionElements.isEmpty()) { for (Element optionElement : optionElements) { values.add(optionElement.getText()); } } else { values.add(dynamicContentElement.getText()); } } } protected void validateDDMXSD(String xsd) throws Exception { _ddmXML.validateXML(xsd); } private static final String _PRIVATE_LAYOUT = "privateLayout"; private static final String _PRIVATE_USER_LAYOUT = "privateUserLayout"; private static final String _PUBLIC_LAYOUT = "publicLayout"; private static final String _PUBLIC_USER_LAYOUT = "publicUserLayout"; private static Locale _enLocale; private static Locale _ptLocale; private long _classNameId; private DDMFormJSONDeserializer _ddmFormJSONDeserializer; private DDMFormXSDDeserializer _ddmFormXSDDeserializer; private DDMStructure _ddmStructure; private DDMStructureTestHelper _ddmStructureTestHelper; private DDMXML _ddmXML; @DeleteAfterTestRun private Group _group; private JournalConverter _journalConverter; }