/**
* Bobo Browse Engine - High performance faceted/parametric search implementation
* that handles various types of semi-structured data. Written in Java.
*
* Copyright (C) 2005-2006 John Wang
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* To contact the project administrators for the bobo-browse project,
* please go to https://sourceforge.net/projects/bobo-browse/, or
* send mail to owner@browseengine.com.
*/
package com.browseengine.bobo.api;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Map;
import java.util.Properties;
import com.browseengine.bobo.facets.impl.PathFacetHandler;
/**
* Browse selection.
*/
public class BrowseSelection implements Serializable {
/**
* Sets how selections filter given multiple of selections within one field
*/
public static enum ValueOperation {
ValueOperationOr, ValueOperationAnd;
}
/**
*
*/
private static final long serialVersionUID = 1L;
private ValueOperation selectionOperation;
private String fieldName;
protected ArrayList<String> values;
protected ArrayList<String> notValues;
private Properties _selectionProperties;
public void setSelectionProperty(String key, String val) {
_selectionProperties.setProperty(key, val);
}
public void setSelectionProperties(Map<String, String> props) {
_selectionProperties.putAll(props);
}
/**
* Gets if strict applied for counting. Used if the field is of type <b><i>path</i></b>.
* @return is strict applied
* @see #setStrict(boolean)
* @deprecated use {@link #getSelectionProperties()}
*/
public boolean isStrict() {
return Boolean.valueOf(_selectionProperties.getProperty(PathFacetHandler.SEL_PROP_NAME_STRICT));
}
/**
* Sets is strict applied for counting. Used if the field is of type <b><i>path</i></b>.
* @param strict is strict applied
* @see #isStrict()
* @deprecated use {@link #setSelectionOperation(ValueOperation)}
*/
public BrowseSelection setStrict(boolean strict) {
_selectionProperties.setProperty(PathFacetHandler.SEL_PROP_NAME_STRICT, String.valueOf(strict));
return this;
}
/**
* Gets the depth. Used if the field is of type <b><i>path</i></b>.
* @return depth
* @see #setDepth(int)
* @deprecated use {@link #getSelectionProperties()}
*/
public int getDepth() {
try {
return Integer.parseInt(_selectionProperties
.getProperty(PathFacetHandler.SEL_PROP_NAME_DEPTH));
} catch (Exception e) {
return 0;
}
}
/**
* Sets the depth. Used if the field is of type <b><i>path</i></b>.
* @param depth depth
* @see #getDepth()
* @deprecated use {@link #getSelectionProperties()}
*/
public BrowseSelection setDepth(int depth) {
_selectionProperties.setProperty(PathFacetHandler.SEL_PROP_NAME_DEPTH, String.valueOf(depth));
return this;
}
/**
* Gets the field name
* @return field name
*/
public String getFieldName() {
return fieldName;
}
/**
* Gets the selected values
* @return selected values
* @see #setValues(String[])
*/
public String[] getValues() {
return values.toArray(new String[values.size()]);
}
/**
* Gets the selected NOT values
* @return selected NOT values
*/
public String[] getNotValues() {
return notValues.toArray(new String[notValues.size()]);
}
/**
* Sets the selected values
* @param vals selected values
* @see #getValues()
*/
public BrowseSelection setValues(String[] vals) {
values.clear();
for (int i = 0; i < vals.length; ++i) {
values.add(vals[i]);
}
return this;
}
/**
* Add a select value
* @param val select value
*/
public BrowseSelection addValue(String val) {
values.add(val);
return this;
}
/**
* Add a select NOT value
* @param val select NOT value
*/
public BrowseSelection addNotValue(String val) {
notValues.add(val);
return this;
}
/**
* Sets the NOT values
* @param notVals NOT values
*/
public BrowseSelection setNotValues(String[] notVals) {
notValues.clear();
for (int i = 0; i < notVals.length; ++i) {
notValues.add(notVals[i]);
}
return this;
}
/**
* Constructor
* @param fieldName field name
*/
public BrowseSelection(String fieldName) {
super();
this.fieldName = fieldName;
values = new ArrayList<String>();
notValues = new ArrayList<String>();
selectionOperation = ValueOperation.ValueOperationOr;
_selectionProperties = new Properties();
}
public Properties getSelectionProperties() {
return _selectionProperties;
}
/**
* Gets value operation.
* @return value operation
* @see BrowseSelection#setSelectionOperation(ValueOperation)
*/
public ValueOperation getSelectionOperation() {
return selectionOperation;
}
/**
* Sets value operation
*
* @param selectionOperation value operation
* @see #getSelectionOperation()
*/
public BrowseSelection setSelectionOperation(ValueOperation selectionOperation) {
this.selectionOperation = selectionOperation;
return this;
}
@Override
public String toString() {
StringBuffer buf = new StringBuffer();
buf.append("name: ").append(fieldName);
buf.append("values: " + values);
buf.append("nots: " + notValues);
buf.append("op: " + selectionOperation);
buf.append("sel props: " + _selectionProperties);
return buf.toString();
}
}