com.google.firebase.messaging.WebpushConfig Maven / Gradle / Ivy
/*
* Copyright 2018 Google Inc.
*
* 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.google.firebase.messaging;
import com.google.api.client.util.Key;
import com.google.common.collect.ImmutableMap;
import com.google.firebase.internal.NonNull;
import java.util.HashMap;
import java.util.Map;
/**
* Represents the Webpush protocol options that can be included in a {@link Message}. Instances
* of this class are thread-safe and immutable.
*/
public class WebpushConfig {
@Key("headers")
private final Map headers;
@Key("data")
private final Map data;
@Key("notification")
private final Map notification;
@Key("fcm_options")
private final WebpushFcmOptions fcmOptions;
private WebpushConfig(Builder builder) {
this.headers = builder.headers.isEmpty() ? null : ImmutableMap.copyOf(builder.headers);
this.data = builder.data.isEmpty() ? null : ImmutableMap.copyOf(builder.data);
this.notification = builder.notification != null ? builder.notification.getFields() : null;
this.fcmOptions = builder.fcmOptions;
}
/**
* Creates a new {@link WebpushConfig.Builder}.
*
* @return A {@link WebpushConfig.Builder} instance.
*/
public static Builder builder() {
return new Builder();
}
public static class Builder {
private final Map headers = new HashMap<>();
private final Map data = new HashMap<>();
private WebpushNotification notification;
private WebpushFcmOptions fcmOptions;
private Builder() {}
/**
* Adds the given key-value pair as a Webpush HTTP header. Refer to
* Webpush specification
* for supported headers.
*
* @param key Name of the header. Must not be null.
* @param value Value of the header. Must not be null.
* @return This builder.
*/
public Builder putHeader(@NonNull String key, @NonNull String value) {
headers.put(key, value);
return this;
}
/**
* Adds all the key-value pairs in the given map as Webpush headers. Refer to
* Webpush specification
* for supported headers.
*
* @param map A non-null map of header values. Map must not contain null keys or values.
* @return This builder.
*/
public Builder putAllHeaders(@NonNull Map map) {
headers.putAll(map);
return this;
}
/**
* Sets the given key-value pair as a Webpush data field. When set, overrides any data fields
* set using the methods {@link Message.Builder#putData(String, String)} and
* {@link Message.Builder#putAllData(Map)}.
*
* @param key Name of the data field. Must not be null.
* @param value Value of the data field. Must not be null.
* @return This builder.
*/
public Builder putData(String key, String value) {
data.put(key, value);
return this;
}
/**
* Adds all the key-value pairs in the given map as Webpush data fields. When set, overrides any
* data fields set using the methods {@link Message.Builder#putData(String, String)} and
* {@link Message.Builder#putAllData(Map)}.
*
* @param map A non-null map of data values. Map must not contain null keys or values.
* @return This builder.
*/
public Builder putAllData(Map map) {
data.putAll(map);
return this;
}
/**
* Sets the Webpush notification to be included in the message.
*
* @param notification A {@link WebpushNotification} instance.
* @return This builder.
*/
public Builder setNotification(WebpushNotification notification) {
this.notification = notification;
return this;
}
/**
* Sets the Webpush FCM options to be included in the Webpush config.
*
* @param fcmOptions A {@link WebpushFcmOptions} instance.
* @return This builder.
*/
public Builder setFcmOptions(WebpushFcmOptions fcmOptions) {
this.fcmOptions = fcmOptions;
return this;
}
/**
* Creates a new {@link WebpushConfig} instance from the parameters set on this builder.
*
* @return A new {@link WebpushConfig} instance.
* @throws IllegalArgumentException If any of the parameters set on the builder are invalid.
*/
public WebpushConfig build() {
return new WebpushConfig(this);
}
}
}