Add support for UPC/EAN +5 extensions, plus basic tests, and display the content...
[zxing.git] / core / src / com / google / zxing / ResultMetadataType.java
1 /*
2  * Copyright 2008 ZXing authors
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 package com.google.zxing;
18
19 import java.util.Hashtable;
20
21 /**
22  * Represents some type of metadata about the result of the decoding that the decoder
23  * wishes to communicate back to the caller.
24  *
25  * @author Sean Owen
26  */
27 public final class ResultMetadataType {
28
29   // No, we can't use an enum here. J2ME doesn't support it.
30
31   private static final Hashtable VALUES = new Hashtable();
32
33   // No, we can't use an enum here. J2ME doesn't support it.
34
35   /**
36    * Unspecified, application-specific metadata. Maps to an unspecified {@link Object}.
37    */
38   public static final ResultMetadataType OTHER = new ResultMetadataType("OTHER");
39
40   /**
41    * Denotes the likely approximate orientation of the barcode in the image. This value
42    * is given as degrees rotated clockwise from the normal, upright orientation.
43    * For example a 1D barcode which was found by reading top-to-bottom would be
44    * said to have orientation "90". This key maps to an {@link Integer} whose
45    * value is in the range [0,360).
46    */
47   public static final ResultMetadataType ORIENTATION = new ResultMetadataType("ORIENTATION");
48
49   /**
50    * <p>2D barcode formats typically encode text, but allow for a sort of 'byte mode'
51    * which is sometimes used to encode binary data. While {@link Result} makes available
52    * the complete raw bytes in the barcode for these formats, it does not offer the bytes
53    * from the byte segments alone.</p>
54    *
55    * <p>This maps to a {@link java.util.Vector} of byte arrays corresponding to the
56    * raw bytes in the byte segments in the barcode, in order.</p>
57    */
58   public static final ResultMetadataType BYTE_SEGMENTS = new ResultMetadataType("BYTE_SEGMENTS");
59
60   /**
61    * Error correction level used, if applicable. The value type depends on the
62    * format, but is typically a String.
63    */
64   public static final ResultMetadataType ERROR_CORRECTION_LEVEL = new ResultMetadataType("ERROR_CORRECTION_LEVEL");
65
66   /**
67    * For some periodicals, indicates the issue number as an {@link Integer}.
68    */
69   public static final ResultMetadataType ISSUE_NUMBER = new ResultMetadataType("ISSUE_NUMBER");
70
71   /**
72    * For some products, indicates the suggested retail price in the barcode as a
73    * formatted {@link String}.
74    */
75   public static final ResultMetadataType SUGGESTED_PRICE = new ResultMetadataType("SUGGESTED_PRICE");
76
77   private final String name;
78
79   private ResultMetadataType(String name) {
80     this.name = name;
81     VALUES.put(name, this);
82   }
83
84   public String getName() {
85     return name;
86   }
87
88   public String toString() {
89     return name;
90   }
91
92   public static ResultMetadataType valueOf(String name) {
93     if (name == null || name.length() == 0) {
94       throw new IllegalArgumentException();
95     }
96     ResultMetadataType format = (ResultMetadataType) VALUES.get(name);
97     if (format == null) {
98       throw new IllegalArgumentException();
99     }
100     return format;
101   }
102
103 }