From 3c01cd7615e6a3e03728e31a5e208dd632ebc0f3 Mon Sep 17 00:00:00 2001 From: srowen Date: Tue, 4 Nov 2008 12:08:19 +0000 Subject: [PATCH] Renamed UPC result type to Product, and introduced an idea of 'product ID' and 'normalized product ID' to account for UPC-E, where the actual visible ID is different from what we may want to search for as a key. Updated clients to use this too. git-svn-id: http://zxing.googlecode.com/svn/trunk@668 59b500cc-1b3d-0410-9834-0bbf25fbcc57 --- .../android/result/ResultHandlerFactory.java | 2 +- .../android/result/UPCResultHandler.java | 8 ++--- .../zxing/client/result/ParsedResultType.java | 2 +- ...edResult.java => ProductParsedResult.java} | 26 ++++++++++++----- ...ltParser.java => ProductResultParser.java} | 29 ++++++++++++------- .../zxing/client/result/ResultParser.java | 2 +- .../src/com/google/zxing/oned/UPCEReader.java | 2 +- .../result/ParsedReaderResultTestCase.java | 11 +++++-- .../google/zxing/client/j2me/ZXingMIDlet.java | 10 +++---- 9 files changed, 59 insertions(+), 33 deletions(-) rename core/src/com/google/zxing/client/result/{UPCParsedResult.java => ProductParsedResult.java} (57%) rename core/src/com/google/zxing/client/result/{UPCResultParser.java => ProductResultParser.java} (62%) diff --git a/android/src/com/google/zxing/client/android/result/ResultHandlerFactory.java b/android/src/com/google/zxing/client/android/result/ResultHandlerFactory.java index e996c735..0470baef 100644 --- a/android/src/com/google/zxing/client/android/result/ResultHandlerFactory.java +++ b/android/src/com/google/zxing/client/android/result/ResultHandlerFactory.java @@ -31,7 +31,7 @@ public class ResultHandlerFactory { return new AddressBookResultHandler(activity, result); } else if (type.equals(ParsedResultType.EMAIL_ADDRESS)) { return new EmailAddressResultHandler(activity, result); - } else if (type.equals(ParsedResultType.UPC)) { + } else if (type.equals(ParsedResultType.PRODUCT)) { return new UPCResultHandler(activity, result); } else if (type.equals(ParsedResultType.URI)) { return new URIResultHandler(activity, result); diff --git a/android/src/com/google/zxing/client/android/result/UPCResultHandler.java b/android/src/com/google/zxing/client/android/result/UPCResultHandler.java index 13c8984f..44ecd228 100644 --- a/android/src/com/google/zxing/client/android/result/UPCResultHandler.java +++ b/android/src/com/google/zxing/client/android/result/UPCResultHandler.java @@ -19,7 +19,7 @@ package com.google.zxing.client.android.result; import android.app.Activity; import com.google.zxing.client.android.R; import com.google.zxing.client.result.ParsedResult; -import com.google.zxing.client.result.UPCParsedResult; +import com.google.zxing.client.result.ProductParsedResult; public class UPCResultHandler extends ResultHandler { @@ -41,13 +41,13 @@ public class UPCResultHandler extends ResultHandler { } public void handleButtonPress(int index) { - UPCParsedResult upcResult = (UPCParsedResult) mResult; + ProductParsedResult upcResult = (ProductParsedResult) mResult; switch (index) { case 0: - openProductSearch(upcResult.getUPC()); + openProductSearch(upcResult.getNormalizedProductID()); break; case 1: - webSearch(upcResult.getUPC()); + webSearch(upcResult.getNormalizedProductID()); break; } } diff --git a/core/src/com/google/zxing/client/result/ParsedResultType.java b/core/src/com/google/zxing/client/result/ParsedResultType.java index 41066712..96018ece 100644 --- a/core/src/com/google/zxing/client/result/ParsedResultType.java +++ b/core/src/com/google/zxing/client/result/ParsedResultType.java @@ -26,7 +26,7 @@ public final class ParsedResultType { public static final ParsedResultType ADDRESSBOOK = new ParsedResultType("ADDRESSBOOK"); public static final ParsedResultType EMAIL_ADDRESS = new ParsedResultType("EMAIL_ADDRESS"); - public static final ParsedResultType UPC = new ParsedResultType("UPC"); + public static final ParsedResultType PRODUCT = new ParsedResultType("PRODUCT"); public static final ParsedResultType URI = new ParsedResultType("URI"); public static final ParsedResultType TEXT = new ParsedResultType("TEXT"); public static final ParsedResultType ANDROID_INTENT = new ParsedResultType("ANDROID_INTENT"); diff --git a/core/src/com/google/zxing/client/result/UPCParsedResult.java b/core/src/com/google/zxing/client/result/ProductParsedResult.java similarity index 57% rename from core/src/com/google/zxing/client/result/UPCParsedResult.java rename to core/src/com/google/zxing/client/result/ProductParsedResult.java index fd74b4db..9014ca81 100644 --- a/core/src/com/google/zxing/client/result/UPCParsedResult.java +++ b/core/src/com/google/zxing/client/result/ProductParsedResult.java @@ -19,21 +19,31 @@ package com.google.zxing.client.result; /** * @author dswitkin@google.com (Daniel Switkin) */ -public final class UPCParsedResult extends ParsedResult { +public final class ProductParsedResult extends ParsedResult { - private final String upc; + private final String productID; + private final String normalizedProductID; - UPCParsedResult(String upc) { - super(ParsedResultType.UPC); - this.upc = upc; + ProductParsedResult(String productID) { + this(productID, productID); } - public String getUPC() { - return upc; + ProductParsedResult(String productID, String normalizedProductID) { + super(ParsedResultType.PRODUCT); + this.productID = productID; + this.normalizedProductID = normalizedProductID; + } + + public String getProductID() { + return productID; + } + + public String getNormalizedProductID() { + return normalizedProductID; } public String getDisplayResult() { - return upc; + return productID; } } diff --git a/core/src/com/google/zxing/client/result/UPCResultParser.java b/core/src/com/google/zxing/client/result/ProductResultParser.java similarity index 62% rename from core/src/com/google/zxing/client/result/UPCResultParser.java rename to core/src/com/google/zxing/client/result/ProductResultParser.java index 331d57b3..c7d5c530 100644 --- a/core/src/com/google/zxing/client/result/UPCResultParser.java +++ b/core/src/com/google/zxing/client/result/ProductResultParser.java @@ -18,40 +18,49 @@ package com.google.zxing.client.result; import com.google.zxing.BarcodeFormat; import com.google.zxing.Result; +import com.google.zxing.oned.UPCEReader; /** * Parses strings of digits that repesent a UPC code. * * @author dswitkin@google.com (Daniel Switkin) */ -final class UPCResultParser extends ResultParser { +final class ProductResultParser extends ResultParser { - private UPCResultParser() { + private ProductResultParser() { } // Treat all UPC and EAN variants as UPCs, in the sense that they are all product barcodes. - public static UPCParsedResult parse(Result result) { + public static ProductParsedResult parse(Result result) { BarcodeFormat format = result.getBarcodeFormat(); - if (!BarcodeFormat.UPC_A.equals(format) && !BarcodeFormat.UPC_E.equals(format) && - !BarcodeFormat.EAN_8.equals(format) && !BarcodeFormat.EAN_13.equals(format)) { + if (!(BarcodeFormat.UPC_A.equals(format) || BarcodeFormat.UPC_E.equals(format) || + BarcodeFormat.EAN_8.equals(format) || BarcodeFormat.EAN_13.equals(format))) { return null; } + // Really neither of these should happen: String rawText = result.getText(); if (rawText == null) { return null; } + int length = rawText.length(); - if (length != 12 && length != 13) { - return null; - } for (int x = 0; x < length; x++) { char c = rawText.charAt(x); if (c < '0' || c > '9') { return null; } } - // Not actually checking the checksum again here - return new UPCParsedResult(rawText); + // Not actually checking the checksum again here + + String normalizedProductID; + // Expand UPC-E for purposes of searching + if (BarcodeFormat.UPC_E.equals(format)) { + normalizedProductID = UPCEReader.convertUPCEtoUPCA(rawText); + } else { + normalizedProductID = rawText; + } + + return new ProductParsedResult(rawText, normalizedProductID); } } \ No newline at end of file diff --git a/core/src/com/google/zxing/client/result/ResultParser.java b/core/src/com/google/zxing/client/result/ResultParser.java index d74dfc43..a3d6fc27 100644 --- a/core/src/com/google/zxing/client/result/ResultParser.java +++ b/core/src/com/google/zxing/client/result/ResultParser.java @@ -68,7 +68,7 @@ public abstract class ResultParser { } else if ((result = ISBNResultParser.parse(theResult)) != null) { // We depend on ISBN parsing coming before UPC, as it is a subset. return result; - } else if ((result = UPCResultParser.parse(theResult)) != null) { + } else if ((result = ProductResultParser.parse(theResult)) != null) { return result; } return new TextParsedResult(theResult.getText(), null); diff --git a/core/src/com/google/zxing/oned/UPCEReader.java b/core/src/com/google/zxing/oned/UPCEReader.java index c67103d0..42dc9e7f 100644 --- a/core/src/com/google/zxing/oned/UPCEReader.java +++ b/core/src/com/google/zxing/oned/UPCEReader.java @@ -112,7 +112,7 @@ public final class UPCEReader extends AbstractUPCEANReader { * @param upce UPC-E code as string of digits * @return equivalent UPC-A code as string of digits */ - private static String convertUPCEtoUPCA(String upce) { + public static String convertUPCEtoUPCA(String upce) { char[] upceChars = new char[6]; upce.getChars(1, 7, upceChars, 0); StringBuffer result = new StringBuffer(12); diff --git a/core/test/src/com/google/zxing/client/result/ParsedReaderResultTestCase.java b/core/test/src/com/google/zxing/client/result/ParsedReaderResultTestCase.java index b8f96976..f4dd92b8 100644 --- a/core/test/src/com/google/zxing/client/result/ParsedReaderResultTestCase.java +++ b/core/test/src/com/google/zxing/client/result/ParsedReaderResultTestCase.java @@ -77,11 +77,18 @@ public final class ParsedReaderResultTestCase extends TestCase { } public void testUPC() { - doTestResult("123456789012", ParsedResultType.UPC, BarcodeFormat.UPC_A); - doTestResult("1234567890123", ParsedResultType.UPC, BarcodeFormat.UPC_A); + doTestResult("123456789012", ParsedResultType.PRODUCT, BarcodeFormat.UPC_A); + doTestResult("1234567890123", ParsedResultType.PRODUCT, BarcodeFormat.UPC_A); doTestResult("12345678901", ParsedResultType.TEXT); } + public void testEAN() { + doTestResult("00393157", ParsedResultType.PRODUCT, BarcodeFormat.EAN_8); + doTestResult("00393158", ParsedResultType.TEXT); + doTestResult("5051140178499", ParsedResultType.PRODUCT, BarcodeFormat.EAN_13); + doTestResult("5051140178490", ParsedResultType.TEXT); + } + public void testISBN() { doTestResult("9784567890123", ParsedResultType.ISBN, BarcodeFormat.EAN_13); doTestResult("9794567890123", ParsedResultType.ISBN, BarcodeFormat.EAN_13); diff --git a/javame/src/com/google/zxing/client/j2me/ZXingMIDlet.java b/javame/src/com/google/zxing/client/j2me/ZXingMIDlet.java index 4da438c7..13fe0552 100644 --- a/javame/src/com/google/zxing/client/j2me/ZXingMIDlet.java +++ b/javame/src/com/google/zxing/client/j2me/ZXingMIDlet.java @@ -23,7 +23,7 @@ import com.google.zxing.client.result.ParsedResultType; import com.google.zxing.client.result.ResultParser; import com.google.zxing.client.result.SMSParsedResult; import com.google.zxing.client.result.TelParsedResult; -import com.google.zxing.client.result.UPCParsedResult; +import com.google.zxing.client.result.ProductParsedResult; import com.google.zxing.client.result.URIParsedResult; import javax.microedition.io.ConnectionNotFoundException; @@ -205,10 +205,10 @@ public final class ZXingMIDlet extends MIDlet { } else if (type.equals(ParsedResultType.SMS)) { SMSParsedResult smsResult = (SMSParsedResult) result; showOpenURL("Compose SMS?", smsResult.getNumber(), smsResult.getSMSURI()); - } else if (type.equals(ParsedResultType.UPC)) { - String upc = ((UPCParsedResult) result).getUPC(); - String uri = "http://www.upcdatabase.com/item.asp?upc=" + upc; - showOpenURL("Look Up Barcode Online?", upc, uri); + } else if (type.equals(ParsedResultType.PRODUCT)) { + ProductParsedResult productResult = (ProductParsedResult) result; + String uri = "http://www.upcdatabase.com/item.asp?upc=" + productResult.getNormalizedProductID(); + showOpenURL("Look Up Barcode Online?", productResult.getProductID(), uri); } else if (type.equals(ParsedResultType.TEL)) { TelParsedResult telResult = (TelParsedResult) result; showOpenURL("Dial Number?", telResult.getNumber(), telResult.getTelURI()); -- 2.20.1