/*
* Copyright (c) 2013-2016. Urban Airship and Contributors
*/
package com.urbanairship.api.push.model.notification.adm;
import com.google.common.base.Optional;
import com.google.common.collect.ImmutableMap;
import com.urbanairship.api.push.model.DeviceType;
import com.urbanairship.api.push.model.PushExpiry;
import com.urbanairship.api.push.model.PushModelObject;
import com.urbanairship.api.push.model.notification.DevicePayloadOverride;
import com.urbanairship.api.push.model.notification.Interactive;
import java.util.Map;
public final class ADMDevicePayload extends PushModelObject implements DevicePayloadOverride {
private final Optional<String> alert;
private final Optional<String> consolidationKey;
private final Optional<PushExpiry> expiresAfter;
private final Optional<ImmutableMap<String, String>> extra;
private final Optional<Interactive> interactive;
private ADMDevicePayload(Optional<String> alert,
Optional<String> consolidationKey,
Optional<PushExpiry> expiresAfter,
Optional<ImmutableMap<String, String>> extra,
Optional<Interactive> interactive) {
this.alert = alert;
this.consolidationKey = consolidationKey;
this.expiresAfter = expiresAfter;
this.extra = extra;
this.interactive = interactive;
}
public static Builder newBuilder() {
return new Builder();
}
@Override
public DeviceType getDeviceType() {
return DeviceType.AMAZON;
}
@Override
public Optional<String> getAlert() {
return alert;
}
public Optional<String> getConsolidationKey() {
return consolidationKey;
}
public Optional<PushExpiry> getExpiresAfter() {
return expiresAfter;
}
public Optional<ImmutableMap<String, String>> getExtra() {
return extra;
}
public Optional<Interactive> getInteractive() {
return interactive;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
ADMDevicePayload that = (ADMDevicePayload)o;
if (alert != null ? !alert.equals(that.alert) : that.alert != null) {
return false;
}
if (consolidationKey != null ? !consolidationKey.equals(that.consolidationKey) : that.consolidationKey != null) {
return false;
}
if (expiresAfter != null ? !expiresAfter.equals(that.expiresAfter) : that.expiresAfter != null) {
return false;
}
if (extra != null ? !extra.equals(that.extra) : that.extra != null) {
return false;
}
if (interactive != null ? !interactive.equals(that.interactive) : that.extra != null) {
return false;
}
return true;
}
@Override
public int hashCode() {
int result = (alert != null ? alert.hashCode() : 0);
result = 31 * result + (consolidationKey != null ? consolidationKey.hashCode() : 0);
result = 31 * result + (expiresAfter != null ? expiresAfter.hashCode() : 0);
result = 31 * result + (extra != null ? extra.hashCode() : 0);
result = 31 * result + (interactive != null ? interactive.hashCode() : 0);
return result;
}
public static class Builder {
private String alert = null;
private String consolidationKey = null;
private PushExpiry expiresAfter = null;
private ImmutableMap.Builder<String, String> extra = null;
private Interactive interactive = null;
private Builder() { }
public Builder setAlert(String alert) {
this.alert = alert;
return this;
}
public Builder setConsolidationKey(String consolidationKey) {
this.consolidationKey = consolidationKey;
return this;
}
public Builder setExpiresAfter(PushExpiry value) {
this.expiresAfter = value;
return this;
}
public Builder addExtraEntry(String key, String value) {
if (extra == null) {
extra = ImmutableMap.builder();
}
this.extra.put(key, value);
return this;
}
public Builder addAllExtraEntries(Map<String, String> entries) {
if (extra == null) {
extra = ImmutableMap.builder();
}
this.extra.putAll(entries);
return this;
}
public Builder setInteractive(Interactive value) {
this.interactive = value;
return this;
}
public ADMDevicePayload build() {
return new ADMDevicePayload(Optional.fromNullable(alert),
Optional.fromNullable(consolidationKey),
Optional.fromNullable(expiresAfter),
extra == null ? Optional.<ImmutableMap<String,String>>absent() : Optional.fromNullable(extra.build()),
Optional.fromNullable(interactive));
}
}
}