Move character encoding logic out to common, try again to improve its handling of...
[zxing.git] / core / src / com / google / zxing / MultiFormatWriter.java
index 2913de1..297b79e 100644 (file)
 
 package com.google.zxing;
 
-import com.google.zxing.common.ByteMatrix;
+import com.google.zxing.common.BitMatrix;
+import com.google.zxing.oned.Code128Writer;
+import com.google.zxing.oned.Code39Writer;
+import com.google.zxing.oned.EAN13Writer;
+import com.google.zxing.oned.EAN8Writer;
+import com.google.zxing.oned.ITFWriter;
 import com.google.zxing.qrcode.QRCodeWriter;
 
 import java.util.Hashtable;
 
+/**
+ * This is a factory class which finds the appropriate Writer subclass for the BarcodeFormat
+ * requested and encodes the barcode with the supplied contents.
+ *
+ * @author dswitkin@google.com (Daniel Switkin)
+ */
 public final class MultiFormatWriter implements Writer {
 
-  public ByteMatrix encode(byte[] contents, BarcodeFormat format, int width,
-      int height) throws Exception {
+  public BitMatrix encode(String contents, BarcodeFormat format, int width,
+      int height) throws WriterException {
 
     return encode(contents, format, width, height, null);
   }
 
-  public ByteMatrix encode(byte[] contents, BarcodeFormat format, int width, int height,
-      Hashtable hints) throws Exception {
+  public BitMatrix encode(String contents, BarcodeFormat format, int width, int height,
+      Hashtable hints) throws WriterException {
 
-    if (format == BarcodeFormat.QR_CODE) {
-      return new QRCodeWriter().encode(contents, format, width, height, hints);
+    Writer writer;
+    if (format == BarcodeFormat.EAN_8) {
+      writer = new EAN8Writer();
+    } else if (format == BarcodeFormat.EAN_13) {
+      writer = new EAN13Writer();
+    } else if (format == BarcodeFormat.QR_CODE) {
+      writer = new QRCodeWriter();
+    } else if (format == BarcodeFormat.CODE_39) {
+      writer = new Code39Writer();
+    } else if (format == BarcodeFormat.CODE_128) {
+      writer = new Code128Writer();
+    } else if (format == BarcodeFormat.ITF) {
+      writer = new ITFWriter();
     } else {
       throw new IllegalArgumentException("No encoder available for format " + format);
     }
+    return writer.encode(contents, format, width, height, hints);
   }
 
 }