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 81f68029dfa606e0e0fd7c715cb4f7eca6bc7708 Author: servantie <servantie.c@gmail.com> Date: Fri Jul 8 11:55:11 2016 +0200 added a boolean to track syncAtStartUp needed --- .../org/chorem/jtimer/data/DataEventListener.java | 14 +++++++--- .../java/org/chorem/jtimer/data/TimerCore.java | 24 +++++++++++++++++ .../org/chorem/jtimer/data/TimerDataManager.java | 15 +++++++++++ .../java/org/chorem/jtimer/entities/TimerTask.java | 17 ++++++++++++ .../chorem/jtimer/io/GTimerIncrementalSaver.java | 30 +++++++++++++++++++--- .../chorem/jtimer/io/TimerTaskSynchronizer.java | 15 +++++++++++ .../jtimer/ui/report/TimerTaskSyncInfoEditor.java | 6 ++++- 7 files changed, 113 insertions(+), 8 deletions(-) diff --git a/src/main/java/org/chorem/jtimer/data/DataEventListener.java b/src/main/java/org/chorem/jtimer/data/DataEventListener.java index d62232d..1e6dd80 100644 --- a/src/main/java/org/chorem/jtimer/data/DataEventListener.java +++ b/src/main/java/org/chorem/jtimer/data/DataEventListener.java @@ -193,18 +193,24 @@ public interface DataEventListener extends EventListener { /** * SyncInfo changed * @param task - * @param syncURL SyncInfo + * @param syncInfo SyncInfo */ - default void changeSyncInfo(TimerTask task, SyncInfo syncURL) { + default void changeSyncInfo(TimerTask task, SyncInfo syncInfo) { } /** * SyncInfo deleted * @param task - * @param syncURL SyncInfo + * @param syncInfo SyncInfo */ - default void deleteSyncInfo(TimerTask task, SyncInfo syncURL) { + default void deleteSyncInfo(TimerTask task, SyncInfo syncInfo) { + } + /** + * Task synchronized + * @param task + */ + default void synchronizeTask(TimerTask task, SyncInfo syncInfo) { } } diff --git a/src/main/java/org/chorem/jtimer/data/TimerCore.java b/src/main/java/org/chorem/jtimer/data/TimerCore.java index d29448b..286a440 100644 --- a/src/main/java/org/chorem/jtimer/data/TimerCore.java +++ b/src/main/java/org/chorem/jtimer/data/TimerCore.java @@ -35,6 +35,7 @@ import org.apache.commons.logging.LogFactory; import org.chorem.jtimer.JTimer; import org.chorem.jtimer.JTimerFactory; import org.chorem.jtimer.entities.TimerProject; +import org.chorem.jtimer.entities.TimerTask; import org.chorem.jtimer.io.DataLockingException; import org.chorem.jtimer.io.Saver; import org.chorem.jtimer.io.TimerTaskSynchronizer; @@ -151,6 +152,8 @@ public class TimerCore { saver.lock(); load(); + // add the tasks that haven't been synced before to the synchronizer + addTasksToSync(); initSucceded = true; } catch (DataLockingException e) { @@ -192,6 +195,27 @@ public class TimerCore { } /** + * Add tasks that haven't been synchronized at + * the last exit to the synchronizer tasks + */ + + protected void addTasksToSync() { + log.info("adding tasks to sync"); + if (log.isDebugEnabled()) { + log.debug("Adding tasks that were not synchronized at last jTimer exit"); + } + + for (TimerTask task : data.getProjectsList()) { + if (!(task instanceof TimerProject)) { + if (task.getIsSyncAtStartUp()) { + synchronizer.addTask(task); + } + } + } + + } + + /** * Save. */ public void exit() { diff --git a/src/main/java/org/chorem/jtimer/data/TimerDataManager.java b/src/main/java/org/chorem/jtimer/data/TimerDataManager.java index 529a349..a740763 100644 --- a/src/main/java/org/chorem/jtimer/data/TimerDataManager.java +++ b/src/main/java/org/chorem/jtimer/data/TimerDataManager.java @@ -671,4 +671,19 @@ public class TimerDataManager { log.debug("SyncInfo deleted: " + info.getSyncURL()); } } + + /** + * When a task is synced + * @param task + */ + public void synchronizeTask(TimerTask task, SyncInfo syncInfo) { + task.setSyncAtStartUp(false); + + for (DataEventListener dataEventListener: dataEventListeners) { + dataEventListener.synchronizeTask(task, syncInfo); + } + if (log.isDebugEnabled()) { + log.debug("Task " + task.getName() + " synced at " + syncInfo.getSyncURL()); + } + } } diff --git a/src/main/java/org/chorem/jtimer/entities/TimerTask.java b/src/main/java/org/chorem/jtimer/entities/TimerTask.java index 79a90c0..a1d3707 100644 --- a/src/main/java/org/chorem/jtimer/entities/TimerTask.java +++ b/src/main/java/org/chorem/jtimer/entities/TimerTask.java @@ -94,6 +94,11 @@ public class TimerTask implements Cloneable, protected List<SyncInfo> synchronisingInfoList; /** + * Boolean to keep track of tasks not synced before jtimer exit + */ + protected boolean syncAtStartUp; + + /** * Constructor. */ public TimerTask() { @@ -376,6 +381,18 @@ public class TimerTask implements Cloneable, } /** + * Sets the sync at startup + * @param syncAtStart boolean + */ + public void setSyncAtStartUp(boolean syncAtStart) { this.syncAtStartUp = syncAtStart;} + + /** + * Get the sync at startup + * @return boolean + */ + public boolean getIsSyncAtStartUp() { return this.syncAtStartUp;} + + /** * Add task's subtask. * * Also add parent reference. diff --git a/src/main/java/org/chorem/jtimer/io/GTimerIncrementalSaver.java b/src/main/java/org/chorem/jtimer/io/GTimerIncrementalSaver.java index 1db7f70..6862da3 100644 --- a/src/main/java/org/chorem/jtimer/io/GTimerIncrementalSaver.java +++ b/src/main/java/org/chorem/jtimer/io/GTimerIncrementalSaver.java @@ -604,6 +604,16 @@ public class GTimerIncrementalSaver extends AbstractSaver implements Saver, } try (BufferedReader parseIn = new BufferedReader(new FileReader(syncTaskFile))) { + //get first line to know if the tasks has to be synced at the start + String first_line = parseIn.readLine().trim(); + if ("SyncAtStartUp : true".equals(first_line)) { + task.setSyncAtStartUp(true); + } + else { + task.setSyncAtStartUp(false); + } + log.info(task.getName() + " " + first_line); + Yaml yaml = new Yaml(); for (Object obj : yaml.loadAll(parseIn)) { if (obj instanceof SyncInfo) { @@ -1117,7 +1127,13 @@ public class GTimerIncrementalSaver extends AbstractSaver implements Saver, // first make backup backupfile = makeBackupFile(synchronizationTaskFile); - + //add on first line if sync at startup is needed + if (task.getIsSyncAtStartUp()) { + out.write("SyncAtStartUp : true\n"); + } + else { + out.write("SyncAtStartUp : false\n"); + } //use Yaml to write it with pretty flow to make it easier to read DumperOptions dumper = new DumperOptions(); dumper.setPrettyFlow(true); @@ -1487,10 +1503,18 @@ public class GTimerIncrementalSaver extends AbstractSaver implements Saver, /** when a syncInfo is deleted make a save * * @param task - * @param url + * @param info + */ + @Override + public void deleteSyncInfo(TimerTask task, SyncInfo info) { + saveSynchronizationInfo(task); + } + + /** + * When a task is synced */ @Override - public void deleteSyncInfo(TimerTask task, SyncInfo url) { + public void synchronizeTask(TimerTask task, SyncInfo info) { saveSynchronizationInfo(task); } diff --git a/src/main/java/org/chorem/jtimer/io/TimerTaskSynchronizer.java b/src/main/java/org/chorem/jtimer/io/TimerTaskSynchronizer.java index b18b6d1..bcafa6d 100644 --- a/src/main/java/org/chorem/jtimer/io/TimerTaskSynchronizer.java +++ b/src/main/java/org/chorem/jtimer/io/TimerTaskSynchronizer.java @@ -141,6 +141,8 @@ public class TimerTaskSynchronizer implements DataEventListener { } Calendar cal = Calendar.getInstance(); task.setLastSync(cal.getTime(), syncURL); + //it doesn't have to be synced at startup sync it succeeded + task.setSyncAtStartUp(false); } } } @@ -206,6 +208,7 @@ public class TimerTaskSynchronizer implements DataEventListener { //add it only if the URL is not empty if ((!task.getSynchronizingInfoList().isEmpty()) && (!task.getSynchronizingURLList().isEmpty())) { tasksToSync.add(task); + task.setSyncAtStartUp(true); } } } @@ -233,6 +236,7 @@ public class TimerTaskSynchronizer implements DataEventListener { //add it only if the URL is not empty if ((task.getSynchronizingURLList() != null) && !(task.getSynchronizingURLList().isEmpty())) { tasksToSync.add(task); + task.setSyncAtStartUp(true); } } } @@ -247,6 +251,7 @@ public class TimerTaskSynchronizer implements DataEventListener { //add it only if the URL is not empty if ((task.getSynchronizingURLList() != null) && !(task.getSynchronizingURLList().isEmpty())) { tasksToSync.add(task); + task.setSyncAtStartUp(true); } } } @@ -279,4 +284,14 @@ public class TimerTaskSynchronizer implements DataEventListener { } } } + + /** + * When the synchronization happens, set the syncAt Startup to false + * @param task the task that was synchronized + * @param info SyncInfo + */ + @Override + public void synchronizeTask(TimerTask task, SyncInfo info) { + task.setSyncAtStartUp(false); + } } diff --git a/src/main/java/org/chorem/jtimer/ui/report/TimerTaskSyncInfoEditor.java b/src/main/java/org/chorem/jtimer/ui/report/TimerTaskSyncInfoEditor.java index c75664b..6133a76 100644 --- a/src/main/java/org/chorem/jtimer/ui/report/TimerTaskSyncInfoEditor.java +++ b/src/main/java/org/chorem/jtimer/ui/report/TimerTaskSyncInfoEditor.java @@ -305,6 +305,10 @@ public class TimerTaskSyncInfoEditor extends FrameView implements ActionListener } + /** + * deals with item selection in the combobox + * @param itemEvent + */ @Override public void itemStateChanged(ItemEvent itemEvent) { if (itemEvent.getStateChange()== ItemEvent.SELECTED) { @@ -392,7 +396,7 @@ public class TimerTaskSyncInfoEditor extends FrameView implements ActionListener infoBox(getResourceMap().getString("testSyncSuccessMessage"), getResourceMap().getString("testSyncSuccessTitle")); Calendar cal = Calendar.getInstance(); infoToUse.setLastSync(cal.getTime()); - core.getData().changeSyncInfo(task, infoToUse); + core.getData().synchronizeTask(task, infoToUse); } else { errorBox(getResourceMap().getString("testSyncFailureMessage"), getResourceMap().getString("testSyncFailureTitle")); -- To stop receiving notification emails like this one, please contact chorem.org SCM administrator <admin+scm@chorem.org>.