001 /** 002 * Copyright 2005-2014 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.kns.service.impl; 017 018 import org.apache.commons.lang.StringUtils; 019 import org.kuali.rice.kns.datadictionary.KNSDocumentEntry; 020 import org.kuali.rice.kns.datadictionary.MaintenanceDocumentEntry; 021 import org.kuali.rice.kns.datadictionary.TransactionalDocumentEntry; 022 import org.kuali.rice.kns.document.authorization.DocumentAuthorizer; 023 import org.kuali.rice.kns.document.authorization.DocumentAuthorizerBase; 024 import org.kuali.rice.kns.document.authorization.DocumentPresentationController; 025 import org.kuali.rice.kns.document.authorization.DocumentPresentationControllerBase; 026 import org.kuali.rice.kns.document.authorization.MaintenanceDocumentPresentationControllerBase; 027 import org.kuali.rice.kns.document.authorization.TransactionalDocumentAuthorizerBase; 028 import org.kuali.rice.kns.document.authorization.TransactionalDocumentPresentationControllerBase; 029 import org.kuali.rice.kns.service.DocumentHelperService; 030 import org.kuali.rice.krad.datadictionary.DataDictionary; 031 import org.kuali.rice.krad.document.Document; 032 import org.kuali.rice.kns.document.authorization.MaintenanceDocumentAuthorizerBase; 033 import org.kuali.rice.krad.service.DataDictionaryService; 034 import org.kuali.rice.krad.service.KRADServiceLocatorWeb; 035 036 /** 037 * This class is a utility service intended to help retrieve objects related to particular documents. 038 * 039 * @author Kuali Rice Team (rice.collab@kuali.org) 040 * 041 */ 042 public class DocumentHelperServiceImpl implements DocumentHelperService { 043 044 private DataDictionaryService dataDictionaryService; 045 046 /** 047 * @see org.kuali.rice.kns.service.DocumentHelperService#getDocumentAuthorizer(java.lang.String) 048 * // TODO: in krad documents could have multiple views and multiple authorizer classes 049 */ 050 public DocumentAuthorizer getDocumentAuthorizer(String documentType) { 051 DataDictionary dataDictionary = getDataDictionaryService().getDataDictionary(); 052 053 if (StringUtils.isBlank(documentType)) { 054 throw new IllegalArgumentException("invalid (blank) documentType"); 055 } 056 057 KNSDocumentEntry documentEntry = (KNSDocumentEntry) dataDictionary.getDocumentEntry(documentType); 058 if (documentEntry == null) { 059 throw new IllegalArgumentException("unknown documentType '" + documentType + "'"); 060 } 061 062 Class<? extends DocumentAuthorizer> documentAuthorizerClass = documentEntry.getDocumentAuthorizerClass(); 063 064 DocumentAuthorizer documentAuthorizer = null; 065 try { 066 if (documentAuthorizerClass != null) { 067 documentAuthorizer = documentAuthorizerClass.newInstance(); 068 } 069 else if (documentEntry instanceof MaintenanceDocumentEntry) { 070 documentAuthorizer = new MaintenanceDocumentAuthorizerBase(); 071 } 072 else if (documentEntry instanceof TransactionalDocumentEntry) { 073 documentAuthorizer = new TransactionalDocumentAuthorizerBase(); 074 } 075 else { 076 documentAuthorizer = new DocumentAuthorizerBase(); 077 } 078 } 079 catch (Exception e) { 080 throw new RuntimeException("unable to instantiate documentAuthorizer '" + documentAuthorizerClass.getName() + "' for doctype '" + documentType + "'", e); 081 } 082 083 return documentAuthorizer; 084 } 085 086 /** 087 * @see org.kuali.rice.kns.service.DocumentHelperService#getDocumentAuthorizer(org.kuali.rice.krad.document.Document) 088 */ 089 public DocumentAuthorizer getDocumentAuthorizer(Document document) { 090 if (document == null) { 091 throw new IllegalArgumentException("invalid (null) document"); 092 } else if (document.getDocumentHeader() == null) { 093 throw new IllegalArgumentException( 094 "invalid (null) document.documentHeader"); 095 } else if (!document.getDocumentHeader().hasWorkflowDocument()) { 096 throw new IllegalArgumentException( 097 "invalid (null) document.documentHeader.workflowDocument"); 098 } 099 100 String documentType = document.getDocumentHeader().getWorkflowDocument().getDocumentTypeName(); 101 102 DocumentAuthorizer documentAuthorizer = getDocumentAuthorizer(documentType); 103 return documentAuthorizer; 104 } 105 106 /** 107 * @see org.kuali.rice.kns.service.DocumentHelperService#getDocumentPresentationController(java.lang.String) 108 * // TODO: in krad documents could have multiple views and multiple presentation controller 109 */ 110 public DocumentPresentationController getDocumentPresentationController(String documentType) { 111 DataDictionary dataDictionary = getDataDictionaryService().getDataDictionary(); 112 DocumentPresentationController documentPresentationController = null; 113 114 if (StringUtils.isBlank(documentType)) { 115 throw new IllegalArgumentException("invalid (blank) documentType"); 116 } 117 118 KNSDocumentEntry documentEntry = (KNSDocumentEntry) dataDictionary.getDocumentEntry(documentType); 119 if (documentEntry == null) { 120 throw new IllegalArgumentException("unknown documentType '" + documentType + "'"); 121 } 122 Class<? extends DocumentPresentationController> documentPresentationControllerClass = null; 123 try{ 124 documentPresentationControllerClass = documentEntry.getDocumentPresentationControllerClass(); 125 if(documentPresentationControllerClass != null){ 126 documentPresentationController = documentPresentationControllerClass.newInstance(); 127 } else { 128 KNSDocumentEntry doc = (KNSDocumentEntry) dataDictionary.getDocumentEntry(documentType); 129 if ( doc instanceof TransactionalDocumentEntry) { 130 documentPresentationController = new TransactionalDocumentPresentationControllerBase(); 131 } else if(doc instanceof MaintenanceDocumentEntry) { 132 documentPresentationController = new MaintenanceDocumentPresentationControllerBase(); 133 } else { 134 documentPresentationController = new DocumentPresentationControllerBase(); 135 } 136 } 137 } 138 catch (Exception e) { 139 throw new RuntimeException("unable to instantiate documentPresentationController '" + documentPresentationControllerClass.getName() + "' for doctype '" + documentType + "'", e); 140 } 141 142 return documentPresentationController; 143 } 144 145 /** 146 * @see org.kuali.rice.kns.service.DocumentHelperService#getDocumentPresentationController(org.kuali.rice.krad.document.Document) 147 */ 148 public DocumentPresentationController getDocumentPresentationController(Document document) { 149 if (document == null) { 150 throw new IllegalArgumentException("invalid (null) document"); 151 } 152 else if (document.getDocumentHeader() == null) { 153 throw new IllegalArgumentException("invalid (null) document.documentHeader"); 154 } 155 else if (!document.getDocumentHeader().hasWorkflowDocument()) { 156 throw new IllegalArgumentException("invalid (null) document.documentHeader.workflowDocument"); 157 } 158 159 String documentType = document.getDocumentHeader().getWorkflowDocument().getDocumentTypeName(); 160 161 DocumentPresentationController documentPresentationController = getDocumentPresentationController(documentType); 162 return documentPresentationController; 163 } 164 165 /** 166 * @return the dataDictionaryService 167 */ 168 public DataDictionaryService getDataDictionaryService() { 169 if (dataDictionaryService == null) { 170 this.dataDictionaryService = KRADServiceLocatorWeb.getDataDictionaryService(); 171 } 172 return this.dataDictionaryService; 173 } 174 175 /** 176 * @param dataDictionaryService the dataDictionaryService to set 177 */ 178 public void setDataDictionaryService(DataDictionaryService dataDictionaryService) { 179 this.dataDictionaryService = dataDictionaryService; 180 } 181 182 }