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.kim.document; 017 018import org.apache.log4j.Logger; 019import org.kuali.rice.kim.api.KimConstants; 020import org.kuali.rice.kim.api.services.KimApiServiceLocator; 021import org.kuali.rice.kim.impl.permission.GenericPermissionBo; 022import org.kuali.rice.kim.impl.permission.PermissionBo; 023import org.kuali.rice.kim.impl.permission.PermissionTemplateBo; 024import org.kuali.rice.kns.document.MaintenanceDocument; 025import org.kuali.rice.kns.maintenance.KualiMaintainableImpl; 026import org.kuali.rice.krad.bo.BusinessObject; 027import org.kuali.rice.krad.bo.PersistableBusinessObject; 028import org.kuali.rice.krad.service.KRADServiceLocator; 029import org.kuali.rice.krad.service.SequenceAccessorService; 030 031import java.util.Map; 032 033/** 034 * This is a description of what this class does - jonathan don't forget to fill this in. 035 * 036 * @author Kuali Rice Team (rice.collab@kuali.org) 037 * 038 */ 039public class GenericPermissionMaintainable extends KualiMaintainableImpl { 040 041 private static final Logger LOG = Logger.getLogger( GenericPermissionMaintainable.class ); 042 private static final long serialVersionUID = -8102504656976243468L; 043 protected transient SequenceAccessorService sequenceAccessorService; 044 045 /** 046 * Saves the responsibility via the responsibility update service 047 * 048 * @see org.kuali.rice.kns.maintenance.KualiMaintainableImpl#saveBusinessObject() 049 */ 050 @Override 051 public void saveDataObject() { 052 if (getDataObject() instanceof PersistableBusinessObject) { 053 GenericPermissionBo genericPermissionBo = (GenericPermissionBo)getDataObject(); 054 boolean permissionExists = false; 055 if (genericPermissionBo.getId() != null) { 056 permissionExists = KimApiServiceLocator.getPermissionService().getPermission(genericPermissionBo.getId()) != null; 057 } 058 059 if (genericPermissionBo.getTemplateId() != null) { 060 genericPermissionBo.setTemplate( 061 PermissionTemplateBo.from( 062 KimApiServiceLocator.getPermissionService().getPermissionTemplate(genericPermissionBo.getTemplateId()))); 063 } 064 PermissionBo perm = GenericPermissionBo.toPermissionBo(genericPermissionBo); 065 if (permissionExists) { 066 KimApiServiceLocator.getPermissionService().updatePermission(PermissionBo.to(perm)); 067 } else { 068 KimApiServiceLocator.getPermissionService().createPermission(PermissionBo.to(perm)); 069 } 070 } else { 071 throw new RuntimeException( 072 "Cannot save object of type: " + getDataObjectClass() + " with permission service"); 073 } 074 } 075 076 /** 077 * Pre-populates the ID field of the new PermissionBo to be created. 078 * 079 * @see org.kuali.rice.kns.maintenance.KualiMaintainableImpl#saveBusinessObject() 080 */ 081 @Override 082 public void processAfterCopy(MaintenanceDocument document, Map<String, String[]> parameters) { 083 super.processAfterCopy(document,parameters); 084 // get id for new permission 085 String newId = getSequenceAccessorService() 086 .getNextAvailableSequenceNumber(KimConstants.SequenceNames.KRIM_PERM_ID_S, PermissionBo.class).toString(); 087 ((GenericPermissionBo)document.getNewMaintainableObject().getDataObject()).setId(newId); 088 } 089 090 /** 091 * This overridden method ... 092 * 093 * @see org.kuali.rice.kns.maintenance.KualiMaintainableImpl#getBoClass() 094 */ 095 @Override 096 public Class<? extends PersistableBusinessObject> getBoClass() { 097 return GenericPermissionBo.class; 098 } 099 100 /** 101 * This overridden method ... 102 * 103 * @see org.kuali.rice.kns.maintenance.KualiMaintainableImpl#isExternalBusinessObject() 104 */ 105 @Override 106 public boolean isExternalBusinessObject() { 107 return true; 108 } 109 110 /** 111 * This overridden method ... 112 * 113 * @see org.kuali.rice.kns.maintenance.KualiMaintainableImpl#prepareBusinessObject(org.kuali.rice.krad.bo.BusinessObject) 114 */ 115 @Override 116 public void prepareBusinessObject(BusinessObject businessObject) { 117 try { 118 if ( businessObject == null ) { 119 throw new RuntimeException( "Configuration ERROR: GenericPermissionMaintainable.prepareBusinessObject passed a null object." ); 120 } 121 if ( businessObject instanceof PermissionBo ) { 122 PermissionBo perm = getBusinessObjectService().findBySinglePrimaryKey(PermissionBo.class, ((PermissionBo)businessObject).getId() ); 123 businessObject = new GenericPermissionBo(perm); 124 } else if ( businessObject instanceof GenericPermissionBo ) { 125 // lookup the PermissionBo and convert to a GenericPermissionBo 126 PermissionBo perm = getBusinessObjectService().findBySinglePrimaryKey(PermissionBo.class, ((GenericPermissionBo)businessObject).getId() ); 127 ((GenericPermissionBo)businessObject).loadFromPermission(perm); 128 } else { 129 throw new RuntimeException( "Configuration ERROR: GenericPermissionMaintainable passed an unsupported object type: " + businessObject.getClass() ); 130 } 131 if ( businessObject instanceof PersistableBusinessObject ) { 132 setBusinessObject( (PersistableBusinessObject)businessObject ); 133 } 134 super.prepareBusinessObject(businessObject); 135 } catch ( RuntimeException ex ) { 136 LOG.error( "Exception in prepareBusinessObject()", ex ); 137 throw ex; 138 } 139 } 140 141 protected SequenceAccessorService getSequenceAccessorService(){ 142 if(this.sequenceAccessorService==null){ 143 this.sequenceAccessorService = KRADServiceLocator.getSequenceAccessorService(); 144 } 145 return this.sequenceAccessorService; 146 } 147 148}