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 a6cf316d920379d6d3d2027c23d008f73b1ebb16 Author: servantie <servantie.c@gmail.com> Date: Mon Jul 11 11:14:08 2016 +0200 added a yaml object to save syncInfos --- .../org/chorem/jtimer/data/DataEventListener.java | 13 ++-- .../java/org/chorem/jtimer/data/TimerCore.java | 22 +++--- .../org/chorem/jtimer/data/TimerDataManager.java | 13 ++-- .../chorem/jtimer/entities/TimerTaskHelper.java | 18 +++-- .../chorem/jtimer/io/GTimerIncrementalSaver.java | 26 +++++-- .../chorem/jtimer/io/TimerTaskSynchronizer.java | 91 ++++++++++++---------- .../jtimer/ui/report/TimerTaskSyncInfoEditor.java | 4 +- 7 files changed, 107 insertions(+), 80 deletions(-) diff --git a/src/main/java/org/chorem/jtimer/data/DataEventListener.java b/src/main/java/org/chorem/jtimer/data/DataEventListener.java index 1e6dd80..0c42b9f 100644 --- a/src/main/java/org/chorem/jtimer/data/DataEventListener.java +++ b/src/main/java/org/chorem/jtimer/data/DataEventListener.java @@ -192,25 +192,26 @@ public interface DataEventListener extends EventListener { } /** * SyncInfo changed - * @param task + * @param task TimerTask * @param syncInfo SyncInfo */ - default void changeSyncInfo(TimerTask task, SyncInfo syncInfo) { + default void syncInfoChanged(TimerTask task, SyncInfo syncInfo) { } /** * SyncInfo deleted - * @param task + * @param task TimerTask * @param syncInfo SyncInfo */ - default void deleteSyncInfo(TimerTask task, SyncInfo syncInfo) { + default void syncInfoDeleted(TimerTask task, SyncInfo syncInfo) { } /** * Task synchronized - * @param task + * @param task TimerTask + * @param syncInfo SyncInfo */ - default void synchronizeTask(TimerTask task, SyncInfo syncInfo) { + default void taskSynchronized(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 286a440..fd2ea8f 100644 --- a/src/main/java/org/chorem/jtimer/data/TimerCore.java +++ b/src/main/java/org/chorem/jtimer/data/TimerCore.java @@ -152,8 +152,6 @@ 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,27 +190,29 @@ public class TimerCore { Collections.sort(projectsList); data.addAllProjects(projectsList); + + + // add the tasks that haven't been synced before to the synchronizer + for (TimerTask project : data.getProjectsList()) { + project.getSubTasks().forEach(this::addTaskToSync); + } } + /** * Add tasks that haven't been synchronized at * the last exit to the synchronizer tasks */ - protected void addTasksToSync() { - log.info("adding tasks to sync"); + protected void addTaskToSync(TimerTask task) { 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); - } - } + if (task.getIsSyncAtStartUp()) { + synchronizer.addTask(task); } - + task.getSubTasks().forEach(this::addTaskToSync); } /** diff --git a/src/main/java/org/chorem/jtimer/data/TimerDataManager.java b/src/main/java/org/chorem/jtimer/data/TimerDataManager.java index a740763..bf85b24 100644 --- a/src/main/java/org/chorem/jtimer/data/TimerDataManager.java +++ b/src/main/java/org/chorem/jtimer/data/TimerDataManager.java @@ -22,7 +22,6 @@ package org.chorem.jtimer.data; -import java.time.LocalDateTime; import java.util.ArrayList; import java.util.Calendar; import java.util.Collection; @@ -643,12 +642,13 @@ public class TimerDataManager { * @param task : the task to edit * @param info : the SyncInfo that was added */ - public void changeSyncInfo(TimerTask task, SyncInfo info) { + public void syncInfoChanged(TimerTask task, SyncInfo info) { task.addSyncInfo(info); + task.setSyncAtStartUp(true); for (DataEventListener dataEventListener : dataEventListeners) { - dataEventListener.changeSyncInfo(task, info); + dataEventListener.syncInfoChanged(task, info); } if (log.isDebugEnabled()) { log.debug("SyncInfo changed: " + info.getSyncURL()); @@ -665,7 +665,7 @@ public class TimerDataManager { task.removeSyncInfo(info); } for (DataEventListener dataEventListener : dataEventListeners) { - dataEventListener.deleteSyncInfo(task, info); + dataEventListener.syncInfoDeleted(task, info); } if (log.isDebugEnabled()) { log.debug("SyncInfo deleted: " + info.getSyncURL()); @@ -675,12 +675,13 @@ public class TimerDataManager { /** * When a task is synced * @param task + * @param syncInfo */ - public void synchronizeTask(TimerTask task, SyncInfo syncInfo) { + public void taskSynchronized(TimerTask task, SyncInfo syncInfo) { task.setSyncAtStartUp(false); for (DataEventListener dataEventListener: dataEventListeners) { - dataEventListener.synchronizeTask(task, syncInfo); + dataEventListener.taskSynchronized(task, syncInfo); } if (log.isDebugEnabled()) { log.debug("Task " + task.getName() + " synced at " + syncInfo.getSyncURL()); diff --git a/src/main/java/org/chorem/jtimer/entities/TimerTaskHelper.java b/src/main/java/org/chorem/jtimer/entities/TimerTaskHelper.java index ca58c40..2e01103 100644 --- a/src/main/java/org/chorem/jtimer/entities/TimerTaskHelper.java +++ b/src/main/java/org/chorem/jtimer/entities/TimerTaskHelper.java @@ -431,13 +431,21 @@ public class TimerTaskHelper { /** * Makes a single object with all the times + * @param task + * @param url + * @param withAnnotations + * @param timezone + * @return a JsonObject of the task times */ public static JsonObject taskURLToJSONObject(TimerTask task, String url, boolean withAnnotations, String timezone) { - Date startDate = task.getAllDaysAndTimes().firstKey(); - Date endDate = new Date(); - //get the current day too by making endDate a day later - endDate.setTime(endDate.getTime() + 86400 * 1000L); - JsonObject resultingObject = taskURLToJSONObject(task, url, startDate, endDate, withAnnotations, timezone); + JsonObject resultingObject = new JsonObject(); + if (task.getAllDaysAndTimes().size() > 0) { + Date startDate = task.getAllDaysAndTimes().firstKey(); + Date endDate = new Date(); + //get the current day too by making endDate a day later + endDate.setTime(endDate.getTime() + 86400 * 1000L); + resultingObject = taskURLToJSONObject(task, url, startDate, endDate, withAnnotations, timezone); + } return resultingObject; } } diff --git a/src/main/java/org/chorem/jtimer/io/GTimerIncrementalSaver.java b/src/main/java/org/chorem/jtimer/io/GTimerIncrementalSaver.java index 6862da3..7129012 100644 --- a/src/main/java/org/chorem/jtimer/io/GTimerIncrementalSaver.java +++ b/src/main/java/org/chorem/jtimer/io/GTimerIncrementalSaver.java @@ -612,8 +612,7 @@ public class GTimerIncrementalSaver extends AbstractSaver implements Saver, else { task.setSyncAtStartUp(false); } - log.info(task.getName() + " " + first_line); - + //make a yaml object for the syncInfo Yaml yaml = new Yaml(); for (Object obj : yaml.loadAll(parseIn)) { if (obj instanceof SyncInfo) { @@ -1270,10 +1269,6 @@ public class GTimerIncrementalSaver extends AbstractSaver implements Saver, return foundProjectNumber; } - @Override - public void changeSyncInfo(TimerTask task, SyncInfo syncURL) { - saveSynchronizationInfo(task); - } @Override public void deleteProject(TimerProject project) { @@ -1370,6 +1365,7 @@ public class GTimerIncrementalSaver extends AbstractSaver implements Saver, // si le merge a merger les annotations par // exemple. // Potentiellement aussi lors d'un move. + task.setSyncAtStartUp(true); saveTaskAnnotation(task); saveAlerts(task); saveSynchronizationInfo(task); @@ -1452,6 +1448,7 @@ public class GTimerIncrementalSaver extends AbstractSaver implements Saver, // remove task from running task and force save runningTasks.remove(task); saveTask(task); + task.setSyncAtStartUp(true); } @Override @@ -1506,16 +1503,29 @@ public class GTimerIncrementalSaver extends AbstractSaver implements Saver, * @param info */ @Override - public void deleteSyncInfo(TimerTask task, SyncInfo info) { + public void syncInfoDeleted(TimerTask task, SyncInfo info) { saveSynchronizationInfo(task); } /** * When a task is synced + * @param task + * @param info + */ + @Override + public void taskSynchronized(TimerTask task, SyncInfo info) { + saveSynchronizationInfo(task); + } + + /** + * When a syncInfo is modified + * @param task TimerTask + * @param info */ @Override - public void synchronizeTask(TimerTask task, SyncInfo info) { + public void syncInfoChanged(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 bcafa6d..aa0ac6d 100644 --- a/src/main/java/org/chorem/jtimer/io/TimerTaskSynchronizer.java +++ b/src/main/java/org/chorem/jtimer/io/TimerTaskSynchronizer.java @@ -153,45 +153,48 @@ public class TimerTaskSynchronizer implements DataEventListener { * @return an int (http response code or 0 in case of a problem) */ public static int synchronizeTaskOnURL(JsonObject object) { - String updateJsonString = object.toString(); - String syncURL = object.get("URL").getAsString(); - String charset = "UTF-8"; - HttpURLConnection connection; - URL url; - byte[] postDataBytes; int upDateValue = 0; - try { - url = new URL(syncURL); - connection = (HttpURLConnection) url.openConnection(); - connection.setUseCaches(false); - connection.setDoInput(true); - connection.setDoOutput(true); - connection.setRequestProperty("Content-Length", Integer.toString(updateJsonString.length())); - connection.setRequestProperty("Accept-Charset", charset); - connection.setRequestProperty("Content-Type", "application/json"); - connection.setRequestMethod("POST"); - postDataBytes = updateJsonString.getBytes(charset); - connection.getOutputStream().write(postDataBytes); - upDateValue = connection.getResponseCode(); - } catch (MalformedURLException e) { - if (log.isErrorEnabled()) { - log.error("URL malformed : " + syncURL + " Code : " + upDateValue); - } - } catch (ProtocolException e) { - if (log.isErrorEnabled()) { - log.error("Protocol error."+ " Code : " + upDateValue); - } - } catch (UnsupportedEncodingException e) { - if (log.isErrorEnabled()) { - log.error("Problem with encoding " + syncURL + " Code : " + upDateValue); - } - } catch (IOException e) { - if (log.isErrorEnabled()) { - log.error("Problem with the connection " + syncURL + " Code : " + upDateValue); - } - }catch (IllegalArgumentException e) { - if (log.isErrorEnabled()) { - log.error("Port value not valid " + syncURL + " Code : " + upDateValue); + //if it's an empty object, no synchronization is possible + if (!object.equals(new JsonObject())) { + String updateJsonString = object.toString(); + String syncURL = object.get("URL").getAsString(); + String charset = "UTF-8"; + HttpURLConnection connection; + URL url; + byte[] postDataBytes; + try { + url = new URL(syncURL); + connection = (HttpURLConnection) url.openConnection(); + connection.setUseCaches(false); + connection.setDoInput(true); + connection.setDoOutput(true); + connection.setRequestProperty("Content-Length", Integer.toString(updateJsonString.length())); + connection.setRequestProperty("Accept-Charset", charset); + connection.setRequestProperty("Content-Type", "application/json"); + connection.setRequestMethod("POST"); + postDataBytes = updateJsonString.getBytes(charset); + connection.getOutputStream().write(postDataBytes); + upDateValue = connection.getResponseCode(); + } catch (MalformedURLException e) { + if (log.isErrorEnabled()) { + log.error("URL malformed : " + syncURL + " Code : " + upDateValue); + } + } catch (ProtocolException e) { + if (log.isErrorEnabled()) { + log.error("Protocol error."+ " Code : " + upDateValue); + } + } catch (UnsupportedEncodingException e) { + if (log.isErrorEnabled()) { + log.error("Problem with encoding " + syncURL + " Code : " + upDateValue); + } + } catch (IOException e) { + if (log.isErrorEnabled()) { + log.error("Problem with the connection " + syncURL + " Code : " + upDateValue); + } + }catch (IllegalArgumentException e) { + if (log.isErrorEnabled()) { + log.error("Port value not valid " + syncURL + " Code : " + upDateValue); + } } } return upDateValue; @@ -214,7 +217,7 @@ public class TimerTaskSynchronizer implements DataEventListener { } /** - * Tasks deleted are modified from synchronization list if they exist in it + * Tasks deleted are removed from synchronization list if they exist in it * @param task modified task */ @Override @@ -237,6 +240,8 @@ public class TimerTaskSynchronizer implements DataEventListener { if ((task.getSynchronizingURLList() != null) && !(task.getSynchronizingURLList().isEmpty())) { tasksToSync.add(task); task.setSyncAtStartUp(true); + log.info(task.getName() + " " + task.getIsSyncAtStartUp()+ " time set"); + } } } @@ -267,6 +272,7 @@ public class TimerTaskSynchronizer implements DataEventListener { if ((task.getSynchronizingURLList() != null) && !(task.getSynchronizingURLList().isEmpty())) { tasksToSync.add(task); } + task.setSyncAtStartUp(true); } } @@ -276,22 +282,23 @@ public class TimerTaskSynchronizer implements DataEventListener { * @param syncURL the url to sync on (a String) */ @Override - public void changeSyncInfo(TimerTask task, SyncInfo syncURL) { + public void syncInfoChanged(TimerTask task, SyncInfo syncURL) { if (!tasksToSync.contains(task)) { //add it only if the URL is not empty if ((task.getSynchronizingURLList() != null) && !(task.getSynchronizingURLList().isEmpty())) { tasksToSync.add(task); } } + task.setSyncAtStartUp(true); } /** - * When the synchronization happens, set the syncAt Startup to false + * When the synchronization happens, set the syncAtStartUp to false * @param task the task that was synchronized * @param info SyncInfo */ @Override - public void synchronizeTask(TimerTask task, SyncInfo info) { + public void taskSynchronized(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 6133a76..2858b29 100644 --- a/src/main/java/org/chorem/jtimer/ui/report/TimerTaskSyncInfoEditor.java +++ b/src/main/java/org/chorem/jtimer/ui/report/TimerTaskSyncInfoEditor.java @@ -296,7 +296,7 @@ public class TimerTaskSyncInfoEditor extends FrameView implements ActionListener public void itemAdded(String urlToAdd){ if ((urlToAdd != null) && ((!task.getSynchronizingURLList().contains(urlToAdd)))) { SyncInfo infoToAdd = new SyncInfo(urlToAdd); - core.getData().changeSyncInfo(task, infoToAdd); + core.getData().syncInfoChanged(task, infoToAdd); urlComboBox.addItem(infoToAdd); if (log.isDebugEnabled()) { log.debug("New SyncInfo with URL : " + urlToAdd); @@ -396,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().synchronizeTask(task, infoToUse); + core.getData().taskSynchronized(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>.