Search in sources :

Example 11 with CalFacadeException

use of org.bedework.calfacade.exc.CalFacadeException in project bw-calendar-engine by Bedework.

the class BwXproperty method parseParameter.

/* ====================================================================
   *                        Private methods
   * ==================================================================== */
private static void parseParameter(final StreamTokenizer tokeniser, final List<Xpar> pars) throws CalFacadeException {
    try {
        if (tokeniser.nextToken() != StreamTokenizer.TT_WORD) {
            throw new CalFacadeException(CalFacadeException.badRequest);
        }
        String paramName = tokeniser.sval;
        if (tokeniser.nextToken() != '=') {
            throw new CalFacadeException(CalFacadeException.badRequest);
        }
        StringBuilder paramValue = new StringBuilder();
        if (tokeniser.nextToken() == '"') {
            paramValue.append(tokeniser.sval);
        } else if (tokeniser.sval != null) {
            paramValue.append(tokeniser.sval);
            // check for additional words to account for equals (=) in param-value
            int nextToken = tokeniser.nextToken();
            while (nextToken > 0 && nextToken != ';' && nextToken != ':' && nextToken != ',') {
                if (tokeniser.ttype == StreamTokenizer.TT_WORD) {
                    paramValue.append(tokeniser.sval);
                } else {
                    paramValue.append((char) tokeniser.ttype);
                }
                nextToken = tokeniser.nextToken();
            }
            tokeniser.pushBack();
        } else {
            tokeniser.pushBack();
        }
        pars.add(new Xpar(paramName, paramValue.toString()));
    } catch (Throwable t) {
        throw new CalFacadeException(t);
    }
}
Also used : ToString(org.bedework.util.misc.ToString) CalFacadeException(org.bedework.calfacade.exc.CalFacadeException)

Example 12 with CalFacadeException

use of org.bedework.calfacade.exc.CalFacadeException in project bw-calendar-engine by Bedework.

the class DumpEntity method dump.

/**
 * Dump the entire entity into the given file.
 *
 * @param f - the file
 * @throws CalFacadeException
 */
@NoWrap
public void dump(final File f) throws CalFacadeException {
    Dump dCl = getClass().getAnnotation(Dump.class);
    if (dCl.format() == DumpFormat.xml) {
        Writer wtr = null;
        try {
            XmlEmit xml = new XmlEmit();
            wtr = new FileWriter(f);
            xml.startEmit(wtr);
            dump(xml, DumpType.def, false);
            xml.flush();
            return;
        } catch (CalFacadeException cfe) {
            throw cfe;
        } catch (Throwable t) {
            throw new CalFacadeException(t);
        } finally {
            if (wtr != null) {
                try {
                    wtr.close();
                } catch (Throwable t) {
                    throw new CalFacadeException(t);
                }
            }
        }
    }
    if (dCl.format() == DumpFormat.vCard) {
        Writer wtr = null;
        try {
            VCard vc = new VCard();
            dump(vc, DumpType.def);
            String vcStr = vc.toString();
            wtr = new FileWriter(f);
            wtr.append(vcStr);
            return;
        } catch (CalFacadeException cfe) {
            throw cfe;
        } catch (Throwable t) {
            throw new CalFacadeException(t);
        } finally {
            if (wtr != null) {
                try {
                    wtr.close();
                } catch (Throwable t) {
                    throw new CalFacadeException(t);
                }
            }
        }
    }
    throw new CalFacadeException("Unsupported dump format " + dCl.format());
}
Also used : NoDump(org.bedework.calfacade.annotations.NoDump) Dump(org.bedework.calfacade.annotations.Dump) FileWriter(java.io.FileWriter) XmlEmit(org.bedework.util.xml.XmlEmit) VCard(net.fortuna.ical4j.vcard.VCard) FileWriter(java.io.FileWriter) Writer(java.io.Writer) CalFacadeException(org.bedework.calfacade.exc.CalFacadeException) NoWrap(org.bedework.calfacade.annotations.NoWrap)

Example 13 with CalFacadeException

use of org.bedework.calfacade.exc.CalFacadeException in project bw-calendar-engine by Bedework.

the class RecurRuleComponents method fromEventXrules.

