/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.cms.core.content.contentdata.support;
import java.io.IOException;
import java.util.Collection;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.joda.time.DateTime;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import com.enonic.cms.framework.util.JDOMUtil;
import com.enonic.cms.core.content.ContentKey;
import com.enonic.cms.core.content.contentdata.custom.CustomContentData;
import com.enonic.cms.core.content.contentdata.custom.DataEntry;
import com.enonic.cms.core.content.contentdata.custom.DataEntryType;
import com.enonic.cms.core.content.contentdata.custom.DateDataEntry;
import com.enonic.cms.core.content.contentdata.custom.contentkeybased.FileDataEntry;
import com.enonic.cms.core.content.contentdata.custom.contentkeybased.ImageDataEntry;
import com.enonic.cms.core.content.contentdata.custom.contentkeybased.RelatedContentDataEntry;
import com.enonic.cms.core.content.contentdata.custom.relationdataentrylistbased.RelatedContentsDataEntry;
import com.enonic.cms.core.content.contentdata.custom.stringbased.HtmlAreaDataEntry;
import com.enonic.cms.core.content.contentdata.custom.stringbased.SelectorDataEntry;
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.stringbased.UrlDataEntry;
import com.enonic.cms.core.content.contentdata.custom.support.CustomContentDataXmlParser;
import com.enonic.cms.core.content.contenttype.ContentHandlerName;
import com.enonic.cms.core.content.contenttype.ContentTypeConfig;
import com.enonic.cms.core.content.contenttype.ContentTypeConfigParser;
import com.enonic.cms.core.content.contenttype.CtyImportConfig;
import com.enonic.cms.core.content.contenttype.CtyImportMappingConfig;
import com.enonic.cms.core.content.contenttype.CtyImportModeConfig;
import com.enonic.cms.core.content.contenttype.CtyImportPurgeConfig;
import com.enonic.cms.core.content.contenttype.CtyImportStatusConfig;
import static org.junit.Assert.*;
public class CustomContentDataParserTest
{
private Element standardConfigEl;
private Element importConfigEl;
@Before
public void before()
throws IOException, JDOMException
{
StringBuffer standardConfigXml = new StringBuffer();
standardConfigXml.append( "<config name=\"MyContentType\" version=\"1.0\">" );
standardConfigXml.append( " <form>" );
standardConfigXml.append( " <title name=\"myTitle\"/>" );
standardConfigXml.append( " <block name=\"TestBlock1\">" );
standardConfigXml.append( " <input name=\"myTitle\" required=\"true\" type=\"text\">" );
standardConfigXml.append( " <display>My title</display>" );
standardConfigXml.append( " <xpath>contentdata/mytitle</xpath>" );
standardConfigXml.append( " </input>" );
standardConfigXml.append( " <input name=\"myTextarea\" type=\"textarea\">" );
standardConfigXml.append( " <display>My textarea</display>" );
standardConfigXml.append( " <xpath>contentdata/mytextarea</xpath>" );
standardConfigXml.append( " </input>" );
standardConfigXml.append( " <input name=\"myXml\" type=\"xml\">" );
standardConfigXml.append( " <display>My xml</display>" );
standardConfigXml.append( " <xpath>contentdata/myxml</xpath>" );
standardConfigXml.append( " </input>" );
standardConfigXml.append( " <input name=\"myHtmlareaDefault\" type=\"htmlarea\">" );
standardConfigXml.append( " <display>My htmlarea default</display>" );
standardConfigXml.append( " <xpath>contentdata/myhtmlareadefault</xpath>" );
standardConfigXml.append( " </input>" );
standardConfigXml.append( " <input name=\"myHtmlareaXhtml\" type=\"htmlarea\" mode=\"xhtml\">" );
standardConfigXml.append( " <display>My htmlarea xhtml</display>" );
standardConfigXml.append( " <xpath>contentdata/myhtmlareaxhtml</xpath>" );
standardConfigXml.append( " </input>" );
standardConfigXml.append( " <input name=\"myHtmlareaCdata\" type=\"htmlarea\" mode=\"cdata\">" );
standardConfigXml.append( " <display>My htmlarea cdata</display>" );
standardConfigXml.append( " <xpath>contentdata/myhtmlareacdata</xpath>" );
standardConfigXml.append( " </input>" );
standardConfigXml.append( " <input name=\"myUrl\" type=\"url\">" );
standardConfigXml.append( " <display>My url</display>" );
standardConfigXml.append( " <xpath>contentdata/myurl</xpath>" );
standardConfigXml.append( " </input>" );
standardConfigXml.append( " <input name=\"myDate\" type=\"date\">" );
standardConfigXml.append( " <display>My date</display>" );
standardConfigXml.append( " <xpath>contentdata/mydate</xpath>" );
standardConfigXml.append( " </input>" );
standardConfigXml.append( " <input name=\"myCheckbox\" type=\"checkbox\">" );
standardConfigXml.append( " <display>My checkbox</display>" );
standardConfigXml.append( " <xpath>contentdata/mycheckbox</xpath>" );
standardConfigXml.append( " </input>" );
standardConfigXml.append( " <input name=\"myRadiobutton\" type=\"radiobutton\">" );
standardConfigXml.append( " <display>My radio button</display>" );
standardConfigXml.append( " <xpath>contentdata/myradiobutton</xpath>" );
standardConfigXml.append( " <options>" );
standardConfigXml.append( " <option value=\"5\" checked=\"true\">Fem</option>" );
standardConfigXml.append( " <option value=\"10\">Ti</option>" );
standardConfigXml.append( " </options>" );
standardConfigXml.append( " </input>" );
standardConfigXml.append( " <input name=\"myDropdown\" type=\"dropdown\">" );
standardConfigXml.append( " <display>My dropdown</display>" );
standardConfigXml.append( " <xpath>contentdata/mydropdown</xpath>" );
standardConfigXml.append( " <options>" );
standardConfigXml.append( " <option value=\"1\" checked=\"true\">Toyota</option>" );
standardConfigXml.append( " <option value=\"2\">Opel</option>" );
standardConfigXml.append( " <option value=\"3\">Skoda</option>" );
standardConfigXml.append( " </options>" );
standardConfigXml.append( " </input>" );
standardConfigXml.append( " <input name=\"myRelatedSingle\" type=\"relatedcontent\" multiple=\"false\">" );
standardConfigXml.append( " <display>My related single</display>" );
standardConfigXml.append( " <xpath>contentdata/myrelatedsingle</xpath>" );
standardConfigXml.append( " <contenttype name=\"MyContentType\"/>" );
standardConfigXml.append( " </input>" );
standardConfigXml.append( " <input name=\"myRelatedMultiple\" type=\"relatedcontent\" multiple=\"true\">" );
standardConfigXml.append( " <display>My related multipe</display>" );
standardConfigXml.append( " <xpath>contentdata/myrelatedmultiple</xpath>" );
standardConfigXml.append( " </input>" );
standardConfigXml.append( " <input name=\"myFile\" type=\"file\">" );
standardConfigXml.append( " <display>My file</display>" );
standardConfigXml.append( " <xpath>contentdata/myfile</xpath>" );
standardConfigXml.append( " </input>" );
standardConfigXml.append( " <input name=\"myImage\" type=\"image\">" );
standardConfigXml.append( " <display>My image</display>" );
standardConfigXml.append( " <xpath>contentdata/myimage</xpath>" );
standardConfigXml.append( " </input>" );
standardConfigXml.append( " <input name=\"myBinaryfile\" type=\"uploadfile\">" );
standardConfigXml.append( " <display>My binaryfile</display>" );
standardConfigXml.append( " <xpath>contentdata/mybinaryfile</xpath>" );
standardConfigXml.append( " </input>" );
standardConfigXml.append( " </block>" );
standardConfigXml.append( " </form>" );
standardConfigXml.append( "</config>" );
standardConfigEl = JDOMUtil.parseDocument( standardConfigXml.toString() ).getRootElement();
StringBuffer importConfigXml = new StringBuffer();
importConfigXml.append( "<config name=\"MyContentType\" version=\"1.0\">" );
importConfigXml.append( " <form>" );
importConfigXml.append( " <title name=\"myName\"/>" );
importConfigXml.append( " <block name=\"TestBlock1\">" );
importConfigXml.append( " <input name=\"myName\" required=\"true\" type=\"text\">" );
importConfigXml.append( " <display>My name</display>" );
importConfigXml.append( " <xpath>contentdata/myname</xpath>" );
importConfigXml.append( " </input>" );
importConfigXml.append( " <input name=\"myCount\" required=\"true\" type=\"text\">" );
importConfigXml.append( " <display>My count</display>" );
importConfigXml.append( " <xpath>contentdata/mycount</xpath>" );
importConfigXml.append( " </input>" );
importConfigXml.append( " <input name=\"myDescription\" required=\"true\" type=\"text\">" );
importConfigXml.append( " <display>My description</display>" );
importConfigXml.append( " <xpath>contentdata/mydescription</xpath>" );
importConfigXml.append( " </input>" );
importConfigXml.append( " <input name=\"myFile\" type=\"file\">" );
importConfigXml.append( " <display>My file</display>" );
importConfigXml.append( " <xpath>contentdata/myfile</xpath>" );
importConfigXml.append( " </input>" );
importConfigXml.append( " <input name=\"myImage\" type=\"image\">" );
importConfigXml.append( " <display>My image</display>" );
importConfigXml.append( " <xpath>contentdata/myimage</xpath>" );
importConfigXml.append( " </input>" );
importConfigXml.append( " </block>" );
importConfigXml.append( " </form>" );
importConfigXml.append( " <imports>" );
importConfigXml.append( " <import name=\"myXMLImport\" mode=\"xml\" base=\"/rows/row\" sync=\"myName\"" );
importConfigXml.append( " purge=\"archive\" status=\"2\" >" );
importConfigXml.append( " <mapping dest=\"myName\" src=\"name\"/>" );
importConfigXml.append( " <mapping dest=\"myCount\" src=\"count\"/>" );
importConfigXml.append( " <mapping dest=\"myDescription\" src=\"descr\"/>" );
importConfigXml.append( " </import>" );
importConfigXml.append( " <import name=\"myCSVImport\" mode=\"csv\" separator=\";\" skip=\"0\" sync=\"myName\"" );
importConfigXml.append( " purge=\"archive\" status=\"2\" >" );
importConfigXml.append( " <mapping dest=\"myName\" src=\"name\"/>" );
importConfigXml.append( " <mapping dest=\"myCount\" src=\"count\"/>" );
importConfigXml.append( " <mapping dest=\"myDescription\" src=\"descr\"/>" );
importConfigXml.append( " </import>" );
importConfigXml.append( " </imports>" );
importConfigXml.append( "</config>" );
importConfigEl = JDOMUtil.parseDocument( importConfigXml.toString() ).getRootElement();
}
@Test
public void testParseXmlImport()
throws IOException, JDOMException
{
ContentTypeConfig config = ContentTypeConfigParser.parse( ContentHandlerName.CUSTOM, importConfigEl );
String name = "myXMLImport";
CtyImportConfig importConfig = config.getImport( name );
assertNotNull( importConfig );
assertEquals( name, importConfig.getName() );
assertTrue( CtyImportModeConfig.XML == importConfig.getMode() );
assertEquals( "/rows/row", importConfig.getBase() );
assertNull( importConfig.getSkip() );
assertNull( importConfig.getSeparator() );
assertEquals( "myName", importConfig.getSync() );
assertTrue( CtyImportPurgeConfig.ARCHIVE == importConfig.getPurge() );
assertTrue( CtyImportStatusConfig.APPROVED == importConfig.getStatus() );
CtyImportMappingConfig mapping;
assertTrue( 3 == importConfig.getMappings().size() );
mapping = (CtyImportMappingConfig) importConfig.getMappings().toArray()[0];
assertNotNull( mapping );
assertEquals( "myName", mapping.getDestination() );
assertEquals( "name", mapping.getSource() );
mapping = (CtyImportMappingConfig) importConfig.getMappings().toArray()[1];
assertNotNull( mapping );
assertEquals( "myCount", mapping.getDestination() );
assertEquals( "count", mapping.getSource() );
mapping = (CtyImportMappingConfig) importConfig.getMappings().toArray()[2];
assertNotNull( mapping );
assertEquals( "myDescription", mapping.getDestination() );
assertEquals( "descr", mapping.getSource() );
}
@Test
public void testParseCvsImport()
throws IOException, JDOMException
{
ContentTypeConfig config = ContentTypeConfigParser.parse( ContentHandlerName.CUSTOM, importConfigEl );
String name = "myCSVImport";
CtyImportConfig importConfig = config.getImport( name );
assertNotNull( importConfig );
assertEquals( name, importConfig.getName() );
assertTrue( CtyImportModeConfig.CSV == importConfig.getMode() );
assertNull( importConfig.getBase() );
assertTrue( 0 == importConfig.getSkip() );
assertEquals( ";", importConfig.getSeparator() );
assertEquals( "myName", importConfig.getSync() );
assertTrue( CtyImportPurgeConfig.ARCHIVE == importConfig.getPurge() );
assertTrue( CtyImportStatusConfig.APPROVED == importConfig.getStatus() );
CtyImportMappingConfig mapping;
assertTrue( 3 == importConfig.getMappings().size() );
mapping = (CtyImportMappingConfig) importConfig.getMappings().toArray()[0];
assertNotNull( mapping );
assertEquals( "myName", mapping.getDestination() );
assertEquals( "name", mapping.getSource() );
mapping = (CtyImportMappingConfig) importConfig.getMappings().toArray()[1];
assertNotNull( mapping );
assertEquals( "myCount", mapping.getDestination() );
assertEquals( "count", mapping.getSource() );
mapping = (CtyImportMappingConfig) importConfig.getMappings().toArray()[2];
assertNotNull( mapping );
assertEquals( "myDescription", mapping.getDestination() );
assertEquals( "descr", mapping.getSource() );
}
@Test
public void testParseTextEntry()
throws IOException, JDOMException
{
StringBuffer contentDataXml = new StringBuffer();
contentDataXml.append( "<contentdata>" );
contentDataXml.append( " <mytitle>Title 123</mytitle>" );
contentDataXml.append( "</contentdata>" );
Document contentDataDoc = JDOMUtil.parseDocument( contentDataXml.toString() );
ContentTypeConfig config = ContentTypeConfigParser.parse( ContentHandlerName.CUSTOM, standardConfigEl );
CustomContentData contentData = CustomContentDataXmlParser.parse( contentDataDoc, config );
TextDataEntry dataEntry = (TextDataEntry) contentData.getEntry( "myTitle" );
assertNotNull( dataEntry );
Assert.assertEquals( DataEntryType.TEXT, dataEntry.getType() );
assertEquals( "Title 123", dataEntry.getValue() );
}
@Test
public void testParseTitleEntry()
throws IOException, JDOMException
{
StringBuffer contentDataXml = new StringBuffer();
contentDataXml.append( "<contentdata>" );
contentDataXml.append( " <mytitle>Title 123</mytitle>" );
contentDataXml.append( "</contentdata>" );
Document contentDataDoc = JDOMUtil.parseDocument( contentDataXml.toString() );
ContentTypeConfig config = ContentTypeConfigParser.parse( ContentHandlerName.CUSTOM, standardConfigEl );
CustomContentData contentData = CustomContentDataXmlParser.parse( contentDataDoc, config );
TextDataEntry dataEntry = (TextDataEntry) contentData.getTitleDataEntry();
assertNotNull( dataEntry );
assertEquals( DataEntryType.TEXT, dataEntry.getType() );
assertEquals( "Title 123", dataEntry.getValue() );
}
@Test
public void testParseSingleRelatedContentEntry()
throws IOException, JDOMException
{
StringBuffer contentDataXml = new StringBuffer();
contentDataXml.append( "<contentdata>" );
contentDataXml.append( " <mytitle>Title 123</mytitle>" );
contentDataXml.append( " <myrelatedsingle key=\"113\"/>" );
contentDataXml.append( "</contentdata>" );
Document contentDataDoc = JDOMUtil.parseDocument( contentDataXml.toString() );
ContentTypeConfig config = ContentTypeConfigParser.parse( ContentHandlerName.CUSTOM, standardConfigEl );
CustomContentData contentData = CustomContentDataXmlParser.parse( contentDataDoc, config );
RelatedContentDataEntry dataEntry = (RelatedContentDataEntry) contentData.getEntry( "myRelatedSingle" );
assertNotNull( dataEntry );
assertEquals( DataEntryType.RELATED_CONTENT, dataEntry.getType() );
assertEquals( 113, dataEntry.getContentKey().toInt() );
}
@Test
public void testParseSingleRelatedContentEntry2()
throws IOException, JDOMException
{
StringBuffer contentDataXml = new StringBuffer();
contentDataXml.append( "<contentdata>" );
contentDataXml.append( " <mytitle>Title 123</mytitle>" );
contentDataXml.append( " <myrelatedsingle>" );
contentDataXml.append( " <content key=\"113\"/>" );
contentDataXml.append( " </myrelatedsingle>" );
contentDataXml.append( "</contentdata>" );
Document contentDataDoc = JDOMUtil.parseDocument( contentDataXml.toString() );
ContentTypeConfig config = ContentTypeConfigParser.parse( ContentHandlerName.CUSTOM, standardConfigEl );
CustomContentData contentData = CustomContentDataXmlParser.parse( contentDataDoc, config );
RelatedContentDataEntry dataEntry = (RelatedContentDataEntry) contentData.getEntry( "myRelatedSingle" );
assertNotNull( dataEntry );
assertEquals( DataEntryType.RELATED_CONTENT, dataEntry.getType() );
assertEquals( 113, dataEntry.getContentKey().toInt() );
}
@Test
public void testParseMultipleRelatedContentEntry()
throws IOException, JDOMException
{
StringBuffer contentDataXml = new StringBuffer();
contentDataXml.append( "<contentdata>" );
contentDataXml.append( " <mytitle>Title 123</mytitle>" );
contentDataXml.append( " <myrelatedmultiple>" );
contentDataXml.append( " <content key=\"101\"/>" );
contentDataXml.append( " <content key=\"102\"/>" );
contentDataXml.append( " <content key=\"103\"/>" );
contentDataXml.append( " </myrelatedmultiple>" );
contentDataXml.append( "</contentdata>" );
Document contentDataDoc = JDOMUtil.parseDocument( contentDataXml.toString() );
ContentTypeConfig config = ContentTypeConfigParser.parse( ContentHandlerName.CUSTOM, standardConfigEl );
CustomContentData contentData = CustomContentDataXmlParser.parse( contentDataDoc, config );
RelatedContentsDataEntry dataEntry = (RelatedContentsDataEntry) contentData.getEntry( "myRelatedMultiple" );
assertNotNull( dataEntry );
assertEquals( DataEntryType.RELATED_CONTENTS, dataEntry.getType() );
Collection<ContentKey> relatedContentKeysCollection = dataEntry.getRelatedContentKeys();
ContentKey[] relatedContentKeys = relatedContentKeysCollection.toArray( new ContentKey[relatedContentKeysCollection.size()] );
assertArrayEquals( new ContentKey[]{new ContentKey( 101 ), new ContentKey( 102 ), new ContentKey( 103 )}, relatedContentKeys );
}
@Test
public void testParseTextAreaEntry()
throws IOException, JDOMException
{
StringBuffer contentDataXml = new StringBuffer();
contentDataXml.append( "<contentdata>" );
contentDataXml.append( " <mytitle>Title 123</mytitle>" );
contentDataXml.append( " <mytextarea>Text area 123</mytextarea>" );
contentDataXml.append( "</contentdata>" );
Document contentDataDoc = JDOMUtil.parseDocument( contentDataXml.toString() );
ContentTypeConfig config = ContentTypeConfigParser.parse( ContentHandlerName.CUSTOM, standardConfigEl );
CustomContentData contentData = CustomContentDataXmlParser.parse( contentDataDoc, config );
TextAreaDataEntry dataEntry = (TextAreaDataEntry) contentData.getEntry( "myTextarea" );
assertNotNull( dataEntry );
assertEquals( DataEntryType.TEXT_AREA, dataEntry.getType() );
assertEquals( "Text area 123", dataEntry.getValue() );
}
@Test
public void testParseDefaultHtmlAreaEntry()
throws IOException, JDOMException
{
StringBuffer contentDataXml = new StringBuffer();
contentDataXml.append( "<contentdata>" );
contentDataXml.append( " <mytitle>Title 123</mytitle>" );
contentDataXml.append( " <myhtmlareadefault>Htmlarea 123</myhtmlareadefault>" );
contentDataXml.append( "</contentdata>" );
Document contentDataDoc = JDOMUtil.parseDocument( contentDataXml.toString() );
ContentTypeConfig config = ContentTypeConfigParser.parse( ContentHandlerName.CUSTOM, standardConfigEl );
CustomContentData contentData = CustomContentDataXmlParser.parse( contentDataDoc, config );
HtmlAreaDataEntry dataEntry = (HtmlAreaDataEntry) contentData.getEntry( "myHtmlareaDefault" );
assertNotNull( dataEntry );
assertEquals( DataEntryType.HTML_AREA, dataEntry.getType() );
assertEquals( "Htmlarea 123", dataEntry.getValue() );
}
public void testParseXhtmlHtmlAreaEntry()
throws IOException, JDOMException
{
StringBuffer contentDataXml = new StringBuffer();
contentDataXml.append( "<contentdata>" );
contentDataXml.append( " <mytitle>Title 123</mytitle>" );
contentDataXml.append( " <myhtmlareaxhtml>Htmlarea <br/>123</myhtmlareaxhtml>" );
contentDataXml.append( "</contentdata>" );
Document contentDataDoc = JDOMUtil.parseDocument( contentDataXml.toString() );
ContentTypeConfig config = ContentTypeConfigParser.parse( ContentHandlerName.CUSTOM, standardConfigEl );
CustomContentData contentData = CustomContentDataXmlParser.parse( contentDataDoc, config );
HtmlAreaDataEntry dataEntry = (HtmlAreaDataEntry) contentData.getEntry( "myHtmlareaXhtml" );
assertNotNull( dataEntry );
assertEquals( DataEntryType.HTML_AREA, dataEntry.getType() );
assertEquals( "Htmlarea <br/>123", dataEntry.getValue() );
}
public void testParseCdataHtmlAreaEntry()
throws IOException, JDOMException
{
StringBuffer contentDataXml = new StringBuffer();
contentDataXml.append( "<contentdata>" );
contentDataXml.append( " <mytitle>Title 123</mytitle>" );
contentDataXml.append( " <myhtmlareacdata>Htmlarea <br>123</myhtmlareacdata>" );
contentDataXml.append( "</contentdata>" );
Document contentDataDoc = JDOMUtil.parseDocument( contentDataXml.toString() );
ContentTypeConfig config = ContentTypeConfigParser.parse( ContentHandlerName.CUSTOM, standardConfigEl );
CustomContentData contentData = CustomContentDataXmlParser.parse( contentDataDoc, config );
HtmlAreaDataEntry dataEntry = (HtmlAreaDataEntry) contentData.getEntry( "myHtmlareaCdata" );
assertNotNull( dataEntry );
assertEquals( DataEntryType.HTML_AREA, dataEntry.getType() );
assertEquals( "Htmlarea <br>123", dataEntry.getValue() );
}
@Test
public void testParseDateEntry()
throws IOException, JDOMException
{
StringBuffer contentDataXml = new StringBuffer();
contentDataXml.append( "<contentdata>" );
contentDataXml.append( " <mytitle>Title 123</mytitle>" );
contentDataXml.append( " <mydate>2008-02-01</mydate>" );
contentDataXml.append( "</contentdata>" );
Document contentDataDoc = JDOMUtil.parseDocument( contentDataXml.toString() );
ContentTypeConfig config = ContentTypeConfigParser.parse( ContentHandlerName.CUSTOM, standardConfigEl );
CustomContentData contentData = CustomContentDataXmlParser.parse( contentDataDoc, config );
DateDataEntry dataEntry = (DateDataEntry) contentData.getEntry( "myDate" );
assertNotNull( dataEntry );
assertEquals( DataEntryType.DATE, dataEntry.getType() );
assertEquals( new DateTime( "2008-02-01" ).toDate().getTime(), dataEntry.getValue().getTime() );
}
@Test
public void testParseUrlEntry()
throws IOException, JDOMException
{
StringBuffer contentDataXml = new StringBuffer();
contentDataXml.append( "<contentdata>" );
contentDataXml.append( " <mytitle>Title 123</mytitle>" );
contentDataXml.append( " <myurl>http://www.drummingafrica.co.za</myurl>" );
contentDataXml.append( "</contentdata>" );
Document contentDataDoc = JDOMUtil.parseDocument( contentDataXml.toString() );
ContentTypeConfig config = ContentTypeConfigParser.parse( ContentHandlerName.CUSTOM, standardConfigEl );
CustomContentData contentData = CustomContentDataXmlParser.parse( contentDataDoc, config );
UrlDataEntry dataEntry = (UrlDataEntry) contentData.getEntry( "myUrl" );
assertNotNull( dataEntry );
assertEquals( DataEntryType.URL, dataEntry.getType() );
assertEquals( "http://www.drummingafrica.co.za", dataEntry.getValue() );
}
@Test
public void testParseRadiobuttonEntry()
throws IOException, JDOMException
{
StringBuffer contentDataXml = new StringBuffer();
contentDataXml.append( "<contentdata>" );
contentDataXml.append( " <mytitle>Title 123</mytitle>" );
contentDataXml.append( " <myradiobutton>5</myradiobutton>" );
contentDataXml.append( "</contentdata>" );
Document contentDataDoc = JDOMUtil.parseDocument( contentDataXml.toString() );
ContentTypeConfig config = ContentTypeConfigParser.parse( ContentHandlerName.CUSTOM, standardConfigEl );
CustomContentData contentData = CustomContentDataXmlParser.parse( contentDataDoc, config );
SelectorDataEntry dataEntry = (SelectorDataEntry) contentData.getEntry( "myRadiobutton" );
assertNotNull( dataEntry );
assertEquals( DataEntryType.SELECTOR, dataEntry.getType() );
assertEquals( "5", dataEntry.getValue() );
}
@Test
public void testParseDropdownEntry()
throws IOException, JDOMException
{
StringBuffer contentDataXml = new StringBuffer();
contentDataXml.append( "<contentdata>" );
contentDataXml.append( " <mytitle>Title 123</mytitle>" );
contentDataXml.append( " <mydropdown>2</mydropdown>" );
contentDataXml.append( "</contentdata>" );
Document contentDataDoc = JDOMUtil.parseDocument( contentDataXml.toString() );
ContentTypeConfig config = ContentTypeConfigParser.parse( ContentHandlerName.CUSTOM, standardConfigEl );
CustomContentData contentData = CustomContentDataXmlParser.parse( contentDataDoc, config );
SelectorDataEntry dataEntry = (SelectorDataEntry) contentData.getEntry( "myDropdown" );
assertNotNull( dataEntry );
assertEquals( DataEntryType.SELECTOR, dataEntry.getType() );
assertEquals( "2", dataEntry.getValue() );
}
@Test
public void testParseFileEntry()
throws IOException, JDOMException
{
StringBuffer contentDataXml = new StringBuffer();
contentDataXml.append( "<contentdata>" );
contentDataXml.append( " <mytitle>Title 123</mytitle>" );
contentDataXml.append( " <myfile><file key=\"229\"/></myfile>" );
contentDataXml.append( "</contentdata>" );
Document contentDataDoc = JDOMUtil.parseDocument( contentDataXml.toString() );
ContentTypeConfig config = ContentTypeConfigParser.parse( ContentHandlerName.CUSTOM, standardConfigEl );
CustomContentData contentData = CustomContentDataXmlParser.parse( contentDataDoc, config );
FileDataEntry dataEntry = (FileDataEntry) contentData.getEntry( "myFile" );
assertNotNull( dataEntry );
assertEquals( DataEntryType.FILE, dataEntry.getType() );
assertEquals( 229, dataEntry.getContentKey().toInt() );
}
@Test
public void testParseImageEntry()
throws IOException, JDOMException
{
StringBuffer contentDataXml = new StringBuffer();
contentDataXml.append( "<contentdata>" );
contentDataXml.append( " <mytitle>Title 123</mytitle>" );
contentDataXml.append( " <myimage key=\"254\"></myimage>" );
contentDataXml.append( "</contentdata>" );
Document contentDataDoc = JDOMUtil.parseDocument( contentDataXml.toString() );
ContentTypeConfig config = ContentTypeConfigParser.parse( ContentHandlerName.CUSTOM, standardConfigEl );
CustomContentData contentData = CustomContentDataXmlParser.parse( contentDataDoc, config );
ImageDataEntry dataEntry = (ImageDataEntry) contentData.getEntry( "myImage" );
assertNotNull( dataEntry );
assertEquals( DataEntryType.IMAGE, dataEntry.getType() );
assertEquals( 254, dataEntry.getContentKey().toInt() );
}
@Test
public void testParseSubBlocksNotSupported()
throws IOException, JDOMException
{
StringBuffer standardConfigXml = new StringBuffer();
standardConfigXml.append( "<config name=\"MyContentType\" version=\"1.0\">" );
standardConfigXml.append( " <form>" );
standardConfigXml.append( " <title name=\"myTitle\"/>" );
standardConfigXml.append( " <block name=\"TestBlock1\">" );
standardConfigXml.append( " <input name=\"myTitle\" required=\"true\" type=\"text\">" );
standardConfigXml.append( " <display>My title</display>" );
standardConfigXml.append( " <xpath>contentdata/mytitle</xpath>" );
standardConfigXml.append( " </input>" );
standardConfigXml.append( " <block name=\"innerBlock\">" );
standardConfigXml.append( " <input name=\"myTextarea\" type=\"textarea\">" );
standardConfigXml.append( " <display>My textarea</display>" );
standardConfigXml.append( " <xpath>contentdata/mytextarea</xpath>" );
standardConfigXml.append( " </input>" );
standardConfigXml.append( " </block>" );
standardConfigXml.append( " </block>" );
standardConfigXml.append( " </form>" );
standardConfigXml.append( "</config>" );
Element configEl = JDOMUtil.parseDocument( standardConfigXml.toString() ).getRootElement();
StringBuffer contentDataXml = new StringBuffer();
contentDataXml.append( "<contentdata>" );
contentDataXml.append( " <mytitle>Title 123</mytitle>" );
contentDataXml.append( " <mytextarea>My content</mytextarea>" );
contentDataXml.append( "</contentdata>" );
Document contentDataDoc = JDOMUtil.parseDocument( contentDataXml.toString() );
ContentTypeConfig config = ContentTypeConfigParser.parse( ContentHandlerName.CUSTOM, configEl );
CustomContentData contentData = CustomContentDataXmlParser.parse( contentDataDoc, config );
TextAreaDataEntry dataEntry = (TextAreaDataEntry) contentData.getEntry( "myTextarea" );
assertNull( dataEntry );
}
@Test
public void testParseMultipleBlocksSupported()
throws IOException, JDOMException
{
StringBuffer standardConfigXml = new StringBuffer();
standardConfigXml.append( "<config name=\"MyContentType\" version=\"1.0\">" );
standardConfigXml.append( " <form>" );
standardConfigXml.append( " <title name=\"myTitle\"/>" );
standardConfigXml.append( " <block name=\"TestBlock1\">" );
standardConfigXml.append( " <input name=\"myTitle\" required=\"true\" type=\"text\">" );
standardConfigXml.append( " <display>My title</display>" );
standardConfigXml.append( " <xpath>contentdata/mytitle</xpath>" );
standardConfigXml.append( " </input>" );
standardConfigXml.append( " </block>" );
standardConfigXml.append( " <block name=\"innerBlock\">" );
standardConfigXml.append( " <input name=\"myTextarea\" type=\"textarea\">" );
standardConfigXml.append( " <display>My textarea</display>" );
standardConfigXml.append( " <xpath>contentdata/mytextarea</xpath>" );
standardConfigXml.append( " </input>" );
standardConfigXml.append( " </block>" );
standardConfigXml.append( " </form>" );
standardConfigXml.append( "</config>" );
Element configEl = JDOMUtil.parseDocument( standardConfigXml.toString() ).getRootElement();
StringBuffer contentDataXml = new StringBuffer();
contentDataXml.append( "<contentdata>" );
contentDataXml.append( " <mytitle>Title 123</mytitle>" );
contentDataXml.append( " <mytextarea>My content</mytextarea>" );
contentDataXml.append( "</contentdata>" );
Document contentDataDoc = JDOMUtil.parseDocument( contentDataXml.toString() );
ContentTypeConfig config = ContentTypeConfigParser.parse( ContentHandlerName.CUSTOM, configEl );
CustomContentData contentData = CustomContentDataXmlParser.parse( contentDataDoc, config );
TextAreaDataEntry dataEntry = (TextAreaDataEntry) contentData.getEntry( "myTextarea" );
assertNotNull( dataEntry );
assertEquals( DataEntryType.TEXT_AREA, dataEntry.getType() );
assertEquals( "My content", dataEntry.getValue() );
}
@Test
public void testParseGroupSupported()
throws IOException, JDOMException
{
StringBuffer configXml = new StringBuffer();
configXml.append( "<config name=\"MyContentType\" version=\"1.0\">" );
configXml.append( " <form>" );
configXml.append( " <title name=\"myTitle\"/>" );
configXml.append( " <block name=\"TestBlock1\">" );
configXml.append( " <input name=\"myTitle\" required=\"true\" type=\"text\">" );
configXml.append( " <display>My main title</display>" );
configXml.append( " <xpath>contentdata/mytitle</xpath>" );
configXml.append( " </input>" );
configXml.append( " </block>" );
configXml.append( " <block name=\"innerBlock\" group=\"contentdata/inner\">" );
configXml.append( " <input name=\"myInnerTitle\" type=\"text\">" );
configXml.append( " <display>My inner text</display>" );
configXml.append( " <xpath>mytitle</xpath>" );
configXml.append( " </input>" );
configXml.append( " <input name=\"myInnerTextarea\" type=\"textarea\">" );
configXml.append( " <display>My inner textarea</display>" );
configXml.append( " <xpath>mytextarea</xpath>" );
configXml.append( " </input>" );
configXml.append( " <input name=\"myInnerFile\" type=\"file\">" );
configXml.append( " <display>My inner file</display>" );
configXml.append( " <xpath>eveninner/myfile</xpath>" );
configXml.append( " </input>" );
configXml.append( " </block>" );
configXml.append( " </form>" );
configXml.append( "</config>" );
Element configEl = JDOMUtil.parseDocument( configXml.toString() ).getRootElement();
StringBuffer contentDataXml = new StringBuffer();
contentDataXml.append( "<contentdata>" );
contentDataXml.append( " <mytitle>Main title</mytitle>" );
contentDataXml.append( " <inner>" );
contentDataXml.append( " <mytitle>Inner title</mytitle>" );
contentDataXml.append( " <mytextarea>Text in inner area</mytextarea>" );
contentDataXml.append( " <eveninner><myfile><file key=\"123\"/></myfile></eveninner>" );
contentDataXml.append( " </inner>" );
contentDataXml.append( "</contentdata>" );
Document contentDataDoc = JDOMUtil.parseDocument( contentDataXml.toString() );
ContentTypeConfig config = ContentTypeConfigParser.parse( ContentHandlerName.CUSTOM, configEl );
CustomContentData contentData = CustomContentDataXmlParser.parse( contentDataDoc, config );
assertTextDataEntry( "Main title", "myTitle", contentData );
assertTextDataEntry( "Inner title", "myInnerTitle", contentData );
assertTextAreaDataEntry( "Text in inner area", "myInnerTextarea", contentData );
assertFileDataEntry( new ContentKey( 123 ), "myInnerFile", contentData );
}
private void assertTextDataEntry( String expectedValue, String entryName, CustomContentData contentData )
{
DataEntry entry = contentData.getEntry( entryName );
assertNotNull( entryName + " not found", entry );
assertEquals( entryName + " has unexpected type", DataEntryType.TEXT, entry.getType() );
assertEquals( entryName + " has unexpected value", expectedValue, ( (TextDataEntry) entry ).getValue() );
}
private void assertTextAreaDataEntry( String expectedValue, String entryName, CustomContentData contentData )
{
DataEntry entry = contentData.getEntry( entryName );
assertNotNull( entry );
assertEquals( DataEntryType.TEXT_AREA, entry.getType() );
assertEquals( expectedValue, ( (TextAreaDataEntry) entry ).getValue() );
}
private void assertFileDataEntry( ContentKey contentKey, String entryName, CustomContentData contentData )
{
DataEntry entry = contentData.getEntry( entryName );
assertNotNull( entryName, entry );
assertEquals( entryName, DataEntryType.FILE, entry.getType() );
assertEquals( entryName, contentKey, ( (FileDataEntry) entry ).getContentKey() );
}
}