From accb95c8213b16005c1630ebaa561e9c54b5c983 Mon Sep 17 00:00:00 2001 From: Amol Nayak Date: Wed, 19 Sep 2012 23:49:42 +0530 Subject: [PATCH 1/2] INTEXT-19: Initial push for the Push Notification adapters for Android devices --- .gitignore | 3 +- spring-integration-pushnotify/README.md | 354 +++++++++++ .../images/GcmFlow.png | Bin 0 -> 104187 bytes .../images/GoogleAPIConsole.png | Bin 0 -> 218434 bytes spring-integration-pushnotify/pom.xml | 91 +++ .../pushnotify/AbstractPushNotifyService.java | 143 +++++ .../pushnotify/PushNotifyService.java | 46 ++ .../integration/pushnotify/PushResponse.java | 35 ++ ...IntegrationPushNotifyNamespaceHandler.java | 34 + .../config/xml/OutboundGatewayParser.java | 276 ++++++++ .../pushnotify/gcm/GCMPushNotifyService.java | 124 ++++ .../gcm/GCMPushNotifyServiceImpl.java | 590 ++++++++++++++++++ .../pushnotify/gcm/GCMPushResponse.java | 94 +++ .../gcm/outbound/GCMOutboundGateway.java | 279 +++++++++ .../main/resources/META-INF/spring.handlers | 1 + .../main/resources/META-INF/spring.schemas | 2 + .../xml/spring-integration-pushnotify-1.0.xsd | 172 +++++ .../config/xml/DummyPushNotifyService.java | 44 ++ .../xml/OutboundGatewayParserTests.java | 136 ++++ .../gcm/GCMOutboundGatewayTests.java | 228 +++++++ .../gcm/GCMPushNotifyServiceImplTests.java | 184 ++++++ .../src/test/resources/log4j.properties | 8 + .../pushnotify-simple-valid-definition.xml | 20 + .../resources/pushnotify-with-all-attrs.xml | 22 + .../pushnotify-with-both-senderid-and-ref.xml | 25 + .../pushnotify-with-literal-and-expr.xml | 21 + .../pushnotify-with-literal-receiverid.xml | 20 + .../pushnotify-with-receiverid-expr.xml | 20 + ...shnotify-with-service-ref-and-senderid.xml | 22 + .../resources/pushnotify-with-service-ref.xml | 21 + .../resources/pushnotify-without-senderid.xml | 19 + 31 files changed, 3033 insertions(+), 1 deletion(-) create mode 100644 spring-integration-pushnotify/README.md create mode 100644 spring-integration-pushnotify/images/GcmFlow.png create mode 100644 spring-integration-pushnotify/images/GoogleAPIConsole.png create mode 100644 spring-integration-pushnotify/pom.xml create mode 100644 spring-integration-pushnotify/src/main/java/org/springframework/integration/pushnotify/AbstractPushNotifyService.java create mode 100644 spring-integration-pushnotify/src/main/java/org/springframework/integration/pushnotify/PushNotifyService.java create mode 100644 spring-integration-pushnotify/src/main/java/org/springframework/integration/pushnotify/PushResponse.java create mode 100644 spring-integration-pushnotify/src/main/java/org/springframework/integration/pushnotify/config/xml/IntegrationPushNotifyNamespaceHandler.java create mode 100644 spring-integration-pushnotify/src/main/java/org/springframework/integration/pushnotify/config/xml/OutboundGatewayParser.java create mode 100644 spring-integration-pushnotify/src/main/java/org/springframework/integration/pushnotify/gcm/GCMPushNotifyService.java create mode 100644 spring-integration-pushnotify/src/main/java/org/springframework/integration/pushnotify/gcm/GCMPushNotifyServiceImpl.java create mode 100644 spring-integration-pushnotify/src/main/java/org/springframework/integration/pushnotify/gcm/GCMPushResponse.java create mode 100644 spring-integration-pushnotify/src/main/java/org/springframework/integration/pushnotify/gcm/outbound/GCMOutboundGateway.java create mode 100644 spring-integration-pushnotify/src/main/resources/META-INF/spring.handlers create mode 100644 spring-integration-pushnotify/src/main/resources/META-INF/spring.schemas create mode 100644 spring-integration-pushnotify/src/main/resources/org/springframework/integration/pushnotify/config/xml/spring-integration-pushnotify-1.0.xsd create mode 100644 spring-integration-pushnotify/src/test/java/org/springframework/integration/pushnotify/config/xml/DummyPushNotifyService.java create mode 100644 spring-integration-pushnotify/src/test/java/org/springframework/integration/pushnotify/config/xml/OutboundGatewayParserTests.java create mode 100644 spring-integration-pushnotify/src/test/java/org/springframework/integration/pushnotify/gcm/GCMOutboundGatewayTests.java create mode 100644 spring-integration-pushnotify/src/test/java/org/springframework/integration/pushnotify/gcm/GCMPushNotifyServiceImplTests.java create mode 100644 spring-integration-pushnotify/src/test/resources/log4j.properties create mode 100644 spring-integration-pushnotify/src/test/resources/pushnotify-simple-valid-definition.xml create mode 100644 spring-integration-pushnotify/src/test/resources/pushnotify-with-all-attrs.xml create mode 100644 spring-integration-pushnotify/src/test/resources/pushnotify-with-both-senderid-and-ref.xml create mode 100644 spring-integration-pushnotify/src/test/resources/pushnotify-with-literal-and-expr.xml create mode 100644 spring-integration-pushnotify/src/test/resources/pushnotify-with-literal-receiverid.xml create mode 100644 spring-integration-pushnotify/src/test/resources/pushnotify-with-receiverid-expr.xml create mode 100644 spring-integration-pushnotify/src/test/resources/pushnotify-with-service-ref-and-senderid.xml create mode 100644 spring-integration-pushnotify/src/test/resources/pushnotify-with-service-ref.xml create mode 100644 spring-integration-pushnotify/src/test/resources/pushnotify-without-senderid.xml diff --git a/.gitignore b/.gitignore index 5a36a45c..ca37175a 100644 --- a/.gitignore +++ b/.gitignore @@ -18,4 +18,5 @@ logs nohup.out out target -spring-integration-aws/src/test/resources/awscredentials.properties \ No newline at end of file +spring-integration-aws/src/test/resources/awscredentials.properties +spring-integration-pushnotify/src/test/resources/services.properties \ No newline at end of file diff --git a/spring-integration-pushnotify/README.md b/spring-integration-pushnotify/README.md new file mode 100644 index 00000000..39e2d950 --- /dev/null +++ b/spring-integration-pushnotify/README.md @@ -0,0 +1,354 @@ +Spring Integration Extension for Push Notifications +==================================================== + +Introduction +------------ +The primary intent of this extension is to provide support in spring integration to enable java applications send push notifications to mobile/handheld devices. + +We will support push notifications to Android and iOS devices as part of this extension. The initial phase adds support for Android +devices with the next phase providing support for iOS devices. + +To enable us to send push notifications to these devices we use the services provided by Google and Apple for Android and iOS devices respectively. Visit the below links for more information on these services + + - [GCM] Google Cloud Messaging + - [APNS] Apple Push Notification Service + + + +A Bit about Push notification +------------------------------- +We want to know when an interesting event has happened on a remote location, say a server application. +There are two ways to achieve this + +- Pull mechanism +- Push mechanism + +In the Pull approach the handheld device continuously polls to check if the event of its interest has happened. +This has two disadvantages + +1. It will unnecessarily send requests to the server to check for updates increasing the network usage and traffic. It could also overwhelm the server when many handheld/mobile devices continuously send requests to it. +2. This polling means that handheld device cannot be put to sleep and the application needs to run periodically reducing the battery life of the device which is crucial. + +An alternative approach to this problem is the push notification, which is similar to the Observer Design Pattern which notifies the listener when an event of it's registered interest has occurred. This addresses both the issues we discussed with the pull approach, +but it now introduces a service in between which interacts with the handheld devices for pushing the notifications to them and receiving the notifications to be pushed from the java application. +The server application never interacts with the handheld device +directly as far as the push is concerned (*the handheld device however might for some activity as we shall see in subsequent sections*) + + +Push to Android Devices +------------------------- + +Android is a Linux based operating system primarily for touch screen devices. +We won't delve into the details of Android OS here as it is out of our scope. +We however do recommend you know the basics concepts of Android Operating system and application development in Android as that would come handy when you run the sample application using the emulator from Android SDK. We shall give steps to setup and get the application running though. +The [Android development guide] is the ultimate reference but can be a bit time consuming to go though it if you just need to get a feel of the Android program and run it. +[Lars Vogel's] tutorial is good enough to start off with. + +To start using Google Cloud Messaging (GCM), you need to enable the service in your Google APIs. Look at the [Getting Started] section of the GCM to know how to create your Google API account and enable the GCM service. +Once you are done enabling the GCMservice we are good to go ahead +with the architecture after we introduce some terminologies here + + - ***Sender Id*** + This is the project id of your Google API Account, this will be unique across and no other user will receive + this project id. + + - ***Application Server*** + The server side application which is interested in notifying the handheld devices of an event that has occurred. + + - ***Mobile/Handheld Device*** + The handheld Android based device that would be receiving the push notifications about the events those have happened on the Application server. + + - ***GCM Servers/Service*** + The servers managed by Google that would taking the message from the application server and be pushing to the mobile device. + + - ***Sender's Token*** + This is the token that was generated when you saw the *Getting Started* section above followed it completely to setup your account. + This id will be sent from the application server using the spring integration extension to the GCM servers with the push request. + + - ***Registration ID*** + This is the unique registration id of the Android device with the GCM Servers. + This id is then passed on by the device to the application server which is then sent by the server in its request for pushing messages to the devices to the GCM. + As far as the push mechanism is concerned, the only time the device directly interacts with the server directly is when it wants to give the registration id. + + + +Now we get on with the typical architecture and flow of the push messaging. + +The below diagram shows the high level interaction of the components +involved in the push messaging. + +![gcm flow diagram](images/GcmFlow.png "Google Cloud Messaging (GCM) Flow") + +We will elaborate the steps below and also mention whose scope the step +lies in + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepStep DescriptionScope
1 + Send a request to GCM services to register the device, the registration request includes the Sender Id (see above for what a Sender Id is) + + Mobile Device/Application +
2 + Receive the request from the mobile device, register it and return the Registration ID to mobile device. This id uniquely identifies the device on the GCM servers. + It is important to note that the GCM Service periodically changes the Registration Ids of the devices and as a result it will push the Registration Ids to the Mobile device even if it has not requested a registration. + + GCM Service +
3 + Send the Registration ID to the Application server. This can be done using a simple HTTP call or opening a socket connection and sending the raw bytes using a predetermined protocol between the server and the mobile application. + Please note that since the GCM Service can send the new Registration Id to the Mobile device asynchronously, the Mobile application needs to send the new Registration id to the Application Server. + + Mobile Device/Application +
4 + Receive the Registration Id sent from the mobile application and store it in an application specific data store, typically a database. + + Application Server +
5 + Send the push notification request to the GCM servers, + this request includes the Registration Ids of the devices to which the data is to be pushed, the text string that represents the data to be pushed and other configuration attributes defined by GCM service. We will discuss these attributes and their significance later. + + Application Server +
6 + Parse the request from the Application Server and push/schedule to push to the Mobile Device/Application. + + GCM Service +
7 + Acknowledge the request with a response containing some predetermined attributes and their values. + These attributes and the possible values will be explained in later sections. + + GCM Service +
8 + Read the response from the GCM servers and take appropriate actions. Store the relevant attributes in the response in the data store discarding the rest. + + Application Server +
9 + Receive the push from the GCM Servers and execute the logic in the application for an action to be taken. + + Mobile Device/Application +
+ +In the above sequence of actions, step 1 to 4 happens only when the devices receives a registration id. All other steps 5 - 9 happens everytime the Application Server sends a push notification request. + +Where Does Spring Integration fit in the above steps? +------------------------------------------------------ + +Spring Integration will be used in all the steps where the scope is ***Application Server***. + + +This particular module for push notification along with other Spring Integration adapters together can be used to implement the the Application Server functionality. + + +For example, to implement the step 4 we can use the HTTP or the TCP/UDP inbound adapter/gateway support of spring integration to receive the Registration Id from the Mobile device. Upon receiving the ID we can use the JDBC or JPA support(Spring Integration version 2.2 and above) to store the data in a relational database. Adapters for other NoSQL solutions like Mongo DB and Redis is also available starting Spring Integration 2.2. These too can be used to store the Registration ids of the devices. + +For step 5 we will be using the push notification gateway to GCM Services. The details about this adapter, the important classes, the request message format, various attributes in the request and response will be explained in later sections in details. + +For step 8, the push notification gateway for GCM will return an object containing various response parameters from the GCM Service. The possible values and their meaning will be explained in later section. The application is now responsible to read the response values and store the relevant ones in the datastore using any of the adapters we have used in step 4 to interact with the underlying datastore. + +Visit the [Spring Integration Documentation] for more details on these adapters +(Note: This is currently 2.1.x, will have 2.2.x and above here once 2.2 goes GA) + +For sake of simplicity, we haven't implemented all the steps in our sample application. +Since our focus is on sending and receiving the push notifications, we will be copying the Registration Id of the device to which we will be sending the push notification manually in the sample application that would be sending the push notification (rather than letting the mobile application sending it to the server over TCP/UDP or HTTP request). + + +Having said that, let us look at the important classes and interfaces of the library + +Important classes and interfaces of the push notification library +------------------------------------------------------------------ + +For all the class names, *o.s.i.p* is used as the shortened version of *org.springframework.integration.pushnotify* + +1. *o.s.i.p.PushResponse* Implemented by the classes that contain the response of the push. It just defines one method, *isMulticast* to indicate if the push was for multiple devices or a single device. +2. *o.s.i.p.PushNotifyService* +This is the core interface that defines one method *push* that returns an instance of *o.s.i.p.PushResponse*. The *push* method accepts three parameters + +- A Map with String key and values for the data that needs to be pushed. The data is always sent in key value pair. The accepted type of the value is dependent on the particular service implementation. +- A Map of attributes as String key value pair, these are the attributes that are specific to the implementation which may affect the behavior of the push messaging. +- A var args parameter, that contains the String values which are the identifiers of the mobile device to which the push is to be sent. +This value should be recognized by the service provider of push messaging. +3. *o.s.i.p.AbstractPushNotifyService* This is the generic service that is to be extended by all the specific implementations of the push messaging. It implements *o.s.i.p.PushNotifyService*. +This class defines one abstract method *doPush* which is expected to be implemented by the specific implementation. If this method returns *null*, it is assumed that the message sending has failed and needs to be retried. If retries are enabled, [exponential backoff] approach is used for retrying upto the configured maximum time for retry. +4. *o.s.i.p.gcm.GCMPushNotifyService* +This is the core interface that extends *org.springframework.integration.pushnotify.PushNotifyService* interface. +This interface does not define any additional methods but only some constants which are relevant to GCM push messaging. +5. *o.s.i.p.gcm.GCMPushResponse* It extends from *o.s.i.p.PushResponse* and provides the caller who invoked the push with information returned from the GCM servers. It defines the below methods. +- *getResponseCode()* The HTTP response code for the push request. Possible response code are 200 (successful), 400 (bad request, containing invalid fields etc), 401 (authentication error), 500(internal error) and 503 (temporarily unavailable). +- *getErrorCodes()* The error codes if the response is other than 200 or 503. The value is a Map with the receiver id as a String and the value is the error code returned by GCM. +- *getSentMessageIds()* Identifiers from the server acknowledging the receipt of the message sent. +The Map contains the key which is the Receiver Id provided and the value is the message id received from the GCM server. +- *getCanonicalIds()* The Map returning the canonical ids, if any. +This id indicates that the device to which the message was sent has a new Registration Id with the server other than the one sent with the request. +The sender should replace the Registration Id of the receiver with this canonical id and use it for any subsequent requests sent to this device. +The key is the original Registration Id sent in the request and the value is the Canonical Id, that is the new Registration Id of the device. The application should check this response and replace the Registration Id it has with the canonical id received in its data store. As GCM will eventually discard the old Registration Id, all requests containing the old id will start failing. +- *getSuccessfulMessages()* The number of successful pushes from the provided number of Registration Ids +- *getFailedMessages()* Gets the number of messages which failed to execute a push to the remote device. +- *getNumberOfCanonicalIds()* Gets the number of canonical ids present in the response. +This will be same as the size of the map returned by *getCanonicalIds()*. +- *getMulticastId()* Gets an id representing the multicast id, if the request was to push to multiple Registration Ids. + +6. *o.s.i.p.gcm.GCMPushNotifyServiceImpl* The implementation class for the GCM Push messaging. +It extends from *o.s.i.p.AbstractPushNotifyService* and implements *o.s.i.p.gcm.GCMPushNotifyService* interface. The result of push is an instance of *o.s.i.p.gcm.GCMPushResponse*. +7. *o.s.i.p.gcm.GCMOutboundGateway* The gateway implementation of the GCM. This classes uses *o.s.i.p.gcm.GCMPushNotifyService* to send push notifications. +The response of this gateway is an instance of type *o.s.i.p.gcm.GCMPushResponse*. There are some attributes of this class which we will discuss when we introduce the request attributes to GCM service. + + +See [GCM Response] for more details about the response received from the GCM service. + +Handling the request message +----------------------------- +Now that we have seen the important classes, their purpose and their methods, let us now look at the supported request attributes for GCM and see how the payload of the incoming message handled by the *o.s.i.p.gcm.GCMOutboundGateway* class. + +Below table gives us the attributes supported by GCM. + + + + + + + + + + + + + + + + + + + + +
+   + + Attribute + + Description +
1collapse_key + It is a String value that is used to group a number of messages together. + It plays a part when the device is offline and the messages are pending to be delivered on the GCM server. Setting the collapse key collapses any message with the same collapse + key on the server and ensures only the last message gets delivered to the mobile device when it comes online. +
2delay_while_idleIndicates that the message should not be delivered when the device is idle and should be delayed till it becomes active. If a collapse key is mentioned, the rule mentioned above will be applied while delivery when the device becomes active.
3time_to_liveIndicates how long in seconds the message is to be kept on GCM servers if the device is offline or non reachable before it is discarded.
+ +For the above three attributes, the class *o.s.i.p.gcm.GCMOutboundGateway* has three setters, each of type *o.s.expression.Expression*. +If set, they are evaluated with the root object as the incoming message to compute the value of the above three attributes. +Though the attribute type is String, the value of time to live expression be parsable to a Long. The three setters to set these expression are +*setCollapseKeyExpression*, *setDelayWhileIdleExpression* and *setTimeToLiveExpression*. + +For the Receiver Ids, there is an expression that can be set in the gateway class using the *setReceiverIdsExpression* expression. This expression is evaluated with root object as the incoming message and the result type can either be a String, in which case it is assumed to be the only receiver id, a String[] representing multiple receiver ids or a Collection of String which again represents multiple receiver ids. + +Now for the payload. GCM accepts payload of type Map with key and value both as String types. +Hence the payload of the incoming message to gateway can be of three types. + +- Map, in this case the key has to be String and the value has to be String as well. +If the value is not a String, its toString representation is used and sent in the request. +- String, this is straight forward and the payload is sent as the value in the map. The key defaults to value *Data* and can be overridden by invoking the *setDefaultKey* method of the gateway and passing the required default key value. +- Any object, in this case the conversion service is used to convert it to a String if possible. +If it can be, then the converted String value is sent as the value with the *defaultKey* as the key as above. + +If none of the above three is possible, then a *o.s.i.MessagingException* is thrown. + +Namespace support for push messaging +------------------------------------- +Spring Integration's Push Messaging does provide namespace support similar to other Spring Integration components to abstract the underlying bean instantiation and wiring from the developer. +The developer's work is a simple as defining the xml tags using the namespace support with some predetermined attributes and all the necesary bean instantiation and wiring is done transparantly when the application context comes up. + +Below is the sample xml definition for setting up a GCM outbound gateway with all the possible attributes + + + +The expression and the literal value for each are mutually exclusive to each other. +For e.g. the *collapse-key* and the *collapse-key-expression* are mutually exclusive to each other. +The type attribute is mandatory that identifies the type of the service to push to. Currently *android* is the only value supported. +We have plans to support more services in future. + +Executing Testcases +------------------- + +All the test cases are present in the src/test/java folder + +The three important test cases are + +- *OutboundGatewayParserTests* +- *GCMOutboundGatewayTests* +- *GCMPushNotifyServiceImplTests* + +Of the above tests, *GCMPushNotifyServiceImplTests* is the test that connects to the GCM servers and tests sending push messages. +This test expects a properties file *services.properties* in the class path with two properties, *senderId* and *receiverId*. +The senderId is is the value of the API Key from your Google API console as seen below + +![Google API Console](images/GoogleAPIConsole.png) + +For the receiver id, run the sample and from the emulator register the device as per the teps given in the readme of the sample. +The registration id returned by the GCM server can be used to test the push from the test cases to the android application running on the emulator + + +[GCM]:http://developer.android.com/guide/google/gcm/index.html +[APNS]:http://developer.apple.com/library/mac/#documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/ApplePushService/ApplePushService.html +[Android development guide]:http://developer.android.com/guide/components/fundamentals.html +[Lars Vogel's]: http://www.vogella.com/articles/Android/article.html +[Getting Started]:http://developer.android.com/guide/google/gcm/gs.html +[Spring Integration Documentation]:http://static.springsource.org/spring-integration/reference/htmlsingle/ +[exponential backoff]:http://en.wikipedia.org/wiki/Exponential_backoff +[GCM Response]: http://developer.android.com/guide/google/gcm/gcm.html#response \ No newline at end of file diff --git a/spring-integration-pushnotify/images/GcmFlow.png b/spring-integration-pushnotify/images/GcmFlow.png new file mode 100644 index 0000000000000000000000000000000000000000..fed3ed55df16d27a02ac3665aeba8d2de483f39d GIT binary patch literal 104187 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

=+CJ%-oAIGRsOy0Y1aN9?g3_`vQgsi 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℞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 + + + 4.0.0 + org.springframework.integration + spring-integration-pushnotify + 1.0.0.BUILD-SNAPSHOT + + The project has components that enable java applications to send push notifications to + hand held devices running on Android platform. The Google Cloud Messaging (GCM) service is + used to send out notifications to the hand held devices running on Android platform. + + + + The Apache Software License, Version 2.0 + http://www.apache.org/licenses/LICENSE-2.0.txt + repo + + + + + 2.2.1 + + + + + + maven-compiler-plugin + + 1.6 + 1.6 + + + + maven-surefire-plugin + + + **/*Tests.java + + + **/*Abstract*.java + + + + + + + + + springsource-libs-milestone + Spring Framework Maven Milestone Repository + https://repo.springsource.org/libs-milestone + + + + + + org.springframework.integration + spring-integration-core + 2.2.0.M3 + + + + org.codehaus.jackson + jackson-core-asl + 1.9.9 + + + + org.codehaus.jackson + jackson-mapper-asl + 1.9.9 + + + + org.springframework.integration + spring-integration-test + 2.2.0.M3 + test + + + + junit + junit-dep + 4.10 + test + + + \ No newline at end of file diff --git a/spring-integration-pushnotify/src/main/java/org/springframework/integration/pushnotify/AbstractPushNotifyService.java b/spring-integration-pushnotify/src/main/java/org/springframework/integration/pushnotify/AbstractPushNotifyService.java new file mode 100644 index 00000000..b0209335 --- /dev/null +++ b/spring-integration-pushnotify/src/main/java/org/springframework/integration/pushnotify/AbstractPushNotifyService.java @@ -0,0 +1,143 @@ +/* + * Copyright 2002-2012 the original author or authors. + * + * 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 org.springframework.integration.pushnotify; + +import java.io.IOException; +import java.util.Map; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.springframework.util.Assert; + +/** + * The Common superclass implementing the common validations and other functionalities + * for the {@link PushNotifyService} implementations + * + * @author Amol Nayak + * + * @since 1.0 + * + */ +public abstract class AbstractPushNotifyService implements PushNotifyService { + + protected final Log logger = LogFactory.getLog(getClass()); + + /** + * Flag to enable the service to retry the requests that were unsuccessful either due to + * network issues or some recoverable error from the server. If set to true, exponential + * backoff and retry is used. Enabled by default. + */ + private volatile boolean retryRequests = true; + + private static final long INITIAL_RETRY_DELAY = 1000L; + + private volatile long maxRetryDelay = 10000L; //Defaults to 10 seconds. + + + /** + * The implemented version does some basic validation and delegates to + * the {@link #doPush(Map, String...) + * + * @param message + * @param attributes + * @param receiverId + * @return + */ + @Override + public final PushResponse push(Map message, Map attributes, String... receiverIds) + throws IOException { + Assert.notNull(message, "provided message is 'null'"); + Assert.isTrue(message.size() > 0,"provided message is an empty map"); + Assert.notNull(receiverIds,"provided receiver id is 'null'"); + Assert.isTrue(receiverIds.length > 0, "Must provide at least on receiver id"); + boolean retryRequest = retryRequests; + PushResponse response; + int base = 1; + int retryAttempt = 1; //for logging + //logic to exponentially retry the request + long delta = (long)(Math.random() * 1000); + while(true) { + response = doPush(message, attributes, receiverIds); + if(response == null && retryRequest) { + long delay = INITIAL_RETRY_DELAY * (2 * base - 1)/2; + long totalDelay = delay + delta; + if(totalDelay <= maxRetryDelay) { + String logMessage = String.format("Retry attempt %d, retrying after %d ms", retryAttempt++, totalDelay); + logger.info(logMessage); + base *= 2; + try { + Thread.sleep(totalDelay); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } + } + else { + break; + } + } + else { + break; + } + } + return response; + } + + /** + * The sub classes need to implement the method that will push the given messages to the provided + * receiver ids + * + * @param message + * @param attributes + * @param receiverIds + * @return + */ + protected abstract PushResponse doPush(Map message, Map attributes, String... receiverIds) throws IOException; + + /** + * Checks if requests are to be retried using exponential backoff or not. + * @return + */ + public boolean shouldRetryRequests() { + return retryRequests; + } + + /** + * Set to true if requests are to be retried using exponential backoff. + * @param retryRequests + */ + public void setRetryRequests(boolean retryRequests) { + this.retryRequests = retryRequests; + } + + /** + * Gets the max interval for which the request thread would sleep to retry a request + * to the service + * + */ + public long getMaxRetryDelay() { + return maxRetryDelay; + } + + /** + * Sets the max interval in milli seconds for which the thread will sleep before retrying + * the request again with the push services + * + * @param maxRetryInterval + */ + public void setMaxRetryDelay(long maxRetryDelay) { + this.maxRetryDelay = maxRetryDelay; + } +} diff --git a/spring-integration-pushnotify/src/main/java/org/springframework/integration/pushnotify/PushNotifyService.java b/spring-integration-pushnotify/src/main/java/org/springframework/integration/pushnotify/PushNotifyService.java new file mode 100644 index 00000000..a6347f8d --- /dev/null +++ b/spring-integration-pushnotify/src/main/java/org/springframework/integration/pushnotify/PushNotifyService.java @@ -0,0 +1,46 @@ +/* + * Copyright 2002-2012 the original author or authors. + * + * 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 org.springframework.integration.pushnotify; + +import java.io.IOException; +import java.util.Map; + +/** + * The core service that would be performing the push operations to the hand held + * devices from the java applications + * + * @author Amol Nayak + * + * @since 1.0 + * + */ +public interface PushNotifyService { + + /** + * Push the message to multiple receivers identified by these multiple + * receiver ids. + * + * @param message The map that represents the key value pair of the message to be sent. + * @param attributes The map of attributes apart from the message that might be needed to be + * sent along with the request. These could be the service specific configuration parameters + * that would be used to change the behavior of the message sent. The values of the attributes + * if defined by the implementation. + * @param receiverId The unique identifiers that identifies the target devices to which the + * notification is to be sent. + * @return + */ + PushResponse push(Map message, Map attributes, String... receiverIds) throws IOException; +} diff --git a/spring-integration-pushnotify/src/main/java/org/springframework/integration/pushnotify/PushResponse.java b/spring-integration-pushnotify/src/main/java/org/springframework/integration/pushnotify/PushResponse.java new file mode 100644 index 00000000..53292371 --- /dev/null +++ b/spring-integration-pushnotify/src/main/java/org/springframework/integration/pushnotify/PushResponse.java @@ -0,0 +1,35 @@ +/* + * Copyright 2002-2012 the original author or authors. + * + * 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 org.springframework.integration.pushnotify; + +/** + * The response for the invocation of push to a single device using the {@link PushNotifyService} + * + * @author Amol Nayak + * + * @since 1.0 + * + */ +public interface PushResponse { + + /** + * True if the response is a multicast response, that is the response is for a request to + * push to multiple devices in one request + * + * @return + */ + boolean isMulticast(); +} diff --git a/spring-integration-pushnotify/src/main/java/org/springframework/integration/pushnotify/config/xml/IntegrationPushNotifyNamespaceHandler.java b/spring-integration-pushnotify/src/main/java/org/springframework/integration/pushnotify/config/xml/IntegrationPushNotifyNamespaceHandler.java new file mode 100644 index 00000000..a9e02a76 --- /dev/null +++ b/spring-integration-pushnotify/src/main/java/org/springframework/integration/pushnotify/config/xml/IntegrationPushNotifyNamespaceHandler.java @@ -0,0 +1,34 @@ +/* + * Copyright 2002-2012 the original author or authors. + * + * 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 org.springframework.integration.pushnotify.config.xml; + +import org.springframework.integration.config.xml.IntegrationNamespaceHandler; + +/** + * The namespace handler for the Integration push notify adapters + * + * @author Amol Nayak + * + * @since 1.0 + * + */ +public class IntegrationPushNotifyNamespaceHandler extends IntegrationNamespaceHandler { + + @Override + public void init() { + this.registerBeanDefinitionParser("outbound-gateway", new OutboundGatewayParser()); + } +} diff --git a/spring-integration-pushnotify/src/main/java/org/springframework/integration/pushnotify/config/xml/OutboundGatewayParser.java b/spring-integration-pushnotify/src/main/java/org/springframework/integration/pushnotify/config/xml/OutboundGatewayParser.java new file mode 100644 index 00000000..4dceca80 --- /dev/null +++ b/spring-integration-pushnotify/src/main/java/org/springframework/integration/pushnotify/config/xml/OutboundGatewayParser.java @@ -0,0 +1,276 @@ +/* + * Copyright 2002-2012 the original author or authors. + * + * 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 org.springframework.integration.pushnotify.config.xml; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.xml.ParserContext; +import org.springframework.expression.Expression; +import org.springframework.expression.ExpressionParser; +import org.springframework.expression.common.LiteralExpression; +import org.springframework.expression.spel.standard.SpelExpressionParser; +import org.springframework.integration.config.xml.AbstractConsumerEndpointParser; +import org.springframework.integration.handler.AbstractReplyProducingMessageHandler; +import org.springframework.integration.pushnotify.PushNotifyService; +import org.springframework.integration.pushnotify.gcm.GCMPushNotifyServiceImpl; +import org.springframework.integration.pushnotify.gcm.outbound.GCMOutboundGateway; +import org.springframework.util.StringUtils; +import org.w3c.dom.Element; +import org.w3c.dom.NamedNodeMap; + +/** + * The parser for the outbound-gateway element in int-pushnotify namespace + * + * @author Amol Nayak + * + * @since 1.0 + * + */ +public class OutboundGatewayParser extends AbstractConsumerEndpointParser { + + + private static final Log logger = LogFactory.getLog(OutboundGatewayParser.class); + + public static final String ADAPTER_TYPE = "type"; + private final Map gatewayTypes; + + public OutboundGatewayParser() { + super(); + gatewayTypes = new HashMap(); + //Just add in this map one instance for each type supported + gatewayTypes.put("android", new AndroidPushNotifyGatewayType()); + } + + @Override + protected BeanDefinitionBuilder parseHandler(Element element, + ParserContext parserContext) { + String adapterType = element.getAttribute(ADAPTER_TYPE); + if(!StringUtils.hasText(adapterType)) { + parserContext + .getReaderContext() + .error("Attribute " + ADAPTER_TYPE + " is mandatory and needs to have a non empty value", + adapterType); + } + + PushNotifyGatewayType gatewayType = gatewayTypes.get(adapterType.toLowerCase()); + if(gatewayType == null) { + parserContext + .getReaderContext() + .error("Type " + adapterType + " is not currently supported", element); + } + + //check if all the given attributes are supported by this type, else flag a warning + List attributes = new ArrayList(); + NamedNodeMap attributeMap = element.getAttributes(); + for(int i = 0 ; i < attributeMap.getLength(); i++) { + attributes.add(attributeMap.item(i).getNodeName()); + } + attributes.removeAll(gatewayType.getSupportedAttributes()); + if(attributes.size() > 0) { + //unsupported attributes present + StringBuilder message = new StringBuilder().append(attributes.get(0)); + for(int i = 1; i < attributes.size(); i++) { + message.append(", ").append(attributes.get(i)); + } + logger.warn("Attributes " + message + + " are not supported by gateway of type " + gatewayType.getGatewayType()); + } + BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(gatewayType.getHandler()); + gatewayType.setupGateway(builder, element, parserContext); + return builder; + } + + private abstract class PushNotifyGatewayType { + + private final String gatewayType; + private final Class handler; + private final Class service; + private final List supportedAttributes = new ArrayList(); + private final ExpressionParser parser = new SpelExpressionParser(); + + public PushNotifyGatewayType(String gatewayType, + Class handler, + Class service, String... supportedAttributes) { + super(); + this.gatewayType = gatewayType; + this.handler = handler; + this.service = service; + if(supportedAttributes != null && supportedAttributes.length > 0) { + this.supportedAttributes.addAll(Arrays.asList(supportedAttributes)); + } + } + + public String getGatewayType() { + return gatewayType; + } + + public Class getHandler() { + return handler; + } + + public Class getService() { + return service; + } + + public List getSupportedAttributes() { + return new ArrayList(supportedAttributes); + } + + public abstract void setupGateway(BeanDefinitionBuilder builder, Element element, ParserContext parserContext); + + /** + * Helper method that does the below steps + * + * 1. If both are null, return null + * 2. If present, the literalValue and expressionValue are supposed to be + * mutually exclusive to each other. If not, its an error + * 3. If one of them is present, return an appropriate {@link Expression} instance + * + * @param element + * @param literalValueAttribute + * @param expressionValueAttribute + * @param context + * + * @return + */ + protected Expression getExpression(Element element, String literalValueAttribute, + String expressionValueAttribute, ParserContext context) { + Expression expression = null; + String literalValue = element.getAttribute(literalValueAttribute); + String expressionValue = element.getAttribute(expressionValueAttribute); + boolean hasLiteralValue = StringUtils.hasText(literalValue); + boolean hasExpressionValue = StringUtils.hasText(expressionValue); + if(hasLiteralValue || hasExpressionValue) { + if(hasLiteralValue && hasExpressionValue) { + context.getReaderContext() + .error(literalValueAttribute + " and " + expressionValueAttribute + + " are mutually exclusive to each other", element); + } + if(hasLiteralValue) { + expression = new LiteralExpression(literalValue); + } + else { + expression = parser.parseExpression(expressionValue); + } + } + return expression; + } + } + + private class AndroidPushNotifyGatewayType extends PushNotifyGatewayType { + + public AndroidPushNotifyGatewayType() { + super("android", + GCMOutboundGateway.class, + GCMPushNotifyServiceImpl.class, + "id" + ,"request-channel" + ,"reply-channel" + ,"type" + ,"service-ref" + ,"sender-id" + ,"sender-id-ref" + ,"collapse-key" + ,"collapse-key-expression" + ,"time-to-live" + ,"time-to-live-expression" + ,"delay-while-idle" + ,"delay-while-idle-expression" + ,"receiver-id" + ,"receiver-id-expression"); + } + + @Override + public void setupGateway(BeanDefinitionBuilder builder, Element element, ParserContext parserContext) { + String serviceRef = element.getAttribute("service-ref"); + String senderId = element.getAttribute("sender-id"); + String senderIdRef = element.getAttribute("sender-id-ref"); + boolean hasSenderId = StringUtils.hasText(senderId); + boolean hasSenderIdRef = StringUtils.hasText(senderIdRef); + + if(StringUtils.hasText(serviceRef)) { + if(hasSenderId || hasSenderIdRef) { + parserContext.getReaderContext() + .error("sender-id and sender-id-ref cannot be defined when service-ref is provided", + element); + } + builder.addConstructorArgReference(serviceRef); + } + else { + if(hasSenderId && hasSenderIdRef) { + parserContext.getReaderContext() + .error("sender-id and sender-id-ref are mutually exclusive to each other", + element); + } + + if(!(hasSenderId ^ hasSenderIdRef)) { + parserContext.getReaderContext() + .error("Atleast one of sender-id and sender-id-ref is required when service-ref is not provided", + element); + } + + BeanDefinitionBuilder service = BeanDefinitionBuilder.genericBeanDefinition(getService()); + if(hasSenderId) { + service.addConstructorArgValue(senderId); + } + else { + service.addConstructorArgReference(senderIdRef); + } + builder.addConstructorArgValue(service.getBeanDefinition()); + } + + //Collapse key + Expression collapseKeyExpr = + getExpression(element, "collapse-key", "collapse-key-expression", parserContext); + if(collapseKeyExpr != null) { + builder.addPropertyValue("collapseKeyExpression", collapseKeyExpr); + } + + //Time to live + Expression timeToLiveExpr = + getExpression(element, "time-to-live", "time-to-live-expression", parserContext); + if(timeToLiveExpr != null) { + builder.addPropertyValue("timeToLiveExpression", timeToLiveExpr); + } + + //Delay while idle expression + Expression delayWhileIdleExpr = + getExpression(element, "delay-while-idle", "delay-while-idle-expression", parserContext); + if(delayWhileIdleExpr != null) { + builder.addPropertyValue("delayWhileIdleExpression", delayWhileIdleExpr); + } + + //Receiver id expression + Expression receiverIdExpr = + getExpression(element, "receiver-id", "receiver-id-expression", parserContext); + if(receiverIdExpr != null) { + builder.addPropertyValue("receiverIdsExpression", receiverIdExpr); + } + } + } + + @Override + protected String getInputChannelAttributeName() { + return "request-channel"; + } +} diff --git a/spring-integration-pushnotify/src/main/java/org/springframework/integration/pushnotify/gcm/GCMPushNotifyService.java b/spring-integration-pushnotify/src/main/java/org/springframework/integration/pushnotify/gcm/GCMPushNotifyService.java new file mode 100644 index 00000000..85a11902 --- /dev/null +++ b/spring-integration-pushnotify/src/main/java/org/springframework/integration/pushnotify/gcm/GCMPushNotifyService.java @@ -0,0 +1,124 @@ +/* + * Copyright 2002-2012 the original author or authors. + * + * 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 org.springframework.integration.pushnotify.gcm; + +import org.springframework.integration.pushnotify.PushNotifyService; + +/** + * The interface containing the methods specific to Google Cloud Messaging (GCM) + * push messaging to android devices. + * + * @author Amol Nayak + * + * @since 1.0 + * + */ +public interface GCMPushNotifyService extends PushNotifyService { + + /** + * The parameter used to carry the registration id of the device to which the notification + * is to be sent + */ + public static final String REGISTRATION_ID = "registration_id"; + + /** + * The parameter used to carry the registration ids of the device to which the notification + * is to be sent + */ + public static final String REGISTRATION_IDS = "registration_ids"; + + /** + * The collapse key parameter of the request + */ + public static final String COLLAPSE_KEY = "collapse_key"; + + /** + * The prefix to the parameter for sending the data in case the request + * is sent out as plain text + */ + public static final String DATA_KEY_PREFIX = "data."; + + /** + * The key used in the JSON request to send the data to the GCM service + */ + public static final String DATA_KEY = "data"; + + /** + * The key used to specify if the messages should be held and not pushed if + * the device is idle. + */ + public static final String DELAY_WHILE_IDLE = "delay_while_idle"; + + /** + * The parameter that gives the time the message will live and will not be discarded + * before it is delivered to the device. + */ + public static final String TIME_TO_LIVE = "time_to_live"; + + /** + * The key in the JSON response that indicates that an error has occurred while sending the message + */ + public static final String ERROR = "error"; + + /** + * The key in the JSON response giving the message id of the successfully sent message + */ + public static final String MESSAGE_ID = "message_id"; + + /** + *The key in the JSON response giving the canonnical id of the device to which the message was posted + *may be present only if the message_id attribute is present + */ + public static final String CANONICAL_MESSAGES = "canonical_ids"; + + /** + * The key giving the number of failed messages in the request + */ + public static final String FAILURE_MESSAGES = "failure"; + + /** + * The key giving the number of successful messages in the request + */ + public static final String SUCCESS_MESSAGES = "success"; + + /** + * The key giving a unique id to the multi cast request, this is returned by the GCM server + */ + public static final String MULTICAST_ID = "multicast_id"; + + + /** + * The key present in the pain text response indicating the request is successful, the value + * of this key is the message id + */ + public static final String RESPONSE_TOKEN_ID = "id"; + + + /** + * The content type if the request is of type JSON. + */ + public static final String JSON_TYPE = "application/json"; + + /** + * The content type if the request is of type plain text. + */ + public static final String PLAIN_TEXT_TYPE = "application/x-www-form-urlencoded;charset=UTF-8"; + + /** + * The Web service for the GCM services + */ + public static final String GCM_SERVICE_URL = "https://android.googleapis.com/gcm/send"; +} diff --git a/spring-integration-pushnotify/src/main/java/org/springframework/integration/pushnotify/gcm/GCMPushNotifyServiceImpl.java b/spring-integration-pushnotify/src/main/java/org/springframework/integration/pushnotify/gcm/GCMPushNotifyServiceImpl.java new file mode 100644 index 00000000..950e8032 --- /dev/null +++ b/spring-integration-pushnotify/src/main/java/org/springframework/integration/pushnotify/gcm/GCMPushNotifyServiceImpl.java @@ -0,0 +1,590 @@ +/* + * Copyright 2002-2012 the original author or authors. + * + * 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 org.springframework.integration.pushnotify.gcm; + +import java.io.BufferedReader; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.io.UnsupportedEncodingException; +import java.net.HttpURLConnection; +import java.net.URL; +import java.net.URLEncoder; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.codehaus.jackson.JsonFactory; +import org.codehaus.jackson.JsonGenerator; +import org.codehaus.jackson.map.ObjectMapper; +import org.springframework.integration.pushnotify.AbstractPushNotifyService; +import org.springframework.integration.pushnotify.PushResponse; +import org.springframework.util.Assert; +import org.springframework.util.StringUtils; + +/** + * The implementation of the push messaging for Android hand held devices + * that used Google's Cloud Messaging (GCM) to push messages. + * + * @author Amol Nayak + * + * @since 1.0 + * + */ +public class GCMPushNotifyServiceImpl extends AbstractPushNotifyService + implements GCMPushNotifyService { + + private static final Log logger = LogFactory.getLog(GCMPushNotifyServiceImpl.class); + + + private static final String DEFAULT_ENCODING = "UTF-8"; + + /** + * The Sender id that would be used while making request to the GCM services + */ + private final String senderId; + + + + public GCMPushNotifyServiceImpl(String senderId) { + Assert.notNull(senderId, "senderId is 'null'"); + this.senderId = senderId; + } + + + /** + * Gets the content type of the content to be posted to the servers based in whether the type is + * JSON or plain text, the value is application/json or application/x-www-form-urlencoded;charset=UTF-8 + * for JSON and plain text content respectively + * + * @return + */ + private String getContentType(boolean sendAsJson) { + return sendAsJson? JSON_TYPE : PLAIN_TEXT_TYPE; + } + + + /* (non-Javadoc) + * @see org.springframework.integration.pushnotify.AbstractPushNotifyService#doPush(java.util.Map, java.lang.String[]) + */ + @Override + protected PushResponse doPush(Map message, Map attributes, String... receiverIds) { + + Map copy = null; + if(attributes != null) { + copy = new HashMap(attributes); + } + + try { + if(receiverIds.length > 1) { + return sendAsJson(message, copy, receiverIds); + } + else { + return sendAsPlainText(message, copy, receiverIds[0]); + } + } catch (IOException e) { + // TODO handle and throw a GCM Messaging exception + return null; + } + } + + /** + * The private method used to request to the GCM using plain text request type + * + * @param message + * @param attributes + * @param receiverId + */ + private PushResponse sendAsPlainText(Map message, Map attributes, String receiverId) + throws IOException{ + + String requestString = getPlainTextMessageBody(message, attributes, receiverId); + if(logger.isDebugEnabled()) { + logger.debug("Request String is " + requestString); + } + String contentType = getContentType(false); + return postMessage(contentType, requestString, receiverId); + } + + /** + * Posts the given message to to the GCM service + * + * @param contentType + * @param requestMessage + * @param receiverIds + * + * @return + */ + private GCMPushResponse postMessage(String contentType, String requestMessage, String... receiverIds) throws IOException { + URL url = new URL(GCM_SERVICE_URL); + HttpURLConnection connection = (HttpURLConnection)url.openConnection(); + connection.setDoOutput(true); + byte[] bytes = requestMessage.getBytes(); + connection.setRequestMethod("POST"); + connection.setRequestProperty("Content-Type", contentType); + connection.setRequestProperty("Authorization", "key=" + senderId); + connection.setFixedLengthStreamingMode(bytes.length); + OutputStream out = connection.getOutputStream(); + out.write(bytes); + out.flush(); + //Now Get the response + if(JSON_TYPE.equals(contentType)) { + return handleJSONResponse(connection, receiverIds); + } + else { + return handlePlainTextResponse(connection, receiverIds); + } + + } + + /** + * Parses the response from the GCM server for a request made with JSON message + * and constructs the instance of {@link GCMPushResponse} + * + * @param connection + * @param receiverIds + * + * @return + * @throws IOException + */ + @SuppressWarnings("unchecked") + private GCMPushResponse handleJSONResponse(HttpURLConnection connection, String... receiverIds) + throws IOException { + final int respCode = connection.getResponseCode(); + final Long multicastId; + final Integer successfulMessages; + final Integer failedMessages; + final Integer canonicalMessages; + final Map messageIds; + final Map canonicalIds; + final Map errorCodes; + if(respCode == 200) { //successful + messageIds = new HashMap(); + canonicalIds = new HashMap(); + errorCodes = new HashMap(); + + BufferedReader reader = new BufferedReader( + new InputStreamReader(connection.getInputStream())); + String line = reader.readLine(); + if(logger.isDebugEnabled()) { + logger.debug("JSON Response from the GCM server is " + line); + } + ObjectMapper mapper = new ObjectMapper(); + Map responseMap = mapper.readValue(new ByteArrayInputStream(line.getBytes()), Map.class); + + multicastId = (Long)responseMap.get(MULTICAST_ID); + successfulMessages = (Integer)responseMap.get(SUCCESS_MESSAGES); + failedMessages = (Integer)responseMap.get(FAILURE_MESSAGES); + canonicalMessages = (Integer)responseMap.get(CANONICAL_MESSAGES); + + + List> results = (List>)responseMap.get("results"); + int index = 0; + for(Map result:results) { + String currentRecId = receiverIds[index++]; + String messageId = result.get(MESSAGE_ID); + if(StringUtils.hasText(messageId)) { + messageIds.put(currentRecId, messageId); + String canonicalId = result.get(REGISTRATION_ID); + if(StringUtils.hasText(canonicalId)) { + canonicalIds.put(currentRecId, canonicalId); + } + } + else { + //it has to be error + errorCodes.put(currentRecId, result.get(ERROR)); + } + } + } + else if(respCode == 503) { + return null; + } + else { + multicastId = 0L; + successfulMessages = 0; + failedMessages = 0; + canonicalMessages = 0; + messageIds = Collections.EMPTY_MAP; + canonicalIds = Collections.EMPTY_MAP; + errorCodes = Collections.EMPTY_MAP; + } + + return new GCMPushResponse() { + + @Override + public boolean isMulticast() { + return true; + } + + @Override + public int getSuccessfulMessages() { + return successfulMessages; + } + + @Override + public Map getSentMessageIds() { + return messageIds; + } + + @Override + public int getResponseCode() { + return respCode; + } + + @Override + public int getNumberOfCanonicalIds() { + return canonicalMessages; + } + + @Override + public int getFailedMessages() { + return failedMessages; + } + + @Override + public Map getErrorCodes() { + return errorCodes; + } + + @Override + public Map getCanonicalIds() { + return canonicalIds; + } + + @Override + public long getMulticastId() { + return multicastId; + } + }; + + } + + + /** + * Parses the response from the GCM server and constructs the instance of {@link GCMPushResponse} + * + * @param connection + * @param receiverIds + * + * @return + * @throws IOException + */ + private GCMPushResponse handlePlainTextResponse(HttpURLConnection connection, final String... receiverIds) + throws IOException { + final int respCode = connection.getResponseCode(); + final String errorCode; + final String sentMessageId; + final String canonicalId; + if(respCode == 200) { //successful + BufferedReader reader = new BufferedReader( + new InputStreamReader(connection.getInputStream())); + String line = reader.readLine(); + if(logger.isDebugEnabled()) { + logger.debug("First line of response is " + line); + } + //Should be for the message id or Error + String[] splits = line.split("="); + String token = splits[0]; + if(RESPONSE_TOKEN_ID.equals(token)) { + sentMessageId = splits[1]; + errorCode = null; + } + else { + sentMessageId = null; + errorCode = splits[1]; + } + + //check for canonical id + line = reader.readLine(); + if(logger.isDebugEnabled()) { + logger.debug("Second line of response is " + line); + } + if(line != null) { + //canonical id present + splits = line.split("="); + canonicalId = splits[1]; + } + else { + canonicalId = null; + } + } + else if(respCode == 503) { + //for temp unavailable, + //TODO, handle this one to retry using expo backoff if needed + return null; + } + else { + //Error, could be 401 or 500 + errorCode = null; + sentMessageId = null; + canonicalId = null; + } + + + return new GCMPushResponse() { + + @Override + public boolean isMulticast() { + return false; + } + + @Override + public int getResponseCode() { + return respCode; + } + + + @Override + @SuppressWarnings("unchecked") + public Map getSentMessageIds() { + if(sentMessageId != null) { + return Collections.singletonMap(receiverIds[0], sentMessageId); + } + else { + return Collections.EMPTY_MAP; + } + + } + + @Override + @SuppressWarnings("unchecked") + public Map getErrorCodes() { + if(errorCode != null) { + return Collections.singletonMap(receiverIds[0], errorCode); + } + else { + return Collections.EMPTY_MAP; + } + + } + + @Override + @SuppressWarnings("unchecked") + public Map getCanonicalIds() { + if(canonicalId != null) { + return Collections.singletonMap(receiverIds[0], canonicalId); + } + else { + return Collections.EMPTY_MAP; + } + } + + @Override + public int getSuccessfulMessages() { + return sentMessageId != null? 1 : 0; + } + + @Override + public int getFailedMessages() { + return errorCode != null || respCode == 400 || respCode == 401 || respCode == 500? 1 : 0; + } + + @Override + public int getNumberOfCanonicalIds() { + return canonicalId != null? 1 : 0; + } + + @Override + public long getMulticastId() { + return 0; + } + }; + } + + /** + * Gets the message body that will be posted to the GCM server as a plain text message + * + * @param message + * @param attributes + * @param receiverId + * + * @return + */ + private String getPlainTextMessageBody(Map message, Map copy, String receiverId) + throws UnsupportedEncodingException { + Assert.notNull(receiverId); + StringBuilder builder = new StringBuilder(); + //Add the registration ID parameter + builder.append(REGISTRATION_ID).append("=").append(URLEncoder.encode(receiverId, DEFAULT_ENCODING)); + + for(Entry entry:message.entrySet()) { + builder.append("&") + .append(DATA_KEY_PREFIX) + .append(entry.getKey()) + .append("=") + .append(URLEncoder.encode(entry.getValue().toString(), "UTF-8")); + //We using toString, not conversion service + } + + if(copy != null && !copy.isEmpty()) { + //Check if the collapse key is present in the message + if(copy.containsKey(COLLAPSE_KEY)) { + builder.append("&").append(COLLAPSE_KEY) + .append("=") + .append(URLEncoder.encode(copy.get(COLLAPSE_KEY), DEFAULT_ENCODING)); + copy.remove(COLLAPSE_KEY); + } + + //Check if the delay if idle key is present + if(copy.containsKey(DELAY_WHILE_IDLE)) { + boolean delayWhileIdleFlag = getDelayWhileIdleFlag(copy); + builder.append("&").append(DELAY_WHILE_IDLE) + .append("=") + .append(delayWhileIdleFlag); + copy.remove(DELAY_WHILE_IDLE); + } + + //Check if the time to live key is present + if(copy.containsKey(TIME_TO_LIVE)) { + long timeToLive = getTimeToLive(copy); + builder.append("&").append(TIME_TO_LIVE) + .append("=") + .append(timeToLive); + copy.remove(TIME_TO_LIVE); + } + + if(copy.size() > 0) { + if(logger.isWarnEnabled()) { + String warnMessage = String.format("Attributes contain more %d elements which are not recognised as valid" + + " attributes by GCM, are those intended to be a part of message? Attributes are" + + " %s", copy.size(), copy); + logger.warn(warnMessage); + } + } + } + + String requestString = builder.toString(); + return requestString; + } + + + /** + * Gets the delay_while_idle flag's value to be sent out with the request to the GCM + * @param copy + * @return + */ + private boolean getDelayWhileIdleFlag(Map copy) { + boolean delayWhileIdleFlag = false; + String delayWhileIdle = copy.get(DELAY_WHILE_IDLE); + if(StringUtils.hasText(delayWhileIdle) + && ("1".equals(delayWhileIdle.trim()) + || + Boolean.valueOf(delayWhileIdle) + )) { + delayWhileIdleFlag = true; + } + return delayWhileIdleFlag; + } + + + /** + * Gets the the time_to_live attribute to be sent in the request + * @param copy + * @return + */ + private long getTimeToLive(Map copy) { + String timeToLoveString = copy.get(TIME_TO_LIVE); + //Will throw a NumberFormatException if the value is not numeric + long timeToLive = Long.parseLong(timeToLoveString); + return timeToLive; + } + + /** + * Private method that constructs the JSON request message using {@link #getJsonMessageBody(Map, Map, String...)} + * and then posts the content to to GCM service + * + * @param message + * @param attributes + * @param receiverIds + * @return + * @throws IOException + */ + private PushResponse sendAsJson(Map message, Map attributes, + String... receiverIds) throws IOException { + String requestMessage = getJsonMessageBody(message, attributes, receiverIds); + if(logger.isDebugEnabled()) { + logger.debug("Request message is " + requestMessage); + } + String contentType = getContentType(true); + return postMessage(contentType, requestMessage, receiverIds); + } + + /** + * Private helper method that constructs the JSON request message + * + * @param message + * @param attributes + * @param receiverIds + * @return + * @throws IOException + */ + private String getJsonMessageBody(Map message, Map attributes, + String... receiverIds) throws IOException { + String stringMessage = null; + ByteArrayOutputStream os = new ByteArrayOutputStream(); + JsonFactory factory = new JsonFactory(); + JsonGenerator generator = factory.createJsonGenerator(os); + //start writing the document + generator.writeStartObject(); + + //Start writing registration ids array + generator.writeArrayFieldStart(REGISTRATION_IDS); + for(String receiverId:receiverIds) { + generator.writeString(receiverId); + } + //end registration id array + generator.writeEndArray(); + + //Start the data node + generator.writeObjectFieldStart(DATA_KEY); + for(Entry dataKey:message.entrySet()) { + generator.writeStringField(dataKey.getKey(), dataKey.getValue().toString()); + //Again, we are using toString and not conversion service + } + //End for data node + generator.writeEndObject(); + + //Check the collapse key + if(attributes.containsKey(COLLAPSE_KEY)) { + generator.writeStringField(COLLAPSE_KEY, attributes.get(COLLAPSE_KEY)); + attributes.remove(COLLAPSE_KEY); + } + + //Check if delay while idle attribute is present + if(attributes.containsKey(DELAY_WHILE_IDLE)) { + boolean delayWhileIdleFlag = getDelayWhileIdleFlag(attributes); + generator.writeBooleanField(DELAY_WHILE_IDLE, delayWhileIdleFlag); + } + + //Check if the time to live key is present + if(attributes.containsKey(TIME_TO_LIVE)) { + long timeToLive = getTimeToLive(attributes); + generator.writeNumberField(TIME_TO_LIVE, timeToLive); + } + + //End the document + generator.writeEndObject(); + generator.close(); + stringMessage = new String(os.toByteArray()); + return stringMessage; + } +} diff --git a/spring-integration-pushnotify/src/main/java/org/springframework/integration/pushnotify/gcm/GCMPushResponse.java b/spring-integration-pushnotify/src/main/java/org/springframework/integration/pushnotify/gcm/GCMPushResponse.java new file mode 100644 index 00000000..e9c1ef88 --- /dev/null +++ b/spring-integration-pushnotify/src/main/java/org/springframework/integration/pushnotify/gcm/GCMPushResponse.java @@ -0,0 +1,94 @@ +/* + * Copyright 2002-2012 the original author or authors. + * + * 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 org.springframework.integration.pushnotify.gcm; + +import java.util.Map; + +import org.springframework.integration.pushnotify.PushResponse; + +/** + * The response for the the GCM request. + * + * @author Amol Nayak + * + * @since 1.0 + * + */ +public interface GCMPushResponse extends PushResponse { + + /** + * The HTTP Response code that was received for the request made + * + * @return + */ + int getResponseCode(); + + /** + * Gets the GCM error codes that was received if the received HTTP response code is other than 200 (successful) and + * 503 (temporarily available). The key is the receiver id and the value is the error code received + * + * @return + */ + Map getErrorCodes(); + + /** + * An identifiers from the server acknowledging the receipt of the message sent. + * The Map contains the key which is the receiverId provided and the value is the message + * id received from the GCM server. + * + * @return + */ + Map getSentMessageIds(); + + /** + * Gets the canonical id of the device to which the message was sent, this is optional and would + * not necessarily be present for all receiverIds. This id indicates that the device to which the message + * was sent has a new registration id with the server other than the one sent with the request. + * The sender should replace the registration id of the receiver with this canonical id and use it for any subsequent requests sent to this + * device. + * + * @return + */ + Map getCanonicalIds(); + + + /** + * Gets the number of successful messages as part of the requests + * + */ + int getSuccessfulMessages(); + + /** + * Gets the number of failed messages in the request + * + * @return + */ + int getFailedMessages(); + + /** + *Gets the number of canonical ids present in the response + * @return + */ + int getNumberOfCanonicalIds(); + + /** + * A long number giving the multicast id provided by the GCM server for multicast requests + * @return + */ + long getMulticastId(); + + +} diff --git a/spring-integration-pushnotify/src/main/java/org/springframework/integration/pushnotify/gcm/outbound/GCMOutboundGateway.java b/spring-integration-pushnotify/src/main/java/org/springframework/integration/pushnotify/gcm/outbound/GCMOutboundGateway.java new file mode 100644 index 00000000..6da5856e --- /dev/null +++ b/spring-integration-pushnotify/src/main/java/org/springframework/integration/pushnotify/gcm/outbound/GCMOutboundGateway.java @@ -0,0 +1,279 @@ +/* + * Copyright 2002-2012 the original author or authors. + * + * 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 org.springframework.integration.pushnotify.gcm.outbound; + +import static org.springframework.integration.pushnotify.gcm.GCMPushNotifyService.COLLAPSE_KEY; +import static org.springframework.integration.pushnotify.gcm.GCMPushNotifyService.DELAY_WHILE_IDLE; +import static org.springframework.integration.pushnotify.gcm.GCMPushNotifyService.TIME_TO_LIVE; + +import java.io.IOException; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + +import org.springframework.beans.factory.BeanFactory; +import org.springframework.context.expression.BeanFactoryResolver; +import org.springframework.core.convert.ConversionService; +import org.springframework.expression.Expression; +import org.springframework.expression.spel.standard.SpelExpressionParser; +import org.springframework.expression.spel.support.StandardEvaluationContext; +import org.springframework.integration.Message; +import org.springframework.integration.MessagingException; +import org.springframework.integration.handler.AbstractReplyProducingMessageHandler; +import org.springframework.integration.pushnotify.PushNotifyService; +import org.springframework.integration.pushnotify.gcm.GCMPushNotifyService; +import org.springframework.integration.pushnotify.gcm.GCMPushResponse; +import org.springframework.util.Assert; +import org.springframework.util.StringUtils; + +/** + * The Outbound gateway class for sending the payload of the incoming message to the GCM push notification + * service. The GCM push notify service accepts the messages in key value format. The message coming to the + * adapter thus should have the Either of the following + * 1. A Payload of type java.util.Map with both the keys and values as Strings. + * 2. A String payload, in which case it will be sent to the GCM Service with the key whose + * value is the {@link #defaultKey} + * 3. Any Object that can be converted to {@link String} using Spring's conversion services + * + * @author Amol Nayak + * + * @since 1.0 + * + */ +public class GCMOutboundGateway extends AbstractReplyProducingMessageHandler { + + private static final String DEFAULT_KEY = "Data"; + + private volatile String defaultKey; + + private final PushNotifyService service; + + private volatile Expression receiverIdsExpression; + + private volatile Expression collapseKeyExpression; + + private volatile Expression timeToLiveExpression; + + private volatile Expression delayWhileIdleExpression; + + private final StandardEvaluationContext context; + + private final String defaultReceiverIdsExpression = "headers['receiverIds']"; + + + + /** + * The default constructor that instantiates the gateway with an instance of {@link GCMPushNotifyService} + * + * @param service + */ + public GCMOutboundGateway(PushNotifyService service) { + Assert.notNull(service, "Provided 'service' is null"); + this.service = service; + context = new StandardEvaluationContext(); + } + + @Override + protected void onInit() { + super.onInit(); + BeanFactory factory = getBeanFactory(); + if(factory != null) { + context.setBeanResolver(new BeanFactoryResolver(factory)); + } + if(receiverIdsExpression == null) { + receiverIdsExpression = new SpelExpressionParser().parseExpression(defaultReceiverIdsExpression); + } + defaultKey = DEFAULT_KEY; + } + + /* (non-Javadoc) + * @see org.springframework.integration.handler.AbstractReplyProducingMessageHandler#handleRequestMessage(org.springframework.integration.Message) + */ + @SuppressWarnings("unchecked") + @Override + protected Object handleRequestMessage(Message requestMessage) { + Object payload = requestMessage.getPayload(); + ConversionService conversionService = getConversionService(); + Map message; + if(Map.class.isAssignableFrom(payload.getClass())) { + message = (Map)payload; + } + else if(String.class.isAssignableFrom(payload.getClass())) { + message = Collections.singletonMap(defaultKey, payload); + } + else if(conversionService.canConvert(payload.getClass(), String.class)) { + message = Collections.singletonMap(defaultKey, (Object)conversionService.convert(payload, String.class)); + } + else { + throw new MessagingException("Only messages with payload of Map, String or an " + + "object that can be converted to String are allowed"); + } + String[] receiverIds = getReceiverIds(requestMessage); + + Map attributes = getAttributes(requestMessage); + GCMPushResponse response; + try { + response = (GCMPushResponse)service.push(message, attributes, receiverIds); + } catch (IOException e) { + throw new MessagingException(requestMessage, "Caught IOException while pushing to using GCM", e); + } + return response; + } + + + /** + * Sets the default key to be used in case a {@link Map} is not provided as the payload + * in the incoming message. This value is used as the key of the message that is sent out to the + * GCM service to be pushed to the Android device. + * + * @param defaultKey + */ + public void setDefaultKey(String defaultKey) { + Assert.hasText(defaultKey, "Provided 'defaultKey' is either null or empty text"); + this.defaultKey = defaultKey; + } + + /** + * The Expression that would be executed on the incoming message to get the receiver ids. + * The the permitted return values on expression evaluation are String, String[] + * or {@link Collection} + * + * @param receiverIdsExpression + */ + public void setReceiverIdsExpression(Expression receiverIdsExpression) { + Assert.notNull(receiverIdsExpression, "Provided 'receiverIdsExpression' is null"); + this.receiverIdsExpression = receiverIdsExpression; + } + + /** + * Sets the collapse key expression to be used for the message that will be sent. + * + * @param collapseKeyExpression + */ + public void setCollapseKeyExpression(Expression collapseKeyExpression) { + Assert.notNull(collapseKeyExpression, "'collapseKeyExpression' is null"); + this.collapseKeyExpression = collapseKeyExpression; + } + + /** + * Sets the expression to find the time to live attribute. + * @param timeToLiveExpression + */ + public void setTimeToLiveExpression(Expression timeToLiveExpression) { + Assert.notNull(timeToLiveExpression, "'timeToLiveExpression' is null"); + this.timeToLiveExpression = timeToLiveExpression; + } + + /** + * Sets the expression for finding the value of the delay if idle attribute, + * A value that evaluates to 1 or true (case insensitive) will be assumed to be + * true. + * + * @param delayWhileIdleExpression + */ + public void setDelayWhileIdleExpression(Expression delayWhileIdleExpression) { + Assert.notNull(delayWhileIdleExpression, "'delayWhileIdleExpression' is null"); + this.delayWhileIdleExpression = delayWhileIdleExpression; + } + + /** + * Populates the attributes in the map by evaluating the expressions + * + * @param requestMessage + * @return + */ + private Map getAttributes(Message requestMessage) { + Map attributes = null; + if(timeToLiveExpression != null + || collapseKeyExpression != null + || delayWhileIdleExpression != null) { + + attributes = new HashMap(); + + if(timeToLiveExpression != null) { + String ttl = timeToLiveExpression.getValue(context, requestMessage, String.class); + if(StringUtils.hasText(ttl)) { + attributes.put(TIME_TO_LIVE, ttl); + } + } + + if(collapseKeyExpression != null) { + String collapseKey = collapseKeyExpression.getValue(context, requestMessage, String.class); + if(StringUtils.hasText(collapseKey)) { + attributes.put(COLLAPSE_KEY, collapseKey); + } + } + + if(delayWhileIdleExpression != null) { + String delayWhileIdle = delayWhileIdleExpression.getValue(context, requestMessage, String.class); + if(StringUtils.hasText(delayWhileIdle)) { + attributes.put(DELAY_WHILE_IDLE, delayWhileIdle); + } + } + } + + return attributes != null && attributes.size() > 0 ? attributes : null; + } + /** + * Evaluates the {@link #receiverIdsExpression} on the message to get the receiver ids + * @param requestMessage + * @return + */ + private String[] getReceiverIds(Message requestMessage) { + Object executionValue = receiverIdsExpression.getValue(context, requestMessage); + String[] receiverIds; + if(executionValue == null) { + throw new MessagingException(requestMessage, "Execution of receiverIdsExpression on message didn't yield any receiver ids"); + } + if(executionValue instanceof String) { + receiverIds = new String[]{(String)executionValue}; + } + else if(executionValue instanceof String[]) { + receiverIds = (String[])executionValue; + } + else if(executionValue instanceof Collection) { + @SuppressWarnings("rawtypes") + Collection coll = (Collection)executionValue; + if(coll.size() != 0) { + receiverIds = new String[coll.size()]; + int index = 0; + for(Object receiverId:coll) { + if(receiverId instanceof String) { + receiverIds[index++] = (String)receiverId; + } + else { + throw new MessagingException(requestMessage, "The collection of receiverIds is expected to contain String values only, " + + "found an object of type " + receiverId.getClass().getName()); + } + } + } + else { + receiverIds = new String[0]; + } + } + else { + throw new MessagingException(requestMessage, "Only String, String[] or Collection are the allowed values, " + + "the expression evaluated to type " + executionValue.getClass().getName()); + } + + if(receiverIds.length == 0) { + throw new MessagingException(requestMessage, "Execution of receiverIdsExpression on message didn't yield any receiver ids"); + } + + return receiverIds; + } +} diff --git a/spring-integration-pushnotify/src/main/resources/META-INF/spring.handlers b/spring-integration-pushnotify/src/main/resources/META-INF/spring.handlers new file mode 100644 index 00000000..f3287059 --- /dev/null +++ b/spring-integration-pushnotify/src/main/resources/META-INF/spring.handlers @@ -0,0 +1 @@ +http\://www.springframework.org/schema/integration/pushnotify=org.springframework.integration.pushnotify.config.xml.IntegrationPushNotifyNamespaceHandler \ No newline at end of file diff --git a/spring-integration-pushnotify/src/main/resources/META-INF/spring.schemas b/spring-integration-pushnotify/src/main/resources/META-INF/spring.schemas new file mode 100644 index 00000000..bf70a644 --- /dev/null +++ b/spring-integration-pushnotify/src/main/resources/META-INF/spring.schemas @@ -0,0 +1,2 @@ +http\://www.springframework.org/schema/integration/pushnotify/spring-integration-pushnotify-1.0.xsd=org/springframework/integration/pushnotify/config/xml/spring-integration-pushnotify-1.0.xsd +http\://www.springframework.org/schema/integration/pushnotify/spring-integration-pushnotify.xsd=org/springframework/integration/pushnotify/config/xml/spring-integration-pushnotify-1.0.xsd \ No newline at end of file diff --git a/spring-integration-pushnotify/src/main/resources/org/springframework/integration/pushnotify/config/xml/spring-integration-pushnotify-1.0.xsd b/spring-integration-pushnotify/src/main/resources/org/springframework/integration/pushnotify/config/xml/spring-integration-pushnotify-1.0.xsd new file mode 100644 index 00000000..4f882e73 --- /dev/null +++ b/spring-integration-pushnotify/src/main/resources/org/springframework/integration/pushnotify/config/xml/spring-integration-pushnotify-1.0.xsd @@ -0,0 +1,172 @@ + + + + + + + + + + Defines the configuration elements for Spring + Integration's Push notify support + + + + + + + Defines the outbound gateway element for all the + services to push to various + handheld platforms + + + + + + + Identifies the underlying Spring bean + definition, which is an + instance of either 'EventDrivenConsumer' or + 'PollingConsumer', + depending on whether the component's input + channel is a + 'SubscribableChannel' or 'PollableChannel'. + + + + + + + The receiving Message Channel of this endpoint. + + + + + + + + + + + + Message Channel to which replies should be + sent, + after receiving the response from the push service + + + + + + + + + + + + + + + + + An enumeration of values that would identify the + service to connect + to push the messages to. + + + + + + + + + + + + The reference to a custom service implementation + + + + + + + + + + + + + The sender id of the GCM that would be used by the adapter to push + the messages + to the GCM. See GCM documentation or the README of the adapter for + more details. + + + + + + + + The sender id reference of the GCM that would be used by the adapter + to push the messages + to the GCM. See GCM documentation or the README of the adapter for + more details. + Either of this attribute or sender-id attributes is mandatory. + + + + + + + + + + + + + + + + + + + + + + The enumeration of the service types that is + supported by the library + + + + + + + + \ No newline at end of file diff --git a/spring-integration-pushnotify/src/test/java/org/springframework/integration/pushnotify/config/xml/DummyPushNotifyService.java b/spring-integration-pushnotify/src/test/java/org/springframework/integration/pushnotify/config/xml/DummyPushNotifyService.java new file mode 100644 index 00000000..7f75e504 --- /dev/null +++ b/spring-integration-pushnotify/src/test/java/org/springframework/integration/pushnotify/config/xml/DummyPushNotifyService.java @@ -0,0 +1,44 @@ +/* + * Copyright 2002-2012 the original author or authors. + * + * 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 org.springframework.integration.pushnotify.config.xml; + +import java.io.IOException; +import java.util.Map; + +import org.springframework.integration.pushnotify.PushNotifyService; +import org.springframework.integration.pushnotify.PushResponse; + +/** + * The dummy implementation of the push notify service for testing + * + * @author Amol Nayak + * + * @since 1.0 + * + */ +public class DummyPushNotifyService implements PushNotifyService { + + /* (non-Javadoc) + * @see org.springframework.integration.pushnotify.PushNotifyService#push(java.util.Map, java.util.Map, java.lang.String[]) + */ + @Override + public PushResponse push(Map message, + Map attributes, String... receiverIds) + throws IOException { + return null; + } + +} diff --git a/spring-integration-pushnotify/src/test/java/org/springframework/integration/pushnotify/config/xml/OutboundGatewayParserTests.java b/spring-integration-pushnotify/src/test/java/org/springframework/integration/pushnotify/config/xml/OutboundGatewayParserTests.java new file mode 100644 index 00000000..86555cec --- /dev/null +++ b/spring-integration-pushnotify/src/test/java/org/springframework/integration/pushnotify/config/xml/OutboundGatewayParserTests.java @@ -0,0 +1,136 @@ +/* + * Copyright 2002-2012 the original author or authors. + * + * 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 org.springframework.integration.pushnotify.config.xml; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.springframework.integration.test.util.TestUtils.getPropertyValue; + +import org.junit.Test; +import org.springframework.beans.factory.parsing.BeanDefinitionParsingException; +import org.springframework.context.support.ClassPathXmlApplicationContext; +import org.springframework.expression.Expression; +import org.springframework.expression.common.LiteralExpression; +import org.springframework.expression.spel.standard.SpelExpression; +import org.springframework.integration.endpoint.EventDrivenConsumer; +import org.springframework.integration.pushnotify.PushNotifyService; +import org.springframework.integration.pushnotify.gcm.GCMPushNotifyServiceImpl; +import org.springframework.integration.pushnotify.gcm.outbound.GCMOutboundGateway; + +/** + * Test cases for parser definitions + * + * @author Amol Nayak + * + */ +public class OutboundGatewayParserTests { + + @Test + public void withDefaultService() { + ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("pushnotify-simple-valid-definition.xml"); + EventDrivenConsumer consumer = ctx.getBean("validOne", EventDrivenConsumer.class); + GCMOutboundGateway gateway = getPropertyValue(consumer, "handler", GCMOutboundGateway.class); + assertNotNull(gateway); + PushNotifyService service = getPropertyValue(gateway, "service", PushNotifyService.class); + assertNotNull(service); + assertEquals(GCMPushNotifyServiceImpl.class, service.getClass()); + assertEquals("abc", getPropertyValue(service, "senderId", String.class)); + ctx.close(); + } + + @Test(expected=BeanDefinitionParsingException.class) + public void withoutSenderId() { + new ClassPathXmlApplicationContext("pushnotify-without-senderid.xml"); + } + + @Test(expected=BeanDefinitionParsingException.class) + public void withBothSenderIdAndRef() { + new ClassPathXmlApplicationContext("pushnotify-with-both-senderid-and-ref.xml"); + } + + @Test(expected=BeanDefinitionParsingException.class) + public void withBothSenderIdAndServiceRef() { + new ClassPathXmlApplicationContext("pushnotify-with-service-ref-and-senderid.xml"); + } + + @Test + public void withServiceRef() { + ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("pushnotify-with-service-ref.xml"); + EventDrivenConsumer consumer = ctx.getBean("validOne", EventDrivenConsumer.class); + GCMOutboundGateway gateway = getPropertyValue(consumer, "handler", GCMOutboundGateway.class); + assertNotNull(gateway); + PushNotifyService service = getPropertyValue(gateway, "service", PushNotifyService.class); + assertNotNull(service); + assertEquals(DummyPushNotifyService.class, service.getClass()); + ctx.close(); + } + + @Test + public void withAllAttributes() { + ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("pushnotify-with-all-attrs.xml"); + EventDrivenConsumer consumer = ctx.getBean("validOne", EventDrivenConsumer.class); + GCMOutboundGateway gateway = getPropertyValue(consumer, "handler", GCMOutboundGateway.class); + assertNotNull(gateway); + + Expression expr = getPropertyValue(gateway, "delayWhileIdleExpression", Expression.class); + assertNotNull(expr); + assertEquals(SpelExpression.class,expr.getClass()); + assertEquals("headers['dwi']", getPropertyValue(expr, "expression")); + + expr = getPropertyValue(gateway, "collapseKeyExpression", Expression.class); + assertNotNull(expr); + assertEquals(LiteralExpression.class,expr.getClass()); + assertEquals("ColKey", getPropertyValue(expr, "literalValue")); + + expr = getPropertyValue(gateway, "timeToLiveExpression", Expression.class); + assertNotNull(expr); + assertEquals(LiteralExpression.class,expr.getClass()); + assertEquals("10000", getPropertyValue(expr, "literalValue")); + + ctx.close(); + } + + @Test(expected=BeanDefinitionParsingException.class) + public void withBothBothLiteralAndExpressionAttribute() { + new ClassPathXmlApplicationContext("pushnotify-with-literal-and-expr.xml"); + } + + @Test + public void withLiteralReceiverId() { + ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("pushnotify-with-literal-receiverid.xml"); + EventDrivenConsumer consumer = ctx.getBean("validOne", EventDrivenConsumer.class); + GCMOutboundGateway gateway = getPropertyValue(consumer, "handler", GCMOutboundGateway.class); + assertNotNull(gateway); + + Expression expr = getPropertyValue(gateway, "receiverIdsExpression", Expression.class); + assertNotNull(expr); + assertEquals(LiteralExpression.class,expr.getClass()); + assertEquals("SomeRecId", getPropertyValue(expr, "literalValue")); + } + + @Test + public void withExpressionReceiverId() { + ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("pushnotify-with-receiverid-expr.xml"); + EventDrivenConsumer consumer = ctx.getBean("validOne", EventDrivenConsumer.class); + GCMOutboundGateway gateway = getPropertyValue(consumer, "handler", GCMOutboundGateway.class); + assertNotNull(gateway); + + Expression expr = getPropertyValue(gateway, "receiverIdsExpression", Expression.class); + assertNotNull(expr); + assertEquals(SpelExpression.class,expr.getClass()); + assertEquals("headers['recid']", getPropertyValue(expr, "expression")); + } +} diff --git a/spring-integration-pushnotify/src/test/java/org/springframework/integration/pushnotify/gcm/GCMOutboundGatewayTests.java b/spring-integration-pushnotify/src/test/java/org/springframework/integration/pushnotify/gcm/GCMOutboundGatewayTests.java new file mode 100644 index 00000000..44117a41 --- /dev/null +++ b/spring-integration-pushnotify/src/test/java/org/springframework/integration/pushnotify/gcm/GCMOutboundGatewayTests.java @@ -0,0 +1,228 @@ +/* + * Copyright 2002-2012 the original author or authors. + * + * 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 org.springframework.integration.pushnotify.gcm; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.mockito.Matchers.anyMap; +import static org.mockito.Matchers.anyVararg; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; +import static org.springframework.integration.pushnotify.gcm.GCMPushNotifyService.COLLAPSE_KEY; +import static org.springframework.integration.pushnotify.gcm.GCMPushNotifyService.DELAY_WHILE_IDLE; +import static org.springframework.integration.pushnotify.gcm.GCMPushNotifyService.TIME_TO_LIVE; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.Map; + +import org.junit.BeforeClass; +import org.junit.Test; +import org.mockito.invocation.InvocationOnMock; +import org.mockito.stubbing.Answer; +import org.springframework.expression.ExpressionParser; +import org.springframework.expression.common.LiteralExpression; +import org.springframework.expression.spel.standard.SpelExpressionParser; +import org.springframework.integration.MessagingException; +import org.springframework.integration.pushnotify.gcm.outbound.GCMOutboundGateway; +import org.springframework.integration.support.MessageBuilder; + +/** + * The test cases for the {@link GCMOutboundGateway} + * + * @author Amol Nayak + * + * @since 1.0 + * + */ +public class GCMOutboundGatewayTests { + + private static GCMPushNotifyService service; + private static List receiverIds = new ArrayList(); + private static Map payload; + private static Map attributes; + private static GCMOutboundGateway gateway; + + @SuppressWarnings("unchecked") + @BeforeClass + public static void setup() throws IOException { + service = mock(GCMPushNotifyService.class); + when(service.push(anyMap(), anyMap(), (String[])anyVararg())) + .then(new Answer() { + + @SuppressWarnings("rawtypes") + @Override + public GCMPushResponse answer(InvocationOnMock invocation) + throws Throwable { + Object[] args = invocation.getArguments(); + GCMOutboundGatewayTests.payload = (Map)args[0]; + GCMOutboundGatewayTests.attributes = (Map)args[1]; + GCMOutboundGatewayTests.receiverIds.clear(); + for(int i = 2; i < args.length; i++) { + GCMOutboundGatewayTests.receiverIds.add((String)args[i]); + } + return null; + } + }); + + gateway = new GCMOutboundGateway(service); + gateway.afterPropertiesSet(); + } + + /** + * Use a receiver id in the header that is String and with default expression. + */ + @Test + public void withStringReceiverId() { + gateway.handleMessage(MessageBuilder.withPayload("Test").setHeader("receiverIds", "RecId").build()); + assertEquals(1, receiverIds.size()); + assertEquals("RecId", receiverIds.get(0)); + } + + + /** + * Use a receiver id in the header that is String[] and with default expression. + */ + @Test + public void withStringReceiverIdArray() { + gateway.handleMessage(MessageBuilder.withPayload("Test") + .setHeader("receiverIds", new String[]{"RecId1", "RecId2"}).build()); + assertEquals(2, receiverIds.size()); + assertEquals("RecId1", receiverIds.get(0)); + assertEquals("RecId2", receiverIds.get(1)); + } + + /** + * Use a receiver id in the header that is List and with default expression. + */ + @Test + public void withStringReceiverIdList() { + gateway.handleMessage(MessageBuilder.withPayload("Test") + .setHeader("receiverIds", Arrays.asList(new String[]{"RecId1", "RecId2"})).build()); + assertEquals(2, receiverIds.size()); + assertEquals("RecId1", receiverIds.get(0)); + assertEquals("RecId2", receiverIds.get(1)); + } + + /** + * From a message with no receiver ids, should throw a {@link MessagingException} + */ + @Test(expected=MessagingException.class) + public void withNoReceiverIds() { + gateway.handleMessage(MessageBuilder.withPayload("Test").build()); + } + + /** + * From a message with no receiver ids, should throw a {@link MessagingException} + */ + @Test(expected=MessagingException.class) + public void withEmptyCollectionOfReceiverIds() { + gateway.handleMessage(MessageBuilder.withPayload("Test") + .setHeader("receiverIds", Collections.EMPTY_LIST) + .build()); + } + + /** + * From a message that has the receiver ids of incorrect type, java.lang.Integer in this case + * + */ + @Test(expected=MessagingException.class) + public void withIncorrectTypeForReceiverId() { + List list = new ArrayList(); + list.add(1); + gateway.handleMessage(MessageBuilder.withPayload("Test") + .setHeader("receiverIds", list) + .build()); + } + + /** + * Sends a request with payload as a {@link Map} + */ + @Test + public void withMapPayload() { + gateway.handleMessage(MessageBuilder.withPayload(Collections.singletonMap("Data", "Test")) + .setHeader("receiverIds", "RecId") + .build()); + assertEquals(1, payload.size()); + assertEquals("Test", payload.get("Data")); + } + + + /** + * Sends a request with payload as a {@link Map} + */ + @Test + public void withStringPayloadWithDefaultKey() { + gateway.handleMessage(MessageBuilder.withPayload("Test") + .setHeader("receiverIds", "RecId") + .build()); + assertEquals(1, payload.size()); + assertEquals("Test", payload.get("Data")); + } + + /** + * Sends a request with payload as a {@link Map} + */ + @Test + public void withStringPayloadWithCustomKey() { + gateway.setDefaultKey("DefaultKey"); + gateway.handleMessage(MessageBuilder.withPayload("Test") + .setHeader("receiverIds", "RecId") + .build()); + assertEquals(1, payload.size()); + assertEquals("Test", payload.get("DefaultKey")); + } + + /** + * Sets the literal expression for the attributes to be sent to GCM + */ + @Test + public void withAttributesAsLiteralExpressions() { + gateway.setCollapseKeyExpression(new LiteralExpression("CollapseKey")); + gateway.setDelayWhileIdleExpression(new LiteralExpression("true")); + gateway.setTimeToLiveExpression(new LiteralExpression("12345")); + gateway.handleMessage(MessageBuilder.withPayload("Test") + .setHeader("receiverIds", "RecId") + .build()); + assertNotNull(attributes); + assertEquals("CollapseKey", attributes.get(COLLAPSE_KEY)); + assertEquals("true", attributes.get(DELAY_WHILE_IDLE)); + assertEquals("12345", attributes.get(TIME_TO_LIVE)); + } + + /** + * Sets the literal expression for the attributes to be sent to GCM + */ + @Test + public void withAttributesAsSPELExpressions() { + ExpressionParser parser = new SpelExpressionParser(); + gateway.setCollapseKeyExpression(parser.parseExpression("headers['ck']")); //Not for Calvin Klein, but for collapse key + gateway.setDelayWhileIdleExpression(new LiteralExpression("true")); + gateway.setTimeToLiveExpression(parser.parseExpression("headers['ttl']")); + gateway.handleMessage(MessageBuilder.withPayload("Test") + .setHeader("receiverIds", "RecId") + .setHeader("ck", "CollapseKey") + .setHeader("ttl", 10000) + .build()); + assertNotNull(attributes); + assertEquals("CollapseKey", attributes.get(COLLAPSE_KEY)); + assertEquals("true", attributes.get(DELAY_WHILE_IDLE)); + assertEquals("10000", attributes.get(TIME_TO_LIVE)); + } +} diff --git a/spring-integration-pushnotify/src/test/java/org/springframework/integration/pushnotify/gcm/GCMPushNotifyServiceImplTests.java b/spring-integration-pushnotify/src/test/java/org/springframework/integration/pushnotify/gcm/GCMPushNotifyServiceImplTests.java new file mode 100644 index 00000000..90dedb60 --- /dev/null +++ b/spring-integration-pushnotify/src/test/java/org/springframework/integration/pushnotify/gcm/GCMPushNotifyServiceImplTests.java @@ -0,0 +1,184 @@ +/* + * Copyright 2002-2012 the original author or authors. + * + * 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 org.springframework.integration.pushnotify.gcm; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; +import java.util.Properties; + +import org.junit.BeforeClass; +import org.junit.Test; +import org.springframework.core.io.ClassPathResource; + +/** + * The test class for {@link GCMPushNotifyServiceImpl} + * + * @author Amol Nayak + * + * @since 1.0 + * + */ +public class GCMPushNotifyServiceImplTests { + + + private static String receiverId; + private static String senderId; + + @BeforeClass + public static void setup() throws IOException { + ClassPathResource res = new ClassPathResource("services.properties"); + Properties props = new Properties(); + props.load(res.getInputStream()); + senderId = props.getProperty("senderId"); + receiverId = props.getProperty("receiverId"); + } + + /** + * Should get {@link IllegalArgumentException} on passing null message + */ + @Test(expected=IllegalArgumentException.class) + public void withNullMessage() throws IOException { + GCMPushNotifyService service = new GCMPushNotifyServiceImpl("1"); + service.push(null, null, "1"); + } + + /** + * Should get {@link IllegalArgumentException} on passing null message + */ + @Test(expected=IllegalArgumentException.class) + public void withNullReceiverId() throws IOException { + GCMPushNotifyService service = new GCMPushNotifyServiceImpl("1"); + Map data = new HashMap(); + data.put("Data", "Some Data"); + data.put("Data2", "Some Data 2"); + service.push(data, null, (String)null); + } + + /** + * Doesn't use attributes, the message contents should successfully be pushed to the GCM service + */ + @Test + public void withNullAttributes() throws IOException { + GCMPushNotifyService service = new GCMPushNotifyServiceImpl(senderId); + Map data = new HashMap(); + data.put("Data", "Some Data"); + data.put("Data2", "Some Data 2"); + GCMPushResponse response = (GCMPushResponse)service.push(data, null, receiverId); + assertNotNull(response); + assertEquals(200, response.getResponseCode()); + assertNotNull(response.getSentMessageIds().get(receiverId)); + assertEquals(1, response.getSuccessfulMessages()); + assertEquals(0, response.getFailedMessages()); + } + + /** + * Sends with invalid sender, should get 401 error + */ + @Test + public void withInvalidSenderId() throws IOException { + GCMPushNotifyService service = new GCMPushNotifyServiceImpl("123"); + Map data = new HashMap(); + data.put("Data", "Some Data"); + data.put("Data2", "Some Data 2"); + GCMPushResponse response = (GCMPushResponse)service.push(data, null, receiverId); + assertNotNull(response); + assertEquals(401, response.getResponseCode()); + assertEquals(0, response.getSuccessfulMessages()); + assertEquals(1, response.getFailedMessages()); + } + + /** + * Sends request with an invalid device id + */ + @Test + public void withInvalidDeviceId() throws IOException { + GCMPushNotifyService service = new GCMPushNotifyServiceImpl(senderId); + Map data = new HashMap(); + data.put("Data", "Some Data"); + data.put("Data2", "Some Data 2"); + GCMPushResponse response = (GCMPushResponse)service.push(data, null, "123"); + assertNotNull(response); + assertEquals(200, response.getResponseCode()); + assertNull(response.getSentMessageIds().get("123")); + assertEquals("InvalidRegistration", response.getErrorCodes().get("123")); + assertEquals(0, response.getSuccessfulMessages()); + assertEquals(1, response.getFailedMessages()); + } + + /** + * Sends request with an invalid key, the key name begins with google. + */ + @Test + public void withInvalidKey() throws IOException { + GCMPushNotifyService service = new GCMPushNotifyServiceImpl(senderId); + Map data = new HashMap(); + data.put("google.Data", "Some Data"); + GCMPushResponse response = (GCMPushResponse)service.push(data, null, receiverId); + assertNotNull(response); + assertEquals(200, response.getResponseCode()); + assertNull(response.getSentMessageIds().get(receiverId)); + assertEquals("InvalidDataKey", response.getErrorCodes().get(receiverId)); + assertEquals(0, response.getSuccessfulMessages()); + assertEquals(1, response.getFailedMessages()); + } + + + /** + * Publishes with some additional unrecognized attribute, the message is posted successfully with + * a warning msg printed to console + */ + @Test + public void publishWithAdditionalAttributes() throws IOException { + GCMPushNotifyService service = new GCMPushNotifyServiceImpl(senderId); + Map data = new HashMap(); + data.put("Data", "Some Data"); + data.put("Data2", "Some Data 2"); + Map attributes = new HashMap(); + attributes.put("ExtraAttr", "Attr1"); + GCMPushResponse response = (GCMPushResponse)service.push(data, attributes, receiverId); + assertNotNull(response); + assertEquals(200, response.getResponseCode()); + assertNotNull(response.getSentMessageIds().get(receiverId)); + assertEquals(1, response.getSuccessfulMessages()); + assertEquals(0, response.getFailedMessages()); + } + + /** + * + */ + @Test + public void publishToMultipleInvalidSenders() throws IOException { + GCMPushNotifyService service = new GCMPushNotifyServiceImpl(senderId); + Map data = new HashMap(); + data.put("Data", "Some Data"); + data.put("Data2", "Some Data 2"); + Map attributes = new HashMap(); + attributes.put(GCMPushNotifyService.TIME_TO_LIVE, "1000"); + attributes.put(GCMPushNotifyService.COLLAPSE_KEY, "Update Available"); + attributes.put(GCMPushNotifyService.DELAY_WHILE_IDLE, "1"); + GCMPushResponse response = (GCMPushResponse)service.push(data, attributes, receiverId, "123"); + assertNotNull(response); + assertEquals(1, response.getSuccessfulMessages()); + assertEquals(1, response.getFailedMessages()); + assertNotNull(response.getSentMessageIds().get(receiverId)); + assertEquals("InvalidRegistration", response.getErrorCodes().get("123")); + } +} diff --git a/spring-integration-pushnotify/src/test/resources/log4j.properties b/spring-integration-pushnotify/src/test/resources/log4j.properties new file mode 100644 index 00000000..fed1d7e6 --- /dev/null +++ b/spring-integration-pushnotify/src/test/resources/log4j.properties @@ -0,0 +1,8 @@ +log4j.rootCategory=DEBUG, stdout + +log4j.appender.stdout=org.apache.log4j.ConsoleAppender +log4j.appender.stdout.layout=org.apache.log4j.PatternLayout +log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - <%m>%n + +log4j.category.org.springframework=WARN +log4j.category.org.springframework.integration.pushnotify=DEBUG diff --git a/spring-integration-pushnotify/src/test/resources/pushnotify-simple-valid-definition.xml b/spring-integration-pushnotify/src/test/resources/pushnotify-simple-valid-definition.xml new file mode 100644 index 00000000..4ce739cf --- /dev/null +++ b/spring-integration-pushnotify/src/test/resources/pushnotify-simple-valid-definition.xml @@ -0,0 +1,20 @@ + + + + + + + + + diff --git a/spring-integration-pushnotify/src/test/resources/pushnotify-with-all-attrs.xml b/spring-integration-pushnotify/src/test/resources/pushnotify-with-all-attrs.xml new file mode 100644 index 00000000..2b05b259 --- /dev/null +++ b/spring-integration-pushnotify/src/test/resources/pushnotify-with-all-attrs.xml @@ -0,0 +1,22 @@ + + + + + + + + diff --git a/spring-integration-pushnotify/src/test/resources/pushnotify-with-both-senderid-and-ref.xml b/spring-integration-pushnotify/src/test/resources/pushnotify-with-both-senderid-and-ref.xml new file mode 100644 index 00000000..88dec88f --- /dev/null +++ b/spring-integration-pushnotify/src/test/resources/pushnotify-with-both-senderid-and-ref.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + diff --git a/spring-integration-pushnotify/src/test/resources/pushnotify-with-literal-and-expr.xml b/spring-integration-pushnotify/src/test/resources/pushnotify-with-literal-and-expr.xml new file mode 100644 index 00000000..fb418ee8 --- /dev/null +++ b/spring-integration-pushnotify/src/test/resources/pushnotify-with-literal-and-expr.xml @@ -0,0 +1,21 @@ + + + + + + + + diff --git a/spring-integration-pushnotify/src/test/resources/pushnotify-with-literal-receiverid.xml b/spring-integration-pushnotify/src/test/resources/pushnotify-with-literal-receiverid.xml new file mode 100644 index 00000000..23935b16 --- /dev/null +++ b/spring-integration-pushnotify/src/test/resources/pushnotify-with-literal-receiverid.xml @@ -0,0 +1,20 @@ + + + + + + + + diff --git a/spring-integration-pushnotify/src/test/resources/pushnotify-with-receiverid-expr.xml b/spring-integration-pushnotify/src/test/resources/pushnotify-with-receiverid-expr.xml new file mode 100644 index 00000000..9fce4736 --- /dev/null +++ b/spring-integration-pushnotify/src/test/resources/pushnotify-with-receiverid-expr.xml @@ -0,0 +1,20 @@ + + + + + + + + diff --git a/spring-integration-pushnotify/src/test/resources/pushnotify-with-service-ref-and-senderid.xml b/spring-integration-pushnotify/src/test/resources/pushnotify-with-service-ref-and-senderid.xml new file mode 100644 index 00000000..6cc83a58 --- /dev/null +++ b/spring-integration-pushnotify/src/test/resources/pushnotify-with-service-ref-and-senderid.xml @@ -0,0 +1,22 @@ + + + + + + + + + + diff --git a/spring-integration-pushnotify/src/test/resources/pushnotify-with-service-ref.xml b/spring-integration-pushnotify/src/test/resources/pushnotify-with-service-ref.xml new file mode 100644 index 00000000..4efe6647 --- /dev/null +++ b/spring-integration-pushnotify/src/test/resources/pushnotify-with-service-ref.xml @@ -0,0 +1,21 @@ + + + + + + + + + + diff --git a/spring-integration-pushnotify/src/test/resources/pushnotify-without-senderid.xml b/spring-integration-pushnotify/src/test/resources/pushnotify-without-senderid.xml new file mode 100644 index 00000000..9a82de60 --- /dev/null +++ b/spring-integration-pushnotify/src/test/resources/pushnotify-without-senderid.xml @@ -0,0 +1,19 @@ + + + + + + + + + From 0ada4bce94049a4239ee50f0d6d80d6cad2b8592 Mon Sep 17 00:00:00 2001 From: Amol Nayak Date: Sun, 27 Jan 2013 18:20:47 +0530 Subject: [PATCH 2/2] INTEXT-19 Pushed the review changes --- .../pushnotify/gcm/GCMPushNotifyService.java | 124 ------------------ .../gcm/GCMPushNotifyServiceImpl.java | 99 +++++++++++++- .../gcm/outbound/GCMOutboundGateway.java | 9 +- .../gcm/GCMOutboundGatewayTests.java | 13 +- .../gcm/GCMPushNotifyServiceImplTests.java | 28 ++-- 5 files changed, 124 insertions(+), 149 deletions(-) delete mode 100644 spring-integration-pushnotify/src/main/java/org/springframework/integration/pushnotify/gcm/GCMPushNotifyService.java diff --git a/spring-integration-pushnotify/src/main/java/org/springframework/integration/pushnotify/gcm/GCMPushNotifyService.java b/spring-integration-pushnotify/src/main/java/org/springframework/integration/pushnotify/gcm/GCMPushNotifyService.java deleted file mode 100644 index 85a11902..00000000 --- a/spring-integration-pushnotify/src/main/java/org/springframework/integration/pushnotify/gcm/GCMPushNotifyService.java +++ /dev/null @@ -1,124 +0,0 @@ -/* - * Copyright 2002-2012 the original author or authors. - * - * 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 org.springframework.integration.pushnotify.gcm; - -import org.springframework.integration.pushnotify.PushNotifyService; - -/** - * The interface containing the methods specific to Google Cloud Messaging (GCM) - * push messaging to android devices. - * - * @author Amol Nayak - * - * @since 1.0 - * - */ -public interface GCMPushNotifyService extends PushNotifyService { - - /** - * The parameter used to carry the registration id of the device to which the notification - * is to be sent - */ - public static final String REGISTRATION_ID = "registration_id"; - - /** - * The parameter used to carry the registration ids of the device to which the notification - * is to be sent - */ - public static final String REGISTRATION_IDS = "registration_ids"; - - /** - * The collapse key parameter of the request - */ - public static final String COLLAPSE_KEY = "collapse_key"; - - /** - * The prefix to the parameter for sending the data in case the request - * is sent out as plain text - */ - public static final String DATA_KEY_PREFIX = "data."; - - /** - * The key used in the JSON request to send the data to the GCM service - */ - public static final String DATA_KEY = "data"; - - /** - * The key used to specify if the messages should be held and not pushed if - * the device is idle. - */ - public static final String DELAY_WHILE_IDLE = "delay_while_idle"; - - /** - * The parameter that gives the time the message will live and will not be discarded - * before it is delivered to the device. - */ - public static final String TIME_TO_LIVE = "time_to_live"; - - /** - * The key in the JSON response that indicates that an error has occurred while sending the message - */ - public static final String ERROR = "error"; - - /** - * The key in the JSON response giving the message id of the successfully sent message - */ - public static final String MESSAGE_ID = "message_id"; - - /** - *The key in the JSON response giving the canonnical id of the device to which the message was posted - *may be present only if the message_id attribute is present - */ - public static final String CANONICAL_MESSAGES = "canonical_ids"; - - /** - * The key giving the number of failed messages in the request - */ - public static final String FAILURE_MESSAGES = "failure"; - - /** - * The key giving the number of successful messages in the request - */ - public static final String SUCCESS_MESSAGES = "success"; - - /** - * The key giving a unique id to the multi cast request, this is returned by the GCM server - */ - public static final String MULTICAST_ID = "multicast_id"; - - - /** - * The key present in the pain text response indicating the request is successful, the value - * of this key is the message id - */ - public static final String RESPONSE_TOKEN_ID = "id"; - - - /** - * The content type if the request is of type JSON. - */ - public static final String JSON_TYPE = "application/json"; - - /** - * The content type if the request is of type plain text. - */ - public static final String PLAIN_TEXT_TYPE = "application/x-www-form-urlencoded;charset=UTF-8"; - - /** - * The Web service for the GCM services - */ - public static final String GCM_SERVICE_URL = "https://android.googleapis.com/gcm/send"; -} diff --git a/spring-integration-pushnotify/src/main/java/org/springframework/integration/pushnotify/gcm/GCMPushNotifyServiceImpl.java b/spring-integration-pushnotify/src/main/java/org/springframework/integration/pushnotify/gcm/GCMPushNotifyServiceImpl.java index 950e8032..e0869839 100644 --- a/spring-integration-pushnotify/src/main/java/org/springframework/integration/pushnotify/gcm/GCMPushNotifyServiceImpl.java +++ b/spring-integration-pushnotify/src/main/java/org/springframework/integration/pushnotify/gcm/GCMPushNotifyServiceImpl.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2013 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -37,6 +37,7 @@ import org.codehaus.jackson.JsonGenerator; import org.codehaus.jackson.map.ObjectMapper; import org.springframework.integration.pushnotify.AbstractPushNotifyService; +import org.springframework.integration.pushnotify.PushNotifyService; import org.springframework.integration.pushnotify.PushResponse; import org.springframework.util.Assert; import org.springframework.util.StringUtils; @@ -51,10 +52,104 @@ * */ public class GCMPushNotifyServiceImpl extends AbstractPushNotifyService - implements GCMPushNotifyService { + implements PushNotifyService { private static final Log logger = LogFactory.getLog(GCMPushNotifyServiceImpl.class); + /** + * The parameter used to carry the registration id of the device to which the notification + * is to be sent + */ + public static final String REGISTRATION_ID = "registration_id"; + + /** + * The parameter used to carry the registration ids of the device to which the notification + * is to be sent + */ + public static final String REGISTRATION_IDS = "registration_ids"; + + /** + * The collapse key parameter of the request + */ + public static final String COLLAPSE_KEY = "collapse_key"; + + /** + * The prefix to the parameter for sending the data in case the request + * is sent out as plain text + */ + public static final String DATA_KEY_PREFIX = "data."; + + /** + * The key used in the JSON request to send the data to the GCM service + */ + public static final String DATA_KEY = "data"; + + /** + * The key used to specify if the messages should be held and not pushed if + * the device is idle. + */ + public static final String DELAY_WHILE_IDLE = "delay_while_idle"; + + /** + * The parameter that gives the time the message will live and will not be discarded + * before it is delivered to the device. + */ + public static final String TIME_TO_LIVE = "time_to_live"; + + /** + * The key in the JSON response that indicates that an error has occurred while sending the message + */ + public static final String ERROR = "error"; + + /** + * The key in the JSON response giving the message id of the successfully sent message + */ + public static final String MESSAGE_ID = "message_id"; + + /** + *The key in the JSON response giving the canonnical id of the device to which the message was posted + *may be present only if the message_id attribute is present + */ + public static final String CANONICAL_MESSAGES = "canonical_ids"; + + /** + * The key giving the number of failed messages in the request + */ + public static final String FAILURE_MESSAGES = "failure"; + + /** + * The key giving the number of successful messages in the request + */ + public static final String SUCCESS_MESSAGES = "success"; + + /** + * The key giving a unique id to the multi cast request, this is returned by the GCM server + */ + public static final String MULTICAST_ID = "multicast_id"; + + + /** + * The key present in the pain text response indicating the request is successful, the value + * of this key is the message id + */ + public static final String RESPONSE_TOKEN_ID = "id"; + + + /** + * The content type if the request is of type JSON. + */ + public static final String JSON_TYPE = "application/json"; + + /** + * The content type if the request is of type plain text. + */ + public static final String PLAIN_TEXT_TYPE = "application/x-www-form-urlencoded;charset=UTF-8"; + + /** + * The Web service for the GCM services + */ + public static final String GCM_SERVICE_URL = "https://android.googleapis.com/gcm/send"; + private static final String DEFAULT_ENCODING = "UTF-8"; diff --git a/spring-integration-pushnotify/src/main/java/org/springframework/integration/pushnotify/gcm/outbound/GCMOutboundGateway.java b/spring-integration-pushnotify/src/main/java/org/springframework/integration/pushnotify/gcm/outbound/GCMOutboundGateway.java index 6da5856e..27795fed 100644 --- a/spring-integration-pushnotify/src/main/java/org/springframework/integration/pushnotify/gcm/outbound/GCMOutboundGateway.java +++ b/spring-integration-pushnotify/src/main/java/org/springframework/integration/pushnotify/gcm/outbound/GCMOutboundGateway.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2013 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -15,9 +15,9 @@ */ package org.springframework.integration.pushnotify.gcm.outbound; -import static org.springframework.integration.pushnotify.gcm.GCMPushNotifyService.COLLAPSE_KEY; -import static org.springframework.integration.pushnotify.gcm.GCMPushNotifyService.DELAY_WHILE_IDLE; -import static org.springframework.integration.pushnotify.gcm.GCMPushNotifyService.TIME_TO_LIVE; +import static org.springframework.integration.pushnotify.gcm.GCMPushNotifyServiceImpl.COLLAPSE_KEY; +import static org.springframework.integration.pushnotify.gcm.GCMPushNotifyServiceImpl.DELAY_WHILE_IDLE; +import static org.springframework.integration.pushnotify.gcm.GCMPushNotifyServiceImpl.TIME_TO_LIVE; import java.io.IOException; import java.util.Collection; @@ -35,7 +35,6 @@ import org.springframework.integration.MessagingException; import org.springframework.integration.handler.AbstractReplyProducingMessageHandler; import org.springframework.integration.pushnotify.PushNotifyService; -import org.springframework.integration.pushnotify.gcm.GCMPushNotifyService; import org.springframework.integration.pushnotify.gcm.GCMPushResponse; import org.springframework.util.Assert; import org.springframework.util.StringUtils; diff --git a/spring-integration-pushnotify/src/test/java/org/springframework/integration/pushnotify/gcm/GCMOutboundGatewayTests.java b/spring-integration-pushnotify/src/test/java/org/springframework/integration/pushnotify/gcm/GCMOutboundGatewayTests.java index 44117a41..f87ddd70 100644 --- a/spring-integration-pushnotify/src/test/java/org/springframework/integration/pushnotify/gcm/GCMOutboundGatewayTests.java +++ b/spring-integration-pushnotify/src/test/java/org/springframework/integration/pushnotify/gcm/GCMOutboundGatewayTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2013 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -21,9 +21,9 @@ import static org.mockito.Matchers.anyVararg; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; -import static org.springframework.integration.pushnotify.gcm.GCMPushNotifyService.COLLAPSE_KEY; -import static org.springframework.integration.pushnotify.gcm.GCMPushNotifyService.DELAY_WHILE_IDLE; -import static org.springframework.integration.pushnotify.gcm.GCMPushNotifyService.TIME_TO_LIVE; +import static org.springframework.integration.pushnotify.gcm.GCMPushNotifyServiceImpl.COLLAPSE_KEY; +import static org.springframework.integration.pushnotify.gcm.GCMPushNotifyServiceImpl.DELAY_WHILE_IDLE; +import static org.springframework.integration.pushnotify.gcm.GCMPushNotifyServiceImpl.TIME_TO_LIVE; import java.io.IOException; import java.util.ArrayList; @@ -40,6 +40,7 @@ import org.springframework.expression.common.LiteralExpression; import org.springframework.expression.spel.standard.SpelExpressionParser; import org.springframework.integration.MessagingException; +import org.springframework.integration.pushnotify.PushNotifyService; import org.springframework.integration.pushnotify.gcm.outbound.GCMOutboundGateway; import org.springframework.integration.support.MessageBuilder; @@ -53,7 +54,7 @@ */ public class GCMOutboundGatewayTests { - private static GCMPushNotifyService service; + private static PushNotifyService service; private static List receiverIds = new ArrayList(); private static Map payload; private static Map attributes; @@ -62,7 +63,7 @@ public class GCMOutboundGatewayTests { @SuppressWarnings("unchecked") @BeforeClass public static void setup() throws IOException { - service = mock(GCMPushNotifyService.class); + service = mock(PushNotifyService.class); when(service.push(anyMap(), anyMap(), (String[])anyVararg())) .then(new Answer() { diff --git a/spring-integration-pushnotify/src/test/java/org/springframework/integration/pushnotify/gcm/GCMPushNotifyServiceImplTests.java b/spring-integration-pushnotify/src/test/java/org/springframework/integration/pushnotify/gcm/GCMPushNotifyServiceImplTests.java index 90dedb60..970f4d79 100644 --- a/spring-integration-pushnotify/src/test/java/org/springframework/integration/pushnotify/gcm/GCMPushNotifyServiceImplTests.java +++ b/spring-integration-pushnotify/src/test/java/org/springframework/integration/pushnotify/gcm/GCMPushNotifyServiceImplTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2013 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,6 +18,9 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; +import static org.springframework.integration.pushnotify.gcm.GCMPushNotifyServiceImpl.COLLAPSE_KEY; +import static org.springframework.integration.pushnotify.gcm.GCMPushNotifyServiceImpl.DELAY_WHILE_IDLE; +import static org.springframework.integration.pushnotify.gcm.GCMPushNotifyServiceImpl.TIME_TO_LIVE; import java.io.IOException; import java.util.HashMap; @@ -27,6 +30,7 @@ import org.junit.BeforeClass; import org.junit.Test; import org.springframework.core.io.ClassPathResource; +import org.springframework.integration.pushnotify.PushNotifyService; /** * The test class for {@link GCMPushNotifyServiceImpl} @@ -56,7 +60,7 @@ public static void setup() throws IOException { */ @Test(expected=IllegalArgumentException.class) public void withNullMessage() throws IOException { - GCMPushNotifyService service = new GCMPushNotifyServiceImpl("1"); + PushNotifyService service = new GCMPushNotifyServiceImpl("1"); service.push(null, null, "1"); } @@ -65,7 +69,7 @@ public void withNullMessage() throws IOException { */ @Test(expected=IllegalArgumentException.class) public void withNullReceiverId() throws IOException { - GCMPushNotifyService service = new GCMPushNotifyServiceImpl("1"); + PushNotifyService service = new GCMPushNotifyServiceImpl("1"); Map data = new HashMap(); data.put("Data", "Some Data"); data.put("Data2", "Some Data 2"); @@ -77,7 +81,7 @@ public void withNullReceiverId() throws IOException { */ @Test public void withNullAttributes() throws IOException { - GCMPushNotifyService service = new GCMPushNotifyServiceImpl(senderId); + PushNotifyService service = new GCMPushNotifyServiceImpl(senderId); Map data = new HashMap(); data.put("Data", "Some Data"); data.put("Data2", "Some Data 2"); @@ -94,7 +98,7 @@ public void withNullAttributes() throws IOException { */ @Test public void withInvalidSenderId() throws IOException { - GCMPushNotifyService service = new GCMPushNotifyServiceImpl("123"); + PushNotifyService service = new GCMPushNotifyServiceImpl("123"); Map data = new HashMap(); data.put("Data", "Some Data"); data.put("Data2", "Some Data 2"); @@ -110,7 +114,7 @@ public void withInvalidSenderId() throws IOException { */ @Test public void withInvalidDeviceId() throws IOException { - GCMPushNotifyService service = new GCMPushNotifyServiceImpl(senderId); + PushNotifyService service = new GCMPushNotifyServiceImpl(senderId); Map data = new HashMap(); data.put("Data", "Some Data"); data.put("Data2", "Some Data 2"); @@ -128,7 +132,7 @@ public void withInvalidDeviceId() throws IOException { */ @Test public void withInvalidKey() throws IOException { - GCMPushNotifyService service = new GCMPushNotifyServiceImpl(senderId); + PushNotifyService service = new GCMPushNotifyServiceImpl(senderId); Map data = new HashMap(); data.put("google.Data", "Some Data"); GCMPushResponse response = (GCMPushResponse)service.push(data, null, receiverId); @@ -147,7 +151,7 @@ public void withInvalidKey() throws IOException { */ @Test public void publishWithAdditionalAttributes() throws IOException { - GCMPushNotifyService service = new GCMPushNotifyServiceImpl(senderId); + PushNotifyService service = new GCMPushNotifyServiceImpl(senderId); Map data = new HashMap(); data.put("Data", "Some Data"); data.put("Data2", "Some Data 2"); @@ -166,14 +170,14 @@ public void publishWithAdditionalAttributes() throws IOException { */ @Test public void publishToMultipleInvalidSenders() throws IOException { - GCMPushNotifyService service = new GCMPushNotifyServiceImpl(senderId); + PushNotifyService service = new GCMPushNotifyServiceImpl(senderId); Map data = new HashMap(); data.put("Data", "Some Data"); data.put("Data2", "Some Data 2"); Map attributes = new HashMap(); - attributes.put(GCMPushNotifyService.TIME_TO_LIVE, "1000"); - attributes.put(GCMPushNotifyService.COLLAPSE_KEY, "Update Available"); - attributes.put(GCMPushNotifyService.DELAY_WHILE_IDLE, "1"); + attributes.put(TIME_TO_LIVE, "1000"); + attributes.put(COLLAPSE_KEY, "Update Available"); + attributes.put(DELAY_WHILE_IDLE, "1"); GCMPushResponse response = (GCMPushResponse)service.push(data, attributes, receiverId, "123"); assertNotNull(response); assertEquals(1, response.getSuccessfulMessages());