use of ietf.params.xml.ns.icalendar_2.BasePropertyType 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);
}
}
use of ietf.params.xml.ns.icalendar_2.BasePropertyType in project bw-calendar-engine by Bedework.
the class ToXEvent method toComponent.
/**
* Make a BaseComponentType component from a BwEvent object. This may produce a
* VEvent, VTodo or VJournal.
*
* @param val
* @param isOverride - true if event object is an override
* @param pattern - if non-null limit returned components and values to those
* supplied in the pattern.
* @return JAXBElement<? extends BaseComponentType>
* @throws CalFacadeException
*/
public static JAXBElement<? extends BaseComponentType> toComponent(final BwEvent val, final boolean isOverride, final boolean wrapXprops, final BaseComponentType pattern) throws CalFacadeException {
if (val == null) {
return null;
}
boolean isInstance = false;
try {
JAXBElement<? extends BaseComponentType> el;
boolean freeBusy = false;
boolean todo = false;
int entityType = val.getEntityType();
if (entityType == IcalDefs.entityTypeEvent) {
el = of.createVevent(new VeventType());
} else if (entityType == IcalDefs.entityTypeTodo) {
el = of.createVtodo(new VtodoType());
todo = true;
} else if (entityType == IcalDefs.entityTypeJournal) {
el = of.createVjournal(new VjournalType());
} else if (entityType == IcalDefs.entityTypeFreeAndBusy) {
el = of.createVfreebusy(new VfreebusyType());
freeBusy = true;
} else {
throw new CalFacadeException("org.bedework.invalid.entity.type", String.valueOf(entityType));
}
BaseComponentType comp = el.getValue();
Class masterClass = comp.getClass();
comp.setProperties(new ArrayOfProperties());
List<JAXBElement<? extends BasePropertyType>> pl = comp.getProperties().getBasePropertyOrTzid();
if (emit(pattern, masterClass, RecurrenceIdPropType.class)) {
String strval = val.getRecurrenceId();
if ((strval != null) && (strval.length() > 0)) {
isInstance = true;
// DORECUR - we should be restoring to original form.
/* Try using timezone from dtstart so we can more often be in same form
* as original.
*/
BwDateTime dts = val.getDtstart();
RecurrenceIdPropType ri = new RecurrenceIdPropType();
String tzid = null;
if (dts.getDateType()) {
// 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 {
if (!val.getForceUTC()) {
if ((dts != null) && !dts.isUTC()) {
tzid = dts.getTzid();
}
}
XcalUtil.initDt(ri, strval, tzid);
}
pl.add(of.createRecurrenceId(ri));
}
}
/* ------------------- Alarms -------------------- */
processEventAlarm(val, comp, pattern, masterClass);
/* ------------------- Attachments -------------------- */
if (emit(pattern, masterClass, AttachPropType.class)) {
if (val.getNumAttachments() > 0) {
for (BwAttachment att : val.getAttachments()) {
// pl.add(setAttachment(att));
}
}
}
/* ------------------- Attendees -------------------- */
if (emit(pattern, masterClass, AttendeePropType.class)) {
if (val.getNumAttendees() > 0) {
for (BwAttendee att : val.getAttendees()) {
pl.add(of.createAttendee(makeAttendee(att)));
}
}
}
if (emit(pattern, masterClass, CategoriesPropType.class)) {
if (val.getNumCategories() > 0) {
// LANG - filter on language - group language in one cat list?
for (BwCategory cat : val.getCategories()) {
CategoriesPropType c = new CategoriesPropType();
c.getText().add(cat.getWord().getValue());
pl.add(of.createCategories((CategoriesPropType) langProp(c, cat.getWord())));
}
}
}
if (emit(pattern, masterClass, ClassPropType.class)) {
String pval = val.getClassification();
if (pval != null) {
ClassPropType c = new ClassPropType();
c.setText(pval);
pl.add(of.createClass(c));
}
}
if (emit(pattern, masterClass, CommentPropType.class)) {
if (val.getNumComments() > 0) {
for (BwString str : val.getComments()) {
CommentPropType c = new CommentPropType();
c.setText(str.getValue());
pl.add(of.createComment((CommentPropType) langProp(c, str)));
}
}
}
if (emit(pattern, masterClass, CompletedPropType.class)) {
if ((entityType == IcalDefs.entityTypeTodo) && (val.getCompleted() != null)) {
CompletedPropType c = new CompletedPropType();
c.setUtcDateTime(XcalUtil.getXMlUTCCal(val.getCompleted()));
pl.add(of.createCompleted(c));
}
}
if (emit(pattern, masterClass, ContactPropType.class)) {
if (val.getNumContacts() > 0) {
for (BwContact ctct : val.getContacts()) {
// LANG
ContactPropType c = new ContactPropType();
c.setText(ctct.getCn().getValue());
pl.add(of.createContact((ContactPropType) langProp(uidProp(altrepProp(c, ctct.getLink()), ctct.getUid()), ctct.getCn())));
}
}
}
if (emit(pattern, masterClass, CreatedPropType.class)) {
CreatedPropType created = new CreatedPropType();
created.setUtcDateTime(XcalUtil.getXMlUTCCal(val.getCreated()));
pl.add(of.createCreated(created));
}
if (emit(pattern, masterClass, DescriptionPropType.class)) {
BwStringBase bwstr = val.findDescription(null);
if (bwstr != null) {
DescriptionPropType desc = new DescriptionPropType();
if (bwstr.getValue().contains("Â")) {
warn("Odd character  in description: " + bwstr.getValue());
}
desc.setText(bwstr.getValue());
pl.add(of.createDescription((DescriptionPropType) langProp(desc, bwstr)));
}
}
if ((todo && emit(pattern, masterClass, DuePropType.class)) || (!todo && emit(pattern, masterClass, DtendPropType.class))) {
if (val.getEndType() == BwEvent.endTypeDate) {
if (todo) {
DuePropType due = (DuePropType) makeDateDatetime(new DuePropType(), val.getDtend(), freeBusy | val.getForceUTC());
pl.add(of.createDue(due));
} else {
DtendPropType dtend = (DtendPropType) makeDateDatetime(new DtendPropType(), val.getDtend(), freeBusy | val.getForceUTC());
pl.add(of.createDtend(dtend));
}
} else if (val.getEndType() == BwEvent.endTypeDuration) {
DurationPropType dur = new DurationPropType();
dur.setDuration(val.getDuration());
pl.add(of.createDuration(dur));
}
}
if (emit(pattern, masterClass, DtstampPropType.class)) {
DtstampPropType dtstamp = new DtstampPropType();
dtstamp.setUtcDateTime(XcalUtil.getXMlUTCCal(val.getDtstamp()));
pl.add(of.createDtstamp(dtstamp));
}
if (emit(pattern, masterClass, DtstartPropType.class)) {
if ((val.getNoStart() == null) || !val.getNoStart()) {
DtstartPropType dtstart = (DtstartPropType) makeDateDatetime(new DtstartPropType(), val.getDtstart(), freeBusy | val.getForceUTC());
pl.add(of.createDtstart(dtstart));
}
}
if (emit(pattern, masterClass, FreebusyPropType.class)) {
if (entityType == IcalDefs.entityTypeFreeAndBusy) {
Collection<BwFreeBusyComponent> fbps = val.getFreeBusyPeriods();
if (fbps != null) {
for (BwFreeBusyComponent fbc : fbps) {
FreebusyPropType fb = new FreebusyPropType();
/*
int type = fbc.getType();
FbtypeValueType fbtype;
if (type == BwFreeBusyComponent.typeBusy) {
fbtype = FbtypeValueType.BUSY;
} else if (type == BwFreeBusyComponent.typeFree) {
fbtype = FbtypeValueType.FREE;
} else if (type == BwFreeBusyComponent.typeBusyUnavailable) {
fbtype = FbtypeValueType.BUSY_UNAVAILABLE;
} else if (type == BwFreeBusyComponent.typeBusyTentative) {
fbtype = FbtypeValueType.BUSY_TENTATIVE;
} else {
fbtype = FbtypeValueType.BUSY;
// throw new CalFacadeException("Bad free-busy type " + type);
}
ArrayOfParameters pars = getAop(fb);
FbtypeParamType f = new FbtypeParamType();
f.setText(fbtype.name());
*/
ArrayOfParameters pars = getAop(fb);
FbtypeParamType f = new FbtypeParamType();
f.setText(BwFreeBusyComponent.fbtypes[fbc.getType()]);
JAXBElement<FbtypeParamType> param = of.createFbtype(f);
pars.getBaseParameter().add(param);
List<PeriodType> pdl = fb.getPeriod();
for (Period p : fbc.getPeriods()) {
PeriodType np = new PeriodType();
np.setStart(XcalUtil.getXMlUTCCal(p.getStart().toString()));
np.setEnd(XcalUtil.getXMlUTCCal(p.getEnd().toString()));
pdl.add(np);
}
pl.add(of.createFreebusy(fb));
}
}
}
}
if (emit(pattern, masterClass, GeoPropType.class)) {
BwGeo geo = val.getGeo();
if (geo != null) {
GeoPropType g = new GeoPropType();
g.setLatitude(geo.getLatitude().floatValue());
g.setLatitude(geo.getLongitude().floatValue());
pl.add(of.createGeo(g));
}
}
if (emit(pattern, masterClass, LastModifiedPropType.class)) {
LastModifiedPropType lm = new LastModifiedPropType();
lm.setUtcDateTime(XcalUtil.getXMlUTCCal(val.getLastmod()));
pl.add(of.createLastModified(lm));
}
if (emit(pattern, masterClass, LocationPropType.class)) {
BwLocation loc = val.getLocation();
if (loc != null) {
LocationPropType l = new LocationPropType();
l.setText(loc.getAddress().getValue());
pl.add(of.createLocation((LocationPropType) langProp(uidProp(l, loc.getUid()), loc.getAddress())));
}
}
if (emit(pattern, masterClass, OrganizerPropType.class)) {
BwOrganizer org = val.getOrganizer();
if (org != null) {
pl.add(of.createOrganizer(makeOrganizer(org)));
}
}
if (emit(pattern, masterClass, PercentCompletePropType.class)) {
Integer pc = val.getPercentComplete();
if (pc != null) {
PercentCompletePropType p = new PercentCompletePropType();
p.setInteger(BigInteger.valueOf(pc));
pl.add(of.createPercentComplete(p));
}
}
if (emit(pattern, masterClass, PriorityPropType.class)) {
Integer prio = val.getPriority();
if (prio != null) {
PriorityPropType p = new PriorityPropType();
p.setInteger(BigInteger.valueOf(prio));
pl.add(of.createPriority(p));
}
}
if (emit(pattern, masterClass, RelatedToPropType.class)) {
BwRelatedTo relto = val.getRelatedTo();
if (relto != null) {
RelatedToPropType rt = new RelatedToPropType();
rt.setUid(relto.getValue());
if (relto.getRelType() != null) {
ArrayOfParameters pars = getAop(rt);
ReltypeParamType r = new ReltypeParamType();
r.setText(relto.getRelType());
JAXBElement<ReltypeParamType> param = of.createReltype(r);
pars.getBaseParameter().add(param);
}
pl.add(of.createRelatedTo(rt));
}
}
if (emit(pattern, masterClass, ResourcesPropType.class)) {
if (val.getNumResources() > 0) {
/* This event has a resource */
ResourcesPropType r = new ResourcesPropType();
List<String> rl = r.getText();
for (BwString str : val.getResources()) {
// LANG
rl.add(str.getValue());
}
pl.add(of.createResources(r));
}
}
if (emit(pattern, masterClass, SequencePropType.class)) {
if (val.getSequence() > 0) {
SequencePropType s = new SequencePropType();
s.setInteger(BigInteger.valueOf(val.getSequence()));
pl.add(of.createSequence(s));
}
}
if (emit(pattern, masterClass, StatusPropType.class)) {
String status = val.getStatus();
if ((status != null) && !status.equals(BwEvent.statusMasterSuppressed)) {
StatusPropType s = new StatusPropType();
s.setText(status);
pl.add(of.createStatus(s));
}
}
if (emit(pattern, masterClass, SummaryPropType.class)) {
BwString bwstr = val.findSummary(null);
if (bwstr != null) {
SummaryPropType s = new SummaryPropType();
s.setText(bwstr.getValue());
s = (SummaryPropType) langProp(s, bwstr);
pl.add(of.createSummary(s));
}
}
if (emit(pattern, masterClass, TranspPropType.class)) {
String strval = val.getTransparency();
if ((strval != null) && (strval.length() > 0)) {
TranspPropType t = new TranspPropType();
t.setText(strval);
pl.add(of.createTransp(t));
}
}
if (emit(pattern, masterClass, UidPropType.class)) {
UidPropType uid = new UidPropType();
uid.setText(val.getUid());
pl.add(of.createUid(uid));
}
if (emit(pattern, masterClass, UrlPropType.class)) {
String strval = val.getLink();
if (strval != null) {
// Possibly drop this if we do it on input and check all data
strval = strval.trim();
}
if ((strval != null) && (strval.length() > 0)) {
UrlPropType u = new UrlPropType();
u.setUri(strval);
pl.add(of.createUrl(u));
}
}
if (emit(pattern, masterClass, XBedeworkCostPropType.class)) {
if (val.getCost() != null) {
XBedeworkCostPropType c = new XBedeworkCostPropType();
c.setText(val.getCost());
pl.add(of.createXBedeworkCost(c));
}
}
if (val.getNumXproperties() > 0) {
try {
xpropertiesToXcal(pl, val.getXproperties(), pattern, masterClass, wrapXprops);
} catch (Throwable t) {
// XXX For the moment swallow these.
error(t);
}
}
if (!isInstance && !isOverride && val.testRecurring()) {
doRecurring(pattern, masterClass, val, pl);
}
return el;
} catch (final CalFacadeException cfe) {
throw cfe;
} catch (final Throwable t) {
throw new CalFacadeException(t);
}
}
use of ietf.params.xml.ns.icalendar_2.BasePropertyType in project bw-calendar-engine by Bedework.
the class Xalarms method toBwAlarm.
/**
* The generated alarm may not be a valid alarm if it is being used as a
* selector. It must have at least the action as a selector.
*
* @param alarm
* @param validate - true if alarm must be valid and complete
* @return ValarmType
* @throws CalFacadeException
*/
public static BwAlarm toBwAlarm(final ValarmType alarm, final boolean validate) throws CalFacadeException {
BwAlarm ba = new BwAlarm();
/* ============ Action =================== */
ActionPropType action = (ActionPropType) XcalUtil.findProperty(alarm, XcalTags.action);
if (action == null) {
throw new CalFacadeException("Invalid alarm - no action");
}
String actionVal = action.getText().toUpperCase();
int atype = -1;
for (int i = 0; i < BwAlarm.alarmTypes.length; i++) {
if (actionVal.equals(BwAlarm.alarmTypes[i])) {
atype = i;
break;
}
}
if (atype < 0) {
throw new CalFacadeException("Unhandled alarm action");
}
ba.setAlarmType(atype);
/* ============ Trigger =================== */
TriggerPropType tr = (TriggerPropType) XcalUtil.findProperty(alarm, XcalTags.trigger);
if (tr == null) {
if (validate) {
throw new CalFacadeException("Invalid alarm - no action");
}
} else {
if (tr.getDateTime() != null) {
ba.setTrigger(XcalUtil.getIcalFormatDateTime(tr.getDateTime()));
ba.setTriggerDateTime(true);
} else {
ba.setTrigger(tr.getDuration());
RelatedParamType r = (RelatedParamType) XcalUtil.findParam(tr, XcalTags.related);
ba.setTriggerStart((r == null) || (r.getText().toUpperCase().equals("START")));
}
}
/* ============ Duration =================== */
DurationPropType dur = (DurationPropType) XcalUtil.findProperty(alarm, XcalTags.duration);
if (dur != null) {
// MUST have repeat
RepeatPropType rep = (RepeatPropType) XcalUtil.findProperty(alarm, XcalTags.repeat);
ba.setDuration(dur.getDuration());
if (rep == null) {
if (validate) {
throw new CalFacadeException("Invalid alarm - no repeat");
}
} else {
ba.setRepeat(rep.getInteger().intValue());
}
}
/* ============ Description ============ */
if ((atype == BwAlarm.alarmTypeDisplay) || (atype == BwAlarm.alarmTypeEmail) || (atype == BwAlarm.alarmTypeProcedure)) {
DescriptionPropType desc = (DescriptionPropType) XcalUtil.findProperty(alarm, XcalTags.description);
if (desc != null) {
ba.setDescription(desc.getText());
}
}
/* ============ Summary ============ */
if (atype == BwAlarm.alarmTypeEmail) {
SummaryPropType s = (SummaryPropType) XcalUtil.findProperty(alarm, XcalTags.summary);
if (s != null) {
ba.setSummary(s.getText());
}
}
if ((atype == BwAlarm.alarmTypeAudio) || (atype == BwAlarm.alarmTypeEmail) || (atype == BwAlarm.alarmTypeProcedure)) {
AttachPropType a = (AttachPropType) XcalUtil.findProperty(alarm, XcalTags.attach);
// XXX Onl handle 1 attachment
if ((a != null) && (a.getUri() != null)) {
ba.setAttach(a.getUri());
}
}
if (atype == BwAlarm.alarmTypeEmail) {
for (JAXBElement<? extends BasePropertyType> bpel : alarm.getProperties().getBasePropertyOrTzid()) {
if (!bpel.getName().equals(XcalTags.attendee)) {
continue;
}
AttendeePropType attp = (AttendeePropType) bpel.getValue();
BwAttendee batt = new BwAttendee();
batt.setAttendeeUri(attp.getCalAddress());
ba.addAttendee(batt);
}
}
return ba;
}
use of ietf.params.xml.ns.icalendar_2.BasePropertyType in project bw-calendar-engine by Bedework.
the class Xutil method tzidProp.
protected static BasePropertyType tzidProp(final BasePropertyType prop, final String val) {
if (val == null) {
return prop;
}
final ArrayOfParameters pars = getAop(prop);
final TzidParamType tzid = new TzidParamType();
tzid.setText(val);
final JAXBElement<TzidParamType> t = of.createTzid(tzid);
pars.getBaseParameter().add(t);
return prop;
}
use of ietf.params.xml.ns.icalendar_2.BasePropertyType in project bw-calendar-engine by Bedework.
the class Xutil method getAop.
protected static ArrayOfParameters getAop(final BasePropertyType prop) {
ArrayOfParameters pars = prop.getParameters();
if (pars == null) {
pars = new ArrayOfParameters();
prop.setParameters(pars);
}
return pars;
}
Aggregations