001 /**
002 * Copyright 2005-2012 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.document;
017
018 import org.apache.cxf.common.util.StringUtils;
019 import org.apache.log4j.Logger;
020 import org.kuali.rice.kim.api.permission.Permission;
021 import org.kuali.rice.kim.api.services.KimApiServiceLocator;
022 import org.kuali.rice.kim.impl.permission.GenericPermissionBo;
023 import org.kuali.rice.kim.impl.permission.PermissionBo;
024 import org.kuali.rice.kim.impl.permission.PermissionTemplateBo;
025 import org.kuali.rice.kim.impl.responsibility.ReviewResponsibilityBo;
026 import org.kuali.rice.kns.maintenance.KualiMaintainableImpl;
027 import org.kuali.rice.krad.bo.BusinessObject;
028 import org.kuali.rice.krad.bo.PersistableBusinessObject;
029 import org.kuali.rice.krad.util.KRADConstants;
030
031 import java.util.HashMap;
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 */
039 public class GenericPermissionMaintainable extends KualiMaintainableImpl {
040
041 private static final Logger LOG = Logger.getLogger( GenericPermissionMaintainable.class );
042 private static final long serialVersionUID = -8102504656976243468L;
043
044 /**
045 * Saves the responsibility via the responsibility update service
046 *
047 * @see org.kuali.rice.kns.maintenance.KualiMaintainableImpl#saveBusinessObject()
048 */
049 @Override
050 public void saveBusinessObject() {
051 try {
052 if ( LOG.isInfoEnabled() ) {
053 LOG.info( "Attempting to save Permission BO via PermissionService: " + getBusinessObject() );
054 }
055 GenericPermissionBo genericPermissionBo = (GenericPermissionBo)getBusinessObject();
056 if (genericPermissionBo.getTemplateId() != null && genericPermissionBo.getTemplate() == null) {
057 genericPermissionBo.setTemplate(
058 PermissionTemplateBo.from(
059 KimApiServiceLocator.getPermissionService().getPermissionTemplate(genericPermissionBo.getTemplateId())));
060 }
061 PermissionBo perm = GenericPermissionBo.toPermissionBo(genericPermissionBo);
062
063 KimApiServiceLocator.getPermissionService().createPermission(PermissionBo.to(perm));
064 } catch ( RuntimeException ex ) {
065 LOG.error( "Exception in saveBusinessObject()", ex );
066 throw ex;
067 }
068 }
069
070 /**
071 * @see org.kuali.rice.krad.maintenance.Maintainable#saveDataObject
072 */
073 @Override
074 public void saveDataObject() {
075 if (getDataObject() instanceof PersistableBusinessObject) {
076 GenericPermissionBo genericPermissionBo = (GenericPermissionBo)getDataObject();
077 boolean permissionExists = false;
078 if (genericPermissionBo.getId() != null) {
079 permissionExists = KimApiServiceLocator.getPermissionService().getPermission(genericPermissionBo.getId()) != null;
080 }
081
082 if (genericPermissionBo.getTemplateId() != null) {
083 genericPermissionBo.setTemplate(
084 PermissionTemplateBo.from(
085 KimApiServiceLocator.getPermissionService().getPermissionTemplate(genericPermissionBo.getTemplateId())));
086 }
087 PermissionBo perm = GenericPermissionBo.toPermissionBo(genericPermissionBo);
088 if (permissionExists) {
089 KimApiServiceLocator.getPermissionService().updatePermission(PermissionBo.to(perm));
090 } else {
091 //if its a copy the objectId should be empty and versionNumber should be null
092 if(getMaintenanceAction().equals(KRADConstants.MAINTENANCE_COPY_ACTION)){
093 if(org.apache.commons.lang.StringUtils.isNotBlank(perm.getObjectId())){
094 perm.setObjectId("");
095 }
096 if(null!= perm.getVersionNumber()){
097 perm.setVersionNumber(null);
098 }
099 }
100 KimApiServiceLocator.getPermissionService().createPermission(PermissionBo.to(perm));
101 }
102 //getBusinessObjectService().linkAndSave((PersistableBusinessObject) dataObject);
103 } else {
104 throw new RuntimeException(
105 "Cannot save object of type: " + getDataObjectClass() + " with permission service");
106 }
107 }
108
109 /**
110 * This overridden method ...
111 *
112 * @see org.kuali.rice.kns.maintenance.KualiMaintainableImpl#getBoClass()
113 */
114 @Override
115 public Class<? extends PersistableBusinessObject> getBoClass() {
116 return GenericPermissionBo.class;
117 }
118
119 /**
120 * This overridden method ...
121 *
122 * @see org.kuali.rice.kns.maintenance.KualiMaintainableImpl#isExternalBusinessObject()
123 */
124 @Override
125 public boolean isExternalBusinessObject() {
126 return true;
127 }
128
129 /**
130 * This overridden method ...
131 *
132 * @see org.kuali.rice.kns.maintenance.KualiMaintainableImpl#prepareBusinessObject(org.kuali.rice.krad.bo.BusinessObject)
133 */
134 @Override
135 public void prepareBusinessObject(BusinessObject businessObject) {
136 try {
137 if ( businessObject == null ) {
138 throw new RuntimeException( "Configuration ERROR: GenericPermissionMaintainable.prepareBusinessObject passed a null object." );
139 }
140 if ( businessObject instanceof PermissionBo ) {
141 PermissionBo perm = getBusinessObjectService().findBySinglePrimaryKey(PermissionBo.class, ((PermissionBo)businessObject).getId() );
142 businessObject = new GenericPermissionBo(perm);
143 } else if ( businessObject instanceof GenericPermissionBo ) {
144 // lookup the PermissionBo and convert to a GenericPermissionBo
145 PermissionBo perm = getBusinessObjectService().findBySinglePrimaryKey(PermissionBo.class, ((GenericPermissionBo)businessObject).getId() );
146 ((GenericPermissionBo)businessObject).loadFromPermission(perm);
147 } else {
148 throw new RuntimeException( "Configuration ERROR: GenericPermissionMaintainable passed an unsupported object type: " + businessObject.getClass() );
149 }
150 if ( businessObject instanceof PersistableBusinessObject ) {
151 setBusinessObject( (PersistableBusinessObject)businessObject );
152 }
153 super.prepareBusinessObject(businessObject);
154 } catch ( RuntimeException ex ) {
155 LOG.error( "Exception in prepareBusinessObject()", ex );
156 throw ex;
157 }
158 }
159
160 }