This is an automated email from the git hooks/post-receive script. New commit to branch feature/sync in repository jtimer. See https://gitlab.nuiton.org/chorem/jtimer.git commit 83614a5fb643a94ef7bb8a9d45b17158d18ab68c Author: servantie <servantie.c@gmail.com> Date: Fri Jun 3 15:19:06 2016 +0200 added the synchronizer to the config and started treating errors --- src/main/java/org/chorem/jtimer/JTimerConfig.java | 18 +++++++++- src/main/java/org/chorem/jtimer/JTimerFactory.java | 38 ++++++++++++++++++++++ .../java/org/chorem/jtimer/data/TimerCore.java | 2 +- .../chorem/jtimer/io/TimerTaskSynchronizer.java | 36 ++++++++++---------- 4 files changed, 75 insertions(+), 19 deletions(-) diff --git a/src/main/java/org/chorem/jtimer/JTimerConfig.java b/src/main/java/org/chorem/jtimer/JTimerConfig.java index 76138db..499eac9 100644 --- a/src/main/java/org/chorem/jtimer/JTimerConfig.java +++ b/src/main/java/org/chorem/jtimer/JTimerConfig.java @@ -168,6 +168,19 @@ public class JTimerConfig { } /** + * Returns the synchronizer class + * @return + */ + public Class<?> getIOSynchronizerClass() {return appConfig.getOptionAsClass(JTimerOption.IO_SYNC_CLASS.key); + } + + /** + * Returns autosync delay in seconds + * @return auto sync delay + */ + public long getIOSyncAutoSyncDelay() { return appConfig.getOptionAsLong(JTimerOption.IO_SYNC_AUTOSYNCDELAY.key);} + + /** * Return user idle time threshold in seconds. * * @return idle time threshold @@ -279,10 +292,13 @@ public class JTimerConfig { GTIMER_BACKUP_DIRECTORY("jtimer.io.backup.directory", "${jtimer.io.saver.directory}/backups"), IO_SAVER_AUTOSAVEDELAY("jtimer.io.saver.autosavedelay", "300"), + IO_SYNC_CLASS("jtimer.io.synchronizer.class", "org.chorem.jtimer.io.TimerTaskSynchronizer"), + IO_SYNC_AUTOSYNCDELAY("jtimer.io.synchronizer.autosyncdelay", "10"), + UI_IDLE_TIME("jtimer.ui.idletime", "300"), UI_SHOW_CLOSED("jtimer.ui.showclosed", "false"), UI_CLOSE_TO_SYSTRAY("jtimer.ui.closetosystray", "true"), - UI_REPORT_FIRSTDAYOFWEEK("jtimer.ui.report.firstdayofweek", "0"); + UI_REPORT_FIRSTDAYOFWEEK("jtimer.ui.report.firstdayofweek", "10"); protected String key; protected String defaultValue; diff --git a/src/main/java/org/chorem/jtimer/JTimerFactory.java b/src/main/java/org/chorem/jtimer/JTimerFactory.java index 021a3eb..4a100d5 100644 --- a/src/main/java/org/chorem/jtimer/JTimerFactory.java +++ b/src/main/java/org/chorem/jtimer/JTimerFactory.java @@ -25,6 +25,7 @@ package org.chorem.jtimer; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.chorem.jtimer.io.Saver; +import org.chorem.jtimer.io.TimerTaskSynchronizer; /** * JTimer config class. @@ -43,6 +44,9 @@ public class JTimerFactory { /** Saver */ protected static Saver saver; + /** Synchronizer */ + protected static TimerTaskSynchronizer synchronizer; + /** * Constructeur. */ @@ -88,4 +92,38 @@ public class JTimerFactory { return saver; } + + /** + * Get synchronizer manager + */ + public static TimerTaskSynchronizer getSynchronizer(){ + if (synchronizer == null) { + + Class<?> synchronizerClass = JTimer.config.getIOSynchronizerClass(); + + // log + if (log.isInfoEnabled()) { + log.info("Using synchronizer class : " + synchronizerClass); + log.info(" with auto synchronizer delay : " + JTimer.config.getIOSyncAutoSyncDelay()); + } + + try { + // get instance + synchronizer = (TimerTaskSynchronizer) synchronizerClass.newInstance(); + + // set delay to saver + synchronizer.setAutoSyncDelay(JTimer.config.getIOSyncAutoSyncDelay() * 1000); + + } catch (InstantiationException e) { + if (log.isErrorEnabled()) { + log.error("Can't instanciate class : " + synchronizerClass, e); + } + } catch (IllegalAccessException e) { + if (log.isErrorEnabled()) { + log.error("Can't access class : " + synchronizerClass, e); + } + } + } + return synchronizer; + } } diff --git a/src/main/java/org/chorem/jtimer/data/TimerCore.java b/src/main/java/org/chorem/jtimer/data/TimerCore.java index f8655bd..52e8b97 100644 --- a/src/main/java/org/chorem/jtimer/data/TimerCore.java +++ b/src/main/java/org/chorem/jtimer/data/TimerCore.java @@ -92,7 +92,7 @@ public class TimerCore { } //init sync - synchronizer = new TimerTaskSynchronizer(this); + synchronizer = JTimerFactory.getSynchronizer(); if (synchronizer != null) { data.addDataEventListener(synchronizer); } diff --git a/src/main/java/org/chorem/jtimer/io/TimerTaskSynchronizer.java b/src/main/java/org/chorem/jtimer/io/TimerTaskSynchronizer.java index 882e6af..e322ab8 100644 --- a/src/main/java/org/chorem/jtimer/io/TimerTaskSynchronizer.java +++ b/src/main/java/org/chorem/jtimer/io/TimerTaskSynchronizer.java @@ -26,25 +26,19 @@ public class TimerTaskSynchronizer implements DataEventListener { private static Log log = LogFactory.getLog(TimerTaskSynchronizer.class); /** auto sync delay */ - protected int autoSyncDelay = 1000 * 10; //10 s for testing purposes + protected long autoSyncDelay = 1000 * 10 ; //every 2 hours, check for modifications to sync /** timer to schedule syncs */ protected Timer timer; - /** timer core (to retrieve tasks) */ - protected TimerCore core; - /** Tasks to sync */ protected Collection<TimerTask> tasksToSync; - public TimerTaskSynchronizer(TimerCore core) { - + public TimerTaskSynchronizer() { timer = new Timer(); timer.schedule(new UpdateTask(), autoSyncDelay, autoSyncDelay); log.info("Starting synchronising thread"); - this.core = core; - tasksToSync = Collections.synchronizedCollection(new ArrayList<>()); } @@ -52,7 +46,7 @@ public class TimerTaskSynchronizer implements DataEventListener { * Change the autosync delay * @param autoSyncDelay */ - public void setAutoSyncDelay(int autoSyncDelay) { + public void setAutoSyncDelay(long autoSyncDelay) { if (autoSyncDelay>0) { this.autoSyncDelay = autoSyncDelay; } @@ -84,25 +78,28 @@ public class TimerTaskSynchronizer implements DataEventListener { //do the sync, store the result boolean syncDone = synchronizeSingleTask(task); //for now doesn't deal with failure in the update, just task already updated - if (remainingTasks.contains(task)) { - remainingTasks.remove(task); + if (remainingTasks.contains(task)) { + remainingTasks.remove(task); + } + + if (syncDone) { + log.debug("Sync done"); + } + else { + log.debug("Sync failed"); } } tasksToSync = remainingTasks; } } - - - } - - /** * Makes one synchronization for a task, without annotations by default * * @param task + * @return boolean for failure of sync (maybe make it return an int for better treatment of failure) */ public boolean synchronizeSingleTask(TimerTask task) { String updateJsonString = TimerTaskHelper.taskToJSONFormat(task, false).toString(); @@ -114,11 +111,15 @@ public class TimerTaskSynchronizer implements DataEventListener { url = new URL(syncURl); } catch (MalformedURLException e) { e.printStackTrace(); + //abort synchronization of this task if the url is wrong + return false; } try { connection = (HttpURLConnection) url.openConnection(); } catch (IOException e) { e.printStackTrace(); + //abort synchronization of this task if connection impossible + return false; } connection.setUseCaches(false); connection.setDoInput(true); @@ -145,9 +146,10 @@ public class TimerTaskSynchronizer implements DataEventListener { //get the header fields Map<String, List<String>> map = connection.getHeaderFields(); boolean hasUpdated = false; - //check for positive answer from server + //check for answer from server for (Map.Entry<String, List<String>> entry : map.entrySet()) { for (String s : entry.getValue()) { + //positive answer, synchronization accepted if (s.equals("HTTP/1.1 200 OK")) { hasUpdated = true; } -- To stop receiving notification emails like this one, please contact chorem.org SCM administrator <admin+scm@chorem.org>.