All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.milton.http.annotated.scheduling.SchedulingInboxResource Maven / Gradle / Ivy

Go to download

Milton Community Edition: Supports DAV level 1 and is available on Apache2 license

There is a newer version: 4.0.3.2215
Show newest version
/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */

package io.milton.http.annotated.scheduling;

import io.milton.http.annotated.CTagAnnotationHandler;
import io.milton.http.caldav.CalendarSearchService;
import io.milton.http.exceptions.BadRequestException;
import io.milton.http.exceptions.NotAuthorizedException;
import io.milton.principal.CalDavPrincipal;
import io.milton.resource.CalendarCollection;
import io.milton.resource.PropFindableResource;
import io.milton.resource.Resource;
import java.util.Date;
import java.util.List;
import java.util.Optional;

/**
 * 4.2. Scheduling Inbox Collection


   A scheduling Inbox collection contains copies of incoming scheduling
   messages.  These may be requests sent by an Organizer, or replies
   sent by an Attendee in response to a request.

   A scheduling Inbox collection MUST report the DAV:collection and
   CALDAV:schedule-inbox XML elements in the value of the DAV:
   resourcetype property.  The element type declaration for CALDAV:
   schedule-inbox is:

      

   Example:

      
        
        
      

   Scheduling Inbox collections MUST only contain calendar object
   resources that obey the restrictions specified in iTIP [RFC5546].
   Consequently, scheduling Inbox collections MUST NOT contain any types
   of collection resources.  Restrictions defined in Section 4.1 of



Daboo & Desruisseaux     Expires April 28, 2011                [Page 13]


Internet-Draft        CalDAV Scheduling Extensions          October 2010


   CalDAV "calendar-access" [RFC4791] on calendar object resources
   contained in calendar collections (e.g., "UID" uniqueness) don't
   apply to calendar object resources contained in a scheduling Inbox
   collection.  Thus, multiple calendar object resources contained in a
   scheduling Inbox collection can have the same "UID" property value
   (i.e., multiple scheduling messages for the same calendar component).

   New WebDAV ACL [RFC3744] privileges can be set on the scheduling
   Inbox collection to control from whom the Calendar User associated
   with the scheduling Inbox collection will accept scheduling messages
   from.  See Section 13.1 for more details.

   A scheduling Inbox collection MUST NOT be a child (at any depth) of a
   calendar collection resource.

   The following WebDAV properties specified in CalDAV "calendar-access"
   [RFC4791] MAY also be defined on scheduling Inbox collections:

      CALDAV:calendar-timezone - when present this contains a time zone
      that the server can use when calendar date-time operations are
      carried out, for example when a time-range CALDAV:calendar-query
      REPORT is targeted at a scheduling Inbox collection.

      CALDAV:supported-calendar-component-set - when present this
      indicates the allowed calendar component types for scheduling
      messages delivered to the scheduling Inbox collection.

      CALDAV:supported-calendar-data - when present this indicates the
      allowed media types for scheduling messages delivered to the
      scheduling Inbox collection.

      CALDAV:max-resource-size - when present this indicates the maximum
      size of a resource in octets that the server is willing to accept
      for scheduling messages delivered to the scheduling Inbox
      collection.

      CALDAV:min-date-time - when present this indicates the earliest
      date and time (in UTC) that the server is willing to accept for
      any DATE or DATE-TIME value in scheduling messages delivered to
      the scheduling Inbox collection.

      CALDAV:max-date-time - when present this indicates the latest date
      and time (in UTC) that the server is willing to accept for any
      DATE or DATE-TIME value in scheduling messages delivered to the
      scheduling Inbox collection.

      CALDAV:max-instances - when present this indicates the maximum
      number of recurrence instances in scheduling messages delivered to



Daboo & Desruisseaux     Expires April 28, 2011                [Page 14]


Internet-Draft        CalDAV Scheduling Extensions          October 2010


      the scheduling Inbox collection.

      CALDAV:max-attendees-per-instance - when present this indicates
      the maximum number of ATTENDEE properties in any instance of
      scheduling messages delivered to the scheduling Inbox collection.

 *
 * @author brad
 */
public class SchedulingInboxResource extends BaseSchedulingResource implements CalendarCollection, PropFindableResource {

    public SchedulingInboxResource(CalDavPrincipal principal, CalendarSearchService calendarSearchService, String name) {
        super(principal, calendarSearchService, name);
    }


    @Override
    public Resource child(String childName) throws NotAuthorizedException, BadRequestException {
        for( Resource r : Optional.ofNullable(getChildren()).orElse(List.of()) ) {
            if( r.getName().equals(childName)) {
                return r;
            }
        }
        return null;
    }

    @Override
    public List getChildren() throws NotAuthorizedException, BadRequestException {
        return calendarSearchService.findAttendeeResources(principal);
    }

    @Override
    public String getCTag(){
        try {
            String ctag = calendarSearchService.findAttendeeResourcesCTag(principal);
            if( ctag == null ) {
                ctag = CTagAnnotationHandler.deriveCtag(this);
            }
            return ctag;
        } catch (NotAuthorizedException | BadRequestException ex) {
            throw new RuntimeException(ex);
        }
    }

    @Override
    public Date getCreateDate() {
        return principal.getCreateDate();
    }
//
//    @Override
//    public String getUniqueId() {
//        return principal.getName() + "_inbox";
//    }
//
//    @Override
//    public Date getModifiedDate() {
//        return super.getModifiedDate(); //To change body of generated methods, choose Tools | Templates.
//    }


}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy