All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.opencastproject.oaipmh.persistence.QueryBuilder Maven / Gradle / Ivy

There is a newer version: 16.4
Show newest version
/**
 * 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.oaipmh.persistence;

import static org.opencastproject.util.data.Option.none;
import static org.opencastproject.util.data.Option.some;

import org.opencastproject.mediapackage.MediaPackage;
import org.opencastproject.util.data.Option;

import java.util.Date;
import java.util.LinkedList;
import java.util.List;

/** Query builder. */
public class QueryBuilder {
  private Option mediaPackageId = none();
  private Option repositoryId = none();
  private Option seriesId = none();
  private Option deleted = none();
  private Option modifiedAfter = none();
  private Option modifiedBefore = none();
  private Option limit = none();
  private Option offset = none();
  private Option setSpec = none();
  private List setDefinitions = new LinkedList<>();
  private boolean subsequentRequest = false;

  public static QueryBuilder query() {
    return new QueryBuilder();
  }

  public static QueryBuilder query(Query query) {
    QueryBuilder queryBuilder = new QueryBuilder();
    queryBuilder.mediaPackageId = query.getMediaPackageId();
    queryBuilder.repositoryId = query.getRepositoryId();
    queryBuilder.seriesId = query.getSeriesId();
    queryBuilder.deleted = query.isDeleted();
    queryBuilder.modifiedAfter = query.getModifiedAfter();
    queryBuilder.modifiedBefore = query.getModifiedBefore();
    queryBuilder.limit = query.getLimit();
    queryBuilder.offset = query.getOffset();
    queryBuilder.setDefinitions = query.getSetDefinitions();
    queryBuilder.setSpec = query.getSetSpec();
    queryBuilder.subsequentRequest = query.isSubsequentRequest();
    return queryBuilder;
  }

  /** Create a query for a certain repository. */
  public static QueryBuilder queryRepo(String repositoryId) {
    return new QueryBuilder().repositoryId(repositoryId);
  }

  public QueryBuilder mediaPackageId(Option mediaPackageId) {
    this.mediaPackageId = mediaPackageId;
    return this;
  }

  public QueryBuilder mediaPackageId(String mediaPackageId) {
    this.mediaPackageId = some(mediaPackageId);
    return this;
  }

  public QueryBuilder mediaPackageId(MediaPackage mediaPackage) {
    this.mediaPackageId = some(mediaPackage.getIdentifier().toString().toString());
    return this;
  }

  public QueryBuilder repositoryId(Option repositoryId) {
    this.repositoryId = repositoryId;
    return this;
  }

  public QueryBuilder repositoryId(String repositoryId) {
    this.repositoryId = some(repositoryId);
    return this;
  }

  public QueryBuilder seriesId(Option seriesId) {
    this.seriesId = seriesId;
    return this;
  }

  public QueryBuilder seriesId(String seriesId) {
    this.seriesId = some(seriesId);
    return this;
  }

  /** The date is inclusive. */
  public QueryBuilder modifiedAfter(Option modifiedAfter) {
    this.modifiedAfter = modifiedAfter;
    return this;
  }

  /** The date is inclusive. */
  public QueryBuilder modifiedAfter(Date modifiedAfter) {
    this.modifiedAfter = some(modifiedAfter);
    return this;
  }

  /** The date is inclusive. */
  public QueryBuilder modifiedBefore(Option modifiedBefore) {
    this.modifiedBefore = modifiedBefore;
    return this;
  }

  /** The date is inclusive. */
  public QueryBuilder modifiedBefore(Date modifiedBefore) {
    this.modifiedBefore = some(modifiedBefore);
    return this;
  }

  public QueryBuilder isDeleted(boolean deleted) {
    this.deleted = some(deleted);
    return this;
  }

  public QueryBuilder limit(Option limit) {
    this.limit = limit;
    return this;
  }

  public QueryBuilder limit(Integer limit) {
    this.limit = some(limit);
    return this;
  }

  public QueryBuilder offset(Integer offset) {
    this.offset = some(offset);
    return this;
  }

  /** Defaults to false. */
  public QueryBuilder subsequentRequest(boolean subsequentRequest) {
    this.subsequentRequest = subsequentRequest;
    return this;
  }

  public QueryBuilder setDefinitions(List setDef) {
    this.setDefinitions = setDef;
    return this;
  }

  public QueryBuilder setSpec(String setSpec) {
    if (setSpec != null) {
      this.setSpec = some(setSpec);
    }
    return this;
  }

  /** Create the query. */
  public Query build() {
    final Option mediaPackageId = this.mediaPackageId;
    final Option repositoryId = this.repositoryId;
    final Option seriesId = this.seriesId;
    final Option deleted = this.deleted;
    final Option modifiedAfter = this.modifiedAfter;
    final Option modifiedBefore = this.modifiedBefore;
    final Option limit = this.limit;
    final Option offset = this.offset;
    final Option setSpec = this.setSpec;
    final List setDefinitions = this.setDefinitions;
    final boolean subsequentRequest = this.subsequentRequest;

    return new Query() {
      @Override public Option getMediaPackageId() {
        return mediaPackageId;
      }

      @Override public Option getRepositoryId() {
        return repositoryId;
      }

      @Override public Option getSeriesId() {
        return seriesId;
      }

      @Override public Option isDeleted() {
        return deleted;
      }

      @Override public Option getModifiedAfter() {
        return modifiedAfter;
      }

      @Override public Option getModifiedBefore() {
        return modifiedBefore;
      }

      @Override public Option getLimit() {
        return limit;
      }

      @Override public Option getOffset() {
        return offset;
      }

      @Override
      public List getSetDefinitions() {
        return setDefinitions;
      }

      @Override
      public Option getSetSpec() {
        return setSpec;
      }

      @Override public boolean isSubsequentRequest() {
        return subsequentRequest;
      }
    };
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy