Display possible country origin info on product scan
[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   /**
78    * For some products, the possible country of manufacture as a {@link String} denoting the
79    * ISO country code. Some map to multiple possible countries, like "US/CA".
80    */
81   public static final ResultMetadataType POSSIBLE_COUNTRY = new ResultMetadataType("POSSIBLE_COUNTRY");
82
83   private final String name;
84
85   private ResultMetadataType(String name) {
86     this.name = name;
87     VALUES.put(name, this);
88   }
89
90   public String getName() {
91     return name;
92   }
93
94   public String toString() {
95     return name;
96   }
97
98   public static ResultMetadataType valueOf(String name) {
99     if (name == null || name.length() == 0) {
100       throw new IllegalArgumentException();
101     }
102     ResultMetadataType format = (ResultMetadataType) VALUES.get(name);
103     if (format == null) {
104       throw new IllegalArgumentException();
105     }
106     return format;
107   }
108
109 }