diff options
| author | Daisuke Miyakawa <dmiyakawa@google.com> | 2009-09-10 15:13:57 +0900 |
|---|---|---|
| committer | Daisuke Miyakawa <dmiyakawa@google.com> | 2009-09-10 15:17:24 +0900 |
| commit | f5269c14f94da56d61cf23754cb266cfc74dc520 (patch) | |
| tree | 5fa4ead7c2cf4dc0623da2c52621296dd58f3421 /core/java/android/syncml/pim | |
| parent | 24d237db943051942b5966f5e788d67050ec0ba5 (diff) | |
| download | frameworks_base-f5269c14f94da56d61cf23754cb266cfc74dc520.zip frameworks_base-f5269c14f94da56d61cf23754cb266cfc74dc520.tar.gz frameworks_base-f5269c14f94da56d61cf23754cb266cfc74dc520.tar.bz2 | |
Modify android.syncml.pim so that no one is going to use.
- Remove android.syncml.pim.vcalendar since no one is using it.
-- We have android.pim.ICalendar.java, so handling vCalendar (== ICalendar) is possble without android.syncml.pim
- Mark android.syncml.pim.vcard and related code as obsolete.
-- Refactored version is in android.pim.vcard, which supports new Contacts database schema.
Related issue: 2110530
Diffstat (limited to 'core/java/android/syncml/pim')
24 files changed, 43 insertions, 2224 deletions
diff --git a/core/java/android/syncml/pim/PropertyNode.java b/core/java/android/syncml/pim/PropertyNode.java index 983ecb8..3a5c994 100644 --- a/core/java/android/syncml/pim/PropertyNode.java +++ b/core/java/android/syncml/pim/PropertyNode.java @@ -28,6 +28,7 @@ import java.util.Set; import java.util.Map.Entry; import java.util.regex.Pattern; +@Deprecated public class PropertyNode { public String propName; diff --git a/core/java/android/syncml/pim/VBuilder.java b/core/java/android/syncml/pim/VBuilder.java index 4528645..b6cb674 100644 --- a/core/java/android/syncml/pim/VBuilder.java +++ b/core/java/android/syncml/pim/VBuilder.java @@ -18,6 +18,7 @@ package android.syncml.pim; import java.util.List; +@Deprecated public interface VBuilder { void start(); diff --git a/core/java/android/syncml/pim/VBuilderCollection.java b/core/java/android/syncml/pim/VBuilderCollection.java index f09c1c4..06e3100 100644 --- a/core/java/android/syncml/pim/VBuilderCollection.java +++ b/core/java/android/syncml/pim/VBuilderCollection.java @@ -19,6 +19,7 @@ package android.syncml.pim; import java.util.Collection; import java.util.List; +@Deprecated public class VBuilderCollection implements VBuilder { private final Collection<VBuilder> mVBuilderCollection; diff --git a/core/java/android/syncml/pim/VDataBuilder.java b/core/java/android/syncml/pim/VDataBuilder.java index f6e5b65..db8a299 100644 --- a/core/java/android/syncml/pim/VDataBuilder.java +++ b/core/java/android/syncml/pim/VDataBuilder.java @@ -36,6 +36,7 @@ import java.util.List; * VNode: standy by a vcard instance. * PropertyNode: standy by a property line of a card. */ +@Deprecated public class VDataBuilder implements VBuilder { static private String LOG_TAG = "VDATABuilder"; diff --git a/core/java/android/syncml/pim/VNode.java b/core/java/android/syncml/pim/VNode.java index 9015415..378a9d1 100644 --- a/core/java/android/syncml/pim/VNode.java +++ b/core/java/android/syncml/pim/VNode.java @@ -18,6 +18,7 @@ package android.syncml.pim; import java.util.ArrayList; +@Deprecated public class VNode { public String VName; diff --git a/core/java/android/syncml/pim/VParser.java b/core/java/android/syncml/pim/VParser.java index 57c5f7a..14d2875 100644 --- a/core/java/android/syncml/pim/VParser.java +++ b/core/java/android/syncml/pim/VParser.java @@ -25,6 +25,7 @@ import java.io.UnsupportedEncodingException; * This interface is used to parse the V format files, such as VCard & VCal * */ +@Deprecated abstract public class VParser { // Assume that "iso-8859-1" is able to map "all" 8bit characters to some unicode and // decode the unicode to the original charset. If not, this setting will cause some bug. diff --git a/core/java/android/syncml/pim/vcalendar/CalendarStruct.java b/core/java/android/syncml/pim/vcalendar/CalendarStruct.java deleted file mode 100644 index 3388ada..0000000 --- a/core/java/android/syncml/pim/vcalendar/CalendarStruct.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright (C) 2007 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 android.syncml.pim.vcalendar; - -import java.util.List; -import java.util.ArrayList; - -/** - * Same comment as ContactStruct. - */ -public class CalendarStruct{ - - public static class EventStruct{ - public String description; - public String dtend; - public String dtstart; - public String duration; - public String has_alarm; - public String last_date; - public String rrule; - public String status; - public String title; - public String event_location; - public String uid; - public List<String> reminderList; - - public void addReminderList(String method){ - if(reminderList == null) - reminderList = new ArrayList<String>(); - reminderList.add(method); - } - } - - public String timezone; - public List<EventStruct> eventList; - - public void addEventList(EventStruct stru){ - if(eventList == null) - eventList = new ArrayList<EventStruct>(); - eventList.add(stru); - } -} diff --git a/core/java/android/syncml/pim/vcalendar/VCalComposer.java b/core/java/android/syncml/pim/vcalendar/VCalComposer.java deleted file mode 100644 index 18b6719..0000000 --- a/core/java/android/syncml/pim/vcalendar/VCalComposer.java +++ /dev/null @@ -1,189 +0,0 @@ -/* - * Copyright (C) 2007 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 android.syncml.pim.vcalendar; - -/** - * vCalendar string composer class - */ -public class VCalComposer { - - public final static String VERSION_VCALENDAR10 = "vcalendar1.0"; - public final static String VERSION_VCALENDAR20 = "vcalendar2.0"; - - public final static int VERSION_VCAL10_INT = 1; - public final static int VERSION_VCAL20_INT = 2; - - private static String mNewLine = "\r\n"; - private String mVersion = null; - - public VCalComposer() { - } - - /** - * Create a vCalendar String. - * @param struct see more from CalendarStruct class - * @param vcalversion MUST be VERSION_VCAL10 /VERSION_VCAL20 - * @return vCalendar string - * @throws VcalException if version is invalid or create failed - */ - public String createVCal(CalendarStruct struct, int vcalversion) - throws VCalException{ - - StringBuilder returnStr = new StringBuilder(); - - //Version check - if(vcalversion != 1 && vcalversion != 2) - throw new VCalException("version not match 1.0 or 2.0."); - if (vcalversion == 1) - mVersion = VERSION_VCALENDAR10; - else - mVersion = VERSION_VCALENDAR20; - - //Build vCalendar: - returnStr.append("BEGIN:VCALENDAR").append(mNewLine); - - if(vcalversion == VERSION_VCAL10_INT) - returnStr.append("VERSION:1.0").append(mNewLine); - else - returnStr.append("VERSION:2.0").append(mNewLine); - - returnStr.append("PRODID:vCal ID default").append(mNewLine); - - if(!isNull(struct.timezone)){ - if(vcalversion == VERSION_VCAL10_INT) - returnStr.append("TZ:").append(struct.timezone).append(mNewLine); - else//down here MUST have - returnStr.append("BEGIN:VTIMEZONE").append(mNewLine). - append("TZID:vCal default").append(mNewLine). - append("BEGIN:STANDARD").append(mNewLine). - append("DTSTART:16010101T000000").append(mNewLine). - append("TZOFFSETFROM:").append(struct.timezone).append(mNewLine). - append("TZOFFSETTO:").append(struct.timezone).append(mNewLine). - append("END:STANDARD").append(mNewLine). - append("END:VTIMEZONE").append(mNewLine); - } - //Build VEVNET - for(int i = 0; i < struct.eventList.size(); i++){ - String str = buildEventStr( struct.eventList.get(i) ); - returnStr.append(str); - } - - //Build VTODO - //TODO - - returnStr.append("END:VCALENDAR").append(mNewLine).append(mNewLine); - - return returnStr.toString(); - } - - private String buildEventStr(CalendarStruct.EventStruct stru){ - - StringBuilder strbuf = new StringBuilder(); - - strbuf.append("BEGIN:VEVENT").append(mNewLine); - - if(!isNull(stru.uid)) - strbuf.append("UID:").append(stru.uid).append(mNewLine); - - if(!isNull(stru.description)) - strbuf.append("DESCRIPTION:"). - append(foldingString(stru.description)).append(mNewLine); - - if(!isNull(stru.dtend)) - strbuf.append("DTEND:").append(stru.dtend).append(mNewLine); - - if(!isNull(stru.dtstart)) - strbuf.append("DTSTART:").append(stru.dtstart).append(mNewLine); - - if(!isNull(stru.duration)) - strbuf.append("DUE:").append(stru.duration).append(mNewLine); - - if(!isNull(stru.event_location)) - strbuf.append("LOCATION:").append(stru.event_location).append(mNewLine); - - if(!isNull(stru.last_date)) - strbuf.append("COMPLETED:").append(stru.last_date).append(mNewLine); - - if(!isNull(stru.rrule)) - strbuf.append("RRULE:").append(stru.rrule).append(mNewLine); - - if(!isNull(stru.title)) - strbuf.append("SUMMARY:").append(stru.title).append(mNewLine); - - if(!isNull(stru.status)){ - String stat = "TENTATIVE"; - switch (Integer.parseInt(stru.status)){ - case 0://Calendar.Calendars.STATUS_TENTATIVE - stat = "TENTATIVE"; - break; - case 1://Calendar.Calendars.STATUS_CONFIRMED - stat = "CONFIRMED"; - break; - case 2://Calendar.Calendars.STATUS_CANCELED - stat = "CANCELLED"; - break; - } - strbuf.append("STATUS:").append(stat).append(mNewLine); - } - //Alarm - if(!isNull(stru.has_alarm) - && stru.reminderList != null - && stru.reminderList.size() > 0){ - - if (mVersion.equals(VERSION_VCALENDAR10)){ - String prefix = ""; - for(String method : stru.reminderList){ - switch (Integer.parseInt(method)){ - case 0: - prefix = "DALARM"; - break; - case 1: - prefix = "AALARM"; - break; - case 2: - prefix = "MALARM"; - break; - case 3: - default: - prefix = "DALARM"; - break; - } - strbuf.append(prefix).append(":default").append(mNewLine); - } - }else {//version 2.0 only support audio-method now. - strbuf.append("BEGIN:VALARM").append(mNewLine). - append("ACTION:AUDIO").append(mNewLine). - append("TRIGGER:-PT10M").append(mNewLine). - append("END:VALARM").append(mNewLine); - } - } - strbuf.append("END:VEVENT").append(mNewLine); - return strbuf.toString(); - } - - /** Alter str to folding supported format. */ - private String foldingString(String str){ - return str.replaceAll("\r\n", "\n").replaceAll("\n", "\r\n "); - } - - /** is null */ - private boolean isNull(String str){ - if(str == null || str.trim().equals("")) - return true; - return false; - } -} diff --git a/core/java/android/syncml/pim/vcalendar/VCalException.java b/core/java/android/syncml/pim/vcalendar/VCalException.java deleted file mode 100644 index 48ea134..0000000 --- a/core/java/android/syncml/pim/vcalendar/VCalException.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (C) 2007 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 android.syncml.pim.vcalendar; - -public class VCalException extends java.lang.Exception{ - // constructors - - /** - * Constructs a VCalException object - */ - - public VCalException() - { - } - - /** - * Constructs a VCalException object - * - * @param message the error message - */ - - public VCalException( String message ) - { - super( message ); - } - -} diff --git a/core/java/android/syncml/pim/vcalendar/VCalParser.java b/core/java/android/syncml/pim/vcalendar/VCalParser.java deleted file mode 100644 index bc2d598..0000000 --- a/core/java/android/syncml/pim/vcalendar/VCalParser.java +++ /dev/null @@ -1,116 +0,0 @@ -/* - * Copyright (C) 2007 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 android.syncml.pim.vcalendar; - -import java.io.ByteArrayInputStream; -import java.io.IOException; -import android.util.Config; -import android.util.Log; - -import android.syncml.pim.VDataBuilder; -import android.syncml.pim.VParser; - -public class VCalParser{ - - private final static String TAG = "VCalParser"; - - public final static String VERSION_VCALENDAR10 = "vcalendar1.0"; - public final static String VERSION_VCALENDAR20 = "vcalendar2.0"; - - private VParser mParser = null; - private String mVersion = null; - - public VCalParser() { - } - - public boolean parse(String vcalendarStr, VDataBuilder builder) - throws VCalException { - - vcalendarStr = verifyVCal(vcalendarStr); - try{ - boolean isSuccess = mParser.parse( - new ByteArrayInputStream(vcalendarStr.getBytes()), - "US-ASCII", builder); - - if (!isSuccess) { - if (mVersion.equals(VERSION_VCALENDAR10)) { - if(Config.LOGD) - Log.d(TAG, "Parse failed for vCal 1.0 parser." - + " Try to use 2.0 parser."); - mVersion = VERSION_VCALENDAR20; - return parse(vcalendarStr, builder); - }else - throw new VCalException("parse failed.(even use 2.0 parser)"); - } - }catch (IOException e){ - throw new VCalException(e.getMessage()); - } - return true; - } - - /** - * Verify vCalendar string, and initialize mVersion according to it. - * */ - private String verifyVCal(String vcalStr) { - - //Version check - judgeVersion(vcalStr); - - vcalStr = vcalStr.replaceAll("\r\n", "\n"); - String[] strlist = vcalStr.split("\n"); - - StringBuilder replacedStr = new StringBuilder(); - - for (int i = 0; i < strlist.length; i++) { - if (strlist[i].indexOf(":") < 0) { - if (strlist[i].length() == 0 && strlist[i + 1].indexOf(":") > 0) - replacedStr.append(strlist[i]).append("\r\n"); - else - replacedStr.append(" ").append(strlist[i]).append("\r\n"); - } else - replacedStr.append(strlist[i]).append("\r\n"); - } - if(Config.LOGD)Log.d(TAG, "After verify:\r\n" + replacedStr.toString()); - - return replacedStr.toString(); - } - - /** - * If version not given. Search from vcal string of the VERSION property. - * Then instance mParser to appropriate parser. - */ - private void judgeVersion(String vcalStr) { - - if (mVersion == null) { - int versionIdx = vcalStr.indexOf("\nVERSION:"); - - mVersion = VERSION_VCALENDAR10; - - if (versionIdx != -1){ - String versionStr = vcalStr.substring( - versionIdx, vcalStr.indexOf("\n", versionIdx + 1)); - if (versionStr.indexOf("2.0") > 0) - mVersion = VERSION_VCALENDAR20; - } - } - if (mVersion.equals(VERSION_VCALENDAR10)) - mParser = new VCalParser_V10(); - if (mVersion.equals(VERSION_VCALENDAR20)) - mParser = new VCalParser_V20(); - } -} - diff --git a/core/java/android/syncml/pim/vcalendar/VCalParser_V10.java b/core/java/android/syncml/pim/vcalendar/VCalParser_V10.java deleted file mode 100644 index 1b251f3..0000000 --- a/core/java/android/syncml/pim/vcalendar/VCalParser_V10.java +++ /dev/null @@ -1,1628 +0,0 @@ -/* - * Copyright (C) 2007 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 android.syncml.pim.vcalendar; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.HashSet; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import android.syncml.pim.VParser; - -public class VCalParser_V10 extends VParser { - - /* - * The names of the properties whose value are not separated by ";" - */ - private static final HashSet<String> mEvtPropNameGroup1 = new HashSet<String>( - Arrays.asList("ATTACH", "ATTENDEE", "DCREATED", "COMPLETED", - "DESCRIPTION", "DUE", "DTEND", "EXRULE", "LAST-MODIFIED", - "LOCATION", "RNUM", "PRIORITY", "RELATED-TO", "RRULE", - "SEQUENCE", "DTSTART", "SUMMARY", "TRANSP", "URL", "UID", - // above belong to simprop - "CLASS", "STATUS")); - - /* - * The names of properties whose value are separated by ";" - */ - private static final HashSet<String> mEvtPropNameGroup2 = new HashSet<String>( - Arrays.asList("AALARM", "CATEGORIES", "DALARM", "EXDATE", "MALARM", - "PALARM", "RDATE", "RESOURCES")); - - private static final HashSet<String> mValueCAT = new HashSet<String>(Arrays - .asList("APPOINTMENT", "BUSINESS", "EDUCATION", "HOLIDAY", - "MEETING", "MISCELLANEOUS", "PERSONAL", "PHONE CALL", - "SICK DAY", "SPECIAL OCCASION", "TRAVEL", "VACATION")); - - private static final HashSet<String> mValueCLASS = new HashSet<String>(Arrays - .asList("PUBLIC", "PRIVATE", "CONFIDENTIAL")); - - private static final HashSet<String> mValueRES = new HashSet<String>(Arrays - .asList("CATERING", "CHAIRS", "EASEL", "PROJECTOR", "VCR", - "VEHICLE")); - - private static final HashSet<String> mValueSTAT = new HashSet<String>(Arrays - .asList("ACCEPTED", "NEEDS ACTION", "SENT", "TENTATIVE", - "CONFIRMED", "DECLINED", "COMPLETED", "DELEGATED")); - - /* - * The names of properties whose value can contain escape characters - */ - private static final HashSet<String> mEscAllowedProps = new HashSet<String>( - Arrays.asList("DESCRIPTION", "SUMMARY", "AALARM", "DALARM", - "MALARM", "PALARM")); - - private static final HashMap<String, HashSet<String>> mSpecialValueSetMap = - new HashMap<String, HashSet<String>>(); - - static { - mSpecialValueSetMap.put("CATEGORIES", mValueCAT); - mSpecialValueSetMap.put("CLASS", mValueCLASS); - mSpecialValueSetMap.put("RESOURCES", mValueRES); - mSpecialValueSetMap.put("STATUS", mValueSTAT); - } - - public VCalParser_V10() { - } - - protected int parseVFile(int offset) { - return parseVCalFile(offset); - } - - private int parseVCalFile(int offset) { - int ret = 0, sum = 0; - - /* remove wsls */ - while (PARSE_ERROR != (ret = parseWsls(offset))) { - offset += ret; - sum += ret; - } - - ret = parseVCal(offset); // BEGIN:VCAL ... END:VCAL - if (PARSE_ERROR != ret) { - offset += ret; - sum += ret; - } else { - return PARSE_ERROR; - } - - /* remove wsls */ - while (PARSE_ERROR != (ret = parseWsls(offset))) { - offset += ret; - sum += ret; - } - return sum; - } - - /** - * "BEGIN" [ws] ":" [ws] "VCALENDAR" [ws] 1*crlf calprop calentities [ws] - * *crlf "END" [ws] ":" [ws] "VCALENDAR" [ws] 1*CRLF - */ - private int parseVCal(int offset) { - int ret = 0, sum = 0; - - /* BEGIN */ - ret = parseString(offset, "BEGIN", false); - if (PARSE_ERROR == ret) { - return PARSE_ERROR; - } - offset += ret; - sum += ret; - - // [ws] - ret = removeWs(offset); - offset += ret; - sum += ret; - - // ":" - ret = parseString(offset, ":", false); - if (PARSE_ERROR == ret) { - return PARSE_ERROR; - } - offset += ret; - sum += ret; - - // [ws] - ret = removeWs(offset); - offset += ret; - sum += ret; - - // "VCALENDAR - ret = parseString(offset, "VCALENDAR", false); - if (PARSE_ERROR == ret) { - return PARSE_ERROR; - } - offset += ret; - sum += ret; - if (mBuilder != null) { - mBuilder.startRecord("VCALENDAR"); - } - - /* [ws] */ - ret = removeWs(offset); - offset += ret; - sum += ret; - - // 1*CRLF - ret = parseCrlf(offset); - if (PARSE_ERROR == ret) { - return PARSE_ERROR; - } - offset += ret; - sum += ret; - while (PARSE_ERROR != (ret = parseCrlf(offset))) { - offset += ret; - sum += ret; - } - - // calprop - ret = parseCalprops(offset); - if (PARSE_ERROR == ret) { - return PARSE_ERROR; - } - offset += ret; - sum += ret; - - // calentities - ret = parseCalentities(offset); - if (PARSE_ERROR == ret) { - return PARSE_ERROR; - } - offset += ret; - sum += ret; - - // [ws] - ret = removeWs(offset); - offset += ret; - sum += ret; - - // *CRLF - while (PARSE_ERROR != (ret = parseCrlf(offset))) { - offset += ret; - sum += ret; - } - - // "END" - ret = parseString(offset, "END", false); - if (PARSE_ERROR == ret) { - return PARSE_ERROR; - } - offset += ret; - sum += ret; - - // [ws] - ret = removeWs(offset); - offset += ret; - sum += ret; - - // ":" - // ":" - ret = parseString(offset, ":", false); - if (PARSE_ERROR == ret) { - return PARSE_ERROR; - } - offset += ret; - sum += ret; - - // [ws] - ret = removeWs(offset); - offset += ret; - sum += ret; - - // "VCALENDAR" - ret = parseString(offset, "VCALENDAR", false); - if (PARSE_ERROR == ret) { - return PARSE_ERROR; - } - offset += ret; - sum += ret; - if (mBuilder != null) { - mBuilder.endRecord(); - } - - // [ws] - ret = removeWs(offset); - offset += ret; - sum += ret; - - // 1 * CRLF - ret = parseCrlf(offset); - if (PARSE_ERROR == ret) { - return PARSE_ERROR; - } - offset += ret; - sum += ret; - while (PARSE_ERROR != (ret = parseCrlf(offset))) { - offset += ret; - sum += ret; - } - - return sum; - } - - /** - * calprops * CRLF calprop / calprop - */ - private int parseCalprops(int offset) { - int ret = 0, sum = 0; - - if (mBuilder != null) { - mBuilder.startProperty(); - } - ret = parseCalprop(offset); - if (PARSE_ERROR == ret) { - return PARSE_ERROR; - } - offset += ret; - sum += ret; - if (mBuilder != null) { - mBuilder.endProperty(); - } - - for (;;) { - /* *CRLF */ - while (PARSE_ERROR != (ret = parseCrlf(offset))) { - offset += ret; - sum += ret; - } - // follow VEVENT ,it wont reach endProperty - if (mBuilder != null) { - mBuilder.startProperty(); - } - ret = parseCalprop(offset); - if (PARSE_ERROR == ret) { - break; - } - offset += ret; - sum += ret; - if (mBuilder != null) { - mBuilder.endProperty(); - } - } - - return sum; - } - - /** - * calentities *CRLF calentity / calentity - */ - private int parseCalentities(int offset) { - int ret = 0, sum = 0; - - ret = parseCalentity(offset); - if (PARSE_ERROR == ret) { - return PARSE_ERROR; - } - offset += ret; - sum += ret; - - for (;;) { - /* *CRLF */ - while (PARSE_ERROR != (ret = parseCrlf(offset))) { - offset += ret; - sum += ret; - } - - ret = parseCalentity(offset); - if (PARSE_ERROR == ret) { - break; - } - offset += ret; - sum += ret; - } - - return sum; - } - - /** - * calprop = DAYLIGHT/ GEO/ PRODID/ TZ/ VERSION - */ - private int parseCalprop(int offset) { - int ret = 0; - - ret = parseCalprop0(offset, "DAYLIGHT"); - if (PARSE_ERROR != ret) { - return ret; - } - - ret = parseCalprop0(offset, "GEO"); - if (PARSE_ERROR != ret) { - return ret; - } - - ret = parseCalprop0(offset, "PRODID"); - if (PARSE_ERROR != ret) { - return ret; - } - - ret = parseCalprop0(offset, "TZ"); - if (PARSE_ERROR != ret) { - return ret; - } - - ret = parseCalprop1(offset); - if (PARSE_ERROR != ret) { - return ret; - } - return PARSE_ERROR; - } - - /** - * evententity / todoentity - */ - private int parseCalentity(int offset) { - int ret = 0; - - ret = parseEvententity(offset); - if (PARSE_ERROR != ret) { - return ret; - } - - ret = parseTodoentity(offset); - if (PARSE_ERROR != ret) { - return ret; - } - return PARSE_ERROR; - - } - - /** - * propName [params] ":" value CRLF - */ - private int parseCalprop0(int offset, String propName) { - int ret = 0, sum = 0, start = 0; - - ret = parseString(offset, propName, true); - if (PARSE_ERROR == ret) { - return PARSE_ERROR; - } - offset += ret; - sum += ret; - if (mBuilder != null) { - mBuilder.propertyName(propName); - } - - ret = parseParams(offset); - if (PARSE_ERROR != ret) { - offset += ret; - sum += ret; - } - - ret = parseString(offset, ":", true); - if (PARSE_ERROR == ret) { - return PARSE_ERROR; - } - offset += ret; - sum += ret; - - start = offset; - ret = parseValue(offset); - if (PARSE_ERROR == ret) { - return PARSE_ERROR; - } - offset += ret; - sum += ret; - if (mBuilder != null) { - ArrayList<String> v = new ArrayList<String>(); - v.add(mBuffer.substring(start, offset)); - mBuilder.propertyValues(v); - } - - ret = parseCrlf(offset); - if (PARSE_ERROR == ret) { - return PARSE_ERROR; - } - sum += ret; - - return sum; - } - - /** - * "VERSION" [params] ":" "1.0" CRLF - */ - private int parseCalprop1(int offset) { - int ret = 0, sum = 0; - - ret = parseString(offset, "VERSION", true); - if (PARSE_ERROR == ret) { - return PARSE_ERROR; - } - offset += ret; - sum += ret; - if (mBuilder != null) { - mBuilder.propertyName("VERSION"); - } - - ret = parseParams(offset); - if (PARSE_ERROR != ret) { - offset += ret; - sum += ret; - } - - ret = parseString(offset, ":", true); - if (PARSE_ERROR == ret) { - return PARSE_ERROR; - } - offset += ret; - sum += ret; - - ret = parseString(offset, "1.0", true); - if (PARSE_ERROR == ret) { - return PARSE_ERROR; - } - offset += ret; - sum += ret; - if (mBuilder != null) { - ArrayList<String> v = new ArrayList<String>(); - v.add("1.0"); - mBuilder.propertyValues(v); - } - ret = parseCrlf(offset); - if (PARSE_ERROR == ret) { - return PARSE_ERROR; - } - sum += ret; - - return sum; - } - - /** - * "BEGIN" [ws] ":" [ws] "VEVENT" [ws] 1*CRLF entprops [ws] *CRLF "END" [ws] - * ":" [ws] "VEVENT" [ws] 1*CRLF - */ - private int parseEvententity(int offset) { - int ret = 0, sum = 0; - - ret = parseString(offset, "BEGIN", false); - if (PARSE_ERROR == ret) { - return PARSE_ERROR; - } - offset += ret; - sum += ret; - - // [ws] - ret = removeWs(offset); - offset += ret; - sum += ret; - - // ":" - ret = parseString(offset, ":", false); - if (PARSE_ERROR == ret) { - return PARSE_ERROR; - } - offset += ret; - sum += ret; - - // [ws] - ret = removeWs(offset); - offset += ret; - sum += ret; - - // "VEVNET" - ret = parseString(offset, "VEVENT", false); - if (PARSE_ERROR == ret) { - return PARSE_ERROR; - } - offset += ret; - sum += ret; - if (mBuilder != null) { - mBuilder.startRecord("VEVENT"); - } - - /* [ws] */ - ret = removeWs(offset); - offset += ret; - sum += ret; - - // 1*CRLF - ret = parseCrlf(offset); - if (PARSE_ERROR == ret) { - return PARSE_ERROR; - } - offset += ret; - sum += ret; - while (PARSE_ERROR != (ret = parseCrlf(offset))) { - offset += ret; - sum += ret; - } - - ret = parseEntprops(offset); - if (PARSE_ERROR == ret) { - return PARSE_ERROR; - } - offset += ret; - sum += ret; - - // [ws] - ret = removeWs(offset); - offset += ret; - sum += ret; - - // *CRLF - while (PARSE_ERROR != (ret = parseCrlf(offset))) { - offset += ret; - sum += ret; - } - - // "END" - ret = parseString(offset, "END", false); - if (PARSE_ERROR == ret) { - return PARSE_ERROR; - } - offset += ret; - sum += ret; - - // [ws] - ret = removeWs(offset); - offset += ret; - sum += ret; - - // ":" - ret = parseString(offset, ":", false); - if (PARSE_ERROR == ret) { - return PARSE_ERROR; - } - offset += ret; - sum += ret; - - // [ws] - ret = removeWs(offset); - offset += ret; - sum += ret; - - // "VEVENT" - ret = parseString(offset, "VEVENT", false); - if (PARSE_ERROR == ret) { - return PARSE_ERROR; - } - offset += ret; - sum += ret; - if (mBuilder != null) { - mBuilder.endRecord(); - } - - // [ws] - ret = removeWs(offset); - offset += ret; - sum += ret; - - // 1 * CRLF - ret = parseCrlf(offset); - if (PARSE_ERROR == ret) { - return PARSE_ERROR; - } - offset += ret; - sum += ret; - while (PARSE_ERROR != (ret = parseCrlf(offset))) { - offset += ret; - sum += ret; - } - - return sum; - } - - /** - * "BEGIN" [ws] ":" [ws] "VTODO" [ws] 1*CRLF entprops [ws] *CRLF "END" [ws] - * ":" [ws] "VTODO" [ws] 1*CRLF - */ - private int parseTodoentity(int offset) { - int ret = 0, sum = 0; - - ret = parseString(offset, "BEGIN", false); - if (PARSE_ERROR == ret) { - return PARSE_ERROR; - } - offset += ret; - sum += ret; - - // [ws] - ret = removeWs(offset); - offset += ret; - sum += ret; - - // ":" - ret = parseString(offset, ":", false); - if (PARSE_ERROR == ret) { - return PARSE_ERROR; - } - offset += ret; - sum += ret; - - // [ws] - ret = removeWs(offset); - offset += ret; - sum += ret; - - // "VTODO" - ret = parseString(offset, "VTODO", false); - if (PARSE_ERROR == ret) { - return PARSE_ERROR; - } - offset += ret; - sum += ret; - if (mBuilder != null) { - mBuilder.startRecord("VTODO"); - } - - // 1*CRLF - ret = parseCrlf(offset); - if (PARSE_ERROR == ret) { - return PARSE_ERROR; - } - offset += ret; - sum += ret; - while (PARSE_ERROR != (ret = parseCrlf(offset))) { - offset += ret; - sum += ret; - } - - ret = parseEntprops(offset); - if (PARSE_ERROR == ret) { - return PARSE_ERROR; - } - offset += ret; - sum += ret; - - // [ws] - ret = removeWs(offset); - offset += ret; - sum += ret; - - // *CRLF - while (PARSE_ERROR != (ret = parseCrlf(offset))) { - offset += ret; - sum += ret; - } - - // "END" - ret = parseString(offset, "END", false); - if (PARSE_ERROR == ret) { - return PARSE_ERROR; - } - offset += ret; - sum += ret; - - // [ws] - ret = removeWs(offset); - offset += ret; - sum += ret; - - // ":" - ret = parseString(offset, ":", false); - if (PARSE_ERROR == ret) { - return PARSE_ERROR; - } - offset += ret; - sum += ret; - - // [ws] - ret = removeWs(offset); - offset += ret; - sum += ret; - - // "VTODO" - ret = parseString(offset, "VTODO", false); - if (PARSE_ERROR == ret) { - return PARSE_ERROR; - } - offset += ret; - sum += ret; - if (mBuilder != null) { - mBuilder.endRecord(); - } - - // [ws] - ret = removeWs(offset); - offset += ret; - sum += ret; - - // 1 * CRLF - ret = parseCrlf(offset); - if (PARSE_ERROR == ret) { - return PARSE_ERROR; - } - offset += ret; - sum += ret; - while (PARSE_ERROR != (ret = parseCrlf(offset))) { - offset += ret; - sum += ret; - } - - return sum; - } - - /** - * entprops *CRLF entprop / entprop - */ - private int parseEntprops(int offset) { - int ret = 0, sum = 0; - if (mBuilder != null) { - mBuilder.startProperty(); - } - - ret = parseEntprop(offset); - if (PARSE_ERROR == ret) { - return PARSE_ERROR; - } - offset += ret; - sum += ret; - if (mBuilder != null) { - mBuilder.endProperty(); - } - - for (;;) { - while (PARSE_ERROR != (ret = parseCrlf(offset))) { - offset += ret; - sum += ret; - } - if (mBuilder != null) { - mBuilder.startProperty(); - } - - ret = parseEntprop(offset); - if (PARSE_ERROR == ret) { - break; - } - offset += ret; - sum += ret; - if (mBuilder != null) { - mBuilder.endProperty(); - } - } - return sum; - } - - /** - * for VEVENT,VTODO prop. entprop0 / entprop1 - */ - private int parseEntprop(int offset) { - int ret = 0; - ret = parseEntprop0(offset); - if (PARSE_ERROR != ret) { - return ret; - } - - ret = parseEntprop1(offset); - if (PARSE_ERROR != ret) { - return ret; - } - return PARSE_ERROR; - } - - /** - * Same with card. ";" [ws] paramlist - */ - private int parseParams(int offset) { - int ret = 0, sum = 0; - - ret = parseString(offset, ";", true); - if (PARSE_ERROR == ret) { - return PARSE_ERROR; - } - offset += ret; - sum += ret; - - ret = removeWs(offset); - offset += ret; - sum += ret; - - ret = parseParamlist(offset); - if (PARSE_ERROR == ret) { - return PARSE_ERROR; - } - sum += ret; - - return sum; - } - - /** - * Same with card. paramlist [ws] ";" [ws] param / param - */ - private int parseParamlist(int offset) { - int ret = 0, sum = 0; - - ret = parseParam(offset); - if (PARSE_ERROR == ret) { - return PARSE_ERROR; - } - offset += ret; - sum += ret; - - int offsetTemp = offset; - int sumTemp = sum; - for (;;) { - ret = removeWs(offsetTemp); - offsetTemp += ret; - sumTemp += ret; - - ret = parseString(offsetTemp, ";", false); - if (PARSE_ERROR == ret) { - return sum; - } - offsetTemp += ret; - sumTemp += ret; - - ret = removeWs(offsetTemp); - offsetTemp += ret; - sumTemp += ret; - - ret = parseParam(offsetTemp); - if (PARSE_ERROR == ret) { - break; - } - offsetTemp += ret; - sumTemp += ret; - - // offset = offsetTemp; - sum = sumTemp; - } - return sum; - } - - /** - * param0 - param7 / knowntype - */ - private int parseParam(int offset) { - int ret = 0; - - ret = parseParam0(offset); - if (PARSE_ERROR != ret) { - return ret; - } - - ret = parseParam1(offset); - if (PARSE_ERROR != ret) { - return ret; - } - - ret = parseParam2(offset); - if (PARSE_ERROR != ret) { - return ret; - } - - ret = parseParam3(offset); - if (PARSE_ERROR != ret) { - return ret; - } - - ret = parseParam4(offset); - if (PARSE_ERROR != ret) { - return ret; - } - - ret = parseParam5(offset); - if (PARSE_ERROR != ret) { - return ret; - } - - ret = parseParam6(offset); - if (PARSE_ERROR != ret) { - return ret; - } - - ret = parseParam7(offset); - if (PARSE_ERROR != ret) { - return ret; - } - - int start = offset; - ret = parseKnownType(offset); - if (PARSE_ERROR == ret) { - return PARSE_ERROR; - } - offset += ret; - if (mBuilder != null) { - mBuilder.propertyParamType(null); - mBuilder.propertyParamValue(mBuffer.substring(start, offset)); - } - - return ret; - } - - /** - * simprop AND "CLASS" AND "STATUS" The value of these properties are not - * seperated by ";" - * - * [ws] simprop [params] ":" value CRLF - */ - private int parseEntprop0(int offset) { - int ret = 0, sum = 0, start = 0; - - ret = removeWs(offset); - offset += ret; - sum += ret; - - String propName = getWord(offset).toUpperCase(); - if (!mEvtPropNameGroup1.contains(propName)) { - if (PARSE_ERROR == parseXWord(offset)) - return PARSE_ERROR; - } - ret = propName.length(); - offset += ret; - sum += ret; - if (mBuilder != null) { - mBuilder.propertyName(propName); - } - - ret = parseParams(offset); - if (PARSE_ERROR != ret) { - offset += ret; - sum += ret; - } - - ret = parseString(offset, ":", false); - if (PARSE_ERROR == ret) { - return PARSE_ERROR; - } - offset += ret; - sum += ret; - - start = offset; - ret = parseValue(offset); - if (PARSE_ERROR == ret) { - return PARSE_ERROR; - } - offset += ret; - sum += ret; - if (mBuilder != null) { - ArrayList<String> v = new ArrayList<String>(); - v.add(exportEntpropValue(propName, mBuffer.substring(start, - offset))); - mBuilder.propertyValues(v); - // Filter value,match string, REFER:RFC - if (PARSE_ERROR == valueFilter(propName, v)) - return PARSE_ERROR; - } - - ret = parseCrlf(offset); - if (PARSE_ERROR == ret) { - return PARSE_ERROR; - } - sum += ret; - return sum; - } - - /** - * other event prop names except simprop AND "CLASS" AND "STATUS" The value - * of these properties are seperated by ";" [ws] proper name [params] ":" - * value CRLF - */ - private int parseEntprop1(int offset) { - int ret = 0, sum = 0; - - ret = removeWs(offset); - offset += ret; - sum += ret; - - String propName = getWord(offset).toUpperCase(); - if (!mEvtPropNameGroup2.contains(propName)) { - return PARSE_ERROR; - } - ret = propName.length(); - offset += ret; - sum += ret; - if (mBuilder != null) { - mBuilder.propertyName(propName); - } - - ret = parseParams(offset); - if (PARSE_ERROR != ret) { - offset += ret; - sum += ret; - } - - ret = parseString(offset, ":", false); - if (PARSE_ERROR == ret) { - return PARSE_ERROR; - } - offset += ret; - sum += ret; - - int start = offset; - ret = parseValue(offset); - if (PARSE_ERROR == ret) { - return PARSE_ERROR; - } - offset += ret; - sum += ret; - // mutil-values - if (mBuilder != null) { - int end = 0; - ArrayList<String> v = new ArrayList<String>(); - Pattern p = Pattern - .compile("([^;\\\\]*(\\\\[\\\\;:,])*[^;\\\\]*)(;?)"); - Matcher m = p.matcher(mBuffer.substring(start, offset)); - while (m.find()) { - String s = exportEntpropValue(propName, m.group(1)); - v.add(s); - end = m.end(); - if (offset == start + end) { - String endValue = m.group(3); - if (";".equals(endValue)) { - v.add(""); - } - break; - } - } - mBuilder.propertyValues(v); - // Filter value,match string, REFER:RFC - if (PARSE_ERROR == valueFilter(propName, v)) - return PARSE_ERROR; - } - - ret = parseCrlf(offset); - if (PARSE_ERROR == ret) { - return PARSE_ERROR; - } - sum += ret; - return sum; - } - - /** - * "TYPE" [ws] = [ws] ptypeval - */ - private int parseParam0(int offset) { - int ret = 0, sum = 0, start = offset; - - ret = parseString(offset, "TYPE", true); - if (PARSE_ERROR == ret) { - return PARSE_ERROR; - } - offset += ret; - sum += ret; - if (mBuilder != null) { - mBuilder.propertyParamType(mBuffer.substring(start, offset)); - } - - ret = removeWs(offset); - offset += ret; - sum += ret; - - ret = parseString(offset, "=", false); - if (PARSE_ERROR == ret) { - return PARSE_ERROR; - } - offset += ret; - sum += ret; - - ret = removeWs(offset); - offset += ret; - sum += ret; - - start = offset; - ret = parsePtypeval(offset); - if (PARSE_ERROR == ret) { - return PARSE_ERROR; - } - offset += ret; - sum += ret; - if (mBuilder != null) { - mBuilder.propertyParamValue(mBuffer.substring(start, offset)); - } - return sum; - } - - /** - * ["VALUE" [ws] "=" [ws]] pvalueval - */ - private int parseParam1(int offset) { - int ret = 0, sum = 0, start = offset; - boolean flag = false; - - ret = parseString(offset, "VALUE", true); - if (PARSE_ERROR != ret) { - offset += ret; - sum += ret; - flag = true; - } - if (flag == true && mBuilder != null) { - mBuilder.propertyParamType(mBuffer.substring(start, offset)); - } - - ret = removeWs(offset); - offset += ret; - sum += ret; - - ret = parseString(offset, "=", true); - if (PARSE_ERROR != ret) { - if (flag == false) { // "VALUE" does not exist - return PARSE_ERROR; - } - offset += ret; - sum += ret; - } else { - if (flag == true) { // "VALUE" exists - return PARSE_ERROR; - } - } - - ret = removeWs(offset); - offset += ret; - sum += ret; - - start = offset; - ret = parsePValueVal(offset); - if (PARSE_ERROR == ret) { - return PARSE_ERROR; - } - offset += ret; - sum += ret; - if (mBuilder != null) { - mBuilder.propertyParamValue(mBuffer.substring(start, offset)); - } - - return sum; - } - - /** ["ENCODING" [ws] "=" [ws]] pencodingval */ - private int parseParam2(int offset) { - int ret = 0, sum = 0, start = offset; - boolean flag = false; - - ret = parseString(offset, "ENCODING", true); - if (PARSE_ERROR != ret) { - offset += ret; - sum += ret; - flag = true; - } - if (flag == true && mBuilder != null) { - mBuilder.propertyParamType(mBuffer.substring(start, offset)); - } - - ret = removeWs(offset); - offset += ret; - sum += ret; - - ret = parseString(offset, "=", true); - if (PARSE_ERROR != ret) { - if (flag == false) { // "VALUE" does not exist - return PARSE_ERROR; - } - offset += ret; - sum += ret; - } else { - if (flag == true) { // "VALUE" exists - return PARSE_ERROR; - } - } - - ret = removeWs(offset); - offset += ret; - sum += ret; - - start = offset; - ret = parsePEncodingVal(offset); - if (PARSE_ERROR == ret) { - return PARSE_ERROR; - } - offset += ret; - sum += ret; - if (mBuilder != null) { - mBuilder.propertyParamValue(mBuffer.substring(start, offset)); - } - - return sum; - } - - /** - * "CHARSET" [WS] "=" [WS] charsetval - */ - private int parseParam3(int offset) { - int ret = 0, sum = 0, start = offset; - - ret = parseString(offset, "CHARSET", true); - if (PARSE_ERROR == ret) { - return PARSE_ERROR; - } - offset += ret; - sum += ret; - if (mBuilder != null) { - mBuilder.propertyParamType(mBuffer.substring(start, offset)); - } - - ret = removeWs(offset); - offset += ret; - sum += ret; - - ret = parseString(offset, "=", true); - if (PARSE_ERROR == ret) { - return PARSE_ERROR; - } - offset += ret; - sum += ret; - - ret = removeWs(offset); - offset += ret; - sum += ret; - - start = offset; - ret = parseCharsetVal(offset); - if (PARSE_ERROR == ret) { - return PARSE_ERROR; - } - offset += ret; - sum += ret; - if (mBuilder != null) { - mBuilder.propertyParamValue(mBuffer.substring(start, offset)); - } - - return sum; - } - - /** - * "LANGUAGE" [ws] "=" [ws] langval - */ - private int parseParam4(int offset) { - int ret = 0, sum = 0, start = offset; - - ret = parseString(offset, "LANGUAGE", true); - if (PARSE_ERROR == ret) { - return PARSE_ERROR; - } - offset += ret; - sum += ret; - if (mBuilder != null) { - mBuilder.propertyParamType(mBuffer.substring(start, offset)); - } - - ret = removeWs(offset); - offset += ret; - sum += ret; - - ret = parseString(offset, "=", true); - if (PARSE_ERROR == ret) { - return PARSE_ERROR; - } - offset += ret; - sum += ret; - - ret = removeWs(offset); - offset += ret; - sum += ret; - - start = offset; - ret = parseLangVal(offset); - if (PARSE_ERROR == ret) { - return PARSE_ERROR; - } - offset += ret; - sum += ret; - if (mBuilder != null) { - mBuilder.propertyParamValue(mBuffer.substring(start, offset)); - } - - return sum; - } - - /** - * "ROLE" [ws] "=" [ws] roleval - */ - private int parseParam5(int offset) { - int ret = 0, sum = 0, start = offset; - - ret = parseString(offset, "ROLE", true); - if (PARSE_ERROR == ret) { - return PARSE_ERROR; - } - offset += ret; - sum += ret; - if (mBuilder != null) { - mBuilder.propertyParamType(mBuffer.substring(start, offset)); - } - - ret = removeWs(offset); - offset += ret; - sum += ret; - - ret = parseString(offset, "=", true); - if (PARSE_ERROR == ret) { - return PARSE_ERROR; - } - offset += ret; - sum += ret; - - ret = removeWs(offset); - offset += ret; - sum += ret; - - start = offset; - ret = parseRoleVal(offset); - if (PARSE_ERROR == ret) { - return PARSE_ERROR; - } - offset += ret; - sum += ret; - if (mBuilder != null) { - mBuilder.propertyParamValue(mBuffer.substring(start, offset)); - } - - return sum; - } - - /** - * "STATUS" [ws] = [ws] statuval - */ - private int parseParam6(int offset) { - int ret = 0, sum = 0, start = offset; - - ret = parseString(offset, "STATUS", true); - if (PARSE_ERROR == ret) { - return PARSE_ERROR; - } - offset += ret; - sum += ret; - if (mBuilder != null) { - mBuilder.propertyParamType(mBuffer.substring(start, offset)); - } - - ret = removeWs(offset); - offset += ret; - sum += ret; - - ret = parseString(offset, "=", true); - if (PARSE_ERROR == ret) { - return PARSE_ERROR; - } - offset += ret; - sum += ret; - - ret = removeWs(offset); - offset += ret; - sum += ret; - - start = offset; - ret = parseStatuVal(offset); - if (PARSE_ERROR == ret) { - return PARSE_ERROR; - } - offset += ret; - sum += ret; - if (mBuilder != null) { - mBuilder.propertyParamValue(mBuffer.substring(start, offset)); - } - - return sum; - - } - - /** - * XWord [ws] "=" [ws] word - */ - private int parseParam7(int offset) { - int ret = 0, sum = 0, start = offset; - - ret = parseXWord(offset); - if (PARSE_ERROR == ret) { - return PARSE_ERROR; - } - offset += ret; - sum += ret; - if (mBuilder != null) { - mBuilder.propertyParamType(mBuffer.substring(start, offset)); - } - - ret = removeWs(offset); - offset += ret; - sum += ret; - - ret = parseString(offset, "=", true); - if (PARSE_ERROR == ret) { - return PARSE_ERROR; - } - offset += ret; - sum += ret; - - ret = removeWs(offset); - offset += ret; - sum += ret; - - start = offset; - ret = parseWord(offset); - if (PARSE_ERROR == ret) { - return PARSE_ERROR; - } - offset += ret; - sum += ret; - if (mBuilder != null) { - mBuilder.propertyParamValue(mBuffer.substring(start, offset)); - } - - return sum; - - } - - /* - * "WAVE" / "PCM" / "VCARD" / XWORD - */ - private int parseKnownType(int offset) { - int ret = 0; - - ret = parseString(offset, "WAVE", true); - if (PARSE_ERROR != ret) { - return ret; - } - - ret = parseString(offset, "PCM", true); - if (PARSE_ERROR != ret) { - return ret; - } - - ret = parseString(offset, "VCARD", true); - if (PARSE_ERROR != ret) { - return ret; - } - - ret = parseXWord(offset); - if (PARSE_ERROR != ret) { - return ret; - } - - return PARSE_ERROR; - } - - /* - * knowntype / Xword - */ - private int parsePtypeval(int offset) { - int ret = 0; - - ret = parseKnownType(offset); - if (PARSE_ERROR != ret) { - return ret; - } - - ret = parseXWord(offset); - if (PARSE_ERROR != ret) { - return ret; - } - - return PARSE_ERROR; - } - - /** - * "ATTENDEE" / "ORGANIZER" / "OWNER" / XWORD - */ - private int parseRoleVal(int offset) { - int ret = 0; - - ret = parseString(offset, "ATTENDEE", true); - if (PARSE_ERROR != ret) { - return ret; - } - - ret = parseString(offset, "ORGANIZER", true); - if (PARSE_ERROR != ret) { - return ret; - } - - ret = parseString(offset, "OWNER", true); - if (PARSE_ERROR != ret) { - return ret; - } - - ret = parseXWord(offset); - if (PARSE_ERROR != ret) { - return ret; - } - - return PARSE_ERROR; - } - - /** - * "ACCEPTED" / "NEED ACTION" / "SENT" / "TENTATIVE" / "CONFIRMED" / - * "DECLINED" / "COMPLETED" / "DELEGATED / XWORD - */ - private int parseStatuVal(int offset) { - int ret = 0; - - ret = parseString(offset, "ACCEPTED", true); - if (PARSE_ERROR != ret) { - return ret; - } - - ret = parseString(offset, "NEED ACTION", true); - if (PARSE_ERROR != ret) { - return ret; - } - - ret = parseString(offset, "TENTATIVE", true); - if (PARSE_ERROR != ret) { - return ret; - } - ret = parseString(offset, "CONFIRMED", true); - if (PARSE_ERROR != ret) { - return ret; - } - ret = parseString(offset, "DECLINED", true); - if (PARSE_ERROR != ret) { - return ret; - } - ret = parseString(offset, "COMPLETED", true); - if (PARSE_ERROR != ret) { - return ret; - } - ret = parseString(offset, "DELEGATED", true); - if (PARSE_ERROR != ret) { - return ret; - } - - ret = parseXWord(offset); - if (PARSE_ERROR != ret) { - return ret; - } - - return PARSE_ERROR; - } - - /** - * Check 4 special propName and it's value to match Hash. - * - * @return PARSE_ERROR:value not match. 1:go on,like nothing happen. - */ - private int valueFilter(String propName, ArrayList<String> values) { - if (propName == null || propName.equals("") || values == null - || values.isEmpty()) - return 1; // go on, like nothing happen. - - if (mSpecialValueSetMap.containsKey(propName)) { - for (String value : values) { - if (!mSpecialValueSetMap.get(propName).contains(value)) { - if (!value.startsWith("X-")) - return PARSE_ERROR; - } - } - } - - return 1; - } - - /** - * - * Translate escape characters("\\", "\;") which define in vcalendar1.0 - * spec. But for fault tolerance, we will translate "\:" and "\,", which - * isn't define in vcalendar1.0 explicitly, as the same behavior as other - * client. - * - * Though vcalendar1.0 spec does not defined the value of property - * "description", "summary", "aalarm", "dalarm", "malarm" and "palarm" could - * contain escape characters, we do support escape characters in these - * properties. - * - * @param str: - * the value string will be translated. - * @return the string which do not contain any escape character in - * vcalendar1.0 - */ - private String exportEntpropValue(String propName, String str) { - if (null == propName || null == str) - return null; - if ("".equals(propName) || "".equals(str)) - return ""; - - if (!mEscAllowedProps.contains(propName)) - return str; - - String tmp = str.replace("\\\\", "\n\r\n"); - tmp = tmp.replace("\\;", ";"); - tmp = tmp.replace("\\:", ":"); - tmp = tmp.replace("\\,", ","); - tmp = tmp.replace("\n\r\n", "\\"); - return tmp; - } -} diff --git a/core/java/android/syncml/pim/vcalendar/VCalParser_V20.java b/core/java/android/syncml/pim/vcalendar/VCalParser_V20.java deleted file mode 100644 index 5748379..0000000 --- a/core/java/android/syncml/pim/vcalendar/VCalParser_V20.java +++ /dev/null @@ -1,186 +0,0 @@ -/* - * Copyright (C) 2007 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 android.syncml.pim.vcalendar; - -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.util.Arrays; -import java.util.HashSet; - -import android.syncml.pim.VBuilder; - -public class VCalParser_V20 extends VCalParser_V10 { - private static final String V10LINEBREAKER = "\r\n"; - - private static final HashSet<String> acceptableComponents = new HashSet<String>( - Arrays.asList("VEVENT", "VTODO", "VALARM", "VTIMEZONE")); - - private static final HashSet<String> acceptableV20Props = new HashSet<String>( - Arrays.asList("DESCRIPTION", "DTEND", "DTSTART", "DUE", - "COMPLETED", "RRULE", "STATUS", "SUMMARY", "LOCATION")); - - private boolean hasTZ = false; // MUST only have one TZ property - - private String[] lines; - - private int index; - - @Override - public boolean parse(InputStream is, String encoding, VBuilder builder) - throws IOException { - // get useful info for android calendar, and alter to vcal 1.0 - byte[] bytes = new byte[is.available()]; - is.read(bytes); - String scStr = new String(bytes); - StringBuilder v10str = new StringBuilder(""); - - lines = splitProperty(scStr); - index = 0; - - if ("BEGIN:VCALENDAR".equals(lines[index])) - v10str.append("BEGIN:VCALENDAR" + V10LINEBREAKER); - else - return false; - index++; - if (false == parseV20Calbody(lines, v10str) - || index > lines.length - 1) - return false; - - if (lines.length - 1 == index && "END:VCALENDAR".equals(lines[index])) - v10str.append("END:VCALENDAR" + V10LINEBREAKER); - else - return false; - - return super.parse( - // use vCal 1.0 parser - new ByteArrayInputStream(v10str.toString().getBytes()), - encoding, builder); - } - - /** - * Parse and pick acceptable iCalendar body and translate it to - * calendarV1.0 format. - * @param lines iCalendar components/properties line list. - * @param buffer calendarV10 format string buffer - * @return true for success, or false - */ - private boolean parseV20Calbody(String[] lines, StringBuilder buffer) { - try { - while (!"VERSION:2.0".equals(lines[index])) - index++; - buffer.append("VERSION:1.0" + V10LINEBREAKER); - - index++; - for (; index < lines.length - 1; index++) { - String[] keyAndValue = lines[index].split(":", 2); - String key = keyAndValue[0]; - String value = keyAndValue[1]; - - if ("BEGIN".equals(key.trim())) { - if (!key.equals(key.trim())) - return false; // MUST be "BEGIN:componentname" - index++; - if (false == parseV20Component(value, buffer)) - return false; - } - } - } catch (ArrayIndexOutOfBoundsException e) { - return false; - } - - return true; - } - - /** - * Parse and pick acceptable calendar V2.0's component and translate it to - * V1.0 format. - * @param compName component name - * @param buffer calendarV10 format string buffer - * @return true for success, or false - * @throws ArrayIndexOutOfBoundsException - */ - private boolean parseV20Component(String compName, StringBuilder buffer) - throws ArrayIndexOutOfBoundsException { - String endTag = "END:" + compName; - String[] propAndValue; - String propName, value; - - if (acceptableComponents.contains(compName)) { - if ("VEVENT".equals(compName) || "VTODO".equals(compName)) { - buffer.append("BEGIN:" + compName + V10LINEBREAKER); - while (!endTag.equals(lines[index])) { - propAndValue = lines[index].split(":", 2); - propName = propAndValue[0].split(";", 2)[0]; - value = propAndValue[1]; - - if ("".equals(lines[index])) - buffer.append(V10LINEBREAKER); - else if (acceptableV20Props.contains(propName)) { - buffer.append(propName + ":" + value + V10LINEBREAKER); - } else if ("BEGIN".equals(propName.trim())) { - // MUST be BEGIN:VALARM - if (propName.equals(propName.trim()) - && "VALARM".equals(value)) { - buffer.append("AALARM:default" + V10LINEBREAKER); - while (!"END:VALARM".equals(lines[index])) - index++; - } else - return false; - } - index++; - } // end while - buffer.append(endTag + V10LINEBREAKER); - } else if ("VALARM".equals(compName)) { // VALARM component MUST - // only appear within either VEVENT or VTODO - return false; - } else if ("VTIMEZONE".equals(compName)) { - do { - if (false == hasTZ) {// MUST only have 1 time TZ property - propAndValue = lines[index].split(":", 2); - propName = propAndValue[0].split(";", 2)[0]; - - if ("TZOFFSETFROM".equals(propName)) { - value = propAndValue[1]; - buffer.append("TZ" + ":" + value + V10LINEBREAKER); - hasTZ = true; - } - } - index++; - } while (!endTag.equals(lines[index])); - } else - return false; - } else { - while (!endTag.equals(lines[index])) - index++; - } - - return true; - } - - /** split ever property line to String[], not split folding line. */ - private String[] splitProperty(String scStr) { - /* - * Property splitted by \n, and unfold folding lines by removing - * CRLF+LWSP-char - */ - scStr = scStr.replaceAll("\r\n", "\n").replaceAll("\n ", "") - .replaceAll("\n\t", ""); - String[] strs = scStr.split("\n"); - return strs; - } -} diff --git a/core/java/android/syncml/pim/vcalendar/package.html b/core/java/android/syncml/pim/vcalendar/package.html deleted file mode 100644 index cb4ca46..0000000 --- a/core/java/android/syncml/pim/vcalendar/package.html +++ /dev/null @@ -1,6 +0,0 @@ -<HTML> -<BODY> -Support classes for SyncML. -{@hide} -</BODY> -</HTML>
\ No newline at end of file diff --git a/core/java/android/syncml/pim/vcard/ContactStruct.java b/core/java/android/syncml/pim/vcard/ContactStruct.java index 4b4c394..687c1b4 100644 --- a/core/java/android/syncml/pim/vcard/ContactStruct.java +++ b/core/java/android/syncml/pim/vcard/ContactStruct.java @@ -49,8 +49,11 @@ import java.util.Map.Entry; * This class standy by the person-contact in * Android system, we must use this class instance as parameter to transmit to * VCardComposer so that create vCard string. + * + * @deprecated Please use the new code in android.pim.vcard */ // TODO: rename the class name, next step +@Deprecated public class ContactStruct { private static final String LOG_TAG = "ContactStruct"; diff --git a/core/java/android/syncml/pim/vcard/VCardComposer.java b/core/java/android/syncml/pim/vcard/VCardComposer.java index 192736a..9823015 100644 --- a/core/java/android/syncml/pim/vcard/VCardComposer.java +++ b/core/java/android/syncml/pim/vcard/VCardComposer.java @@ -29,7 +29,10 @@ import android.syncml.pim.vcard.ContactStruct.PhoneData; /** * Compose VCard string + * + * @depricated Please use the code in android.pim.vcard */ +@Deprecated public class VCardComposer { final public static int VERSION_VCARD21_INT = 1; diff --git a/core/java/android/syncml/pim/vcard/VCardDataBuilder.java b/core/java/android/syncml/pim/vcard/VCardDataBuilder.java index f2a2733..5fd8fdf 100644 --- a/core/java/android/syncml/pim/vcard/VCardDataBuilder.java +++ b/core/java/android/syncml/pim/vcard/VCardDataBuilder.java @@ -47,7 +47,10 @@ import java.util.List; * If we store all VNode entries in memory like VDataBuilder.java, * OutOfMemoryError may be thrown. Thus, this class push each VCard entry into * ContentResolver immediately. + * + * @depricated Please use the code in android.pim.vcard */ +@Deprecated public class VCardDataBuilder implements VBuilder { static private String LOG_TAG = "VCardDataBuilder"; diff --git a/core/java/android/syncml/pim/vcard/VCardEntryCounter.java b/core/java/android/syncml/pim/vcard/VCardEntryCounter.java index 03cd1d9..11372ce 100644 --- a/core/java/android/syncml/pim/vcard/VCardEntryCounter.java +++ b/core/java/android/syncml/pim/vcard/VCardEntryCounter.java @@ -20,6 +20,10 @@ import java.util.List; import android.syncml.pim.VBuilder; +/** + * @depricated Please use the code in android.pim.vcard + */ +@Deprecated public class VCardEntryCounter implements VBuilder { private int mCount; diff --git a/core/java/android/syncml/pim/vcard/VCardException.java b/core/java/android/syncml/pim/vcard/VCardException.java index 35b31ec..326aa7f 100644 --- a/core/java/android/syncml/pim/vcard/VCardException.java +++ b/core/java/android/syncml/pim/vcard/VCardException.java @@ -16,6 +16,10 @@ package android.syncml.pim.vcard; +/** + * @depricated Please use the code in android.pim.vcard + */ +@Deprecated public class VCardException extends java.lang.Exception{ // constructors diff --git a/core/java/android/syncml/pim/vcard/VCardNestedException.java b/core/java/android/syncml/pim/vcard/VCardNestedException.java index def6f3b..5c49e40 100644 --- a/core/java/android/syncml/pim/vcard/VCardNestedException.java +++ b/core/java/android/syncml/pim/vcard/VCardNestedException.java @@ -18,7 +18,10 @@ package android.syncml.pim.vcard; /** * VCardException thrown when VCard is nested without VCardParser's being notified. + * + * @depricated Please use the code in android.pim.vcard */ +@Deprecated public class VCardNestedException extends VCardException { public VCardNestedException() {} public VCardNestedException(String message) { diff --git a/core/java/android/syncml/pim/vcard/VCardParser.java b/core/java/android/syncml/pim/vcard/VCardParser.java index 9a590dd..a562973 100644 --- a/core/java/android/syncml/pim/vcard/VCardParser.java +++ b/core/java/android/syncml/pim/vcard/VCardParser.java @@ -23,6 +23,10 @@ import android.util.Log; import java.io.ByteArrayInputStream; import java.io.IOException; +/** + * @deprecated Please use the code in android.pim.vcard + */ +@Deprecated public class VCardParser { // TODO: fix this. diff --git a/core/java/android/syncml/pim/vcard/VCardParser_V21.java b/core/java/android/syncml/pim/vcard/VCardParser_V21.java index d865668..75ce564 100644 --- a/core/java/android/syncml/pim/vcard/VCardParser_V21.java +++ b/core/java/android/syncml/pim/vcard/VCardParser_V21.java @@ -31,7 +31,10 @@ import java.util.HashSet; /** * This class is used to parse vcard. Please refer to vCard Specification 2.1. + * + * @deprecated Please use the code in android.pim.vcard */ +@Deprecated public class VCardParser_V21 { private static final String LOG_TAG = "VCardParser_V21"; diff --git a/core/java/android/syncml/pim/vcard/VCardParser_V30.java b/core/java/android/syncml/pim/vcard/VCardParser_V30.java index e67525e..3aca258 100644 --- a/core/java/android/syncml/pim/vcard/VCardParser_V30.java +++ b/core/java/android/syncml/pim/vcard/VCardParser_V30.java @@ -25,7 +25,10 @@ import java.util.HashSet; /** * This class is used to parse vcard3.0. <br> * Please refer to vCard Specification 3.0 (http://tools.ietf.org/html/rfc2426) + * + * @deprecated Please use the code in android.pim.vcard */ +@Deprecated public class VCardParser_V30 extends VCardParser_V21 { private static final String LOG_TAG = "VCardParser_V30"; diff --git a/core/java/android/syncml/pim/vcard/VCardSourceDetector.java b/core/java/android/syncml/pim/vcard/VCardSourceDetector.java index 8c48391..6873f04 100644 --- a/core/java/android/syncml/pim/vcard/VCardSourceDetector.java +++ b/core/java/android/syncml/pim/vcard/VCardSourceDetector.java @@ -26,8 +26,10 @@ import java.util.Set; /** * Class which tries to detects the source of the vCard from its properties. * Currently this implementation is very premature. - * @hide + * + * @deprecated Please use the code in android.pim.vcard */ +@Deprecated public class VCardSourceDetector implements VBuilder { // Should only be used in package. static final int TYPE_UNKNOWN = 0; diff --git a/core/java/android/syncml/pim/vcard/VCardVersionException.java b/core/java/android/syncml/pim/vcard/VCardVersionException.java index 1ca88d1..14bb45b 100644 --- a/core/java/android/syncml/pim/vcard/VCardVersionException.java +++ b/core/java/android/syncml/pim/vcard/VCardVersionException.java @@ -17,8 +17,11 @@ package android.syncml.pim.vcard; /** - * VCardException used only when the version of the vCard is different. + * VCardException used only when the version of the vCard is different. + * + * @deprecated Please use the code in android.pim.vcard */ +@Deprecated public class VCardVersionException extends VCardException { public VCardVersionException() { } |
