⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vcalparser_v20.java

📁 goolge phone 目前没有开放的android 平台的源码
💻 JAVA
字号:
// Decompiled by Jad v1.5.8e2. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://kpdus.tripod.com/jad.html
// Decompiler options: packimports(3) 
// Source File Name:   VCalParser_V20.java

package android.syncml.pim.vcalendar;

import android.syncml.pim.VBuilder;
import java.io.*;
import java.util.Arrays;
import java.util.HashSet;

// Referenced classes of package android.syncml.pim.vcalendar:
//            VCalParser

public class VCalParser_V20 extends VCalParser
{

    public VCalParser_V20()
    {
        hasTZ = false;
    }

    public boolean parse(InputStream is, String encoding, VBuilder builder)
        throws IOException
    {
        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\r\n");
        else
            return false;
        index++;
        if(!parseV20Calbody(lines, v10str) || index > lines.length - 1)
            return false;
        if(lines.length - 1 == index && "END:VCALENDAR".equals(lines[index]))
            v10str.append("END:VCALENDAR\r\n");
        else
            return false;
        return super.parse(new ByteArrayInputStream(v10str.toString().getBytes()), encoding, builder);
    }

    private boolean parseV20Calbody(String lines[], StringBuilder buffer)
    {
        for(; !"VERSION:2.0".equals(lines[index]); index++);
        buffer.append("VERSION:1.0\r\n");
        index++;
_L1:
        String key;
        String value;
        if(index >= lines.length - 1)
            break MISSING_BLOCK_LABEL_148;
        String keyAndValue[] = lines[index].split(":", 2);
        key = keyAndValue[0];
        value = keyAndValue[1];
        if(!"BEGIN".equals(key.trim()))
            break MISSING_BLOCK_LABEL_129;
        if(!key.equals(key.trim()))
            return false;
        index++;
        if(!parseV20Component(value, buffer))
            return false;
        try
        {
            index++;
        }
        catch(ArrayIndexOutOfBoundsException e)
        {
            return false;
        }
          goto _L1
        return true;
    }

    private boolean parseV20Component(String compName, StringBuilder buffer)
        throws ArrayIndexOutOfBoundsException
    {
        String endTag = (new StringBuilder()).append("END:").append(compName).toString();
        if(acceptableComponents.contains(compName))
        {
            if("VEVENT".equals(compName) || "VTODO".equals(compName))
            {
                buffer.append((new StringBuilder()).append("BEGIN:").append(compName).append("\r\n").toString());
                for(; !endTag.equals(lines[index]); index++)
                {
                    String propAndValue[] = lines[index].split(":", 2);
                    String propName = propAndValue[0].split(";", 2)[0];
                    String value = propAndValue[1];
                    if("".equals(lines[index]))
                    {
                        buffer.append("\r\n");
                        continue;
                    }
                    if(acceptableV20Props.contains(propName))
                    {
                        buffer.append((new StringBuilder()).append(propName).append(":").append(value).append("\r\n").toString());
                        continue;
                    }
                    if(!"BEGIN".equals(propName.trim()))
                        continue;
                    if(propName.equals(propName.trim()) && "VALARM".equals(value))
                    {
                        buffer.append("AALARM:default\r\n");
                        for(; !"END:VALARM".equals(lines[index]); index++);
                    } else
                    {
                        return false;
                    }
                }

                buffer.append((new StringBuilder()).append(endTag).append("\r\n").toString());
            } else
            {
                if("VALARM".equals(compName))
                    return false;
                if("VTIMEZONE".equals(compName))
                    do
                    {
                        if(!hasTZ)
                        {
                            String propAndValue[] = lines[index].split(":", 2);
                            String propName = propAndValue[0].split(";", 2)[0];
                            if("TZOFFSETFROM".equals(propName))
                            {
                                String value = propAndValue[1];
                                buffer.append((new StringBuilder()).append("TZ:").append(value).append("\r\n").toString());
                                hasTZ = true;
                            }
                        }
                        index++;
                    } while(!endTag.equals(lines[index]));
                else
                    return false;
            }
        } else
        {
            for(; !endTag.equals(lines[index]); index++);
        }
        return true;
    }

    private String[] splitProperty(String scStr)
    {
        scStr = scStr.replaceAll("\r\n", "\n").replaceAll("\n ", "").replaceAll("\n\t", "");
        String strs[] = scStr.split("\n");
        return strs;
    }

    private static final String V10LINEBREAKER = "\r\n";
    private static final HashSet acceptableComponents = new HashSet(Arrays.asList(new String[] {
        "VEVENT", "VTODO", "VALARM", "VTIMEZONE"
    }));
    private static final HashSet acceptableV20Props = new HashSet(Arrays.asList(new String[] {
        "DESCRIPTION", "DTEND", "DTSTART", "DUE", "COMPLETED", "RRULE", "STATUS", "SUMMARY", "LOCATION"
    }));
    private boolean hasTZ;
    private String lines[];
    private int index;

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -