Package com.google.api.gwt.samples.calendar.client

Source Code of com.google.api.gwt.samples.calendar.client.CalendarEntryPoint

/*
* Copyright 2012 Google Inc.
*
* Licensed 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 com.google.api.gwt.samples.calendar.client;

import com.google.api.gwt.client.GoogleApiRequestTransport;
import com.google.api.gwt.client.OAuth2Login;
import com.google.api.gwt.services.calendar.shared.Calendar;
import com.google.api.gwt.services.calendar.shared.Calendar.CalendarAuthScope;
import com.google.api.gwt.services.calendar.shared.Calendar.CalendarListContext.ListRequest.MinAccessRole;
import com.google.api.gwt.services.calendar.shared.Calendar.EventsContext;
import com.google.api.gwt.services.calendar.shared.model.CalendarList;
import com.google.api.gwt.services.calendar.shared.model.Event;
import com.google.api.gwt.services.calendar.shared.model.EventDateTime;
import com.google.api.gwt.shared.EmptyResponse;
import com.google.gwt.core.client.Callback;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.shared.SimpleEventBus;
import com.google.gwt.i18n.client.DateTimeFormat;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.web.bindery.requestfactory.shared.Receiver;

import java.util.Date;

/**
* A simple GWT module that performs some common Calendar API operations:
*
* <ul>
*   <li>List calendars that the authenticated user has write access to</li>
*   <li>Insert a new event</li>
*   <li>Retrieve the newly-inserted event</li>
*   <li>Update the event</li>
*   <li>Delete the event</li>
* </ul>
*/
public class CalendarEntryPoint implements EntryPoint {

  private static final String CLIENT_ID = "692753340433.apps.googleusercontent.com";
  private static final String API_KEY = "AIzaSyA5bNyuRQFaTQle_YC5BUH7tQzRmAPiqsM";
  private static final String APPLICATION_NAME = "CalendarSample/1.0";
  private static final Calendar calendar = GWT.create(Calendar.class);

  @Override
  public void onModuleLoad() {
    calendar.initialize(new SimpleEventBus(),
        new GoogleApiRequestTransport(APPLICATION_NAME, API_KEY));

    final Button b = new Button("Authenticate to insert, update and delete an event");
    b.addClickHandler(new ClickHandler() {
      @Override
      public void onClick(ClickEvent e) {
        login();
        b.setVisible(false);
      }
    });
    RootPanel.get().add(b);
  }

  private void login() {
    OAuth2Login.get().authorize(CLIENT_ID, CalendarAuthScope.CALENDAR,
        new Callback<Void, Exception>() {
          @Override
          public void onSuccess(Void v) {
            getCalendarId();
          }

          @Override
          public void onFailure(Exception e) {
            GWT.log("Auth failed:", e);
          }
        });
  }

  /** Gets the calendar ID of some calendar that the user can write to. */
  private void getCalendarId() {
    // We need to find an ID of a calendar that we have permission to write events to. We'll just
    // pick the first one that gets returned, and we will delete the event when we're done.
    calendar.calendarList().list().setMinAccessRole(MinAccessRole.OWNER)
        .fire(new Receiver<CalendarList>() {
          @Override
          public void onSuccess(CalendarList list) {
            String calendarId = list.getItems().get(0).getId();

            insertEvent(calendarId);
          }
        });
  }

  /** Insert a new event for the given calendar ID. */
  private void insertEvent(final String calendarId) {
    String today = DateTimeFormat.getFormat("yyyy-MM-dd").format(new Date());
    EventsContext ctx = calendar.events();
    Event event = ctx.create(Event.class)
        .setSummary("Learn about the Google API GWT client library")
        .setStart(ctx.create(EventDateTime.class).setDateTime(today))
        .setEnd(ctx.create(EventDateTime.class).setDateTime(today));

    // Note that the EventsContext used to insert the Event has to be the same one used to create
    // it.
    ctx.insert(calendarId, event).fire(new Receiver<Event>() {
      @Override
      public void onSuccess(Event inserted) {
        // The event has been inserted.

        // Now we'll demonstrate retrieving it and updating it.
        String eventId = inserted.getId();
        getEventForUpdate(calendarId, eventId);
      }
    });
  }

  /** Get an event for the purposes of updating it. */
  private void getEventForUpdate(final String calendarId, final String eventId) {
    final EventsContext ctx = calendar.events();
    ctx.get(calendarId, eventId).fire(new Receiver<Event>() {
      @Override
      public void onSuccess(Event event) {
        // Note that the EventsContext used to update the event has to be the same one that was
        // used to retrieve it.
        updateEvent(ctx, event, calendarId, eventId);
      }
    });
  }

  /** Update an event that was previously retrieved. */
  private void updateEvent(EventsContext ctx, Event event, final String calendarId,
      final String eventId) {
    String newSummary = "";
    while (newSummary.isEmpty()) {
      newSummary = Window.prompt("Provide a new name for the event", "");
    }
    Event editableEvent = ctx.edit(event); // Don't forget to call edit()
    editableEvent.setSummary(newSummary);
    ctx.update(calendarId, eventId, editableEvent).fire(new Receiver<Event> (){
      @Override
      public void onSuccess(Event updated) {
        // The event has been updated. Now we'll delete it.

        deleteEvent(calendarId, eventId);
      }
    });
  }

  /** Delete an event by its ID. */
  private void deleteEvent(String calendarId, String eventId) {
    calendar.events().delete(calendarId, eventId).fire(new Receiver<EmptyResponse>() {
      @Override
      public void onSuccess(EmptyResponse r) {
        // The event has been deleted. And we're done!
        Window.alert("Event deleted! Demo complete!");
      }
    });
  }
}
TOP

Related Classes of com.google.api.gwt.samples.calendar.client.CalendarEntryPoint

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.