private static Collection<RecurRuleComponents> fromEventXrules(BwEvent ev, Collection<String> rules) throws CalFacadeException {
    Collection<RecurRuleComponents> rrcs = new ArrayList<RecurRuleComponents>();
    if (!ev.isRecurringEntity()) {
        return rrcs;
    }
    if (rules == null) {
        return rrcs;
    }
    try {
        for (String rule : rules) {
            RecurRuleComponents rrc = new RecurRuleComponents();
            Recur recur = new Recur(rule);
            rrc.setRule(rule);
            rrc.setFreq(Freq.valueOf(recur.getFrequency()));
            Date until = recur.getUntil();
            if (until != null) {
                rrc.setUntil(until);
            } else {
                rrc.setCount(recur.getCount());
            }
            rrc.setInterval(recur.getInterval());
            rrc.setBySecond(checkNumList(recur.getSecondList()));
            rrc.setByMinute(checkNumList(recur.getMinuteList()));
            rrc.setByHour(checkNumList(recur.getHourList()));
            /* Group by position */
            Collection wds = recur.getDayList();
            if (wds != null) {
                HashMap<Integer, Collection<String>> hm = new HashMap<Integer, Collection<String>>();
                for (Object o : wds) {
                    WeekDay wd = (WeekDay) o;
                    Collection<String> c = hm.get(wd.getOffset());
                    if (c == null) {
                        c = new ArrayList<>();
                        hm.put(wd.getOffset(), c);
                    }
                    c.add(wd.getDay().name());
                }
                final Collection<PosDays> pds = new ArrayList<>();
                final Set<Integer> poss = hm.keySet();
                for (final Integer pos : poss) {
                    pds.add(new PosDays(pos, hm.get(pos)));
                }
                rrc.setByDay(pds);
            }
            rrc.setByMonthDay(checkNumList(recur.getMonthDayList()));
            rrc.setByYearDay(checkNumList(recur.getYearDayList()));
            rrc.setByWeekNo(checkNumList(recur.getWeekNoList()));
            rrc.setByMonth(checkNumList(recur.getMonthList()));
            rrc.setBySetPos(checkNumList(recur.getSetPosList()));
            if (recur.getWeekStartDay() != null) {
                rrc.setWkst(recur.getWeekStartDay().name());
            }
            rrcs.add(rrc);
        }
    } catch (Throwable t) {
        throw new CalFacadeException(t);
    }
    return rrcs;
}
Also used : HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) Date(net.fortuna.ical4j.model.Date) CalFacadeException(org.bedework.calfacade.exc.CalFacadeException) WeekDay(net.fortuna.ical4j.model.WeekDay) Collection(java.util.Collection) Recur(net.fortuna.ical4j.model.Recur)

Example 14 with CalFacadeException

use of org.bedework.calfacade.exc.CalFacadeException in project bw-calendar-engine by Bedework.

the class RecurUtil method getLatestRecurrenceDate.

/**
 * Return the absolute latest end date for this event. Note that
 * exclusions may mean the actual latest date is earlier.
 *
 * @param evprops
 * @param vstart
 * @param enddt
 * @param d
 * @param maxRangeEnd
 * @return date
 * @throws CalFacadeException
 */
