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.module.bc.batch; 017 018 import java.util.Date; 019 import java.util.HashMap; 020 import java.util.List; 021 import java.util.Map; 022 023 import org.kuali.kfs.module.bc.batch.service.GenesisService; 024 import org.kuali.kfs.sys.batch.AbstractStep; 025 import org.kuali.kfs.sys.batch.Job; 026 import org.kuali.rice.kns.bo.Parameter; 027 import org.kuali.rice.kns.service.BusinessObjectService; 028 import org.kuali.rice.kns.service.PersistenceStructureService; 029 030 import org.kuali.kfs.module.bc.util.BudgetParameterFinder; 031 032 public class GenesisBatchStep extends AbstractStep { 033 034 private GenesisService genesisService; 035 private PersistenceStructureService psService; 036 private BusinessObjectService boService; 037 038 // parameter constants and logging 039 private static final String RUN_INDICATOR_PARAMETER_NAMESPACE_CODE = "KFS-BC"; 040 private static final String RUN_INDICATOR_PARAMETER_NAMESPACE_STEP = "GenesisBatchStep"; 041 private static final String RUN_INDICATOR_PARAMETER_VALUE = "N"; 042 private static final String RUN_INDICATOR_PARAMETER_ALLOWED = "A"; 043 private static final String RUN_INDICATOR_PARAMETER_DESCRIPTION = "Tells the job framework whether to run this job or not; set to know because the GenesisBatchJob needs to only be run once after database initialization."; 044 private static final String RUN_INDICATOR_PARAMETER_TYPE = "CONFG"; 045 private static final String RUN_INDICATOR_PARAMETER_APPLICATION_NAMESPACE_CODE = "KFS"; 046 047 048 049 public boolean execute(String jobName, Date jobRunDate) { 050 genesisService.genesisStep(BudgetParameterFinder.getBaseFiscalYear()); 051 setInitiatedParameter(); 052 return true; 053 } 054 055 /** 056 * This method sets a parameter that tells the step that it has already run and it does not need to run again. 057 */ 058 private void setInitiatedParameter() { 059 // first see if we can find an existing Parameter object with this key 060 Parameter runIndicatorParameter = (Parameter) boService.findByPrimaryKey(Parameter.class, this.buildSearchKeyMap()); 061 if (runIndicatorParameter == null) 062 { 063 runIndicatorParameter = new Parameter(); 064 runIndicatorParameter.setVersionNumber(new Long(1)); 065 runIndicatorParameter.setParameterNamespaceCode(GenesisBatchStep.RUN_INDICATOR_PARAMETER_NAMESPACE_CODE); 066 runIndicatorParameter.setParameterDetailTypeCode(GenesisBatchStep.RUN_INDICATOR_PARAMETER_NAMESPACE_STEP); 067 runIndicatorParameter.setParameterName(Job.STEP_RUN_PARM_NM); 068 runIndicatorParameter.setParameterDescription(GenesisBatchStep.RUN_INDICATOR_PARAMETER_DESCRIPTION); 069 runIndicatorParameter.setParameterConstraintCode(GenesisBatchStep.RUN_INDICATOR_PARAMETER_ALLOWED); 070 runIndicatorParameter.setParameterTypeCode(GenesisBatchStep.RUN_INDICATOR_PARAMETER_TYPE); 071 runIndicatorParameter.setParameterApplicationNamespaceCode(RUN_INDICATOR_PARAMETER_APPLICATION_NAMESPACE_CODE); 072 } 073 runIndicatorParameter.setParameterValue(GenesisBatchStep.RUN_INDICATOR_PARAMETER_VALUE); 074 boService.save(runIndicatorParameter); 075 } 076 077 private Map<String,Object> buildSearchKeyMap() 078 { 079 Map<String,Object> pkMapForParameter = new HashMap<String,Object>(); 080 081 // set up a list of all the field names and values of the fields in the Parameter object. 082 // the OJB names are nowhere in Kuali properties, apparently. 083 // but, since we use set routines above, we know what the names must be. if they change at some point, we will have to change the set routines anyway. 084 // we can change the code here also when we do that. 085 Map<String,Object> fieldNamesValuesForParameter = new HashMap<String,Object>(); 086 fieldNamesValuesForParameter.put("parameterNamespaceCode",GenesisBatchStep.RUN_INDICATOR_PARAMETER_NAMESPACE_CODE); 087 fieldNamesValuesForParameter.put("parameterDetailTypeCode",GenesisBatchStep.RUN_INDICATOR_PARAMETER_NAMESPACE_STEP); 088 fieldNamesValuesForParameter.put("parameterName",Job.STEP_RUN_PARM_NM); 089 fieldNamesValuesForParameter.put("parameterConstraintCode",GenesisBatchStep.RUN_INDICATOR_PARAMETER_ALLOWED); 090 fieldNamesValuesForParameter.put("parameterTypeCode",GenesisBatchStep.RUN_INDICATOR_PARAMETER_TYPE); 091 fieldNamesValuesForParameter.put("parameterApplicationNamespaceCode",GenesisBatchStep.RUN_INDICATOR_PARAMETER_APPLICATION_NAMESPACE_CODE); 092 093 // get the primary keys and assign them to values 094 List<String> parameterPKFields = psService.getPrimaryKeys(Parameter.class); 095 for (String pkFieldName: parameterPKFields) 096 { 097 pkMapForParameter.put(pkFieldName,fieldNamesValuesForParameter.get(pkFieldName)); 098 } 099 return (pkMapForParameter); 100 } 101 102 public void setGenesisService (GenesisService genesisService) 103 { 104 this.genesisService = genesisService; 105 } 106 107 public void setPersistenceStructureService (PersistenceStructureService psService) 108 { 109 this.psService = psService; 110 } 111 112 public void setBusinessObjectService (BusinessObjectService boService) 113 { 114 this.boService = boService; 115 } 116 }