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.kim.impl.responsibility; 017 018 import org.apache.commons.lang.StringUtils; 019 import org.apache.log4j.Logger; 020 import org.kuali.rice.kew.api.KewApiConstants; 021 import org.kuali.rice.kim.api.KimConstants; 022 import org.kuali.rice.kim.api.common.template.Template; 023 import org.kuali.rice.kim.api.responsibility.Responsibility; 024 import org.kuali.rice.kim.api.services.KimApiServiceLocator; 025 import org.kuali.rice.kim.impl.common.attribute.KimAttributeDataBo; 026 import org.kuali.rice.kim.impl.permission.PermissionTemplateBo; 027 import org.kuali.rice.kns.document.MaintenanceDocument; 028 import org.kuali.rice.kns.maintenance.KualiMaintainableImpl; 029 import org.kuali.rice.kns.maintenance.Maintainable; 030 import org.kuali.rice.kns.web.ui.Field; 031 import org.kuali.rice.kns.web.ui.Row; 032 import org.kuali.rice.kns.web.ui.Section; 033 import org.kuali.rice.krad.bo.BusinessObject; 034 import org.kuali.rice.krad.bo.PersistableBusinessObject; 035 import org.kuali.rice.krad.util.KRADConstants; 036 037 import java.util.HashMap; 038 import java.util.List; 039 import java.util.Map; 040 041 public class ReviewResponsibilityMaintainable extends KualiMaintainableImpl { 042 043 private static final Logger LOG = Logger.getLogger( ReviewResponsibilityMaintainable.class ); 044 private static final long serialVersionUID = -8102504656976243468L; 045 046 private static Template REVIEW_TEMPLATE; 047 048 public List getSections(MaintenanceDocument document, Maintainable oldMaintainable) { 049 List<Section> sections = super.getSections(document, oldMaintainable); 050 if(document.isEdit()){ 051 for (Section section : sections) { 052 for (Row row : section.getRows()) { 053 for (Field field : row.getFields()) { 054 if(ReviewResponsibilityBo.ACTION_DETAILS_AT_ROLE_MEMBER_LEVEL_FIELD_NAME.equals(field.getPropertyName())){ 055 field.setReadOnly(true); 056 } 057 } 058 } 059 } 060 } 061 return sections; 062 } 063 064 /** 065 * Saves the responsibility via the responsibility service 066 * 067 * @see org.kuali.rice.kns.maintenance.KualiMaintainableImpl#saveDataObject() 068 */ 069 @Override 070 public void saveDataObject() { 071 if ( LOG.isInfoEnabled() ) { 072 LOG.info( "Attempting to save ReviewResponsibilityBo BO via ResponsibilityService:" + getBusinessObject() ); 073 } 074 populateReviewTemplateInfo(); 075 076 ReviewResponsibilityBo resp = (ReviewResponsibilityBo)getDataObject(); 077 // build the Map<String, String> with the details 078 Map<String, String> details = new HashMap<String, String>(); 079 details.put( KimConstants.AttributeConstants.DOCUMENT_TYPE_NAME, resp.getDocumentTypeName() ); 080 details.put( KimConstants.AttributeConstants.ROUTE_NODE_NAME, resp.getRouteNodeName() ); 081 details.put( KimConstants.AttributeConstants.REQUIRED, resp.isRequired()?"true":"false" ); 082 details.put( KimConstants.AttributeConstants.ACTION_DETAILS_AT_ROLE_MEMBER_LEVEL, resp.isActionDetailsAtRoleMemberLevel()?"true":"false" ); 083 if ( StringUtils.isNotBlank(resp.getQualifierResolverProvidedIdentifier()) ) { 084 details.put( KimConstants.AttributeConstants.QUALIFIER_RESOLVER_PROVIDED_IDENTIFIER, resp.getQualifierResolverProvidedIdentifier() ); 085 } 086 087 //ResponsibilityBo bo = ReviewResponsibilityBo.toResponsibilityBo(resp); 088 if (resp.getTemplateId() == null) { 089 resp.setTemplateId(REVIEW_TEMPLATE.getId()); 090 resp.setTemplate(ResponsibilityTemplateBo.from(REVIEW_TEMPLATE)); 091 } 092 093 else { 094 resp.setTemplate( 095 ResponsibilityTemplateBo.from(KimApiServiceLocator.getResponsibilityService().getResponsibilityTemplate( 096 resp.getTemplateId()))); 097 } 098 //set attributes 099 resp.setAttributes(details); 100 resp.setAttributeDetails(KimAttributeDataBo.createFrom(ResponsibilityAttributeBo.class, details, resp.getTemplate().getKimTypeId())); 101 102 boolean responsibilityExists = false; 103 if (resp.getId() != null) { 104 responsibilityExists = KimApiServiceLocator.getResponsibilityService().getResponsibility(resp.getId()) != null; 105 } 106 107 if (responsibilityExists) { 108 KimApiServiceLocator.getResponsibilityService().updateResponsibility(ResponsibilityBo.to(resp)); 109 } else { 110 //if its a copy action the objectId should be empty and versionNumber should be null. 111 if(getMaintenanceAction().equals(KRADConstants.MAINTENANCE_COPY_ACTION)){ 112 if(org.apache.commons.lang.StringUtils.isNotBlank(resp.getObjectId())){ 113 resp.setObjectId(""); 114 } 115 if(null!= resp.getVersionNumber()){ 116 resp.setVersionNumber(null); 117 } 118 } 119 KimApiServiceLocator.getResponsibilityService().createResponsibility(ResponsibilityBo.to(resp)); 120 } 121 } 122 123 private static synchronized void populateReviewTemplateInfo() { 124 if ( REVIEW_TEMPLATE == null ) { 125 REVIEW_TEMPLATE = KimApiServiceLocator.getResponsibilityService().findRespTemplateByNamespaceCodeAndName(KewApiConstants.KEW_NAMESPACE, KewApiConstants.DEFAULT_RESPONSIBILITY_TEMPLATE_NAME); 126 } 127 } 128 129 @Override 130 public Class<? extends BusinessObject> getBoClass() { 131 return ReviewResponsibilityBo.class; 132 } 133 134 @Override 135 public void prepareBusinessObject(BusinessObject businessObject) { 136 if ( businessObject == null ) { 137 throw new RuntimeException( "Configuration ERROR: ReviewResponsibilityBoMaintainable.prepareBusinessObject passed a null object." ); 138 } 139 if ( businessObject instanceof ResponsibilityBo ) { 140 ResponsibilityBo resp = getBusinessObjectService().findBySinglePrimaryKey(ResponsibilityBo.class, ((ResponsibilityBo)businessObject).getId() ); 141 businessObject = new ReviewResponsibilityBo( resp ); 142 setBusinessObject( (PersistableBusinessObject)businessObject ); 143 } else { 144 throw new RuntimeException( "Configuration ERROR: ReviewResponsibilityBoMaintainable passed an unsupported object type: " + businessObject.getClass() ); 145 } 146 super.prepareBusinessObject(businessObject); 147 } 148 149 /** 150 * This overridden method ... 151 * 152 * @see org.kuali.rice.kns.maintenance.KualiMaintainableImpl#isExternalBusinessObject() 153 */ 154 @Override 155 public boolean isExternalBusinessObject() { 156 return true; 157 } 158 159 }