private static Date getLatestRecurrenceDate(final PropertyList evprops, final DtStart vstart, final DtEnd enddt, final Duration d, final Date maxRangeEnd) throws CalFacadeException {
    boolean debug = getLog().isDebugEnabled();
    try {
        Date start = vstart.getDate();
        Date until = null;
        /* Get the duration of the event to get us past the end
       */
        Dur dur;
        if (d != null) {
            dur = d.getDuration();
        } else {
            Date evend;
            if (enddt == null) {
                evend = start;
            } else {
                evend = enddt.getDate();
            }
            dur = new Dur(start, evend);
        }
        /* Make a new duration incremented a little to avoid any boundary
          conditions */
        if (dur.getWeeks() != 0) {
            dur = new Dur(dur.getWeeks() + 1);
        } else {
            dur = new Dur(dur.getDays() + 1, dur.getHours(), dur.getMinutes(), dur.getSeconds());
        }
        PropertyList rrules = evprops.getProperties(Property.RRULE);
        PropertyList rdts = evprops.getProperties(Property.RDATE);
        if ((rrules == null) && (rdts == null)) {
            // Not a recurring event
            return null;
        }
        if (rrules != null) {
            Iterator rit = rrules.iterator();
            while (rit.hasNext()) {
                RRule r = (RRule) rit.next();
                Date nextUntil = getLastDate(r.getRecur(), start, maxRangeEnd);
                if (nextUntil == null) {
                    /* We have a rule without an end date so it's infinite.
             */
                    return null;
                }
                if (debug) {
                    debugMsg("Last date for recur=" + nextUntil);
                }
                if ((until == null) || (nextUntil.after(until))) {
                    until = nextUntil;
                }
            }
            /* We have some rules - none have an end date so it's infinite.
         */
            if (until == null) {
                // infinite
                return null;
            }
        }
        if (rdts != null) {
            // Get the latest date from each
            // XXX are these sorted?
            Iterator rit = rdts.iterator();
            while (rit.hasNext()) {
                RDate r = (RDate) rit.next();
                if (Value.PERIOD.equals(r.getParameter(Parameter.VALUE))) {
                    PeriodList pl = r.getPeriods();
                    Iterator it = pl.iterator();
                    while (it.hasNext()) {
                        Period p = (Period) it.next();
                        // Not sure if a single date gives a null end
                        Date nextUntil = p.getEnd();
                        if (nextUntil == null) {
                            nextUntil = p.getStart();
                        }
                        if ((until == null) || (nextUntil.after(until))) {
                            until = nextUntil;
                        }
                    }
                } else {
                    // date or datetime
                    DateList startDates = r.getDates();
                    for (int j = 0; j < startDates.size(); j++) {
                        Date startDate = (Date) startDates.get(j);
                        Date endDate = new Date(dur.getTime(startDate));
                        if ((until == null) || (endDate.after(until))) {
                            until = endDate;
                        }
                    }
                }
            }
        }
        if (debug) {
            debugMsg("Last date before fix=" + until);
        }
        /* Now add the duration of the event to get us past the end
       */
        if (until instanceof DateTime) {
            until = new DateTime(dur.getTime(until));
            ((DateTime) until).setUtc(true);
        } else {
            until = new Date(dur.getTime(until));
        }
        if (debug) {
            debugMsg("Last date after fix=" + until);
        }
        return until;
    } catch (Throwable t) {
        throw new CalFacadeException(t);
    }
}
Also used : Dur(net.fortuna.ical4j.model.Dur) RDate(net.fortuna.ical4j.model.property.RDate) RRule(net.fortuna.ical4j.model.property.RRule) PeriodList(net.fortuna.ical4j.model.PeriodList) Period(net.fortuna.ical4j.model.Period) RDate(net.fortuna.ical4j.model.property.RDate) Date(net.fortuna.ical4j.model.Date) DateTime(net.fortuna.ical4j.model.DateTime) BwDateTime(org.bedework.calfacade.BwDateTime) CalFacadeException(org.bedework.calfacade.exc.CalFacadeException) PropertyList(net.fortuna.ical4j.model.PropertyList) Iterator(java.util.Iterator) DateList(net.fortuna.ical4j.model.DateList)

Example 15 with CalFacadeException

use of org.bedework.calfacade.exc.CalFacadeException in project bw-calendar-engine by Bedework.

the class ToXEvent method doRecurring.

/**
 * Build recurring properties from event.
 *
 * @param pattern
 * @param compCl - component class for pattern matching
 * @param val
 * @param pl
 * @throws CalFacadeException
 */
