001    /*
002     * Copyright 2007-2008 The Kuali Foundation
003     * 
004     * Licensed under the Educational Community License, Version 2.0 (the "License");
005     * you may not use this file except in compliance with the License.
006     * You may obtain a copy of the License at
007     * 
008     * http://www.opensource.org/licenses/ecl2.php
009     * 
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS,
012     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013     * See the License for the specific language governing permissions and
014     * limitations under the License.
015     */
016    package org.kuali.rice.kcb.service;
017    
018    import java.util.Collection;
019    
020    import org.kuali.rice.kcb.bo.Message;
021    import org.kuali.rice.kcb.bo.MessageDelivery;
022    import org.kuali.rice.kcb.bo.MessageDeliveryStatus;
023    
024    /**
025     * The MessageDeliveryService class is responsible various functions regarding the 
026     * MessageDelivery records that exist within the system.
027     *
028     * @author Kuali Rice Team (rice.collab@kuali.org)
029     */
030    public interface MessageDeliveryService {
031        /**
032         * Saves a MessageDelivery
033         * @param delivery the MessageDelivery to save
034         */
035        public void saveMessageDelivery(MessageDelivery delivery);
036    
037        /**
038         * Deletes a MessageDelivery
039         * @param delivery the MessageDelivery to delete 
040         */
041        public void deleteMessageDelivery(MessageDelivery delivery);
042    
043        /**
044         * This method will retrieve a MessageDelivery object from the system, given the id of the 
045         * actual record.
046         * @param id
047         * @return MessageDelivery
048         */
049        public MessageDelivery getMessageDelivery(Long id);
050    
051        /**
052         * This method will retrieve a MessageDelivery object from the system, given the external deliverer system id
053         * registered with the MessageDelivery.
054         * @param id the external deliverer system id
055         * @return MessageDelivery
056         */
057        public MessageDelivery getMessageDeliveryByDelivererSystemId(Long id);
058    
059        /**
060         * This method will return all MessageDelivery objects in the system 
061         * @return Collection<MessageDelivery> list of MessageDelivery objects in the system
062         */
063        public Collection<MessageDelivery> getAllMessageDeliveries();
064        
065        /**
066         * This method will return all MessageDelievery objects generated for the given Message
067         * @param message the message which generated the message deliveries
068         * @return collection of NotificationMessageDelivery objects generated for the given Notification for the given user
069         */
070        public Collection<MessageDelivery> getMessageDeliveries(Message message);
071        
072        /**
073         * Locks and takes all message deliveries of a given message in the system with any of the specified statuses
074         * @param messageId the id of the message whose deliveries to take 
075         * @param status the statuses of message deliveries to take
076         * @return a collection of message deliveries
077         */
078        public Collection<MessageDelivery> lockAndTakeMessageDeliveries(Long messageId, MessageDeliveryStatus[] status);
079    
080        /**
081         * Locks and takes all message deliveries in the system with any of the specified statuses
082         * @param status the statuses of message deliveries to take
083         * @return a collection of message deliveries
084         */
085        public Collection<MessageDelivery> lockAndTakeMessageDeliveries(MessageDeliveryStatus[] status);
086    }