/*
* 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.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.api.client.model.ImportContentsParams;
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.core.security.PortalSecurityHolder;
import com.enonic.cms.core.security.user.UserEntity;
import com.enonic.cms.itest.util.AssertTool;
import static org.junit.Assert.*;
public class InternalClientImpl_ImportContentCsvTest
extends AbstractInternalClientImpl_ImportContentTest
{
@Test
public void testStringBasedCSVImport()
throws Exception
{
final long count = 10L;
setupImport( getConfigForStringBasedCSVImport() );
doImport( getStringBasedCSVImportData( 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( "/myxml/@atr", xmlDoc, testAtr );
AssertTool.assertSingleXPathValueEquals( "/myxml/elem", xmlDoc, testElem );
AssertTool.assertSingleXPathValueEquals( "/myhtml/@atr", htmlDoc, testAtr );
AssertTool.assertSingleXPathValueEquals( "/myhtml/elem", htmlDoc, testElem );
}
@Test
public void testStringBasedCSVImport_with_assignment()
throws Exception
{
final long count = 10L;
setupImport( getConfigForStringBasedCSVImport_Draft() );
String data = getStringBasedCSVImportData( count, "Oslo" );
final UserEntity testUser = fixture.findUserByName( "testuser" );
final UserEntity runningUser = testUser;
PortalSecurityHolder.setImpersonatedUser( runningUser.getKey() );
final ImportContentsParams importParams = new ImportContentsParams();
importParams.categoryKey = fixture.findCategoryByName( "MyImportCategory" ).getKey().toInt();
importParams.importName = "MyImport";
importParams.data = data;
importParams.assignee = testUser.getUserStore().getName() + ":" + testUser.getName();
importParams.assignmentDescription = "import-test";
importParams.assignmentDueDate = Calendar.getInstance().getTime();
internalClient.importContents( importParams );
hibernateTemplate.clear();
final List<ContentKey> contentKeys =
contentDao.findContentKeysByCategory( fixture.findCategoryByName( "MyImportCategory" ).getKey() );
assertEquals( count, contentKeys.size() );
final ContentEntity content = contentDao.findByKey( contentKeys.get( 0 ) );
assertEquals( ContentStatus.DRAFT.getKey(), content.getMainVersion().getStatus().getKey() );
assertNotNull( content.getAssignee() );
assertNotNull( content.getAssigner() );
assertNotNull( content.getAssignmentDescription() );
assertNotNull( content.getAssignmentDueDate() );
}
@Test
public void testStringBasedCSVImportVersionCountCheck()
throws Exception
{
final long count = 10L;
setupImport( getConfigForStringBasedCSVImport() );
fixture.flushIndexTransaction();
doImport( getStringBasedCSVImportData( count, "Oslo" ), "testuser", "MyImport" );
fixture.flushIndexTransaction();
doImport( getStringBasedCSVImportData( count, null ), "testuser2", "MyImport2" );
fixture.flushIndexTransaction();
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( getStringBasedCSVImportData( count, "Majorstua" ), "testuser", "MyImport" );
fixture.flushIndexTransaction();
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 testStringBasedCSVImportWithPublishFromAndToFromImportData()
throws Exception
{
final long count = 10L;
setupImport( getConfigForStringBasedCSVImportWithPublishFromAndToFromImportData() );
doImport( getStringBasedCSVImportDataWithPublishFromAndToFromImportData( 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 testStringBasedCSVImportWithoutPublishFromAndTo()
throws Exception
{
final long count = 10L;
setupImport( getConfigForStringBasedCSVImport() );
doImport( getStringBasedCSVImportData( 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( "/myxml/@atr", xmlDoc, testAtr );
AssertTool.assertSingleXPathValueEquals( "/myxml/elem", xmlDoc, testElem );
AssertTool.assertSingleXPathValueEquals( "/myhtml/@atr", htmlDoc, testAtr );
AssertTool.assertSingleXPathValueEquals( "/myhtml/elem", htmlDoc, testElem );
}
@Test
public void testContentKeyBasedCSVImport()
throws Exception
{
final long count = 10L;
setupImport( getConfigForContentKeyBasedCSVImport() );
setupImageCategory();
final ContentKey key1 = setupImage();
final ContentKey key2 = setupImage();
doImport( getContentKeyBasedCSVImportData( 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 testCustomRelatedContentCSVImport()
throws Exception
{
final long count = 10L;
setupImport( getConfigForCustomRelatedContentCSVImport() );
setupRelatedContentCategory();
fixture.flushIndexTransaction();
final ContentKey key1 = setupRelatedContent( "A" );
final ContentKey key2 = setupRelatedContent( "B" );
final ContentKey key3 = setupRelatedContent( "C" );
fixture.flushIndexTransaction();
doImport( getRelatedContentCSVImportData( 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 testImageRelatedContentCSVImport()
throws Exception
{
final long count = 10L;
setupImport( getConfigForImageRelatedContentCSVImport() );
setupImageCategory();
fixture.flushIndexTransaction();
final ContentKey key1 = setupImage( "A" );
final ContentKey key2 = setupImage( "B" );
final ContentKey key3 = setupImage( "C" );
fixture.flushIndexTransaction();
doImport( getRelatedContentCSVImportData( 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 testMiscCSVImport()
throws Exception
{
final long count = 10L;
setupImport( getConfigForMiscCSVImport() );
doImport( getMiscCSVImportData( 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" );
}
private String getStringBasedCSVImportData( final long count, final String address )
{
StringBuilder builder = new StringBuilder();
builder.append( "name;address;age\r\n" );
for ( int i = 0; i < count; i++ )
{
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( ";" );
if ( address != null )
{
builder.append( address ).append( i + 1 ).append( ";" );
}
builder.append( i + 1 ).append( ";" );
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( ";" );
builder.append( getHTMLImportEntry( i + 1 ) ).append( ";" );
builder.append( getXMLImportEntry( i + 1 ) ).append( ";" );
builder.append( "\r\n" );
}
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( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" );
builder.append( "<myhtml atr=\"" + testStr + "\">" );
builder.append( "<elem>" + testStr + "</elem>" );
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( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" );
builder.append( "<myxml atr=\"" + testStr + "\">" );
builder.append( "<elem>" + testStr + "</elem>" );
builder.append( "</myxml>" );
return builder;
}
private String getStringBasedCSVImportDataWithPublishFromAndToFromImportData( final long count, final String publishFrom,
final String publishTo )
{
final StringBuilder builder = new StringBuilder();
builder.append( "name;address;age;from;to\r\n" );
for ( int i = 0; i < count; i++ )
{
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( ";" );
builder.append( "Oslo" ).append( i + 1 ).append( ";" );
builder.append( i + 1 ).append( ";" );
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( ";" );
builder.append( publishFrom ).append( ";" );
builder.append( publishTo ).append( "\r\n" );
}
return builder.toString();
}
private String getContentKeyBasedCSVImportData( final long count, final ContentKey imageContentKey, final ContentKey fileContentKey,
final ContentKey relatedContentKey1, final ContentKey relatedContentKey2 )
{
final StringBuilder builder = new StringBuilder();
builder.append( "name;picture;attachment;relCon\r\n" );
for ( int i = 0; i < count; i++ )
{
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( ";" );
builder.append( imageContentKey ).append( ";" );
builder.append( fileContentKey ).append( ";" );
builder.append( relatedContentKey1 ).append( ";" );
builder.append( relatedContentKey1 ).append( "-" );
builder.append( relatedContentKey2 ).append( "\r\n" );
}
return builder.toString();
}
private String getRelatedContentCSVImportData( final long count, final String filename1, final String filename2,
final String filename3 )
{
final StringBuilder builder = new StringBuilder();
builder.append( "name;relCon\r\n" );
for ( int i = 0; i < count; i++ )
{
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( ";" );
builder.append( filename1 ).append( "-" );
builder.append( filename2 ).append( "-" );
builder.append( filename3 ).append( "\r\n" );
}
return builder.toString();
}
private String getMiscCSVImportData( final long count )
throws Exception
{
final String dummyBinaryString = new String( new byte[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}, "UTF-8" );
final StringBuilder builder = new StringBuilder();
builder.append( "name;longHair;lastChecked;binary\r\n" );
for ( int i = 0; i < count; i++ )
{
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( ";" );
builder.append( i % 2 == 0 ? "true" : "false" ).append( ";" );
builder.append( "Tue Mar 10 09:04:48 CET 2009" ).append( ";" );
builder.append( "fisk-ost-torsk-hyse" ).append( ";" );
builder.append( dummyBinaryString ).append( "\r\n" );
}
return builder.toString();
}
private Document getConfigForStringBasedCSVImport()
{
return doGetConfigForStringBasedCSVImport( 2 );
}
private Document getConfigForStringBasedCSVImport_Draft()
{
return doGetConfigForStringBasedCSVImport( 0 );
}
private Document doGetConfigForStringBasedCSVImport( int status )
{
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=\"csv\" name=\"MyImport\" separator=\";\" " );
config.append( " skip=\"1\" status=\"" + status + "\" sync=\"name\">" );
config.append( " <mapping dest=\"name\" src=\"1\"/>" );
config.append( " <mapping dest=\"address\" src=\"2\"/>" );
config.append( " <mapping dest=\"age\" src=\"3\"/>" );
config.append( " <mapping dest=\"info\" src=\"4\"/>" );
config.append( " <mapping dest=\"htmlInfo\" src=\"5\"/>" );
config.append( " <mapping dest=\"xmlInfo\" src=\"6\"/>" );
config.append( " </import>" );
config.append( " <import mode=\"csv\" name=\"MyImport2\" separator=\";\" " );
config.append( " skip=\"1\" status=\"" + status + "\" sync=\"name\">" );
config.append( " <mapping dest=\"name\" src=\"1\"/>" );
config.append( " <mapping dest=\"age\" src=\"2\"/>" );
config.append( " <mapping dest=\"info\" src=\"3\"/>" );
config.append( " <mapping dest=\"htmlInfo\" src=\"4\"/>" );
config.append( " <mapping dest=\"xmlInfo\" src=\"5\"/>" );
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 getConfigForStringBasedCSVImportWithPublishFromAndToFromImportData()
{
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=\"csv\" name=\"MyImport\" purge=\"archive\" separator=\";\" " );
config.append( " skip=\"1\" status=\"2\" sync=\"name\">" );
config.append( " <mapping dest=\"name\" src=\"1\"/>" );
config.append( " <mapping dest=\"address\" src=\"2\"/>" );
config.append( " <mapping dest=\"age\" src=\"3\"/>" );
config.append( " <mapping dest=\"info\" src=\"4\"/>" );
config.append( " <mapping dest=\"@publishfrom\" src=\"5\" format=\"yyyy.MM.dd HH:mm:ss\"/>" );
config.append( " <mapping dest=\"@publishto\" src=\"6\" 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 getConfigForContentKeyBasedCSVImport()
{
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=\"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=\"csv\" name=\"MyImport\" purge=\"archive\" separator=\";\" " );
config.append( " skip=\"1\" status=\"2\" sync=\"name\">" );
config.append( " <mapping dest=\"name\" src=\"1\"/>" );
config.append( " <mapping dest=\"picture\" src=\"2\"/>" );
config.append( " <mapping dest=\"attachment\" src=\"3\"/>" );
config.append( " <mapping dest=\"relatedContent\" src=\"4\"/>" );
config.append( " <mapping dest=\"multipleRelatedContent\" src=\"5\" separator=\"-\"/>" );
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 getConfigForCustomRelatedContentCSVImport()
{
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=\"csv\" name=\"MyImport\" purge=\"archive\" separator=\";\" " );
config.append( " skip=\"1\" status=\"2\" sync=\"name\">" );
config.append( " <mapping dest=\"name\" src=\"1\"/>" );
config.append( " <mapping dest=\"relatedContent\" src=\"2\"" );
config.append( " separator=\"-\" 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 getConfigForImageRelatedContentCSVImport()
{
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=\"csv\" name=\"MyImport\" purge=\"archive\" separator=\";\" " );
config.append( " skip=\"1\" status=\"2\" sync=\"name\">" );
config.append( " <mapping dest=\"name\" src=\"1\"/>" );
config.append( " <mapping dest=\"relatedContent\" src=\"2\"" );
config.append( " separator=\"-\" 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 getConfigForMiscCSVImport()
{
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=\"csv\" name=\"MyImport\" purge=\"archive\" separator=\";\" " );
config.append( " skip=\"1\" status=\"2\" sync=\"name\">" );
config.append( " <mapping dest=\"name\" src=\"1\"/>" );
config.append( " <mapping dest=\"longHair\" src=\"2\"/>" );
config.append( " <mapping dest=\"lastChecked\" src=\"3\" format=\"EEE MMM d HH:mm:ss z yyyy\"/>" );
config.append( " <mapping dest=\"keywords\" src=\"4\" separator=\"-\"/>" );
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();
}
}