/******************************************************************************* | |
* Licensed to the Apache Software Foundation (ASF) under one | |
* or more contributor license agreements. See the NOTICE file | |
* distributed with this work for additional information | |
* regarding copyright ownership. The ASF licenses this file | |
* to you under the Apache License, Version 2.0 (the | |
* "License"); you may not use this file except in compliance | |
* with the License. You may obtain a copy of the License at | |
* | |
* http://www.apache.org/licenses/LICENSE-2.0 | |
* | |
* Unless required by applicable law or agreed to in writing, | |
* software distributed under the License is distributed on an | |
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | |
* KIND, either express or implied. See the License for the | |
* specific language governing permissions and limitations | |
* under the License. | |
*******************************************************************************/ | |
package org.apache.ofbiz.pricat; | |
import java.io.File; | |
import java.io.IOException; | |
import java.net.MalformedURLException; | |
import java.net.URLEncoder; | |
import java.nio.file.Files; | |
import java.nio.file.Path; | |
import java.nio.file.Paths; | |
import javax.servlet.http.HttpServletRequest; | |
import javax.servlet.http.HttpServletResponse; | |
import org.apache.commons.fileupload.servlet.ServletFileUpload; | |
import org.jdom.JDOMException; | |
import org.apache.ofbiz.base.location.ComponentLocationResolver; | |
import org.apache.ofbiz.base.util.Debug; | |
import org.apache.ofbiz.base.util.FileUtil; | |
import org.apache.ofbiz.base.util.UtilHttp; | |
import org.apache.ofbiz.base.util.UtilMisc; | |
import org.apache.ofbiz.base.util.UtilProperties; | |
import org.apache.ofbiz.base.util.UtilValidate; | |
import org.apache.ofbiz.entity.Delegator; | |
import org.apache.ofbiz.entity.GenericEntityException; | |
import org.apache.ofbiz.entity.GenericValue; | |
import org.apache.ofbiz.pricat.AbstractPricatParser; | |
import org.apache.ofbiz.pricat.InterfacePricatParser; | |
import org.apache.ofbiz.pricat.PricatParseExcelHtmlThread; | |
public class PricatEvents { | |
public static final String module = PricatEvents.class.getName(); | |
public static final String PricatLatestVersion = UtilProperties.getPropertyValue("pricat", "pricat.latest.version", "V1.1"); | |
public static final String PricatFileName = "PricatTemplate_" + PricatLatestVersion + ".xlsx"; | |
public static final String PricatPath = "component://pricat/webapp/pricat/downloads/"; | |
/** | |
* Download excel template. | |
* | |
* @param request | |
* @param response | |
* @return | |
* @throws IOException | |
* @throws JDOMException | |
*/ | |
public static String downloadExcelTemplate(HttpServletRequest request, HttpServletResponse response) { | |
String templateType = request.getParameter("templateType"); | |
if (UtilValidate.isEmpty(templateType)) { | |
return "error"; | |
} | |
try { | |
String path = ComponentLocationResolver.getBaseLocation(PricatPath).toString(); | |
String fileName = null; | |
if ("pricatExcelTemplate".equals(templateType)) { | |
fileName = PricatFileName; | |
} | |
if (UtilValidate.isEmpty(fileName)) { | |
return "error"; | |
} | |
Path file = Paths.get(path + fileName); | |
byte[] bytes = Files.readAllBytes(file); | |
UtilHttp.streamContentToBrowser(response, bytes, "application/octet-stream", URLEncoder.encode(fileName, "UTF-8")); | |
} catch (MalformedURLException e) { | |
Debug.logError(e.getMessage(), module); | |
return "error"; | |
} catch (IOException e) { | |
Debug.logError(e.getMessage(), module); | |
return "error"; | |
} | |
return "success"; | |
} | |
/** | |
* Upload a pricat. | |
*/ | |
public static String pricatUpload(HttpServletRequest request, HttpServletResponse response) { | |
boolean isMultiPart = ServletFileUpload.isMultipartContent(request); | |
if (isMultiPart) { | |
return "parse_pricat"; | |
} else { | |
String action = request.getParameter("action"); | |
if (UtilValidate.isNotEmpty(action) && "downloadPricat".equals(action)) { | |
String sequenceNumString = (String) request.getParameter("sequenceNum"); | |
long sequenceNum = -1; | |
if (UtilValidate.isNotEmpty(sequenceNumString)) { | |
try { | |
sequenceNum = Long.valueOf(sequenceNumString); | |
} catch (NumberFormatException e) { | |
// do nothing | |
} | |
} | |
String originalPricatFileName = (String) request.getSession().getAttribute(PricatParseExcelHtmlThread.PRICAT_FILE); | |
String pricatFileName = originalPricatFileName; | |
if (sequenceNum > 0 && AbstractPricatParser.isCommentedExcelExists(request, sequenceNum)) { | |
GenericValue userLogin = (GenericValue) request.getSession().getAttribute("userLogin"); | |
String userLoginId = userLogin.getString("userLoginId"); | |
pricatFileName = InterfacePricatParser.tempFilesFolder + userLoginId + "/" + sequenceNum + ".xlsx"; | |
} | |
if (UtilValidate.isNotEmpty(pricatFileName) && UtilValidate.isNotEmpty(originalPricatFileName)) { | |
try { | |
Path path = Paths.get(pricatFileName); | |
byte[] bytes = Files.readAllBytes(path); | |
path = Paths.get(originalPricatFileName); | |
UtilHttp.streamContentToBrowser(response, bytes, "application/octet-stream", URLEncoder.encode(path.getName(path.getNameCount() - 1).toString(), "UTF-8")); | |
} catch (MalformedURLException e) { | |
Debug.logError(e.getMessage(), module); | |
return "error"; | |
} catch (IOException e) { | |
Debug.logError(e.getMessage(), module); | |
return "error"; | |
} | |
request.getSession().removeAttribute(PricatParseExcelHtmlThread.PRICAT_FILE); | |
return "download"; | |
} | |
} | |
} | |
return "success"; | |
} | |
/** | |
* Download commented excel file after it's parsed. | |
* | |
* @param request | |
* @param response | |
* @return | |
* @throws IOException | |
* @throws JDOMException | |
*/ | |
public static String downloadCommentedExcel(HttpServletRequest request, HttpServletResponse response) { | |
String sequenceNum = request.getParameter("sequenceNum"); | |
GenericValue userLogin = (GenericValue) request.getSession().getAttribute("userLogin"); | |
if (UtilValidate.isEmpty(sequenceNum) || UtilValidate.isEmpty(userLogin)) { | |
Debug.logError("sequenceNum[" + sequenceNum + "] or userLogin is empty", module); | |
return "error"; | |
} | |
String userLoginId = userLogin.getString("userLoginId"); | |
Delegator delegator = (Delegator) request.getAttribute("delegator"); | |
GenericValue historyValue = null; | |
try { | |
historyValue = delegator.findOne("ExcelImportHistory", UtilMisc.toMap("userLoginId", userLoginId, "sequenceNum", Long.valueOf(sequenceNum)), false); | |
} catch (NumberFormatException e) { | |
Debug.logError(e.getMessage(), module); | |
return "error"; | |
} catch (GenericEntityException e) { | |
Debug.logError(e.getMessage(), module); | |
return "error"; | |
} | |
if (UtilValidate.isEmpty(historyValue)) { | |
Debug.logError("No ExcelImportHistory value found by sequenceNum[" + sequenceNum + "] and userLoginId[" + userLoginId + "].", module); | |
return "error"; | |
} | |
String fileName = historyValue.getString("fileName"); | |
if (UtilValidate.isEmpty(fileName)) { | |
fileName = sequenceNum + ".xlsx"; | |
} | |
try { | |
File file = FileUtil.getFile(InterfacePricatParser.tempFilesFolder + userLoginId + "/" + sequenceNum + ".xlsx"); | |
if (file.exists()) { | |
Path path = Paths.get(file.getPath()); | |
byte[] bytes = Files.readAllBytes(path); | |
UtilHttp.streamContentToBrowser(response, bytes, "application/octet-stream", URLEncoder.encode(fileName, "UTF-8")); | |
} | |
} catch (MalformedURLException e) { | |
Debug.logError(e.getMessage(), module); | |
return "error"; | |
} catch (IOException e) { | |
Debug.logError(e.getMessage(), module); | |
return "error"; | |
} | |
return "success"; | |
} | |
} |