package com.liferay.ide.portal.core.tests;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import com.liferay.ide.portal.core.structures.model.DynamicElement;
import com.liferay.ide.portal.core.structures.model.DynamicElementMetadata;
import com.liferay.ide.portal.core.structures.model.Entry;
import com.liferay.ide.portal.core.structures.model.Root;
import com.liferay.ide.portal.core.structures.model.Structure;
import java.io.InputStream;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.sapphire.Element;
import org.eclipse.sapphire.ElementList;
import org.eclipse.sapphire.ElementType;
import org.eclipse.sapphire.modeling.xml.RootXmlResource;
import org.eclipse.sapphire.modeling.xml.XmlResourceStore;
import org.junit.After;
import org.junit.Test;
/**
* @author Gregory Amerson
*/
public class StructuresTests extends PortalCoreTests
{
static final IPath DDM_STRUCTURE_BASIC_DOCUMENT = new Path( "structures/ddm_structure_basic_document.xml" );
static final IPath DOCUMENT_LIBRARY_STRUCTURES = new Path( "structures/document-library-structures.xml" );
static final IPath DYNAMIC_DATA_MAPPING_STRUCTURES = new Path(
"structures/dynamic-data-mapping-structures.xml" );
static final IPath TEST_DDM_STRUCTURE_ALL_FIELDS =
new Path( "structures/test-ddm-structure-all-fields.xml" );
static final IPath TEST_JOURNAL_CONTENT_BOOLEAN_REPEATABLE_FIELD = new Path(
"structures/test-journal-content-boolean-repeatable-field.xml" );
static final IPath TEST_JOURNAL_CONTENT_DOC_LIBRARY_FIELD = new Path(
"structures/test-journal-content-doc-library-field.xml" );
static final IPath TEST_JOURNAL_CONTENT_LINK_TO_PAGE_FIELD = new Path(
"structures/test-journal-content-link-to-page-field.xml" );
static final IPath TEST_JOURNAL_CONTENT_LIST_FIELD = new Path( "structures/test-journal-content-list-field.xml" );
static final IPath TEST_JOURNAL_CONTENT_MULTI_LIST_FIELD = new Path(
"structures/test-journal-content-multi-list-field.xml" );
static final IPath TEST_JOURNAL_CONTENT_NESTED_FIELDS = new Path(
"structures/test-journal-content-nested-fields.xml" );
static final IPath TEST_JOURNAL_CONTENT_TEXT_AREA_FIELD = new Path(
"structures/test-journal-content-text-area-field.xml" );
static final IPath TEST_JOURNAL_CONTENT_TEXT_BOX_REPEATABLE_FIELD = new Path(
"structures/test-journal-content-text-box-repeatable-field.xml" );
static final IPath TEST_JOURNAL_CONTENT_TEXT_FIELD = new Path( "structures/test-journal-content-text-field.xml" );
private Element currentElement;
protected Element getElementFromFile( IProject project, IPath filePath, ElementType type ) throws Exception
{
final String filePathValue = filePath.toOSString();
final IFile file = createFile( project, filePathValue, this.getClass().getResourceAsStream( filePathValue ) );
assertEquals( file.getFullPath().lastSegment(), filePath.lastSegment() );
final InputStream contents = file.getContents();
final Element element = type.instantiate( new RootXmlResource( new XmlResourceStore( contents ) ) );
contents.close();
return element;
}
@After
public void cleanup() throws Exception
{
if( this.currentElement != null )
{
if( ! this.currentElement.disposed() )
{
this.currentElement.dispose();
}
this.currentElement = null;
}
super.cleanup();
}
@Test
public void testDDMStructureBasicDocumentRead() throws Exception
{
final Element element = getElementFromFile( getCurrentProject(), DDM_STRUCTURE_BASIC_DOCUMENT, Root.TYPE );
setElement( element );
final Root root = element.nearest( Root.class );
assertNotNull( root );
assertEquals( "en_US", root.getAvailableLocales().content() );
assertEquals( "en_US", root.getDefaultLocale().content() );
final ElementList<DynamicElement> dynamicElements = root.getDynamicElements();
assertEquals( 154, dynamicElements.size() );
final DynamicElement dynamicElement = dynamicElements.get( 1 );
assertNotNull( dynamicElement );
assertEquals( "string", dynamicElement.getDataType().content( false ) );
assertEquals( "ClimateForcast_COMMAND_LINE", dynamicElement.getName().content( false ) );
assertEquals( "text", dynamicElement.getType().content( false ) );
final DynamicElementMetadata metaData = dynamicElement.getMetadata().content( false );
assertNotNull( metaData );
assertEquals( "en_US", metaData.getLocale().content( false ) );
final ElementList<Entry> entries = metaData.getEntries();
assertNotNull( entries );
assertEquals( 4, entries.size() );
final Entry entry = entries.get( 2 );
assertNotNull( entry );
assertEquals( "required", entry.getName().content( false ) );
assertEquals( "false", entry.getValue().content( false ) );
}
private void setElement( Element element )
{
assertNotNull( element );
this.currentElement = element;
}
@Test
public void testDocumentLibraryStructuresRead() throws Exception
{
final Element element = getElementFromFile( getCurrentProject(), DOCUMENT_LIBRARY_STRUCTURES, Root.TYPE );
setElement( element );
final Root root = element.nearest( Root.class );
assertNotNull( root );
final ElementList<Structure> structures = root.getStructures();
assertNotNull( structures );
assertEquals( 8, structures.size() );
final Structure structure = structures.get( 2 );
assertNotNull( structure );
assertEquals( "Learning Module Metadata", structure.getName().content( false ) );
assertEquals( "Learning Module Metadata", structure.getDescription().content( false ) );
final Root structureRoot = structure.getRoot().content( false );
assertNotNull( structureRoot );
assertEquals( "[$LOCALE_DEFAULT$]", structureRoot.getAvailableLocales().content( false ) );
assertEquals( "[$LOCALE_DEFAULT$]", structureRoot.getDefaultLocale().content( false ) );
final ElementList<DynamicElement> dynamicElements = structureRoot.getDynamicElements();
assertNotNull( dynamicElements );
assertEquals( 4, dynamicElements.size() );
final DynamicElement dynamicElement = dynamicElements.get( 1 );
assertNotNull( dynamicElement );
assertEquals( "string", dynamicElement.getDataType().content( false ) );
assertEquals( "keyword", dynamicElement.getIndexType().content( false ) );
assertEquals( true, dynamicElement.isMultiple().content( false ) );
assertEquals( "select3212", dynamicElement.getName().content( false ) );
assertEquals( false, dynamicElement.isReadOnly().content( false ) );
assertEquals( false, dynamicElement.isRequired().content( false ) );
assertEquals( true, dynamicElement.isShowLabel().content( false ) );
assertEquals( "select", dynamicElement.getType().content( false ) );
final DynamicElementMetadata metadata = dynamicElement.getMetadata().content( false );
assertNotNull( metadata );
assertEquals( "[$LOCALE_DEFAULT$]", metadata.getLocale().content( false ) );
final ElementList<Entry> entries = metadata.getEntries();
assertNotNull( entries );
assertEquals( 3, entries.size() );
final ElementList<DynamicElement> childDynamicElements = dynamicElement.getDynamicElements();
assertNotNull( childDynamicElements );
assertEquals( 3, childDynamicElements.size() );
final DynamicElement childDynamicElement = childDynamicElements.get( 1 );
assertNotNull( childDynamicElement );
assertEquals( "2_0", childDynamicElement.getName().content( false ) );
assertEquals( "option", childDynamicElement.getType().content( false ) );
assertEquals( "2", childDynamicElement.getValue().content( false ) );
final DynamicElementMetadata childMetadata = childDynamicElement.getMetadata().content( false );
assertNotNull( childMetadata );
assertEquals( "[$LOCALE_DEFAULT$]", childMetadata.getLocale().content( false ) );
final ElementList<Entry> childEntries = childMetadata.getEntries();
assertNotNull( childEntries );
assertEquals( 1, childEntries.size() );
final Entry childEntry = childEntries.get( 0 );
assertNotNull( childEntry );
assertEquals( "label", childEntry.getName().content( false ) );
assertEquals( "2.0", childEntry.getValue().content( false ) );
}
}