001/**
002 * Copyright 2005-2015 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 */
016package org.kuali.rice.ken.service;
017
018import org.kuali.rice.core.api.util.xml.XmlException;
019import org.kuali.rice.ken.bo.NotificationBo;
020import org.kuali.rice.ken.bo.NotificationResponseBo;
021import org.xml.sax.SAXException;
022
023import javax.xml.parsers.ParserConfigurationException;
024import java.io.IOException;
025import java.io.InputStream;
026
027/**
028 * Notification Message Content service - handles parsing the notification XML message and also marshalling out BOs for the response.
029 * @see <a href="http://wiki.library.cornell.edu/wiki/display/notsys/Hi-Level+Service+Interface+Definitions#Hi-LevelServiceInterfaceDefinitions-NotificationMessageContentService">NotificationMessageContentService</a>
030 * @author Kuali Rice Team (rice.collab@kuali.org)
031 */
032public interface NotificationMessageContentService {
033    /**
034     * Parses a Notification request message into business objects.  Performs syntactic and semantic validation.  
035     * This method takes an InputStream.
036     * @param stream request message stream
037     * @return Notification business object
038     * @throws SAXException
039     * @throws ParserConfigurationException
040     * @throws IOException
041     * @throws XmlException
042     */
043    public NotificationBo parseNotificationRequestMessage(InputStream stream) throws IOException, XmlException;
044    
045    /**
046     * Parses a Notification request message into business objects.  Performs syntactic and semantic validation.  
047     * This method takes a String of XML.
048     * @param notificationMessageAsXml
049     * @return
050     * @throws IOException
051     * @throws XmlException
052     */
053    public NotificationBo parseNotificationRequestMessage(String notificationMessageAsXml) throws IOException, XmlException;
054    
055    /**
056     * Generates a Notification response message
057     * @param response
058     * @return String XML representation of a Notification response object
059     */
060    public String generateNotificationResponseMessage(NotificationResponseBo response);
061
062    /**
063     * This method is responsible for marshalling out the passed in Notification object in and XML representation. 
064     * @param notification
065     * @return String of XML.
066     */
067    public String generateNotificationMessage(NotificationBo notification);
068    
069    /**
070     * This method is responsible for marshalling out the passed in Notification object in and XML representation, with 
071     * the addition of adding the specific recipient to the recipients list and removing the others. 
072     * @param notification
073     * @param userRecipientId
074     * @return String of XML.
075     */
076    public String generateNotificationMessage(NotificationBo notification, String userRecipientId);
077    
078    /**
079     * This method parses out the serialized XML version of Notification BO and populates a Notification BO with it.
080     * @param xmlAsBytes
081     * @return Notification
082     * @throws Exception
083     */
084    public NotificationBo parseSerializedNotificationXml(byte[] xmlAsBytes) throws Exception;
085}