/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.cms.core.content.contenttype;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.enonic.cms.core.content.contenttype.dataentryconfig.DataEntryConfig;
public class CtyFormConfig
implements CtySet
{
private ContentTypeConfig contentTypeConfig;
private String titleInputName;
private List<CtySetConfig> setConfigList = new ArrayList<CtySetConfig>();
private Map<String, CtySetConfig> setConfigMapByName = new HashMap<String, CtySetConfig>();
public CtyFormConfig( ContentTypeConfig contentTypeConfig )
{
this.contentTypeConfig = contentTypeConfig;
}
public String getRelativeXPath()
{
return null;
}
public String getTitleInputName()
{
return titleInputName;
}
public void setTitleInputName( String titleInputName )
{
this.titleInputName = titleInputName;
}
public CtySetConfig addBlock( CtySetConfig block )
{
if ( setConfigMapByName.containsKey( block.getName() ) )
{
throw new InvalidContentTypeConfigException(
"Invalid block '" + block.getName() + "': name '" + block.getName() + "' is already taken" );
}
setConfigList.add( block );
setConfigMapByName.put( block.getName(), block );
return block;
}
public CtySetConfig getSetConfig( String name )
{
for ( CtySetConfig setConfig : setConfigList )
{
if ( name.equals( setConfig.getName() ) )
{
return setConfig;
}
}
return null;
}
public CtySetConfig getSetConfigByRelativeXPath( String path )
{
for ( CtySetConfig setConfig : setConfigList )
{
if ( path.equals( setConfig.getRelativeXPath() ) )
{
return setConfig;
}
}
return null;
}
public List<CtySetConfig> getSetConfig()
{
return Collections.unmodifiableList( setConfigList );
}
public DataEntryConfig getInputConfig( String name )
{
for ( CtySetConfig setConfig : setConfigList )
{
DataEntryConfig inputConfig = setConfig.getInputConfig( name );
if ( inputConfig != null )
{
return inputConfig;
}
}
return null;
}
public DataEntryConfig getInputConfigByRelativeXPath( String path )
{
for ( CtySetConfig setConfig : setConfigList )
{
if ( setConfig.getGroupXPath() != null )
{
// do not look thru group blocks
continue;
}
DataEntryConfig inputConfig = setConfig.getInputConfigByRelativeXPath( path );
if ( inputConfig != null )
{
return inputConfig;
}
}
return null;
}
public List<DataEntryConfig> getInputConfigs()
{
List<DataEntryConfig> inputConfigs = new ArrayList<DataEntryConfig>();
for ( CtySetConfig setConfig : setConfigList )
{
if ( setConfig.getGroupXPath() == null )
{
inputConfigs.addAll( setConfig.getInputConfigs() );
}
}
return inputConfigs;
}
public CtySetConfig getBlock( int index )
{
return setConfigList.get( index );
}
public ContentTypeConfig getContentTypeConfig()
{
return contentTypeConfig;
}
public DataEntryConfig getTitleInput()
{
String name = getTitleInputName();
for ( CtySetConfig block : setConfigList )
{
DataEntryConfig input = block.getInputConfig( name );
if ( input != null )
{
return input;
}
}
return null;
}
public boolean hasInput( String name )
{
for ( CtySetConfig ctySetConfig : setConfigList )
{
if ( ctySetConfig.hasInput( name ) )
{
return true;
}
}
return false;
}
}