use of ietf.params.xml.ns.icalendar_2.ReltypeParamType 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.ReltypeParamType in project bw-calendar-engine by Bedework.
the class RelatedToPropUpdater method applyUpdate.
public UpdateResult applyUpdate(final UpdateInfo ui) throws WebdavException {
ChangeTableEntry cte = ui.getCte();
BwEvent ev = ui.getEvent();
RelatedToPropType pr = (RelatedToPropType) ui.getProp();
ReltypeParamType rtparm = (ReltypeParamType) UpdaterUtil.getParam(pr, XcalTags.reltype);
String propRelType = "";
String propValType;
String propVal;
if (rtparm != null) {
propRelType = rtparm.getText();
}
if (pr.getText() != null) {
propValType = "";
propVal = pr.getText();
} else if (pr.getUri() != null) {
propValType = "URI";
propVal = pr.getUri();
} else {
propValType = "UID";
propVal = pr.getUid();
}
/* We encode related to (maybe) as triples - reltype, value-type, value */
String[] info = null;
BwXproperty xprop = null;
BwRelatedTo relto = ev.getRelatedTo();
if (relto != null) {
info = new String[3];
info[0] = relto.getRelType();
// default
info[1] = "";
info[2] = relto.getValue();
} else {
xprop = ev.findXproperty(BwXproperty.bedeworkRelatedTo);
if (xprop != null) {
String relx = xprop.getValue();
if (relx != null) {
info = Util.decodeArray(relx);
}
}
}
int pos = findRT(info, propRelType, propValType, propVal);
if (ui.isAdd()) {
if (pos >= 0) {
// Already there
return UpdateResult.getOkResult();
}
int iPos = info.length;
info = Arrays.copyOf(info, info.length + 3);
info[iPos] = propRelType;
info[iPos + 1] = propValType;
info[iPos + 2] = propVal;
ev.setRelatedTo(null);
if (xprop == null) {
xprop = new BwXproperty(BwXproperty.bedeworkRelatedTo, null, null);
ev.addXproperty(xprop);
}
String newval = Util.encodeArray(info);
xprop.setValue(newval);
cte.addAddedValue(newval);
return UpdateResult.getOkResult();
}
if (ui.isRemove()) {
if (pos < 0) {
// Nothing to remove
return UpdateResult.getOkResult();
}
if (info.length == 3) {
// removing only related-to
ev.setRelatedTo(null);
ev.removeXproperties(BwXproperty.bedeworkRelatedTo);
return UpdateResult.getOkResult();
}
String[] newInfo = new String[info.length - 3];
for (int i = 0; i < pos; i++) {
newInfo[i] = info[i];
}
for (int i = pos + 3; i < info.length; i++) {
newInfo[i] = info[i];
}
ev.setRelatedTo(null);
if (xprop == null) {
xprop = new BwXproperty(BwXproperty.bedeworkRelatedTo, null, null);
ev.addXproperty(xprop);
}
String newval = Util.encodeArray(newInfo);
xprop.setValue(newval);
cte.addRemovedValue(newval);
return UpdateResult.getOkResult();
}
if (ui.isChange()) {
// Change a value
if (pos < 0) {
// Nothing to change
return new UpdateResult("No comment to change");
}
info[pos] = propRelType;
info[pos + 1] = propValType;
info[pos + 2] = propVal;
ev.setRelatedTo(null);
if (xprop == null) {
xprop = new BwXproperty(BwXproperty.bedeworkRelatedTo, null, null);
ev.addXproperty(xprop);
}
String newval = Util.encodeArray(info);
xprop.setValue(newval);
cte.addChangedValue(newval);
return UpdateResult.getOkResult();
}
return UpdateResult.getOkResult();
}
Aggregations