001    /**
002     * Copyright 2005-2012 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.krad.service;
017    
018    import org.kuali.rice.krad.maintenance.MaintenanceDocument;
019    import org.kuali.rice.krad.maintenance.MaintenanceLock;
020    import org.kuali.rice.krad.maintenance.Maintainable;
021    
022    import java.util.List;
023    import java.util.Map;
024    
025    /**
026     * Provides methods for working with <code>MaintenanceDocument</code>(s)
027     *
028     * @author Kuali Rice Team (rice.collab@kuali.org)
029     */
030    public interface MaintenanceDocumentService {
031    
032            /**
033             * Prepares the <code>MaintenanceDocument</code> on initial request
034             * 
035             * <p>
036             * This includes retrieving the data object for edit or copy, clearing
037             * fields
038             * </p>
039             * 
040             * @param objectClassName
041             *            - class name for the object being maintained
042             * @param docTypeName
043             *            - workflow doc type for the maintenance document requested
044             * @param maintenanceAction
045             *            - indicates whether this is a new, copy, or edit maintenance
046             *            action
047             * @return MaintenanceDocument prepared document instance
048             */
049            public MaintenanceDocument setupNewMaintenanceDocument(
050                            String objectClassName, String docTypeName, String maintenanceAction);
051    
052        /**
053         * Called to setup the object being maintained
054         *
055         * <p>
056         * For edit and copy actions, the old record is retrieved and prepared for
057         * editing (in the case of a copy some fields are cleared). In addition some
058         * authorization checks are performed and hooks for custom
059         * <code>Maintainble</code> implementations are invoked.
060         * </p>
061         *
062         * @param document - document instance for the maintenance object
063         * @param maintenanceAction - the requested maintenance action (new, new with existing,
064         * copy, edit)
065         * @param requestParameters - Map of parameters from the request
066         */
067        public void setupMaintenanceObject(MaintenanceDocument document, String maintenanceAction,
068                Map<String, String[]> requestParameters);
069    
070        /**
071             * Attempts to find any other active documents that are pending on the same
072             * maintenance record.
073             * 
074             * If any are pending and locked, thereby blocking this document, then the
075             * docHeaderId/documentNumber of the blocking locked document is returned.
076             * 
077             * Otherwise, if nothing is blocking, then null is returned.
078             * 
079             * @param document
080             *            - document to test
081             * @return A String representing the docHeaderId of any blocking document,
082             *         or null if none are blocking
083             * 
084             */
085            public String getLockingDocumentId(MaintenanceDocument document);
086    
087            /**
088             * Attempts to find any other active documents that are pending on the same
089             * maintenance record.
090             * 
091             * If any are pending and locked, thereby blocking this document, then the
092             * docHeaderId/documentNumber of the blocking locked document is returned.
093             * 
094             * Otherwise, if nothing is blocking, then null is returned.
095             * 
096             * @param maintainable
097             *            - maintainable representing the document to test
098             * @param documentNumber
099             *            - the documentNumber/docHeaderId of the document to test
100             * @return A String representing the docHeaderId of any blocking document,
101             *         or null if none are blocking
102             */
103            public String getLockingDocumentId(Maintainable maintainable,
104                            String documentNumber);
105    
106            /**
107             * Call the same-named method in the Dao, since the service has access to
108             * the Dao, but the caller doesn't.
109             * 
110             * This method deletes the locks for the given document number. It is called
111             * when the document is final, thus it can be unlocked, or when the locks
112             * need to be regenerated (thus they get cleared first).
113             * 
114             * @param documentNumber
115             *            - document number whose locks should be deleted
116             */
117            public void deleteLocks(String documentNumber);
118    
119            /**
120             * Call the same-named method in the Dao, since the service has access to
121             * the Dao, but the caller doesn't.
122             * 
123             * This method stores the given list of maintenance locks. Typically these
124             * will all be for the same document.
125             * 
126             * @param maintenanceLocks
127             *            - the list of maintenance locks to be stored
128             */
129            public void storeLocks(List<MaintenanceLock> maintenanceLocks);
130    
131    }