blob: be8e7e411e607c36fc946143c7bdbe7b1a9d4804 [file] [log] [blame]
/*
* 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";
}
}