branch develop updated (ce44d31 -> 48a11de)
This is an automated email from the git hooks/post-receive script. New change to branch develop in repository jtimer. See http://git.chorem.org/jtimer.git from ce44d31 fixes #1319: Add a way to create a tree structure from a template new 48a11de fixes #1319: Remplace json format by yaml The 1 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference. Detailed log of new commits: commit 48a11de728d49802f3e8f507b3e6d37339e44740 Author: Eric Chatellier <chatellier@codelutin.com> Date: Wed Mar 2 14:21:04 2016 +0100 fixes #1319: Remplace json format by yaml Summary of changes: pom.xml | 12 ++----- src/main/java/org/chorem/jtimer/JTimerConfig.java | 40 +++++++++++++++------- .../org/chorem/jtimer/data/TimerDataManager.java | 26 +++++++------- .../java/org/chorem/jtimer/ui/NewTaskPanel.java | 2 +- src/site/rst/configuration.rst | 8 ++--- .../java/org/chorem/jtimer/JTimerFactoryTest.java | 10 +++--- src/test/resources/jtimertest.properties | 5 ++- src/test/resources/templates/project1.txt | 11 ++++++ src/test/resources/templates/project2.yaml | 3 ++ 9 files changed, 69 insertions(+), 48 deletions(-) create mode 100644 src/test/resources/templates/project1.txt create mode 100644 src/test/resources/templates/project2.yaml -- To stop receiving notification emails like this one, please contact chorem.org SCM administrator <admin+scm@chorem.org>.
This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository jtimer. See http://git.chorem.org/jtimer.git commit 48a11de728d49802f3e8f507b3e6d37339e44740 Author: Eric Chatellier <chatellier@codelutin.com> Date: Wed Mar 2 14:21:04 2016 +0100 fixes #1319: Remplace json format by yaml --- pom.xml | 12 ++----- src/main/java/org/chorem/jtimer/JTimerConfig.java | 40 +++++++++++++++------- .../org/chorem/jtimer/data/TimerDataManager.java | 26 +++++++------- .../java/org/chorem/jtimer/ui/NewTaskPanel.java | 2 +- src/site/rst/configuration.rst | 8 ++--- .../java/org/chorem/jtimer/JTimerFactoryTest.java | 10 +++--- src/test/resources/jtimertest.properties | 5 ++- src/test/resources/templates/project1.txt | 11 ++++++ src/test/resources/templates/project2.yaml | 3 ++ 9 files changed, 69 insertions(+), 48 deletions(-) diff --git a/pom.xml b/pom.xml index a7cf280..b0deb26 100644 --- a/pom.xml +++ b/pom.xml @@ -309,15 +309,9 @@ <version>2.3.23</version> </dependency> <dependency> - <groupId>com.googlecode.json-simple</groupId> - <artifactId>json-simple</artifactId> - <version>1.1.1</version> - <exclusions> - <exclusion> - <artifactId>junit</artifactId> - <groupId>junit</groupId> - </exclusion> - </exclusions> + <groupId>org.yaml</groupId> + <artifactId>snakeyaml</artifactId> + <version>1.17</version> </dependency> <!-- commons-xxx lib --> diff --git a/src/main/java/org/chorem/jtimer/JTimerConfig.java b/src/main/java/org/chorem/jtimer/JTimerConfig.java index 46dfbed..ac98d49 100644 --- a/src/main/java/org/chorem/jtimer/JTimerConfig.java +++ b/src/main/java/org/chorem/jtimer/JTimerConfig.java @@ -22,17 +22,23 @@ package org.chorem.jtimer; -import java.util.List; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.nio.file.DirectoryIteratorException; +import java.nio.file.DirectoryStream; +import java.nio.file.FileSystems; +import java.nio.file.Files; +import java.nio.file.Path; import java.util.Map; -import java.util.Map.Entry; -import java.util.Properties; import java.util.TreeMap; +import org.apache.commons.io.FilenameUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.json.simple.JSONValue; import org.nuiton.config.ApplicationConfig; import org.nuiton.config.ArgumentsParserException; +import org.yaml.snakeyaml.Yaml; /** * JTimer configuration. @@ -152,14 +158,23 @@ public class JTimerConfig { * * @return task template as map */ - public Map<String, List<?>> getTaskTemplates() { - String prefix = "jtimer.ui.task.templates."; - Properties props = appConfig.getOptionStartsWith(prefix); - Map<String, List<?>> result = new TreeMap<>(); - for (Entry<Object, Object> e : props.entrySet()) { - String name = ((String)e.getKey()).substring(prefix.length()); - List<?> value = (List<?>)JSONValue.parse((String)e.getValue()); - result.put(name, value); + public Map<String, Object> getTaskTemplates() { + Map<String, Object> result = new TreeMap<>(); + String tplDirectory = appConfig.getOption(JTimerOption.UI_TEMPLATE_DIRECTORY.key); + Path backupDir = FileSystems.getDefault().getPath(tplDirectory); + try (DirectoryStream<Path> stream = Files.newDirectoryStream(backupDir)) { + Yaml yaml = new Yaml(); + for (Path file : stream) { + try (InputStream is = new FileInputStream(file.toFile())) { + Object r = yaml.load(is); + String name = FilenameUtils.removeExtension(file.getFileName().toString()); + result.put(name, r); + } + } + } catch (DirectoryIteratorException|IOException ex) { + if (log.isErrorEnabled()) { + log.error("Can't create backup", ex); + } } return result; } @@ -208,6 +223,7 @@ public class JTimerConfig { IO_SAVER_CLASS("jtimer.io.saver.class", "org.chorem.jtimer.io.GTimerIncrementalSaver"), IO_SAVER_DIRECTORY("jtimer.io.saver.directory", "${user.home}/.gtimer"), IO_SAVER_AUTOSAVEDELAY("jtimer.io.saver.autosavedelay", "300"), + UI_TEMPLATE_DIRECTORY("jtimer.ui.template.directory", "${jtimer.io.saver.directory}/templates"), UI_IDLE_TIME("jtimer.ui.idletime", "300"), UI_SHOW_CLOSED("jtimer.ui.showclosed", "false"), UI_CLOSE_TO_SYSTRAY("jtimer.ui.closetosystray", "true"), diff --git a/src/main/java/org/chorem/jtimer/data/TimerDataManager.java b/src/main/java/org/chorem/jtimer/data/TimerDataManager.java index 3031466..1afccff 100644 --- a/src/main/java/org/chorem/jtimer/data/TimerDataManager.java +++ b/src/main/java/org/chorem/jtimer/data/TimerDataManager.java @@ -29,6 +29,7 @@ import java.util.Collections; import java.util.Date; import java.util.Iterator; import java.util.List; +import java.util.Map; import java.util.Map.Entry; import org.apache.commons.lang3.ArrayUtils; @@ -38,7 +39,6 @@ import org.chorem.jtimer.JTimer; import org.chorem.jtimer.entities.TimerAlert; import org.chorem.jtimer.entities.TimerProject; import org.chorem.jtimer.entities.TimerTask; -import org.json.simple.JSONObject; /** * Gere les donnees. Des objets peuvent s'enregistrer pour etre notifies des @@ -157,7 +157,7 @@ public class TimerDataManager { } if (taskTemplate != null) { - List<?> subTasks = JTimer.config.getTaskTemplates().get(taskTemplate); + Object subTasks = JTimer.config.getTaskTemplates().get(taskTemplate); createSubTasks(subTasks, task); } } @@ -168,26 +168,26 @@ public class TimerDataManager { * @param subTasks template to apply * @param task current subtask */ - protected void createSubTasks(List<?> subTasks, TimerTask task) { - for (JSONObject subTask : (List<JSONObject>)subTasks) { - String name = (String)subTask.get("name"); - if (name != null) { + protected void createSubTasks(Object subTasks, TimerTask task) { + if (subTasks != null && subTasks instanceof Map) { + Map<String, Object> realSubTasks = (Map<String, Object>)subTasks; + for (Map.Entry<String, Object> entry : realSubTasks.entrySet()) { + String name = entry.getKey(); + Object newSubTasks = entry.getValue(); + TimerTask newTask = new TimerTask(name); - + // Fix creation date newTask.setCreationDate(new Date()); - - task.addTask(newTask); + task.addTask(newTask); + // send notification for (DataEventListener dataEventListener : dataEventListeners) { dataEventListener.addTask(newTask); } - List<?> newSubTasks = (List<?>)subTask.get("tasks"); - if (newSubTasks != null) { - createSubTasks(newSubTasks, newTask); - } + createSubTasks(newSubTasks, newTask); } } } diff --git a/src/main/java/org/chorem/jtimer/ui/NewTaskPanel.java b/src/main/java/org/chorem/jtimer/ui/NewTaskPanel.java index dc4afde..222ad30 100644 --- a/src/main/java/org/chorem/jtimer/ui/NewTaskPanel.java +++ b/src/main/java/org/chorem/jtimer/ui/NewTaskPanel.java @@ -72,7 +72,7 @@ public class NewTaskPanel extends JPanel { new Insets(1, 1, 1, 1), 0, 0)); // Task template - Map<String, List<?>> templates = JTimer.config.getTaskTemplates(); + Map<String, Object> templates = JTimer.config.getTaskTemplates(); newTaskTemplateBox = new JComboBox<>(); diff --git a/src/site/rst/configuration.rst b/src/site/rst/configuration.rst index 8788b5d..e2ba12e 100644 --- a/src/site/rst/configuration.rst +++ b/src/site/rst/configuration.rst @@ -42,12 +42,10 @@ Default idle time is ``300`` seconds (5 minutes). It is possible to modify this Task template ------------- -jTimer can create a task using subtask template. You can specify template, as json format, using cofiguration option:: +jTimer can create a task using subtask template. You can specify template, as yaml format, by creating +a file into ``${userHome}/.gtimer/template`` directory (one file per template). - jtimer.ui.task.templates.templatename1=[{"name":"dev", "tasks":[{"name":"E1"},{"name":"E2"}]},{"name":"ano", "tasks":[{"name":"A1"}]},{"name":"admin", "tasks":[{"name":"database", "tasks":[{"name":"sub database task1"},{"name":"sub database task2"}]}]},{"name":"meetings"},{"name":"releases"}] - jtimer.ui.task.templates.templatename2=[{"name":"dev"}, {"name":"admin"}] - -The template named 'templatename1' will create following hierachy version is:: +For example, in file ``templatename1.txt``:: dev: E1: diff --git a/src/test/java/org/chorem/jtimer/JTimerFactoryTest.java b/src/test/java/org/chorem/jtimer/JTimerFactoryTest.java index 95db308..9085ef4 100644 --- a/src/test/java/org/chorem/jtimer/JTimerFactoryTest.java +++ b/src/test/java/org/chorem/jtimer/JTimerFactoryTest.java @@ -71,16 +71,16 @@ public class JTimerFactoryTest extends AbstractJTimerTest { */ @Test public void testJsonTaskTemplates() { - Map<String, List<?>> templates = JTimer.config.getTaskTemplates(); - List<?> p1Tpl = templates.get("project1"); + Map<String, Object> templates = JTimer.config.getTaskTemplates(); + Map<String, Object> p1Tpl = (Map<String, Object>)templates.get("project1"); Assert.assertNotNull(p1Tpl); - List<?> p2Tpl = templates.get("project2"); + Map<String, Object> p2Tpl = (Map<String, Object>)templates.get("project2"); Assert.assertNotNull(p2Tpl); - List<?> p3Tpl = templates.get("project3"); + Object p3Tpl = templates.get("project3"); Assert.assertNull(p3Tpl); Assert.assertEquals(p1Tpl.size(), 5); - Assert.assertEquals(p2Tpl.size(), 5); + Assert.assertEquals(p2Tpl.size(), 3); } /** diff --git a/src/test/resources/jtimertest.properties b/src/test/resources/jtimertest.properties index 6bd82b7..20f5ba3 100644 --- a/src/test/resources/jtimertest.properties +++ b/src/test/resources/jtimertest.properties @@ -30,6 +30,5 @@ jtimer.io.saver.directory=${user.home}/testngdata # Save delay jtimer.io.saver.autosavedelay=199 -# Task templates as json -jtimer.ui.task.templates.project1=[{"name":"dev1", "tasks":[{"name":"E1"},{"name":"E2"}]},{"name":"ano1", "tasks":[{"name":"A1"}]},{"name":"admin", "tasks":[{"name":"database", "tasks":[{"name":"sub database task1"},{"name":"sub database task2"}]}]},{"name":"meetings"},{"name":"releases"}] -jtimer.ui.task.templates.project2=[{"name":"dev2", "tasks":[{"name":"E1"},{"name":"E2"}]},{"name":"ano2", "tasks":[{"name":"A1"}]},{"name":"admin", "tasks":[{"name":"database", "tasks":[{"name":"sub database task1"},{"name":"sub database task2"}]}]},{"name":"meetings"},{"name":"releases"}] +# sandbox in test +jtimer.ui.template.directory=src/test/resources/templates diff --git a/src/test/resources/templates/project1.txt b/src/test/resources/templates/project1.txt new file mode 100644 index 0000000..cd2dd20 --- /dev/null +++ b/src/test/resources/templates/project1.txt @@ -0,0 +1,11 @@ +dev: + E1: + E2: +ano: + A1: +admin: + database: + sub database task1: + sub database task2: +meetings: +releases: \ No newline at end of file diff --git a/src/test/resources/templates/project2.yaml b/src/test/resources/templates/project2.yaml new file mode 100644 index 0000000..2fcdbd3 --- /dev/null +++ b/src/test/resources/templates/project2.yaml @@ -0,0 +1,3 @@ +dev: +admin: +releases: -- To stop receiving notification emails like this one, please contact chorem.org SCM administrator <admin+scm@chorem.org>.
participants (1)
-
chorem.org scm