/*
* org.openmicroscopy.shoola.util.ui.search.SearchContext
*
*------------------------------------------------------------------------------
* Copyright (C) 2006-2014 University of Dundee. All rights reserved.
*
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
* This program 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
*------------------------------------------------------------------------------
*/
package org.openmicroscopy.shoola.util.ui.search;
//Java imports
import java.sql.Timestamp;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.List;
//Third-party libraries
//Application-internal dependencies
import org.openmicroscopy.shoola.util.ui.UIUtilities;
/**
* Helper class storing the relevant information to search for.
*
* @author Jean-Marie Burel
* <a href="mailto:j.burel@dundee.ac.uk">j.burel@dundee.ac.uk</a>
* @author Donald MacDonald
* <a href="mailto:donald@lifesci.dundee.ac.uk">donald@lifesci.dundee.ac.uk</a>
* @version 3.0
* <small>
* (<b>Internal version:</b> $Revision: $Date: $)
* </small>
* @since OME3.0
*/
public class SearchContext
{
/** Retrieves the data for the logged in user. */
public static final int CURRENT_USER = 0;
/**
* Retrieves the data for the selected users excluding the logged in users.
*/
public static final int OTHERS = 1;
/** Identifying the <code>Image</code> context. */
public static final int IMAGES = 0;
/** Identifying the <code>Dataset</code> context. */
public static final int DATASETS = 1;
/** Identifying the <code>Project</code> context. */
public static final int PROJECTS = 2;
/** Identifying the <code>Screen</code> context. */
public static final int SCREENS = 3;
/** Identifying the <code>Plate</code> context. */
public static final int PLATES = 4;
/** Identifying the <code>Well</code> context. */
public static final int WELLS = 5;
/** Identifying the <code>Annotation</code> context. */
public static final int TEXT_ANNOTATION = 6;
/** Identifying the <code>Tag</code> context. */
public static final int TAGS = 7;
/** Identifying the <code>Tag set</code> context. */
public static final int TAG_SETS = 8;
/** Identifying the <code>Name</code> context. */
public static final int NAME = 9;
/** Identifying the <code>File annotation</code> context. */
public static final int FILE_ANNOTATION = 10;
/** Identifying the <code>URL annotation</code> context. */
public static final int URL_ANNOTATION = 11;
/** Identifying the <code>Description</code> context. */
public static final int DESCRIPTION = 12;
/** Identifying the <code>Customized</code> context. */
public static final int CUSTOMIZED = 13;
/** Identifying the <code>Annotation</code> context. */
public static final int ANNOTATION = 14;
/** Indicates not to take into account the time criteria. */
public static final int ANY_DATE = 0;
/** Indicates to search for objects imported in the last 2 weeks. */
public static final int LAST_TWO_WEEKS = 1;
/** Indicates to search for objects imported in the last month. */
public static final int LAST_MONTH = 2;
/** Indicates to search for objects imported in the last 2 months. */
public static final int LAST_TWO_MONTHS = 3;
/** Indicates to search for objects imported in the last year. */
public static final int ONE_YEAR = 4;
/**
* Indicates to search for objects imported during a given period of
* time.
*/
public static final int RANGE = 5;
/** Maximum number of time options. */
public static final int MAX = 5;
/** Identifies the number of results {@link #LEVEL_ONE_VALUE}. */
public static final int LEVEL_ONE = 0;
/** Identifies the number of results {@link #LEVEL_TWO_VALUE}. */
public static final int LEVEL_TWO = 1;
/** Identifies the number of results {@link #LEVEL_THREE_VALUE}. */
public static final int LEVEL_THREE = 2;
/** Identifies the number of results {@link #LEVEL_FOUR_VALUE}. */
public static final int LEVEL_FOUR = 3;
/** The number of options for possible returned results. */
public static final int MAX_RESULTS = 3;
/** The number of results returned. */
public static final int LEVEL_ONE_VALUE = 50;
/** The number of results returned. */
public static final int LEVEL_TWO_VALUE = 100;
/** The number of results returned. */
public static final int LEVEL_THREE_VALUE = 250;
/** The number of results returned. */
public static final int LEVEL_FOUR_VALUE = 500;
/** Identifies all the formats to search for. */
public static final int ALL_FORMATS = 0;
/** Indicates to search for <code>HTML</code> files only. */
public static final int HTML = 1;
/** Indicates to search for <code>HTML</code> files only. */
public static final int PDF = 2;
/** Indicates to search for <code>HTML</code> files only. */
public static final int EXCEL = 3;
/** Indicates to search for <code>HTML</code> files only. */
public static final int POWER_POINT = 4;
/** Indicates to search for <code>HTML</code> files only. */
public static final int WORD = 5;
/** Indicates to search for <code>HTML</code> files only. */
public static final int XML = 6;
/** Indicates to search for <code>HTML</code> files only. */
public static final int TEXT = 7;
/** The max number of supported formats. */
public static final int MAX_FORMAT = 8;
/** The query to search for. */
private String query;
/** Collection of context. */
private List<Integer> context;
/** Collection of context. */
private List<Integer> type;
/** Collection of selected users. */
private long selectedOwner = -1;
/** Collection of users to exclude. */
private List<String> excludedOwners;
/** Collection of users to exclude. */
private List<String> excludedAnnotators;
/** The start time of the interval. */
private Timestamp startTime;
/** The end time of the interval. */
private Timestamp endTime;
/**
* One out of the following indexes: {@link #CURRENT_USER}, {@link #OTHERS}.
*/
private List<Integer> ownerSearchContext;
/**
* One out of the following indexes: {@link #CURRENT_USER}, {@link #OTHERS}.
*/
private List<Integer> annotatorSearchContext;
/** Flag indicating if the search is case sensitive or not. */
private boolean caseSensitive;
/** The number of results. */
private int numberOfResults;
/**
* One of following constants: {@link SearchParameters#DATE_IMPORT},
* {@link SearchParameters#DATE_AQUISITION}.
*/
private int timeType;
/**
* One of following constants: {@link #ANY_DATE}, {@link #LAST_TWO_WEEKS},
* {@link #LAST_MONTH}, {@link #LAST_TWO_MONTHS}, {@link #ONE_YEAR} or
* {@link #RANGE}.
*/
private int dateIndex;
/** The type of attachments to retrieve. */
private int attachmentType;
/** The group to search for */
private long selectedGroup = GroupContext.ALL_GROUPS_ID;
/**
* Creates a new instance.
*
* @param query The terms to search for.
* @param context Collection of context.
*/
public SearchContext(String query, List<Integer> context)
{
this.query = query;
this.context = context;
timeType = -1;
attachmentType = ALL_FORMATS;
}
/**
* Sets the case sensitivity flag.
*
* @param caseSensitive The value to set.
*/
void setCaseSensitive(boolean caseSensitive)
{
this.caseSensitive = caseSensitive;
}
/**
* Sets the context of the search for users.
*
* @param context The value to set.
*/
void setOwnerSearchContext(List<Integer> context)
{
ownerSearchContext = context;
}
/**
* Sets the context of the search for users.
*
* @param context The value to set.
*/
void setAnnotatorSearchContext(List<Integer> context)
{
annotatorSearchContext = context;
}
/**
* Sets the start and end times.
*
* @param startTime The start time.
* @param endTime The end time.
*/
public void setTime(Timestamp startTime, Timestamp endTime)
{
this.startTime = startTime;
this.endTime = endTime;
if (startTime != null && endTime != null) dateIndex = RANGE;
}
/**
* Sets the user context for the search
*
* @param user The value to set.
*/
public void setSelectedOwner(long user) { this.selectedOwner = user; }
/**
* Sets the {@link #startTime} and {@link #endTime} depending on the
* passed index.
*
* @param index One of the constants defined by this class.
*/
void setTime(int index)
{
GregorianCalendar gc = new GregorianCalendar();
endTime = UIUtilities.getDefaultTimestamp();
switch (index) {
case ANY_DATE:
setTime(null, null);
break;
case LAST_TWO_WEEKS:
gc = new GregorianCalendar(gc.get(Calendar.YEAR),
gc.get(Calendar.MONTH),
gc.get(Calendar.DAY_OF_MONTH), 23, 59, 0);
startTime = new Timestamp(
gc.getTime().getTime()-14*UIUtilities.DAY);
break;
case LAST_MONTH:
gc = new GregorianCalendar(gc.get(Calendar.YEAR),
gc.get(Calendar.MONTH),
gc.get(Calendar.DAY_OF_MONTH), 23, 59, 0);
startTime = new Timestamp(
gc.getTime().getTime()-30*UIUtilities.DAY);
break;
case LAST_TWO_MONTHS:
gc = new GregorianCalendar(gc.get(Calendar.YEAR),
gc.get(Calendar.MONTH),
gc.get(Calendar.DAY_OF_MONTH), 23, 59, 0);
startTime = new Timestamp(
gc.getTime().getTime()-60*UIUtilities.DAY);
break;
case ONE_YEAR:
gc = new GregorianCalendar(gc.get(Calendar.YEAR),
0, 1, 0, 0, 0);
startTime = new Timestamp(gc.getTime().getTime());
}
dateIndex = index;
}
public void setTimeType(int timeType) {
this.timeType = timeType;
}
/**
* Sets the collection of users to exclude.
*
* @param users The value to set.
*/
void setExcludedOwners(List<String> users) { excludedOwners = users; }
/**
* Sets the collection of users to exclude.
*
* @param users The value to set.
*/
void setExcludedAnnotators(List<String> users)
{
excludedAnnotators = users;
}
/**
* Sets the attachments to search for.
*
* @param type The value to set.
*/
void setAttachmentType(int type)
{
switch (type) {
case ALL_FORMATS:
case HTML:
case PDF:
case EXCEL:
case POWER_POINT:
case WORD:
case XML:
case TEXT:
attachmentType = type;
break;
default:
attachmentType = ALL_FORMATS;
}
}
/**
* Returns the attachments to search for.
*
* @return See above.
*/
int getAttachmentType() { return attachmentType; }
/**
* Returns one of the time constants defined by this class.
*
* @return See above.
*/
public int getDateIndex() { return dateIndex; }
/**
* Returns the time index.
*
* @return See above.
*/
public int getTimeType() { return timeType; }
/**
* Returns the collection of terms to search for.
*
* @return See above.
*/
public String getQuery() { return query; }
/**
* Returns the collection of context.
*
* @return See above.
*/
public List<Integer> getContext() { return context; }
/**
* Returns the collection of selected users.
*
* @return See above.
*/
public long getSelectedOwner() { return selectedOwner; }
/**
* Returns the collection of users to exclude.
*
* @return See above.
*/
public List<String> getExcludedOwners() { return excludedOwners; }
/**
* Returns the collection of users to exclude.
*
* @return See above.
*/
public List<String> getExcludedAnnotators() { return excludedAnnotators; }
/**
* Returns the start of time interval.
*
* @return See above.
*/
public Timestamp getStartTime() { return startTime; }
/**
* Returns the end of time interval.
*
* @return See above.
*/
public Timestamp getEndTime() { return endTime; }
/**
* Returns the context of the search for users.
*
* @return See above.
*/
public List<Integer> getOwnerSearchContext() { return ownerSearchContext; }
/**
* Returns the context of the search for users.
*
* @return See above.
*/
public List<Integer> getAnnotatorSearchContext()
{
return annotatorSearchContext;
}
/**
* Returns <code>true</code> if the search is case sensitive,
* <code>false</code> otherwise.
*
* @return See above.
*/
public boolean isCaseSensitive() { return caseSensitive; }
/**
* Sets the type.
*
* @param type The value to set.
*/
public void setType(List<Integer> type) { this.type = type; }
/**
* Returns the type.
*
* @return See above.
*/
public List<Integer> getType() { return type; }
/**
* Returns the numbers of results.
*
* @return See above.
*/
public int getNumberOfResults() { return numberOfResults; }
/**
* Sets the number of results.
*
* @param results The value to set.
*/
public void setNumberOfResults(int results) { numberOfResults = results; }
/** Get the group to search for */
public long getSelectedGroup() {
return selectedGroup;
}
/** Set the group to search for */
public void setSelectedGroup(long selectedGroup) {
this.selectedGroup = selectedGroup;
}
}