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.document.web.struts;
017
018 import java.io.ByteArrayOutputStream;
019 import java.text.SimpleDateFormat;
020 import java.util.ArrayList;
021 import java.util.Date;
022 import java.util.List;
023 import java.util.Locale;
024
025 import javax.servlet.http.HttpServletRequest;
026 import javax.servlet.http.HttpServletResponse;
027
028 import org.apache.commons.lang.StringUtils;
029 import org.apache.struts.action.ActionForm;
030 import org.apache.struts.action.ActionForward;
031 import org.apache.struts.action.ActionMapping;
032 import org.kuali.kfs.module.bc.BCConstants;
033 import org.kuali.kfs.module.bc.BCKeyConstants;
034 import org.kuali.kfs.module.bc.document.service.BudgetRequestImportService;
035 import org.kuali.kfs.sys.KFSConstants;
036 import org.kuali.kfs.sys.KFSConstants.ReportGeneration;
037 import org.kuali.kfs.sys.context.SpringContext;
038 import org.kuali.rice.kim.bo.Person;
039 import org.kuali.rice.kns.util.GlobalVariables;
040 import org.kuali.rice.kns.util.MessageMap;
041 import org.kuali.rice.kns.util.WebUtils;
042
043
044 /**
045 * Handles Budget Construction Import Requests
046 */
047 public class BudgetConstructionRequestImportAction extends BudgetConstructionImportExportAction {
048 private static final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(BudgetConstructionRequestImportAction.class);
049
050 public ActionForward start(ActionMapping arg0, ActionForm arg1, HttpServletRequest arg2, HttpServletResponse arg3) throws Exception {
051 return arg0.findForward("import_export");
052 }
053
054 /**
055 * Imports file
056 *
057 * @param mapping
058 * @param form
059 * @param request
060 * @param response
061 * @return
062 * @throws Exception
063 */
064 public ActionForward submit(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
065 BudgetConstructionRequestImportForm budgetConstructionImportForm = (BudgetConstructionRequestImportForm) form;
066 BudgetRequestImportService budgetRequestImportService = SpringContext.getBean(BudgetRequestImportService.class);
067 Integer budgetYear = budgetConstructionImportForm.getUniversityFiscalYear();
068 List<String> messageList = new ArrayList<String>();
069 SimpleDateFormat dateFormatter = new SimpleDateFormat("dd-MMM-yyyy ' ' HH:mm:ss", Locale.US);
070
071 boolean isValid = validateFormData(budgetConstructionImportForm);
072
073 if (!isValid) {
074 return mapping.findForward(BCConstants.MAPPING_IMPORT_EXPORT);
075 }
076
077 Person user = GlobalVariables.getUserSession().getPerson();
078 String principalId = user.getPrincipalId();
079 Date startTime = new Date();
080 messageList.add("Import run started " + dateFormatter.format(startTime));
081 messageList.add(" ");
082 messageList.add("Text file load phase - parsing");
083
084 List<String> parsingErrors = budgetRequestImportService.processImportFile(budgetConstructionImportForm.getFile().getInputStream(), principalId, getFieldSeparator(budgetConstructionImportForm), getTextFieldDelimiter(budgetConstructionImportForm), budgetConstructionImportForm.getFileType(), budgetYear);
085
086 ByteArrayOutputStream baos = new ByteArrayOutputStream();
087 if (!parsingErrors.isEmpty()) {
088 messageList.addAll(parsingErrors);
089 messageList.add("Import run finished at " + dateFormatter.getCalendar().getTime().toString());
090 budgetRequestImportService.generatePdf(messageList, baos);
091 WebUtils.saveMimeOutputStreamAsFile(response, ReportGeneration.PDF_MIME_TYPE, baos, BCConstants.REQUEST_IMPORT_OUTPUT_FILE);
092 return null;
093 }
094
095 messageList.add("Text file load complete");
096 messageList.add(" ");
097 messageList.add("Validate data phase");
098
099 List<String> dataValidationErrorList = budgetRequestImportService.validateData(budgetYear, principalId);
100
101 if (!dataValidationErrorList.isEmpty()) {
102 messageList.add("Errors found during data validation");
103 messageList.addAll(dataValidationErrorList);
104 }
105
106 messageList.add("Validate data compete");
107 messageList.add(" ");
108 messageList.add("Update budget phase");
109
110 List<String> updateErrorMessages = budgetRequestImportService.loadBudget(user, budgetConstructionImportForm.getFileType(), budgetYear);
111
112 messageList.addAll(updateErrorMessages);
113 messageList.add("Update budget complete");
114 messageList.add(" ");
115 Date endTime = new Date();
116 messageList.add("Import run finished at " + dateFormatter.format(endTime));
117
118 budgetRequestImportService.generatePdf(messageList, baos);
119 WebUtils.saveMimeOutputStreamAsFile(response, ReportGeneration.PDF_MIME_TYPE, baos, BCConstants.REQUEST_IMPORT_OUTPUT_FILE);
120 return null;
121 }
122
123 /**
124 *
125 * @see org.kuali.kfs.module.bc.document.web.struts.BudgetConstructionImportExportAction#validateFormData(org.kuali.kfs.module.bc.document.web.struts.BudgetConstructionImportExportForm)
126 */
127 public boolean validateFormData(BudgetConstructionImportExportForm form) {
128 boolean isValid = super.validateFormData(form);
129 BudgetConstructionRequestImportForm requestImportForm = (BudgetConstructionRequestImportForm) form;
130 MessageMap errorMap = GlobalVariables.getMessageMap();
131
132 if ( requestImportForm.getFile() == null || requestImportForm.getFile().getFileSize() == 0 ) {
133 errorMap.putError(KFSConstants.GLOBAL_ERRORS, BCKeyConstants.ERROR_FILE_IS_REQUIRED);
134 isValid = false;
135 }
136 if ( requestImportForm.getFile() != null && requestImportForm.getFile().getFileSize() == 0 ) {
137 errorMap.putError(KFSConstants.GLOBAL_ERRORS, BCKeyConstants.ERROR_FILE_EMPTY);
138 isValid = false;
139 }
140 if (requestImportForm.getFile() != null && (StringUtils.isBlank(requestImportForm.getFile().getFileName())) ) {
141 errorMap.putError(KFSConstants.GLOBAL_ERRORS, BCKeyConstants.ERROR_FILENAME_REQUIRED);
142 isValid = false;
143 }
144
145 //file type validation
146 if ( StringUtils.isBlank(requestImportForm.getFileType()) ) {
147 errorMap.putError(KFSConstants.GLOBAL_ERRORS, BCKeyConstants.ERROR_FILE_TYPE_IS_REQUIRED);
148 isValid = false;
149 }
150 /*if (!StringUtils.isBlank(requestImportForm.getFileType()) &&
151 !requestImportForm.getFileType().equalsIgnoreCase(BCConstants.RequestImportFileType.ANNUAL.toString()) &&
152 !requestImportForm.getFileType().equalsIgnoreCase(BCConstants.RequestImportFileType.MONTHLY.toString())) {
153 errorMap.putError(KFSConstants.GLOBAL_ERRORS, BCKeyConstants.ERROR_FILE_TYPE_IS_REQUIRED);
154 isValid = false;
155 }*/
156
157 return isValid;
158 }
159
160 }
161