/** * All rights reserved. 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.jivesoftware.smackx.pubsub; import java.util.Collections; import java.util.Date; import java.util.List; /** * Represents an event generated by an item(s) being published to a node. * * @author Robin Collier */ public class ItemPublishEvent <T extends Item> extends SubscriptionEvent { private List<T> items; private Date originalDate; /** * Constructs an <tt>ItemPublishEvent</tt> with the provided list * of {@link Item} that were published. * * @param nodeId The id of the node the event came from * @param eventItems The list of {@link Item} that were published */ public ItemPublishEvent(String nodeId, List<T> eventItems) { super(nodeId); items = eventItems; } /** * Constructs an <tt>ItemPublishEvent</tt> with the provided list * of {@link Item} that were published. The list of subscription ids * represents the subscriptions that matched the event, in the case * of the user having multiple subscriptions. * * @param nodeId The id of the node the event came from * @param eventItems The list of {@link Item} that were published * @param subscriptionIds The list of subscriptionIds */ public ItemPublishEvent(String nodeId, List<T> eventItems, List<String> subscriptionIds) { super(nodeId, subscriptionIds); items = eventItems; } /** * Constructs an <tt>ItemPublishEvent</tt> with the provided list * of {@link Item} that were published in the past. The published * date signifies that this is delayed event. The list of subscription ids * represents the subscriptions that matched the event, in the case * of the user having multiple subscriptions. * * @param nodeId The id of the node the event came from * @param eventItems The list of {@link Item} that were published * @param subscriptionIds The list of subscriptionIds * @param publishedDate The original publishing date of the events */ public ItemPublishEvent(String nodeId, List<T> eventItems, List<String> subscriptionIds, Date publishedDate) { super(nodeId, subscriptionIds); items = eventItems; if (publishedDate != null) originalDate = publishedDate; } /** * Get the list of {@link Item} that were published. * * @return The list of published {@link Item} */ public List<T> getItems() { return Collections.unmodifiableList(items); } /** * Indicates whether this event was delayed. That is, the items * were published to the node at some time in the past. This will * typically happen if there is an item already published to the node * before a user subscribes to it. In this case, when the user * subscribes, the server may send the last item published to the node * with a delay date showing its time of original publication. * * @return true if the items are delayed, false otherwise. */ public boolean isDelayed() { return (originalDate != null); } /** * Gets the original date the items were published. This is only * valid if {@link #isDelayed()} is true. * * @return Date items were published if {@link #isDelayed()} is true, null otherwise. */ public Date getPublishedDate() { return originalDate; } @Override public String toString() { return getClass().getName() + " [subscriptions: " + getSubscriptions() + "], [Delayed: " + (isDelayed() ? originalDate.toString() : "false") + ']'; } }