/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.cms.core.security.userstore;
import java.util.Map;
import org.jdom.Document;
import org.jdom.Element;
import com.enonic.cms.core.AbstractPagedXmlCreator;
import com.enonic.cms.core.security.userstore.config.UserStoreConfigXmlCreator;
import com.enonic.cms.core.security.userstore.connector.config.GroupPolicyConfig;
import com.enonic.cms.core.security.userstore.connector.config.InvalidUserStoreConnectorConfigException;
import com.enonic.cms.core.security.userstore.connector.config.UserPolicyConfig;
import com.enonic.cms.core.security.userstore.connector.config.UserStoreConnectorConfig;
import com.enonic.cms.core.security.userstore.connector.config.UserStoreConnectorConfigXmlCreator;
public class UserStoreXmlCreator
extends AbstractPagedXmlCreator
{
private Map<String, UserStoreConnectorConfig> connectorConfigs;
public UserStoreXmlCreator( final Map<String, UserStoreConnectorConfig> connectorConfigs )
{
this.connectorConfigs = connectorConfigs;
}
public Document createUserStoreNotFoundDocument( String userstore )
{
Element userStoreEl = new Element( "userstore" );
userStoreEl.addContent( new Element( "message" ).setText( "Userstore not found: " + userstore ) );
return new Document( userStoreEl );
}
public Document createUserStoresDocument( final UserStoreEntity userStore )
{
Element userStoresEl = new Element( getRootName() );
userStoresEl.addContent( doCreateUserStoreElement( userStore ) );
return new Document( userStoresEl );
}
public Element createUserStoreElement( final UserStoreEntity userStore )
{
return doCreateUserStoreElement( userStore );
}
@Override
public Element createElement( Object obj )
{
return doCreateUserStoreElement( (UserStoreEntity) obj );
}
public Element doCreateUserStoreElement( final UserStoreEntity userStore )
{
final Element userStoreElem = new Element( "userstore" );
userStoreElem.setAttribute( "key", String.valueOf( userStore.getKey() ) );
userStoreElem.setAttribute( "name", userStore.getName() );
userStoreElem.setAttribute( "default", String.valueOf( userStore.isDefaultUserStore() ) );
userStoreElem.setAttribute( "remote", String.valueOf( userStore.isRemote() ) );
if ( userStore.isRemote() )
{
userStoreElem.addContent( doCreateConnectorElement( userStore ) );
}
userStoreElem.addContent( doCreateConfigElement( userStore ) );
return userStoreElem;
}
private Element doCreateConnectorElement( final UserStoreEntity userStore )
{
Element connector = new Element( "connector" );
connector.setAttribute( "name", userStore.getConnectorName() );
connector.addContent( doCreateConnectorConfigElement( userStore.getConnectorName() ) );
return connector;
}
private Element doCreateConnectorConfigElement( final String userStoreConnectorConfigName )
{
UserStoreConnectorConfig userStoreConnectorConfig = getUserStoreConnectorConfig( userStoreConnectorConfigName );
return UserStoreConnectorConfigXmlCreator.createConnectorConfigElement( userStoreConnectorConfig );
}
private UserStoreConnectorConfig getUserStoreConnectorConfig( final String userStoreConnectorConfigName )
{
UserStoreConnectorConfig userStoreConnectorConfig = connectorConfigs.get( userStoreConnectorConfigName );
if ( userStoreConnectorConfig == null )
{
userStoreConnectorConfig =
new UserStoreConnectorConfig( userStoreConnectorConfigName, null, UserPolicyConfig.ALL_FALSE, GroupPolicyConfig.ALL_FALSE );
//FIXME this adds an error for the CreateUpdateUserStoreWizard, localization not possible
final String errorMessage = InvalidUserStoreConnectorConfigException.createMessage( userStoreConnectorConfigName,
"No configuration found in cms.properties" );
userStoreConnectorConfig.addErrorMessage( errorMessage );
}
return userStoreConnectorConfig;
}
private Element doCreateConfigElement( final UserStoreEntity userStore )
{
final Document configAsXmlDocument = userStore.getConfigAsXMLDocument();
if ( configAsXmlDocument != null )
{
return (Element) configAsXmlDocument.getRootElement().detach();
}
else
{
return UserStoreConfigXmlCreator.createEmptyConfigElement();
}
}
@Override
public String getRootName()
{
return "userstores";
}
}