svn commit: r1840564 - /ofbiz/ofbiz-framework/trunk/framework/common/src/main/java/org/apache/ofbiz/common/qrcode/QRCodeServices.java

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

svn commit: r1840564 - /ofbiz/ofbiz-framework/trunk/framework/common/src/main/java/org/apache/ofbiz/common/qrcode/QRCodeServices.java

surajk
Author: surajk
Date: Tue Sep 11 13:30:10 2018
New Revision: 1840564

URL: http://svn.apache.org/viewvc?rev=1840564&view=rev
Log:
Improved: Modified QRCodeServices.java and used EntityUtilProperties. Removed unused data variables and used them directly inside the service.
(OFBIZ-7037)
Thanks everyone for your suggestions and review.

Modified:
    ofbiz/ofbiz-framework/trunk/framework/common/src/main/java/org/apache/ofbiz/common/qrcode/QRCodeServices.java

Modified: ofbiz/ofbiz-framework/trunk/framework/common/src/main/java/org/apache/ofbiz/common/qrcode/QRCodeServices.java
URL: http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/framework/common/src/main/java/org/apache/ofbiz/common/qrcode/QRCodeServices.java?rev=1840564&r1=1840563&r2=1840564&view=diff
==============================================================================
--- ofbiz/ofbiz-framework/trunk/framework/common/src/main/java/org/apache/ofbiz/common/qrcode/QRCodeServices.java (original)
+++ ofbiz/ofbiz-framework/trunk/framework/common/src/main/java/org/apache/ofbiz/common/qrcode/QRCodeServices.java Tue Sep 11 13:30:10 2018
@@ -35,6 +35,8 @@ import org.apache.ofbiz.base.util.FileUt
 import org.apache.ofbiz.base.util.UtilProperties;
 import org.apache.ofbiz.base.util.UtilValidate;
 import org.apache.ofbiz.common.image.ImageTransform;
+import org.apache.ofbiz.entity.Delegator;
+import org.apache.ofbiz.entity.util.EntityUtilProperties;
 import org.apache.ofbiz.service.DispatchContext;
 import org.apache.ofbiz.service.ServiceUtil;
 
