Search in sources :

Example 26 with KalendarEventLink

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;
}
Also used : Description(net.fortuna.ical4j.model.property.Description) ArrayList(java.util.ArrayList) KalendarEventLink(org.olat.commons.calendar.model.KalendarEventLink) Created(net.fortuna.ical4j.model.property.Created) LastModified(net.fortuna.ical4j.model.property.LastModified) CalendarManagedFlag(org.olat.commons.calendar.CalendarManagedFlag) Clazz(net.fortuna.ical4j.model.property.Clazz) XProperty(net.fortuna.ical4j.model.property.XProperty) Property(net.fortuna.ical4j.model.Property) XProperty(net.fortuna.ical4j.model.property.XProperty) Calendar(net.fortuna.ical4j.model.Calendar) KalendarEvent(org.olat.commons.calendar.model.KalendarEvent) Duration(net.fortuna.ical4j.model.property.Duration) Date(java.util.Date) ExDate(net.fortuna.ical4j.model.property.ExDate) Contact(net.fortuna.ical4j.model.property.Contact) Uid(net.fortuna.ical4j.model.property.Uid) StringTokenizer(java.util.StringTokenizer) DtStart(net.fortuna.ical4j.model.property.DtStart) PropertyList(net.fortuna.ical4j.model.PropertyList) Summary(net.fortuna.ical4j.model.property.Summary) Parameter(net.fortuna.ical4j.model.Parameter) RecurrenceId(net.fortuna.ical4j.model.property.RecurrenceId) Location(net.fortuna.ical4j.model.property.Location)

Example 27 with KalendarEventLink

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;
}
Also used : ArrayList(java.util.ArrayList) KalendarEventLink(org.olat.commons.calendar.model.KalendarEventLink) KalendarEventLink(org.olat.commons.calendar.model.KalendarEventLink) Link(org.olat.core.gui.components.link.Link)

Example 28 with KalendarEventLink

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;
}
Also used : KalendarEventLink(org.olat.commons.calendar.model.KalendarEventLink)

Example 29 with KalendarEventLink

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);
            }
        }
    }
}
Also used : KalendarEventLink(org.olat.commons.calendar.model.KalendarEventLink)

Example 30 with KalendarEventLink

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);
            }
        }
    }
}
Also used : GenericTreeNode(org.olat.core.gui.components.tree.GenericTreeNode) TreeNode(org.olat.core.gui.components.tree.TreeNode) ICourse(org.olat.course.ICourse) KalendarEventLink(org.olat.commons.calendar.model.KalendarEventLink)

Aggregations

KalendarEventLink (org.olat.commons.calendar.model.KalendarEventLink)32 ArrayList (java.util.ArrayList)14 Kalendar (org.olat.commons.calendar.model.Kalendar)6 KalendarEvent (org.olat.commons.calendar.model.KalendarEvent)6 Date (java.util.Date)4 HashSet (java.util.HashSet)4 PropertyList (net.fortuna.ical4j.model.PropertyList)4 Contact (net.fortuna.ical4j.model.property.Contact)4 Created (net.fortuna.ical4j.model.property.Created)4 Description (net.fortuna.ical4j.model.property.Description)4 ExDate (net.fortuna.ical4j.model.property.ExDate)4 LastModified (net.fortuna.ical4j.model.property.LastModified)4 Location (net.fortuna.ical4j.model.property.Location)4 RecurrenceId (net.fortuna.ical4j.model.property.RecurrenceId)4 Uid (net.fortuna.ical4j.model.property.Uid)4 XProperty (net.fortuna.ical4j.model.property.XProperty)4 GenericTreeNode (org.olat.core.gui.components.tree.GenericTreeNode)4 TreeNode (org.olat.core.gui.components.tree.TreeNode)3 OLATResourceable (org.olat.core.id.OLATResourceable)3 ContextEntry (org.olat.core.id.context.ContextEntry)3