/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.cms.upgrade.standalone;
import java.io.File;
import javax.sql.DataSource;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.support.TransactionTemplate;
import com.enonic.cms.framework.jdbc.DialectConnectionDecorator;
import com.enonic.cms.framework.jdbc.dialect.Dialect;
import com.enonic.cms.framework.jdbc.dialect.DialectResolver;
import com.enonic.cms.store.support.ConnectionFactory;
import com.enonic.cms.upgrade.UpgradeService;
import com.enonic.cms.upgrade.service.StandardPropertyResolver;
import com.enonic.cms.upgrade.service.UpgradeServiceImpl;
/**
* This class is used by stand-alone upgrade managers and should be handled as API.
*/
@SuppressWarnings( "unused" )
public final class StandaloneUpgradeFactory
{
private File homeDir;
private DataSource dataSource;
public void setHomeDir( final File homeDir )
{
this.homeDir = homeDir;
}
public void setDataSource( final DataSource dataSource )
{
this.dataSource = dataSource;
}
public StandaloneUpgrade create()
throws Exception
{
final UpgradeService upgradeService = createUpgradeService();
return new StandaloneUpgrade( upgradeService );
}
private UpgradeService createUpgradeService()
throws Exception
{
final DialectResolver dialectResolver = new DialectResolver();
dialectResolver.setDataSource( this.dataSource );
final Dialect dialect = dialectResolver.resolveDialect();
final ConnectionFactory connectionFactory = new ConnectionFactory();
connectionFactory.setDataSource( this.dataSource );
connectionFactory.setDecorator( new DialectConnectionDecorator( dialect ) );
final DataSourceTransactionManager txManager = new DataSourceTransactionManager();
txManager.setDataSource( this.dataSource );
txManager.afterPropertiesSet();
final TransactionTemplate txTemplate = new TransactionTemplate();
txTemplate.setTransactionManager( txManager );
txTemplate.afterPropertiesSet();
final StandardPropertyResolver propertyResolver = new StandardPropertyResolver();
propertyResolver.setHomeDir( this.homeDir );
propertyResolver.afterPropertiesSet();
final UpgradeServiceImpl upgradeService = new UpgradeServiceImpl();
upgradeService.setDialect( dialect );
upgradeService.setConnectionFactory( connectionFactory );
upgradeService.setTransactionTemplate( txTemplate );
upgradeService.setPropertyResolver( propertyResolver );
upgradeService.afterPropertiesSet();
return upgradeService;
}
}