/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.vertical.adminweb;
import com.enonic.cms.core.content.index.ContentIndexConstants;
public final class SearchStringBuffer
{
private StringBuffer search = new StringBuffer();
public enum Operator
{
AND,
OR
}
public SearchStringBuffer appendTitle( String criteria )
{
return appendTitle( Operator.AND, criteria );
}
public SearchStringBuffer appendTitle( Operator operator, String criteria )
{
return appendContains( operator, "title", criteria );
}
public SearchStringBuffer appendName( String criteria )
{
return appendName( Operator.AND, criteria );
}
public SearchStringBuffer appendName( Operator operator, String criteria )
{
return appendContains( operator, "name", criteria );
}
public SearchStringBuffer appendData( String criteria )
{
return appendData( Operator.AND, criteria );
}
public SearchStringBuffer appendData( Operator operator, String criteria )
{
return appendContains( operator, "data/*", criteria );
}
public SearchStringBuffer appendAttachments( String criteria )
{
return appendAttachments( Operator.AND, criteria );
}
public SearchStringBuffer appendAttachments( Operator operator, String criteria )
{
return appendContains( operator, "fulltext", criteria );
}
public SearchStringBuffer appendKey( String criteria )
{
return appendKey( Operator.AND, criteria );
}
public SearchStringBuffer appendKey( Operator operator, String criteria )
{
return appendEquals( operator, "@key", criteria );
}
public SearchStringBuffer appendOwner( String criteria )
{
return appendOwner( Operator.AND, criteria );
}
public SearchStringBuffer appendOwner( Operator operator, String criteria )
{
return appendEquals( operator, ContentIndexConstants.F_OWNER_KEY, criteria );
}
public SearchStringBuffer appendModifier( String criteria )
{
return appendModifier( Operator.AND, criteria );
}
public SearchStringBuffer appendModifier( Operator operator, String criteria )
{
return appendEquals( operator, ContentIndexConstants.F_MODIFIER_KEY, criteria );
}
public SearchStringBuffer appendAssigneeQualifiedName( String criteria )
{
return appendEquals( Operator.AND, ContentIndexConstants.F_ASSIGNEE_QUALIFIEDNAME, criteria );
}
public SearchStringBuffer appendAssignerQualifiedName( String criteria )
{
return appendEquals( Operator.AND, ContentIndexConstants.F_ASSIGNER_QUALIFIEDNAME, criteria );
}
public SearchStringBuffer appendAssignmentDueDate( String operator, String criteria )
{
return doAppend( Operator.AND, ContentIndexConstants.F_ASSIGNMENT_DUE_DATE, operator, criteria );
}
public SearchStringBuffer appendNotEmpty( String field )
{
return doAppendRaw( Operator.AND, field + " != ''" );
}
public SearchStringBuffer appendStatus( String criteria )
{
return appendStatus( Operator.AND, criteria );
}
public SearchStringBuffer appendStatus( Operator operator, String criteria )
{
return appendEquals( operator, "@status", criteria );
}
public SearchStringBuffer appendCreated( String operator, String criteria )
{
return doAppend( Operator.AND, "@created", operator, criteria );
}
public SearchStringBuffer appendTimestamp( String operator, String criteria )
{
return doAppend( Operator.AND, "@timestamp", operator, criteria );
}
public SearchStringBuffer appendPublishFrom( String operator, String criteria )
{
return doAppend( Operator.AND, "@publishfrom", operator, criteria );
}
public SearchStringBuffer appendPublishTo( String operator, String criteria )
{
return doAppend( Operator.AND, "@publishto", operator, criteria );
}
public SearchStringBuffer appendRaw( String rawSearch )
{
return doAppendRaw( Operator.AND, rawSearch );
}
public SearchStringBuffer appendRaw( Operator operator, String rawSearch )
{
return doAppendRaw( operator, rawSearch );
}
public SearchStringBuffer appendRaw( SearchStringBuffer search )
{
return doAppendRaw( Operator.AND, search.toString() );
}
public SearchStringBuffer appendRaw( Operator operator, SearchStringBuffer search )
{
return doAppendRaw( operator, search.toString() );
}
public String toString()
{
return search.toString();
}
private SearchStringBuffer appendEquals( Operator operator, String field, String criteria )
{
return doAppend( operator, field, " = ", criteria );
}
private SearchStringBuffer appendContains( Operator operator, String field, String criteria )
{
return doAppend( operator, field, " CONTAINS ", "\"" + criteria + "\"" );
}
private SearchStringBuffer doAppendRaw( Operator operator, String rawSearch )
{
if ( rawSearch != null && rawSearch.trim().length() > 0 )
{
appendOperator( operator );
search.append( "(" ).append( rawSearch ).append( ")" );
}
return this;
}
private SearchStringBuffer doAppend( Operator operator1, String field, String operator2, String criteria )
{
appendOperator( operator1 );
search.append( field ).append( operator2 ).append( criteria );
return this;
}
private void appendOperator( Operator o )
{
if ( search.length() > 0 )
{
if ( o == Operator.AND )
{
search.append( " AND " );
}
else if ( o == Operator.OR )
{
search.append( " OR " );
}
}
}
}