Author: echatellier
Date: 2009-08-21 11:27:37 +0200 (Fri, 21 Aug 2009)
New Revision: 2649
Modified:
trunk/src/main/java/org/chorem/jtimer/io/GTimerIncrementalSaver.java
trunk/src/test/java/org/chorem/jtimer/data/TimerDataManagerTest.java
trunk/src/test/java/org/chorem/jtimer/io/GTimerIncrementalSaverTest.java
trunk/src/test/resources/testdata/24.alert
Log:
Alert file can't be loaded using Properties.load().
Key appears multiples times. Use readLines now.
Modified: trunk/src/main/java/org/chorem/jtimer/io/GTimerIncrementalSaver.java
===================================================================
--- trunk/src/main/java/org/chorem/jtimer/io/GTimerIncrementalSaver.java 2009-08-21 08:35:37 UTC (rev 2648)
+++ trunk/src/main/java/org/chorem/jtimer/io/GTimerIncrementalSaver.java 2009-08-21 09:27:37 UTC (rev 2649)
@@ -19,10 +19,12 @@
package org.chorem.jtimer.io;
import java.io.BufferedInputStream;
+import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
+import java.io.FileReader;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.RandomAccessFile;
@@ -604,6 +606,9 @@
/**
* Find task alert and load it.
*
+ * This file can't be loaded by {@code Properties#load(java.io.InputStream)}.
+ * Constains duplicated keys.
+ *
* @param task task to load alert
* @throws IOException if can't read ann file
*/
@@ -618,47 +623,45 @@
log.debug("Alert found for task " + task.getName());
}
- Properties prop = new Properties();
- prop.load(new BufferedInputStream(
- new FileInputStream(alertTaskFile)));
+ BufferedReader alertIn = new BufferedReader(new FileReader(
+ alertTaskFile));
- // analyse des donnees (temps)
- for (Object key : prop.keySet()) {
- String keyName = (String) key;
+ // skip first line : "format: 1.2"
+ String line = alertIn.readLine();
+ while ((line = alertIn.readLine()) != null) {
- // test if key format match
- if ("reachtotaltime".equals(keyName)) {
- String alertInfo = prop.getProperty(keyName);
+ line = line.trim();
+ if (!line.isEmpty()) {
+ String alertType = line.substring(0, line.indexOf(' '));
+ String alertDuration = line.substring(
+ line.indexOf(' ') + 1, line.length());
+
try {
- long duration = Long.parseLong(alertInfo);
-
- TimerAlert alert = new TimerAlert(
- TimerAlert.Type.REACH_TOTAL_TIME, duration);
- task.addAlert(alert);
- } catch (NumberFormatException e) {
- if (log.isErrorEnabled()) {
- log.error("Can't convert " + alertInfo
- + " into long");
+ if ("reachtotaltime".equals(alertType)) {
+ Long duration = Long.parseLong(alertDuration);
+ TimerAlert alert = new TimerAlert(
+ TimerAlert.Type.REACH_TOTAL_TIME, duration);
+ task.addAlert(alert);
+ } else if ("reachdailytime".equals(alertType)) {
+ Long duration = Long.parseLong(alertDuration);
+ TimerAlert alert = new TimerAlert(
+ TimerAlert.Type.REACH_TOTAL_TIME, duration);
+ task.addAlert(alert);
+ } else {
+ if (log.isWarnEnabled()) {
+ log.warn("Unknow alert type " + alertType);
+ }
}
- }
- }
-
- if ("reachdailytime".equals(keyName)) {
- String alertInfo = prop.getProperty(keyName);
- try {
- long duration = Long.parseLong(alertInfo);
-
- TimerAlert alert = new TimerAlert(
- TimerAlert.Type.REACH_DAILY_TIME, duration);
- task.addAlert(alert);
} catch (NumberFormatException e) {
if (log.isErrorEnabled()) {
- log.error("Can't convert " + alertInfo
+ log.error("Can't convert " + alertDuration
+ " into long");
}
}
}
}
+
+ alertIn.close();
}
}
Modified: trunk/src/test/java/org/chorem/jtimer/data/TimerDataManagerTest.java
===================================================================
--- trunk/src/test/java/org/chorem/jtimer/data/TimerDataManagerTest.java 2009-08-21 08:35:37 UTC (rev 2648)
+++ trunk/src/test/java/org/chorem/jtimer/data/TimerDataManagerTest.java 2009-08-21 09:27:37 UTC (rev 2649)
@@ -24,6 +24,7 @@
import java.util.List;
import org.chorem.jtimer.AbstractJTimerTest;
+import org.chorem.jtimer.entities.TimerAlert;
import org.chorem.jtimer.entities.TimerProject;
import org.chorem.jtimer.entities.TimerTask;
import org.chorem.jtimer.entities.TimerTaskHelper;
@@ -215,7 +216,7 @@
Assert.assertEquals(task1a.getSubTasks().size(), 2);
Assert.assertNotNull(task2a);
}
-
+
/**
* Test edit task.
*/
@@ -384,7 +385,7 @@
Assert.assertEquals(task3a.getSubTasks().size(), 3);
Assert.assertEquals(TimerTaskHelper.getAllTotalTime(task1a), 55035 + 65602);
}
-
+
/**
* Merge two tasks together.
*
@@ -430,16 +431,81 @@
Assert.assertNotNull(task1a);
Assert.assertNull(task2a);
// 4 = conflict resolved
- Assert.assertEquals(task1a.getSubTasks().size(), 4);
- Assert.assertEquals(TimerTaskHelper.getAllTotalTime(task1a), 55035 + 65602 + 200);
+ Assert.assertEquals(task1a.getSubTasks().size(), 4);
+ Assert.assertEquals(TimerTaskHelper.getAllTotalTime(task1a),
+ 55035 + 65602 + 200);
}
-
+
/**
+ * Test add alert.
+ *
+ * Alert reloading was buggy when multiple alert types were defined.
+ * (i.e. two alert type REACH_DAILY_TIME)
+ */
+ @Test
+ public void testAddAlert() {
+ // first load all
+ // and make a move operation
+ TimerCore core = new TimerCore();
+ TimerDataManager dataManager = core.getData();
+
+ //core.init();
+ core.load();
+ List<TimerProject> projectsBefore = dataManager.getProjectsList();
+ TimerTask task1 = findTask(projectsBefore, "jTimer/Refactoring");
+
+ Assert.assertNotNull(task1);
+ Assert.assertEquals(getRecursiveAlertsCount(Collections
+ .singleton(task1)), 0);
+
+ // add new project
+ TimerAlert alert1 = new TimerAlert(TimerAlert.Type.REACH_DAILY_TIME, 3600);
+ TimerAlert alert2 = new TimerAlert(TimerAlert.Type.REACH_DAILY_TIME, 7200);
+ TimerAlert alert3 = new TimerAlert(TimerAlert.Type.REACH_TOTAL_TIME, 10800);
+ task1.addAlert(alert1);
+ task1.addAlert(alert2);
+ task1.addAlert(alert3);
+ dataManager.modifyAlert(task1);
+ core.exit();
+
+ // second reload
+ // and test reloaded data
+ //core.init();
+ core.load();
+ List<TimerProject> projectsAfter = dataManager.getProjectsList();
+ TimerTask task1a = findTask(projectsAfter, "jTimer/Refactoring");
+
+ Assert.assertNotNull(task1a);
+ Assert.assertEquals(getRecursiveAlertsCount(Collections
+ .singleton(task1a)), 3);
+
+ // test correct alert loading
+ boolean alert1found = false;
+ boolean alert2found = false;
+ boolean alert3found = false;
+ for (TimerAlert alert : task1a.getAlerts()) {
+ // TODO commenct on fait pour comparer des enum ?
+ if (/*alert.getType().equals(Type.REACH_DAILY_TIME) && */alert.getDuration() == 3600) {
+ alert1found = true;
+ }
+ if (/*alert.getType().equals(Type.REACH_DAILY_TIME) && */alert.getDuration() == 7200) {
+ alert2found = true;
+ }
+ if (/*alert.getType().equals(Type.REACH_TOTAL_TIME) && */alert.getDuration() == 10800) {
+ alert3found = true;
+ }
+ }
+ Assert.assertTrue(alert1found, "Missing first alert");
+ Assert.assertTrue(alert2found, "Missing second alert");
+ Assert.assertTrue(alert3found, "Missing third alert");
+ }
+
+ /**
* Merge two tasks (tests alerts merge).
*/
@Test
public void testMergeTasksWithAlerts() {
- // first load all
+ // first load all
TimerCore core = new TimerCore();
TimerDataManager dataManager = core.getData();
@@ -455,7 +521,7 @@
Assert.assertNotNull(task3);
Assert.assertEquals(getRecursiveAlertsCount(Collections.singleton(task1)), 1);
Assert.assertEquals(getRecursiveAlertsCount(Collections.singleton(task2)), 0);
- Assert.assertEquals(getRecursiveAlertsCount(Collections.singleton(task3)), 2);
+ Assert.assertEquals(getRecursiveAlertsCount(Collections.singleton(task3)), 3);
// merge tasks
List<TimerTask> othersTask = new ArrayList<TimerTask>();
@@ -476,6 +542,6 @@
Assert.assertNull(task1a);
Assert.assertNotNull(task2a);
Assert.assertNull(task3a);
- Assert.assertEquals(getRecursiveAlertsCount(Collections.singleton(task2)), 3);
+ Assert.assertEquals(getRecursiveAlertsCount(Collections.singleton(task2)), 4);
}
}
Modified: trunk/src/test/java/org/chorem/jtimer/io/GTimerIncrementalSaverTest.java
===================================================================
--- trunk/src/test/java/org/chorem/jtimer/io/GTimerIncrementalSaverTest.java 2009-08-21 08:35:37 UTC (rev 2648)
+++ trunk/src/test/java/org/chorem/jtimer/io/GTimerIncrementalSaverTest.java 2009-08-21 09:27:37 UTC (rev 2649)
@@ -95,7 +95,7 @@
Assert.assertEquals(getProjectsCount(projects), 5);
Assert.assertEquals(getTasksCount(projects), 39);
Assert.assertEquals(getAnnotationsCount(projects), 9);
- Assert.assertEquals(getAlertsCount(projects), 5);
+ Assert.assertEquals(getAlertsCount(projects), 6);
/*FIXME saver.unlock();
} catch (DataLockingException e) {
Modified: trunk/src/test/resources/testdata/24.alert
===================================================================
--- trunk/src/test/resources/testdata/24.alert 2009-08-21 08:35:37 UTC (rev 2648)
+++ trunk/src/test/resources/testdata/24.alert 2009-08-21 09:27:37 UTC (rev 2649)
@@ -1,3 +1,4 @@
Format: 1.2
reachdailytime 3600
+reachdailytime 7200
reachtotaltime 26600