/***************************************************
*
* cismet GmbH, Saarbruecken, Germany
*
* ... and it just works.
*
****************************************************/
package Sirius.server.search;
import Sirius.server.middleware.types.MetaClass;
import Sirius.server.newuser.UserGroup;
import Sirius.server.search.searchparameter.DefaultSearchParameter;
import Sirius.server.search.searchparameter.SearchParameter;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
/**
* DOCUMENT ME!
*
* @version $Revision$, $Date$
*/
public class SearchOption implements java.io.Serializable {
//~ Instance fields --------------------------------------------------------
protected HashSet classes;
protected HashSet userGroups;
// Dieser Suchoption zugeordnete Query
protected Query query;
//~ Constructors -----------------------------------------------------------
/**
* Short concise description. Additional verbose description.
*
* @param query descriptor description.
*
* @return description.
*/
public SearchOption(final Query query) {
this(query, new HashSet(), new HashSet());
}
/**
* Creates a new SearchOption object.
*
* @param query DOCUMENT ME!
* @param classes DOCUMENT ME!
* @param userGroups DOCUMENT ME!
*/
public SearchOption(final Query query, final HashSet classes, final HashSet userGroups) {
this.query = query;
this.classes = classes;
this.userGroups = userGroups;
}
//~ Methods ----------------------------------------------------------------
/**
* DOCUMENT ME!
*
* @param classKey DOCUMENT ME!
* @param userGroupKey DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public final boolean isSelectable(final String classKey, final String userGroupKey) {
if ((classes.size() > 0) && (userGroups.size() > 0)) {
return classes.contains(classKey) && userGroups.contains(userGroupKey);
} else {
return true;
}
}
/**
* DOCUMENT ME!
*
* @param c DOCUMENT ME!
* @param ugs DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public final boolean isSelectable(final Collection c, final Collection ugs) {
if ((classes.size() > 0) && (userGroups.size() > 0)) {
return classes.containsAll(c) && userGroups.containsAll(ugs);
} else {
return true;
}
}
/**
* DOCUMENT ME!
*
* @param ug DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public final boolean isSelectable(final UserGroup ug) {
if (userGroups.size() > 0) {
return userGroups.contains(ug.getKey());
} else {
return true;
}
}
/**
* DOCUMENT ME!
*
* @param c DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public final boolean isSelectable(final MetaClass c) {
if (classes.size() > 0) {
return classes.contains(c.getKey());
} else {
return true;
}
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public final Query getQuery() {
return query;
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public final String getQueryId() {
return this.getQuery().getQueryIdentifier().getKey().toString();
}
/**
* DOCUMENT ME!
*
* @param userGroupKey DOCUMENT ME!
*/
public final void addUserGroup(final String userGroupKey) {
userGroups.add(userGroupKey);
}
/**
* DOCUMENT ME!
*
* @param classKey DOCUMENT ME!
*/
public final void addClass(final String classKey) {
classes.add(classKey);
}
/**
* DOCUMENT ME!
*
* @param parameter DOCUMENT ME!
*
* @throws Exception DOCUMENT ME!
*/
public void setSearchParameter(final SearchParameter parameter) throws Exception {
this.query.setParameter(parameter);
}
/**
* DOCUMENT ME!
*
* @param key DOCUMENT ME!
* @param value DOCUMENT ME!
*
* @throws Exception DOCUMENT ME!
*/
public void setDefaultSearchParameter(final Object key, final Object value) throws Exception {
this.query.setParameter(new DefaultSearchParameter(key, value, false));
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public Iterator getParameterNames() {
return this.query.getParameterKeys();
}
}