@Component
public class GoogleCalendarSyncListener implements ApplicationListener<CourseLessonGoogleCalendarNeedToBeUpdatedEvent> {
private String getEventId(Lesson parameter) { // encapsulator method
return "cita" + parameter.getId();
}
// TODO bu daha genel olabilir.
@Configuration
static class Configurator {
@Bean
public Calendar client() {
List<String> scopes = Lists.newArrayList(CalendarScopes.CALENDAR);
try {
Calendar client = CalendarUtils.createCalendarClient(scopes);
return client;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
private final Logger logger = LoggerFactory.getLogger(getClass());
@Autowired
private LessonService lessonService;
@Autowired
private LessonUserService lessonUserService;
@Autowired
private Calendar client; // bunu da confige taşımak lazım
@Override
public void onApplicationEvent(CourseLessonGoogleCalendarNeedToBeUpdatedEvent courseLessonGoogleCalendarNeedToBeUpdatedEvent) {
try {
ProductType productType = courseLessonGoogleCalendarNeedToBeUpdatedEvent.getCourseRegistration().getCourse().getCategory().getProductType();
Course course = courseLessonGoogleCalendarNeedToBeUpdatedEvent.getCourseRegistration().getCourse();
List<Lesson> lessons = lessonService.loadLessonsByCourse(course);
int lessonCount = lessons.size();
for (Lesson lesson : lessons) {
String description = "";
try {
String eventId = getEventId(lesson); // RFC2938 bu kurala uygun olmalı
DateTime start = new DateTime(lesson.getDate(), TimeZone.getTimeZone("UTC+03:00"));
java.util.Calendar cal = java.util.Calendar.getInstance();
cal.setTime(lesson.getDate());
cal.add(java.util.Calendar.MINUTE, lesson.getLessonPricingTemplate().getDurationMinutes());
cal.getTime();
DateTime end = new DateTime(cal.getTime(), TimeZone.getTimeZone("UTC+03:00"));
description += lesson.getCourse().getCatName();
String color = "";
for (LessonUser lessonuser : lessonUserService.loadByLesson(lesson)) {
description += " " + lessonuser.getUser().getPrettyName();
switch (lessonuser.getUser().getUsername()) {
case "bgor":
color = Constants.BGORCOLOR;
break;
}
}
// TODO error checdking
description += lessonService.lessonIndex(lesson) + "/" + lessonCount;
Event event = new Event();
event.setColorId(color);
event.setId(eventId);
event.setReminders(new Event.Reminders().setUseDefault(false));
event.setSummary(description);
event.setStart(new EventDateTime().setDateTime(start));
event.setEnd(new EventDateTime().setDateTime(end));
event.setDescription(lesson.getCourse().getCatName());
List<EventAttendee> attendees = new ArrayList<>();
EventAttendee admin = new EventAttendee();
admin.setEmail("[email protected]");
attendees.add(admin);
List<LessonUser> lessonUsers = lessonUserService.loadByLesson(lesson);
lessonUsers.forEach(lu -> {
EventAttendee attendee = new EventAttendee();
if (lu.getUser().getEmail() != null) {
attendee.setEmail(lu.getUser().getEmail());
attendees.add(attendee);
}
});
event.setAttendees(attendees);
Event.Creator creator = new Event.Creator();
Event.Organizer organizer = new Event.Organizer();
creator.setEmail("[email protected]");
organizer.setEmail("[email protected]");
event.setCreator(creator);
event.setOrganizer(organizer);
logger.info("event %s (%s)\n", event.getSummary(), start);
saveOrUpdateEvent(event);
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
}
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
}
// By existing conf tomcat/.store/bt-calendar-sync/StoredCredentials must exist
// These are copy of btmuzikevi-parent/tokens/StoredCredential created by CalendarReader
private Event saveOrUpdateEvent(Event event) {
try {
System.out.println("client = " + client.getBaseUrl());
System.out.println("client = " + client.getRootUrl());
System.out.println("event.getId() = " + event.getId());
List<String> scopes = Lists.newArrayList(CalendarScopes.CALENDAR);
client = CalendarUtils.createCalendarClient(scopes);
Calendar.Events.List request = client.events().list("primary");
System.out.println("--------------------------------- ");
event = client.events().update("primary", event.getId(), event).execute(); // updated event
System.out.println(event.getId()+ " HUHA = " + event.getStart());
return event;
} catch (GoogleJsonResponseException e) { // burası özel bir değer veriyor
try {
event = client.events().insert("primary", event).execute();
return event;
} catch (IOException ioException) { // bu çok özel değil ama tüm detayı içeriyor
throw new RuntimeException(ioException); // tamamını runtimeexception olarak dönüyoruz.
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
Requested Oauth2 scopes:
- Google Calendar API .../auth/calendar See, edit, share, and permanently delete all the calendars you can access using Google Calendar
- Google Calendar API .../auth/calendar.acls See and change the sharing permissions of Google calendars you own
- Google Calendar API .../auth/calendar.events View and edit events on all your calendars
CalendarQuickstart or CalendarReader are fine, they read from the calendar but: When I try to write into the Calendar, I am getting :
Authorization Error Error 400: invalid_request Required parameter is missing: response_type
What am I missing? Thanks for any help in advance