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 }