/*
* Copyright 2008 FatWire Corporation. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.fatwire.gst.foundation.facade.assetapi;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import com.fatwire.assetapi.common.AssetAccessException;
import com.fatwire.assetapi.query.Condition;
import com.fatwire.assetapi.query.ConditionFactory;
import com.fatwire.assetapi.query.OpTypeEnum;
import com.fatwire.assetapi.query.Query;
import com.fatwire.assetapi.query.QueryProperties;
import com.fatwire.assetapi.query.SimpleQuery;
import com.fatwire.assetapi.query.SortOrder;
/**
* Builder for a SimpleQuery object.
*
* @author Dolf Dijkstra
* @see SimpleQuery
* @deprecated - com.fatwire.gst.foundation.facade and all subpackages have moved to the tools.gsf.facade package
*/
public class QueryBuilder {
private static final String INITIALIZE_FIRST_MSG = "Condition not initialized. Please set the condition first with QueryBuilder.condition(...).";
private SimpleQuery query;
private QueryProperties props() {
return query.getProperties();
}
public QueryBuilder(String assetType, String subType) {
query = new SimpleQuery(assetType, subType);
}
public QueryBuilder(String assetType) {
query = new SimpleQuery(assetType, null);
}
public Query toQuery() {
return query;
}
/**
* @param attributeName attribute name
* @see com.fatwire.assetapi.query.SimpleQuery#setAttributes(java.util.List)
* @return query builder object
*/
public QueryBuilder attribute(String attributeName) {
List<String> old = new ArrayList<String>();
old.addAll(query.getAttributeNames());
old.add(attributeName);
query.setAttributes(old);
return this;
}
/**
* @param attributeNames list of attribute names
* @see com.fatwire.assetapi.query.SimpleQuery#setAttributes(java.util.List)
* @return query builder object
*/
public QueryBuilder attributes(String... attributeNames) {
List<String> old = new ArrayList<String>();
old.addAll(query.getAttributeNames());
old.addAll(Arrays.asList(attributeNames));
query.setAttributes(old);
return this;
}
/**
* @param sort SortOrder list
* @see com.fatwire.assetapi.query.SimpleQuery#setSortOrder(java.util.List)
* @return query builder object
*/
public QueryBuilder setSortOrder(List<SortOrder> sort) {
query.setSortOrder(sort);
return this;
}
/**
* @param fConfidence number/float representing confidence
* @see com.fatwire.assetapi.query.QueryProperties#setConfidence(float)
* @return query builder object */
public QueryBuilder setConfidence(float fConfidence) {
props().setConfidence(fConfidence);
return this;
}
/**
* @param fixedList boolean for fixed lList
* @see com.fatwire.assetapi.query.QueryProperties#setFixedList(boolean)
* @return query builder object
*/
public QueryBuilder setFixedList(boolean fixedList) {
props().setFixedList(fixedList);
return this;
}
/**
* @param basicSearch boolean for basic search
* @see com.fatwire.assetapi.query.QueryProperties#setIsBasicSearch(boolean)
* @return query builder object
*/
public QueryBuilder setBasicSearch(boolean basicSearch) {
props().setIsBasicSearch(basicSearch);
return this;
}
/**
* @param caseSensitive flag for case sensitivity
* @see com.fatwire.assetapi.query.QueryProperties#setIsCaseSensitive(boolean)
* @return query builder object
*/
public QueryBuilder setCaseSensitive(boolean caseSensitive) {
props().setIsCaseSensitive(caseSensitive);
return this;
}
/**
* @param immediateOnly flag for immediate only
* @see com.fatwire.assetapi.query.QueryProperties#setIsImmediateOnly(boolean)
* @return query builder object
*/
public QueryBuilder setImmediateOnly(boolean immediateOnly) {
props().setIsImmediateOnly(immediateOnly);
return this;
}
/**
* @param lowerEqual flag for lower equal
* @see com.fatwire.assetapi.query.QueryProperties#setIsLowerEqual(boolean)
* @return this query builder object
*/
public QueryBuilder setLowerEqual(boolean lowerEqual) {
props().setIsLowerEqual(lowerEqual);
return this;
}
/**
* @param upperEqual flag for upper equal
* @see com.fatwire.assetapi.query.QueryProperties#setIsUpperEqual(boolean)
* @return this query builder object
*/
public QueryBuilder setUpperEqual(boolean upperEqual) {
props().setIsUpperEqual(upperEqual);
return this;
}
/**
* @param loadDependency value for load dependency
* @see com.fatwire.assetapi.query.QueryProperties#setLoadDependency(int)
* @return this query builder object
*/
public QueryBuilder setLoadDependency(int loadDependency) {
props().setLoadDependency(loadDependency);
return this;
}
/**
* @param maxAnswers maximum answers
* @see com.fatwire.assetapi.query.QueryProperties#setMaxAnswers(int)
* @return this query builder object
*/
public QueryBuilder setMaxAnswers(int maxAnswers) {
props().setMaxAnswers(maxAnswers);
return this;
}
/**
* @param maxRows value for maximum rows
* @see com.fatwire.assetapi.query.QueryProperties#setMaxRows(int)
* @return this query builder object
*/
public QueryBuilder setMaxRows(int maxRows) {
props().setMaxRows(maxRows);
return this;
}
/**
* @param parser string value for parser
* @see com.fatwire.assetapi.query.QueryProperties#setParser(java.lang.String)
* @return this query builder object
*/
public QueryBuilder setParser(String parser) {
props().setParser(parser);
return this;
}
/**
* @param readAll flag for read all
* @see com.fatwire.assetapi.query.QueryProperties#setReadAll(boolean)
* @return this query builder object
*/
public QueryBuilder setReadAll(boolean readAll) {
props().setReadAll(readAll);
return this;
}
/**
* @param site site id number
* @see com.fatwire.assetapi.query.QueryProperties#setSite(java.lang.Long)
* @return query builder object
*/
public QueryBuilder setSite(long site) {
props().setSite(site);
return this;
}
/**
* @param startIndex start index
* @see com.fatwire.assetapi.query.QueryProperties#setStartIndex(int)
* @return query builder object
*/
public QueryBuilder setStartIndex(int startIndex) {
props().setStartIndex(startIndex);
return this;
}
public QueryBuilder condition(String condition) {
Condition cond = new ConditionParser().parse(condition);
query.setCondition(cond);
return this;
}
public QueryBuilder condition(String attName, OpTypeEnum opType, String value) {
Condition cond = ConditionFactory.createCondition(attName, opType, value);
query.setCondition(cond);
return this;
}
public QueryBuilder condition(String attName, OpTypeEnum opType, Date value) {
Condition cond = ConditionFactory.createCondition(attName, opType, value);
query.setCondition(cond);
return this;
}
public QueryBuilder condition(String attName, OpTypeEnum opType, Integer value) {
Condition cond = ConditionFactory.createCondition(attName, opType, value);
query.setCondition(cond);
return this;
}
public QueryBuilder condition(String attName, OpTypeEnum opType, Float value) {
Condition cond = ConditionFactory.createCondition(attName, opType, value);
query.setCondition(cond);
return this;
}
public QueryBuilder condition(String attName, OpTypeEnum opType, Long value) {
Condition cond = ConditionFactory.createCondition(attName, opType, value);
query.setCondition(cond);
return this;
}
public QueryBuilder condition(String attName, OpTypeEnum opType, List<String> value) {
Condition cond = ConditionFactory.createCondition(attName, opType, value);
query.setCondition(cond);
return this;
}
public QueryBuilder condition(String attName, OpTypeEnum opType, List<String> value, boolean containsAll) {
Condition cond = ConditionFactory.createCondition(attName, opType, value);
query.setCondition(cond);
return this;
}
public QueryBuilder condition(String attName, OpTypeEnum opType, Date value, boolean caseSensiive,
boolean immediateOnly) {
Condition cond = ConditionFactory.createCondition(attName, opType, value, caseSensiive, immediateOnly);
query.setCondition(cond);
return this;
}
public QueryBuilder condition(String attName, OpTypeEnum opType, Integer value, boolean caseSensiive,
boolean immediateOnly) {
Condition cond = ConditionFactory.createCondition(attName, opType, value, caseSensiive, immediateOnly);
query.setCondition(cond);
return this;
}
public QueryBuilder condition(String attName, OpTypeEnum opType, Float value, boolean caseSensiive,
boolean immediateOnly) {
Condition cond = ConditionFactory.createCondition(attName, opType, value, caseSensiive, immediateOnly);
query.setCondition(cond);
return this;
}
public QueryBuilder condition(String attName, OpTypeEnum opType, Long value, boolean caseSensiive,
boolean immediateOnly) {
Condition cond = ConditionFactory.createCondition(attName, opType, value, caseSensiive, immediateOnly);
query.setCondition(cond);
return this;
}
public QueryBuilder condition(String attName, OpTypeEnum opType, List<String> value, boolean caseSensiive,
boolean immediateOnly) {
Condition cond = ConditionFactory.createCondition(attName, opType, value, caseSensiive, immediateOnly);
query.setCondition(cond);
return this;
}
public QueryBuilder between(String attName, Object lower, Object upper) {
Condition cond;
try {
cond = new ConditionFactory().createBetweenCondition(attName, lower, upper);
} catch (AssetAccessException e) {
throw new RuntimeAssetAccessException(e);
}
query.setCondition(cond);
return this;
}
public QueryBuilder between(String attName, Object lower, Object upper, boolean lowerEqual, boolean upperEqual) {
Condition cond;
try {
cond = new ConditionFactory().createBetweenCondition(attName, lower, upper, lowerEqual, upperEqual);
} catch (AssetAccessException e) {
throw new RuntimeAssetAccessException(e);
}
query.setCondition(cond);
return this;
}
public QueryBuilder or(String attName, OpTypeEnum opType, String value) {
Condition cond = ConditionFactory.createCondition(attName, opType, value);
Condition qc = query.getCondition();
if (qc == null) throw new RuntimeAssetAccessException(INITIALIZE_FIRST_MSG);
query.setCondition(qc.or(cond));
return this;
}
public QueryBuilder or(String attName, OpTypeEnum opType, Date value) {
Condition cond = ConditionFactory.createCondition(attName, opType, value);
Condition qc = query.getCondition();
if (qc == null) throw new RuntimeAssetAccessException(INITIALIZE_FIRST_MSG);
query.setCondition(qc.or(cond));
return this;
}
public QueryBuilder or(String attName, OpTypeEnum opType, Integer value) {
Condition cond = ConditionFactory.createCondition(attName, opType, value);
Condition qc = query.getCondition();
if (qc == null) throw new RuntimeAssetAccessException(INITIALIZE_FIRST_MSG);
query.setCondition(qc.or(cond));
return this;
}
public QueryBuilder or(String attName, OpTypeEnum opType, Float value) {
Condition cond = ConditionFactory.createCondition(attName, opType, value);
Condition qc = query.getCondition();
if (qc == null) throw new RuntimeAssetAccessException(INITIALIZE_FIRST_MSG);
query.setCondition(qc.or(cond));
return this;
}
public QueryBuilder or(String attName, OpTypeEnum opType, Long value) {
Condition cond = ConditionFactory.createCondition(attName, opType, value);
Condition qc = query.getCondition();
if (qc == null) throw new RuntimeAssetAccessException(INITIALIZE_FIRST_MSG);
query.setCondition(qc.or(cond));
return this;
}
public QueryBuilder or(String attName, OpTypeEnum opType, List<String> value) {
Condition cond = ConditionFactory.createCondition(attName, opType, value);
Condition qc = query.getCondition();
if (qc == null) throw new RuntimeAssetAccessException(INITIALIZE_FIRST_MSG);
query.setCondition(qc.or(cond));
return this;
}
public QueryBuilder or(String attName, OpTypeEnum opType, List<String> value, boolean containsAll) {
Condition cond = ConditionFactory.createCondition(attName, opType, value);
Condition qc = query.getCondition();
if (qc == null) throw new RuntimeAssetAccessException(INITIALIZE_FIRST_MSG);
query.setCondition(qc.or(cond));
return this;
}
public QueryBuilder or(String attName, OpTypeEnum opType, Date value, boolean caseSensiive, boolean immediateOnly) {
Condition cond = ConditionFactory.createCondition(attName, opType, value, caseSensiive, immediateOnly);
Condition qc = query.getCondition();
if (qc == null) throw new RuntimeAssetAccessException(INITIALIZE_FIRST_MSG);
query.setCondition(qc.or(cond));
return this;
}
public QueryBuilder or(String attName, OpTypeEnum opType, Integer value, boolean caseSensiive, boolean immediateOnly) {
Condition cond = ConditionFactory.createCondition(attName, opType, value, caseSensiive, immediateOnly);
Condition qc = query.getCondition();
if (qc == null) throw new RuntimeAssetAccessException(INITIALIZE_FIRST_MSG);
query.setCondition(qc.or(cond));
return this;
}
public QueryBuilder or(String attName, OpTypeEnum opType, Float value, boolean caseSensiive, boolean immediateOnly) {
Condition cond = ConditionFactory.createCondition(attName, opType, value, caseSensiive, immediateOnly);
Condition qc = query.getCondition();
if (qc == null) throw new RuntimeAssetAccessException(INITIALIZE_FIRST_MSG);
query.setCondition(qc.or(cond));
return this;
}
public QueryBuilder or(String attName, OpTypeEnum opType, Long value, boolean caseSensiive, boolean immediateOnly) {
Condition cond = ConditionFactory.createCondition(attName, opType, value, caseSensiive, immediateOnly);
Condition qc = query.getCondition();
if (qc == null) throw new RuntimeAssetAccessException(INITIALIZE_FIRST_MSG);
query.setCondition(qc.or(cond));
return this;
}
public QueryBuilder or(String attName, OpTypeEnum opType, List<String> value, boolean caseSensiive,
boolean immediateOnly) {
Condition cond = ConditionFactory.createCondition(attName, opType, value, caseSensiive, immediateOnly);
Condition qc = query.getCondition();
if (qc == null) throw new RuntimeAssetAccessException(INITIALIZE_FIRST_MSG);
query.setCondition(qc.or(cond));
return this;
}
public QueryBuilder and(String attName, OpTypeEnum opType, String value) {
Condition cond = ConditionFactory.createCondition(attName, opType, value);
Condition qc = query.getCondition();
if (qc == null) throw new RuntimeAssetAccessException(INITIALIZE_FIRST_MSG);
query.setCondition(qc.and(cond));
return this;
}
public QueryBuilder and(String attName, OpTypeEnum opType, Date value) {
Condition cond = ConditionFactory.createCondition(attName, opType, value);
Condition qc = query.getCondition();
if (qc == null) throw new RuntimeAssetAccessException(INITIALIZE_FIRST_MSG);
query.setCondition(qc.and(cond));
return this;
}
public QueryBuilder and(String attName, OpTypeEnum opType, Integer value) {
Condition cond = ConditionFactory.createCondition(attName, opType, value);
Condition qc = query.getCondition();
if (qc == null) throw new RuntimeAssetAccessException(INITIALIZE_FIRST_MSG);
query.setCondition(qc.and(cond));
return this;
}
public QueryBuilder and(String attName, OpTypeEnum opType, Float value) {
Condition cond = ConditionFactory.createCondition(attName, opType, value);
Condition qc = query.getCondition();
if (qc == null) throw new RuntimeAssetAccessException(INITIALIZE_FIRST_MSG);
query.setCondition(qc.and(cond));
return this;
}
public QueryBuilder and(String attName, OpTypeEnum opType, Long value) {
Condition cond = ConditionFactory.createCondition(attName, opType, value);
Condition qc = query.getCondition();
if (qc == null) throw new RuntimeAssetAccessException(INITIALIZE_FIRST_MSG);
query.setCondition(qc.and(cond));
return this;
}
public QueryBuilder and(String attName, OpTypeEnum opType, List<String> value) {
Condition cond = ConditionFactory.createCondition(attName, opType, value);
Condition qc = query.getCondition();
if (qc == null) throw new RuntimeAssetAccessException(INITIALIZE_FIRST_MSG);
query.setCondition(qc.and(cond));
return this;
}
public QueryBuilder and(String attName, OpTypeEnum opType, List<String> value, boolean containsAll) {
Condition cond = ConditionFactory.createCondition(attName, opType, value);
Condition qc = query.getCondition();
if (qc == null) throw new RuntimeAssetAccessException(INITIALIZE_FIRST_MSG);
query.setCondition(qc.and(cond));
return this;
}
public QueryBuilder and(String attName, OpTypeEnum opType, Date value, boolean caseSensiive, boolean immediateOnly) {
Condition cond = ConditionFactory.createCondition(attName, opType, value, caseSensiive, immediateOnly);
Condition qc = query.getCondition();
if (qc == null) throw new RuntimeAssetAccessException(INITIALIZE_FIRST_MSG);
query.setCondition(qc.and(cond));
return this;
}
public QueryBuilder and(String attName, OpTypeEnum opType, Integer value, boolean caseSensiive,
boolean immediateOnly) {
Condition cond = ConditionFactory.createCondition(attName, opType, value, caseSensiive, immediateOnly);
Condition qc = query.getCondition();
if (qc == null) throw new RuntimeAssetAccessException(INITIALIZE_FIRST_MSG);
query.setCondition(qc.and(cond));
return this;
}
public QueryBuilder and(String attName, OpTypeEnum opType, Float value, boolean caseSensiive, boolean immediateOnly) {
Condition cond = ConditionFactory.createCondition(attName, opType, value, caseSensiive, immediateOnly);
Condition qc = query.getCondition();
if (qc == null) throw new RuntimeAssetAccessException(INITIALIZE_FIRST_MSG);
query.setCondition(qc.and(cond));
return this;
}
public QueryBuilder and(String attName, OpTypeEnum opType, Long value, boolean caseSensiive, boolean immediateOnly) {
Condition cond = ConditionFactory.createCondition(attName, opType, value, caseSensiive, immediateOnly);
Condition qc = query.getCondition();
if (qc == null) throw new RuntimeAssetAccessException(INITIALIZE_FIRST_MSG);
query.setCondition(qc.and(cond));
return this;
}
public QueryBuilder and(String attName, OpTypeEnum opType, List<String> value, boolean caseSensiive,
boolean immediateOnly) {
Condition cond = ConditionFactory.createCondition(attName, opType, value, caseSensiive, immediateOnly);
Condition qc = query.getCondition();
if (qc == null) throw new RuntimeAssetAccessException(INITIALIZE_FIRST_MSG);
query.setCondition(qc.and(cond));
return this;
}
}