Standardize and update all copyright statements to name "ZXing authors" as suggested...
[zxing.git] / core / src / com / google / zxing / client / result / optional / MobileTagRichWebParsedResult.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.client.result.optional;
18
19 import com.google.zxing.BarcodeFormat;
20 import com.google.zxing.Result;
21 import com.google.zxing.client.result.ParsedReaderResultType;
22
23 /**
24  * <p>Represents a "rich web" result encoded according to section 5 of the
25  * MobileTag Reader International Specification.</p>
26  *
27  * @author srowen@google.com (Sean Owen)
28  */
29 public final class MobileTagRichWebParsedResult extends AbstractMobileTagParsedResult {
30
31   public static final String SERVICE_TYPE = "54";
32
33   private static final int DEFAULT_ACTION = ACTION_DO;
34   // Example: "http://www.tagserver.com/script.asp?id="
35   private static final String TAGSERVER_URI_PREFIX = System.getProperty("zxing.mobiletag.tagserver");
36
37   private final String id;
38   private final int action;
39
40   private MobileTagRichWebParsedResult(String id, int action) {
41     super(ParsedReaderResultType.MOBILETAG_RICH_WEB);
42     this.id = id;
43     this.action = action;
44   }
45
46   public static MobileTagRichWebParsedResult parse(Result result) {
47     if (TAGSERVER_URI_PREFIX == null) {
48       return null;
49     }
50     if (!result.getBarcodeFormat().equals(BarcodeFormat.DATAMATRIX)) {
51       return null;
52     }
53     String rawText = result.getText();
54     if (!rawText.startsWith(SERVICE_TYPE)) {
55       return null;
56     }
57
58     int length = rawText.length();
59     if (!isDigits(rawText, length)) {
60       return null;
61     }
62     int action;
63     String id;
64     if (length == 15) {
65       action = DEFAULT_ACTION;
66       id = rawText.substring(0, 2) + action + rawText.substring(2);
67     } else if (length == 16) {
68       action = rawText.charAt(2) - '0';
69       id = rawText;
70     } else {
71       return null;
72     }
73
74     return new MobileTagRichWebParsedResult(id, action);
75   }
76
77   public static String getTagserverURIPrefix() {
78     return TAGSERVER_URI_PREFIX;
79   }
80
81   public String getId() {
82     return id;
83   }
84
85   public int getAction() {
86     return action;
87   }
88
89   public String getTagserverURI() {
90     return TAGSERVER_URI_PREFIX + id;
91   }
92
93   public String getDisplayResult() {
94     return id;
95   }
96
97 }