blob: 43b48a1d2483b3cada9fef8d505ed78253e886fe [file] [log] [blame]
/*
* Copyright 2022 The Android Open Source Project
*
* Licensed under the Apache 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://www.apache.org/licenses/LICENSE-2.0
*
* 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 androidx.appsearch.builtintypes;
import androidx.annotation.NonNull;
import androidx.core.util.Preconditions;
/**
* Default Builder for an AppSearch built in type. This builder includes all the default
* AppSearch properties.
*/
abstract class BaseBuiltinTypeBuilder<T extends BaseBuiltinTypeBuilder<T>> {
protected final String mNamespace;
protected final String mId;
protected int mDocumentScore;
protected long mCreationTimestampMillis;
protected long mDocumentTtlMillis;
protected BaseBuiltinTypeBuilder(@NonNull String namespace, @NonNull String id) {
mNamespace = Preconditions.checkNotNull(namespace);
mId = Preconditions.checkNotNull(id);
// Default for unset creationTimestampMillis. AppSearch will internally convert this
// to current time when creating the GenericDocument.
mCreationTimestampMillis = -1;
}
/**
* Sets the user-provided opaque document score of the current AppSearch document, which can
* be used for ranking using
* {@link androidx.appsearch.app.SearchSpec.RankingStrategy#RANKING_STRATEGY_DOCUMENT_SCORE}.
*
* <p>See {@link androidx.appsearch.annotation.Document.Score} for more information on score.
*/
@NonNull
@SuppressWarnings("unchecked")
public T setDocumentScore(int documentScore) {
mDocumentScore = documentScore;
return (T) this;
}
/**
* Sets the creation timestamp for the current AppSearch entity, in milliseconds using the
* {@link System#currentTimeMillis()} time base.
*
* <p>This timestamp refers to the creation time of the AppSearch entity, not when the
* document is written into AppSearch.
*
* <p>If not set, then the current timestamp will be used.
*
* <p>See {@link androidx.appsearch.annotation.Document.CreationTimestampMillis} for more
* information on creation timestamp.
*/
@NonNull
@SuppressWarnings("unchecked")
public T setCreationTimestampMillis(long creationTimestampMillis) {
mCreationTimestampMillis = creationTimestampMillis;
return (T) this;
}
/**
* Sets the time-to-live (TTL) for the current AppSearch document as a duration in milliseconds.
*
* <p>The document will be automatically deleted when the TTL expires.
*
* <p>If not set, then the document will never expire.
*
* <p>See {@link androidx.appsearch.annotation.Document.TtlMillis} for more information on
* TTL.
*/
@NonNull
@SuppressWarnings("unchecked")
public T setDocumentTtlMillis(long documentTtlMillis) {
mDocumentTtlMillis = documentTtlMillis;
return (T) this;
}
}