/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.cms.core.log;
import java.util.Date;
import org.hibernate.Query;
import com.enonic.cms.framework.hibernate.support.SelectBuilder;
import com.enonic.cms.core.security.user.UserEntity;
/**
* This class represents the specification of a getContentByCategory search.
*/
public class LogEntrySpecification
{
private UserEntity user;
private LogType[] types;
private Table[] tableTypes;
private boolean allowDuplicateEntries = false;
private Date dateFilter;
private DateSpan dateSpan;
public UserEntity getUser()
{
return user;
}
public void setUser( UserEntity user )
{
this.user = user;
}
public LogType[] getTypes()
{
return types;
}
public void setTypes( LogType[] types )
{
this.types = types;
}
public boolean isAllowDuplicateEntries()
{
return allowDuplicateEntries;
}
public void setAllowDuplicateEntries( boolean allowDuplicateEntries )
{
this.allowDuplicateEntries = allowDuplicateEntries;
}
public Date getDateFilter()
{
return dateFilter;
}
public void setDateFilter( Date dateFilter )
{
this.dateFilter = dateFilter;
}
public Table[] getTableTypes()
{
return tableTypes;
}
public void setTableTypes( Table[] tableTypes )
{
this.tableTypes = tableTypes;
}
public void setDateSpan( Date publishFrom, Date publishTo )
{
this.dateSpan = new DateSpan( publishFrom, publishTo );
}
public void appendDateSpan( String alias, SelectBuilder hqlQuery )
{
dateSpan.appendSpan( alias, hqlQuery );
}
public boolean isDateSpanSet()
{
return dateSpan != null && dateSpan.isSpanSet();
}
public void setDateSpanParameters( Query compiled )
{
dateSpan.setSpanParameters( compiled );
}
private class DateSpan
{
private final Date publishFrom;
private final Date publishTo;
private DateSpan( final Date publishFrom, final Date publishTo )
{
this.publishFrom = publishFrom;
this.publishTo = publishTo;
}
private boolean isSpanSet()
{
return publishTo != null;
}
private void appendSpan( String alias, SelectBuilder hqlQuery )
{
if ( publishFrom != null )
{
hqlQuery.addFilter( "AND", alias + ".timestamp >= :publishFrom" );
}
hqlQuery.addFilter( "AND", alias + ".timestamp <= :publishTo" );
}
private void setSpanParameters( Query compiled )
{
if ( publishFrom != null )
{
compiled.setTimestamp( "publishFrom", publishFrom );
}
compiled.setTimestamp( "publishTo", publishTo );
}
}
}