2 * Copyright 2008 ZXing authors
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
17 package com.google.zxing;
19 import java.util.Hashtable;
22 * Represents some type of metadata about the result of the decoding that the decoder
23 * wishes to communicate back to the caller.
27 public final class ResultMetadataType {
29 // No, we can't use an enum here. J2ME doesn't support it.
31 private static final Hashtable VALUES = new Hashtable();
33 // No, we can't use an enum here. J2ME doesn't support it.
36 * Unspecified, application-specific metadata. Maps to an unspecified {@link Object}.
38 public static final ResultMetadataType OTHER = new ResultMetadataType("OTHER");
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).
47 public static final ResultMetadataType ORIENTATION = new ResultMetadataType("ORIENTATION");
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>
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>
58 public static final ResultMetadataType BYTE_SEGMENTS = new ResultMetadataType("BYTE_SEGMENTS");
61 * Error correction level used, if applicable. The value type depends on the
62 * format, but is typically a String.
64 public static final ResultMetadataType ERROR_CORRECTION_LEVEL = new ResultMetadataType("ERROR_CORRECTION_LEVEL");
67 * For some periodicals, indicates the issue number as an {@link Integer}.
69 public static final ResultMetadataType ISSUE_NUMBER = new ResultMetadataType("ISSUE_NUMBER");
72 * For some products, indicates the suggested retail price in the barcode as a
73 * formatted {@link String}.
75 public static final ResultMetadataType SUGGESTED_PRICE = new ResultMetadataType("SUGGESTED_PRICE");
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".
81 public static final ResultMetadataType POSSIBLE_COUNTRY = new ResultMetadataType("POSSIBLE_COUNTRY");
83 private final String name;
85 private ResultMetadataType(String name) {
87 VALUES.put(name, this);
90 public String getName() {
94 public String toString() {
98 public static ResultMetadataType valueOf(String name) {
99 if (name == null || name.length() == 0) {
100 throw new IllegalArgumentException();
102 ResultMetadataType format = (ResultMetadataType) VALUES.get(name);
103 if (format == null) {
104 throw new IllegalArgumentException();