⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gcalendar.java

📁 jsp级联下拉菜单
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
        }     
        
        return createDerbyCalEvent(updatedEntry);
    }
    
    /**
     * Delete an event
     *
     * @param editURLString
     *      The string representation of the edit URL
     */
    public void deleteEvent(final String editURLString) throws Exception {
        final URL editURL = new URL(editURLString);
        
        // Send the request. ry;        
        try {
            AccessController.doPrivileged(
                new PrivilegedExceptionAction<Object>() {
                    public Object run() throws Exception {
                        service.delete(editURL);
                        return null;
                    }
                }
            );
        } catch (PrivilegedActionException e) {
            handleException(e.getException(),
                "Unable to delete event with edit URL " + editURLString, null);
        }        
    }

    /**
     * Get the list of events.  You would want to
     * use this, for example, if you are trying to get the calendar when
     * the application first starts up.
     *
     * @return a HashMap of events for the calendar, where the hash id
     *      is the id of the event
     */
    public Collection<CalEvent> getEvents() throws Exception {
        
        CalendarEventFeed resultFeed = null;

        // Do this in a privileged block, as it connects to the Internet
        try {
            resultFeed = AccessController.doPrivileged(
                new PrivilegedExceptionAction<CalendarEventFeed>() {
                    public CalendarEventFeed run() throws Exception {
                        CalendarQuery myQuery = new CalendarQuery(feedUrl);

                        myQuery.setMinimumStartTime(DateTime.parseDateTime(
                                startDay + "T00:00:00" + gmtOffset));
                        myQuery.setMaximumStartTime(DateTime.parseDateTime(
                                endDay + "T23:59:59" + gmtOffset));

                        // Send the request and receive the response:
                        return service.query(myQuery, CalendarEventFeed.class);
                    }
                }
            );
        } catch (PrivilegedActionException e) {
            handleException(e.getException(), "Unable to get entries from " +
                    "Google Calendar", null);
        }
        
        // Build a list of DerbyCal events based on these entries
        ArrayList<CalEvent> calentries = new ArrayList<CalEvent>();

        // debugging
        // System.out.println("Entries from Google Calendar:");
                
        for ( EventEntry entry : resultFeed.getEntries() ) {
            calentries.add(createDerbyCalEvent(entry));            
        }

        return calentries;
    }
    
    public void clearCalendar() throws Exception {
        // Get the latest list of entries
        Collection<CalEvent> events = getEvents();
        
        // Delete the entries one at a time
        for ( CalEvent event : events ) {
            deleteEvent(event.getEditURL());
        }
    }
    
    /**
     * Create a Google EventEntry from an event object
     */
    private EventEntry createEventEntry(CalEvent event) throws Exception {
        EventEntry entry = new EventEntry();
        entry.setTitle(new PlainTextConstruct(event.getTitle()));
        entry.setId(event.getId());

        Person author = new Person(AUTHOR_NAME, null, AUTHOR_EMAIL);
        entry.getAuthors().add(author);

        DateTime startTime = DateTime.parseDateTime(event.getDate() + "T00:00:00" + 
                gmtOffset);
        startTime.setDateOnly(true);
        
        // An all day event has an end time of the next day.  Need to
        // calculate that using the wonderful Java date APIs...
        String endTimeString = getNextDay(event.getDate());
        DateTime endTime = DateTime.parseDateTime(endTimeString + "" +
                "T00:00:00" + gmtOffset);
        endTime.setDateOnly(true);

        When eventTimes = new When();
        eventTimes.setStartTime(startTime);
        eventTimes.setEndTime(endTime);
        entry.addTime(eventTimes);
        
        return entry;
    }
    
    /**
     * Create a DerbyCalEvent from an EventEntry
     */
    private CalEvent createDerbyCalEvent(EventEntry entry) throws Exception {
        String title = entry.getTitle().getPlainText();

        // Simplifying assumption: all entries are day-long events.
        // No more, no less
        List<When> times = entry.getTimes();
        String start = times.get(0).getStartTime().toString();

        String editURL = entry.getEditLink().getHref();

        CalEvent event = new CalEvent(entry.getId(), start, title, 
            editURL, entry.getVersionId());
        
        return event;
    }
    
    /**
     * Handle an exception received when invoking a method on Google Calendar
     *
     * @param e
     *      The exception that was encountered.  Obtain this by calling
     *      getException() on the PrivilegedActionException
     *
     * @param message
     *      This is the message specific to the invocation that got the exception,
     *      such as "unable to update event".  This is prepended upon the details
     *      provided by this method
     *
     * @param entry
     *      The event entry associated with this message, if available.  Otherwise
     *      set this to null.
     *
     * @throws Exception
     *      When the exception encountered should result in an exception being thrown
     *      to the caller.  This is almost always the case.
     */
    private void handleException(Exception e, String message, EventEntry entry) 
        throws Exception {

        String entryInfo = "";
        String id;
        String title;
        String date;
        if ( entry != null ) {
            id = parseId(entry.getId());
            title = entry.getTitle().getPlainText();
            List<When> times = entry.getTimes();
            date = times.get(0).getStartTime().toString();
                        
            entryInfo = date + ": " + title;
        }
        if ( e instanceof java.net.NoRouteToHostException ) {
            throw new NetworkDownException(e);
        }
        if ( e instanceof ResourceNotFoundException ) {
            message += ": the event " + entryInfo + " does not appear " +
                    "to exist.  Perhaps somebody else deleted it?";
        }
        else if ( e instanceof ServiceException ) {
            ServiceException se = (ServiceException)e;

            // Let's see if this is a conflict where we are trying to
            // update an entry that has been modified.  The error code
            // is 400, which is not helpful, it's supposed to be 403,
            // "conflict", but oh well...
            String responseBody = se.getResponseBody();
            
            if ( responseBody != null && 
                    responseBody.contains("Sequence ids from event") &&
                    responseBody.contains("do not match")) {
                message += ": unable to update event " +
                        entryInfo + ", it appears someone else has updated it." +
                        " The event will be updated to contain the latest " +
                        " version from Google Calendar.";
            }
            else {
                message += ": exception from Google Calendar.  HTTP error code " +
                        "is " + se.getHttpErrorCodeOverride() + "; response body is: " +
                        se.getResponseBody();
            }
        } else {
            message += ": please see next exception for details.";
        }
        
        throw new Exception(message, e);

     }
    
    /** 
     * Strip off the unique id of the entry from the full Google
     * Calendar id, which includes the Feed URL
     */
    private String parseId(String id) {
        if ( id == null ) {
            return null;
        }
        return id.substring(id.lastIndexOf("/") + 1, id.length());
    }
                
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -