1be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa/*
2be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa * Copyright (C) 2010 The Android Open Source Project
3be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa *
4be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa * Licensed under the Apache License, Version 2.0 (the "License");
5be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa * you may not use this file except in compliance with the License.
6be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa * You may obtain a copy of the License at
7be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa *
8be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa *      http://www.apache.org/licenses/LICENSE-2.0
9be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa *
10be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa * Unless required by applicable law or agreed to in writing, software
11be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa * distributed under the License is distributed on an "AS IS" BASIS,
12be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa * See the License for the specific language governing permissions and
14be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa * limitations under the License.
15be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa */
16be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawapackage com.android.vcard;
17be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa
18be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawaimport com.android.vcard.exception.VCardException;
19be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa
20be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawaimport java.io.IOException;
21be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawaimport java.io.InputStream;
22be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawaimport java.util.Arrays;
23be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawaimport java.util.Collections;
24be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawaimport java.util.HashSet;
25be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawaimport java.util.Set;
26be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa
27be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa/**
28be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa * <p>
29da2f6ef422b360827f2c5231552d8c9fad0ed8b1Daisuke Miyakawa * vCard parser for vCard 4.0. DO NOT USE IN PRODUCTION.
30be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa * </p>
31be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa * <p>
32da2f6ef422b360827f2c5231552d8c9fad0ed8b1Daisuke Miyakawa * Currently this parser is based on vCard 4.0 specification rev 15 (partly).
33da2f6ef422b360827f2c5231552d8c9fad0ed8b1Daisuke Miyakawa * Note that some of current implementation lack basic capability required in vCard 4.0.
34da2f6ef422b360827f2c5231552d8c9fad0ed8b1Daisuke Miyakawa * (e.g. PHOTO has data parameter in rev 15 while this implementation requires "ENCODING=b")
35be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa * </p>
36be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa */
371de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawapublic class VCardParser_V40 extends VCardParser {
38be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa    /* package */ static final Set<String> sKnownPropertyNameSet =
39be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa            Collections.unmodifiableSet(new HashSet<String>(Arrays.asList(
40da2f6ef422b360827f2c5231552d8c9fad0ed8b1Daisuke Miyakawa                    "BEGIN", "END", "VERSION",
41da2f6ef422b360827f2c5231552d8c9fad0ed8b1Daisuke Miyakawa                    "SOURCE", "KIND", "FN", "N", "NICKNAME",
42da2f6ef422b360827f2c5231552d8c9fad0ed8b1Daisuke Miyakawa                    "PHOTO", "BDAY", "ANNIVERSARY", "GENDER", "ADR", "TEL",
43da2f6ef422b360827f2c5231552d8c9fad0ed8b1Daisuke Miyakawa                    "EMAIL", "IMPP", "LANG", "TZ", "GEO", "TITLE", "ROLE",
44da2f6ef422b360827f2c5231552d8c9fad0ed8b1Daisuke Miyakawa                    "LOGO", "ORG", "MEMBER", "RELATED", "CATEGORIES",
45da2f6ef422b360827f2c5231552d8c9fad0ed8b1Daisuke Miyakawa                    "NOTE", "PRODID", "REV", "SOUND", "UID", "CLIENTPIDMAP",
46da2f6ef422b360827f2c5231552d8c9fad0ed8b1Daisuke Miyakawa                    "URL", "KEY", "FBURL", "CALENDRURI", "CALURI", "XML")));
47be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa
48be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa    /**
49be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa     * <p>
50be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa     * A unmodifiable Set storing the values for the type "ENCODING", available in vCard 4.0.
51be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa     * </p>
52be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa     */
53be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa    /* package */ static final Set<String> sAcceptableEncoding =
54be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa            Collections.unmodifiableSet(new HashSet<String>(Arrays.asList(
55be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa                    VCardConstants.PARAM_ENCODING_8BIT,
56be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa                    VCardConstants.PARAM_ENCODING_B)));
57be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa
581de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa    private final VCardParserImpl_V40 mVCardParserImpl;
59be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa
60be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa    public VCardParser_V40() {
61be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa        mVCardParserImpl = new VCardParserImpl_V40();
62be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa    }
63be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa
64be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa    public VCardParser_V40(int vcardType) {
65be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa        mVCardParserImpl = new VCardParserImpl_V40(vcardType);
66be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa    }
67be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa
68be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa    @Override
691de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa    public void addInterpreter(VCardInterpreter interpreter) {
701de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa        mVCardParserImpl.addInterpreter(interpreter);
711de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa    }
721de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa
731de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa    @Override
741de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa    public void parse(InputStream is) throws IOException, VCardException {
751de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa        mVCardParserImpl.parse(is);
76be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa    }
77be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa
78be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa    @Override
7956650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa    public void parseOne(InputStream is) throws IOException, VCardException {
8056650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa        mVCardParserImpl.parseOne(is);
8156650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa    }
8256650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa
8356650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa    @Override
84be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa    public void cancel() {
85be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa        mVCardParserImpl.cancel();
86be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa    }
87be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa}