View Javadoc

1   /**
2    * Copyright 2005-2012 The Kuali Foundation
3    *
4    * Licensed under the Educational Community License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    * http://www.opensource.org/licenses/ecl2.php
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  package org.kuali.rice.kim.document;
17  
18  import org.apache.cxf.common.util.StringUtils;
19  import org.apache.log4j.Logger;
20  import org.kuali.rice.kim.api.permission.Permission;
21  import org.kuali.rice.kim.api.services.KimApiServiceLocator;
22  import org.kuali.rice.kim.impl.permission.GenericPermissionBo;
23  import org.kuali.rice.kim.impl.permission.PermissionBo;
24  import org.kuali.rice.kim.impl.permission.PermissionTemplateBo;
25  import org.kuali.rice.kim.impl.responsibility.ReviewResponsibilityBo;
26  import org.kuali.rice.kns.maintenance.KualiMaintainableImpl;
27  import org.kuali.rice.krad.bo.BusinessObject;
28  import org.kuali.rice.krad.bo.PersistableBusinessObject;
29  import org.kuali.rice.krad.util.KRADConstants;
30  
31  import java.util.HashMap;
32  
33  /**
34   * This is a description of what this class does - jonathan don't forget to fill this in. 
35   * 
36   * @author Kuali Rice Team (rice.collab@kuali.org)
37   *
38   */
39  public class GenericPermissionMaintainable extends KualiMaintainableImpl {
40  
41  	private static final Logger LOG = Logger.getLogger( GenericPermissionMaintainable.class );	
42  	private static final long serialVersionUID = -8102504656976243468L;
43  
44  	/**
45  	 * Saves the responsibility via the responsibility update service
46  	 * 
47  	 * @see org.kuali.rice.kns.maintenance.KualiMaintainableImpl#saveBusinessObject()
48  	 */
49  	@Override
50  	public void saveBusinessObject() {
51  		try {
52  			if ( LOG.isInfoEnabled() ) {
53  				LOG.info( "Attempting to save Permission BO via PermissionService: " + getBusinessObject() );
54  			}
55              GenericPermissionBo genericPermissionBo = (GenericPermissionBo)getBusinessObject();
56              if (genericPermissionBo.getTemplateId() != null && genericPermissionBo.getTemplate() == null) {
57                  genericPermissionBo.setTemplate(
58                          PermissionTemplateBo.from(
59                                  KimApiServiceLocator.getPermissionService().getPermissionTemplate(genericPermissionBo.getTemplateId())));
60              }
61  			PermissionBo perm = GenericPermissionBo.toPermissionBo(genericPermissionBo);
62  			
63  			KimApiServiceLocator.getPermissionService().createPermission(PermissionBo.to(perm));
64  		} catch ( RuntimeException ex ) {
65  			LOG.error( "Exception in saveBusinessObject()", ex );
66  			throw ex;
67  		}
68  	}
69  
70      /**
71       * @see org.kuali.rice.krad.maintenance.Maintainable#saveDataObject
72       */
73      @Override
74      public void saveDataObject() {
75          if (getDataObject() instanceof PersistableBusinessObject) {
76              GenericPermissionBo genericPermissionBo = (GenericPermissionBo)getDataObject();
77              boolean permissionExists = false;
78              if (genericPermissionBo.getId() != null) {
79                  permissionExists = KimApiServiceLocator.getPermissionService().getPermission(genericPermissionBo.getId()) != null;
80              }
81  
82              if (genericPermissionBo.getTemplateId() != null) {
83                  genericPermissionBo.setTemplate(
84                          PermissionTemplateBo.from(
85                                  KimApiServiceLocator.getPermissionService().getPermissionTemplate(genericPermissionBo.getTemplateId())));
86              }
87              PermissionBo perm = GenericPermissionBo.toPermissionBo(genericPermissionBo);
88              if (permissionExists) {
89                  KimApiServiceLocator.getPermissionService().updatePermission(PermissionBo.to(perm));
90              } else {
91                  //if its a copy the objectId should be empty and versionNumber should be null
92                  if(getMaintenanceAction().equals(KRADConstants.MAINTENANCE_COPY_ACTION)){
93                      if(org.apache.commons.lang.StringUtils.isNotBlank(perm.getObjectId())){
94                          perm.setObjectId("");
95                      }
96                      if(null!= perm.getVersionNumber()){
97                          perm.setVersionNumber(null);
98                      }
99                  }
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 }