@@ -61,22 +63,6 @@ public class QRCodeServices {
 
     public static final String module = QRCodeServices.class.getName();
 
-    public static final String QRCODE_DEFAULT_WIDTH = UtilProperties.getPropertyValue("qrcode", "qrcode.default.width", "200");
-
-    public static final String QRCODE_DEFAULT_HEIGHT = UtilProperties.getPropertyValue("qrcode", "qrcode.default.height", "200");
-
-    public static final String QRCODE_DEFAULT_FORMAT = UtilProperties.getPropertyValue("qrcode", "qrcode.default.format", "jpg");
-
-    public static final String QRCODE_FORMAT_SUPPORTED = UtilProperties.getPropertyValue("qrcode", "qrcode.format.supported", "jpg|png|bmp");
-    
-    public static final String QRCODE_DEFAULT_LOGOIMAGE = UtilProperties.getPropertyValue("qrcode", "qrcode.default.logoimage");
-    
-    public static final BufferedImage defaultLogoImage;
-    
-    private static final String[] FORMAT_NAMES = StringUtil.split(QRCODE_FORMAT_SUPPORTED, '|');
-    
-    private static final List<String> FORMATS_SUPPORTED = Arrays.asList(FORMAT_NAMES);
-
     public static final int MIN_SIZE = 20;
 
     public static final int MAX_SIZE = 500;
@@ -84,26 +70,6 @@ public class QRCodeServices {
     private static final int BLACK = 0xFF000000;
 
     private static final int WHITE = 0xFFFFFFFF;
-    
-    static {
-        if (UtilValidate.isNotEmpty(QRCODE_DEFAULT_LOGOIMAGE)) {
-            defaultLogoImage = getLogoImageResult();
-        } else {
-            defaultLogoImage = null;
-        }
-    }
-
-    private static BufferedImage getLogoImageResult() {
-        try {
-            Map<String, Object> logoImageResult = ImageTransform.getBufferedImage(FileUtil.getFile(QRCODE_DEFAULT_LOGOIMAGE).getAbsolutePath(), Locale.getDefault());
-            if (UtilValidate.isEmpty(logoImageResult.get("bufferedImage"))) {
-                Debug.logError("Your logo image file(" + QRCODE_DEFAULT_LOGOIMAGE + ") cannot be read by javax.imageio.ImageIO. Please use png, jpeg formats instead of ico and etc.", module);
-            }
-            return (BufferedImage) logoImageResult.get("bufferedImage");
-        } catch (IllegalArgumentException | IOException e) {
-            return null;
-        }
-    }
 
     /** Streams QR Code to the result. */
     public static Map<String, Object> generateQRCodeImage(DispatchContext ctx,Map<String, Object> context) {
@@ -117,27 +83,31 @@ public class QRCodeServices {
         String logoImage = (String) context.get("logoImage");
         Integer logoImageMaxWidth = (Integer) context.get("logoImageMaxWidth");
         Integer logoImageMaxHeight = (Integer) context.get("logoImageMaxHeight");
+        Delegator delegator = ctx.getDelegator();
 
         if (UtilValidate.isEmpty(message)) {
             return ServiceUtil.returnError(UtilProperties.getMessage("QRCodeUiLabels", "ParameterCannotEmpty", new Object[] { "message" }, locale));
         }
         if (width == null) {
-            width = Integer.parseInt(QRCODE_DEFAULT_WIDTH);
+            width = Integer.parseInt(EntityUtilProperties.getPropertyValue("qrcode", "qrcode.default.width", "200", delegator));
         }
         if (width < MIN_SIZE || width > MAX_SIZE) {
             return ServiceUtil.returnError(UtilProperties.getMessage("QRCodeUiLabels", "SizeOutOfBorderError", new Object[] {"width", String.valueOf(width), String.valueOf(MIN_SIZE), String.valueOf(MAX_SIZE)}, locale));
         }
         if (height == null) {
-            height = Integer.parseInt(QRCODE_DEFAULT_HEIGHT);
+            height = Integer.parseInt(EntityUtilProperties.getPropertyValue("qrcode", "qrcode.default.height", "200", delegator));
         }
         if (height < MIN_SIZE || height > MAX_SIZE) {
             return ServiceUtil.returnError(UtilProperties.getMessage("QRCodeUiLabels", "SizeOutOfBorderError",
                     new Object[] { "height", String.valueOf(height), String.valueOf(MIN_SIZE), String.valueOf(MAX_SIZE) }, locale));
         }
         if (UtilValidate.isEmpty(format)) {
-            format = QRCODE_DEFAULT_FORMAT;
+            format = EntityUtilProperties.getPropertyValue("qrcode", "qrcode.default.format", "jpg", delegator);
         }
-        if (!FORMATS_SUPPORTED.contains(format)) {
+        String qrCodeFormatSupported = EntityUtilProperties.getPropertyValue("qrcode", "qrcode.format.supported", "jpg|png|bmp", delegator);
+        String[] formatNames = StringUtil.split(qrCodeFormatSupported, '|');
+        List<String> formatsSupported = Arrays.asList(formatNames);
+        if (!formatsSupported.contains(format)) {
             return ServiceUtil.returnError(UtilProperties.getMessage("QRCodeUiLabels", "ErrorFormatNotSupported", new Object[] { format }, locale));
         }
         Map<EncodeHintType, Object> encodeHints = null;
@@ -148,7 +118,7 @@ public class QRCodeServices {
 
         try {
             BitMatrix bitMatrix = new MultiFormatWriter().encode(message, BarcodeFormat.QR_CODE, width, height, encodeHints);
-            BufferedImage bufferedImage = toBufferedImage(bitMatrix, format);
+            BufferedImage bufferedImage = toBufferedImage(bitMatrix, format, locale);
             BufferedImage logoBufferedImage = null;
             if (UtilValidate.isNotEmpty(logoImage)) {
                 Map<String, Object> logoImageResult;
@@ -160,6 +130,21 @@ public class QRCodeServices {
                 }
             }
             if (UtilValidate.isEmpty(logoBufferedImage)) {
+                String qrCodeDefaultLogoImage = EntityUtilProperties.getPropertyValue("qrcode", "qrcode.default.logoimage", delegator);
+                BufferedImage defaultLogoImage = null;
+                if (UtilValidate.isNotEmpty(qrCodeDefaultLogoImage)) {
+                    try {
+                        Map<String, Object> logoImageResult = ImageTransform.getBufferedImage(FileUtil.getFile(qrCodeDefaultLogoImage).getAbsolutePath(), locale);
+                        defaultLogoImage = (BufferedImage) logoImageResult.get("bufferedImage");
+                        if (UtilValidate.isEmpty(defaultLogoImage)) {
+                            Debug.logError("Your logo image file(" + qrCodeDefaultLogoImage + ") cannot be read by javax.imageio.ImageIO. Please use png, jpeg formats instead of ico and etc.", module);
+                        }
+                    } catch (IllegalArgumentException e) {
+                        defaultLogoImage = null;
+                    } catch (IOException e) {
+                        defaultLogoImage = null;
+                    }
+                }
                 logoBufferedImage = defaultLogoImage;
             }
             
@@ -175,7 +160,7 @@ public class QRCodeServices {
                     logoBufferedImage = (BufferedImage) logoImageResult.get("bufferedImage");
                 }
                 BitMatrix newBitMatrix = bitMatrix.clone();
-                newBufferedImage = toBufferedImage(newBitMatrix, format);
+                newBufferedImage = toBufferedImage(newBitMatrix, format, locale);
                 Graphics2D graphics = newBufferedImage.createGraphics();
                 graphics.drawImage(logoBufferedImage, new AffineTransformOp(AffineTransform.getTranslateInstance(1, 1), null), (newBufferedImage.getWidth() - logoBufferedImage.getWidth())/2, (newBufferedImage.getHeight() - logoBufferedImage.getHeight())/2);
                 graphics.dispose();
@@ -223,11 +208,7 @@ public class QRCodeServices {
             return result;
         } catch (WriterException e) {
             return ServiceUtil.returnError(UtilProperties.getMessage("QRCodeUiLabels", "ErrorGenerateQRCode", new Object[] { e.toString() }, locale));
-        } catch (ChecksumException e) {
-            return ServiceUtil.returnError(UtilProperties.getMessage("QRCodeUiLabels", "ErrorVerifyQRCode", new Object[] { e.toString() }, locale));
-        } catch (FormatException e) {
-            return ServiceUtil.returnError(UtilProperties.getMessage("QRCodeUiLabels", "ErrorVerifyQRCode", new Object[] { e.toString() }, locale));
-        } catch (NotFoundException e) {
+        } catch (ChecksumException | FormatException | NotFoundException e) {
             return ServiceUtil.returnError(UtilProperties.getMessage("QRCodeUiLabels", "ErrorVerifyQRCode", new Object[] { e.toString() }, locale));
         }
     }
@@ -242,11 +223,11 @@ public class QRCodeServices {
      * BufferedImage image = new BufferedImage(width, height,
      * BufferedImage.TYPE_INT_RGB); or others to make it work correctly.
      */
-    private static BufferedImage toBufferedImage(BitMatrix matrix, String format) {
+    private static BufferedImage toBufferedImage(BitMatrix matrix, String format, Locale locale) {
         int width = matrix.getWidth();
         int height = matrix.getHeight();
         BufferedImage image = null;
-        String osName = System.getProperty("os.name").toLowerCase(Locale.getDefault());
+        String osName = System.getProperty("os.name").toLowerCase(locale);
         image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
         if (osName.startsWith("mac os") && format.equals("png")) {
             image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);