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

📄 recurrencerule.java

📁 Sequoia ERP是一个真正的企业级开源ERP解决方案。它提供的模块包括:电子商务应用(e-commerce), POS系统(point of sales),知识管理,存货与仓库管理
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
        while (nextStartTime < fromTime) {            // if (Debug.verboseOn()) Debug.logVerbose("[RecurrenceInfo.getNextFreq] : Updating time - " + getFrequency(), module);            switch (getFrequency()) {            case SECONDLY:                cal.add(Calendar.SECOND, getIntervalInt());                break;            case MINUTELY:                cal.add(Calendar.MINUTE, getIntervalInt());                break;            case HOURLY:                cal.add(Calendar.HOUR, getIntervalInt());                break;            case DAILY:                cal.add(Calendar.DAY_OF_MONTH, getIntervalInt());                break;            case WEEKLY:                cal.add(Calendar.WEEK_OF_YEAR, getIntervalInt());                break;            case MONTHLY:                cal.add(Calendar.MONTH, getIntervalInt());                break;            case YEARLY:                cal.add(Calendar.YEAR, getIntervalInt());                break;            default:                return null; // should never happen            }            nextStartTime = cal.getTime().getTime();        }        return new Date(nextStartTime);    }    // Checks to see if a date is valid by the byXXX rules    private boolean validByRule(Date date) {        // Build a Calendar object        Calendar cal = Calendar.getInstance();        cal.setTime(date);        // Test each byXXX rule.        if (bySecondList != null && bySecondList.size() > 0) {            if (!bySecondList.contains(new Integer(cal.get(Calendar.SECOND))))                return false;        }        if (byMinuteList != null && byMinuteList.size() > 0) {            if (!byMinuteList.contains(new Integer(cal.get(Calendar.MINUTE))))                return false;        }        if (byHourList != null && byHourList.size() > 0) {            if (!byHourList.contains(new Integer(cal.get(Calendar.HOUR))))                return false;        }        if (byDayList != null && byDayList.size() > 0) {            Iterator iter = byDayList.iterator();            boolean foundDay = false;            while (iter.hasNext() && !foundDay) {                String dayRule = (String) iter.next();                String dayString = getDailyString(dayRule);                if (Calendar.DAY_OF_WEEK == getCalendarDay(dayString)) {                    if ((hasNumber(dayRule)) && (getFrequency() == MONTHLY || getFrequency() == YEARLY)) {                        int modifier = getDailyNumber(dayRule);                        if (modifier == 0)                            foundDay = true;                        if (getFrequency() == MONTHLY) {                            // figure if we are the nth xDAY if this month                            int currentPos = cal.get(Calendar.WEEK_OF_MONTH);                            int dayPosCalc = cal.get(Calendar.DAY_OF_MONTH) - ((currentPos - 1) * 7);                            if (dayPosCalc < 1)                                currentPos--;                            if (modifier > 0) {                                if (currentPos == modifier) {                                    foundDay = true;                                }                            } else if (modifier < 0) {                                int maxDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH);                                int firstDay = dayPosCalc > 0 ? dayPosCalc : dayPosCalc + 7;                                int totalDay = ((maxDay - firstDay) / 7) + 1;                                int thisDiff = (currentPos - totalDay) - 1;                                if (thisDiff == modifier) {                                    foundDay = true;                                }                            }                        } else if (getFrequency() == YEARLY) {                            // figure if we are the nth xDAY if this year                            int currentPos = cal.get(Calendar.WEEK_OF_YEAR);                            int dayPosCalc = cal.get(Calendar.DAY_OF_YEAR) - ((currentPos - 1) * 7);                            if (dayPosCalc < 1) {                                currentPos--;                            }                            if (modifier > 0) {                                if (currentPos == modifier) {                                    foundDay = true;                                }                            } else if (modifier < 0) {                                int maxDay = cal.getActualMaximum(Calendar.DAY_OF_YEAR);                                int firstDay = dayPosCalc > 0 ? dayPosCalc : dayPosCalc + 7;                                int totalDay = ((maxDay - firstDay) / 7) + 1;                                int thisDiff = (currentPos - totalDay) - 1;                                if (thisDiff == modifier) {                                    foundDay = true;                                }                            }                        }                    } else {                        // we are a DOW only rule                        foundDay = true;                    }                }            }            if (!foundDay) {                return false;            }        }        if (byMonthDayList != null && byMonthDayList.size() > 0) {            Iterator iter = byMonthDayList.iterator();            boolean foundDay = false;            while (iter.hasNext() && !foundDay) {                int day = 0;                String dayStr = (String) iter.next();                try {                    day = Integer.parseInt(dayStr);                } catch (NumberFormatException nfe) {                    Debug.logError(nfe, "Error parsing day string " + dayStr + ": " + nfe.toString(), module);                }                int maxDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH);                int currentDay = cal.get(Calendar.DAY_OF_MONTH);                if (day > 0 && day == currentDay) {                    foundDay = true;                }                if (day < 0 && day == ((currentDay - maxDay) - 1)) {                    foundDay = true;                }            }            if (!foundDay) {                return false;            }        }        if (byYearDayList != null && byYearDayList.size() > 0) {            Iterator iter = byYearDayList.iterator();            boolean foundDay = false;            while (iter.hasNext() && !foundDay) {                int day = 0;                String dayStr = (String) iter.next();                try {                    day = Integer.parseInt(dayStr);                } catch (NumberFormatException nfe) {                    Debug.logError(nfe, "Error parsing day string " + dayStr + ": " + nfe.toString(), module);                }                int maxDay = cal.getActualMaximum(Calendar.DAY_OF_YEAR);                int currentDay = cal.get(Calendar.DAY_OF_YEAR);                if (day > 0 && day == currentDay)                    foundDay = true;                if (day < 0 && day == ((currentDay - maxDay) - 1))                    foundDay = true;            }            if (!foundDay)                return false;        }        if (byWeekNoList != null && byWeekNoList.size() > 0) {            Iterator iter = byWeekNoList.iterator();            boolean foundWeek = false;            while (iter.hasNext() && !foundWeek) {                int week = 0;                String weekStr = (String) iter.next();                try {                    week = Integer.parseInt(weekStr);                } catch (NumberFormatException nfe) {                    Debug.logError(nfe, "Error parsing week string " + weekStr + ": " + nfe.toString(), module);                }                int maxWeek = cal.getActualMaximum(Calendar.WEEK_OF_YEAR);                int currentWeek = cal.get(Calendar.WEEK_OF_YEAR);                if (week > 0 && week == currentWeek)                    foundWeek = true;                if (week < 0 && week == ((currentWeek - maxWeek) - 1))                    foundWeek = true;            }            if (!foundWeek)                return false;        }        if (byMonthList != null && byMonthList.size() > 0) {            Iterator iter = byMonthList.iterator();            boolean foundMonth = false;            while (iter.hasNext() && !foundMonth) {                int month = 0;                String monthStr = (String) iter.next();                try {                    month = Integer.parseInt(monthStr);                } catch (NumberFormatException nfe) {                    Debug.logError(nfe, "Error parsing month string " + monthStr + ": " + nfe.toString(), module);                }                if (month == cal.get(Calendar.MONTH)) {                    foundMonth = true;                }            }            if (!foundMonth)                return false;        }        return true;    }    // Tests a string for the contents of a number at the beginning    private boolean hasNumber(String str) {        String list[] = {"+", "-", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0"};        List numberList = Arrays.asList(list);        String firstChar = str.substring(0, 0);        if (numberList.contains(firstChar))            return true;        return false;    }    // Gets the numeric value of the number at the beginning of the string    private int getDailyNumber(String str) {        int number = 0;        StringBuffer numberBuf = new StringBuffer();        for (int i = 0; i < str.length(); i++) {            String thisChar = str.substring(i, i);            if (hasNumber(thisChar))                numberBuf.append(thisChar);        }        String numberStr = numberBuf.toString();        if (numberStr.length() > 0 && (numberStr.length() > 1 ||                (numberStr.charAt(0) != '+' && numberStr.charAt(0) != '-'))) {            try {                number = Integer.parseInt(numberStr);            } catch (NumberFormatException nfe) {                Debug.logError(nfe, "Error parsing daily number string " + numberStr + ": " + nfe.toString(), module);            }        }        return number;    }    // Gets the string part of the combined number+string    private String getDailyString(String str) {        StringBuffer sBuf = new StringBuffer();        for (int i = 0; i < str.length(); i++) {            String thisChar = str.substring(i, i);            if (!hasNumber(thisChar)) {                sBuf.append(thisChar);            }        }        return sBuf.toString();    }    // Returns the Calendar day of the rule day string    private int getCalendarDay(String day) {        if (day.equalsIgnoreCase("MO"))            return Calendar.MONDAY;        if (day.equalsIgnoreCase("TU"))            return Calendar.TUESDAY;        if (day.equalsIgnoreCase("WE"))            return Calendar.WEDNESDAY;        if (day.equalsIgnoreCase("TH"))            return Calendar.THURSDAY;        if (day.equalsIgnoreCase("FR"))            return Calendar.FRIDAY;        if (day.equalsIgnoreCase("SA"))            return Calendar.SATURDAY;        if (day.equalsIgnoreCase("SU"))            return Calendar.SUNDAY;        return 0;    }    public String primaryKey() {        return rule.getString("recurrenceRuleId");    }    public static RecurrenceRule makeRule(GenericDelegator delegator, int frequency, int interval, int count)            throws RecurrenceRuleException {        return makeRule(delegator, frequency, interval, count, 0);    }    public static RecurrenceRule makeRule(GenericDelegator delegator, int frequency, int interval, long endTime)            throws RecurrenceRuleException {        return makeRule(delegator, frequency, interval, -1, endTime);    }            public static RecurrenceRule makeRule(GenericDelegator delegator, int frequency, int interval, int count, long endTime)            throws RecurrenceRuleException {        String freq[] = {"", "SECONDLY", "MINUTELY", "HOURLY", "DAILY", "WEEKLY", "MONTHLY", "YEARLY"};        if (frequency < 1 || frequency > 7)            throw new RecurrenceRuleException("Invalid frequency");        if (interval < 0)            throw new RecurrenceRuleException("Invalid interval");               String freqStr = freq[frequency];        try {            String ruleId = delegator.getNextSeqId("RecurrenceRule").toString();            GenericValue value = delegator.makeValue("RecurrenceRule", UtilMisc.toMap("recurrenceRuleId", ruleId));            value.set("frequency", freqStr);            value.set("intervalNumber", new Long(interval));            value.set("countNumber", new Long(count));            if (endTime > 0) {                value.set("untilDateTime", new java.sql.Timestamp(endTime));            }            delegator.create(value);            RecurrenceRule newRule = new RecurrenceRule(value);            return newRule;        } catch (GenericEntityException ee) {            throw new RecurrenceRuleException(ee.getMessage(), ee);        } catch (RecurrenceRuleException re) {            throw re;        }    }}

⌨️ 快捷键说明

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