/* * Copyright (C) 2016 TIBCO Jaspersoft Corporation. All rights reserved. * http://community.jaspersoft.com/project/mobile-sdk-android * * Unless you have purchased a commercial license agreement from TIBCO Jaspersoft, * the following license terms apply: * * This program is part of TIBCO Jaspersoft Mobile SDK for Android. * * TIBCO Jaspersoft Mobile SDK is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * TIBCO Jaspersoft Mobile SDK 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 Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with TIBCO Jaspersoft Mobile SDK for Android. If not, see * <http://www.gnu.org/licenses/lgpl>. */ package com.jaspersoft.android.sdk.service.repository; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import static com.jaspersoft.android.sdk.service.repository.RepositorySearchCriteria.DEFAULT_LIMIT; import static com.jaspersoft.android.sdk.service.repository.RepositorySearchCriteria.DEFAULT_OFFSET; /** * @author Tom Koptel * @since 2.3 */ class InternalCriteria { private final int mLimit; private final int mOffset; private final int mResourceMask; private final Boolean mRecursive; private final Boolean mForceFullPage; private final Boolean mForceTotalCount; private final String mQuery; private final SortType mSortBy; private final AccessType mAccessType; private final String mFolderUri; private InternalCriteria(Builder builder) { mLimit = builder.limit; mOffset = builder.offset; mResourceMask = builder.resourceMask; mRecursive = builder.recursive; mForceFullPage = builder.forceFullPage; mForceTotalCount = builder.forceTotalCount; mQuery = builder.query; mSortBy = builder.sort; mAccessType = builder.accessType; mFolderUri = builder.folderUri; } @NotNull public static InternalCriteria from(RepositorySearchCriteria criteria) { return new Builder() .limit(criteria.getLimit()) .offset(criteria.getOffset()) .resourceMask(criteria.getResourceMask()) .recursive(criteria.getRecursive()) .folderUri(criteria.getFolderUri()) .query(criteria.getQuery()) .sortBy(criteria.getSortBy()) .accessType(criteria.getAccessType()) .create(); } public int getLimit() { return mLimit; } public int getOffset() { return mOffset; } @Nullable public String getFolderUri() { return mFolderUri; } @Nullable public Boolean getForceFullPage() { return mForceFullPage; } @Nullable public Boolean getForceTotalCount() { return mForceTotalCount; } @Nullable public String getQuery() { return mQuery; } @Nullable public Boolean getRecursive() { return mRecursive; } public int getResourceMask() { return mResourceMask; } @Nullable public SortType getSortBy() { return mSortBy; } @Nullable public AccessType getAccessType() { return mAccessType; } @NotNull public Builder newBuilder() { Builder builder = new InternalCriteria.Builder(); builder.recursive(mRecursive); builder.forceFullPage(mForceFullPage); builder.forceTotalCount(mForceTotalCount); builder.folderUri(mFolderUri); builder.accessType(mAccessType); builder.sortBy(mSortBy); builder.query(mQuery); builder.resourceMask(mResourceMask); builder.limit(mLimit); builder.offset(mOffset); return builder; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; InternalCriteria criteria = (InternalCriteria) o; if (mLimit != criteria.mLimit) return false; if (mOffset != criteria.mOffset) return false; if (mResourceMask != criteria.mResourceMask) return false; if (mRecursive != null ? !mRecursive.equals(criteria.mRecursive) : criteria.mRecursive != null) return false; if (mForceFullPage != null ? !mForceFullPage.equals(criteria.mForceFullPage) : criteria.mForceFullPage != null) return false; if (mForceTotalCount != null ? !mForceTotalCount.equals(criteria.mForceTotalCount) : criteria.mForceTotalCount != null) return false; if (mQuery != null ? !mQuery.equals(criteria.mQuery) : criteria.mQuery != null) return false; if (mSortBy != null ? !mSortBy.equals(criteria.mSortBy) : criteria.mSortBy != null) return false; return !(mFolderUri != null ? !mFolderUri.equals(criteria.mFolderUri) : criteria.mFolderUri != null); } @Override public int hashCode() { int result = mLimit; result = 31 * result + mOffset; result = 31 * result + mResourceMask; result = 31 * result + (mRecursive != null ? mRecursive.hashCode() : 0); result = 31 * result + (mForceFullPage != null ? mForceFullPage.hashCode() : 0); result = 31 * result + (mForceTotalCount != null ? mForceTotalCount.hashCode() : 0); result = 31 * result + (mQuery != null ? mQuery.hashCode() : 0); result = 31 * result + (mSortBy != null ? mSortBy.hashCode() : 0); result = 31 * result + (mFolderUri != null ? mFolderUri.hashCode() : 0); return result; } @Override public String toString() { return "InternalCriteria{" + "mFolderUri='" + mFolderUri + '\'' + ", mLimit=" + mLimit + ", mOffset=" + mOffset + ", mResourceMask=" + mResourceMask + ", mRecursive=" + mRecursive + ", mForceFullPage=" + mForceFullPage + ", mForceTotalCount=" + mForceTotalCount + ", mQuery='" + mQuery + '\'' + ", mSortBy='" + mSortBy + '\'' + '}'; } public static class Builder { private int limit = DEFAULT_LIMIT; private int offset = DEFAULT_OFFSET; private int resourceMask = Integer.MIN_VALUE; @Nullable private Boolean recursive; @Nullable private Boolean forceFullPage; @Nullable private Boolean forceTotalCount; @Nullable private String query; @Nullable private SortType sort; @Nullable private AccessType accessType; @Nullable private String folderUri; public Builder limit(int limit) { this.limit = limit; return this; } public Builder offset(int offset) { this.offset = offset; return this; } public Builder resourceMask(int resourceMask) { this.resourceMask = resourceMask; return this; } public Builder recursive(Boolean recursive) { this.recursive = recursive; return this; } public Builder query(@Nullable String query) { this.query = query; return this; } public Builder folderUri(@Nullable String folderUri) { this.folderUri = folderUri; return this; } /** * Internal use. Mutating sortBy value. * * @param sort either 'label' or 'creationDate' * @return chain builder instance */ public Builder sortBy(SortType sort) { this.sort = sort; return this; } public Builder accessType(AccessType accessType) { this.accessType = accessType; return this; } /** * Internal use. Mutating forceFullPage value. * * @param forceFullPage either true or false * @return chain builder instance */ public Builder forceFullPage(Boolean forceFullPage) { this.forceFullPage = forceFullPage; return this; } /** * Internal use. Mutating forceTotalCount value. * * @param forceTotalCount either true or false * @return chain builder instance */ public Builder forceTotalCount(Boolean forceTotalCount) { this.forceTotalCount = forceTotalCount; return this; } public InternalCriteria create() { return new InternalCriteria(this); } } }