All Downloads are FREE. Search and download functionalities are using the official Maven repository.

javapns.notification.PushedNotification Maven / Gradle / Ivy

There is a newer version: 2.4.0
Show newest version
package javapns.notification;

import java.util.*;

import javapns.devices.*;
import javapns.notification.exceptions.*;

/**
 * 

An object representing the result of a push notification to a specific payload to a single device.

* *

If any error occurred while trying to push the notification, an exception is attached.

* *

If Apple's Push Notification Service returned an error-response packet, it is linked to the related PushedNotification * so you can find out what the actual error was.

* * @author Sylvain Pedneault */ public class PushedNotification { private Payload payload; private Device device; private ResponsePacket response; private int identifier; private long expiry; private int transmissionAttempts; private boolean transmissionCompleted; private Exception exception; protected PushedNotification(Device device, Payload payload) { this.device = device; this.payload = payload; } protected PushedNotification(Device device, Payload payload, int identifier) { this.device = device; this.payload = payload; this.identifier = identifier; } public PushedNotification(Device device, Payload payload, Exception exception) { this.device = device; this.payload = payload; this.exception = exception; } /** * Returns the payload that was pushed. * * @return the payload that was pushed */ public Payload getPayload() { return payload; } protected void setPayload(Payload payload) { this.payload = payload; } /** * Returns the device that the payload was pushed to. * @return the device that the payload was pushed to */ public Device getDevice() { return device; } protected void setDevice(Device device) { this.device = device; } /** * Returns the connection-unique identifier referred to by * error-response packets. * * @return a connection-unique identifier */ public int getIdentifier() { return identifier; } protected void setIdentifier(int identifier) { this.identifier = identifier; } /** * Returns the expiration date of the push notification. * * @return the expiration date of the push notification. */ public long getExpiry() { return expiry; } protected void setExpiry(long expiry) { this.expiry = expiry; } protected void setTransmissionAttempts(int transmissionAttempts) { this.transmissionAttempts = transmissionAttempts; } protected void addTransmissionAttempt() { transmissionAttempts++; } /** * Returns the number of attempts that have been made to transmit the notification. * @return a number of attempts */ public int getTransmissionAttempts() { return transmissionAttempts; } /** * Returns a human-friendly description of the number of attempts made to transmit the notification. * @return a human-friendly description of the number of attempts made to transmit the notification */ public String getLatestTransmissionAttempt() { if (transmissionAttempts == 0) return "no attempt yet"; switch (transmissionAttempts) { case 0: return "no attempt yet"; case 1: return "first attempt"; case 2: return "second attempt"; case 3: return "third attempt"; case 4: return "fourth attempt"; default: return "attempt #" + transmissionAttempts; } } protected void setTransmissionCompleted(boolean completed) { this.transmissionCompleted = completed; } /** * Indicates if the notification has been streamed successfully to Apple's server. * This does not indicate if an error-response was received or not, but simply * that the library successfully completed the transmission of the notification to * Apple's server. * @return true if the notification was successfully streamed to Apple, false otherwise */ public boolean isTransmissionCompleted() { return transmissionCompleted; } protected void setResponse(ResponsePacket response) { this.response = response; if (response != null && exception == null) exception = new ErrorResponsePacketReceivedException(response); } /** * If a response packet regarding this notification was received, * this method returns it. Otherwise it returns null. * * @return a response packet, if one was received for this notification */ public ResponsePacket getResponse() { return response; } /** *

Returns true if no response packet was received for this notification, * or if one was received but is not an error-response (ie command 8), * or if one was received but its status is 0 (no error occurred).

* *

Returns false if an error-response packet is attached and has * a non-zero status code.

* *

Returns false if an exception is attached.

* *

Make sure you use the Feedback Service to cleanup your list of * invalid device tokens, as Apple's documentation says.

* * @return true if push was successful, false otherwise */ public boolean isSuccessful() { if (!transmissionCompleted) return false; if (response == null) return true; if (!response.isValidErrorMessage()) return true; return false; } /** * Filters a list of pushed notifications and returns only the ones that were successful. * * @param notifications a list of pushed notifications * @return a filtered list containing only notifications that were succcessful */ public static List findSuccessfulNotifications(List notifications) { List filteredList = new Vector(); for (PushedNotification notification : notifications) { if (notification.isSuccessful()) filteredList.add(notification); } return filteredList; } /** * Filters a list of pushed notifications and returns only the ones that failed. * * @param notifications a list of pushed notifications * @return a filtered list containing only notifications that were not successful */ public static List findFailedNotifications(List notifications) { List filteredList = new Vector(); for (PushedNotification notification : notifications) { if (!notification.isSuccessful()) { filteredList.add(notification); } } return filteredList; } /** * Returns a human-friendly description of this pushed notification. */ @Override public String toString() { StringBuilder msg = new StringBuilder(); msg.append("[" + identifier + "]"); msg.append(transmissionCompleted ? " transmitted " + payload + " on " + getLatestTransmissionAttempt() : " not transmitted"); msg.append(" to token " + device.getToken().substring(0, 5) + ".." + device.getToken().substring(59, 64)); if (response != null) { msg.append(" " + response.getMessage()); } if (exception != null) { msg.append(" " + exception); } return msg.toString(); } void setException(Exception exception) { this.exception = exception; } /** * Get the exception that occurred while trying to push this notification, if any. * @return an exception (if any was thrown) */ public Exception getException() { return exception; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy