/** * 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.provider.AclListProvider; import org.opencastproject.index.service.resources.list.provider.ContributorsListProvider; 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 series list. * * The following filters can be used: * <ul> * <li>contributors</li> * <li>subject</li> * <li>language</li> * <li>creator</li> * <li>license</li> * <li>access policy</li> * <li>creation date</li> * </ul> */ public class SeriesListQuery extends ResourceListQueryImpl { public static final String FILTER_ACL_NAME = "managedAcl"; private static final String FILTER_ACL_LABEL = "FILTERS.SERIES.ACCESS_POLICY.LABEL"; public static final String FILTER_CONTRIBUTORS_NAME = "contributors"; private static final String FILTER_CONTRIBUTORS_LABEL = "FILTERS.SERIES.CONTRIBUTORS.LABEL"; public static final String FILTER_CREATIONDATE_NAME = "CreationDate"; private static final String FILTER_CREATIONDATE_LABEL = "FILTERS.SERIES.CREATION_DATE.LABEL"; public static final String FILTER_CREATOR_NAME = "Creator"; private static final String FILTER_CREATOR_LABEL = "FILTERS.SERIES.CREATOR.LABEL"; public static final String FILTER_TEXT_NAME = "textFilter"; public static final String FILTER_LANGUAGE_NAME = "language"; private static final String FILTER_LANGUAGE_LABEL = "FILTERS.SERIES.LANGUAGE.LABEL"; public static final String FILTER_LICENSE_NAME = "license"; private static final String FILTER_LICENSE_LABEL = "FILTERS.SERIES.LICENSE.LABEL"; public static final String FILTER_ORGANIZERS_NAME = "organizers"; private static final String FILTER_ORGANIZERS_LABEL = "FILTERS.SERIES.ORGANIZERS.LABEL"; public static final String FILTER_SUBJECT_NAME = "subject"; private static final String FILTER_SUBJECT_LABEL = "FILTERS.SERIES.SUBJECT.LABEL"; public static final String FILTER_TITLE_NAME = "title"; private static final String FILTER_TITLE_LABEL = "FILTERS.SERIES.TITLE.LABEL"; public SeriesListQuery() { super(); this.availableFilters.add(createContributorsFilter(Option.<String> none())); this.availableFilters.add(createCreationDateFilter(Option.<Tuple<Date, Date>> none())); this.availableFilters.add(createOrganizersFilter(Option.<String> none())); } /** * Add a {@link ResourceListFilter} filter to the query with the given acl * * @param acl * the acl to filter for */ public void withAccessPolicy(String acl) { this.addFilter(createAccessPolicyFilter(Option.option(acl))); } /** * Returns an {@link Option} containing the acl used to filter if set * * @return an {@link Option} containing the acl or none. */ public Option<String> getAccessPolicy() { return this.getFilterValue(FILTER_ACL_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 creation date period * * @param creationDate * the creation date period as {@link Tuple} with two {@link Date}. */ public void withCreationDate(Tuple<Date, Date> creationDate) { this.addFilter(createCreationDateFilter(Option.option(creationDate))); } /** * Returns an {@link Option} containing the creation date period used to filter if set * * @return an {@link Option} containing the creation date period or none. */ public Option<Tuple<Date, Date>> getCreationDate() { return this.getFilterValue(FILTER_CREATIONDATE_NAME); } /** * Add a {@link ResourceListFilter} filter to the query with the given creator * * @param creator * the creator to filter for */ public void withCreator(String creator) { this.addFilter(createCreatorFilter(Option.option(creator))); } /** * Returns an {@link Option} containing the creator used to filter if set * * @return an {@link Option} containing the creator or none. */ public Option<String> getCreator() { return this.getFilterValue(FILTER_CREATOR_NAME); } /** * Add a {@link ResourceListFilter} filter to the query with the given language * * @param language * the language 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 license * * @param license * the license to filter for */ public void withLicense(String license) { this.addFilter(createLicenseFilter(Option.option(license))); } /** * Returns an {@link Option} containing the license used to filter if set * * @return an {@link Option} containing the license or none. */ public Option<String> getLicense() { return this.getFilterValue(FILTER_LICENSE_NAME); } /** * Add a {@link ResourceListFilter} filter to the query with the given organizer * * @param organizer * the organizer to filter for */ public void withOrganizer(String organizer) { this.addFilter(createOrganizersFilter(Option.option(organizer))); } /** * Returns an {@link Option} containing the organizer used to filter if set * * @return an {@link Option} containing the organizer or none. */ public Option<String> getOrganizer() { return this.getFilterValue(FILTER_ORGANIZERS_NAME); } /** * Add a {@link ResourceListFilter} filter to the query with the given subject * * @param subject * the subject to filter for */ public void withSubject(String subject) { this.addFilter(createSubjectFilter(Option.option(subject))); } /** * Returns an {@link Option} containing the subject used to filter if set * * @return an {@link Option} containing the subject or none. */ public Option<String> getSubject() { return this.getFilterValue(FILTER_SUBJECT_NAME); } /** * Add a {@link ResourceListFilter} filter to the query with the given title * * @param title * the subject to filter for */ public void withTitle(String title) { this.addFilter(createTitleFilter(Option.option(title))); } /** * Returns an {@link Option} containing the title used to filter if set * * @return an {@link Option} containing the title or none. */ public Option<String> getTitle() { return this.getFilterValue(FILTER_TITLE_NAME); } /** * Create a new {@link ResourceListFilter} based on access policy * * @param acl * the acl to filter on wrapped in an {@link Option} or {@link Option#none()} * @return a new {@link ResourceListFilter} for access policy based query */ public static ResourceListFilter<String> createAccessPolicyFilter(Option<String> acl) { return FiltersUtils.generateFilter(acl, FILTER_ACL_NAME, FILTER_ACL_LABEL, SourceType.SELECT, Option.some(AclListProvider.NAME)); } /** * Create a new {@link ResourceListFilter} based on a contributor * * @param contributor * the contributor's name 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 creator * * @param creator * the creator to filter on wrapped in an {@link Option} or {@link Option#none()} * @return a new {@link ResourceListFilter} for a creator based query */ public static ResourceListFilter<String> createCreatorFilter(Option<String> creator) { return FiltersUtils.generateFilter(creator, FILTER_CREATOR_NAME, FILTER_CREATOR_LABEL, SourceType.SELECT, Option.some(ContributorsListProvider.DEFAULT)); } /** * Create a new {@link ResourceListFilter} based on creation 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>> createCreationDateFilter(Option<Tuple<Date, Date>> period) { return FiltersUtils.generateFilter(period, FILTER_CREATIONDATE_NAME, FILTER_CREATIONDATE_LABEL, SourceType.PERIOD, Option.some(SeriesListProvider.CREATION_DATE)); } /** * 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 a license * * @param license * the license to filter on wrapped in an {@link Option} or {@link Option#none()} * @return a new {@link ResourceListFilter} for a license based query */ public static ResourceListFilter<String> createLicenseFilter(Option<String> license) { return FiltersUtils.generateFilter(license, FILTER_LICENSE_NAME, FILTER_LICENSE_LABEL, SourceType.SELECT, Option.some("LICENSES")); } /** * Create a new {@link ResourceListFilter} based on a organizer * * @param organizer * the organizer to filter on wrapped in an {@link Option} or {@link Option#none()} * @return a new {@link ResourceListFilter} for a organizer based query */ public static ResourceListFilter<String> createOrganizersFilter(Option<String> organizer) { return FiltersUtils.generateFilter(organizer, FILTER_ORGANIZERS_NAME, FILTER_ORGANIZERS_LABEL, SourceType.SELECT, Option.some(ContributorsListProvider.DEFAULT)); } /** * Create a new {@link ResourceListFilter} based on a subject * * @param subject * the subject to filter on wrapped in an {@link Option} or {@link Option#none()} * @return a new {@link ResourceListFilter} for a subject based query */ public static ResourceListFilter<String> createSubjectFilter(Option<String> subject) { return FiltersUtils.generateFilter(subject, FILTER_SUBJECT_NAME, FILTER_SUBJECT_LABEL, SourceType.SELECT, Option.some(SeriesListProvider.SUBJECT)); } /** * Create a new {@link ResourceListFilter} based on a title * * @param title * the title to filter on wrapped in an {@link Option} or {@link Option#none()} * @return a new {@link ResourceListFilter} for a title based query */ public static ResourceListFilter<String> createTitleFilter(Option<String> title) { return FiltersUtils.generateFilter(title, FILTER_TITLE_NAME, FILTER_TITLE_LABEL, SourceType.SELECT, Option.some(SeriesListProvider.TITLE)); } }