package fi.otavanopisto.muikku.plugins.googlecalendar;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.enterprise.event.Observes;
import javax.inject.Inject;
import fi.otavanopisto.muikku.calendar.CalendarServiceException;
import fi.otavanopisto.muikku.events.LoginEvent;
import fi.otavanopisto.muikku.model.users.UserEntity;
import fi.otavanopisto.muikku.plugins.calendar.CalendarController;
import fi.otavanopisto.muikku.plugins.calendar.model.UserCalendar;
import fi.otavanopisto.muikku.users.UserEmailEntityController;
import fi.otavanopisto.muikku.users.UserEntityController;
public class GoogleCalendarLoginListener {
// TODO: Localize
private static final String CALENDAR_SUMMARY = "Muikku";
private static final String CALENDAR_DESCRIPTION = "Muikku";
@Inject
private Logger logger;
@Inject
private UserEntityController userEntityController;
@Inject
private UserEmailEntityController userEmailEntityController;
@Inject
private CalendarController calendarController;
@Inject
private GoogleCalendarClient googleCalendarClient;
public void onLogin(@Observes LoginEvent event) {
UserEntity userEntity = userEntityController.findUserEntityById(event.getUserEntityId());
if (userEntity != null) {
UserCalendar userCalendar = calendarController.findUserCalendarByUserAndProvider(userEntity, "google");
if (userCalendar == null) {
logger.info("User does not have a calendar, creating one");
try {
userCalendar = calendarController.createCalendar(userEntity, "google", CALENDAR_SUMMARY, CALENDAR_DESCRIPTION, Boolean.TRUE);
for (String email : userEmailEntityController.getUserEmailAddresses(event.getUserIdentifier())) {
try {
logger.info(String.format("Sharing Google calendar with %s", email));
googleCalendarClient.insertCalendarUserAclRule(userCalendar.getCalendarId(), email, "owner");
} catch (CalendarServiceException e) {
logger.log(Level.WARNING, String.format("Could not share calendar with %s", email), e);
}
}
} catch (CalendarServiceException e) {
logger.log(Level.SEVERE, "Failed to create new Google calendar", e);
}
}
}
}
}