use of com.zimbra.common.calendar.Attach in project zm-mailbox by Zimbra.
the class Alarm method decodeMetadata.
/**
* Create an Alarm from Metadata. Return value may be null.
* @param meta
* @return
* @throws ServiceException
* @throws ParseException
*/
public static Alarm decodeMetadata(Metadata meta) throws ServiceException {
Action action = expandAction(meta.get(FN_ACTION));
if (!actionAllowed(action))
return null;
TriggerType tt = expandTriggerType(meta.get(FN_TRIGGER_TYPE));
TriggerRelated triggerRelated = null;
ParsedDuration triggerRelative = null;
ParsedDateTime triggerAbsolute = null;
if (TriggerType.ABSOLUTE.equals(tt)) {
try {
triggerAbsolute = ParsedDateTime.parseUtcOnly(meta.get(FN_TRIGGER_ABSOLUTE));
} catch (ParseException e) {
throw ServiceException.FAILURE("Error parsing metadata for alarm", e);
}
} else {
triggerRelative = ParsedDuration.parse(meta.get(FN_TRIGGER_RELATIVE));
triggerRelated = expandTriggerRelated(meta.get(FN_TRIGGER_RELATED, null));
}
ParsedDuration repeatDuration = null;
int repeatCount = 0;
String val = meta.get(FN_REPEAT_DURATION, null);
if (val != null) {
repeatDuration = ParsedDuration.parse(val);
repeatCount = (int) meta.getLong(FN_REPEAT_COUNT, 0);
}
String description = meta.get(FN_DESCRIPTION, null);
String summary = meta.get(FN_SUMMARY, null);
Attach attach = null;
Metadata metaAttach = meta.getMap(FN_ATTACH, true);
if (metaAttach != null)
attach = Util.decodeAttachFromMetadata(metaAttach);
int numAts = (int) meta.getLong(FN_NUM_ATTENDEES, 0);
List<ZAttendee> attendees = new ArrayList<ZAttendee>(numAts);
for (int i = 0; i < numAts; i++) {
try {
Metadata metaAttendee = meta.getMap(FN_ATTENDEE + i, true);
if (metaAttendee != null)
attendees.add(new ZAttendee(metaAttendee));
} catch (ServiceException e) {
ZimbraLog.calendar.warn("Problem decoding attendee " + i + " in ALARM ");
}
}
Alarm alarm = new Alarm(action, tt, triggerRelated, triggerRelative, triggerAbsolute, repeatDuration, repeatCount, description, summary, attach, attendees, Util.decodeXPropsFromMetadata(meta));
return alarm;
}
Aggregations