package com.taoswork.tallybook.general.calendar;

/**
 * Created by Gao Yuan on 2015/8/27.
 */
public class Root {
    /**
     * A. 事件类型,如：
     * 1) 工作计划通知事件
     * 2) 工作单通知事件
     * 3) (待扩充...)
     *
     * B. 事件的时间属性：
     * 1) 事件有起始时间，结束时间 （内部应考虑UTC时间, 而在用户使用的时候应应用为本地时间）
     * 2) 事件也可以为全天时间 （这种情况下，在不同时区的用户会在不同时刻得到事件通知，因为全天时间时区敏感）
     *
     * C. 事件的周期属性：
     * 1) 单次事件，定义在特定日期
     * 2) 循环事件，定义循环规则：
     *      参考iphone日历计划，有如下情形：
     *          1. 简单类型：每天，每周，每两周，每月，每年
     *          2. 复杂类型：【以下，单复选用括号表示。(1)表示单选；（1+）表示复选，且至少选择一项】
     *              2.1. 频率："天"; 选取(1)周期为："1,2,3, ... 999"天
     *              2.2. 频率："周"; 每"1,2,3, ... 99"周为周期，选取（1+）其中的"周一，周二，周三 ... 周日"
     *              2.3. 频率："月"; 每"1,2,3, ... 99"月为一周期，
     *                  2.3.1. 选取(1+)该月的"1,2,3 ... 31"日
     *                  2.3.2. 选取(1)该月的最后第"1,2,3 ... 7"个自然日
     *                  2.3.3. 选取(1)该月的第"1,2,3 ... 7"个工作日（注：工作日，见下）
     *                  2.3.4. 选取(1)该月的最后第"1,2,3 ... 7"个工作日
     *                  2.3.5. 在该月的第"1,2,3,4,5,(最后)"周中，选取(1)"周一，周二，周三 ... 周日，（第一个工作日），（最后一个工作日），（第一个非工作日），（最后一个非工作日）"
     *              2.4. 频率："年"；每"1,2,3 ... 10"年为一周期，
     *                  2.4.1. 选取(1)该年的某月某日
     *                  2.4.2. 在该年的某月的第"1,2,3,4,5,(最后)"周中，选取(1)"周一，周二，周三 ... 周日，（第一个工作日），（最后一个工作日），（第一个非工作日），（最后一个非工作日）"
     *
     * D. 事件通知
     * 1) 在事件发生之前，可以对用户进行提前提醒通知（提醒次数为0-2次），单位为天
     * 2) 针对不同的事件类型(见A.)，允许设置默认的提醒时间
     * 3) 指定某个事件，可单独对其设置提醒时间
     *
     * E. 事件浏览
     * 1). 指定一日，能列出接下来若干天的事件列表（注，周期事件若在此时间段内有重复，需重复列出）
     *
     *
     * 注：
     * 工作日：（接口为 com.taoswork.tallybook.general.calendar.day.IWorkingDay）
     * 工作日应该是一个可配置的定义，对各公司应允许有不同的设置
     * 每周自然日有7天，工作日可以为其中任意几天
     *
     * 一些可能有用的链接
     * https://tools.ietf.org/html/rfc5545
     * https://tools.ietf.org/html/rfc2445
     * https://code.google.com/p/google-rfc-2445/
     * http://www.joda.org/joda-time/
     * https://en.wikipedia.org/wiki/ICalendar
     * https://github.com/ical4j
     * http://martinfowler.com/apsupp/recurring.pdf
     * http://www.ibm.com/developerworks/cn/java/j-lo-ical4j/
     */
    private Root(){
        throw new IllegalStateException("You are not expected being here");
    }
}

@@ -116,16 +116,101 @@
     /**%0A
+     * %E5%AE%9E%E7%8E%B0%E4%B8%80%E4%B8%AA%E5%9F%BA%E4%BA%8E%E6%97%A5%E5%8E%86%E7%9A%84%E4%BA%8B%E4%BB%B6%E9%80%9A%E7%9F%A5%E5%8A%9F%E8%83%BD%EF%BC%8C%0A     * %E4%BD%BF%E5%BE%97%E7%94%A8%E6%88%B7%E5%8F%AF%E4%BB%A5%E9%80%9A%E8%BF%87%E6%B7%BB%E5%8A%A0%E4%BA%8B%E4%BB%B6%E5%88%B0%E6%97%A5%E5%8E%86%EF%BC%8C%E7%84%B6%E5%90%8E%E5%9C%A8%E9%80%82%E5%BD%93%E7%9A%84%E6%97%B6%E5%80%99%E8%8E%B7%E5%BE%97%E9%80%9A%E7%9F%A5%EF%BC%8C%E5%BD%93%E7%94%A8%E6%88%B7%E6%8A%8A%E4%BA%8B%E4%BB%B6%E6%A0%87%E8%AE%B0%E4%B8%BA%E5%AE%8C%E6%88%90%E5%90%8E%E4%B8%8D%E5%86%8D%E9%80%9A%E7%9F%A5%0A     * %0A
      * A

Add comment