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