/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.cms.store.dao;
import org.hibernate.Query;
import org.springframework.stereotype.Repository;
import com.enonic.cms.framework.hibernate.support.DeleteBuilder;
import com.enonic.cms.framework.hibernate.support.InClauseBuilder;
import com.enonic.cms.core.content.ContentKey;
import com.enonic.cms.core.structure.page.PageWindowEntity;
@Repository("pageWindowDao")
public final class PageWindowEntityDao
extends AbstractBaseEntityDao<PageWindowEntity>
implements PageWindowDao
{
public PageWindowEntity findByKey( int key )
{
return get( PageWindowEntity.class, key );
}
public int deleteByPageKeyAndTemplateRegionKey( Integer[] pageKeys, int[] regionKeys )
{
final String hql = deleteByPageKeyAndTemplateRegionHQL( pageKeys, regionKeys );
final Query compiled = getHibernateTemplate().getSessionFactory().getCurrentSession().createQuery( hql );
compiled.setCacheable( false );
compiled.setReadOnly( true );
for (int i = 0; i < pageKeys.length; i++) {
String parameter = "pageKey" + i;
compiled.setParameter( parameter, pageKeys[i] );
}
for (int i = 0; i < regionKeys.length; i++) {
String parameter = "regionKey" + i;
compiled.setParameter( parameter, regionKeys[i] );
}
return compiled.executeUpdate();
}
private String deleteByPageKeyAndTemplateRegionHQL( Integer[] pageKeys, int[] regionKeys ) {
final DeleteBuilder hqlQuery = new DeleteBuilder( );
hqlQuery.addFromTable( PageWindowEntity.class.getName(), "pwe", DeleteBuilder.NO_JOIN, null );
hqlQuery.addFilter( "AND", new InClauseBuilder<ContentKey>( "pwe.page.key", ContentKey.convertToList( pageKeys ) )
{
public void appendValue( final StringBuffer sql, final ContentKey value )
{
sql.append( ":pageKey" ).append( getIndex() );
}
}.toString() );
hqlQuery.addFilter( "AND", new InClauseBuilder<ContentKey>( "pwe.pageTemplateRegion.key", ContentKey.convertToList( regionKeys ) )
{
public void appendValue( final StringBuffer sql, final ContentKey value )
{
sql.append( ":regionKey" ).append( getIndex() );
}
}.toString() );
return hqlQuery.toString();
}
public int deleteByPageKeys( Integer[] pageKeys )
{
final String hql = deleteByPageKeysHQL( pageKeys );
final Query compiled = getHibernateTemplate().getSessionFactory().getCurrentSession().createQuery( hql );
compiled.setCacheable( false );
compiled.setReadOnly( true );
for (int i = 0; i < pageKeys.length; i++) {
String parameter = "pageKey" + i;
compiled.setParameter( parameter, pageKeys[i] );
}
return compiled.executeUpdate();
}
private String deleteByPageKeysHQL( Integer [] pageKeys ) {
final DeleteBuilder hqlQuery = new DeleteBuilder( );
hqlQuery.addFromTable( PageWindowEntity.class.getName(), "pwe", DeleteBuilder.NO_JOIN, null );
hqlQuery.addFilter( "AND", new InClauseBuilder<ContentKey>( "pwe.page.key", ContentKey.convertToList( pageKeys ) )
{
public void appendValue( final StringBuffer sql, final ContentKey value )
{
sql.append( ":pageKey" ).append( getIndex() );
}
}.toString() );
return hqlQuery.toString();
}
}