001    /**
002     * Copyright 2004-2012 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.hr.time.batch.web;
017    
018    import java.util.HashMap;
019    import java.util.List;
020    import java.util.Map;
021    
022    import javax.servlet.http.HttpServletRequest;
023    import javax.servlet.http.HttpServletResponse;
024    
025    import org.apache.commons.lang.StringUtils;
026    import org.apache.log4j.Logger;
027    import org.apache.struts.action.ActionForm;
028    import org.apache.struts.action.ActionForward;
029    import org.apache.struts.action.ActionMapping;
030    import org.kuali.hr.time.base.web.TkAction;
031    import org.kuali.hr.time.batch.BatchApproveMissedPunchJobRunnable;
032    import org.kuali.hr.time.batch.BatchJobEntry;
033    import org.kuali.hr.time.batch.EmployeeApprovalBatchJobRunnable;
034    import org.kuali.hr.time.batch.InitiateBatchJobRunnable;
035    import org.kuali.hr.time.batch.PayPeriodEndBatchJobRunnable;
036    import org.kuali.hr.time.batch.SupervisorApprovalBatchJobRunnable;
037    import org.kuali.hr.time.service.base.TkServiceLocator;
038    import org.kuali.hr.time.util.TkConstants;
039    
040    public class BatchJobAction extends TkAction {
041    
042        private static final Logger LOG = Logger.getLogger(BatchJobAction.class);
043    
044        public ActionForward getBatchJobEntryStatus(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
045            BatchJobActionForm bjaf = (BatchJobActionForm) form;
046            Map<String, Object> searchCrit = new HashMap<String, Object>();
047            searchCrit.put("tkBatchJobId", bjaf.getBatchJobId());
048            searchCrit.put("batchJobName", bjaf.getBatchJobName());
049            searchCrit.put("batchJobEntryStatus", bjaf.getBatchJobEntryStatus());
050            searchCrit.put("hrPyCalendarEntryId", bjaf.getHrPyCalendarEntryId());
051            searchCrit.put("ipAddress", bjaf.getIpAddress());
052            searchCrit.put("documentId", bjaf.getDocumentId());
053            searchCrit.put("principalId", bjaf.getPrincipalId());
054    
055            bjaf.setBatchJobEntries(TkServiceLocator.getBatchJobEntryService().getBatchJobEntries(searchCrit));
056    
057            return mapping.findForward("basic");
058        }
059    
060        public ActionForward changeIpAddress(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
061            BatchJobActionForm bjaf = (BatchJobActionForm) form;
062    
063            BatchJobEntry batchJobEntry = TkServiceLocator.getBatchJobEntryService().getBatchJobEntry(Long.valueOf(bjaf.getTkBatchJobEntryId()));
064            batchJobEntry.setIpAddress(bjaf.getIpToChange());
065            TkServiceLocator.getBatchJobEntryService().saveBatchJobEntry(batchJobEntry);
066    
067            return mapping.findForward("basic");
068        }
069    
070        public ActionForward runBatchJob(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
071            BatchJobActionForm bjaf = (BatchJobActionForm) form;
072    
073            Map<String, Object> searchCrit = new HashMap<String, Object>();
074            searchCrit.put("batchJobName", bjaf.getSelectedBatchJob());
075            searchCrit.put("hrPyCalendarEntryId", bjaf.getHrPyCalendarEntryId());
076            searchCrit.put("batchJobEntryStatus", TkConstants.BATCH_JOB_ENTRY_STATUS.SCHEDULED);
077    
078            List<BatchJobEntry> batchJobEntries = TkServiceLocator.getBatchJobEntryService().getBatchJobEntries(searchCrit);
079    
080            if (batchJobEntries.size() > 0) {
081    
082                for (BatchJobEntry entry : batchJobEntries) {
083    
084                    long startTime = System.currentTimeMillis();
085                    LOG.debug("Before run.");
086                    entry.setBatchJobEntryStatus(TkConstants.BATCH_JOB_ENTRY_STATUS.RUNNING);
087                    TkServiceLocator.getBatchJobEntryService().saveBatchJobEntry(entry);
088    
089                    if (StringUtils.equals(entry.getBatchJobName(), TkConstants.BATCH_JOB_NAMES.APPROVE)) {
090                        LOG.debug("Creating EmployeeApprovalBatchJobRunnable.");
091                        new EmployeeApprovalBatchJobRunnable(entry).doWork();
092                    } else if (StringUtils.equals(entry.getBatchJobName(), TkConstants.BATCH_JOB_NAMES.PAY_PERIOD_END)) {
093                        LOG.debug("Creating PayPeriodEndBatchJobRunnable.");
094                        new PayPeriodEndBatchJobRunnable(entry).doWork();
095                    } else if (StringUtils.equals(entry.getBatchJobName(), TkConstants.BATCH_JOB_NAMES.SUPERVISOR_APPROVAL)) {
096                        LOG.debug("Creating SupervisorApprovalBatchJobRunnabble.");
097                        new SupervisorApprovalBatchJobRunnable(entry).doWork();
098                    } else if (StringUtils.equals(entry.getBatchJobName(), TkConstants.BATCH_JOB_NAMES.INITIATE)) {
099                        LOG.debug("Creating InitiateBatchJobRunnable.");
100                        new InitiateBatchJobRunnable(entry).doWork();
101                    } else if (StringUtils.equals(entry.getBatchJobName(), TkConstants.BATCH_JOB_NAMES.BATCH_APPROVE_MISSED_PUNCH)) {
102                        LOG.debug("Creating BatchApproveMissedPunchJobRunnable.");
103                        new BatchApproveMissedPunchJobRunnable(entry).doWork();
104                    } else {
105                        LOG.warn("Unknown BatchJobEntryRunnable found in BatchJobEntry table. Unable to create Runnable.");
106                    }
107    
108                    long endTime = System.currentTimeMillis();
109                    long runtime = endTime - startTime;
110                    runtime = (runtime > 0) ? runtime : 1; // hack around 0 length job... just in case.
111                    LOG.debug("Job finished in " + runtime / 1000 + " seconds.");
112    
113                    if (StringUtils.isEmpty(entry.getBatchJobException())) {
114                        entry.setBatchJobEntryStatus(TkConstants.BATCH_JOB_ENTRY_STATUS.FINISHED);
115                    } else {
116                        entry.setBatchJobEntryStatus(TkConstants.BATCH_JOB_ENTRY_STATUS.EXCEPTION);
117                    }
118                    TkServiceLocator.getBatchJobEntryService().saveBatchJobEntry(entry);
119                }
120    
121            }
122            return mapping.findForward("basic");
123        }
124    
125    
126    }