View Javadoc
1   /**
2    * Copyright 2011 The Kuali Foundation Licensed under the
3    * Educational Community License, Version 2.0 (the "License"); you may
4    * not use this file except in compliance with the License. You may
5    * obtain a copy of the License at
6    *
7    * http://www.osedu.org/licenses/ECL-2.0
8    *
9    * Unless required by applicable law or agreed to in writing,
10   * software distributed under the License is distributed on an "AS IS"
11   * BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
12   * or implied. See the License for the specific language governing
13   * permissions and limitations under the License.
14   */
15  
16  package org.kuali.mobility.push.service;
17  
18  import org.kuali.mobility.push.entity.Device;
19  import org.kuali.mobility.push.entity.Push;
20  import org.kuali.mobility.push.entity.PushDeviceTuple;
21  
22  import java.util.List;
23  
24  /**
25   * Interface for sending and persisting <code>Push</code> messages to
26   * <code>Device</code>.
27   * 
28   * Implementations of this service will typically persist <code>Push</code>
29   * messages from a database, retrieve devices from a service, and send the
30   * message to the devices using an implementatin of the <code>SendService</code>
31   * interface.
32   * 
33   * @author Kuali Mobility Team (mobility.dev@kuali.org)
34   * @since 2.0.0
35   */
36  public interface PushService {
37  
38  	/**
39  	 * Persists a <code>Push</code> message.
40  	 * 
41  	 * @param push
42  	 *            Push message to persist.
43  	 */
44  	void savePush(Push push);
45  
46  	/**
47  	 * Removes a <code>Push</code> message.
48  	 * 
49  	 * @param push
50  	 *            Push message to persist.
51  	 */
52  	boolean removePush(Push push);
53  
54  	/**
55  	 * Persists a push messages that should be sent to many devices
56  	 * 
57  	 * @param push
58  	 *            Push message to be sent.
59  	 * @param Devices
60  	 *            Devices the Push message should be sent to.
61  	 */
62  	void savePush(Push push, List<Device> Devices);
63  
64  	/**
65  	 * Returns the number of <code>Push</code> messages persisted.
66  	 * 
67  	 * @return number of <code>Push</code> messages persisted.
68  	 */
69  	int countPushes();
70  
71  	/**
72  	 * Finds a <code>Push</code> by its ID.
73  	 * 
74  	 * @param id
75  	 *            ID of the <code>Push</code> to find.
76  	 * @return The <code>Push</code> that has the specified ID.
77  	 */
78  	Push findPushById(Long id);
79  
80  	/**
81  	 * Returns a list of <b>ALL</b> the <code>Push</code> messages that are
82  	 * persisted.<br>
83  	 * <b>WARNING: This method can return A LOT of data</b>
84  	 * 
85  	 * @return A lsit of all the persisted <code>Push</code> messages.
86  	 */
87  	List<Push> findAllPush();
88  
89  	/**
90  	 * Returns a list of <b>ALL</b> the <code>Push</code> messages per page number that are
91  	 * persisted.<br>
92  	 * The number of records per page is fetched from property file.<br>
93  	 * <b>WARNING: This method can return A LOT of data</b>
94  	 * 
95  	 * @return A lsit of all the persisted <code>Push</code> messages.
96  	 */
97  	List<Push> findAllPushByPageNumber(Integer pageNum);
98  
99  	/**
100 	 * Finds a list of <code>Devices</code> that was linked to a
101 	 * <code>Push</code>.
102 	 * 
103 	 * @param push
104 	 *            <code>Push</code> to find devices of</code>.
105 	 * @return List of <code>Devices</code> that was linked.
106 	 */
107 	List<Device> findDevicesForPush(Push push);
108 
109 	/**
110 	 * Finds a list of unsent <code>PushDeviceTuple</code>.
111 	 * 
112 	 * @return List of unsent <code>PushDeviceTuple</code>.
113 	 */
114 	List<PushDeviceTuple> findUnsentPushTuples();
115 
116 	/**
117 	 * Sends a <code>Push</code> message to the specified <code>Device</code>
118 	 * without persisting the message.
119 	 * 
120 	 * @param push
121 	 *            Push message to send.
122 	 * @param device
123 	 *            Device to send the message to.
124 	 */
125 	int sendPush(Push push, Device device);
126 
127 	/**
128 	 * Sends a <code>Push</code< message to the specified list of devices
129 	 * without persisting the message.
130 	 * 
131 	 * @param push
132 	 *            Push message to send.
133 	 * @param devices
134 	 *            Devices to send the message to.
135 	 */
136 	int sendPush(Push push, List<Device> devices);
137 
138 	/**
139 	 * Sends a
140 	 * <code>Push</code< message to the specified list of username. All devices for those users will be searched
141 	 * for, and messages will be sent to each device without persisting the message.
142 	 * 
143 	 * @param push
144 	 *            Push message to send.
145 	 * @param usernames
146 	 *            List of usernames to send push notifications too.
147 	 */
148 	int sendPushToUsers(Push push, List<String> usernames);
149 
150 	/**
151 	 * Attempts to send <code>PushDeviceTuple</code>
152 	 * 
153 	 * @param tuples
154 	 *            List of <code>PushDeviceTuple</code> to send.
155 	 * @return
156 	 */
157 	int sendPush(List<PushDeviceTuple> tuples);
158 
159 	/**
160 	 * Find User details by push ID.
161 	 * 
162 	 * @param pushId
163 	 *            ID of the <code>Push</code>.
164 	 * @return the user details having specified ID.
165 	 */
166 	String getUserDetails(String pushId);
167 
168 }