org.apache.ofbiz.pricat.PricatEvents.java Source code

Java tutorial

Introduction

Here is the source code for org.apache.ofbiz.pricat.PricatEvents.java

Source

/*******************************************************************************
 * 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";
    }
}