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

com.windowsazure.messaging.Notification Maven / Gradle / Ivy

package com.windowsazure.messaging;

import java.text.SimpleDateFormat;
import java.util.*;

import org.apache.http.entity.ContentType;

/**
 * 
 * Class representing a generic notification.
 * 
 */
public class Notification {

	private Map headers = new HashMap();
	private String body;
	private ContentType contentType;

	/**
	 * Utility method to set up a native notification for WNS. Sets the
	 * X-WNS-Type headers based on the body provided. If you want to send raw
	 * notifications you have to set the X-WNS header and ContentType after creating this
	 * notification or use createWindowsRawNotification method
	 * 
	 * @param body
	 * @return
	 */
	public static Notification createWindowsNotification(String body) {
		Notification n = new Notification();
		n.body = body;

		n.headers.put("ServiceBusNotification-Format", "windows");

		if (body.contains(""))
			n.headers.put("X-WNS-Type", "wns/toast");
		if (body.contains(""))
			n.headers.put("X-WNS-Type", "wns/tile");
		if (body.contains(""))
			n.headers.put("X-WNS-Type", "wns/badge");

		if (body.startsWith("<")) {
			n.contentType = ContentType.APPLICATION_XML;
		}

		return n;
	}
	
	/**
	 * Utility method to set up a native notification for WNS. Sets the
	 * X-WNS-Type header to "wns/raw" in order of sending of raw notification.
	 * 
	 * @param body
	 * @return
	 */
	public static Notification createWindowsRawNotification(String body) {
		Notification n = new Notification();
		n.body = body;
		n.headers.put("ServiceBusNotification-Format", "windows");
		n.headers.put("X-WNS-Type", "wns/raw");
		n.contentType = ContentType.APPLICATION_OCTET_STREAM;
		return n;
	}

    /**
     * Utility method to set up a native notification for APNs.
     * An expiry Date of 1 day is set by default.
     * @param body
     * @return
     */
    public static Notification createAppleNotifiation(String body) {

        Date now = new Date();
        Date tomorrow = new Date(now.getTime() + 24 * 60 * 60 * 1000);
        return createAppleNotification(body, tomorrow);

    }

    /**
     * Utility method to set up a native notification for APNs.
     * Enables to set the expiry date of the notification for the APNs QoS.
     * @param body
     * @param expiry - the expiration date of this notification.
     *               a null value will be interpreted as 0 seconds.
     * @return
     */
    public static Notification createAppleNotification(String body, Date expiry) {
        Notification n = new Notification();
        n.body = body;
        n.contentType = ContentType.APPLICATION_JSON;

        n.headers.put("ServiceBusNotification-Format", "apple");

        if(expiry != null){
            SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/yyyy hh:mm:ss");
            formatter.setTimeZone(TimeZone.getTimeZone("UTC"));
            String expiryString = formatter.format(expiry.getTime());

            n.headers.put("ServiceBusNotification-Apns-Expiry", expiryString);
        }

        return n;
    }

	/**
	 * Utility method to set up a native notification for GCM.
	 * @deprecated use {@link #createFcmNotifiation(String)} instead.
	 * 
	 * @param body
	 * @return
	 */
	@Deprecated
	public static Notification createGcmNotifiation(String body) {
		Notification n = new Notification();
		n.body = body;
		n.contentType = ContentType.APPLICATION_JSON;

		n.headers.put("ServiceBusNotification-Format", "gcm");

		return n;
	}

	/**
	 * Utility method to set up a native notification for FCM.
	 * 
	 * @param body
	 * @return
	 */
	public static Notification createFcmNotifiation(String body) {
		Notification n = new Notification();
		n.body = body;
		n.contentType = ContentType.APPLICATION_JSON;
 		n.headers.put("ServiceBusNotification-Format", "gcm"); // TODO replace with "fcm" when new version of backend will be released
 		return n;
	}
	
	/**
	 * Utility method to set up a native notification for ADM.
	 * 
	 * @param body
	 * @return
	 */
	public static Notification createAdmNotifiation(String body) {
		Notification n = new Notification();
		n.body = body;
		n.contentType = ContentType.APPLICATION_JSON;

		n.headers.put("ServiceBusNotification-Format", "adm");

		return n;
	}
	
	/**
	 * Utility method to set up a native notification for Baidu PNS.
	 * 
	 * @param body
	 * @return
	 */
	public static Notification createBaiduNotifiation(String body) {
		Notification n = new Notification();
		n.body = body;
		n.contentType = ContentType.APPLICATION_JSON;

		n.headers.put("ServiceBusNotification-Format", "baidu");

		return n;
	}

	/**
	 * Utility method to set up a native notification for MPNS. Sets the
	 * X-WindowsPhone-Target and X-NotificationClass headers based on the body
	 * provided. Raw notifications are not supported for MPNS.
	 * 
	 * @param body
	 * @return
	 */
	public static Notification createMpnsNotifiation(String body) {
		Notification n = new Notification();
		n.body = body;

		n.headers.put("ServiceBusNotification-Format", "windowsphone");

		if (body.contains("")) {
			n.headers.put("X-WindowsPhone-Target", "toast");
			n.headers.put("X-NotificationClass", "2");
		}
		if (body.contains("")) {
			n.headers.put("X-WindowsPhone-Target", "tile");
			n.headers.put("X-NotificationClass", "1");
		}

		if (body.startsWith("<")) {
			n.contentType = ContentType.APPLICATION_XML;
		}

		return n;
	}

	/**
	 * Utility method to create a notification object representing a template notification.
	 * 
	 * @param properties
	 * @return
	 */
	public static Notification createTemplateNotification(
			Map properties) {
		Notification n = new Notification();
		StringBuffer buf = new StringBuffer();
		buf.append("{");
		for (Iterator iterator = properties.keySet().iterator(); iterator
				.hasNext();) {
			String key = iterator.next();
			buf.append("\"" + key + "\":\"" + properties.get(key) + "\"");
			if (iterator.hasNext())
				buf.append(",");
		}
		buf.append("}");
		n.body = buf.toString();

		n.contentType = ContentType.APPLICATION_JSON;

		n.headers.put("ServiceBusNotification-Format", "template");

		return n;
	}

	public Map getHeaders() {
		return headers;
	}

	public void setHeaders(Map headers) {
		this.headers = headers;
	}

	public String getBody() {
		return body;
	}

	public void setBody(String body) {
		this.body = body;
	}

	public ContentType getContentType() {
		return contentType;
	}

	public void setContentType(ContentType contentType) {
		this.contentType = contentType;
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy