package fr.jcgay.notification;
import com.google.auto.value.AutoValue;
/**
* The application we want to send notification(s) from.
*/
@AutoValue
public abstract class Application {
/**
* Uniquely identify an application. <br />
* In order to ensure your application's signature is unique, the recommendation is to follow the Internet Media
* type (also known as MIME content type) format as defined in IETF <a href="http://tools.ietf.org/html/rfc2046">RFC 2046</a>
* which contains the application vendor's name - specifically: {@code application/x-vnd-some_vendor.some_app}. <br />
* The signature must not contain spaces. <br />
* Some examples of acceptable signatures:
* <ul>
* <li>{@code application/x-vnd-acme.hello_world}</li>
* <li>{@code application/x-vnd-fullphat.snaRSS}</li>
* </ul>
*
* @return unique identifier.
*/
public abstract String id();
/**
* A name that will identify the application for the user. <br />
* Examples:
* <ul>
* <li>Maven</li>
* <li>Gradle</li>
* </ul>
*
* @return application name.
*/
public abstract String name();
/**
* A timeout to wait for before cancelling application registration or notification sending.
*
* @return timeout in milliseconds, or {@code -1} if not specified.
*/
public abstract long timeout();
/**
* The application icon.
*
* @return application icon.
*/
public abstract Icon icon();
Application() {
// prevent external subclasses
}
public static Builder builder() {
return new AutoValue_Application.Builder()
.timeout(-1);
}
public static Builder builder(String id, String name, Icon icon) {
return builder()
.id(id)
.name(name)
.icon(icon);
}
@AutoValue.Builder
public interface Builder {
Builder id(String id);
Builder name(String name);
Builder icon(Icon icon);
Builder timeout(long timeout);
Application build();
}
}