/** * Licensed to The Apereo Foundation under one or more contributor license * agreements. See the NOTICE file distributed with this work for additional * information regarding copyright ownership. * * * The Apereo Foundation licenses this file to you under the Educational * Community 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://opensource.org/licenses/ecl2.txt * * 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 org.opencastproject.index.service.resources.list.query; import org.opencastproject.index.service.resources.list.api.ResourceListFilter; import org.opencastproject.index.service.resources.list.api.ResourceListFilter.SourceType; import org.opencastproject.index.service.resources.list.impl.ListProvidersServiceImpl; import org.opencastproject.index.service.resources.list.provider.AgentsListProvider; import org.opencastproject.index.service.resources.list.provider.ContributorsListProvider; import org.opencastproject.index.service.resources.list.provider.EventsListProvider; import org.opencastproject.index.service.resources.list.provider.SeriesListProvider; import org.opencastproject.index.service.util.FiltersUtils; import org.opencastproject.util.data.Option; import org.opencastproject.util.data.Tuple; import java.util.Date; /** * Query for the events list. * * The following filters can be used: * <ul> * <li>series</li> * <li>presenters</li> * <li>presenter's usernames</li> * <li>contributors</li> * <li>location</li> * <li>agent</li> * <li>language</li> * <li>reviewStatus</li> * <li>startDate</li> * <li>status</li> * </ul> */ public class EventListQuery extends ResourceListQueryImpl { public static final String FILTER_SERIES_NAME = "series"; private static final String FILTER_SERIES_LABEL = "FILTERS.EVENTS.SERIES.LABEL"; public static final String FILTER_PRESENTERS_BIBLIOGRAPHIC_NAME = "presentersBibliographic"; private static final String FILTER_PRESENTERS_BIBLIOGRAPHIC_LABEL = "FILTERS.EVENTS.PRESENTERS_BIBLIOGRAPHIC.LABEL"; public static final String FILTER_PRESENTERS_TECHNICAL_NAME = "presentersTechnical"; private static final String FILTER_PRESENTERS_TECHNICAL_LABEL = "FILTERS.EVENTS.PRESENTERS_TECHNICAL.LABEL"; public static final String FILTER_CONTRIBUTORS_NAME = "contributors"; private static final String FILTER_CONTRIBUTORS_LABEL = "FILTERS.EVENTS.CONTRIBUTORS.LABEL"; public static final String FILTER_LOCATION_NAME = "location"; private static final String FILTER_LOCATION_LABEL = "FILTERS.EVENTS.LOCATION.LABEL"; public static final String FILTER_AGENT_NAME = "agent"; private static final String FILTER_AGENT_LABEL = "FILTERS.EVENTS.AGENT_ID.LABEL"; public static final String FILTER_LANGUAGE_NAME = "language"; private static final String FILTER_LANGUAGE_LABEL = "FILTERS.EVENTS.LANGUAGE.LABEL"; public static final String FILTER_STARTDATE_NAME = "startDate"; private static final String FILTER_STARTDATE_LABEL = "FILTERS.EVENTS.START_DATE.LABEL"; public static final String FILTER_STATUS_NAME = "status"; private static final String FILTER_STATUS_LABEL = "FILTERS.EVENTS.STATUS.LABEL"; public static final String FILTER_COMMENTS_NAME = "comments"; private static final String FILTER_COMMENTS_LABEL = "FILTERS.EVENTS.COMMENTS.LABEL"; public static final String FILTER_OPTEDOUT_NAME = "optedOut"; private static final String FILTER_OPTEDOUT_LABEL = "FILTERS.EVENTS.OPTEDOUT.LABEL"; public static final String FILTER_REVIEW_STATUS_NAME = "reviewStatus"; private static final String FILTER_REVIEW_STATUS_LABEL = "FILTERS.EVENTS.REVIEW_STATUS.LABEL"; public static final String FILTER_TEXT_NAME = "textFilter"; public EventListQuery() { super(); this.availableFilters.add(createSeriesFilter(Option.<String> none())); this.availableFilters.add(createPresentersFilter(Option.<String> none())); this.availableFilters.add(createTechnicalPresentersFilter(Option.<String> none())); this.availableFilters.add(createContributorsFilter(Option.<String> none())); this.availableFilters.add(createLocationFilter(Option.<String> none())); this.availableFilters.add(createAgentFilter(Option.<String> none())); this.availableFilters.add(createStartDateFilter(Option.<Tuple<Date, Date>> none())); this.availableFilters.add(createStatusFilter(Option.<String> none())); this.availableFilters.add(createCommentsFilter(Option.<String> none())); // this.availableFilters.add(createOptedoutFilter(Option.<Boolean> none())); // this.availableFilters.add(createReviewStatusFilter(Option.<String> none())); } /** * Add a {@link ResourceListFilter} filter to the query with the given seriesId * * @param seriesId * the seriesId to filter with */ public void withSeriesId(String seriesId) { this.addFilter(createSeriesFilter(Option.option(seriesId))); } /** * Returns an {@link Option} containing the seriesId used to filter if set * * @return an {@link Option} containing the seriesId or none. */ public Option<String> getSeriesId() { return this.getFilterValue(FILTER_SERIES_NAME); } /** * Add a {@link ResourceListFilter} filter to the query with the given opted-out status * * @param optedout * the opted-out status to filter with */ public void withOptedOut(Boolean optedout) { this.addFilter(createOptedoutFilter(Option.option(optedout))); } /** * Returns an {@link Option} containing the opted-out status used to filter if set * * @return an {@link Option} containing the opted-out status or none. */ public Option<Boolean> getOptedOut() { return this.getFilterValue(FILTER_OPTEDOUT_NAME); } /** * Add a {@link ResourceListFilter} filter to the query with the given review status * * @param reviewStatus * the review status to filter with */ public void withReviewStatus(String reviewStatus) { this.addFilter(createReviewStatusFilter(Option.option(reviewStatus))); } /** * Returns an {@link Option} containing the review status used to filter if set * * @return an {@link Option} containing the review status or none. */ public Option<Boolean> getReviewStatus() { return this.getFilterValue(FILTER_REVIEW_STATUS_LABEL); } /** * Add a {@link ResourceListFilter} filter to the query with the given presenter * * @param presenter * the presenter to filter for */ public void withPresenter(String presenter) { this.addFilter(createPresentersFilter(Option.option(presenter))); } /** * Returns an {@link Option} containing the presenter used to filter if set * * @return an {@link Option} containing the presenter or none. */ public Option<String> getPresenter() { return this.getFilterValue(FILTER_PRESENTERS_BIBLIOGRAPHIC_NAME); } /** * Add a {@link ResourceListFilter} filter to the query with the given technical presenter's username * * @param presenter * presenter's username the presenter's username to filter for */ public void withTechnicalPresenter(String presenter) { this.addFilter(createTechnicalPresentersFilter(Option.option(presenter))); } /** * Returns an {@link Option} containing the technical presenter's username used to filter if set * * @return an {@link Option} containing the presenter or none. */ public Option<String> getTechnicalPresenter() { return this.getFilterValue(FILTER_PRESENTERS_TECHNICAL_NAME); } /** * Add a {@link ResourceListFilter} filter to the query with the given contributor * * @param contributor * the contributor to filter for */ public void withContributor(String contributor) { this.addFilter(createContributorsFilter(Option.option(contributor))); } /** * Returns an {@link Option} containing the contributor used to filter if set * * @return an {@link Option} containing the contributor or none. */ public Option<String> getContributor() { return this.getFilterValue(FILTER_CONTRIBUTORS_NAME); } /** * Add a {@link ResourceListFilter} filter to the query with the given subject * * @param location * the subject to filter for */ public void withLocation(String location) { this.addFilter(createLocationFilter(Option.option(location))); } /** * Returns an {@link Option} containing the location used to filter if set * * @return an {@link Option} containing the location or none. */ public Option<String> getLocation() { return this.getFilterValue(FILTER_LOCATION_NAME); } /** * Add a {@link ResourceListFilter} filter to the query with the given subject * * @param agent * the agent to filter for */ public void withAgent(String agent) { this.addFilter(createAgentFilter(Option.option(agent))); } /** * Returns an {@link Option} containing the agent used to filter if set * * @return an {@link Option} containing the agent or none. */ public Option<String> getAgent() { return this.getFilterValue(FILTER_AGENT_NAME); } /** * Add a {@link ResourceListFilter} filter to the query with the given subject * * @param language * the subject to filter for */ public void withLanguage(String language) { this.addFilter(createLanguageFilter(Option.option(language))); } /** * Returns an {@link Option} containing the language used to filter if set * * @return an {@link Option} containing the language or none. */ public Option<String> getLanguage() { return this.getFilterValue(FILTER_LANGUAGE_NAME); } /** * Add a {@link ResourceListFilter} filter to the query with the given start date period * * @param startDate * the start date period as {@link Tuple} with two {@link Date}. */ public void withStartDate(Tuple<Date, Date> startDate) { this.addFilter(createStartDateFilter(Option.option(startDate))); } /** * Returns an {@link Option} containing the start date period used to filter if set * * @return an {@link Option} containing the start date period or none. */ public Option<Tuple<Date, Date>> getStartDate() { return this.getFilterValue(FILTER_STARTDATE_NAME); } /** * Add a {@link ResourceListFilter} filter to the query with the given status * * @param status * the status to filter for */ public void withStatus(String status) { this.addFilter(createStatusFilter(Option.option(status))); } /** * Returns an {@link Option} containing the status used to filter if set * * @return an {@link Option} containing the status or none. */ public Option<String> getStatus() { return this.getFilterValue(FILTER_STATUS_NAME); } /** * Add a {@link ResourceListFilter} filter to the query with the given comments * * @param comments * the comments to filter for */ public void withComments(String comments) { this.addFilter(createCommentsFilter(Option.option(comments))); } /** * Returns an {@link Option} containing the comments used to filter if set * * @return an {@link Option} containing the comments or none. */ public Option<String> getComments() { return this.getFilterValue(FILTER_COMMENTS_NAME); } /** * Create a new {@link ResourceListFilter} based on the Series id * * @param seriesId * the series id to filter on wrapped in an {@link Option} or {@link Option#none()} * @return a new {@link ResourceListFilter} for the Series name based query */ public static ResourceListFilter<String> createSeriesFilter(Option<String> seriesId) { return FiltersUtils.generateFilter(seriesId, FILTER_SERIES_NAME, FILTER_SERIES_LABEL, SourceType.SELECT, Option.some(SeriesListProvider.PROVIDER_PREFIX)); } /** * Create a new {@link ResourceListFilter} based on a presenter's full name * * @param presenter's * name the presenters to filter on wrapped in an {@link Option} or {@link Option#none()} * @return a new {@link ResourceListFilter} for a presenters based query */ public static ResourceListFilter<String> createPresentersFilter(Option<String> presenter) { return FiltersUtils.generateFilter(presenter, FILTER_PRESENTERS_BIBLIOGRAPHIC_NAME, FILTER_PRESENTERS_BIBLIOGRAPHIC_LABEL, SourceType.SELECT, Option.some(ContributorsListProvider.DEFAULT)); } /** * Create a new {@link ResourceListFilter} based on a presenter's user name * * @param presenter * the presenters to filter on wrapped in an {@link Option} or {@link Option#none()} * @return a new {@link ResourceListFilter} for a presenters based query */ public static ResourceListFilter<String> createTechnicalPresentersFilter(Option<String> presenter) { return FiltersUtils.generateFilter(presenter, FILTER_PRESENTERS_TECHNICAL_NAME, FILTER_PRESENTERS_TECHNICAL_LABEL, SourceType.SELECT, Option.some(ContributorsListProvider.USERNAMES)); } /** * Create a new {@link ResourceListFilter} based on a contributor * * @param contributor * the series id to filter on wrapped in an {@link Option} or {@link Option#none()} * @return a new {@link ResourceListFilter} for a contributor based query */ public static ResourceListFilter<String> createContributorsFilter(Option<String> contributor) { return FiltersUtils.generateFilter(contributor, FILTER_CONTRIBUTORS_NAME, FILTER_CONTRIBUTORS_LABEL, SourceType.SELECT, Option.some(ContributorsListProvider.DEFAULT)); } /** * Create a new {@link ResourceListFilter} based on a location * * @param location * the location to filter on wrapped in an {@link Option} or {@link Option#none()} * @return a new {@link ResourceListFilter} for a location based query */ public static ResourceListFilter<String> createLocationFilter(Option<String> location) { return FiltersUtils.generateFilter(location, FILTER_LOCATION_NAME, FILTER_LOCATION_LABEL, SourceType.SELECT, Option.some(EventsListProvider.LOCATION)); } /** * Create a new {@link ResourceListFilter} based on an agent * * @param agent * the agent to filter on wrapped in an {@link Option} or {@link Option#none()} * @return a new {@link ResourceListFilter} for a location based query */ public static ResourceListFilter<String> createAgentFilter(Option<String> agent) { return FiltersUtils.generateFilter(agent, FILTER_AGENT_NAME, FILTER_AGENT_LABEL, SourceType.SELECT, Option.some(AgentsListProvider.NAME)); } /** * Create a new {@link ResourceListFilter} based on a language * * @param language * the language to filter on wrapped in an {@link Option} or {@link Option#none()} * @return a new {@link ResourceListFilter} for a language based query */ public static ResourceListFilter<String> createLanguageFilter(Option<String> language) { return FiltersUtils.generateFilter(language, FILTER_LANGUAGE_NAME, FILTER_LANGUAGE_LABEL, SourceType.SELECT, Option.some("LANGUAGES")); } /** * Create a new {@link ResourceListFilter} based on start date period * * @param period * the period to filter on wrapped in an {@link Option} or {@link Option#none()} * @return a new {@link ResourceListFilter} for the given period */ public static ResourceListFilter<Tuple<Date, Date>> createStartDateFilter(Option<Tuple<Date, Date>> period) { return FiltersUtils.generateFilter(period, FILTER_STARTDATE_NAME, FILTER_STARTDATE_LABEL, SourceType.PERIOD, Option.some(EventsListProvider.START_DATE)); } /** * Create a new {@link ResourceListFilter} based on stats * * @param status * the status to filter on wrapped in an {@link Option} or {@link Option#none()} * @return a new {@link ResourceListFilter} for progress based query */ public static ResourceListFilter<String> createStatusFilter(Option<String> status) { return FiltersUtils.generateFilter(status, FILTER_STATUS_NAME, FILTER_STATUS_LABEL, SourceType.SELECT, Option.some(EventsListProvider.STATUS)); } /** * Create a new {@link ResourceListFilter} based on comments * * @param comments * the comments to filter on wrapped in an {@link Option} or {@link Option#none()} * @return a new {@link ResourceListFilter} for progress based query */ public static ResourceListFilter<String> createCommentsFilter(Option<String> comments) { return FiltersUtils.generateFilter(comments, FILTER_COMMENTS_NAME, FILTER_COMMENTS_LABEL, SourceType.SELECT, Option.some(EventsListProvider.COMMENTS)); } /** * Create a new {@link ResourceListFilter} based on the opted-out status * * @param optedout * the opted-out to filter on wrapped in an {@link Option} or {@link Option#none()} * @return a new {@link ResourceListFilter} for progress based query */ public static ResourceListFilter<Boolean> createOptedoutFilter(Option<Boolean> optedout) { return FiltersUtils.generateFilter(optedout, FILTER_OPTEDOUT_NAME, FILTER_OPTEDOUT_LABEL, SourceType.BOOLEAN, Option.<String> none()); } /** * Create a new {@link ResourceListFilter} based on the opted-out status * * @param reviewStatus * @return a new {@link ResourceListFilter} for progress based query */ public static ResourceListFilter<String> createReviewStatusFilter(Option<String> reviewStatus) { return FiltersUtils.generateFilter(reviewStatus, FILTER_REVIEW_STATUS_NAME, FILTER_REVIEW_STATUS_LABEL, SourceType.SELECT, Option.some(ListProvidersServiceImpl.REVIEW_STATUS)); } }