public static void doRecurring(final BaseComponentType pattern, final Class compCl, final BwEvent val, final List<JAXBElement<? extends BasePropertyType>> pl) throws CalFacadeException {
    try {
        if (emit(pattern, compCl, RrulePropType.class) && val.hasRrules()) {
            for (String s : val.getRrules()) {
                RRule rule = new RRule();
                rule.setValue(s);
                Recur r = rule.getRecur();
                RecurType rt = new RecurType();
                rt.setFreq(FreqRecurType.fromValue(r.getFrequency()));
                if (r.getCount() > 0) {
                    rt.setCount(BigInteger.valueOf(r.getCount()));
                }
                Date until = r.getUntil();
                if (until != null) {
                    UntilRecurType u = new UntilRecurType();
                    /*
            if (until instanceof DateTime) {
              u.setDateTime(until.toString());
            } else {
              u.setDate(until.toString());
            }
            */
                    XcalUtil.initUntilRecur(u, until.toString());
                }
                if (r.getInterval() > 0) {
                    rt.setInterval(String.valueOf(r.getInterval()));
                }
                listFromNumberList(rt.getBysecond(), r.getSecondList());
                listFromNumberList(rt.getByminute(), r.getMinuteList());
                listFromNumberList(rt.getByhour(), r.getHourList());
                if (r.getDayList() != null) {
                    List<String> l = rt.getByday();
                    for (WeekDay wd : r.getDayList()) {
                        l.add(wd.getDay().name());
                    }
                }
                listFromNumberList(rt.getByyearday(), r.getYearDayList());
                intlistFromNumberList(rt.getBymonthday(), r.getMonthDayList());
                listFromNumberList(rt.getByweekno(), r.getWeekNoList());
                intlistFromNumberList(rt.getBymonth(), r.getMonthList());
                bigintlistFromNumberList(rt.getBysetpos(), r.getSetPosList());
                RrulePropType rrp = new RrulePropType();
                rrp.setRecur(rt);
                pl.add(of.createRrule(rrp));
            }
        }
    /*
      if (emit(pattern, compCl, ExrulePropType.class) &&
          val.hasExrules()) {
        for(String s: val.getExrules()) {
          ExRule rule = new ExRule();
          rule.setValue(s);

          pl.add(rule);
        }
      }

      if (emit(pattern, compCl, RdatePropType.class) {
        makeDlp(false, val.getRdates(), pl);
      }

      if (emit(pattern, compCl, ExdatePropType.class) {
        makeDlp(true, val.getExdates(), pl);
      }
      */
    // } catch (CalFacadeException cfe) {
    // throw cfe;
    } catch (Throwable t) {
        throw new CalFacadeException(t);
    }
}
Also used : UntilRecurType(ietf.params.xml.ns.icalendar_2.UntilRecurType) WeekDay(net.fortuna.ical4j.model.WeekDay) RRule(net.fortuna.ical4j.model.property.RRule) FreqRecurType(ietf.params.xml.ns.icalendar_2.FreqRecurType) RecurType(ietf.params.xml.ns.icalendar_2.RecurType) UntilRecurType(ietf.params.xml.ns.icalendar_2.UntilRecurType) BwString(org.bedework.calfacade.BwString) RrulePropType(ietf.params.xml.ns.icalendar_2.RrulePropType) Date(net.fortuna.ical4j.model.Date) CalFacadeException(org.bedework.calfacade.exc.CalFacadeException) Recur(net.fortuna.ical4j.model.Recur)

Aggregations

CalFacadeException (org.bedework.calfacade.exc.CalFacadeException)298 BwCalendar (org.bedework.calfacade.BwCalendar)55 BwEvent (org.bedework.calfacade.BwEvent)55 EventInfo (org.bedework.calfacade.svc.EventInfo)37 WebdavException (org.bedework.webdav.servlet.shared.WebdavException)32 ArrayList (java.util.ArrayList)28 BwString (org.bedework.calfacade.BwString)26 BwDateTime (org.bedework.calfacade.BwDateTime)24 IndexException (org.bedework.util.indexing.IndexException)23 BwPrincipal (org.bedework.calfacade.BwPrincipal)22 TreeSet (java.util.TreeSet)19 BwAttendee (org.bedework.calfacade.BwAttendee)18 CalFacadeAccessException (org.bedework.calfacade.exc.CalFacadeAccessException)16 Calendar (net.fortuna.ical4j.model.Calendar)15 DateTime (net.fortuna.ical4j.model.DateTime)15 Period (net.fortuna.ical4j.model.Period)13 BwCategory (org.bedework.calfacade.BwCategory)13 StringReader (java.io.StringReader)12 CoreEventInfo (org.bedework.calcorei.CoreEventInfo)12 BwEventProxy (org.bedework.calfacade.BwEventProxy)12