Add support for google calendar
This commit is contained in:
18
build.gradle
18
build.gradle
@@ -6,8 +6,8 @@ apply plugin: 'java'
|
|||||||
apply plugin: 'application'
|
apply plugin: 'application'
|
||||||
|
|
||||||
mainClassName = 'App'
|
mainClassName = 'App'
|
||||||
sourceCompatibility = 1.8
|
sourceCompatibility = 11
|
||||||
targetCompatibility = 1.8
|
targetCompatibility = 11
|
||||||
version = '1.0'
|
version = '1.0'
|
||||||
compileJava.options.encoding = 'UTF-8'
|
compileJava.options.encoding = 'UTF-8'
|
||||||
compileTestJava.options.encoding = "UTF-8"
|
compileTestJava.options.encoding = "UTF-8"
|
||||||
@@ -18,17 +18,17 @@ repositories {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation 'mysql:mysql-connector-java:8.0.25'
|
implementation 'mysql:mysql-connector-java:8.0.28'
|
||||||
implementation 'org.apache.httpcomponents:httpclient:4.5.13'
|
implementation 'org.apache.httpcomponents:httpclient:4.5.13'
|
||||||
implementation 'com.googlecode.json-simple:json-simple:1.1.1'
|
implementation 'com.googlecode.json-simple:json-simple:1.1.1'
|
||||||
implementation 'com.google.code.gson:gson:2.8.8'
|
implementation 'com.google.code.gson:gson:2.9.0'
|
||||||
implementation platform('com.amazonaws:aws-java-sdk-bom:1.11.896')
|
implementation platform('com.amazonaws:aws-java-sdk-bom:1.11.896')
|
||||||
implementation 'com.amazonaws:aws-java-sdk-s3:1.12.53'
|
implementation 'com.amazonaws:aws-java-sdk-s3:1.12.173'
|
||||||
|
implementation 'com.google.api-client:google-api-client:1.33.2'
|
||||||
|
implementation 'com.google.oauth-client:google-oauth-client-jetty:1.33.1'
|
||||||
|
implementation 'com.google.apis:google-api-services-calendar:v3-rev20211026-1.32.1'
|
||||||
testImplementation 'junit:junit:4.13.2'
|
testImplementation 'junit:junit:4.13.2'
|
||||||
compile 'com.google.api-client:google-api-client:1.32.1'
|
compile 'com.google.guava:guava:31.1-jre'
|
||||||
compile 'com.google.oauth-client:google-oauth-client-jetty:1.32.1'
|
|
||||||
compile 'com.google.apis:google-api-services-calendar:v3-rev20210804-1.32.1'
|
|
||||||
compile 'com.google.guava:guava:30.1.1-jre'
|
|
||||||
compile group: 'commons-cli', name: 'commons-cli', version: '1.3.1'
|
compile group: 'commons-cli', name: 'commons-cli', version: '1.3.1'
|
||||||
compile group: 'net.sourceforge.argparse4j', name: 'argparse4j', version: '0.8.1'
|
compile group: 'net.sourceforge.argparse4j', name: 'argparse4j', version: '0.8.1'
|
||||||
compile group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.14.1'
|
compile group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.14.1'
|
||||||
|
|||||||
@@ -33,21 +33,13 @@ public class CalendarConfigProvider {
|
|||||||
return googleCalendarConfig;
|
return googleCalendarConfig;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getCalendarUrl(int league) {
|
public static String getCalendarUrl() {
|
||||||
|
JSONObject leagueConfig = (JSONObject) getGoogleCalendarConfig().get(String.valueOf(1));
|
||||||
// Overwrite league from 2 to 1 because they share one calendar
|
|
||||||
league = league == 2 ? 1 : league;
|
|
||||||
|
|
||||||
JSONObject leagueConfig = (JSONObject) getGoogleCalendarConfig().get(String.valueOf(league));
|
|
||||||
return (String) leagueConfig.get("url");
|
return (String) leagueConfig.get("url");
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getCalendarId(int league) {
|
public static String getCalendarId() {
|
||||||
|
JSONObject leagueConfig = (JSONObject) getGoogleCalendarConfig().get(String.valueOf(1));
|
||||||
// Overwrite league from 2 to 1 because they share one calendar
|
|
||||||
league = league == 2 ? 1 : league;
|
|
||||||
|
|
||||||
JSONObject leagueConfig = (JSONObject) getGoogleCalendarConfig().get(String.valueOf(league));
|
|
||||||
return (String) leagueConfig.get("id");
|
return (String) leagueConfig.get("id");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,104 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2014 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 de.jeyp91.googlecalendar;
|
|
||||||
|
|
||||||
import com.google.api.client.googleapis.json.GoogleJsonResponseException;
|
|
||||||
import com.google.api.client.http.HttpHeaders;
|
|
||||||
import com.google.api.services.calendar.Calendar;
|
|
||||||
import com.google.api.services.calendar.CalendarScopes;
|
|
||||||
import com.google.api.services.calendar.model.Event;
|
|
||||||
import com.google.common.collect.Lists;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A sample that demonstrates how to update a
|
|
||||||
* <a href="https://developers.google.com/google-apps/calendar/v3/reference/">Calendar resource</a>
|
|
||||||
* safely, ensuring that other changes aren't overwritten. It does this by passing along the etag of
|
|
||||||
* the resource being updated in the "If-Match" HTTP header of the request, which will cause the
|
|
||||||
* request to fail if the version on the server is different.
|
|
||||||
*
|
|
||||||
* @author ekoleda+devrel@google.com (Eric Koleda)
|
|
||||||
*/
|
|
||||||
public class ConditionalModificationSample {
|
|
||||||
|
|
||||||
/** The maximum number of times to attempt to update the event, before aborting. */
|
|
||||||
private static final int MAX_UPDATE_ATTEMPTS = 5;
|
|
||||||
|
|
||||||
/** Global instance of the Calendar client. */
|
|
||||||
private static Calendar client;
|
|
||||||
|
|
||||||
public static void main(String[] args) {
|
|
||||||
try {
|
|
||||||
List<String> scopes = Lists.newArrayList(CalendarScopes.CALENDAR);
|
|
||||||
client = Utils.createCalendarClient(scopes);
|
|
||||||
run();
|
|
||||||
} catch (Throwable t) {
|
|
||||||
t.printStackTrace();
|
|
||||||
System.exit(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a test event, pauses while the user modifies the event in the Calendar UI, and then
|
|
||||||
* updates the event with a new location, ensure that the user's changes aren't overwritten.
|
|
||||||
*/
|
|
||||||
private static void run() throws IOException {
|
|
||||||
// Create a test event.
|
|
||||||
Event event = Utils.createTestEvent(client, "Test Event");
|
|
||||||
System.out.println(String.format("Event created: %s", event.getHtmlLink()));
|
|
||||||
|
|
||||||
// Pause while the user modifies the event in the Calendar UI.
|
|
||||||
System.out.println("Modify the event's description and hit enter to continue.");
|
|
||||||
System.in.read();
|
|
||||||
|
|
||||||
// Modify the local copy of the event.
|
|
||||||
event.setSummary("Updated Test Event");
|
|
||||||
|
|
||||||
// Update the event, making sure that we don't overwrite other changes.
|
|
||||||
int numAttempts = 0;
|
|
||||||
boolean isUpdated = false;
|
|
||||||
do {
|
|
||||||
Calendar.Events.Update request = client.events().update("primary", event.getId(), event);
|
|
||||||
request.setRequestHeaders(new HttpHeaders().setIfMatch(event.getEtag()));
|
|
||||||
try {
|
|
||||||
event = request.execute();
|
|
||||||
isUpdated = true;
|
|
||||||
} catch (GoogleJsonResponseException e) {
|
|
||||||
if (e.getStatusCode() == 412) {
|
|
||||||
// A 412 status code, "Precondition failed", indicates that the etag values didn't
|
|
||||||
// match, and the event was updated on the server since we last retrieved it. Use
|
|
||||||
// {@link Calendar.Events.Get} to retrieve the latest version.
|
|
||||||
Event latestEvent = client.events().get("primary", event.getId()).execute();
|
|
||||||
|
|
||||||
// You may want to have more complex logic here to resolve conflicts. In this sample we're
|
|
||||||
// simply overwriting the summary.
|
|
||||||
latestEvent.setSummary(event.getSummary());
|
|
||||||
event = latestEvent;
|
|
||||||
} else {
|
|
||||||
throw e;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
numAttempts++;
|
|
||||||
} while (!isUpdated && numAttempts <= MAX_UPDATE_ATTEMPTS);
|
|
||||||
|
|
||||||
if (isUpdated) {
|
|
||||||
System.out.println("Event updated.");
|
|
||||||
} else {
|
|
||||||
System.out.println(String.format("Failed to update event after %d attempts.", numAttempts));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,81 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2014 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 de.jeyp91.googlecalendar;
|
|
||||||
|
|
||||||
import com.google.api.client.googleapis.json.GoogleJsonResponseException;
|
|
||||||
import com.google.api.client.http.HttpHeaders;
|
|
||||||
import com.google.api.services.calendar.Calendar;
|
|
||||||
import com.google.api.services.calendar.CalendarScopes;
|
|
||||||
import com.google.api.services.calendar.model.Event;
|
|
||||||
import com.google.common.collect.Lists;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A sample that demonstrates how to determine if a
|
|
||||||
* <a href="https://developers.google.com/google-apps/calendar/v3/reference/">Calendar resource</a>
|
|
||||||
* has been modified since you last retrieved it. It does this by passing along the etag of the
|
|
||||||
* resource being retrieved in the "If-None-Match" HTTP header of the request, which will cause the
|
|
||||||
* request to fail if the version on the server is the same as the local version.
|
|
||||||
*
|
|
||||||
* @author ekoleda+devrel@google.com (Eric Koleda)
|
|
||||||
*/
|
|
||||||
public class ConditionalRetrievalSample {
|
|
||||||
|
|
||||||
/** Global instance of the Calendar client. */
|
|
||||||
private static Calendar client;
|
|
||||||
|
|
||||||
public static void main(String[] args) {
|
|
||||||
try {
|
|
||||||
List<String> scopes = Lists.newArrayList(CalendarScopes.CALENDAR);
|
|
||||||
client = Utils.createCalendarClient(scopes);
|
|
||||||
run();
|
|
||||||
} catch (Throwable t) {
|
|
||||||
t.printStackTrace();
|
|
||||||
System.exit(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a test event, pauses while the user modifies the event in the Calendar UI, and then
|
|
||||||
* checks if the event has been modified.
|
|
||||||
*/
|
|
||||||
private static void run() throws IOException {
|
|
||||||
// Create a test event.
|
|
||||||
Event event = Utils.createTestEvent(client, "Test Event");
|
|
||||||
System.out.println(String.format("Event created: %s", event.getHtmlLink()));
|
|
||||||
|
|
||||||
// Pause while the user modifies the event in the Calendar UI.
|
|
||||||
System.out.println("Modify the event's description and hit enter to continue.");
|
|
||||||
System.in.read();
|
|
||||||
|
|
||||||
// Fetch the event again if it's been modified.
|
|
||||||
Calendar.Events.Get getRequest = client.events().get("primary", event.getId());
|
|
||||||
getRequest.setRequestHeaders(new HttpHeaders().setIfNoneMatch(event.getEtag()));
|
|
||||||
try {
|
|
||||||
event = getRequest.execute();
|
|
||||||
System.out.println("The event was modified, retrieved latest version.");
|
|
||||||
} catch (GoogleJsonResponseException e) {
|
|
||||||
if (e.getStatusCode() == 304) {
|
|
||||||
// A 304 status code, "Not modified", indicates that the etags match, and the event has
|
|
||||||
// not been modified since we last retrieved it.
|
|
||||||
System.out.println("The event was not modified, using local version.");
|
|
||||||
} else {
|
|
||||||
throw e;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -9,23 +9,15 @@ import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
|
|||||||
import com.google.api.client.http.javanet.NetHttpTransport;
|
import com.google.api.client.http.javanet.NetHttpTransport;
|
||||||
import com.google.api.client.json.JsonFactory;
|
import com.google.api.client.json.JsonFactory;
|
||||||
import com.google.api.client.json.gson.GsonFactory;
|
import com.google.api.client.json.gson.GsonFactory;
|
||||||
import com.google.api.client.util.DateTime;
|
|
||||||
import com.google.api.client.util.store.FileDataStoreFactory;
|
import com.google.api.client.util.store.FileDataStoreFactory;
|
||||||
import com.google.api.services.calendar.CalendarScopes;
|
import com.google.api.services.calendar.CalendarScopes;
|
||||||
import com.google.api.services.calendar.Calendar;
|
import com.google.api.services.calendar.Calendar;
|
||||||
import com.google.api.services.calendar.model.Event;
|
|
||||||
import com.google.api.services.calendar.model.EventDateTime;
|
|
||||||
import com.google.api.services.calendar.model.EventReminder;
|
|
||||||
import com.google.api.services.calendar.model.Events;
|
|
||||||
import de.jeyp91.tippliga.TLWLeague;
|
|
||||||
import de.jeyp91.tippliga.TLWMatchday;
|
|
||||||
|
|
||||||
import java.io.FileNotFoundException;
|
import java.io.FileNotFoundException;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
import java.security.GeneralSecurityException;
|
import java.security.GeneralSecurityException;
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@@ -38,7 +30,7 @@ public class GoogleCalendarConnector {
|
|||||||
* Global instance of the scopes required by this quickstart.
|
* Global instance of the scopes required by this quickstart.
|
||||||
* If modifying these scopes, delete your previously saved tokens/ folder.
|
* If modifying these scopes, delete your previously saved tokens/ folder.
|
||||||
*/
|
*/
|
||||||
private static final List<String> SCOPES = Collections.singletonList(CalendarScopes.CALENDAR_READONLY);
|
private static final List<String> SCOPES = Collections.singletonList(CalendarScopes.CALENDAR);
|
||||||
private static final String CREDENTIALS_FILE_PATH = "/Google_Credentials.json";
|
private static final String CREDENTIALS_FILE_PATH = "/Google_Credentials.json";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -62,95 +54,25 @@ public class GoogleCalendarConnector {
|
|||||||
.setAccessType("offline")
|
.setAccessType("offline")
|
||||||
.build();
|
.build();
|
||||||
LocalServerReceiver receiver = new LocalServerReceiver.Builder().setPort(8888).build();
|
LocalServerReceiver receiver = new LocalServerReceiver.Builder().setPort(8888).build();
|
||||||
return new AuthorizationCodeInstalledApp(flow, receiver).authorize("user");
|
Credential credential = new AuthorizationCodeInstalledApp(flow, receiver).authorize("user");
|
||||||
|
//returns an authorized Credential object.
|
||||||
|
return credential;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static com.google.api.services.calendar.Calendar getSerivce() {
|
public static com.google.api.services.calendar.Calendar getSerivce() {
|
||||||
|
|
||||||
com.google.api.services.calendar.Calendar service = null;
|
com.google.api.services.calendar.Calendar service = null;
|
||||||
|
|
||||||
final NetHttpTransport HTTP_TRANSPORT;
|
final NetHttpTransport HTTP_TRANSPORT;
|
||||||
try {
|
try {
|
||||||
HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
|
HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
|
||||||
service = new com.google.api.services.calendar.Calendar.Builder(HTTP_TRANSPORT, JSON_FACTORY, getCredentials(HTTP_TRANSPORT))
|
service = new Calendar.Builder(HTTP_TRANSPORT, JSON_FACTORY, getCredentials(HTTP_TRANSPORT))
|
||||||
.setApplicationName(APPLICATION_NAME)
|
.setApplicationName(APPLICATION_NAME)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
|
|
||||||
} catch (GeneralSecurityException | IOException e) {
|
} catch (GeneralSecurityException | IOException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
return service;
|
return service;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<Event> getAllEventsStartingFromDateTime(int league, DateTime dateTime) {
|
|
||||||
|
|
||||||
com.google.api.services.calendar.Calendar service = getSerivce();
|
|
||||||
Events events = null;
|
|
||||||
|
|
||||||
String calendarUrl = CalendarConfigProvider.getCalendarUrl(league);
|
|
||||||
|
|
||||||
// Build a new authorized API client service.
|
|
||||||
try {
|
|
||||||
events = service.events().list(calendarUrl)
|
|
||||||
.setMaxResults(100)
|
|
||||||
.setTimeMin(dateTime)
|
|
||||||
.setOrderBy("startTime")
|
|
||||||
.setSingleEvents(true)
|
|
||||||
.execute();
|
|
||||||
|
|
||||||
} catch (IOException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
|
|
||||||
// List the next 10 events from the primary calendar.
|
|
||||||
assert events != null;
|
|
||||||
List<Event> items = events.getItems();
|
|
||||||
|
|
||||||
return items;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void createNewEvent(TLWMatchday matchday) {
|
|
||||||
Calendar service = getSerivce();
|
|
||||||
|
|
||||||
String calendarId = CalendarConfigProvider.getCalendarId(matchday.getLeague());
|
|
||||||
|
|
||||||
String matchdayName = matchday.getMatchdayName() == "" ? matchday.getMatchday().toString() + ". Spieltag" : matchday.getMatchdayName();
|
|
||||||
String summary = "Tippabgabeschluss " + TLWLeague.getLeagueNameCalendar(matchday.getLeague()) + " " + matchdayName;
|
|
||||||
String description = "Tippabgabeschluss " + TLWLeague.getLeagueNameCalendar(matchday.getLeague()) + " " + matchdayName;
|
|
||||||
|
|
||||||
Event event = new Event()
|
|
||||||
.setSummary(summary)
|
|
||||||
.setLocation("https://www.tippliga-wuerzburg.de/app.php/football/bet")
|
|
||||||
.setDescription(description);
|
|
||||||
|
|
||||||
DateTime deliveryDate = new DateTime(matchday.getDeliveryDate().replace(" ", "T"));
|
|
||||||
EventDateTime date = new EventDateTime()
|
|
||||||
.setDateTime(deliveryDate)
|
|
||||||
.setTimeZone("Europe/Berlin");
|
|
||||||
event.setStart(date);
|
|
||||||
event.setEnd(date);
|
|
||||||
|
|
||||||
// Set reminder to 12 hours before
|
|
||||||
Event.Reminders reminders = new Event.Reminders();
|
|
||||||
EventReminder[] reminderOverrides = new EventReminder[] {
|
|
||||||
new EventReminder().setMethod("popup").setMinutes(12 * 60),
|
|
||||||
};
|
|
||||||
reminders.setOverrides(Arrays.asList(reminderOverrides));
|
|
||||||
event.setReminders(reminders);
|
|
||||||
|
|
||||||
try {
|
|
||||||
service.events().insert(calendarId, event).execute();
|
|
||||||
} catch (IOException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void updateMatchdayDate(TLWMatchday matchday) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Event getEventForMatchday(TLWMatchday matchday) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@@ -1,140 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2014 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 de.jeyp91.googlecalendar;
|
|
||||||
|
|
||||||
import com.google.api.client.googleapis.json.GoogleJsonResponseException;
|
|
||||||
import com.google.api.client.util.DateTime;
|
|
||||||
import com.google.api.client.util.store.DataStore;
|
|
||||||
import com.google.api.services.calendar.Calendar;
|
|
||||||
import com.google.api.services.calendar.CalendarScopes;
|
|
||||||
import com.google.api.services.calendar.model.Event;
|
|
||||||
import com.google.api.services.calendar.model.Events;
|
|
||||||
import com.google.common.collect.Lists;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.Date;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.TimeZone;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A sample that demonstrates how to efficiently sync
|
|
||||||
* <a href="https://developers.google.com/google-apps/calendar/v3/reference/">Calendar resource</a>
|
|
||||||
* using sync tokens.
|
|
||||||
*
|
|
||||||
* @author ekoleda+devrel@google.com (Eric Koleda)
|
|
||||||
*/
|
|
||||||
public class SyncTokenSample {
|
|
||||||
|
|
||||||
/** Global instance of the Calendar client. */
|
|
||||||
private static Calendar client;
|
|
||||||
|
|
||||||
/** Global instance of the event datastore. */
|
|
||||||
private static DataStore<String> eventDataStore;
|
|
||||||
|
|
||||||
/** Global instance of the sync settings datastore. */
|
|
||||||
private static DataStore<String> syncSettingsDataStore;
|
|
||||||
|
|
||||||
/** The key in the sync settings datastore that holds the current sync token. */
|
|
||||||
private static final String SYNC_TOKEN_KEY = "syncToken";
|
|
||||||
|
|
||||||
public static void main(String[] args) {
|
|
||||||
try {
|
|
||||||
List<String> scopes = Lists.newArrayList(CalendarScopes.CALENDAR_READONLY);
|
|
||||||
client = Utils.createCalendarClient(scopes);
|
|
||||||
eventDataStore = Utils.getDataStoreFactory().getDataStore("EventStore");
|
|
||||||
syncSettingsDataStore = Utils.getDataStoreFactory().getDataStore("SyncSettings");
|
|
||||||
run();
|
|
||||||
} catch (Throwable t) {
|
|
||||||
t.printStackTrace();
|
|
||||||
System.exit(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Syncs events from the user's primary calendar to a local datastore. A full sync is performed on
|
|
||||||
* the first run, with incremental syncs on subsequent runs.
|
|
||||||
*/
|
|
||||||
private static void run() throws IOException {
|
|
||||||
// Construct the {@link Calendar.Events.List} request, but don't execute it yet.
|
|
||||||
Calendar.Events.List request = client.events().list("primary");
|
|
||||||
|
|
||||||
// Load the sync token stored from the last execution, if any.
|
|
||||||
String syncToken = syncSettingsDataStore.get(SYNC_TOKEN_KEY);
|
|
||||||
if (syncToken == null) {
|
|
||||||
System.out.println("Performing full sync.");
|
|
||||||
|
|
||||||
// Set the filters you want to use during the full sync. Sync tokens aren't compatible with
|
|
||||||
// most filters, but you may want to limit your full sync to only a certain date range.
|
|
||||||
// In this example we are only syncing events up to a year old.
|
|
||||||
Date oneYearAgo = Utils.getRelativeDate(java.util.Calendar.YEAR, -1);
|
|
||||||
request.setTimeMin(new DateTime(oneYearAgo, TimeZone.getTimeZone("UTC")));
|
|
||||||
} else {
|
|
||||||
System.out.println("Performing incremental sync.");
|
|
||||||
request.setSyncToken(syncToken);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Retrieve the events, one page at a time.
|
|
||||||
String pageToken = null;
|
|
||||||
Events events = null;
|
|
||||||
do {
|
|
||||||
request.setPageToken(pageToken);
|
|
||||||
|
|
||||||
try {
|
|
||||||
events = request.execute();
|
|
||||||
} catch (GoogleJsonResponseException e) {
|
|
||||||
if (e.getStatusCode() == 410) {
|
|
||||||
// A 410 status code, "Gone", indicates that the sync token is invalid.
|
|
||||||
System.out.println("Invalid sync token, clearing event store and re-syncing.");
|
|
||||||
syncSettingsDataStore.delete(SYNC_TOKEN_KEY);
|
|
||||||
eventDataStore.clear();
|
|
||||||
run();
|
|
||||||
} else {
|
|
||||||
throw e;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
List<Event> items = events.getItems();
|
|
||||||
if (items.size() == 0) {
|
|
||||||
System.out.println("No new events to sync.");
|
|
||||||
} else {
|
|
||||||
for (Event event : items) {
|
|
||||||
syncEvent(event);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pageToken = events.getNextPageToken();
|
|
||||||
} while (pageToken != null);
|
|
||||||
|
|
||||||
// Store the sync token from the last request to be used during the next execution.
|
|
||||||
syncSettingsDataStore.set(SYNC_TOKEN_KEY, events.getNextSyncToken());
|
|
||||||
|
|
||||||
System.out.println("Sync complete.");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sync an individual event. In this example we simply store it's string represenation to a file
|
|
||||||
* system data store.
|
|
||||||
*/
|
|
||||||
private static void syncEvent(Event event) throws IOException {
|
|
||||||
if ("cancelled".equals(event.getStatus()) && eventDataStore.containsKey(event.getId())) {
|
|
||||||
eventDataStore.delete(event.getId());
|
|
||||||
System.out.println(String.format("Deleting event: ID=%s", event.getId()));
|
|
||||||
} else {
|
|
||||||
eventDataStore.set(event.getId(), event.toString());
|
|
||||||
System.out.println(
|
|
||||||
String.format("Syncing event: ID=%s, Name=%s", event.getId(), event.getSummary()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,152 @@
|
|||||||
|
package de.jeyp91.googlecalendar;
|
||||||
|
|
||||||
|
import com.google.api.client.util.DateTime;
|
||||||
|
import com.google.api.services.calendar.Calendar;
|
||||||
|
import com.google.api.services.calendar.model.Event;
|
||||||
|
import com.google.api.services.calendar.model.EventDateTime;
|
||||||
|
import com.google.api.services.calendar.model.EventReminder;
|
||||||
|
import com.google.api.services.calendar.model.Events;
|
||||||
|
import de.jeyp91.tippliga.TLWLeague;
|
||||||
|
import de.jeyp91.tippliga.TLWMatchday;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.ZoneId;
|
||||||
|
import java.time.ZonedDateTime;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import static de.jeyp91.googlecalendar.GoogleCalendarConnector.getSerivce;
|
||||||
|
|
||||||
|
public class TippligaGoogleEventManager {
|
||||||
|
|
||||||
|
private static List<Event> allEvents = null;
|
||||||
|
|
||||||
|
private static List<Event> getAllEvents(Integer season) {
|
||||||
|
if(allEvents == null) {
|
||||||
|
allEvents = getAllEventsStartingFromDateTime(new DateTime(season-1 + "-01-01T00:00:00Z"));
|
||||||
|
}
|
||||||
|
return allEvents;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static List<Event> getAllEventsStartingFromDateTime(DateTime dateTime) {
|
||||||
|
|
||||||
|
Calendar service = getSerivce();
|
||||||
|
Events events = null;
|
||||||
|
|
||||||
|
String calendarUrl = CalendarConfigProvider.getCalendarUrl();
|
||||||
|
|
||||||
|
// Build a new authorized API client service.
|
||||||
|
try {
|
||||||
|
events = service.events().list(calendarUrl)
|
||||||
|
.setMaxResults(500)
|
||||||
|
.setTimeMin(dateTime)
|
||||||
|
.setOrderBy("startTime")
|
||||||
|
.setSingleEvents(true)
|
||||||
|
.execute();
|
||||||
|
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
assert events != null;
|
||||||
|
List<Event> items = events.getItems();
|
||||||
|
|
||||||
|
return items;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Event findEvent(List<Event> allEvents, Integer season, Integer league, Integer matchday, Integer deliveryDateNumber) {
|
||||||
|
String description = getDescription(season, league, matchday, deliveryDateNumber);
|
||||||
|
for(int i = 0; i < allEvents.size(); i++) {
|
||||||
|
if(allEvents.get(i).getDescription().equals(description)) return allEvents.get(i);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void createOrUpdateEventsForMatchday(TLWMatchday matchday) {
|
||||||
|
createOrUpdateEvent(matchday, matchday.getDeliveryDate(), 1);
|
||||||
|
if(!matchday.getDeliveryDate2().equals("")) createOrUpdateEvent(matchday, matchday.getDeliveryDate2(), 2);
|
||||||
|
if(!matchday.getDeliveryDate3().equals("")) createOrUpdateEvent(matchday, matchday.getDeliveryDate3(), 3);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void createOrUpdateEvent(TLWMatchday matchday, String deliveryDateString, Integer deliverDateNumber) {
|
||||||
|
List<Event> allEvents = getAllEvents(matchday.getSeason());
|
||||||
|
Event event = findEvent(allEvents, matchday.getSeason(), matchday.getLeague(), matchday.getMatchday(), deliverDateNumber);
|
||||||
|
if(event == null)
|
||||||
|
createNewEvent(matchday, deliveryDateString, deliverDateNumber);
|
||||||
|
else
|
||||||
|
updateEvent(event, matchday, deliveryDateString, deliverDateNumber);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void createNewEvent(TLWMatchday matchday, String deliveryDateString, Integer deliverDateNumber) {
|
||||||
|
String calendarUrl = CalendarConfigProvider.getCalendarUrl();
|
||||||
|
|
||||||
|
Event event = getEvent(matchday, deliveryDateString, deliverDateNumber);
|
||||||
|
|
||||||
|
try {
|
||||||
|
getSerivce().events().insert(calendarUrl, event).execute();
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void updateEvent(Event oldEvent, TLWMatchday matchday, String deliveryDateString, Integer deliverDateNumber) {
|
||||||
|
String calendarUrl = CalendarConfigProvider.getCalendarUrl();
|
||||||
|
|
||||||
|
Event event = getEvent(matchday, deliveryDateString, deliverDateNumber);
|
||||||
|
|
||||||
|
try {
|
||||||
|
getSerivce().events().update(calendarUrl, oldEvent.getId(), event).execute();
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void deleteEvent(TLWMatchday matchday, Integer deliverDateNumber) {
|
||||||
|
String calendarUrl = CalendarConfigProvider.getCalendarUrl();
|
||||||
|
|
||||||
|
Event event = findEvent(getAllEvents(matchday.getSeason()), matchday.getSeason(), matchday.getLeague(), matchday.getMatchday(), deliverDateNumber);
|
||||||
|
if(event != null) {
|
||||||
|
try {
|
||||||
|
getSerivce().events().delete(calendarUrl, event.getId()).execute();
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Event getEvent(TLWMatchday matchday, String deliveryDateString, Integer deliverDateNumber) {
|
||||||
|
String matchdayName = matchday.getMatchdayName().equals("") ? matchday.getMatchday().toString() + ". Spieltag" : matchday.getMatchdayName();
|
||||||
|
String summary = TLWLeague.getLeagueNameCalendar(matchday.getLeague()) + " " + matchdayName + " tippen!";
|
||||||
|
if(deliverDateNumber > 1) summary += " " + deliverDateNumber + ". Chance \uD83D\uDE43";
|
||||||
|
String description = getDescription(matchday.getSeason(), matchday.getLeague(), matchday.getMatchday(), deliverDateNumber);
|
||||||
|
String location = "https://tippliga-wuerzburg.de/app.php/football/bet";
|
||||||
|
|
||||||
|
LocalDateTime deliveryLocalDateTime = LocalDateTime.parse(deliveryDateString.replace(" ", "T"));
|
||||||
|
ZonedDateTime zdtBerlin = ZonedDateTime.of(deliveryLocalDateTime, ZoneId.of("Europe/Berlin"));
|
||||||
|
DateTime deliveryDateTime = new DateTime(zdtBerlin.toInstant().toEpochMilli());
|
||||||
|
EventDateTime date = new EventDateTime()
|
||||||
|
.setDateTime(deliveryDateTime)
|
||||||
|
.setTimeZone("Europe/Berlin");
|
||||||
|
|
||||||
|
// Set reminder to 12 hours before
|
||||||
|
Event.Reminders reminders = new Event.Reminders();
|
||||||
|
reminders.setUseDefault(false);
|
||||||
|
EventReminder[] reminderOverrides = new EventReminder[] {
|
||||||
|
new EventReminder().setMethod("popup").setMinutes(12 * 60),
|
||||||
|
};
|
||||||
|
reminders.setOverrides(Arrays.asList(reminderOverrides));
|
||||||
|
|
||||||
|
return new Event()
|
||||||
|
.setSummary(summary)
|
||||||
|
.setLocation(location)
|
||||||
|
.setDescription(description)
|
||||||
|
.setStart(date)
|
||||||
|
.setEnd(date)
|
||||||
|
.setReminders(reminders);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String getDescription(Integer season, Integer league, Integer matchday, Integer deliverDateNumber) {
|
||||||
|
return "Saison: " + season + "\n" + "Liga: " + league + "\n" + "Spieltag: " + matchday + "\n" + "Abgabeschluss: " + deliverDateNumber;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,130 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2014 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 de.jeyp91.googlecalendar;
|
|
||||||
|
|
||||||
import com.google.api.client.auth.oauth2.Credential;
|
|
||||||
import com.google.api.client.extensions.java6.auth.oauth2.AuthorizationCodeInstalledApp;
|
|
||||||
import com.google.api.client.extensions.jetty.auth.oauth2.LocalServerReceiver;
|
|
||||||
import com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow;
|
|
||||||
import com.google.api.client.googleapis.auth.oauth2.GoogleClientSecrets;
|
|
||||||
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
|
|
||||||
import com.google.api.client.http.HttpTransport;
|
|
||||||
import com.google.api.client.json.JsonFactory;
|
|
||||||
import com.google.api.client.json.gson.GsonFactory;
|
|
||||||
import com.google.api.client.util.DateTime;
|
|
||||||
import com.google.api.client.util.store.DataStoreFactory;
|
|
||||||
import com.google.api.client.util.store.FileDataStoreFactory;
|
|
||||||
import com.google.api.services.calendar.Calendar;
|
|
||||||
import com.google.api.services.calendar.model.Event;
|
|
||||||
import com.google.api.services.calendar.model.Event.Reminders;
|
|
||||||
import com.google.api.services.calendar.model.EventDateTime;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.InputStreamReader;
|
|
||||||
import java.util.Date;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.TimeZone;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A collection of utility methods used by these samples.
|
|
||||||
*/
|
|
||||||
public class Utils {
|
|
||||||
/** Application name */
|
|
||||||
private static final String APPLICATION_NAME = "Calendar Sync Samples";
|
|
||||||
|
|
||||||
/** Directory to store user credentials. */
|
|
||||||
private static final java.io.File DATA_STORE_DIR =
|
|
||||||
new java.io.File(System.getProperty("user.home"), ".store/calendar-sync");
|
|
||||||
|
|
||||||
/** Global instance of the {@link DataStoreFactory}. */
|
|
||||||
private static FileDataStoreFactory dataStoreFactory;
|
|
||||||
|
|
||||||
/** Global instance of the JSON factory. */
|
|
||||||
private static final JsonFactory JSON_FACTORY = GsonFactory.getDefaultInstance();
|
|
||||||
|
|
||||||
/** Global instance of the HTTP transport. */
|
|
||||||
private static HttpTransport httpTransport;
|
|
||||||
|
|
||||||
static {
|
|
||||||
try {
|
|
||||||
httpTransport = GoogleNetHttpTransport.newTrustedTransport();
|
|
||||||
dataStoreFactory = new FileDataStoreFactory(DATA_STORE_DIR);
|
|
||||||
} catch (Throwable t) {
|
|
||||||
t.printStackTrace();
|
|
||||||
System.exit(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Creates a new Calendar client to use when making requests to the API. */
|
|
||||||
public static Calendar createCalendarClient(List<String> scopes) throws Exception {
|
|
||||||
Credential credential = authorize(scopes);
|
|
||||||
return new Calendar.Builder(
|
|
||||||
httpTransport, JSON_FACTORY, credential).setApplicationName(APPLICATION_NAME).build();
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Authorizes the installed application to access user's protected data. */
|
|
||||||
public static Credential authorize(List<String> scopes) throws Exception {
|
|
||||||
// Load client secrets.
|
|
||||||
GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY,
|
|
||||||
new InputStreamReader(SyncTokenSample.class.getResourceAsStream("/client_secrets.json")));
|
|
||||||
if (clientSecrets.getDetails().getClientId().startsWith("Enter")
|
|
||||||
|| clientSecrets.getDetails().getClientSecret().startsWith("Enter")) {
|
|
||||||
System.out.println(
|
|
||||||
"Overwrite the src/main/resources/client_secrets.json file with the client secrets file "
|
|
||||||
+ "you downloaded from your Google Developers Console project.");
|
|
||||||
System.exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(httpTransport,
|
|
||||||
JSON_FACTORY, clientSecrets, scopes).setDataStoreFactory(dataStoreFactory).build();
|
|
||||||
// Authorize.
|
|
||||||
LocalServerReceiver receiver = new LocalServerReceiver.Builder().setPort(8888).build();
|
|
||||||
return new AuthorizationCodeInstalledApp(flow, receiver).authorize("user");
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Gets the datastore factory used in these samples. */
|
|
||||||
public static DataStoreFactory getDataStoreFactory() {
|
|
||||||
return dataStoreFactory;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Creates a test event. */
|
|
||||||
public static Event createTestEvent(Calendar client, String summary) throws IOException {
|
|
||||||
Date oneHourFromNow = Utils.getRelativeDate(java.util.Calendar.HOUR, 1);
|
|
||||||
Date twoHoursFromNow = Utils.getRelativeDate(java.util.Calendar.HOUR, 2);
|
|
||||||
DateTime start = new DateTime(oneHourFromNow, TimeZone.getTimeZone("UTC"));
|
|
||||||
DateTime end = new DateTime(twoHoursFromNow, TimeZone.getTimeZone("UTC"));
|
|
||||||
|
|
||||||
Event event = new Event().setSummary(summary)
|
|
||||||
.setReminders(new Reminders().setUseDefault(false))
|
|
||||||
.setStart(new EventDateTime().setDateTime(start))
|
|
||||||
.setEnd(new EventDateTime().setDateTime(end));
|
|
||||||
return client.events().insert("primary", event).execute();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets a new {@link java.util.Date} relative to the current date and time.
|
|
||||||
*
|
|
||||||
* @param field the field identifier from {@link java.util.Calendar} to increment
|
|
||||||
* @param amount the amount of the field to increment
|
|
||||||
* @return the new date
|
|
||||||
*/
|
|
||||||
public static Date getRelativeDate(int field, int amount) {
|
|
||||||
Date now = new Date();
|
|
||||||
java.util.Calendar cal = java.util.Calendar.getInstance();
|
|
||||||
cal.setTime(now);
|
|
||||||
cal.add(field, amount);
|
|
||||||
return cal.getTime();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -5,10 +5,7 @@ public class TLWLeague {
|
|||||||
String leagueName = "";
|
String leagueName = "";
|
||||||
switch (id) {
|
switch (id) {
|
||||||
case 1:
|
case 1:
|
||||||
leagueName = "1. Tippliga Würzburg";
|
leagueName = "Tippliga";
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
leagueName = "2. Tippliga Würzburg";
|
|
||||||
break;
|
break;
|
||||||
case 46:
|
case 46:
|
||||||
leagueName = "Elfmeter";
|
leagueName = "Elfmeter";
|
||||||
@@ -58,19 +55,19 @@ public class TLWLeague {
|
|||||||
switch (id) {
|
switch (id) {
|
||||||
case 1:
|
case 1:
|
||||||
case 2:
|
case 2:
|
||||||
leagueName = "TLW";
|
leagueName = "Tippliga";
|
||||||
break;
|
break;
|
||||||
case 46:
|
case 46:
|
||||||
leagueName = "ELF";
|
leagueName = "Elfmeter";
|
||||||
break;
|
break;
|
||||||
case 47:
|
case 47:
|
||||||
leagueName = "REL";
|
leagueName = "Relegation";
|
||||||
break;
|
break;
|
||||||
case 48:
|
case 48:
|
||||||
leagueName = "WTL";
|
leagueName = "WTL-Pokal";
|
||||||
break;
|
break;
|
||||||
case 49:
|
case 49:
|
||||||
leagueName = "LC";
|
leagueName = "Liga Cup";
|
||||||
break;
|
break;
|
||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,6 +9,8 @@ import java.util.ArrayList;
|
|||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
|
import static de.jeyp91.googlecalendar.TippligaGoogleEventManager.*;
|
||||||
|
|
||||||
public class TLWMatchdaysUpdater {
|
public class TLWMatchdaysUpdater {
|
||||||
|
|
||||||
private final Logger logger = LogManager.getLogger(TLWMatch.class);
|
private final Logger logger = LogManager.getLogger(TLWMatch.class);
|
||||||
@@ -72,6 +74,7 @@ public class TLWMatchdaysUpdater {
|
|||||||
condition;
|
condition;
|
||||||
this.beautifulInfo += beautifulInfoStart +
|
this.beautifulInfo += beautifulInfoStart +
|
||||||
"Tippabgabeschluss 1 zu '" + matchdayUpdated.getDeliveryDate() + "'.\n";
|
"Tippabgabeschluss 1 zu '" + matchdayUpdated.getDeliveryDate() + "'.\n";
|
||||||
|
createOrUpdateEvent(matchdayUpdated, matchdayUpdated.getDeliveryDate(), 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!matchdayOriginal.getDeliveryDate2().equals(matchdayUpdated.getDeliveryDate2())) {
|
if (!matchdayOriginal.getDeliveryDate2().equals(matchdayUpdated.getDeliveryDate2())) {
|
||||||
@@ -80,6 +83,10 @@ public class TLWMatchdaysUpdater {
|
|||||||
condition;
|
condition;
|
||||||
this.beautifulInfo += beautifulInfoStart +
|
this.beautifulInfo += beautifulInfoStart +
|
||||||
"Tippabgabeschluss 2 zu '" + matchdayUpdated.getDeliveryDate2() + "'.\n";
|
"Tippabgabeschluss 2 zu '" + matchdayUpdated.getDeliveryDate2() + "'.\n";
|
||||||
|
if(!matchdayUpdated.getDeliveryDate2().equals(""))
|
||||||
|
createOrUpdateEvent(matchdayUpdated, matchdayUpdated.getDeliveryDate2(), 2);
|
||||||
|
else
|
||||||
|
deleteEvent(matchdayUpdated, 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!matchdayOriginal.getMatchdayName().equals(matchdayUpdated.getMatchdayName())) {
|
if (!matchdayOriginal.getMatchdayName().equals(matchdayUpdated.getMatchdayName())) {
|
||||||
@@ -88,6 +95,9 @@ public class TLWMatchdaysUpdater {
|
|||||||
condition;
|
condition;
|
||||||
this.beautifulInfo += beautifulInfoStart +
|
this.beautifulInfo += beautifulInfoStart +
|
||||||
"Spieltagsname zu '" + matchdayUpdated.getMatchdayName() + "'.\n";
|
"Spieltagsname zu '" + matchdayUpdated.getMatchdayName() + "'.\n";
|
||||||
|
createOrUpdateEvent(matchdayUpdated, matchdayUpdated.getDeliveryDate(), 1);
|
||||||
|
if(!matchdayUpdated.getDeliveryDate2().equals(""))
|
||||||
|
createOrUpdateEvent(matchdayUpdated, matchdayUpdated.getDeliveryDate2(), 2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,21 +2,5 @@
|
|||||||
"1": {
|
"1": {
|
||||||
"id": "825f79shtm9n3uknj99iuu2qho",
|
"id": "825f79shtm9n3uknj99iuu2qho",
|
||||||
"url": "825f79shtm9n3uknj99iuu2qho@group.calendar.google.com"
|
"url": "825f79shtm9n3uknj99iuu2qho@group.calendar.google.com"
|
||||||
},
|
|
||||||
"46": {
|
|
||||||
"id": "5adq7f0csmpihahran6nqmrhq8",
|
|
||||||
"url": "5adq7f0csmpihahran6nqmrhq8@group.calendar.google.com"
|
|
||||||
},
|
|
||||||
"47": {
|
|
||||||
"id": "em2778be5ogeu7qkcqembcfti0",
|
|
||||||
"url": "em2778be5ogeu7qkcqembcfti0@group.calendar.google.com"
|
|
||||||
},
|
|
||||||
"48": {
|
|
||||||
"id": "flmbok3dgujh9de0q2eml3tdcg",
|
|
||||||
"url": "flmbok3dgujh9de0q2eml3tdcg@group.calendar.google.com"
|
|
||||||
},
|
|
||||||
"49": {
|
|
||||||
"id": "1hled0c9s699ds43hp0ga5gecc",
|
|
||||||
"url": "1hled0c9s699ds43hp0ga5gecc@group.calendar.google.com"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"installed":{
|
"installed": {
|
||||||
"client_id":"326748683996-ftm5p1qoscdm6pbvr1jpplsc3r8nd0sp.apps.googleusercontent.com",
|
"client_id": "267204101826-2ps9m6httllrc7mrsvml50rsfb661k87.apps.googleusercontent.com",
|
||||||
"project_id":"quickstart-1564063275094",
|
"project_id": "tippliga",
|
||||||
"auth_uri":"https://accounts.google.com/o/oauth2/auth",
|
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
|
||||||
"token_uri":"https://oauth2.googleapis.com/token",
|
"token_uri": "https://oauth2.googleapis.com/token",
|
||||||
"auth_provider_x509_cert_url":"https://www.googleapis.com/oauth2/v1/certs",
|
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
|
||||||
"client_secret":"rEn1rOHi_9Juw4HV6eOe5MVp",
|
"client_secret": "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",
|
||||||
"redirect_uris":[
|
"redirect_uris": [
|
||||||
"urn:ietf:wg:oauth:2.0:oob",
|
"urn:ietf:wg:oauth:2.0:oob",
|
||||||
"http://localhost"
|
"http://localhost"
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -1,36 +0,0 @@
|
|||||||
package de.jeyp91.googlecalendar;
|
|
||||||
|
|
||||||
import com.google.api.client.util.DateTime;
|
|
||||||
import com.google.api.services.calendar.model.Event;
|
|
||||||
import de.jeyp91.tippliga.TLWMatchday;
|
|
||||||
import org.junit.Test;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import static org.junit.Assert.assertEquals;
|
|
||||||
|
|
||||||
public class GoogleCalendarConnectorTest {
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void getAllEventsStartingFromDateTimeTest()
|
|
||||||
{
|
|
||||||
DateTime dateTime = new DateTime("2020-01-01T00:00:00");
|
|
||||||
|
|
||||||
List<Event> events = GoogleCalendarConnector.getAllEventsStartingFromDateTime(1, dateTime);
|
|
||||||
|
|
||||||
assertEquals("Tippliga 20. Spieltag tippen!", events.get(0).getSummary());
|
|
||||||
DateTime startExpected = new DateTime("2020-01-17T20:30:00+01:00");
|
|
||||||
DateTime startActual = events.get(0).getStart().getDateTime();
|
|
||||||
assertEquals(startExpected, startActual);
|
|
||||||
|
|
||||||
assertEquals("Tippliga 21. Spieltag tippen!", events.get(1).getSummary());
|
|
||||||
startExpected = new DateTime("2020-01-24T20:30:00+01:00");
|
|
||||||
startActual = events.get(1).getStart().getDateTime();
|
|
||||||
assertEquals(startExpected, startActual);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void createEventTest() {
|
|
||||||
TLWMatchday matchday = new TLWMatchday(2020, 1, 1, 0, "2020-07-01 20:30:00", "", "", "", 1);
|
|
||||||
// GoogleCalendarConnector.createNewEvent(matchday);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,82 @@
|
|||||||
|
package de.jeyp91.googlecalendar;
|
||||||
|
|
||||||
|
import com.google.api.client.util.DateTime;
|
||||||
|
import com.google.api.services.calendar.model.Event;
|
||||||
|
import de.jeyp91.tippliga.TLWMatchday;
|
||||||
|
import de.jeyp91.tippliga.TLWMatchdaysCreator;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import static de.jeyp91.googlecalendar.TippligaGoogleEventManager.*;
|
||||||
|
import static org.junit.Assert.assertEquals;
|
||||||
|
|
||||||
|
public class TippligaGoogleEventManagerTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getAllEventsStartingFromDateTimeTest()
|
||||||
|
{
|
||||||
|
DateTime dateTime = new DateTime("2020-01-01T00:00:00");
|
||||||
|
|
||||||
|
List<Event> events = getAllEventsStartingFromDateTime(dateTime);
|
||||||
|
|
||||||
|
assertEquals("Tippliga 20. Spieltag tippen!", events.get(0).getSummary());
|
||||||
|
DateTime startExpected = new DateTime("2020-01-17T20:30:00+01:00");
|
||||||
|
DateTime startActual = events.get(0).getStart().getDateTime();
|
||||||
|
assertEquals(startExpected, startActual);
|
||||||
|
|
||||||
|
assertEquals("Tippliga 21. Spieltag tippen!", events.get(1).getSummary());
|
||||||
|
startExpected = new DateTime("2020-01-24T20:30:00+01:00");
|
||||||
|
startActual = events.get(1).getStart().getDateTime();
|
||||||
|
assertEquals(startExpected, startActual);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void createOrUpdateEventsForMatchdayTippligaTest() {
|
||||||
|
TLWMatchdaysCreator creator = new TLWMatchdaysCreator(2022, 1, "Tippliga");
|
||||||
|
ArrayList<TLWMatchday> matchdays = creator.getMatchdays();
|
||||||
|
|
||||||
|
matchdays.forEach(TippligaGoogleEventManager::createOrUpdateEventsForMatchday);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void createOrUpdateEventsForMatchdayWTLPokalTest() {
|
||||||
|
TLWMatchdaysCreator creator = new TLWMatchdaysCreator(2022, 48, "WTL-Pokal");
|
||||||
|
ArrayList<TLWMatchday> matchdays = creator.getMatchdays();
|
||||||
|
// createOrUpdateEventsForMatchday(matchdays.get(4));
|
||||||
|
|
||||||
|
matchdays.forEach(TippligaGoogleEventManager::createOrUpdateEventsForMatchday);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void updateEventTest() {
|
||||||
|
TLWMatchdaysCreator creator = new TLWMatchdaysCreator(2022, 1, "Tippliga");
|
||||||
|
ArrayList<TLWMatchday> matchdays = creator.getMatchdays();
|
||||||
|
createOrUpdateEvent(matchdays.get(28), matchdays.get(28).getDeliveryDate(), 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void deleteEventTippligaTest() {
|
||||||
|
TLWMatchdaysCreator creator = new TLWMatchdaysCreator(2022, 1, "Tippliga");
|
||||||
|
ArrayList<TLWMatchday> matchdays = creator.getMatchdays();
|
||||||
|
|
||||||
|
matchdays.forEach(tlwMatchday -> {
|
||||||
|
TippligaGoogleEventManager.deleteEvent(tlwMatchday, 1);
|
||||||
|
TippligaGoogleEventManager.deleteEvent(tlwMatchday, 2);
|
||||||
|
TippligaGoogleEventManager.deleteEvent(tlwMatchday, 3);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void deleteEventWTLPokalTest() {
|
||||||
|
TLWMatchdaysCreator creator = new TLWMatchdaysCreator(2022, 48, "WTL-Pokal");
|
||||||
|
ArrayList<TLWMatchday> matchdays = creator.getMatchdays();
|
||||||
|
|
||||||
|
matchdays.forEach(tlwMatchday -> {
|
||||||
|
TippligaGoogleEventManager.deleteEvent(tlwMatchday, 1);
|
||||||
|
TippligaGoogleEventManager.deleteEvent(tlwMatchday, 2);
|
||||||
|
TippligaGoogleEventManager.deleteEvent(tlwMatchday, 3);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -6,7 +6,7 @@ public class TLWMatchesUpdaterFootballTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getUpdateSqlTest1() {
|
public void getUpdateSqlTest1() {
|
||||||
TLWMatchesUpdaterFootball updater = new TLWMatchesUpdaterFootball(2021, 1, "Tippliga");
|
TLWMatchesUpdaterFootball updater = new TLWMatchesUpdaterFootball(2022, 1, "Tippliga");
|
||||||
String sql = updater.getUpdateSQL();
|
String sql = updater.getUpdateSQL();
|
||||||
|
|
||||||
// System.out.println(sql);
|
// System.out.println(sql);
|
||||||
|
|||||||
Binary file not shown.
Reference in New Issue
Block a user