| /* |
| * 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.common.qrcode; |
| |
| import java.awt.image.BufferedImage; |
| import java.io.IOException; |
| import java.io.OutputStream; |
| import java.util.Locale; |
| import java.util.Map; |
| import java.lang.Integer; |
| |
| import javax.imageio.ImageIO; |
| import javax.servlet.http.HttpServletRequest; |
| import javax.servlet.http.HttpServletResponse; |
| import javax.servlet.http.HttpSession; |
| |
| 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.GenericValue; |
| import org.apache.ofbiz.service.GenericServiceException; |
| import org.apache.ofbiz.service.LocalDispatcher; |
| import org.apache.ofbiz.service.ServiceUtil; |
| |
| /** |
| * Events for QRCode. |
| */ |
| public class QRCodeEvents { |
| |
| public static final String module = QRCodeEvents.class.getName(); |
| |
| /** Streams QR Code to the output. */ |
| public static String serveQRCodeImage(HttpServletRequest request, HttpServletResponse response) { |
| HttpSession session = ((HttpServletRequest) request).getSession(); |
| LocalDispatcher dispatcher = (LocalDispatcher) request.getAttribute("dispatcher"); |
| Map<String, Object> parameters = UtilHttp.getParameterMap(request); |
| String message = (String) parameters.get("message"); |
| GenericValue userLogin = (GenericValue) request.getAttribute("userLogin"); |
| if (userLogin == null) userLogin = (GenericValue) session.getAttribute("userLogin"); |
| if (userLogin == null) userLogin = (GenericValue) session.getAttribute("autoUserLogin"); |
| Locale locale = UtilHttp.getLocale(request); |
| |
| if (UtilValidate.isEmpty(message)) { |
| message = "Error get message parameter."; |
| } |
| String format = (String) parameters.get("format"); |
| if (UtilValidate.isEmpty(format)) { |
| format = "jpg"; |
| } |
| String mimeType = "image/" + format; |
| String width = (String) parameters.get("width"); |
| String height = (String) parameters.get("height"); |
| String encoding = (String) parameters.get("encoding"); |
| Boolean verifyOutput = Boolean.valueOf((String) parameters.get("verifyOutput")); |
| String logoImageMaxWidth = (String) parameters.get("logoImageMaxWidth"); |
| String logoImageMaxHeight = (String) parameters.get("logoImageMaxHeight"); |
| |
| try { |
| if (mimeType != null) { |
| response.setContentType(mimeType); |
| } |
| OutputStream os = response.getOutputStream(); |
| Map<String, Object> context = UtilMisc.<String, Object>toMap("message", message, "format", format, "userLogin", userLogin, "locale", locale); |
| if (UtilValidate.isNotEmpty(width)) { |
| try { |
| context.put("width", Integer.parseInt(width)); |
| } catch (NumberFormatException e) { |
| // do nothing |
| } |
| if (UtilValidate.isEmpty(height)) { |
| try { |
| context.put("height", Integer.parseInt(width)); |
| } catch (NumberFormatException e) { |
| // do nothing |
| } |
| } |
| } |
| if (UtilValidate.isNotEmpty(height)) { |
| try { |
| context.put("height", Integer.parseInt(height)); |
| } catch (NumberFormatException e) { |
| // do nothing |
| } |
| if (UtilValidate.isEmpty(width)) { |
| try { |
| context.put("width", Integer.parseInt(height)); |
| } catch (NumberFormatException e) { |
| // do nothing |
| } |
| } |
| } |
| if (UtilValidate.isNotEmpty(encoding)) { |
| context.put("encoding", encoding); |
| } |
| if (UtilValidate.isNotEmpty(verifyOutput) && verifyOutput.booleanValue()) { |
| context.put("verifyOutput", verifyOutput); |
| } |
| if (UtilValidate.isNotEmpty(logoImageMaxWidth)) { |
| try { |
| context.put("logoImageMaxWidth", Integer.parseInt(logoImageMaxWidth)); |
| } catch (NumberFormatException e) { |
| // do nothing |
| } |
| } |
| if (UtilValidate.isNotEmpty(logoImageMaxHeight)) { |
| try { |
| context.put("logoImageMaxHeight", Integer.parseInt(logoImageMaxHeight)); |
| } catch (NumberFormatException e) { |
| // do nothing |
| } |
| } |
| Map<String, Object> results = dispatcher.runSync("generateQRCodeImage", context); |
| if (!ServiceUtil.isError(results)) { |
| BufferedImage bufferedImage = (BufferedImage) results.get("bufferedImage"); |
| if (!ImageIO.write(bufferedImage, format, os)) { |
| String errMsg = UtilProperties.getMessage("QRCodeUiLabels", "ErrorWriteFormatToFile", new Object[] { format }, locale); |
| request.setAttribute("_ERROR_MESSAGE_", errMsg); |
| return "error"; |
| } |
| os.flush(); |
| } else { |
| String errMsg = ServiceUtil.getErrorMessage(results); |
| request.setAttribute("_ERROR_MESSAGE_", errMsg); |
| return "error"; |
| } |
| } catch (IOException e) { |
| String errMsg = UtilProperties.getMessage("QRCodeUiLabels", "ErrorGenerateQRCode", new Object[] { e.getMessage() }, locale); |
| request.setAttribute("_ERROR_MESSAGE_", errMsg); |
| return "error"; |
| } catch (GenericServiceException e) { |
| String errMsg = UtilProperties.getMessage("QRCodeUiLabels", "ErrorGenerateQRCode", new Object[] { e.getMessage() }, locale); |
| request.setAttribute("_ERROR_MESSAGE_", errMsg); |
| return "error"; |
| } |
| return "success"; |
| } |
| } |