001 /* 002 * Copyright 2011 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.kfs.sys.businessobject.lookup; 017 018 import java.util.ArrayList; 019 import java.util.List; 020 import java.util.Map; 021 import java.util.regex.Pattern; 022 023 import org.apache.commons.lang.StringUtils; 024 import org.kuali.kfs.sys.KFSConstants; 025 import org.kuali.kfs.sys.batch.BatchJobStatus; 026 import org.kuali.kfs.sys.batch.service.SchedulerService; 027 import org.kuali.kfs.sys.context.SpringContext; 028 import org.kuali.kfs.sys.service.impl.KfsModuleServiceImpl; 029 import org.kuali.kfs.sys.service.impl.KfsParameterConstants; 030 import org.kuali.rice.kim.bo.impl.KimAttributes; 031 import org.kuali.rice.kim.bo.types.dto.AttributeSet; 032 import org.kuali.rice.kim.service.IdentityManagementService; 033 import org.kuali.rice.kim.service.KIMServiceLocator; 034 import org.kuali.rice.kns.authorization.BusinessObjectRestrictions; 035 import org.kuali.rice.kns.bo.BusinessObject; 036 import org.kuali.rice.kns.lookup.HtmlData; 037 import org.kuali.rice.kns.lookup.KualiLookupableHelperServiceImpl; 038 import org.kuali.rice.kns.lookup.HtmlData.AnchorHtmlData; 039 import org.kuali.rice.kns.service.KNSServiceLocator; 040 import org.kuali.rice.kns.service.KualiConfigurationService; 041 import org.kuali.rice.kns.service.KualiModuleService; 042 import org.kuali.rice.kns.service.ParameterService; 043 import org.kuali.rice.kns.util.GlobalVariables; 044 import org.kuali.rice.kns.util.KNSConstants; 045 import org.kuali.rice.kns.util.UrlFactory; 046 047 public class BatchJobStatusLookupableHelperServiceImpl extends KualiLookupableHelperServiceImpl { 048 049 private static final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(BatchJobStatusLookupableHelperServiceImpl.class); 050 051 private SchedulerService schedulerService; 052 private KualiConfigurationService configurationService; 053 private ParameterService parameterService; 054 private KualiModuleService kualiModuleService; 055 private IdentityManagementService identityManagementService; 056 057 @Override 058 public List<? extends BusinessObject> getSearchResults(Map<String, String> fieldValues) { 059 super.setBackLocation((String) fieldValues.get(KFSConstants.BACK_LOCATION)); 060 super.setDocFormKey((String) fieldValues.get(KFSConstants.DOC_FORM_KEY)); 061 List<BatchJobStatus> allJobs = schedulerService.getJobs(); 062 List<BatchJobStatus> jobs = new ArrayList<BatchJobStatus>(); 063 064 String namespaceCode = fieldValues.get("namespaceCode"); 065 String nameValue = fieldValues.get("name"); 066 Pattern namePattern = null; 067 if (!StringUtils.isEmpty(nameValue)) { 068 namePattern = Pattern.compile(nameValue.replace("*", ".*"), Pattern.CASE_INSENSITIVE); 069 } 070 String schedulerGroup = fieldValues.get("group"); 071 String jobStatus = fieldValues.get("status"); 072 for (BatchJobStatus job : allJobs) { 073 if (!StringUtils.isEmpty(namespaceCode) && 074 (!namespaceCode.equalsIgnoreCase(job.getNamespaceCode()) && job.getNamespaceCode()!=null)) { 075 continue; 076 } 077 if (namePattern != null && !namePattern.matcher(job.getName()).matches()) { 078 continue; // match failed, skip this entry 079 } 080 if (!StringUtils.isEmpty(schedulerGroup) && !schedulerGroup.equalsIgnoreCase(job.getGroup())) { 081 continue; 082 } 083 if (!StringUtils.isEmpty(jobStatus) && !jobStatus.equalsIgnoreCase(job.getStatus())) { 084 continue; 085 } 086 jobs.add(job); 087 } 088 089 return jobs; 090 } 091 092 public boolean doesModuleServiceHaveJobStatus(BatchJobStatus job){ 093 if(job!=null) { 094 KfsModuleServiceImpl moduleService = (KfsModuleServiceImpl)getKualiModuleService().getResponsibleModuleServiceForJob(job.getName()); 095 //This means this job is externalized and we do not want to show any action urls for it. 096 return (moduleService!=null && moduleService.isExternalJob(job.getName())); 097 } 098 return false; 099 } 100 101 /*** 102 * @see org.kuali.rice.kns.lookup.AbstractLookupableHelperServiceImpl#getCustomActionUrls(org.kuali.rice.kns.bo.BusinessObject, java.util.List) 103 */ 104 @Override 105 public List<HtmlData> getCustomActionUrls(BusinessObject businessObject, List pkNames) { 106 if (businessObject instanceof BatchJobStatus) { 107 BatchJobStatus job = (BatchJobStatus) businessObject; 108 if(doesModuleServiceHaveJobStatus(job)) { 109 return getEmptyActionUrls(); 110 } 111 String linkText = "Modify"; 112 AttributeSet permissionDetails = new AttributeSet(1); 113 permissionDetails.put(KimAttributes.NAMESPACE_CODE, job.getNamespaceCode() ); 114 115 if ( !SpringContext.getBean(IdentityManagementService.class).hasPermissionByTemplateName( 116 GlobalVariables.getUserSession().getPerson().getPrincipalId(), 117 KNSConstants.KNS_NAMESPACE, 118 KFSConstants.PermissionTemplate.MODIFY_BATCH_JOB.name, 119 permissionDetails ) ) { 120 linkText = "View"; 121 } 122 String href = getKualiConfigurationService().getPropertyString(KFSConstants.APPLICATION_URL_KEY) + "/batchModify.do?methodToCall=start&name="+(UrlFactory.encode(job.getName()))+("&group=")+(UrlFactory.encode(job.getGroup())); 123 List<HtmlData> anchorHtmlDataList = new ArrayList<HtmlData>(); 124 AnchorHtmlData anchorHtmlData = new AnchorHtmlData(href, KFSConstants.START_METHOD, linkText); 125 anchorHtmlDataList.add(anchorHtmlData); 126 return anchorHtmlDataList; 127 } 128 return getEmptyActionUrls(); 129 } 130 131 /*** 132 * @see org.kuali.rice.kns.lookup.AbstractLookupableHelperServiceImpl#getActionUrlTitleText(org.kuali.rice.kns.bo.BusinessObject, java.lang.String, java.util.List) 133 */ 134 @Override 135 protected String getActionUrlTitleText(BusinessObject businessObject, String displayText, List pkNames, BusinessObjectRestrictions businessObjectRestrictions){ 136 BatchJobStatus job = (BatchJobStatus) businessObject; 137 String titleText = displayText+" " 138 +getDataDictionaryService().getDataDictionary().getBusinessObjectEntry(getBusinessObjectClass().getName()).getObjectLabel() 139 +" " 140 +getKualiConfigurationService().getPropertyString(TITLE_ACTION_URL_PREPENDTEXT_PROPERTY); 141 titleText += "Name="+job.getName()+" Group="+job.getGroup(); 142 return titleText; 143 } 144 145 public void setSchedulerService(SchedulerService schedulerService) { 146 this.schedulerService = schedulerService; 147 } 148 149 public void setParameterService(ParameterService parameterService) { 150 this.parameterService = parameterService; 151 } 152 153 public void setConfigurationService(KualiConfigurationService configurationService) { 154 this.configurationService = configurationService; 155 } 156 157 public KualiModuleService getKualiModuleService() { 158 if ( kualiModuleService == null ) { 159 kualiModuleService = SpringContext.getBean(KualiModuleService.class); 160 } 161 return kualiModuleService; 162 } 163 164 public IdentityManagementService getIdentityManagementService() { 165 if ( identityManagementService == null ) { 166 identityManagementService = SpringContext.getBean(IdentityManagementService.class); 167 } 168 return identityManagementService; 169 } 170 171 } 172