/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.cms.itest.client;
import java.util.Calendar;
import java.util.Collection;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;
import org.jdom.Document;
import org.junit.Test;
import com.enonic.cms.framework.util.JDOMUtil;
import com.enonic.cms.framework.xml.XMLDocumentFactory;
import com.enonic.cms.core.content.ContentEntity;
import com.enonic.cms.core.content.ContentKey;
import com.enonic.cms.core.content.ContentStatus;
import com.enonic.cms.core.content.ContentVersionEntity;
import com.enonic.cms.core.content.contentdata.custom.CustomContentData;
import com.enonic.cms.core.content.contentdata.custom.stringbased.HtmlAreaDataEntry;
import com.enonic.cms.core.content.contentdata.custom.stringbased.TextAreaDataEntry;
import com.enonic.cms.core.content.contentdata.custom.stringbased.TextDataEntry;
import com.enonic.cms.core.content.contentdata.custom.xmlbased.XmlDataEntry;
import com.enonic.cms.itest.util.AssertTool;
import static org.junit.Assert.*;
public class InternalClientImpl_ImportContentXmlTest
extends AbstractInternalClientImpl_ImportContentTest
{
@Test
public void testStringBasedXmlImport()
throws Exception
{
final long count = 10L;
setupImport( getConfigForStringBasedXmlImport() );
doImport( getStringBasedXmlImportData( count, "Oslo" ) );
final List<ContentKey> contentKeys =
contentDao.findContentKeysByCategory( fixture.findCategoryByName( "MyImportCategory" ).getKey() );
assertEquals( count, contentKeys.size() );
final ContentEntity content = contentDao.findByKey( contentKeys.get( 0 ) );
assertEquals( FORMATTER.parseDateTime( "2001.01.02 03:04:00" ).toDate(), content.getAvailableFrom() );
assertEquals( FORMATTER.parseDateTime( "2020.11.22 23:24:00" ).toDate(), content.getAvailableTo() );
assertEquals( ContentStatus.APPROVED.getKey(), content.getMainVersion().getStatus().getKey() );
assertEquals( ContentVersionEntity.STATE_PUBLISHED, content.getMainVersion().getState( new Date() ) );
assertEquals( "testuser", content.getOwner().getName() );
assertEquals( "testuser", content.getMainVersion().getModifiedBy().getName() );
Document dataDoc = content.getMainVersion().getContentDataAsJDomDocument();
AssertTool.assertSingleXPathValueEquals( "contentdata/name", dataDoc,
"ABC.." + NORWEGIAN + "src/test" + CHINESE + "src/test" + AEC_ALL + "src/test1" );
AssertTool.assertSingleXPathValueEquals( "contentdata/address", dataDoc, "Oslo1" );
AssertTool.assertSingleXPathValueEquals( "contentdata/age", dataDoc, "1" );
AssertTool.assertSingleXPathValueEquals( "contentdata/info", dataDoc,
"ABC.." + NORWEGIAN + "src/test" + CHINESE + "src/test" + AEC_ALL + "src/test1" );
final CustomContentData contentData = (CustomContentData) content.getMainVersion().getContentData();
assertTrue( ( (TextDataEntry) contentData.getEntry( "name" ) ).getValue().equals(
"ABC.." + NORWEGIAN + "src/test" + CHINESE + "src/test" + AEC_ALL + "src/test1" ) );
assertTrue( ( (TextDataEntry) contentData.getEntry( "address" ) ).getValue().equals( "Oslo1" ) );
assertTrue( ( (TextDataEntry) contentData.getEntry( "age" ) ).getValue().equals( "1" ) );
assertTrue( ( (TextAreaDataEntry) contentData.getEntry( "info" ) ).getValue().equals(
"ABC.." + NORWEGIAN + "src/test" + CHINESE + "src/test" + AEC_ALL + "src/test1" ) );
final Document xmlDoc = ( (XmlDataEntry) contentData.getEntry( "xmlInfo" ) ).getValue();
final Document htmlDoc = JDOMUtil.parseDocument( ( (HtmlAreaDataEntry) contentData.getEntry( "htmlInfo" ) ).getValue() );
final String testAtr = "ABC.." + NORWEGIAN + "src/test" + CHINESE + "src/test" + AEC_ALL + "src/test1";
final String testElem = "ABC.." + NORWEGIAN + "src/test" + CHINESE + "src/test" + AEC_ALL + "src/test1";
AssertTool.assertSingleXPathValueEquals( "/root/@atr", xmlDoc, testAtr );
AssertTool.assertSingleXPathValueEquals( "/root/elem", xmlDoc, testElem );
AssertTool.assertSingleXPathValueEquals( "/p/@class", htmlDoc, testAtr );
AssertTool.assertSingleXPathValueEquals( "/p/div", htmlDoc, testElem );
}
@Test
public void testStringBasedXmlImportVersionCountCheck()
throws Exception
{
final long count = 10L;
setupImport( getConfigForStringBasedXmlImport() );
doImport( getStringBasedXmlImportData( count, "Oslo" ), "testuser", "MyImport" );
doImport( getStringBasedXmlImportData( count, null ), "testuser2", "MyImport2" );
List<ContentKey> contentKeys = contentDao.findContentKeysByCategory( fixture.findCategoryByName( "MyImportCategory" ).getKey() );
assertEquals( count, contentKeys.size() );
for ( int i = 0; i < count; i++ )
{
final ContentEntity content = contentDao.findByKey( contentKeys.get( i ) );
assertEquals( 1, content.getVersionCount() );
assertEquals( "testuser", content.getOwner().getName() );
}
doImport( getStringBasedXmlImportData( count, "Majorstua" ), "testuser", "MyImport" );
contentKeys = contentDao.findContentKeysByCategory( fixture.findCategoryByName( "MyImportCategory" ).getKey() );
assertEquals( count, contentKeys.size() );
for ( int i = 0; i < count; i++ )
{
final ContentEntity content = contentDao.findByKey( contentKeys.get( i ) );
assertEquals( 2, content.getVersionCount() );
assertEquals( "testuser", content.getOwner().getName() );
}
}
@Test
public void testStringBasedXmlImportWithBlocks()
throws Exception
{
final long count = 10L;
setupImport( getConfigForStringBasedXmlImportWithBlocks() );
doImport( getStringBasedXmlImportDataWithBlocks( count ) );
final List<ContentKey> contentKeys =
contentDao.findContentKeysByCategory( fixture.findCategoryByName( "MyImportCategory" ).getKey() );
assertEquals( count, contentKeys.size() );
final ContentEntity content = contentDao.findByKey( contentKeys.get( 0 ) );
assertEquals( FORMATTER.parseDateTime( "2001.01.02 03:04:00" ).toDate(), content.getAvailableFrom() );
assertEquals( FORMATTER.parseDateTime( "2020.11.22 23:24:00" ).toDate(), content.getAvailableTo() );
assertEquals( ContentStatus.APPROVED.getKey(), content.getMainVersion().getStatus().getKey() );
assertEquals( ContentVersionEntity.STATE_PUBLISHED, content.getMainVersion().getState( new Date() ) );
assertEquals( "testuser", content.getOwner().getName() );
assertEquals( "testuser", content.getMainVersion().getModifiedBy().getName() );
final Document dataDoc = content.getMainVersion().getContentDataAsJDomDocument();
AssertTool.assertSingleXPathValueEquals( "contentdata/name", dataDoc,
"ABC.." + NORWEGIAN + "src/test" + CHINESE + "src/test" + AEC_ALL + "src/test1" );
AssertTool.assertSingleXPathValueEquals( "contentdata/address", dataDoc, "Oslo1" );
AssertTool.assertSingleXPathValueEquals( "contentdata/age", dataDoc, "1" );
AssertTool.assertSingleXPathValueEquals( "contentdata/info", dataDoc,
"ABC.." + NORWEGIAN + "src/test" + CHINESE + "src/test" + AEC_ALL + "src/test1" );
}
@Test
public void testStringBasedXmlImportWithBlocks_ToBlockGroups()
throws Exception
{
final long count = 10L;
setupImport( getConfigForStringBasedXmlImportWithBlocksToBlocks() );
doImport( getStringBasedXmlImportDataWithBlocksToBlocks( count, "value", false ) );
final List<ContentKey> contentKeys =
contentDao.findContentKeysByCategory( fixture.findCategoryByName( "MyImportCategory" ).getKey() );
assertEquals( count, contentKeys.size() );
final ContentEntity content = contentDao.findByKey( contentKeys.get( 0 ) );
assertEquals( FORMATTER.parseDateTime( "2001.01.02 03:04:00" ).toDate(), content.getAvailableFrom() );
assertEquals( FORMATTER.parseDateTime( "2020.11.22 23:24:00" ).toDate(), content.getAvailableTo() );
assertEquals( ContentStatus.APPROVED.getKey(), content.getMainVersion().getStatus().getKey() );
assertEquals( ContentVersionEntity.STATE_PUBLISHED, content.getMainVersion().getState( new Date() ) );
assertEquals( "testuser", content.getOwner().getName() );
assertEquals( "testuser", content.getMainVersion().getModifiedBy().getName() );
final Document dataDoc = content.getMainVersion().getContentDataAsJDomDocument();
AssertTool.assertSingleXPathValueEquals( "contentdata/name", dataDoc,
"ABC.." + NORWEGIAN + "src/test" + CHINESE + "src/test" + AEC_ALL + "src/test1" );
AssertTool.assertSingleXPathValueEquals( "contentdata/kv1[key='keyA']/value", dataDoc, "valueA" );
AssertTool.assertSingleXPathValueEquals( "contentdata/kv1[key='keyB']/value", dataDoc, "valueB" );
AssertTool.assertSingleXPathValueEquals( "contentdata/kv1[key='keyC']/value", dataDoc, "valueC" );
AssertTool.assertSingleXPathValueEquals( "contentdata/kv2[key='keyD']/value", dataDoc, "valueD" );
AssertTool.assertSingleXPathValueEquals( "contentdata/kv2[key='keyE']/value", dataDoc, "valueE" );
AssertTool.assertSingleXPathValueEquals( "contentdata/kv2[key='keyF']/value", dataDoc, "valueF" );
}
@Test
public void testStringBasedXmlImportWithBlocks_ToBlockGroups2()
throws Exception
{
final long count = 10L;
setupImport( getConfigForStringBasedXmlImportWithBlocksToBlocks() );
/* Import I */
doImport( getStringBasedXmlImportDataWithBlocksToBlocks( count, "value", false ) );
final List<ContentKey> contentKeys =
contentDao.findContentKeysByCategory( fixture.findCategoryByName( "MyImportCategory" ).getKey() );
assertEquals( count, contentKeys.size() );
final ContentEntity content = contentDao.findByKey( contentKeys.get( 0 ) );
assertEquals( 1, content.getVersionCount() );
assertEquals( count, contentKeys.size() );
final Document dataDoc = content.getMainVersion().getContentDataAsJDomDocument();
AssertTool.assertSingleXPathValueEquals( "contentdata/name", dataDoc,
"ABC.." + NORWEGIAN + "src/test" + CHINESE + "src/test" + AEC_ALL + "src/test1" );
AssertTool.assertSingleXPathValueEquals( "contentdata/kv1[key='keyA']/value", dataDoc, "valueA" );
AssertTool.assertSingleXPathValueEquals( "contentdata/kv1[key='keyB']/value", dataDoc, "valueB" );
AssertTool.assertSingleXPathValueEquals( "contentdata/kv1[key='keyC']/value", dataDoc, "valueC" );
AssertTool.assertSingleXPathValueEquals( "contentdata/kv2[key='keyD']/value", dataDoc, "valueD" );
AssertTool.assertSingleXPathValueEquals( "contentdata/kv2[key='keyE']/value", dataDoc, "valueE" );
AssertTool.assertSingleXPathValueEquals( "contentdata/kv2[key='keyF']/value", dataDoc, "valueF" );
/* Import II - changes in block groups */
doImport( getStringBasedXmlImportDataWithBlocksToBlocks( count, "newValue", true ) );
final List<ContentKey> contentKeys2 =
contentDao.findContentKeysByCategory( fixture.findCategoryByName( "MyImportCategory" ).getKey() );
assertEquals( count, contentKeys2.size() );
final ContentEntity content2 = contentDao.findByKey( contentKeys2.get( 0 ) );
assertEquals( 2, content2.getVersionCount() );
assertEquals( count, contentKeys2.size() );
final Document dataDoc2 = content2.getMainVersion().getContentDataAsJDomDocument();
AssertTool.assertSingleXPathValueEquals( "contentdata/name", dataDoc2,
"ABC.." + NORWEGIAN + "src/test" + CHINESE + "src/test" + AEC_ALL + "src/test1" );
AssertTool.assertSingleXPathValueEquals( "contentdata/kv1[key='keyA']/value", dataDoc2, "valueA" );
AssertTool.assertSingleXPathValueEquals( "contentdata/kv1[key='keyB']/value", dataDoc2, "newValueB" );
AssertTool.assertSingleXPathValueEquals( "contentdata/kv1[key='keyC']/value", dataDoc2, "valueC" );
AssertTool.assertSingleXPathValueEquals( "contentdata/kv2[key='keyD']/value", dataDoc2, "valueD" );
AssertTool.assertSingleXPathValueEquals( "contentdata/kv2[key='keyE']/value", dataDoc2, "newValueE" );
AssertTool.assertSingleXPathValueEquals( "contentdata/kv2[key='keyF']/value", dataDoc2, "valueF" );
AssertTool.assertSingleXPathValueEquals( "contentdata/kv2[key='keyG']/value", dataDoc2, "newValueG" );
AssertTool.assertSingleXPathValueEquals( "contentdata/kv2[key='keyH']/value", dataDoc2, "newValueH" );
/* Import III - no changes */
doImport( getStringBasedXmlImportDataWithBlocksToBlocks( count, "newValue", true ) );
final List<ContentKey> contentKeys3 =
contentDao.findContentKeysByCategory( fixture.findCategoryByName( "MyImportCategory" ).getKey() );
assertEquals( count, contentKeys3.size() );
final ContentEntity content3 = contentDao.findByKey( contentKeys3.get( 0 ) );
assertEquals( 2, content3.getVersionCount() );
assertEquals( count, contentKeys3.size() );
}
@Test
public void testStringBasedXmlImportWithNamespaces()
throws Exception
{
final long count = 10L;
setupImport( getConfigForStringBasedXmlImportWithNamespaces() );
doImport( getStringBasedXmlImportDataWithNamespaces( count ) );
final List<ContentKey> contentKeys =
contentDao.findContentKeysByCategory( fixture.findCategoryByName( "MyImportCategory" ).getKey() );
assertEquals( count, contentKeys.size() );
final ContentEntity content = contentDao.findByKey( contentKeys.get( 0 ) );
assertEquals( FORMATTER.parseDateTime( "2001.01.02 03:04:00" ).toDate(), content.getAvailableFrom() );
assertEquals( FORMATTER.parseDateTime( "2020.11.22 23:24:00" ).toDate(), content.getAvailableTo() );
assertEquals( ContentStatus.APPROVED.getKey(), content.getMainVersion().getStatus().getKey() );
assertEquals( ContentVersionEntity.STATE_PUBLISHED, content.getMainVersion().getState( new Date() ) );
assertEquals( "testuser", content.getOwner().getName() );
assertEquals( "testuser", content.getMainVersion().getModifiedBy().getName() );
final Document dataDoc = content.getMainVersion().getContentDataAsJDomDocument();
AssertTool.assertSingleXPathValueEquals( "contentdata/name", dataDoc,
"ABC.." + NORWEGIAN + "src/test" + CHINESE + "src/test" + AEC_ALL + "src/test1" );
AssertTool.assertSingleXPathValueEquals( "contentdata/max", dataDoc, "789" );
AssertTool.assertSingleXPathValueEquals( "contentdata/min", dataDoc, "123" );
AssertTool.assertSingleXPathValueEquals( "contentdata/year", dataDoc,
String.valueOf( ( new GregorianCalendar().get( Calendar.YEAR ) ) ) );
}
@Test
public void testStringBasedXmlImport_WithBlankValues()
throws Exception
{
/* Import I */
final long count = 10L;
setupImport( getConfigForStringBasedXmlImport_Simple() );
doImport( getStringBasedXmlImportData_Simple( count, "JAM", "Oslo" ) );
final List<ContentKey> contentKeys =
contentDao.findContentKeysByCategory( fixture.findCategoryByName( "MyImportCategory" ).getKey() );
assertEquals( count, contentKeys.size() );
final ContentEntity content = contentDao.findByKey( contentKeys.get( 0 ) );
final Document dataDoc = content.getMainVersion().getContentDataAsJDomDocument();
AssertTool.assertSingleXPathValueEquals( "contentdata/name", dataDoc, "JAM1" );
AssertTool.assertSingleXPathValueEquals( "contentdata/address", dataDoc, "Oslo" );
final CustomContentData contentData = (CustomContentData) content.getMainVersion().getContentData();
assertTrue( ( (TextDataEntry) contentData.getEntry( "name" ) ).getValue().equals( "JAM1" ) );
assertTrue( contentData.getEntry( "address" ).hasValue() );
assertTrue( ( (TextDataEntry) contentData.getEntry( "address" ) ).getValue().equals( "Oslo" ) );
/* Import II - Blank address */
doImport( getStringBasedXmlImportData_Simple( count, "JAM", "" ) );
final List<ContentKey> contentKeys2 =
contentDao.findContentKeysByCategory( fixture.findCategoryByName( "MyImportCategory" ).getKey() );
assertEquals( count, contentKeys2.size() );
final ContentEntity content2 = contentDao.findByKey( contentKeys2.get( 0 ) );
final Document dataDoc2 = content2.getMainVersion().getContentDataAsJDomDocument();
AssertTool.assertSingleXPathValueEquals( "contentdata/name", dataDoc2, "JAM1" );
AssertTool.assertSingleXPathValueEquals( "contentdata/address", dataDoc2, "" );
final CustomContentData contentData2 = (CustomContentData) content2.getMainVersion().getContentData();
assertTrue( ( (TextDataEntry) contentData2.getEntry( "name" ) ).getValue().equals( "JAM1" ) );
assertTrue( contentData2.getEntry( "address" ).hasValue() );
assertTrue( ( (TextDataEntry) contentData2.getEntry( "address" ) ).getValue().equals( "" ) );
/* Address changed - two versions */
assertEquals( 2, content2.getVersionCount() );
}
@Test
public void testStringBasedXmlImport_WithNullValues()
throws Exception
{
/* Import I */
final long count = 10L;
setupImport( getConfigForStringBasedXmlImport_Simple() );
doImport( getStringBasedXmlImportData_Simple( count, "JAM", "Oslo" ) );
final List<ContentKey> contentKeys =
contentDao.findContentKeysByCategory( fixture.findCategoryByName( "MyImportCategory" ).getKey() );
assertEquals( count, contentKeys.size() );
final ContentEntity content = contentDao.findByKey( contentKeys.get( 0 ) );
final Document dataDoc = content.getMainVersion().getContentDataAsJDomDocument();
AssertTool.assertSingleXPathValueEquals( "contentdata/name", dataDoc, "JAM1" );
AssertTool.assertSingleXPathValueEquals( "contentdata/address", dataDoc, "Oslo" );
final CustomContentData contentData = (CustomContentData) content.getMainVersion().getContentData();
assertTrue( ( (TextDataEntry) contentData.getEntry( "name" ) ).getValue().equals( "JAM1" ) );
assertTrue( contentData.getEntry( "address" ).hasValue() );
assertTrue( ( (TextDataEntry) contentData.getEntry( "address" ) ).getValue().equals( "Oslo" ) );
/* Import II - Null address */
doImport( getStringBasedXmlImportData_Simple( count, "JAM", null ) );
final List<ContentKey> contentKeys2 =
contentDao.findContentKeysByCategory( fixture.findCategoryByName( "MyImportCategory" ).getKey() );
assertEquals( count, contentKeys2.size() );
final ContentEntity content2 = contentDao.findByKey( contentKeys2.get( 0 ) );
final Document dataDoc2 = content2.getMainVersion().getContentDataAsJDomDocument();
AssertTool.assertSingleXPathValueEquals( "contentdata/name", dataDoc2, "JAM1" );
AssertTool.assertSingleXPathValueEquals( "contentdata/address", dataDoc2, "Oslo" );
final CustomContentData contentData2 = (CustomContentData) content2.getMainVersion().getContentData();
assertTrue( ( (TextDataEntry) contentData2.getEntry( "name" ) ).getValue().equals( "JAM1" ) );
assertTrue( contentData2.getEntry( "address" ).hasValue() );
assertTrue( ( (TextDataEntry) contentData2.getEntry( "address" ) ).getValue().equals( "Oslo" ) );
/* Address not part of import - no changes - one version */
assertEquals( 1, content2.getVersionCount() );
}
@Test
public void testStringBasedXmlImportWithPublishFromAndToFromImportData()
throws Exception
{
final long count = 10L;
setupImport( getConfigForStringBasedXmlImportWithPublishFromAndToFromImportData() );
doImport( getStringBasedXmlImportDataWithPublishFromAndToFromImportData( count, "2001.01.01 01:01:01", "2020.02.20 20:20:20" ) );
final List<ContentKey> contentKeys =
contentDao.findContentKeysByCategory( fixture.findCategoryByName( "MyImportCategory" ).getKey() );
assertEquals( count, contentKeys.size() );
final ContentEntity content = contentDao.findByKey( contentKeys.get( 0 ) );
assertEquals( FORMATTER.parseDateTime( "2001.01.01 01:01:00" ).toDate(), content.getAvailableFrom() );
assertEquals( FORMATTER.parseDateTime( "2020.02.20 20:20:00" ).toDate(), content.getAvailableTo() );
assertEquals( ContentStatus.APPROVED.getKey(), content.getMainVersion().getStatus().getKey() );
assertEquals( ContentVersionEntity.STATE_PUBLISHED, content.getMainVersion().getState( new Date() ) );
assertEquals( "testuser", content.getOwner().getName() );
assertEquals( "testuser", content.getMainVersion().getModifiedBy().getName() );
final Document dataDoc = content.getMainVersion().getContentDataAsJDomDocument();
AssertTool.assertSingleXPathValueEquals( "contentdata/name", dataDoc,
"ABC.." + NORWEGIAN + "src/test" + CHINESE + "src/test" + AEC_ALL + "src/test1" );
AssertTool.assertSingleXPathValueEquals( "contentdata/address", dataDoc, "Oslo1" );
AssertTool.assertSingleXPathValueEquals( "contentdata/age", dataDoc, "1" );
AssertTool.assertSingleXPathValueEquals( "contentdata/info", dataDoc,
"ABC.." + NORWEGIAN + "src/test" + CHINESE + "src/test" + AEC_ALL + "src/test1" );
}
@Test
public void testStringBasedXmlImportWithoutPublishFromAndTo()
throws Exception
{
final long count = 10L;
setupImport( getConfigForStringBasedXmlImport() );
doImport( getStringBasedXmlImportData( count, "Oslo" ), "testuser", "MyImport", null, null );
final List<ContentKey> contentKeys =
contentDao.findContentKeysByCategory( fixture.findCategoryByName( "MyImportCategory" ).getKey() );
assertEquals( count, contentKeys.size() );
final ContentEntity content = contentDao.findByKey( contentKeys.get( 0 ) );
assertNull( content.getAvailableFrom() );
assertNull( content.getAvailableTo() );
assertEquals( ContentStatus.APPROVED.getKey(), content.getMainVersion().getStatus().getKey() );
assertEquals( ContentStatus.APPROVED.getKey(), content.getMainVersion().getState( new Date() ) );
assertEquals( "testuser", content.getOwner().getName() );
assertEquals( "testuser", content.getMainVersion().getModifiedBy().getName() );
Document dataDoc = content.getMainVersion().getContentDataAsJDomDocument();
AssertTool.assertSingleXPathValueEquals( "contentdata/name", dataDoc,
"ABC.." + NORWEGIAN + "src/test" + CHINESE + "src/test" + AEC_ALL + "src/test1" );
AssertTool.assertSingleXPathValueEquals( "contentdata/address", dataDoc, "Oslo1" );
AssertTool.assertSingleXPathValueEquals( "contentdata/age", dataDoc, "1" );
AssertTool.assertSingleXPathValueEquals( "contentdata/info", dataDoc,
"ABC.." + NORWEGIAN + "src/test" + CHINESE + "src/test" + AEC_ALL + "src/test1" );
final CustomContentData contentData = (CustomContentData) content.getMainVersion().getContentData();
assertTrue( ( (TextDataEntry) contentData.getEntry( "name" ) ).getValue().equals(
"ABC.." + NORWEGIAN + "src/test" + CHINESE + "src/test" + AEC_ALL + "src/test1" ) );
assertTrue( ( (TextDataEntry) contentData.getEntry( "address" ) ).getValue().equals( "Oslo1" ) );
assertTrue( ( (TextDataEntry) contentData.getEntry( "age" ) ).getValue().equals( "1" ) );
assertTrue( ( (TextAreaDataEntry) contentData.getEntry( "info" ) ).getValue().equals(
"ABC.." + NORWEGIAN + "src/test" + CHINESE + "src/test" + AEC_ALL + "src/test1" ) );
final Document xmlDoc = ( (XmlDataEntry) contentData.getEntry( "xmlInfo" ) ).getValue();
final Document htmlDoc = JDOMUtil.parseDocument( ( (HtmlAreaDataEntry) contentData.getEntry( "htmlInfo" ) ).getValue() );
final String testAtr = "ABC.." + NORWEGIAN + "src/test" + CHINESE + "src/test" + AEC_ALL + "src/test1";
final String testElem = "ABC.." + NORWEGIAN + "src/test" + CHINESE + "src/test" + AEC_ALL + "src/test1";
AssertTool.assertSingleXPathValueEquals( "/root/@atr", xmlDoc, testAtr );
AssertTool.assertSingleXPathValueEquals( "/root/elem", xmlDoc, testElem );
AssertTool.assertSingleXPathValueEquals( "/p/@class", htmlDoc, testAtr );
AssertTool.assertSingleXPathValueEquals( "/p/div", htmlDoc, testElem );
}
@Test
public void testContentKeyBasedXmlImport()
throws Exception
{
final long count = 10L;
setupImport( getConfigForContentKeyBasedXmlImport() );
setupImageCategory();
final ContentKey key1 = setupImage();
final ContentKey key2 = setupImage();
doImport( getContentKeyBasedXmlImportData( count, key1, key1, key1, key2 ) );
final List<ContentKey> contentKeys =
contentDao.findContentKeysByCategory( fixture.findCategoryByName( "MyImportCategory" ).getKey() );
assertEquals( count, contentKeys.size() );
final ContentEntity content = contentDao.findByKey( contentKeys.get( 0 ) );
assertEquals( FORMATTER.parseDateTime( "2001.01.02 03:04:00" ).toDate(), content.getAvailableFrom() );
assertEquals( FORMATTER.parseDateTime( "2020.11.22 23:24:00" ).toDate(), content.getAvailableTo() );
assertEquals( ContentStatus.APPROVED.getKey(), content.getMainVersion().getStatus().getKey() );
assertEquals( ContentVersionEntity.STATE_PUBLISHED, content.getMainVersion().getState( new Date() ) );
assertEquals( "testuser", content.getOwner().getName() );
assertEquals( "testuser", content.getMainVersion().getModifiedBy().getName() );
assertEquals( 2, content.getMainVersion().getRelatedChildren( true ).size() );
final Document dataDoc = content.getMainVersion().getContentDataAsJDomDocument();
AssertTool.assertSingleXPathValueEquals( "contentdata/name", dataDoc,
"ABC.." + NORWEGIAN + "src/test" + CHINESE + "src/test" + AEC_ALL + "src/test1" );
AssertTool.assertSingleXPathValueEquals( "contentdata/picture/@key", dataDoc, key1.toString() );
AssertTool.assertSingleXPathValueEquals( "contentdata/attachment/file/@key", dataDoc, key1.toString() );
AssertTool.assertSingleXPathValueEquals( "contentdata/relcon/@key", dataDoc, key1.toString() );
AssertTool.assertSingleXPathValueEquals( "contentdata/multirelcon/content[@key=\"" + key1 + "\"]/@key", dataDoc, key1.toString() );
AssertTool.assertSingleXPathValueEquals( "contentdata/multirelcon/content[@key=\"" + key2 + "\"]/@key", dataDoc, key2.toString() );
final Collection<ContentEntity> relatedContents = content.getMainVersion().getRelatedChildren( false );
assertTrue( contentKeyExistInContentCollection( relatedContents, key1 ) );
assertTrue( contentKeyExistInContentCollection( relatedContents, key2 ) );
}
@Test
public void testCustomRelatedContentXmlImport()
throws Exception
{
final long count = 10L;
setupImport( getConfigForCustomRelatedContentXmlImport() );
setupRelatedContentCategory();
final ContentKey key1 = setupRelatedContent( "A" );
final ContentKey key2 = setupRelatedContent( "B" );
final ContentKey key3 = setupRelatedContent( "C" );
fixture.flushIndexTransaction();
doImport( getRelatedContentXmlImportData( count, "A", "B", "C" ) );
fixture.flushIndexTransaction();
final List<ContentKey> contentKeys =
contentDao.findContentKeysByCategory( fixture.findCategoryByName( "MyImportCategory" ).getKey() );
assertEquals( count, contentKeys.size() );
final ContentEntity content = contentDao.findByKey( contentKeys.get( 0 ) );
assertEquals( FORMATTER.parseDateTime( "2001.01.02 03:04:00" ).toDate(), content.getAvailableFrom() );
assertEquals( FORMATTER.parseDateTime( "2020.11.22 23:24:00" ).toDate(), content.getAvailableTo() );
assertEquals( ContentStatus.APPROVED.getKey(), content.getMainVersion().getStatus().getKey() );
assertEquals( ContentVersionEntity.STATE_PUBLISHED, content.getMainVersion().getState( new Date() ) );
assertEquals( "testuser", content.getOwner().getName() );
assertEquals( "testuser", content.getMainVersion().getModifiedBy().getName() );
assertEquals( 3, content.getMainVersion().getRelatedChildren( true ).size() );
final Document dataDoc = content.getMainVersion().getContentDataAsJDomDocument();
AssertTool.assertSingleXPathValueEquals( "contentdata/name", dataDoc,
"ABC.." + NORWEGIAN + "src/test" + CHINESE + "src/test" + AEC_ALL + "src/test1" );
AssertTool.assertSingleXPathValueEquals( "contentdata/relcon/content[@key=\"" + key1 + "\"]/@key", dataDoc, key1.toString() );
AssertTool.assertSingleXPathValueEquals( "contentdata/relcon/content[@key=\"" + key2 + "\"]/@key", dataDoc, key2.toString() );
AssertTool.assertSingleXPathValueEquals( "contentdata/relcon/content[@key=\"" + key3 + "\"]/@key", dataDoc, key3.toString() );
final Collection<ContentEntity> relatedContents = content.getMainVersion().getRelatedChildren( false );
assertTrue( contentKeyExistInContentCollection( relatedContents, key1 ) );
assertTrue( contentKeyExistInContentCollection( relatedContents, key2 ) );
assertTrue( contentKeyExistInContentCollection( relatedContents, key3 ) );
}
@Test
public void testImageRelatedContentXmlImport()
throws Exception
{
final long count = 10L;
setupImport( getConfigForImageRelatedContentXmlImport() );
fixture.flushIndexTransaction();
setupImageCategory();
final ContentKey key1 = setupImage( "A" );
final ContentKey key2 = setupImage( "B" );
final ContentKey key3 = setupImage( "C" );
fixture.flushIndexTransaction();
doImport( getRelatedContentXmlImportData( count, "A", "B", "C" ) );
fixture.flushIndexTransaction();
final List<ContentKey> contentKeys =
contentDao.findContentKeysByCategory( fixture.findCategoryByName( "MyImportCategory" ).getKey() );
assertEquals( count, contentKeys.size() );
final ContentEntity content = contentDao.findByKey( contentKeys.get( 0 ) );
assertEquals( FORMATTER.parseDateTime( "2001.01.02 03:04:00" ).toDate(), content.getAvailableFrom() );
assertEquals( FORMATTER.parseDateTime( "2020.11.22 23:24:00" ).toDate(), content.getAvailableTo() );
assertEquals( ContentStatus.APPROVED.getKey(), content.getMainVersion().getStatus().getKey() );
assertEquals( ContentVersionEntity.STATE_PUBLISHED, content.getMainVersion().getState( new Date() ) );
assertEquals( "testuser", content.getOwner().getName() );
assertEquals( "testuser", content.getMainVersion().getModifiedBy().getName() );
assertEquals( 3, content.getMainVersion().getRelatedChildren( true ).size() );
final Document dataDoc = content.getMainVersion().getContentDataAsJDomDocument();
AssertTool.assertSingleXPathValueEquals( "contentdata/name", dataDoc,
"ABC.." + NORWEGIAN + "src/test" + CHINESE + "src/test" + AEC_ALL + "src/test1" );
AssertTool.assertSingleXPathValueEquals( "contentdata/relcon/content[@key=\"" + key1 + "\"]/@key", dataDoc, key1.toString() );
AssertTool.assertSingleXPathValueEquals( "contentdata/relcon/content[@key=\"" + key2 + "\"]/@key", dataDoc, key2.toString() );
AssertTool.assertSingleXPathValueEquals( "contentdata/relcon/content[@key=\"" + key3 + "\"]/@key", dataDoc, key3.toString() );
final Collection<ContentEntity> relatedContents = content.getMainVersion().getRelatedChildren( false );
assertTrue( contentKeyExistInContentCollection( relatedContents, key1 ) );
assertTrue( contentKeyExistInContentCollection( relatedContents, key2 ) );
assertTrue( contentKeyExistInContentCollection( relatedContents, key3 ) );
}
@Test
public void testMiscXmlImport()
throws Exception
{
final long count = 10L;
setupImport( getConfigForMiscXmlImport() );
doImport( getMiscXmlImportData( count ) );
final List<ContentKey> contentKeys =
contentDao.findContentKeysByCategory( fixture.findCategoryByName( "MyImportCategory" ).getKey() );
assertEquals( count, contentKeys.size() );
final ContentEntity content = contentDao.findByKey( contentKeys.get( 0 ) );
assertEquals( FORMATTER.parseDateTime( "2001.01.02 03:04:00" ).toDate(), content.getAvailableFrom() );
assertEquals( FORMATTER.parseDateTime( "2020.11.22 23:24:00" ).toDate(), content.getAvailableTo() );
assertEquals( ContentStatus.APPROVED.getKey(), content.getMainVersion().getStatus().getKey() );
assertEquals( ContentVersionEntity.STATE_PUBLISHED, content.getMainVersion().getState( new Date() ) );
assertEquals( "testuser", content.getOwner().getName() );
assertEquals( "testuser", content.getMainVersion().getModifiedBy().getName() );
final Document dataDoc = content.getMainVersion().getContentDataAsJDomDocument();
AssertTool.assertSingleXPathValueEquals( "contentdata/name", dataDoc,
"ABC.." + NORWEGIAN + "src/test" + CHINESE + "src/test" + AEC_ALL + "src/test1" );
AssertTool.assertSingleXPathValueEquals( "contentdata/longHair", dataDoc, "true" );
AssertTool.assertSingleXPathValueEquals( "contentdata/lastChecked", dataDoc, "2009-03-10" );
AssertTool.assertSingleXPathValueEquals( "count(/contentdata/keywords/keyword)", dataDoc, "4" );
AssertTool.assertSingleXPathValueEquals( "/contentdata/keywords/keyword[node() = \"fisk\"]", dataDoc, "fisk" );
AssertTool.assertSingleXPathValueEquals( "/contentdata/keywords/keyword[node() = \"ost\"]", dataDoc, "ost" );
AssertTool.assertSingleXPathValueEquals( "/contentdata/keywords/keyword[node() = \"torsk\"]", dataDoc, "torsk" );
AssertTool.assertSingleXPathValueEquals( "/contentdata/keywords/keyword[node() = \"hyse\"]", dataDoc, "hyse" );
}
@Test
public void testBinaryXmlImport()
throws Exception
{
}
private String getStringBasedXmlImportData( final long count, final String address )
{
StringBuilder builder = new StringBuilder();
builder.append( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" );
builder.append( "<fisk><torsk>" );
for ( int i = 0; i < count; i++ )
{
builder.append( "<entry name=\"ABC.." ).append( NORWEGIAN ).append( "src/test" );
builder.append( CHINESE ).append( "src/test" );
builder.append( AEC_ALL ).append( "src/test" );
builder.append( i + 1 ).append( "\">" );
if ( address != null )
{
builder.append( "<address>" ).append( address ).append( i + 1 ).append( "</address>" );
}
builder.append( "<persondata>" );
builder.append( "<age>" ).append( i + 1 ).append( "</age>" );
builder.append( "<info>" );
builder.append( "ABC.." ).append( NORWEGIAN ).append( "src/test" );
builder.append( CHINESE ).append( "src/test" );
builder.append( AEC_ALL ).append( "src/test" );
builder.append( i + 1 ).append( "</info>" );
builder.append( getHTMLImportEntry( i + 1 ) );
builder.append( getXMLImportEntry( i + 1 ) );
builder.append( "</persondata>" );
builder.append( "</entry>" );
}
builder.append( "</torsk></fisk>" );
return builder.toString();
}
private String getStringBasedXmlImportData_Simple( final long count, final String name, final String address )
{
StringBuilder builder = new StringBuilder();
builder.append( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" );
builder.append( "<fisk><torsk>" );
for ( int i = 0; i < count; i++ )
{
builder.append( "<entry name='" ).append( name + ( i + 1 ) ).append( "' title='" ).append( name + ( i + 1 ) ).append( "'>" );
if ( address != null )
{
builder.append( "<address>" ).append( address ).append( "</address>" );
}
builder.append( "</entry>" );
}
builder.append( "</torsk></fisk>" );
return builder.toString();
}
private StringBuilder getHTMLImportEntry( final int no )
{
final String testStr = "ABC.." + NORWEGIAN + "src/test" + CHINESE + "src/test" + AEC_ALL + "src/test" + no;
StringBuilder builder = new StringBuilder();
builder.append( "<myhtml>" );
builder.append( "<p class=\"" + testStr + "\">" );
builder.append( "<div>" + testStr + "</div>" );
builder.append( "</p>" );
builder.append( "</myhtml>" );
return builder;
}
private StringBuilder getXMLImportEntry( final int no )
{
final String testStr = "ABC.." + NORWEGIAN + "src/test" + CHINESE + "src/test" + AEC_ALL + "src/test" + no;
StringBuilder builder = new StringBuilder();
builder.append( "<myxml>" );
builder.append( "<root atr=\"" + testStr + "\">" );
builder.append( "<elem>" + testStr + "</elem>" );
builder.append( "</root>" );
builder.append( "</myxml>" );
return builder;
}
private String getStringBasedXmlImportDataWithBlocks( final long count )
{
final StringBuilder builder = new StringBuilder();
builder.append( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" );
builder.append( "<fisk><torsk>" );
for ( int i = 0; i < count; i++ )
{
builder.append( "<entry name=\"ABC.." ).append( NORWEGIAN ).append( "src/test" );
builder.append( CHINESE ).append( "src/test" );
builder.append( AEC_ALL ).append( "src/test" );
builder.append( i + 1 ).append( "\">" );
builder.append( "<persondata1>" );
builder.append( "<address>Oslo" ).append( i + 1 ).append( "</address>" );
builder.append( "</persondata1>" );
builder.append( "<persondata2>" );
builder.append( "<age>" ).append( i + 1 ).append( "</age>" );
builder.append( "<info>" );
builder.append( "ABC.." ).append( NORWEGIAN ).append( "src/test" );
builder.append( CHINESE ).append( "src/test" );
builder.append( AEC_ALL ).append( "src/test" );
builder.append( i + 1 ).append( "</info>" );
builder.append( "</persondata2>" );
builder.append( "</entry>" );
}
builder.append( "</torsk></fisk>" );
return builder.toString();
}
private String getStringBasedXmlImportDataWithBlocksToBlocks( final long count, final String valuePrefix, final boolean limitBlock )
{
final StringBuilder builder = new StringBuilder();
builder.append( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" );
builder.append( "<fisk><torsk>" );
for ( int i = 0; i < count; i++ )
{
builder.append( "<entry name=\"ABC.." ).append( NORWEGIAN ).append( "src/test" );
builder.append( CHINESE ).append( "src/test" );
builder.append( AEC_ALL ).append( "src/test" );
builder.append( i + 1 ).append( "\">" );
if ( !limitBlock )
{
builder.append( "<keyvaluepair1>" );
builder.append( " <key>keyA</key>" );
builder.append( " <value>" ).append( valuePrefix ).append( "A</value>" );
builder.append( "</keyvaluepair1>" );
}
builder.append( "<keyvaluepair1>" );
builder.append( " <key>keyB</key>" );
builder.append( " <value>" ).append( valuePrefix ).append( "B</value>" );
builder.append( "</keyvaluepair1>" );
if ( !limitBlock )
{
builder.append( "<keyvaluepair1>" );
builder.append( " <key>keyC</key>" );
builder.append( " <value>" ).append( valuePrefix ).append( "C</value>" );
builder.append( "</keyvaluepair1>" );
builder.append( "<keyvaluepair2>" );
builder.append( " <key>keyD</key>" );
builder.append( " <value>" ).append( valuePrefix ).append( "D</value>" );
builder.append( "</keyvaluepair2>" );
}
builder.append( "<keyvaluepair2>" );
builder.append( " <key>keyE</key>" );
builder.append( " <value>" ).append( valuePrefix ).append( "E</value>" );
builder.append( "</keyvaluepair2>" );
if ( !limitBlock )
{
builder.append( "<keyvaluepair2>" );
builder.append( " <key>keyF</key>" );
builder.append( " <value>" ).append( valuePrefix ).append( "F</value>" );
builder.append( "</keyvaluepair2>" );
}
if ( limitBlock )
{
builder.append( "<keyvaluepair2>" );
builder.append( " <key>keyG</key>" );
builder.append( " <value>" ).append( valuePrefix ).append( "G</value>" );
builder.append( "</keyvaluepair2>" );
builder.append( "<keyvaluepair2>" );
builder.append( " <key>keyH</key>" );
builder.append( " <value>" ).append( valuePrefix ).append( "H</value>" );
builder.append( "</keyvaluepair2>" );
}
builder.append( "</entry>" );
}
builder.append( "</torsk></fisk>" );
return builder.toString();
}
private String getStringBasedXmlImportDataWithNamespaces( long count )
{
final StringBuilder builder = new StringBuilder();
builder.append( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" );
builder.append( "<fisk><torsk>" );
for ( int i = 0; i < count; i++ )
{
builder.append( "<entry name=\"ABC.." ).append( NORWEGIAN ).append( "src/test" );
builder.append( CHINESE ).append( "src/test" );
builder.append( AEC_ALL ).append( "src/test" );
builder.append( i + 1 ).append( "\" />" );
}
builder.append( "</torsk></fisk>" );
return builder.toString();
}
private String getStringBasedXmlImportDataWithPublishFromAndToFromImportData( long count, String publishFrom, String publishTo )
{
final StringBuilder builder = new StringBuilder();
builder.append( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" );
builder.append( "<fisk><torsk>" );
for ( int i = 0; i < count; i++ )
{
builder.append( "<entry name=\"ABC.." ).append( NORWEGIAN ).append( "src/test" );
builder.append( CHINESE ).append( "src/test" );
builder.append( AEC_ALL ).append( "src/test" );
builder.append( i + 1 ).append( "\">" );
builder.append( "<address>Oslo" ).append( i + 1 ).append( "</address>" );
builder.append( "<persondata>" );
builder.append( "<age>" ).append( i + 1 ).append( "</age>" );
builder.append( "<info>" );
builder.append( "ABC.." ).append( NORWEGIAN ).append( "src/test" );
builder.append( CHINESE ).append( "src/test" );
builder.append( AEC_ALL ).append( "src/test" );
builder.append( i + 1 ).append( "</info>" );
builder.append( "</persondata>" );
builder.append( "<online " );
builder.append( "from=\"" ).append( publishFrom ).append( "\" " );
builder.append( "to=\"" ).append( publishTo ).append( "\"/>" );
builder.append( "</entry>" );
}
builder.append( "</torsk></fisk>" );
return builder.toString();
}
private String getContentKeyBasedXmlImportData( final long count, final ContentKey imageContentKey, final ContentKey fileContentKey,
final ContentKey relatedContentKey1, final ContentKey relatedContentKey2 )
{
final StringBuilder builder = new StringBuilder();
builder.append( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" );
builder.append( "<fisk><torsk>" );
for ( int i = 0; i < count; i++ )
{
builder.append( "<entry name=\"ABC.." ).append( NORWEGIAN ).append( "src/test" );
builder.append( CHINESE ).append( "src/test" );
builder.append( AEC_ALL ).append( "src/test" );
builder.append( i + 1 ).append( "\" " );
builder.append( "pictureKey=\"" ).append( imageContentKey ).append( "\" " );
builder.append( "attachmentKey=\"" ).append( fileContentKey ).append( "\" " );
builder.append( "relatedContentKey=\"" ).append( relatedContentKey1 ).append( "\" >" );
builder.append( "<relConKey>" ).append( relatedContentKey1 ).append( "</relConKey>" );
builder.append( "<relConKey>" ).append( relatedContentKey2 ).append( "</relConKey>" );
builder.append( "</entry>" );
}
builder.append( "</torsk></fisk>" );
return builder.toString();
}
private String getRelatedContentXmlImportData( final long count, final String filename1, final String filename2,
final String filename3 )
{
final StringBuilder builder = new StringBuilder();
builder.append( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" );
builder.append( "<fisk><torsk>" );
for ( int i = 0; i < count; i++ )
{
builder.append( "<entry name=\"ABC.." ).append( NORWEGIAN ).append( "src/test" );
builder.append( CHINESE ).append( "src/test" );
builder.append( AEC_ALL ).append( "src/test" );
builder.append( i + 1 ).append( "\">" );
builder.append( "<relatedContent name=\"" ).append( filename1 ).append( "\"/>" );
builder.append( "<relatedContent name=\"" ).append( filename2 ).append( "\"/>" );
builder.append( "<relatedContent name=\"" ).append( filename3 ).append( "\"/>" );
builder.append( "</entry>" );
}
builder.append( "</torsk></fisk>" );
return builder.toString();
}
private String getMiscXmlImportData( final long count )
throws Exception
{
final StringBuilder builder = new StringBuilder();
builder.append( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" );
builder.append( "<fisk><torsk>" );
for ( int i = 0; i < count; i++ )
{
builder.append( "<entry name=\"ABC.." ).append( NORWEGIAN ).append( "src/test" );
builder.append( CHINESE ).append( "src/test" );
builder.append( AEC_ALL ).append( "src/test" );
builder.append( i + 1 ).append( "\" " );
builder.append( "longHair=\"" ).append( i % 2 == 0 ? "true" : "false" ).append( "\" " );
builder.append( "lastChecked=\"" ).append( "Tue Mar 10 09:04:48 CET 2009" ).append( "\" >" );
builder.append( "<keyword>" ).append( "fisk" ).append( "</keyword>" );
builder.append( "<keyword>" ).append( "ost" ).append( "</keyword>" );
builder.append( "<keyword>" ).append( "torsk" ).append( "</keyword>" );
builder.append( "<keyword>" ).append( "hyse" ).append( "</keyword>" );
builder.append( "</entry>" );
}
builder.append( "</torsk></fisk>" );
return builder.toString();
}
private Document getConfigForStringBasedXmlImport()
{
final StringBuffer config = new StringBuffer();
config.append( "<contenttype>" );
config.append( " <config name=\"MyContentType\" version=\"1.0\">" );
config.append( " <form>" );
config.append( " <title name=\"name\"/>" );
config.append( " <block name=\"info\">" );
config.append( " <input name=\"name\" required=\"true\" type=\"text\">" );
config.append( " <display>Name</display>" );
config.append( " <xpath>contentdata/name</xpath>" );
config.append( " </input>" );
config.append( " <input name=\"address\" type=\"text\">" );
config.append( " <display>Address</display>" );
config.append( " <xpath>contentdata/address</xpath>" );
config.append( " </input>" );
config.append( " <input name=\"age\" type=\"text\">" );
config.append( " <display>Age</display>" );
config.append( " <xpath>contentdata/age</xpath>" );
config.append( " </input>" );
config.append( " <input name=\"info\" type=\"textarea\">" );
config.append( " <display>Info</display>" );
config.append( " <xpath>contentdata/info</xpath>" );
config.append( " </input>" );
config.append( " <input name=\"htmlInfo\" type=\"htmlarea\" mode=\"xhtml\">" );
config.append( " <display>HTML</display>" );
config.append( " <xpath>contentdata/htmlInfo</xpath>" );
config.append( " </input>" );
config.append( " <input name=\"xmlInfo\" type=\"xml\">" );
config.append( " <display>XML</display>" );
config.append( " <xpath>contentdata/xmlInfo</xpath>" );
config.append( " </input>" );
config.append( " </block>" );
config.append( " </form>" );
config.append( " <imports>" );
config.append( " <import mode=\"xml\" name=\"MyImport\"" );
config.append( " base=\"/fisk/torsk/entry\" status=\"2\" sync=\"name\">" );
config.append( " <mapping dest=\"name\" src=\"@name\"/>" );
config.append( " <mapping dest=\"address\" src=\"address\"/>" );
config.append( " <mapping dest=\"age\" src=\"persondata/age\"/>" );
config.append( " <mapping dest=\"info\" src=\"persondata/info\"/>" );
config.append( " <mapping dest=\"htmlInfo\" src=\"persondata/myhtml\"/>" );
config.append( " <mapping dest=\"xmlInfo\" src=\"persondata/myxml\"/>" );
config.append( " </import>" );
config.append( " <import mode=\"xml\" name=\"MyImport2\"" );
config.append( " base=\"/fisk/torsk/entry\" status=\"2\" sync=\"name\">" );
config.append( " <mapping dest=\"name\" src=\"@name\"/>" );
config.append( " <mapping dest=\"age\" src=\"persondata/age\"/>" );
config.append( " <mapping dest=\"info\" src=\"persondata/info\"/>" );
config.append( " <mapping dest=\"htmlInfo\" src=\"persondata/myhtml\"/>" );
config.append( " <mapping dest=\"xmlInfo\" src=\"persondata/myxml\"/>" );
config.append( " </import>" );
config.append( " </imports>" );
config.append( " </config>" );
config.append( " <indexparameters>" );
config.append( " <index xpath=\"contentdata/name\"/>" );
config.append( " </indexparameters>" );
config.append( "</contenttype>" );
return XMLDocumentFactory.create( config.toString() ).getAsJDOMDocument();
}
private Document getConfigForStringBasedXmlImport_Simple()
{
final StringBuffer config = new StringBuffer();
config.append( "<contenttype>" );
config.append( " <config name=\"MyContentType\" version=\"1.0\">" );
config.append( " <form>" );
config.append( " <title name=\"title\"/>" );
config.append( " <block name=\"info\">" );
config.append( " <input name=\"title\" type=\"text\" required='true'>" );
config.append( " <display>Title</display>" );
config.append( " <xpath>contentdata/title</xpath>" );
config.append( " </input>" );
config.append( " <input name=\"name\" type=\"text\">" );
config.append( " <display>Name</display>" );
config.append( " <xpath>contentdata/name</xpath>" );
config.append( " </input>" );
config.append( " <input name=\"address\" type=\"text\">" );
config.append( " <display>Address</display>" );
config.append( " <xpath>contentdata/address</xpath>" );
config.append( " </input>" );
config.append( " </block>" );
config.append( " </form>" );
config.append( " <imports>" );
config.append( " <import mode=\"xml\" name=\"MyImport\"" );
config.append( " base=\"/fisk/torsk/entry\" status=\"2\" sync=\"name\">" );
config.append( " <mapping dest=\"title\" src=\"@title\"/>" );
config.append( " <mapping dest=\"name\" src=\"@name\"/>" );
config.append( " <mapping dest=\"address\" src=\"address\"/>" );
config.append( " </import>" );
config.append( " </imports>" );
config.append( " </config>" );
config.append( " <indexparameters>" );
config.append( " <index xpath=\"contentdata/name\"/>" );
config.append( " </indexparameters>" );
config.append( "</contenttype>" );
return XMLDocumentFactory.create( config.toString() ).getAsJDOMDocument();
}
private Document getConfigForStringBasedXmlImportWithBlocks()
{
final StringBuffer config = new StringBuffer();
config.append( "<contenttype>" );
config.append( " <config name=\"MyContentType\" version=\"1.0\">" );
config.append( " <form>" );
config.append( " <title name=\"name\"/>" );
config.append( " <block name=\"info\">" );
config.append( " <input name=\"name\" required=\"true\" type=\"text\">" );
config.append( " <display>Name</display>" );
config.append( " <xpath>contentdata/name</xpath>" );
config.append( " </input>" );
config.append( " <input name=\"address\" type=\"text\">" );
config.append( " <display>Address</display>" );
config.append( " <xpath>contentdata/address</xpath>" );
config.append( " </input>" );
config.append( " <input name=\"age\" type=\"text\">" );
config.append( " <display>Age</display>" );
config.append( " <xpath>contentdata/age</xpath>" );
config.append( " </input>" );
config.append( " <input name=\"info\" type=\"textarea\">" );
config.append( " <display>Info</display>" );
config.append( " <xpath>contentdata/info</xpath>" );
config.append( " </input>" );
config.append( " </block>" );
config.append( " </form>" );
config.append( " <imports>" );
config.append( " <import mode=\"xml\" name=\"MyImport\" purge=\"archive\"" );
config.append( " base=\"/fisk/torsk/entry\" status=\"2\" sync=\"name\">" );
config.append( " <mapping dest=\"name\" src=\"@name\"/>" );
config.append( " <block base=\"persondata1\">" );
config.append( " <mapping dest=\"address\" src=\"address\"/>" );
config.append( " </block>" );
config.append( " <block base=\"persondata2\">" );
config.append( " <mapping dest=\"age\" src=\"age\"/>" );
config.append( " <mapping dest=\"info\" src=\"info\"/>" );
config.append( " </block>" );
config.append( " </import>" );
config.append( " </imports>" );
config.append( " </config>" );
config.append( " <indexparameters>" );
config.append( " <index xpath=\"contentdata/name\"/>" );
config.append( " </indexparameters>" );
config.append( "</contenttype>" );
return XMLDocumentFactory.create( config.toString() ).getAsJDOMDocument();
}
private Document getConfigForStringBasedXmlImportWithBlocksToBlocks()
{
final StringBuffer config = new StringBuffer();
config.append( "<contenttype>" );
config.append( " <config name=\"MyContentType\" version=\"1.0\">" );
config.append( " <form>" );
config.append( " <title name=\"name\"/>" );
config.append( " <block name=\"info\">" );
config.append( " <input name=\"name\" required=\"true\" type=\"text\">" );
config.append( " <display>Name</display>" );
config.append( " <xpath>contentdata/name</xpath>" );
config.append( " </input>" );
config.append( " </block>" );
config.append( " <block name=\"keyvaluepair1\" group=\"contentdata/kv1\">" );
config.append( " <input name=\"key1\" type=\"text\">" );
config.append( " <display>Key</display>" );
config.append( " <xpath>key</xpath>" );
config.append( " </input>" );
config.append( " <input name=\"value1\" type=\"text\">" );
config.append( " <display>Value</display>" );
config.append( " <xpath>value</xpath>" );
config.append( " </input>" );
config.append( " </block>" );
config.append( " <block name=\"keyvaluepair2\" group=\"contentdata/kv2\">" );
config.append( " <input name=\"key2\" type=\"text\">" );
config.append( " <display>Key</display>" );
config.append( " <xpath>key</xpath>" );
config.append( " </input>" );
config.append( " <input name=\"value2\" type=\"text\">" );
config.append( " <display>Value</display>" );
config.append( " <xpath>value</xpath>" );
config.append( " </input>" );
config.append( " </block>" );
config.append( " </form>" );
config.append( " <imports>" );
config.append( " <import mode=\"xml\" name=\"MyImport\" purge=\"archive\"" );
config.append( " base=\"/fisk/torsk/entry\" status=\"2\" sync=\"name\">" );
config.append( " <mapping dest=\"name\" src=\"@name\"/>" );
config.append( " <block base=\"keyvaluepair1\" dest=\"keyvaluepair1\" sync=\"key1\">" );
config.append( " <mapping dest=\"key1\" src=\"key\"/>" );
config.append( " <mapping dest=\"value1\" src=\"value\"/>" );
config.append( " </block>" );
config.append( " <block base=\"keyvaluepair2\" dest=\"keyvaluepair2\" sync=\"key2\">" );
config.append( " <mapping dest=\"key2\" src=\"key\"/>" );
config.append( " <mapping dest=\"value2\" src=\"value\"/>" );
config.append( " </block>" );
config.append( " </import>" );
config.append( " </imports>" );
config.append( " </config>" );
config.append( " <indexparameters>" );
config.append( " <index xpath=\"contentdata/name\"/>" );
config.append( " </indexparameters>" );
config.append( "</contenttype>" );
return XMLDocumentFactory.create( config.toString() ).getAsJDOMDocument();
}
private Document getConfigForStringBasedXmlImportWithNamespaces()
{
final StringBuffer config = new StringBuffer();
config.append( "<contenttype>" );
config.append( " <config name=\"MyContentType\" version=\"1.0\">" );
config.append( " <form>" );
config.append( " <title name=\"name\"/>" );
config.append( " <block name=\"info\">" );
config.append( " <input name=\"name\" required=\"true\" type=\"text\">" );
config.append( " <display>Name</display>" );
config.append( " <xpath>contentdata/name</xpath>" );
config.append( " </input>" );
config.append( " <input name=\"max\" type=\"text\">" );
config.append( " <display>Max</display>" );
config.append( " <xpath>contentdata/max</xpath>" );
config.append( " </input>" );
config.append( " <input name=\"min\" type=\"text\">" );
config.append( " <display>Min</display>" );
config.append( " <xpath>contentdata/min</xpath>" );
config.append( " </input>" );
config.append( " <input name=\"timestamp\" type=\"text\">" );
config.append( " <display>Imprted timestamp</display>" );
config.append( " <xpath>contentdata/timestamp</xpath>" );
config.append( " </input>" );
config.append( " <input name=\"year\" type=\"text\">" );
config.append( " <display>Year</display>" );
config.append( " <xpath>contentdata/year</xpath>" );
config.append( " </input>" );
config.append( " </block>" );
config.append( " </form>" );
config.append( " <imports>" );
config.append( " <import mode=\"xml\" name=\"MyImport\" purge=\"archive\"" );
config.append( " base=\"/fisk/torsk/entry\" status=\"2\" sync=\"name\"" );
config.append( " xmlns:dummy=\"http://www.dummy.com\">" );
config.append( " <mapping dest=\"name\" src=\"@name\"/>" );
config.append( " <mapping dest=\"max\" src=\"789\"/>" );
config.append( " <mapping dest=\"min\" src=\"123\"/>" );
config.append( " <mapping dest=\"timestamp\" src=\"current-dateTime()\"/>" );
config.append( " <mapping dest=\"year\" src=\"year-from-date(current-date())\"/>" );
config.append( " </import>" );
config.append( " </imports>" );
config.append( " </config>" );
config.append( " <indexparameters>" );
config.append( " <index xpath=\"contentdata/name\"/>" );
config.append( " </indexparameters>" );
config.append( "</contenttype>" );
return XMLDocumentFactory.create( config.toString() ).getAsJDOMDocument();
}
private Document getConfigForStringBasedXmlImportWithPublishFromAndToFromImportData()
{
StringBuffer config = new StringBuffer();
config.append( "<contenttype>" );
config.append( " <config name=\"MyContentType\" version=\"1.0\">" );
config.append( " <form>" );
config.append( " <title name=\"name\"/>" );
config.append( " <block name=\"info\">" );
config.append( " <input name=\"name\" required=\"true\" type=\"text\">" );
config.append( " <display>Name</display>" );
config.append( " <xpath>contentdata/name</xpath>" );
config.append( " </input>" );
config.append( " <input name=\"address\" type=\"text\">" );
config.append( " <display>Address</display>" );
config.append( " <xpath>contentdata/address</xpath>" );
config.append( " </input>" );
config.append( " <input name=\"age\" type=\"text\">" );
config.append( " <display>Age</display>" );
config.append( " <xpath>contentdata/age</xpath>" );
config.append( " </input>" );
config.append( " <input name=\"info\" type=\"textarea\">" );
config.append( " <display>Info</display>" );
config.append( " <xpath>contentdata/info</xpath>" );
config.append( " </input>" );
config.append( " </block>" );
config.append( " </form>" );
config.append( " <imports>" );
config.append( " <import mode=\"xml\" name=\"MyImport\" purge=\"archive\"" );
config.append( " base=\"/fisk/torsk/entry\" status=\"2\" sync=\"name\">" );
config.append( " <mapping dest=\"name\" src=\"@name\"/>" );
config.append( " <mapping dest=\"address\" src=\"address\"/>" );
config.append( " <mapping dest=\"age\" src=\"persondata/age\"/>" );
config.append( " <mapping dest=\"info\" src=\"persondata/info\"/>" );
config.append( " <mapping dest=\"@publishfrom\" src=\"online/@from\" format=\"yyyy.MM.dd HH:mm:ss\"/>" );
config.append( " <mapping dest=\"@publishto\" src=\"online/@to\" format=\"yyyy.MM.dd HH:mm:ss\"/>" );
config.append( " </import>" );
config.append( " </imports>" );
config.append( " </config>" );
config.append( " <indexparameters>" );
config.append( " <index xpath=\"contentdata/name\"/>" );
config.append( " </indexparameters>" );
config.append( "</contenttype>" );
return XMLDocumentFactory.create( config.toString() ).getAsJDOMDocument();
}
private Document getConfigForContentKeyBasedXmlImport()
{
StringBuffer config = new StringBuffer();
config.append( "<contenttype>" );
config.append( " <config name=\"MyContentType\" version=\"1.0\">" );
config.append( " <form>" );
config.append( " <title name=\"name\"/>" );
config.append( " <block name=\"info\">" );
config.append( " <input name=\"name\" required=\"true\" type=\"text\">" );
config.append( " <display>Name</display>" );
config.append( " <xpath>contentdata/name</xpath>" );
config.append( " </input>" );
config.append( " <input name=\"picture\" type=\"image\">" );
config.append( " <display>Picture</display>" );
config.append( " <xpath>contentdata/picture</xpath>" );
config.append( " </input>" );
config.append( " <input name=\"attachment\" type=\"file\">" );
config.append( " <display>Attachment</display>" );
config.append( " <xpath>contentdata/attachment</xpath>" );
config.append( " </input>" );
config.append( " <input name=\"relatedContent\" type=\"relatedcontent\" multiple=\"false\" >" );
config.append( " <display>RelatedContent</display>" );
config.append( " <xpath>contentdata/relcon</xpath>" );
config.append( " <contenttype name=\"MyImageContentType\"/>" );
config.append( " </input>" );
config.append( " <input name=\"multipleRelatedContent\" type=\"relatedcontent\" multiple=\"true\" >" );
config.append( " <display>MultipleRelatedContent</display>" );
config.append( " <xpath>contentdata/multirelcon</xpath>" );
config.append( " </input>" );
config.append( " </block>" );
config.append( " </form>" );
config.append( " <imports>" );
config.append( " <import mode=\"xml\" name=\"MyImport\" purge=\"archive\"" );
config.append( " base=\"/fisk/torsk/entry\" status=\"2\" sync=\"name\">" );
config.append( " <mapping dest=\"name\" src=\"@name\"/>" );
config.append( " <mapping dest=\"picture\" src=\"@pictureKey\"/>" );
config.append( " <mapping dest=\"attachment\" src=\"@attachmentKey\"/>" );
config.append( " <mapping dest=\"relatedContent\" src=\"@relatedContentKey\"/>" );
config.append( " <mapping dest=\"multipleRelatedContent\" src=\"relConKey\"/>" );
config.append( " </import>" );
config.append( " </imports>" );
config.append( " </config>" );
config.append( " <indexparameters>" );
config.append( " <index xpath=\"contentdata/name\"/>" );
config.append( " </indexparameters>" );
config.append( "</contenttype>" );
return XMLDocumentFactory.create( config.toString() ).getAsJDOMDocument();
}
private Document getConfigForCustomRelatedContentXmlImport()
{
final StringBuffer config = new StringBuffer();
config.append( "<contenttype>" );
config.append( " <config name=\"MyContentType\" version=\"1.0\">" );
config.append( " <form>" );
config.append( " <title name=\"name\"/>" );
config.append( " <block name=\"info\">" );
config.append( " <input name=\"name\" required=\"true\" type=\"text\">" );
config.append( " <display>Name</display>" );
config.append( " <xpath>contentdata/name</xpath>" );
config.append( " </input>" );
config.append( " <input name=\"relatedContent\" type=\"relatedcontent\" multiple=\"true\" >" );
config.append( " <display>Images</display>" );
config.append( " <xpath>contentdata/relcon</xpath>" );
config.append( " </input>" );
config.append( " </block>" );
config.append( " </form>" );
config.append( " <imports>" );
config.append( " <import mode=\"xml\" name=\"MyImport\" purge=\"archive\"" );
config.append( " base=\"/fisk/torsk/entry\" status=\"2\" sync=\"name\">" );
config.append( " <mapping dest=\"name\" src=\"@name\"/>" );
config.append( " <mapping dest=\"relatedContent\" src=\"relatedContent/@name\"" );
config.append( " relatedcontenttype=\"MyRelatedContentType\" relatedfield=\"name\"/>" );
config.append( " </import>" );
config.append( " </imports>" );
config.append( " </config>" );
config.append( " <indexparameters>" );
config.append( " <index xpath=\"contentdata/name\"/>" );
config.append( " </indexparameters>" );
config.append( "</contenttype>" );
return XMLDocumentFactory.create( config.toString() ).getAsJDOMDocument();
}
private Document getConfigForImageRelatedContentXmlImport()
{
final StringBuffer config = new StringBuffer();
config.append( "<contenttype>" );
config.append( " <config name=\"MyContentType\" version=\"1.0\">" );
config.append( " <form>" );
config.append( " <title name=\"name\"/>" );
config.append( " <block name=\"info\">" );
config.append( " <input name=\"name\" required=\"true\" type=\"text\">" );
config.append( " <display>Name</display>" );
config.append( " <xpath>contentdata/name</xpath>" );
config.append( " </input>" );
config.append( " <input name=\"relatedContent\" type=\"relatedcontent\" multiple=\"true\" >" );
config.append( " <display>Images</display>" );
config.append( " <xpath>contentdata/relcon</xpath>" );
config.append( " </input>" );
config.append( " </block>" );
config.append( " </form>" );
config.append( " <imports>" );
config.append( " <import mode=\"xml\" name=\"MyImport\" purge=\"archive\"" );
config.append( " base=\"/fisk/torsk/entry\" status=\"2\" sync=\"name\">" );
config.append( " <mapping dest=\"name\" src=\"@name\"/>" );
config.append( " <mapping dest=\"relatedContent\" src=\"relatedContent/@name\"" );
config.append( " relatedcontenttype=\"MyImageContentType\" relatedfield=\"name\"/>" );
config.append( " </import>" );
config.append( " </imports>" );
config.append( " </config>" );
config.append( " <indexparameters>" );
config.append( " <index xpath=\"contentdata/name\"/>" );
config.append( " </indexparameters>" );
config.append( "</contenttype>" );
return XMLDocumentFactory.create( config.toString() ).getAsJDOMDocument();
}
private Document getConfigForMiscXmlImport()
{
final StringBuffer config = new StringBuffer();
config.append( "<contenttype>" );
config.append( " <config name=\"MyContentType\" version=\"1.0\">" );
config.append( " <form>" );
config.append( " <title name=\"name\"/>" );
config.append( " <block name=\"info\">" );
config.append( " <input name=\"name\" required=\"true\" type=\"text\">" );
config.append( " <display>Name</display>" );
config.append( " <xpath>contentdata/name</xpath>" );
config.append( " </input>" );
config.append( " <input name=\"longHair\" type=\"checkbox\">" );
config.append( " <display>Long Hair</display>" );
config.append( " <xpath>contentdata/longHair</xpath>" );
config.append( " </input>" );
config.append( " <input name=\"lastChecked\" type=\"date\">" );
config.append( " <display>Last Checked</display>" );
config.append( " <xpath>contentdata/lastChecked</xpath>" );
config.append( " </input>" );
config.append( " <input name=\"keywords\" type=\"keywords\">" );
config.append( " <display>Keywords</display>" );
config.append( " <xpath>contentdata/keywords</xpath>" );
config.append( " </input>" );
config.append( " </block>" );
config.append( " </form>" );
config.append( " <imports>" );
config.append( " <import mode=\"xml\" name=\"MyImport\" purge=\"archive\"" );
config.append( " base=\"/fisk/torsk/entry\" status=\"2\" sync=\"name\">" );
config.append( " <mapping dest=\"name\" src=\"@name\"/>" );
config.append( " <mapping dest=\"longHair\" src=\"@longHair\"/>" );
config.append( " <mapping dest=\"lastChecked\" src=\"@lastChecked\" format=\"EEE MMM d HH:mm:ss z yyyy\"/>" );
config.append( " <mapping dest=\"keywords\" src=\"keyword\" />" );
config.append( " </import>" );
config.append( " </imports>" );
config.append( " </config>" );
config.append( " <indexparameters>" );
config.append( " <index xpath=\"contentdata/name\"/>" );
config.append( " </indexparameters>" );
config.append( "</contenttype>" );
return XMLDocumentFactory.create( config.toString() ).getAsJDOMDocument();
}
}