001 /** 002 * Copyright 2005-2013 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.uif.view; 017 018 import org.apache.commons.lang.StringUtils; 019 import org.kuali.rice.krad.datadictionary.DocumentEntry; 020 import org.kuali.rice.krad.datadictionary.parse.BeanTag; 021 import org.kuali.rice.krad.datadictionary.parse.BeanTagAttribute; 022 import org.kuali.rice.krad.document.Document; 023 import org.kuali.rice.krad.document.DocumentViewAuthorizerBase; 024 import org.kuali.rice.krad.document.DocumentViewPresentationControllerBase; 025 import org.kuali.rice.krad.keyvalues.KeyValuesFinder; 026 import org.kuali.rice.krad.service.KRADServiceLocatorWeb; 027 import org.kuali.rice.krad.uif.UifConstants; 028 029 /** 030 * View type for KRAD documents 031 * 032 * <p> 033 * Provides commons configuration and default behavior applicable to documents 034 * in the KRAD module. 035 * </p> 036 * 037 * @author Kuali Rice Team (rice.collab@kuali.org) 038 */ 039 @BeanTag(name = "documentView-bean", parent = "Uif-DocumentView") 040 public class DocumentView extends FormView { 041 private static final long serialVersionUID = 2251983409572774175L; 042 043 private Class<? extends Document> documentClass; 044 045 private boolean allowsNoteAttachments = true; 046 private boolean allowsNoteFYI = false; 047 private boolean displayTopicFieldInNotes = false; 048 049 private Class<? extends KeyValuesFinder> attachmentTypesValuesFinderClass; 050 051 public DocumentView() { 052 super(); 053 } 054 055 /** 056 * The following initialization is performed: 057 * 058 * <ul> 059 * <li>Retrieve the document entry</li> 060 * <li>Set up the document view authorizer and presentation controller</li> 061 * </ul> 062 * 063 * @see org.kuali.rice.krad.uif.container.ContainerBase#performInitialization(org.kuali.rice.krad.uif.view.View, 064 * java.lang.Object) 065 */ 066 @Override 067 public void performInitialization(View view, Object model) { 068 super.performInitialization(view, model); 069 070 // get document entry 071 DocumentEntry documentEntry = getDocumentEntryForView(); 072 pushObjectToContext(UifConstants.ContextVariableNames.DOCUMENT_ENTRY, documentEntry); 073 074 // setup authorizer and presentation controller using the configured authorizer and pc for document 075 if (getAuthorizer() == null) { 076 setAuthorizer(new DocumentViewAuthorizerBase()); 077 } 078 079 if (getAuthorizer() instanceof DocumentViewAuthorizerBase) { 080 DocumentViewAuthorizerBase documentViewAuthorizerBase = (DocumentViewAuthorizerBase) getAuthorizer(); 081 if (documentViewAuthorizerBase.getDocumentAuthorizer() == null) { 082 documentViewAuthorizerBase.setDocumentAuthorizerClass(documentEntry.getDocumentAuthorizerClass()); 083 } 084 } 085 086 if (getPresentationController() == null) { 087 setPresentationController(new DocumentViewPresentationControllerBase()); 088 } 089 090 if (getPresentationController() instanceof DocumentViewPresentationControllerBase) { 091 DocumentViewPresentationControllerBase documentViewPresentationControllerBase = 092 (DocumentViewPresentationControllerBase) getPresentationController(); 093 if (documentViewPresentationControllerBase.getDocumentPresentationController() == null) { 094 documentViewPresentationControllerBase.setDocumentPresentationControllerClass( 095 documentEntry.getDocumentPresentationControllerClass()); 096 } 097 } 098 099 getObjectPathToConcreteClassMapping().put(getDefaultBindingObjectPath(), getDocumentClass()); 100 } 101 102 /** 103 * Retrieves the associated {@link DocumentEntry} for the document view 104 * 105 * @return DocumentEntry entry (exception thrown if one is not found) 106 */ 107 protected DocumentEntry getDocumentEntryForView() { 108 DocumentEntry documentEntry = KRADServiceLocatorWeb.getDocumentDictionaryService().getDocumentEntryByClass( 109 getDocumentClass()); 110 111 if (documentEntry == null) { 112 throw new RuntimeException( 113 "Unable to find document entry for document class: " + getDocumentClass().getName()); 114 } 115 116 return documentEntry; 117 } 118 119 /** 120 * Gets the document class 121 * 122 * @return Class<? extends Document> the document class. 123 */ 124 @BeanTagAttribute(name="documentClass") 125 public Class<? extends Document> getDocumentClass() { 126 return this.documentClass; 127 } 128 129 /** 130 * Sets the document class 131 * 132 * @param documentClass 133 */ 134 public void setDocumentClass(Class<? extends Document> documentClass) { 135 this.documentClass = documentClass; 136 } 137 138 /** 139 * Gets boolean that indicates if the document view allows note attachments 140 * 141 * @return true if the document view allows note attachments 142 */ 143 @BeanTagAttribute(name="allowsNoteAttachments") 144 public boolean isAllowsNoteAttachments() { 145 return this.allowsNoteAttachments; 146 } 147 148 /** 149 * Sets boolean that indicates if the document view allows note attachments 150 * 151 * @param allowsNoteAttachments 152 */ 153 public void setAllowsNoteAttachments(boolean allowsNoteAttachments) { 154 this.allowsNoteAttachments = allowsNoteAttachments; 155 } 156 157 /** 158 * Gets boolean that indicates if the document view allows note FYI 159 * 160 * @return true if the document view allows note FYI 161 */ 162 @BeanTagAttribute(name="allowsNoteFYI") 163 public boolean isAllowsNoteFYI() { 164 return this.allowsNoteFYI; 165 } 166 167 /** 168 * Sets boolean that indicates if the document view allows note FYI 169 * 170 * @param allowsNoteFYI 171 */ 172 public void setAllowsNoteFYI(boolean allowsNoteFYI) { 173 this.allowsNoteFYI = allowsNoteFYI; 174 } 175 176 /** 177 * Gets boolean that indicates if the document view displays the topic field in notes 178 * 179 * @return true if the document view displays the topic field in notes 180 */ 181 @BeanTagAttribute(name="displayTopicFieldInNotes") 182 public boolean isDisplayTopicFieldInNotes() { 183 return this.displayTopicFieldInNotes; 184 } 185 186 /** 187 * Sets boolean that indicates if the document view displays the topic field in notes 188 * 189 * @param displayTopicFieldInNotes 190 */ 191 public void setDisplayTopicFieldInNotes(boolean displayTopicFieldInNotes) { 192 this.displayTopicFieldInNotes = displayTopicFieldInNotes; 193 } 194 195 /** 196 * Gets attachment types values finder classs 197 * 198 * @return attachment types values finder class 199 */ 200 @BeanTagAttribute(name="attachmentTypesValuesFinderClass",type = BeanTagAttribute.AttributeType.SINGLEBEAN) 201 public Class<? extends KeyValuesFinder> getAttachmentTypesValuesFinderClass() { 202 return this.attachmentTypesValuesFinderClass; 203 } 204 205 /** 206 * Sets attachment types values finder classs 207 * 208 * @param attachmentTypesValuesFinderClass 209 */ 210 public void setAttachmentTypesValuesFinderClass(Class<? extends KeyValuesFinder> attachmentTypesValuesFinderClass) { 211 this.attachmentTypesValuesFinderClass = attachmentTypesValuesFinderClass; 212 } 213 214 }