001package org.nuxeo.ecm.agenda.operations;
002
003import java.util.Date;
004
005import org.nuxeo.ecm.agenda.AgendaService;
006import org.nuxeo.ecm.automation.OperationContext;
007import org.nuxeo.ecm.automation.core.Constants;
008import org.nuxeo.ecm.automation.core.annotations.Context;
009import org.nuxeo.ecm.automation.core.annotations.Operation;
010import org.nuxeo.ecm.automation.core.annotations.OperationMethod;
011import org.nuxeo.ecm.automation.core.annotations.Param;
012import org.nuxeo.ecm.automation.jaxrs.io.documents.PaginableDocumentModelListImpl;
013import org.nuxeo.ecm.core.api.CoreSession;
014import org.nuxeo.ecm.core.api.DocumentModelList;
015import org.nuxeo.ecm.platform.query.core.DocumentModelListPageProvider;
016
017/**
018 * Operation to list events between two dates to display them into a calendar
019 *
020 * @author <a href="mailto:akervern@nuxeo.com">Arnaud Kervern</a>
021 * @since 5.6
022 */
023@Operation(id = ListAgendaEvents.ID, category = Constants.CAT_DOCUMENT, label = "List Events", description = "List Events between two dates")
024public class ListAgendaEvents {
025
026    protected static final String ID = "VEVENT.List";
027
028    @Context
029    protected OperationContext context;
030
031    @Context
032    protected AgendaService agendaService;
033
034    @Context
035    protected CoreSession session;
036
037    @Param(name = "contextPath")
038    protected String contextPath;
039
040    @Param(name = "dtStart", required = false)
041    protected Date dtStart;
042
043    @Param(name = "dtEnd", required = false)
044    protected Date dtEnd;
045
046    @Param(name = "limit", required = false)
047    protected int limit = 5;
048
049    @Param(name = "documentLinkBuilder", required = false)
050    protected String documentLinkBuilder;
051
052    @OperationMethod
053    public PaginableDocumentModelListImpl run() {
054        DocumentModelList events;
055        if (dtStart != null) {
056            events = agendaService.listEvents(session, contextPath, dtStart, dtEnd);
057        } else {
058            events = agendaService.listEvents(session, contextPath, limit);
059        }
060        return new PaginableDocumentModelListImpl(new DocumentModelListPageProvider(events), documentLinkBuilder);
061    }
062}