• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2007 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.EnumMap;
20 import java.util.Map;
21 
22 /**
23  * <p>Encapsulates the result of decoding a barcode within an image.</p>
24  *
25  * @author Sean Owen
26  */
27 public final class Result {
28 
29   private final String text;
30   private final byte[] rawBytes;
31   private final int numBits;
32   private ResultPoint[] resultPoints;
33   private final BarcodeFormat format;
34   private Map<ResultMetadataType,Object> resultMetadata;
35   private final long timestamp;
36 
Result(String text, byte[] rawBytes, ResultPoint[] resultPoints, BarcodeFormat format)37   public Result(String text,
38                 byte[] rawBytes,
39                 ResultPoint[] resultPoints,
40                 BarcodeFormat format) {
41     this(text, rawBytes, resultPoints, format, System.currentTimeMillis());
42   }
43 
Result(String text, byte[] rawBytes, ResultPoint[] resultPoints, BarcodeFormat format, long timestamp)44   public Result(String text,
45                 byte[] rawBytes,
46                 ResultPoint[] resultPoints,
47                 BarcodeFormat format,
48                 long timestamp) {
49     this(text, rawBytes, rawBytes == null ? 0 : 8 * rawBytes.length,
50          resultPoints, format, timestamp);
51   }
52 
Result(String text, byte[] rawBytes, int numBits, ResultPoint[] resultPoints, BarcodeFormat format, long timestamp)53   public Result(String text,
54                 byte[] rawBytes,
55                 int numBits,
56                 ResultPoint[] resultPoints,
57                 BarcodeFormat format,
58                 long timestamp) {
59     this.text = text;
60     this.rawBytes = rawBytes;
61     this.numBits = numBits;
62     this.resultPoints = resultPoints;
63     this.format = format;
64     this.resultMetadata = null;
65     this.timestamp = timestamp;
66   }
67 
68   /**
69    * @return raw text encoded by the barcode
70    */
getText()71   public String getText() {
72     return text;
73   }
74 
75   /**
76    * @return raw bytes encoded by the barcode, if applicable, otherwise {@code null}
77    */
getRawBytes()78   public byte[] getRawBytes() {
79     return rawBytes;
80   }
81 
82   /**
83    * @return how many bits of {@link #getRawBytes()} are valid; typically 8 times its length
84    * @since 3.3.0
85    */
getNumBits()86   public int getNumBits() {
87     return numBits;
88   }
89 
90   /**
91    * @return points related to the barcode in the image. These are typically points
92    *         identifying finder patterns or the corners of the barcode. The exact meaning is
93    *         specific to the type of barcode that was decoded.
94    */
getResultPoints()95   public ResultPoint[] getResultPoints() {
96     return resultPoints;
97   }
98 
99   /**
100    * @return {@link BarcodeFormat} representing the format of the barcode that was decoded
101    */
getBarcodeFormat()102   public BarcodeFormat getBarcodeFormat() {
103     return format;
104   }
105 
106   /**
107    * @return {@link Map} mapping {@link ResultMetadataType} keys to values. May be
108    *   {@code null}. This contains optional metadata about what was detected about the barcode,
109    *   like orientation.
110    */
getResultMetadata()111   public Map<ResultMetadataType,Object> getResultMetadata() {
112     return resultMetadata;
113   }
114 
putMetadata(ResultMetadataType type, Object value)115   public void putMetadata(ResultMetadataType type, Object value) {
116     if (resultMetadata == null) {
117       resultMetadata = new EnumMap<>(ResultMetadataType.class);
118     }
119     resultMetadata.put(type, value);
120   }
121 
putAllMetadata(Map<ResultMetadataType,Object> metadata)122   public void putAllMetadata(Map<ResultMetadataType,Object> metadata) {
123     if (metadata != null) {
124       if (resultMetadata == null) {
125         resultMetadata = metadata;
126       } else {
127         resultMetadata.putAll(metadata);
128       }
129     }
130   }
131 
addResultPoints(ResultPoint[] newPoints)132   public void addResultPoints(ResultPoint[] newPoints) {
133     ResultPoint[] oldPoints = resultPoints;
134     if (oldPoints == null) {
135       resultPoints = newPoints;
136     } else if (newPoints != null && newPoints.length > 0) {
137       ResultPoint[] allPoints = new ResultPoint[oldPoints.length + newPoints.length];
138       System.arraycopy(oldPoints, 0, allPoints, 0, oldPoints.length);
139       System.arraycopy(newPoints, 0, allPoints, oldPoints.length, newPoints.length);
140       resultPoints = allPoints;
141     }
142   }
143 
getTimestamp()144   public long getTimestamp() {
145     return timestamp;
146   }
147 
148   @Override
toString()149   public String toString() {
150     return text;
151   }
152 
153 }
154