001 /* 002 * Copyright 2007-2009 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.DataDictionary; 020 import org.kuali.rice.kns.datadictionary.DocumentEntry; 021 import org.kuali.rice.kns.datadictionary.MaintenanceDocumentEntry; 022 import org.kuali.rice.kns.datadictionary.TransactionalDocumentEntry; 023 import org.kuali.rice.kns.document.Document; 024 import org.kuali.rice.kns.document.authorization.DocumentAuthorizer; 025 import org.kuali.rice.kns.document.authorization.DocumentAuthorizerBase; 026 import org.kuali.rice.kns.document.authorization.DocumentPresentationController; 027 import org.kuali.rice.kns.document.authorization.DocumentPresentationControllerBase; 028 import org.kuali.rice.kns.document.authorization.MaintenanceDocumentAuthorizerBase; 029 import org.kuali.rice.kns.document.authorization.MaintenanceDocumentPresentationControllerBase; 030 import org.kuali.rice.kns.document.authorization.TransactionalDocumentAuthorizerBase; 031 import org.kuali.rice.kns.document.authorization.TransactionalDocumentPresentationControllerBase; 032 import org.kuali.rice.kns.service.DataDictionaryService; 033 import org.kuali.rice.kns.service.DocumentHelperService; 034 import org.kuali.rice.kns.service.KNSServiceLocator; 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 */ 049 public DocumentAuthorizer getDocumentAuthorizer(String documentType) { 050 DataDictionary dataDictionary = getDataDictionaryService().getDataDictionary(); 051 052 if (StringUtils.isBlank(documentType)) { 053 throw new IllegalArgumentException("invalid (blank) documentType"); 054 } 055 056 DocumentEntry documentEntry = dataDictionary.getDocumentEntry(documentType); 057 if (documentEntry == null) { 058 throw new IllegalArgumentException("unknown documentType '" + documentType + "'"); 059 } 060 061 Class<? extends DocumentAuthorizer> documentAuthorizerClass = documentEntry.getDocumentAuthorizerClass(); 062 063 DocumentAuthorizer documentAuthorizer = null; 064 try { 065 if (documentAuthorizerClass != null) { 066 documentAuthorizer = documentAuthorizerClass.newInstance(); 067 } 068 else if (documentEntry instanceof MaintenanceDocumentEntry) { 069 documentAuthorizer = new MaintenanceDocumentAuthorizerBase(); 070 } 071 else if (documentEntry instanceof TransactionalDocumentEntry) { 072 documentAuthorizer = new TransactionalDocumentAuthorizerBase(); 073 } 074 else { 075 documentAuthorizer = new DocumentAuthorizerBase(); 076 } 077 } 078 catch (Exception e) { 079 throw new RuntimeException("unable to instantiate documentAuthorizer '" + documentAuthorizerClass.getName() + "' for doctype '" + documentType + "'", e); 080 } 081 082 return documentAuthorizer; 083 } 084 085 /** 086 * @see org.kuali.rice.kns.service.DocumentHelperService#getDocumentAuthorizer(org.kuali.rice.kns.document.Document) 087 */ 088 public DocumentAuthorizer getDocumentAuthorizer(Document document) { 089 if (document == null) { 090 throw new IllegalArgumentException("invalid (null) document"); 091 } else if (document.getDocumentHeader() == null) { 092 throw new IllegalArgumentException( 093 "invalid (null) document.documentHeader"); 094 } else if (!document.getDocumentHeader().hasWorkflowDocument()) { 095 throw new IllegalArgumentException( 096 "invalid (null) document.documentHeader.workflowDocument"); 097 } 098 099 String documentType = document.getDocumentHeader().getWorkflowDocument().getDocumentType(); 100 101 DocumentAuthorizer documentAuthorizer = getDocumentAuthorizer(documentType); 102 return documentAuthorizer; 103 } 104 105 /** 106 * @see org.kuali.rice.kns.service.DocumentHelperService#getDocumentPresentationController(java.lang.String) 107 */ 108 public DocumentPresentationController getDocumentPresentationController(String documentType) { 109 DataDictionary dataDictionary = getDataDictionaryService().getDataDictionary(); 110 DocumentPresentationController documentPresentationController = null; 111 112 if (StringUtils.isBlank(documentType)) { 113 throw new IllegalArgumentException("invalid (blank) documentType"); 114 } 115 116 DocumentEntry documentEntry = dataDictionary.getDocumentEntry(documentType); 117 if (documentEntry == null) { 118 throw new IllegalArgumentException("unknown documentType '" + documentType + "'"); 119 } 120 Class<? extends DocumentPresentationController> documentPresentationControllerClass = null; 121 try{ 122 documentPresentationControllerClass = documentEntry.getDocumentPresentationControllerClass(); 123 if(documentPresentationControllerClass != null){ 124 documentPresentationController = documentPresentationControllerClass.newInstance(); 125 } else { 126 DocumentEntry doc = dataDictionary.getDocumentEntry(documentType); 127 if ( doc instanceof TransactionalDocumentEntry ) { 128 documentPresentationController = new TransactionalDocumentPresentationControllerBase(); 129 } else if(doc instanceof MaintenanceDocumentEntry) { 130 documentPresentationController = new MaintenanceDocumentPresentationControllerBase(); 131 } else { 132 documentPresentationController = new DocumentPresentationControllerBase(); 133 } 134 } 135 } 136 catch (Exception e) { 137 throw new RuntimeException("unable to instantiate documentPresentationController '" + documentPresentationControllerClass.getName() + "' for doctype '" + documentType + "'", e); 138 } 139 140 return documentPresentationController; 141 } 142 143 /** 144 * @see org.kuali.rice.kns.service.DocumentHelperService#getDocumentPresentationController(org.kuali.rice.kns.document.Document) 145 */ 146 public DocumentPresentationController getDocumentPresentationController(Document document) { 147 if (document == null) { 148 throw new IllegalArgumentException("invalid (null) document"); 149 } 150 else if (document.getDocumentHeader() == null) { 151 throw new IllegalArgumentException("invalid (null) document.documentHeader"); 152 } 153 else if (!document.getDocumentHeader().hasWorkflowDocument()) { 154 throw new IllegalArgumentException("invalid (null) document.documentHeader.workflowDocument"); 155 } 156 157 String documentType = document.getDocumentHeader().getWorkflowDocument().getDocumentType(); 158 159 DocumentPresentationController documentPresentationController = getDocumentPresentationController(documentType); 160 return documentPresentationController; 161 } 162 163 /** 164 * @return the dataDictionaryService 165 */ 166 public DataDictionaryService getDataDictionaryService() { 167 if (dataDictionaryService == null) { 168 this.dataDictionaryService = KNSServiceLocator.getDataDictionaryService(); 169 } 170 return this.dataDictionaryService; 171 } 172 173 /** 174 * @param dataDictionaryService the dataDictionaryService to set 175 */ 176 public void setDataDictionaryService(DataDictionaryService dataDictionaryService) { 177 this.dataDictionaryService = dataDictionaryService; 178 } 179 180 }