2 * Copyright 2008 Google Inc.
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.client.result;
19 import com.google.zxing.Result;
21 import java.util.Vector;
24 * Implements KDDI AU's address book format. See
25 * <a href="http://www.au.kddi.com/ezfactory/tec/two_dimensions/index.html">
26 * http://www.au.kddi.com/ezfactory/tec/two_dimensions/index.html</a>.
27 * (Thanks to Yuzo for translating!)
29 * @author srowen@google.com (Sean Owen)
31 public final class AddressBookAUResult extends ParsedReaderResult {
33 private final String[] names;
34 private final String[] phoneNumbers;
35 private final String[] emails;
36 private final String note;
37 private final String address;
39 private AddressBookAUResult(String[] names, String[] phoneNumbers, String[] emails, String note, String address) {
40 super(ParsedReaderResultType.ADDRESSBOOK_AU);
42 this.phoneNumbers = phoneNumbers;
45 this.address = address;
48 public static AddressBookAUResult parse(Result result) {
49 String rawText = result.getText();
50 // MEMORY is mandatory; seems like a decent indicator, as does end-of-record separator CR/LF
51 if (rawText.indexOf("MEMORY") < 0 || rawText.indexOf("\r\n") < 0) {
54 String[] names = matchMultipleValuePrefix("NAME", 2, rawText);
55 String[] phoneNumbers = matchMultipleValuePrefix("TEL", 3, rawText);
56 String[] emails = matchMultipleValuePrefix("MAIL", 3, rawText);
57 String note = AbstractDoCoMoResult.matchSinglePrefixedField("MEMORY", rawText, '\r');
58 String address = AbstractDoCoMoResult.matchSinglePrefixedField("ADD", rawText, '\r');
59 return new AddressBookAUResult(names, phoneNumbers, emails, note, address);
62 private static String[] matchMultipleValuePrefix(String prefix, int max, String rawText) {
64 for (int i = 1; i <= max; i++) {
65 String value = AbstractDoCoMoResult.matchSinglePrefixedField(prefix + i, rawText, '\r');
70 values = new Vector(max); // lazy init
72 values.addElement(value);
77 String[] result = new String[values.size()];
78 for (int i = 0; i < result.length; i++) {
79 result[i] = (String) values.elementAt(i);
84 public String[] getNames() {
88 public String[] getPhoneNumbers() {
92 public String[] getEmails() {
96 public String getNote() {
100 public String getAddress() {
104 public String getDisplayResult() {
105 StringBuffer result = new StringBuffer();
106 AbstractDoCoMoResult.maybeAppend(names, result);
107 AbstractDoCoMoResult.maybeAppend(emails, result);
108 AbstractDoCoMoResult.maybeAppend(address, result);
109 AbstractDoCoMoResult.maybeAppend(phoneNumbers, result);
110 AbstractDoCoMoResult.maybeAppend(note, result);
111 return result.toString();