001/**
002 * Copyright 2005-2016 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.krad.document;
017
018import org.kuali.rice.krad.uif.view.View;
019import org.kuali.rice.krad.uif.view.ViewModel;
020import org.kuali.rice.krad.uif.view.ViewPresentationControllerBase;
021import org.kuali.rice.krad.util.KRADConstants;
022import org.kuali.rice.krad.util.ObjectUtils;
023import org.kuali.rice.krad.web.form.DocumentFormBase;
024import org.kuali.rice.krad.web.form.UifFormBase;
025
026import java.util.HashSet;
027import java.util.Set;
028
029/**
030 * Implementation of {@link org.kuali.rice.krad.uif.view.ViewPresentationController} for
031 * {@link org.kuali.rice.krad.uif.view.DocumentView} instances
032 *
033 * <p>
034 * Adds flags for various document actions like save, route, cancel
035 * </p>
036 *
037 * <p>
038 * By default delegates to the {@link DocumentPresentationController} configured for the document in the data dictionary
039 * </p>
040 *
041 * @author Kuali Rice Team (rice.collab@kuali.org)
042 */
043public class DocumentViewPresentationControllerBase extends ViewPresentationControllerBase implements DocumentPresentationController {
044    private static final long serialVersionUID = 1461173145806477758L;
045
046    private DocumentPresentationController documentPresentationController;
047
048    @Override
049    public Set<String> getActionFlags(View view, UifFormBase model) {
050        Set<String> documentActions = new HashSet<String>();
051
052        Document document = ((DocumentFormBase) model).getDocument();
053
054        if (canEdit(document)) {
055            documentActions.add(KRADConstants.KUALI_ACTION_CAN_EDIT);
056        }
057
058        if (canAnnotate(document)) {
059            documentActions.add(KRADConstants.KUALI_ACTION_CAN_ANNOTATE);
060        }
061
062        if (canClose(document)) {
063            documentActions.add(KRADConstants.KUALI_ACTION_CAN_CLOSE);
064        }
065
066        if (canSave(document)) {
067            documentActions.add(KRADConstants.KUALI_ACTION_CAN_SAVE);
068        }
069
070        if (canRoute(document)) {
071            documentActions.add(KRADConstants.KUALI_ACTION_CAN_ROUTE);
072        }
073
074        if (canCancel(document)) {
075            documentActions.add(KRADConstants.KUALI_ACTION_CAN_CANCEL);
076        }
077
078        if (canReload(document)) {
079            documentActions.add(KRADConstants.KUALI_ACTION_CAN_RELOAD);
080        }
081
082        if (canCopy(document)) {
083            documentActions.add(KRADConstants.KUALI_ACTION_CAN_COPY);
084        }
085
086        if (canPerformRouteReport(document)) {
087            documentActions.add(KRADConstants.KUALI_ACTION_PERFORM_ROUTE_REPORT);
088        }
089
090        if (canAddAdhocRequests(document)) {
091            documentActions.add(KRADConstants.KUALI_ACTION_CAN_ADD_ADHOC_REQUESTS);
092        }
093
094        if (canBlanketApprove(document)) {
095            documentActions.add(KRADConstants.KUALI_ACTION_CAN_BLANKET_APPROVE);
096        }
097
098        if (canApprove(document)) {
099            documentActions.add(KRADConstants.KUALI_ACTION_CAN_APPROVE);
100        }
101
102        if (canDisapprove(document)) {
103            documentActions.add(KRADConstants.KUALI_ACTION_CAN_DISAPPROVE);
104        }
105
106        if (canSendAdhocRequests(document)) {
107            documentActions.add(KRADConstants.KUALI_ACTION_CAN_SEND_ADHOC_REQUESTS);
108        }
109
110        if (canSendNoteFyi(document)) {
111            documentActions.add(KRADConstants.KUALI_ACTION_CAN_SEND_NOTE_FYI);
112        }
113
114        if (this.canEditDocumentOverview(document)) {
115            documentActions.add(KRADConstants.KUALI_ACTION_CAN_EDIT_DOCUMENT_OVERVIEW);
116        }
117
118        if (canFyi(document)) {
119            documentActions.add(KRADConstants.KUALI_ACTION_CAN_FYI);
120        }
121
122        if (canAcknowledge(document)) {
123            documentActions.add(KRADConstants.KUALI_ACTION_CAN_ACKNOWLEDGE);
124        }
125
126        if (canComplete(document)) {
127            documentActions.add(KRADConstants.KUALI_ACTION_CAN_COMPLETE);
128        }
129
130        return documentActions;
131    }
132
133    public boolean canInitiate(String documentTypeName) {
134        return getDocumentPresentationController().canInitiate(documentTypeName);
135    }
136
137    public boolean canEdit(Document document) {
138        return getDocumentPresentationController().canEdit(document);
139    }
140
141    /**
142     * Verify the document can be edited in addition to the view
143     */
144    @Override
145    public boolean canEditView(View view, ViewModel model) {
146        DocumentFormBase documentForm = (DocumentFormBase) model;
147
148        return super.canEditView(view, model) && canEdit(documentForm.getDocument());
149    }
150
151    public boolean canAnnotate(Document document) {
152        return getDocumentPresentationController().canAnnotate(document);
153    }
154
155    public boolean canReload(Document document) {
156        return getDocumentPresentationController().canReload(document);
157    }
158
159    public boolean canClose(Document document) {
160        return getDocumentPresentationController().canClose(document);
161    }
162
163    public boolean canSave(Document document) {
164        return getDocumentPresentationController().canSave(document);
165    }
166
167    public boolean canRoute(Document document) {
168        return getDocumentPresentationController().canRoute(document);
169    }
170
171    public boolean canCancel(Document document) {
172        return getDocumentPresentationController().canEdit(document);
173    }
174
175    public boolean canRecall(Document document) {
176        return getDocumentPresentationController().canRecall(document);
177    }
178
179    public boolean canCopy(Document document) {
180        return getDocumentPresentationController().canCopy(document);
181    }
182
183    public boolean canPerformRouteReport(Document document) {
184        return getDocumentPresentationController().canPerformRouteReport(document);
185    }
186
187    public boolean canAddAdhocRequests(Document document) {
188        return getDocumentPresentationController().canAddAdhocRequests(document);
189    }
190
191    public boolean canBlanketApprove(Document document) {
192        return getDocumentPresentationController().canBlanketApprove(document);
193    }
194
195    public boolean canApprove(Document document) {
196        return getDocumentPresentationController().canApprove(document);
197    }
198
199    public boolean canDisapprove(Document document) {
200        return getDocumentPresentationController().canDisapprove(document);
201    }
202
203    public boolean canSendAdhocRequests(Document document) {
204        return getDocumentPresentationController().canSendAdhocRequests(document);
205    }
206
207    public boolean canSendNoteFyi(Document document) {
208        return getDocumentPresentationController().canSendNoteFyi(document);
209    }
210
211    public boolean canEditDocumentOverview(Document document) {
212        return getDocumentPresentationController().canEditDocumentOverview(document);
213    }
214
215    public boolean canFyi(Document document) {
216        return getDocumentPresentationController().canFyi(document);
217    }
218
219    public boolean canAcknowledge(Document document) {
220        return getDocumentPresentationController().canAcknowledge(document);
221    }
222    
223    public boolean canComplete(Document document) {
224        return getDocumentPresentationController().canComplete(document);
225    }
226
227    public DocumentPresentationController getDocumentPresentationController() {
228        return documentPresentationController;
229    }
230
231    public void setDocumentPresentationController(DocumentPresentationController documentPresentationController) {
232        this.documentPresentationController = documentPresentationController;
233    }
234
235    public void setDocumentPresentationControllerClass(
236            Class<? extends DocumentPresentationController> documentPresentationControllerClass) {
237        this.documentPresentationController = ObjectUtils.newInstance(documentPresentationControllerClass);
238    }
239}