blob: d28d4ac269d43804961609b6d4022e0b6d24aa33 [file] [log] [blame]
/*
* Copyright 2021 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 com.android.server.appsearch.testing;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.appsearch.AppSearchSchema;
import android.app.appsearch.AppSearchSchema.PropertyConfig;
import android.app.appsearch.AppSearchSchema.StringPropertyConfig;
import android.app.appsearch.GenericDocument;
/**
* Encapsulates a {@link GenericDocument} that represent an email.
*
* <p>This class is a higher level implement of {@link GenericDocument}.
*/
public class AppSearchEmail extends GenericDocument {
/** The name of the schema type for {@link AppSearchEmail} documents. */
public static final String SCHEMA_TYPE = "builtin:Email";
private static final String KEY_FROM = "from";
private static final String KEY_TO = "to";
private static final String KEY_CC = "cc";
private static final String KEY_BCC = "bcc";
private static final String KEY_SUBJECT = "subject";
private static final String KEY_BODY = "body";
public static final AppSearchSchema SCHEMA =
new AppSearchSchema.Builder(SCHEMA_TYPE)
.addProperty(
new StringPropertyConfig.Builder(KEY_FROM)
.setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
.setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
.setIndexingType(StringPropertyConfig.INDEXING_TYPE_PREFIXES)
.build())
.addProperty(
new StringPropertyConfig.Builder(KEY_TO)
.setCardinality(PropertyConfig.CARDINALITY_REPEATED)
.setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
.setIndexingType(StringPropertyConfig.INDEXING_TYPE_PREFIXES)
.build())
.addProperty(
new StringPropertyConfig.Builder(KEY_CC)
.setCardinality(PropertyConfig.CARDINALITY_REPEATED)
.setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
.setIndexingType(StringPropertyConfig.INDEXING_TYPE_PREFIXES)
.build())
.addProperty(
new StringPropertyConfig.Builder(KEY_BCC)
.setCardinality(PropertyConfig.CARDINALITY_REPEATED)
.setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
.setIndexingType(StringPropertyConfig.INDEXING_TYPE_PREFIXES)
.build())
.addProperty(
new StringPropertyConfig.Builder(KEY_SUBJECT)
.setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
.setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
.setIndexingType(StringPropertyConfig.INDEXING_TYPE_PREFIXES)
.build())
.addProperty(
new StringPropertyConfig.Builder(KEY_BODY)
.setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
.setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
.setIndexingType(StringPropertyConfig.INDEXING_TYPE_PREFIXES)
.build())
.build();
/**
* Creates a new {@link AppSearchEmail} from the contents of an existing {@link
* GenericDocument}.
*
* @param document The {@link GenericDocument} containing the email content.
*/
public AppSearchEmail(@NonNull GenericDocument document) {
super(document);
}
/**
* Gets the from address of {@link AppSearchEmail}.
*
* @return The subject of {@link AppSearchEmail} or {@code null} if it's not been set yet.
*/
@Nullable
public String getFrom() {
return getPropertyString(KEY_FROM);
}
/**
* Gets the destination addresses of {@link AppSearchEmail}.
*
* @return The destination addresses of {@link AppSearchEmail} or {@code null} if it's not been
* set yet.
*/
@Nullable
public String[] getTo() {
return getPropertyStringArray(KEY_TO);
}
/**
* Gets the CC list of {@link AppSearchEmail}.
*
* @return The CC list of {@link AppSearchEmail} or {@code null} if it's not been set yet.
*/
@Nullable
public String[] getCc() {
return getPropertyStringArray(KEY_CC);
}
/**
* Gets the BCC list of {@link AppSearchEmail}.
*
* @return The BCC list of {@link AppSearchEmail} or {@code null} if it's not been set yet.
*/
@Nullable
public String[] getBcc() {
return getPropertyStringArray(KEY_BCC);
}
/**
* Gets the subject of {@link AppSearchEmail}.
*
* @return The value subject of {@link AppSearchEmail} or {@code null} if it's not been set yet.
*/
@Nullable
public String getSubject() {
return getPropertyString(KEY_SUBJECT);
}
/**
* Gets the body of {@link AppSearchEmail}.
*
* @return The body of {@link AppSearchEmail} or {@code null} if it's not been set yet.
*/
@Nullable
public String getBody() {
return getPropertyString(KEY_BODY);
}
/** The builder class for {@link AppSearchEmail}. */
public static class Builder extends GenericDocument.Builder<Builder> {
/**
* Creates a new {@link Builder}
*
* @param namespace The namespace of the Email.
* @param id The ID of the Email.
*/
public Builder(@NonNull String namespace, @NonNull String id) {
super(namespace, id, SCHEMA_TYPE);
}
/** Sets the from address of {@link AppSearchEmail} */
@NonNull
public Builder setFrom(@NonNull String from) {
return setPropertyString(KEY_FROM, from);
}
/** Sets the destination address of {@link AppSearchEmail} */
@NonNull
public Builder setTo(@NonNull String... to) {
return setPropertyString(KEY_TO, to);
}
/** Sets the CC list of {@link AppSearchEmail} */
@NonNull
public Builder setCc(@NonNull String... cc) {
return setPropertyString(KEY_CC, cc);
}
/** Sets the BCC list of {@link AppSearchEmail} */
@NonNull
public Builder setBcc(@NonNull String... bcc) {
return setPropertyString(KEY_BCC, bcc);
}
/** Sets the subject of {@link AppSearchEmail} */
@NonNull
public Builder setSubject(@NonNull String subject) {
return setPropertyString(KEY_SUBJECT, subject);
}
/** Sets the body of {@link AppSearchEmail} */
@NonNull
public Builder setBody(@NonNull String body) {
return setPropertyString(KEY_BODY, body);
}
/** Builds the {@link AppSearchEmail} object. */
@NonNull
@Override
public AppSearchEmail build() {
return new AppSearchEmail(super.build());
}
}
}