use of org.olat.commons.calendar.model.KalendarEventLink in project openolat by klemens.
the class ICalFileCalendarManager method getKalendarEvent.
/**
* Build a KalendarEvent out of a source VEvent.
* @param event
* @return
*/
private KalendarEvent getKalendarEvent(VEvent event) {
// subject
Summary eventsummary = event.getSummary();
String subject = "";
if (eventsummary != null)
subject = eventsummary.getValue();
// start
DtStart dtStart = event.getStartDate();
Date start = dtStart.getDate();
Duration dur = event.getDuration();
// end
Date end = null;
if (dur != null) {
end = dur.getDuration().getTime(start);
} else if (event.getEndDate() != null) {
end = event.getEndDate().getDate();
}
// check all day event first
boolean isAllDay = false;
Parameter dateParameter = event.getProperties().getProperty(Property.DTSTART).getParameters().getParameter(Value.DATE.getName());
if (dateParameter != null) {
isAllDay = true;
// Make sure the time of the dates are 00:00 localtime because DATE fields in iCal are GMT 00:00
// Note that start date and end date can have different offset because of daylight saving switch
java.util.TimeZone timezone = java.util.GregorianCalendar.getInstance().getTimeZone();
start = new Date(start.getTime() - timezone.getOffset(start.getTime()));
end = new Date(end.getTime() - timezone.getOffset(end.getTime()));
// adjust end date: ICal sets end dates to the next day
end = new Date(end.getTime() - (1000 * 60 * 60 * 24));
} else if (start != null && end != null && (end.getTime() - start.getTime()) == (24 * 60 * 60 * 1000)) {
// check that start has no hour, no minute and no second
java.util.Calendar cal = java.util.Calendar.getInstance();
cal.setTime(start);
isAllDay = cal.get(java.util.Calendar.HOUR_OF_DAY) == 0 && cal.get(java.util.Calendar.MINUTE) == 0 && cal.get(java.util.Calendar.SECOND) == 0 && cal.get(java.util.Calendar.MILLISECOND) == 0;
// adjust end date: ICal sets end dates to the next day
end = new Date(end.getTime() - (1000 * 60 * 60 * 24));
}
Uid eventuid = event.getUid();
String uid;
if (eventuid != null) {
uid = eventuid.getValue();
} else {
uid = CodeHelper.getGlobalForeverUniqueID();
}
RecurrenceId eventRecurenceId = event.getRecurrenceId();
String recurrenceId = null;
if (eventRecurenceId != null) {
recurrenceId = eventRecurenceId.getValue();
}
KalendarEvent calEvent = new KalendarEvent(uid, recurrenceId, subject, start, end);
calEvent.setAllDayEvent(isAllDay);
// classification
Clazz classification = event.getClassification();
if (classification != null) {
String sClass = classification.getValue();
int iClassification = KalendarEvent.CLASS_PRIVATE;
if (sClass.equals(ICAL_CLASS_PRIVATE.getValue()))
iClassification = KalendarEvent.CLASS_PRIVATE;
else if (sClass.equals(ICAL_CLASS_X_FREEBUSY.getValue()))
iClassification = KalendarEvent.CLASS_X_FREEBUSY;
else if (sClass.equals(ICAL_CLASS_PUBLIC.getValue()))
iClassification = KalendarEvent.CLASS_PUBLIC;
calEvent.setClassification(iClassification);
}
// created/last modified
Created created = event.getCreated();
if (created != null) {
calEvent.setCreated(created.getDate().getTime());
}
// created/last modified
Contact contact = (Contact) event.getProperty(Property.CONTACT);
if (contact != null) {
calEvent.setCreatedBy(contact.getValue());
}
LastModified lastModified = event.getLastModified();
if (lastModified != null) {
calEvent.setLastModified(lastModified.getDate().getTime());
}
Description description = event.getDescription();
if (description != null) {
calEvent.setDescription(description.getValue());
}
// location
Location location = event.getLocation();
if (location != null) {
calEvent.setLocation(location.getValue());
}
// links if any
PropertyList linkProperties = event.getProperties(ICAL_X_OLAT_LINK);
List<KalendarEventLink> kalendarEventLinks = new ArrayList<KalendarEventLink>();
for (Iterator<?> iter = linkProperties.iterator(); iter.hasNext(); ) {
XProperty linkProperty = (XProperty) iter.next();
if (linkProperty != null) {
String encodedLink = linkProperty.getValue();
StringTokenizer st = new StringTokenizer(encodedLink, "§", false);
if (st.countTokens() >= 4) {
String provider = st.nextToken();
String id = st.nextToken();
String displayName = st.nextToken();
String uri = st.nextToken();
String iconCss = "";
// migration: iconCss has been added later, check if available first
if (st.hasMoreElements()) {
iconCss = st.nextToken();
}
KalendarEventLink eventLink = new KalendarEventLink(provider, id, displayName, uri, iconCss);
kalendarEventLinks.add(eventLink);
}
}
}
calEvent.setKalendarEventLinks(kalendarEventLinks);
Property comment = event.getProperty(ICAL_X_OLAT_COMMENT);
if (comment != null)
calEvent.setComment(comment.getValue());
Property numParticipants = event.getProperty(ICAL_X_OLAT_NUMPARTICIPANTS);
if (numParticipants != null)
calEvent.setNumParticipants(Integer.parseInt(numParticipants.getValue()));
Property participants = event.getProperty(ICAL_X_OLAT_PARTICIPANTS);
if (participants != null) {
StringTokenizer strTok = new StringTokenizer(participants.getValue(), "§", false);
String[] parts = new String[strTok.countTokens()];
for (int i = 0; strTok.hasMoreTokens(); i++) {
parts[i] = strTok.nextToken();
}
calEvent.setParticipants(parts);
}
Property sourceNodId = event.getProperty(ICAL_X_OLAT_SOURCENODEID);
if (sourceNodId != null) {
calEvent.setSourceNodeId(sourceNodId.getValue());
}
// managed properties
Property managed = event.getProperty(ICAL_X_OLAT_MANAGED);
if (managed != null) {
String value = managed.getValue();
if ("true".equals(value)) {
value = "all";
}
CalendarManagedFlag[] values = CalendarManagedFlag.toEnum(value);
calEvent.setManagedFlags(values);
}
Property externalId = event.getProperty(ICAL_X_OLAT_EXTERNAL_ID);
if (externalId != null) {
calEvent.setExternalId(externalId.getValue());
}
Property externalSource = event.getProperty(ICAL_X_OLAT_EXTERNAL_SOURCE);
if (externalSource != null) {
calEvent.setExternalSource(externalSource.getValue());
}
// recurrence
if (event.getProperty(ICAL_RRULE) != null) {
calEvent.setRecurrenceRule(event.getProperty(ICAL_RRULE).getValue());
}
// recurrence exclusions
if (event.getProperty(ICAL_EXDATE) != null) {
calEvent.setRecurrenceExc(event.getProperty(ICAL_EXDATE).getValue());
}
return calEvent;
}
use of org.olat.commons.calendar.model.KalendarEventLink in project openolat by klemens.
the class CalendarDetailsController method renderEventLinks.
private List<LinkWrapper> renderEventLinks() {
List<LinkWrapper> linkWrappers = new ArrayList<>();
List<KalendarEventLink> kalendarEventLinks = calEvent.getKalendarEventLinks();
if (kalendarEventLinks != null && !kalendarEventLinks.isEmpty()) {
String rootUri = Settings.getServerContextPathURI();
for (KalendarEventLink link : kalendarEventLinks) {
LinkWrapper wrapper = new LinkWrapper();
String uri = link.getURI();
String iconCssClass = link.getIconCssClass();
if (!StringHelper.containsNonWhitespace(iconCssClass)) {
String displayName = link.getDisplayName();
iconCssClass = CSSHelper.createFiletypeIconCssClassFor(displayName);
}
wrapper.setUri(uri);
wrapper.setDisplayName(link.getDisplayName());
wrapper.setTitle(StringEscapeUtils.escapeHtml(link.getDisplayName()));
if (StringHelper.containsNonWhitespace(iconCssClass)) {
wrapper.setCssClass(iconCssClass);
}
if (uri.startsWith(rootUri)) {
// intern link with absolute URL
wrapper.setIntern(true);
} else if (uri.contains("://")) {
// extern link with absolute URL
wrapper.setIntern(false);
} else {
wrapper.setIntern(true);
}
if (wrapper.isIntern()) {
Link ooLink = LinkFactory.createLink("link-intern-" + CodeHelper.getRAMUniqueID(), "intern.link", getTranslator(), mainVC, this, Link.NONTRANSLATED);
ooLink.setCustomDisplayText(StringHelper.escapeHtml(link.getDisplayName()));
ooLink.setUserObject(wrapper);
if (StringHelper.containsNonWhitespace(wrapper.getCssClass())) {
ooLink.setIconLeftCSS("o_icon ".concat(wrapper.getCssClass()));
}
wrapper.setLink(ooLink);
}
linkWrappers.add(wrapper);
}
}
return linkWrappers;
}
use of org.olat.commons.calendar.model.KalendarEventLink in project openolat by klemens.
the class MediaLinksController method createLinkWrapper.
private LinkWrapper createLinkWrapper() {
String id = UUID.randomUUID().toString().replaceAll("-", "");
KalendarEventLink newLink = new KalendarEventLink(provider, id, "", "", "");
LinkWrapper newLinkWrapper = new LinkWrapper(newLink);
return newLinkWrapper;
}
use of org.olat.commons.calendar.model.KalendarEventLink in project openolat by klemens.
the class ExternalLinksController method formInnerEvent.
@Override
protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) {
if (source == newButton) {
String id = UUID.randomUUID().toString().replaceAll("-", "");
KalendarEventLink link = new KalendarEventLink(EXTERNAL_LINKS_PROVIDER, id, "", "", "");
LinkWrapper linkWrapper = new LinkWrapper(link);
externalLinks.add(linkWrapper);
addNewFormLink(linkWrapper, linksContainer);
} else if (source.getUserObject() instanceof LinkWrapper) {
LinkWrapper link = (LinkWrapper) source.getUserObject();
if (link.getDelButton().equals(source)) {
externalLinks.remove(link);
} else if (link.getAddButton().equals(source)) {
int index = externalLinks.indexOf(link);
LinkWrapper newLinkWrapper = createLinkWrapper();
addNewFormLink(newLinkWrapper, linksContainer);
if (index >= 0 && index + 1 < externalLinks.size()) {
externalLinks.add(index + 1, newLinkWrapper);
} else {
externalLinks.add(newLinkWrapper);
}
}
}
}
use of org.olat.commons.calendar.model.KalendarEventLink in project openolat by klemens.
the class CourseLinkProviderController method setKalendarEvent.
@Override
public void setKalendarEvent(KalendarEvent kalendarEvent) {
this.kalendarEvent = kalendarEvent;
// clear all selections
clearSelection(courseNodeTreeModel.getRootNode());
multiSelectTree.deselectAll();
for (KalendarEventLink link : kalendarEvent.getKalendarEventLinks()) {
if (link.getProvider().equals(COURSE_LINK_PROVIDER)) {
String nodeId = link.getId();
TreeNode node = courseNodeTreeModel.getNodeById(nodeId);
if (node == null) {
String fallBackNodeId = availableCourses.get(0).getResourceableId() + "_" + nodeId;
node = courseNodeTreeModel.getNodeById(fallBackNodeId);
}
if (node == null && nodeId.indexOf("_") < 0) {
// course selected -> map to root node
for (ICourse course : availableCourses) {
if (nodeId.equals(course.getResourceableId().toString())) {
String fallBackNodeId = course.getResourceableId() + "_" + course.getRunStructure().getRootNode().getIdent();
node = courseNodeTreeModel.getNodeById(fallBackNodeId);
}
}
}
if (node != null) {
node.setSelected(true);
multiSelectTree.select(node.getIdent(), true);
multiSelectTree.open(node);
}
}
}
}
Aggregations