/* * Copyright (C) 2009 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.vcard; import com.android.vcard.exception.VCardException; import java.io.IOException; import java.io.InputStream; public abstract class VCardParser { /** * Registers one {@link VCardInterpreter} instance, which receives events along with * vCard parsing. * * @param interpreter */ public abstract void addInterpreter(VCardInterpreter interpreter); /** *

Parses a whole InputStream as a vCard file and lets registered {@link VCardInterpreter} * instances handle callbacks.

* *

This method reads a whole InputStream. If you just want to parse one vCard entry inside * a vCard file with multiple entries, try {@link #parseOne(InputStream)}.

* * @param is The source to parse. * @throws IOException, VCardException */ public abstract void parse(InputStream is) throws IOException, VCardException; /** *

Parses the first vCard entry in InputStream and lets registered {@link VCardInterpreter} * instances handle callbacks.

* *

This method finishes itself when the first entry ended.

* *

Note that, registered {@link VCardInterpreter} may still see multiple * {@link VCardInterpreter#onEntryStarted()} / {@link VCardInterpreter#onEntryEnded()} calls * even with this method.

* *

This happens when the first entry contains nested vCards, which is allowed in vCard 2.1. * See the following example.

* * * BEGIN:VCARD * N:a * BEGIN:VCARD * N:b * END:VCARD * END:VCARD * * *

With this vCard, registered interpreters will grab two * {@link VCardInterpreter#onEntryStarted()} and {@link VCardInterpreter#onEntryEnded()} * calls. Callers should handle the situation by themselves.

* * @param is The source to parse. * @throws IOException, VCardException */ public abstract void parseOne(InputStream is) throws IOException, VCardException; /** * @deprecated use {@link #addInterpreter(VCardInterpreter)} and * {@link #parse(InputStream)} */ @Deprecated public void parse(InputStream is, VCardInterpreter interpreter) throws IOException, VCardException { addInterpreter(interpreter); parse(is); } /** *

* Cancel parsing vCard. Useful when you want to stop the parse in the other threads. *

*

* Actual cancel is done after parsing the current vcard. *

*/ public abstract void cancel(); }