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.kew.impl.actionlist; 017 018import org.apache.commons.lang.StringUtils; 019import org.kuali.rice.core.api.exception.RiceIllegalArgumentException; 020import org.kuali.rice.kew.actionlist.CustomActionListAttribute; 021import org.kuali.rice.kew.actionlist.DefaultCustomActionListAttribute; 022import org.kuali.rice.kew.api.action.ActionItem; 023import org.kuali.rice.kew.api.action.ActionItemCustomization; 024import org.kuali.rice.kew.doctype.bo.DocumentType; 025import org.kuali.rice.kew.doctype.service.DocumentTypeService; 026import org.kuali.rice.kew.framework.actionlist.ActionListCustomizationHandlerService; 027 028import java.util.ArrayList; 029import java.util.Collections; 030import java.util.HashMap; 031import java.util.List; 032import java.util.Map; 033 034/** 035 * Reference implementation of the ActionListCustomizationHandlerService. 036 * 037 * @author Kuali Rice Team (rice.collab@kuali.org) 038 */ 039public class ActionListCustomizationHandlerServiceImpl implements ActionListCustomizationHandlerService { 040 041 private static final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(ActionListCustomizationHandlerServiceImpl.class); 042 043 private DocumentTypeService documentTypeService; 044 045 @Override 046 public List<ActionItemCustomization> customizeActionList(String principalId, List<ActionItem> actionItems) 047 throws RiceIllegalArgumentException { 048 if (StringUtils.isBlank(principalId)) { 049 throw new RiceIllegalArgumentException("principalId was null or blank"); 050 } 051 if (actionItems == null) { actionItems = Collections.emptyList(); } 052 053 List<ActionItemCustomization> actionItemCustomizations = 054 new ArrayList<ActionItemCustomization>(actionItems.size()); 055 056 for (ActionItem actionItem : actionItems) { 057 DocumentType documentType = getDocumentTypeService().findByName(actionItem.getDocName()); 058 059 try { // try to get the custom action list attribute and convert it to an ActionItemCustomization 060 CustomActionListAttribute customActionListAttribute = null; 061 if (documentType != null) { 062 customActionListAttribute = documentType.getCustomActionListAttribute(); 063 } 064 065 if (customActionListAttribute == null) { 066 customActionListAttribute = getDefaultCustomActionListAttribute(); 067 } 068 069 ActionItemCustomization actionItemCustomization = ActionItemCustomization.Builder.create( 070 actionItem.getId(), 071 customActionListAttribute.getLegalActions(principalId, actionItem), 072 customActionListAttribute.getDocHandlerDisplayParameters(principalId, actionItem)).build(); 073 // add to our results 074 actionItemCustomizations.add(actionItemCustomization); 075 076 } catch (Exception e) { 077 LOG.error("Problem loading custom action list attribute for action item " + actionItem.getId(), e); 078 } 079 } 080 081 return actionItemCustomizations; 082 } 083 084 public DocumentTypeService getDocumentTypeService() { 085 return documentTypeService; 086 } 087 088 public void setDocumentTypeService(DocumentTypeService documentTypeService) { 089 this.documentTypeService = documentTypeService; 090 } 091 092 // Lazy initialization holder class (see Effective Java Item #71) 093 private static class DefaultCustomActionListAttributeHolder { 094 // lazy initing in case customizations require services for instantiation -- could happen ;-) 095 static final CustomActionListAttribute defaultCustomActionListAttribute = 096 new DefaultCustomActionListAttribute(); 097 } 098 099 private CustomActionListAttribute getDefaultCustomActionListAttribute() { 100 return DefaultCustomActionListAttributeHolder.defaultCustomActionListAttribute; 101 } 102}