private static boolean emit( final BaseComponentType pattern, final Class compCl, final Class... cl) { if (pattern == null) { return true; } if (!compCl.getName().equals(pattern.getClass().getName())) { return false; } if ((cl == null) | (cl.length == 0)) { // Any property return true; } String className = cl[0].getName(); if (BasePropertyType.class.isAssignableFrom(cl[0])) { if (pattern.getProperties() == null) { return false; } List<JAXBElement<? extends BasePropertyType>> patternProps = pattern.getProperties().getBasePropertyOrTzid(); for (JAXBElement<? extends BasePropertyType> jp : patternProps) { if (jp.getValue().getClass().getName().equals(className)) { return true; } } return false; } List<JAXBElement<? extends BaseComponentType>> patternComps = XcalUtil.getComponents(pattern); if (patternComps == null) { return false; } // Check for component for (JAXBElement<? extends BaseComponentType> jp : patternComps) { if (jp.getValue().getClass().getName().equals(className)) { return emit(pattern, cl[0], Arrays.copyOfRange(cl, 1, cl.length - 1)); } } return false; }
/** * Build recurring properties from ical recurrence. * * @param r * @return RecurTyp filled in * @throws Throwable */ public static RecurType doRecur(final Recur r) throws Throwable { 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(); 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 (Object o : r.getDayList()) { l.add(((WeekDay) o).getDay()); } } 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()); return rt; }
static JAXBElement<? extends BasePropertyType> doProperty( final Property prop, final PropertyInfoIndex pii, final boolean wrapXprops) throws Throwable { if (prop instanceof XProperty) { if (!wrapXprops) { return null; } final XBedeworkWrapperPropType wrapper = new XBedeworkWrapperPropType(); wrapper.setText(prop.getValue()); processParameters(prop.getParameters(), wrapper); final XBedeworkWrappedNameParamType wnp = new XBedeworkWrappedNameParamType(); wnp.setText(prop.getName()); if (wrapper.getParameters() == null) { wrapper.setParameters(new ArrayOfParameters()); } wrapper.getParameters().getBaseParameter().add(of.createXBedeworkWrappedName(wnp)); return of.createXBedeworkWrapper(wrapper); } switch (pii) { case ACTION: /* ------------------- Action: Alarm -------------------- */ ActionPropType a = new ActionPropType(); a.setText(prop.getValue()); return of.createAction(a); case ATTACH: /* ------------------- Attachments -------------------- */ // pl.add(setAttachment(att)); return null; case ATTENDEE: /* ------------------- Attendees -------------------- */ final AttendeePropType att = new AttendeePropType(); att.setCalAddress(prop.getValue()); return of.createAttendee(att); case BUSYTYPE: return null; case CATEGORIES: /* ------------------- Categories -------------------- */ // LANG - filter on language - group language in one cat list? CategoriesPropType c = new CategoriesPropType(); CategoryList cats = ((Categories) prop).getCategories(); Iterator pit = cats.iterator(); while (pit.hasNext()) { c.getText().add((String) pit.next()); } return of.createCategories(c); case CLASS: /* ------------------- Class -------------------- */ ClassPropType cl = new ClassPropType(); cl.setText(prop.getValue()); return of.createClass(cl); case COMMENT: /* ------------------- Comments -------------------- */ CommentPropType cm = new CommentPropType(); cm.setText(prop.getValue()); return of.createComment(cm); case COMPLETED: /* ------------------- Completed -------------------- */ CompletedPropType cmp = new CompletedPropType(); cmp.setUtcDateTime(XcalUtil.getXMlUTCCal(prop.getValue())); return of.createCompleted(cmp); case CONTACT: /* ------------------- Contact -------------------- */ // LANG ContactPropType ct = new ContactPropType(); ct.setText(prop.getValue()); return of.createContact(ct); case CREATED: /* ------------------- Created -------------------- */ CreatedPropType created = new CreatedPropType(); created.setUtcDateTime(XcalUtil.getXMlUTCCal(prop.getValue())); return of.createCreated(created); case DESCRIPTION: /* ------------------- Description -------------------- */ DescriptionPropType desc = new DescriptionPropType(); desc.setText(prop.getValue()); return of.createDescription(desc); case DTEND: /* ------------------- DtEnd -------------------- */ DtendPropType dtend = (DtendPropType) makeDateDatetime(new DtendPropType(), prop); return of.createDtend(dtend); case DTSTAMP: /* ------------------- DtStamp -------------------- */ DtstampPropType dtstamp = new DtstampPropType(); dtstamp.setUtcDateTime(XcalUtil.getXMlUTCCal(prop.getValue())); return of.createDtstamp(dtstamp); case DTSTART: /* ------------------- DtStart -------------------- */ DtstartPropType dtstart = (DtstartPropType) makeDateDatetime(new DtstartPropType(), prop); return of.createDtstart(dtstart); case DUE: /* ------------------- Due -------------------- */ DuePropType due = (DuePropType) makeDateDatetime(new DuePropType(), prop); return of.createDue(due); case DURATION: /* ------------------- Duration -------------------- */ DurationPropType dur = new DurationPropType(); dur.setDuration(prop.getValue()); return of.createDuration(dur); case EXDATE: /* ------------------- ExDate --below------------ */ return null; case EXRULE: /* ------------------- ExRule --below------------- */ ExrulePropType er = new ExrulePropType(); er.setRecur(doRecur(((RRule) prop).getRecur())); return of.createExrule(er); case FREEBUSY: /* ------------------- freebusy -------------------- */ FreeBusy icfb = (FreeBusy) prop; PeriodList fbps = icfb.getPeriods(); if (Util.isEmpty(fbps)) { return null; } FreebusyPropType fb = new FreebusyPropType(); String fbtype = paramVal(prop, Parameter.FBTYPE); if (fbtype != null) { ArrayOfParameters pars = getAop(fb); FbtypeParamType f = new FbtypeParamType(); f.setText(fbtype); JAXBElement<FbtypeParamType> param = of.createFbtype(f); pars.getBaseParameter().add(param); } List<PeriodType> pdl = fb.getPeriod(); for (Object o : fbps) { Period p = (Period) o; PeriodType np = new PeriodType(); np.setStart(XcalUtil.getXMlUTCCal(p.getStart().toString())); np.setEnd(XcalUtil.getXMlUTCCal(p.getEnd().toString())); pdl.add(np); } return of.createFreebusy(fb); case GEO: /* ------------------- Geo -------------------- */ Geo geo = (Geo) prop; GeoPropType g = new GeoPropType(); g.setLatitude(geo.getLatitude().floatValue()); g.setLatitude(geo.getLongitude().floatValue()); return of.createGeo(g); case LAST_MODIFIED: /* ------------------- LastModified -------------------- */ LastModifiedPropType lm = new LastModifiedPropType(); lm.setUtcDateTime(XcalUtil.getXMlUTCCal(prop.getValue())); return of.createLastModified(lm); case LOCATION: /* ------------------- Location -------------------- */ LocationPropType l = new LocationPropType(); l.setText(prop.getValue()); return of.createLocation(l); case METHOD: /* ------------------- Method -------------------- */ MethodPropType m = new MethodPropType(); m.setText(prop.getValue()); return of.createMethod(m); case ORGANIZER: /* ------------------- Organizer -------------------- */ OrganizerPropType org = new OrganizerPropType(); org.setCalAddress(prop.getValue()); return of.createOrganizer(org); case PERCENT_COMPLETE: /* ------------------- PercentComplete -------------------- */ PercentCompletePropType p = new PercentCompletePropType(); p.setInteger(BigInteger.valueOf(((PercentComplete) prop).getPercentage())); return of.createPercentComplete(p); case PRIORITY: /* ------------------- Priority -------------------- */ PriorityPropType pr = new PriorityPropType(); pr.setInteger(BigInteger.valueOf(((Priority) prop).getLevel())); return of.createPriority(pr); case PRODID: /* ------------------- Prodid -------------------- */ ProdidPropType prod = new ProdidPropType(); prod.setText(prop.getValue()); return of.createProdid(prod); case RDATE: /* ------------------- RDate ------------------- */ // XXX Todo return null; case RECURRENCE_ID: /* ------------------- RecurrenceID -------------------- */ RecurrenceIdPropType ri = new RecurrenceIdPropType(); String strval = prop.getValue(); if (dateOnly(prop)) { // RECUR - fix all day recurrences sometime if (strval.length() > 8) { // Try to fix up bad all day recurrence ids. - assume a local timezone strval = strval.substring(0, 8); } ri.setDate(XcalUtil.fromDtval(strval)); } else { XcalUtil.initDt(ri, strval, getTzid(prop)); } return of.createRecurrenceId(ri); case RELATED_TO: /* ------------------- RelatedTo -------------------- */ RelatedToPropType rt = new RelatedToPropType(); String relType = paramVal(prop, Parameter.RELTYPE); String value = paramVal(prop, Parameter.VALUE); if ((value == null) || "uid".equalsIgnoreCase(value)) { rt.setUid(prop.getValue()); } else if ("uri".equalsIgnoreCase(value)) { rt.setUri(prop.getValue()); } else { rt.setText(prop.getValue()); } if (relType != null) { ArrayOfParameters pars = getAop(rt); ReltypeParamType r = new ReltypeParamType(); r.setText(relType); JAXBElement<ReltypeParamType> param = of.createReltype(r); pars.getBaseParameter().add(param); } return of.createRelatedTo(rt); case REPEAT: /* ------------------- Repeat Alarm -------------------- */ Repeat rept = (Repeat) prop; RepeatPropType rep = new RepeatPropType(); rep.setInteger(BigInteger.valueOf(rept.getCount())); return of.createRepeat(rep); case REQUEST_STATUS: /* ------------------- RequestStatus -------------------- */ // XXX Later return null; case RESOURCES: /* ------------------- Resources -------------------- */ ResourcesPropType r = new ResourcesPropType(); List<String> rl = r.getText(); ResourceList rlist = ((Resources) prop).getResources(); Iterator rlit = rlist.iterator(); while (rlit.hasNext()) { rl.add((String) rlit.next()); } return of.createResources(r); case RRULE: /* ------------------- RRule ------------------- */ RrulePropType rrp = new RrulePropType(); rrp.setRecur(doRecur(((RRule) prop).getRecur())); return of.createRrule(rrp); case SEQUENCE: /* ------------------- Sequence -------------------- */ SequencePropType s = new SequencePropType(); s.setInteger(BigInteger.valueOf(((Sequence) prop).getSequenceNo())); return of.createSequence(s); case STATUS: /* ------------------- Status -------------------- */ StatusPropType st = new StatusPropType(); st.setText(prop.getValue()); return of.createStatus(st); case SUMMARY: /* ------------------- Summary -------------------- */ SummaryPropType sum = new SummaryPropType(); sum.setText(prop.getValue()); return of.createSummary(sum); case TRIGGER: /* ------------------- Trigger - alarm -------------------- */ TriggerPropType trig = new TriggerPropType(); String valType = paramVal(prop, Parameter.VALUE); if ((valType == null) || (valType.equalsIgnoreCase(Value.DURATION.getValue()))) { trig.setDuration(prop.getValue()); String rel = paramVal(prop, Parameter.RELATED); if (rel != null) { ArrayOfParameters pars = getAop(trig); RelatedParamType rpar = new RelatedParamType(); rpar.setText(IcalDefs.alarmTriggerRelatedEnd); JAXBElement<RelatedParamType> param = of.createRelated(rpar); pars.getBaseParameter().add(param); } } else if (valType.equalsIgnoreCase(Value.DATE_TIME.getValue())) { // t.setDateTime(val.getTrigger()); trig.setDateTime(XcalUtil.getXMlUTCCal(prop.getValue())); } return of.createTrigger(trig); case TRANSP: /* ------------------- Transp -------------------- */ TranspPropType t = new TranspPropType(); t.setText(prop.getValue()); return of.createTransp(t); case TZID: case TZNAME: case TZOFFSETFROM: case TZOFFSETTO: case TZURL: return null; case UID: /* ------------------- Uid -------------------- */ final UidPropType uid = new UidPropType(); uid.setText(prop.getValue()); return of.createUid(uid); case URL: /* ------------------- Url -------------------- */ final UrlPropType u = new UrlPropType(); u.setUri(prop.getValue()); return of.createUrl(u); case VERSION: /* ------------------- Version - vcal only -------------------- */ final VersionPropType vers = new VersionPropType(); vers.setText(prop.getValue()); return of.createVersion(vers); case XBEDEWORK_COST: /* ------------------- Cost -------------------- */ final XBedeworkCostPropType cst = new XBedeworkCostPropType(); cst.setText(prop.getValue()); return of.createXBedeworkCost(cst); case X_BEDEWORK_CATEGORIES: /* ------------------- Categories -------------------- */ final XBwCategoriesPropType xpcat = new XBwCategoriesPropType(); xpcat.getText().add(prop.getValue()); return of.createXBedeworkCategories(xpcat); case X_BEDEWORK_CONTACT: /* ------------------- Categories -------------------- */ final XBwContactPropType xpcon = new XBwContactPropType(); xpcon.setText(prop.getValue()); return of.createXBedeworkContact(xpcon); case X_BEDEWORK_LOCATION: /* ------------------- Categories -------------------- */ final XBwLocationPropType xploc = new XBwLocationPropType(); xploc.setText(prop.getValue()); return of.createXBedeworkLocation(xploc); default: if (prop instanceof XProperty) { /* ------------------------- x-property --------------------------- */ /* final PropertyInfoIndex xpii = PropertyInfoIndex.fromName(prop.getName()); if (xpii == null) { return null; } return null;*/ if (!wrapXprops) { return null; } final XBedeworkWrapperPropType wrapper = new XBedeworkWrapperPropType(); processParameters(prop.getParameters(), wrapper); return of.createXBedeworkWrapper(wrapper); } } // switch (pii) return null; }
private static DateDatetimePropertyType makeDateDatetime( final DateDatetimePropertyType p, final Property prop) throws Throwable { XcalUtil.initDt(p, prop.getValue(), getTzid(prop)); return p; }