This is an automated email from the git hooks/post-receive script. New commit to branch java8-localdate-localtime in repository jtimer. See http://git.chorem.org/jtimer.git commit 1fe8aa3ea4ba5f9f28e004f720302579209b36f6 Author: Eric Chatellier <chatellier@codelutin.com> Date: Mon Mar 7 11:10:41 2016 +0100 refs #1334: Use java 8 api for LocalDate and LocalTime (code won't compile) --- src/main/java/org/chorem/jtimer/JTimer.java | 8 +- src/main/java/org/chorem/jtimer/JTimerUtil.java | 55 +++ .../org/chorem/jtimer/data/CommonVetoable.java | 3 +- .../org/chorem/jtimer/data/DataEventListener.java | 3 +- .../org/chorem/jtimer/data/TimerDataManager.java | 5 +- .../jtimer/data/VetoableDataEventListener.java | 3 +- .../java/org/chorem/jtimer/entities/TimerTask.java | 15 +- .../chorem/jtimer/entities/TimerTaskHelper.java | 15 +- .../chorem/jtimer/io/GTimerIncrementalSaver.java | 11 +- .../java/org/chorem/jtimer/io/GTimerTimeUtil.java | 41 +- src/main/java/org/chorem/jtimer/ui/StatusBar.java | 5 +- .../java/org/chorem/jtimer/ui/TimerTaskEditor.java | 22 +- .../chorem/jtimer/ui/systray/SystrayManager.java | 6 +- .../chorem/jtimer/ui/tasks/RefreshTreeTask.java | 6 +- .../org/chorem/jtimer/ui/tasks/RunTaskJob.java | 14 +- .../jtimer/ui/treetable/ProjectsAndTasksModel.java | 74 +-- .../ProjectsAndTasksRunningCellRenderer.java | 60 +-- .../org/chorem/jtimer/utils/DailySortedMap.java | 308 ------------ .../java/org/chorem/jtimer/utils/package-info.java | 25 - .../chorem/jtimer/data/TimerDataManagerTest.java | 3 +- .../org/chorem/jtimer/entities/TimerTaskTest.java | 8 +- .../jtimer/io/GTimerIncrementalSaverTest.java | 24 +- .../chorem/jtimer/utils/DailySortedMapTest.java | 538 --------------------- 23 files changed, 147 insertions(+), 1105 deletions(-) diff --git a/src/main/java/org/chorem/jtimer/JTimer.java b/src/main/java/org/chorem/jtimer/JTimer.java index ccbd29a..d5ddf5a 100644 --- a/src/main/java/org/chorem/jtimer/JTimer.java +++ b/src/main/java/org/chorem/jtimer/JTimer.java @@ -31,6 +31,7 @@ import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.io.File; import java.io.IOException; +import java.time.LocalDate; import java.util.Calendar; import java.util.Date; import java.util.List; @@ -1028,7 +1029,7 @@ public class JTimer extends SingleFrameApplication implements .get(0); // task is not running - Date now = new Date(); + LocalDate now = LocalDate.now(); long todayTime = selectedTask.getTime(now); long newTodayTime = todayTime + increment; @@ -1036,8 +1037,7 @@ public class JTimer extends SingleFrameApplication implements try { // check if + negative increment still positive if (newTodayTime > 0) { - core.getData().changeTaskTime(selectedTask, now, - newTodayTime); + core.getData().changeTaskTime(selectedTask, now, newTodayTime); } else { // force to 0 core.getData().changeTaskTime(selectedTask, now, 0L); @@ -1053,7 +1053,7 @@ public class JTimer extends SingleFrameApplication implements @Action(enabledProperty = "selectedSingleTask") public void setToZero() { TimerTask task = projectsAndTasksTable.getSelectedTasks().get(0); - incrementTaskTime(-task.getTime(new Date())); + incrementTaskTime(-task.getTime(LocalDate.now())); } /** diff --git a/src/main/java/org/chorem/jtimer/JTimerUtil.java b/src/main/java/org/chorem/jtimer/JTimerUtil.java new file mode 100644 index 0000000..6434e9f --- /dev/null +++ b/src/main/java/org/chorem/jtimer/JTimerUtil.java @@ -0,0 +1,55 @@ +/* + * #%L + * jTimer + * %% + * Copyright (C) 2016 CodeLutin, Chatellier Eric + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ +package org.chorem.jtimer; + +import java.time.Instant; +import java.time.LocalDate; +import java.time.ZoneId; +import java.util.Date; + +/** + * This contains some util method used across wall application. + * + * @author Eric Chatellier + */ +public class JTimerUtil { + + /** + * Convert java 8 LocalDate to legacy Date. + * + * @param localDate local date to convert + * @return Date instance + */ + public static Date toDate(LocalDate localDate) { + return Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); + } + + /** + * Convert legacy Date to java 8 LocalDate. + * + * @param date date to convert + * @return LocalDate instance + */ + public static LocalDate toLocalDate(Date date) { + return Instant.ofEpochMilli(date.getTime()).atZone(ZoneId.systemDefault()).toLocalDate(); + } +} diff --git a/src/main/java/org/chorem/jtimer/data/CommonVetoable.java b/src/main/java/org/chorem/jtimer/data/CommonVetoable.java index 0e6914f..c70d7b2 100644 --- a/src/main/java/org/chorem/jtimer/data/CommonVetoable.java +++ b/src/main/java/org/chorem/jtimer/data/CommonVetoable.java @@ -22,6 +22,7 @@ package org.chorem.jtimer.data; +import java.time.LocalDate; import java.util.Collection; import java.util.Date; import java.util.List; @@ -232,7 +233,7 @@ public class CommonVetoable implements VetoableDataEventListener { * {@inheritDoc} */ @Override - public void checkSetTaskTime(TimerTask task, Date date, Long value) { + public void checkSetTaskTime(TimerTask task, LocalDate date, Long value) { } diff --git a/src/main/java/org/chorem/jtimer/data/DataEventListener.java b/src/main/java/org/chorem/jtimer/data/DataEventListener.java index 272dcfd..e7eab70 100644 --- a/src/main/java/org/chorem/jtimer/data/DataEventListener.java +++ b/src/main/java/org/chorem/jtimer/data/DataEventListener.java @@ -22,6 +22,7 @@ package org.chorem.jtimer.data; +import java.time.LocalDate; import java.util.Collection; import java.util.Date; import java.util.EventListener; @@ -98,7 +99,7 @@ public interface DataEventListener extends EventListener { * @param date date * @param time task time */ - void setTaskTime(TimerTask task, Date date, Long time); + void setTaskTime(TimerTask task, LocalDate date, Long time); /** * Change task state. diff --git a/src/main/java/org/chorem/jtimer/data/TimerDataManager.java b/src/main/java/org/chorem/jtimer/data/TimerDataManager.java index 1afccff..ebbc3c6 100644 --- a/src/main/java/org/chorem/jtimer/data/TimerDataManager.java +++ b/src/main/java/org/chorem/jtimer/data/TimerDataManager.java @@ -22,6 +22,7 @@ package org.chorem.jtimer.data; +import java.time.LocalDate; import java.util.ArrayList; import java.util.Calendar; import java.util.Collection; @@ -227,7 +228,7 @@ public class TimerDataManager { * @param date date to change time * @param value new time in ms */ - public void changeTaskTime(TimerTask task, Date date, + public void changeTaskTime(TimerTask task, LocalDate date, long value) { // fire vetoable event @@ -524,7 +525,7 @@ public class TimerDataManager { } // copy otherTask times to current task - for (Entry<Date, Long> times : otherTask.getAllDaysAndTimes().entrySet()) { + for (Entry<LocalDate, Long> times : otherTask.getAllDaysAndTimes().entrySet()) { Long currentDuration = destinationTask.getTime(times.getKey()); currentDuration += times.getValue(); destinationTask.setTime(times.getKey(), currentDuration); diff --git a/src/main/java/org/chorem/jtimer/data/VetoableDataEventListener.java b/src/main/java/org/chorem/jtimer/data/VetoableDataEventListener.java index 0f8a9da..89ce017 100644 --- a/src/main/java/org/chorem/jtimer/data/VetoableDataEventListener.java +++ b/src/main/java/org/chorem/jtimer/data/VetoableDataEventListener.java @@ -22,6 +22,7 @@ package org.chorem.jtimer.data; +import java.time.LocalDate; import java.util.Collection; import java.util.Date; import java.util.EventListener; @@ -99,7 +100,7 @@ public interface VetoableDataEventListener extends EventListener { * @param date day of change * @param value new time in seconds */ - void checkSetTaskTime(TimerTask task, Date date, Long value); + void checkSetTaskTime(TimerTask task, LocalDate date, Long value); /** * Check change task state. diff --git a/src/main/java/org/chorem/jtimer/entities/TimerTask.java b/src/main/java/org/chorem/jtimer/entities/TimerTask.java index fd3e443..0402f39 100644 --- a/src/main/java/org/chorem/jtimer/entities/TimerTask.java +++ b/src/main/java/org/chorem/jtimer/entities/TimerTask.java @@ -23,6 +23,7 @@ package org.chorem.jtimer.entities; import java.io.Serializable; +import java.time.LocalDate; import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -30,8 +31,6 @@ import java.util.SortedMap; import java.util.TreeMap; import java.util.UUID; -import org.chorem.jtimer.utils.DailySortedMap; - /** * Represents a task. * @@ -71,7 +70,7 @@ public class TimerTask implements Cloneable, /** * Map calendar of day -> time (ms). (ordered on keys) */ - protected SortedMap<Date, Long> allDaysTimes; + protected SortedMap<LocalDate, Long> allDaysTimes; /** * Map date -> annotation text. @@ -92,7 +91,7 @@ public class TimerTask implements Cloneable, * Constructor. */ public TimerTask() { - allDaysTimes = new DailySortedMap<>(); + allDaysTimes = new TreeMap<>(); // les annoation sont à la seconde pres allDaysAnnotations = new TreeMap<>(); subTasks = new ArrayList<>(); @@ -240,7 +239,7 @@ public class TimerTask implements Cloneable, * @param date date * @param time time in ms */ - public void setTime(Date date, Long time) { + public void setTime(LocalDate date, Long time) { allDaysTimes.put(date, time); } @@ -250,7 +249,7 @@ public class TimerTask implements Cloneable, * @param date date * @return time at specified date in ms */ - public long getTime(Date date) { + public long getTime(LocalDate date) { long result = 0; Long t = allDaysTimes.get(date); @@ -266,7 +265,7 @@ public class TimerTask implements Cloneable, * * @return total duration of all projects */ - public SortedMap<Date, Long> getAllDaysAndTimes() { + public SortedMap<LocalDate, Long> getAllDaysAndTimes() { return allDaysTimes; } @@ -364,7 +363,7 @@ public class TimerTask implements Cloneable, : (Date) creationDate.clone(); // make new list instance - task.allDaysTimes = new DailySortedMap<>(allDaysTimes); + task.allDaysTimes = new TreeMap<>(allDaysTimes); task.allDaysAnnotations = new TreeMap<>(allDaysAnnotations); task.subTasks = new ArrayList<>(subTasks); } catch (CloneNotSupportedException e) { diff --git a/src/main/java/org/chorem/jtimer/entities/TimerTaskHelper.java b/src/main/java/org/chorem/jtimer/entities/TimerTaskHelper.java index 830dfaa..4d0c656 100644 --- a/src/main/java/org/chorem/jtimer/entities/TimerTaskHelper.java +++ b/src/main/java/org/chorem/jtimer/entities/TimerTaskHelper.java @@ -22,6 +22,7 @@ package org.chorem.jtimer.entities; +import java.time.LocalDate; import java.util.ArrayList; import java.util.Calendar; import java.util.Collection; @@ -124,7 +125,7 @@ public class TimerTaskHelper { * @param date date for day * @return time in seconds */ - public static long getTotalTime(TimerTask task, Date date) { + public static long getTotalTime(TimerTask task, LocalDate date) { long result = 0L; // only task time @@ -144,11 +145,11 @@ public class TimerTaskHelper { * @param task task to find time * @return date */ - public static Date getTaskFirstDateOfTiming(TimerTask task) { + public static LocalDate getTaskFirstDateOfTiming(TimerTask task) { - Date date = null; + LocalDate date = null; - SortedMap<Date, Long> allTiming = task.getAllDaysAndTimes(); + SortedMap<LocalDate, Long> allTiming = task.getAllDaysAndTimes(); if (!allTiming.isEmpty()) { date = allTiming.firstKey(); } @@ -162,11 +163,11 @@ public class TimerTaskHelper { * @param task task to find time * @return date */ - public static Date getTaskLastDateOfTiming(TimerTask task) { + public static LocalDate getTaskLastDateOfTiming(TimerTask task) { - Date date = null; + LocalDate date = null; - SortedMap<Date, Long> allTiming = task.getAllDaysAndTimes(); + SortedMap<LocalDate, Long> allTiming = task.getAllDaysAndTimes(); if (!allTiming.isEmpty()) { date = allTiming.lastKey(); } diff --git a/src/main/java/org/chorem/jtimer/io/GTimerIncrementalSaver.java b/src/main/java/org/chorem/jtimer/io/GTimerIncrementalSaver.java index 85bcaaf..158b14b 100644 --- a/src/main/java/org/chorem/jtimer/io/GTimerIncrementalSaver.java +++ b/src/main/java/org/chorem/jtimer/io/GTimerIncrementalSaver.java @@ -42,6 +42,7 @@ import java.nio.file.Files; import java.nio.file.Path; import java.text.DateFormat; import java.text.SimpleDateFormat; +import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; @@ -517,7 +518,7 @@ public class GTimerIncrementalSaver extends AbstractSaver implements Saver, Matcher m = dataPattern.matcher(sKey); if (m.find()) { try { - Date keyDate = GTimerTimeUtil.yyyyMMdd2Date(sKey); + LocalDate keyDate = GTimerTimeUtil.yyyyMMdd2Date(sKey); String timeString = (String) prop.get(sKey); t.setTime(keyDate, Long.valueOf(timeString) * 1000); } catch (NumberFormatException e) { @@ -1030,9 +1031,9 @@ public class GTimerIncrementalSaver extends AbstractSaver implements Saver, out.write("Data:\n"); // save time of each day - for (Entry<Date, Long> entry : task.getAllDaysAndTimes().entrySet()) { + for (Entry<LocalDate, Long> entry : task.getAllDaysAndTimes().entrySet()) { - Date date = entry.getKey(); + LocalDate date = entry.getKey(); long value = entry.getValue() / 1000; String gtimerDate = GTimerTimeUtil.date2yyyyMMdd(date); out.write(gtimerDate + " " + value + "\n"); @@ -1354,7 +1355,7 @@ public class GTimerIncrementalSaver extends AbstractSaver implements Saver, * @see org.chorem.jtimer.event.DataEventListener#setTaskTime(org.chorem.jtimer.entities.TimerTask, java.util.Date, java.lang.Long) */ @Override - public void setTaskTime(TimerTask task, Date date, Long time) { + public void setTaskTime(TimerTask task, LocalDate date, Long time) { // ne sauve la tache que si elle n'est pas // en cours d'execution if (!runningTasks.contains(task)) { @@ -1578,7 +1579,7 @@ public class GTimerIncrementalSaver extends AbstractSaver implements Saver, * {@inheritDoc} */ @Override - public void checkSetTaskTime(TimerTask task, Date date, Long value) { + public void checkSetTaskTime(TimerTask task, LocalDate date, Long value) { } diff --git a/src/main/java/org/chorem/jtimer/io/GTimerTimeUtil.java b/src/main/java/org/chorem/jtimer/io/GTimerTimeUtil.java index 32686c6..217f65c 100644 --- a/src/main/java/org/chorem/jtimer/io/GTimerTimeUtil.java +++ b/src/main/java/org/chorem/jtimer/io/GTimerTimeUtil.java @@ -2,7 +2,7 @@ * #%L * jTimer * %% - * Copyright (C) 2008 - 2011 CodeLutin, Chatellier Eric + * Copyright (C) 2008 - 2016 CodeLutin, Chatellier Eric * %% * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as @@ -22,9 +22,8 @@ package org.chorem.jtimer.io; -import java.text.DateFormat; -import java.text.SimpleDateFormat; -import java.util.Calendar; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; import java.util.Date; import org.apache.commons.logging.Log; @@ -44,8 +43,7 @@ public class GTimerTimeUtil { private static Log log = LogFactory.getLog(GTimerTimeUtil.class); /** gtimer day string date format */ - protected static final DateFormat GTIMERDATEFORMAT = new SimpleDateFormat( - "yyyyMMdd"); + protected static final DateTimeFormatter GTIMERDATEFORMAT = DateTimeFormatter.ofPattern("yyyyMMdd"); /** * Protected constructor. @@ -61,34 +59,9 @@ public class GTimerTimeUtil { * @return {@link Date} * @throws IllegalArgumentException */ - public static Date yyyyMMdd2Date(String dateAsString) { + public static LocalDate yyyyMMdd2Date(String dateAsString) { - int year, mouth, day; - Date date = null; - - try { - String syear = dateAsString.substring(0, 4); - String smonth = dateAsString.substring(4, 6); - String sday = dateAsString.substring(6, 8); - - year = Integer.parseInt(syear); - mouth = Integer.parseInt(smonth); - day = Integer.parseInt(sday); - - Calendar calendar = Calendar.getInstance(); - calendar.set(Calendar.YEAR, year); - calendar.set(Calendar.MONTH, mouth - 1); - calendar.set(Calendar.DAY_OF_MONTH, day); - - date = calendar.getTime(); - } catch (NumberFormatException e) { - if (log.isWarnEnabled()) { - log.warn("Can't parse string " + dateAsString + " in yyyyMMdd format", - e); - } - throw new IllegalArgumentException("Can't parse string " + dateAsString - + " in yyyyMMdd format", e); - } + LocalDate date = (LocalDate)GTIMERDATEFORMAT.parse(dateAsString); return date; } @@ -100,7 +73,7 @@ public class GTimerTimeUtil { * @return a string yyyyMMdd date * @throws IllegalArgumentException */ - public static String date2yyyyMMdd(Date date) { + public static String date2yyyyMMdd(LocalDate date) { String dateAsString = GTIMERDATEFORMAT.format(date); diff --git a/src/main/java/org/chorem/jtimer/ui/StatusBar.java b/src/main/java/org/chorem/jtimer/ui/StatusBar.java index 99ff3d3..6810a0e 100644 --- a/src/main/java/org/chorem/jtimer/ui/StatusBar.java +++ b/src/main/java/org/chorem/jtimer/ui/StatusBar.java @@ -23,6 +23,7 @@ package org.chorem.jtimer.ui; import java.awt.GridLayout; +import java.time.LocalDate; import java.util.Collection; import java.util.Date; import java.util.List; @@ -111,7 +112,7 @@ public class StatusBar extends JPanel implements DataEventListener { // refresh time long duration = 0L; for (TimerProject p : dataManager.getProjectsList()) { - duration += TimerTaskHelper.getTotalTime(p, new Date()); + duration += TimerTaskHelper.getTotalTime(p, LocalDate.now()); } lblTime.setText(resourceMap .getString("todayTotalMessage", DurationFormatUtils @@ -175,7 +176,7 @@ public class StatusBar extends JPanel implements DataEventListener { * @see org.chorem.jtimer.event.DataEventListener#setTaskTime(org.chorem.jtimer.entities.TimerTask, java.util.Date, java.lang.Long) */ @Override - public void setTaskTime(TimerTask task, Date date, Long time) { + public void setTaskTime(TimerTask task, LocalDate date, Long time) { modifyTask(task); } diff --git a/src/main/java/org/chorem/jtimer/ui/TimerTaskEditor.java b/src/main/java/org/chorem/jtimer/ui/TimerTaskEditor.java index ca301fb..aa74910 100644 --- a/src/main/java/org/chorem/jtimer/ui/TimerTaskEditor.java +++ b/src/main/java/org/chorem/jtimer/ui/TimerTaskEditor.java @@ -30,6 +30,7 @@ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; +import java.time.LocalDate; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; @@ -62,6 +63,7 @@ import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.chorem.jtimer.JTimer; +import org.chorem.jtimer.JTimerUtil; import org.chorem.jtimer.data.DataViolationException; import org.chorem.jtimer.data.TimerCore; import org.chorem.jtimer.data.TimerDataManager; @@ -168,9 +170,6 @@ public class TimerTaskEditor extends JDialog implements ActionListener { // cause infinite loop under openjdk setName(null); // force nameExplicitlySet to true - // set color on jxmonthview unselectable days - // UIManager.put("JXMonthView.unselectableDayForeground", Color.GRAY); - this.task = task; cloneTask = task.clone(); this.core = core; @@ -613,7 +612,8 @@ public class TimerTaskEditor extends JDialog implements ActionListener { spinnerH.removeChangeListener(spinnerListener); spinnerM.removeChangeListener(spinnerListener); - long time = cloneTask.getTime(date); + LocalDate localDate = JTimerUtil.toLocalDate(date); + long time = cloneTask.getTime(localDate); Calendar cal = Calendar.getInstance(); // FIXME me, not use a calendar here ! cal.setTimeInMillis(time - cal.get(Calendar.ZONE_OFFSET)); @@ -671,7 +671,8 @@ public class TimerTaskEditor extends JDialog implements ActionListener { long seconds = ((Integer) spinnerH.getValue() * 60 * 60) + ((Integer) spinnerM.getValue() * 60) + ((Integer) spinnerS.getValue()); - cloneTask.setTime(getSelectedDay().getTime(), seconds * 1000); + LocalDate localDate = JTimerUtil.toLocalDate(getSelectedDay().getTime()); + cloneTask.setTime(localDate, seconds * 1000); // annotation if (isAnnotationChanged) { @@ -710,8 +711,9 @@ public class TimerTaskEditor extends JDialog implements ActionListener { public void updateFlaggedDates() { ArrayList<Date> dates = new ArrayList<>(); - for (Date date : cloneTask.getAllDaysAndTimes().keySet()) { - if (cloneTask.getTime(date) > 0) { + for (LocalDate localDate : cloneTask.getAllDaysAndTimes().keySet()) { + if (cloneTask.getTime(localDate) > 0) { + Date date = JTimerUtil.toDate(localDate); dates.add(date); } } @@ -748,9 +750,9 @@ public class TimerTaskEditor extends JDialog implements ActionListener { log.debug("Applying changes on: " + date); } - // time - dataManager.changeTaskTime(task, date, cloneTask - .getTime(date)); + // time + LocalDate localDate = JTimerUtil.toLocalDate(date); + dataManager.changeTaskTime(task, localDate, cloneTask.getTime(localDate)); // annotation if (annotationChanged.contains(date)) { diff --git a/src/main/java/org/chorem/jtimer/ui/systray/SystrayManager.java b/src/main/java/org/chorem/jtimer/ui/systray/SystrayManager.java index 4a5b5f3..f29f20b 100644 --- a/src/main/java/org/chorem/jtimer/ui/systray/SystrayManager.java +++ b/src/main/java/org/chorem/jtimer/ui/systray/SystrayManager.java @@ -2,7 +2,7 @@ * #%L * jTimer * %% - * Copyright (C) 2008 - 2011 CodeLutin, Chatellier Eric + * Copyright (C) 2008 - 2016 CodeLutin, Chatellier Eric * %% * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as @@ -32,6 +32,7 @@ import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.WindowEvent; import java.awt.event.WindowListener; +import java.time.LocalDate; import java.util.Collection; import java.util.Date; import java.util.List; @@ -388,7 +389,8 @@ public class SystrayManager implements ActionListener, DataEventListener, /* * @see org.chorem.jtimer.event.DataEventListener#setTaskTime(org.chorem.jtimer.entities.TimerTask, java.util.Calendar, java.lang.Long) */ - public void setTaskTime(TimerTask task, Date date, Long time) { + @Override + public void setTaskTime(TimerTask task, LocalDate date, Long time) { } diff --git a/src/main/java/org/chorem/jtimer/ui/tasks/RefreshTreeTask.java b/src/main/java/org/chorem/jtimer/ui/tasks/RefreshTreeTask.java index 08b48ab..2648f35 100644 --- a/src/main/java/org/chorem/jtimer/ui/tasks/RefreshTreeTask.java +++ b/src/main/java/org/chorem/jtimer/ui/tasks/RefreshTreeTask.java @@ -2,7 +2,7 @@ * #%L * jTimer * %% - * Copyright (C) 2008 - 2011 CodeLutin, Chatellier Eric + * Copyright (C) 2008 - 2016 CodeLutin, Chatellier Eric * %% * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as @@ -22,7 +22,7 @@ package org.chorem.jtimer.ui.tasks; -import java.util.Date; +import java.time.LocalDate; import java.util.List; import org.apache.commons.logging.Log; @@ -87,7 +87,7 @@ public class RefreshTreeTask extends java.util.TimerTask { refreshTasks(task.getSubTasks()); // fire event - Date now = new Date(); + LocalDate now = LocalDate.now(); // TODO find a better way to do that ! // Only useflull for UI listeners dataManager.changeTaskTime(task, now, task.getTime(now)); diff --git a/src/main/java/org/chorem/jtimer/ui/tasks/RunTaskJob.java b/src/main/java/org/chorem/jtimer/ui/tasks/RunTaskJob.java index 0b3d0b4..0290328 100644 --- a/src/main/java/org/chorem/jtimer/ui/tasks/RunTaskJob.java +++ b/src/main/java/org/chorem/jtimer/ui/tasks/RunTaskJob.java @@ -22,6 +22,9 @@ package org.chorem.jtimer.ui.tasks; +import java.time.Instant; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.Calendar; import java.util.Collection; import java.util.Date; @@ -37,6 +40,7 @@ import org.apache.commons.lang3.time.DurationFormatUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.chorem.jtimer.JTimer; +import org.chorem.jtimer.JTimerUtil; import org.chorem.jtimer.data.TimerDataManager; import org.chorem.jtimer.entities.TimerAlert; import org.chorem.jtimer.entities.TimerAlert.Type; @@ -131,7 +135,7 @@ public class RunTaskJob extends Task<Void, Void> { */ protected void checkAlreadyThrownAlerts(TimerTask task) { - Date now = new Date(); + LocalDate now = LocalDate.now(); // check alert to be fired for (TimerAlert alert : task.getAlerts()) { if (alert.getType().equals(Type.REACH_DAILY_TIME) @@ -274,7 +278,8 @@ public class RunTaskJob extends Task<Void, Void> { Date todayMidnight = DateUtils.truncate(currentDate, Calendar.DAY_OF_MONTH); long msToMidnight = currentDate.getTime() - todayMidnight.getTime(); long toRemove = Math.min(-localDelta, msToMidnight); - dataManager.changeTaskTime(task, currentDate, task.getTime(currentDate) - toRemove); + LocalDate localDate = JTimerUtil.toLocalDate(currentDate); + dataManager.changeTaskTime(task, localDate, task.getTime(localDate) - toRemove); if (log.isDebugEnabled()) { log.debug(" remove delta to task on " + currentDate + " : " + toRemove); } @@ -290,7 +295,8 @@ public class RunTaskJob extends Task<Void, Void> { today235959 = DateUtils.addMilliseconds(today235959, -1); long msToMidnight = today235959.getTime() - currentDate.getTime(); long toAdd = Math.min(localDelta, msToMidnight); - dataManager.changeTaskTime(task, currentDate, task.getTime(currentDate) + toAdd); + LocalDate localDate = JTimerUtil.toLocalDate(currentDate); + dataManager.changeTaskTime(task, localDate, task.getTime(localDate) + toAdd); if (log.isDebugEnabled()) { log.debug(" adding delta to task on " + currentDate + " : " + toAdd); } @@ -308,7 +314,7 @@ public class RunTaskJob extends Task<Void, Void> { * @param task */ protected void checkTaskAlerts(TimerTask task) { - Date now = new Date(); + LocalDate now = LocalDate.now(); // check alert to be fired for (TimerAlert alert : task.getAlerts()) { diff --git a/src/main/java/org/chorem/jtimer/ui/treetable/ProjectsAndTasksModel.java b/src/main/java/org/chorem/jtimer/ui/treetable/ProjectsAndTasksModel.java index 741e8c7..6812e3a 100644 --- a/src/main/java/org/chorem/jtimer/ui/treetable/ProjectsAndTasksModel.java +++ b/src/main/java/org/chorem/jtimer/ui/treetable/ProjectsAndTasksModel.java @@ -22,6 +22,7 @@ package org.chorem.jtimer.ui.treetable; +import java.time.LocalDate; import java.util.ArrayList; import java.util.Collection; import java.util.Date; @@ -117,25 +118,16 @@ public class ProjectsAndTasksModel extends AbstractTreeTableModel implements subTasksCache = new HashMap<>(); } - /* - * @see org.jdesktop.swingx.treetable.TreeTableModel#getColumnCount() - */ @Override public int getColumnCount() { return columnIdentifiers.size(); } - /* - * @see org.jdesktop.swingx.treetable.TreeTableModel#getColumnName(int) - */ @Override public String getColumnName(int column) { return columnIdentifiers.get(column); } - /* - * @see org.jdesktop.swingx.treetable.DefaultTreeTableModel#getValueAt(java.lang.Object, int) - */ @Override public Object getValueAt(Object object, int column) { @@ -150,12 +142,10 @@ public class ProjectsAndTasksModel extends AbstractTreeTableModel implements value = task.getName(); break; case 1: - value = DurationFormatUtils.formatDuration(TimerTaskHelper - .getTotalTime(task, new Date()), "HH:mm:ss"); + value = DurationFormatUtils.formatDuration(TimerTaskHelper.getTotalTime(task, LocalDate.now()), "HH:mm:ss"); break; case 2: - value = DurationFormatUtils.formatDuration(TimerTaskHelper - .getAllTotalTime(task), "HH:mm:ss"); + value = DurationFormatUtils.formatDuration(TimerTaskHelper.getAllTotalTime(task), "HH:mm:ss"); break; } } else { @@ -169,18 +159,12 @@ public class ProjectsAndTasksModel extends AbstractTreeTableModel implements return value; } - /* - * @see org.jdesktop.swingx.treetable.DefaultTreeTableModel#isCellEditable(java.lang.Object, int) - */ @Override public boolean isCellEditable(Object object, int column) { // non editable return false; } - /* - * @see org.jdesktop.swingx.treetable.DefaultTreeTableModel#getChild(java.lang.Object, int) - */ @Override public Object getChild(Object parent, int index) { @@ -188,9 +172,6 @@ public class ProjectsAndTasksModel extends AbstractTreeTableModel implements return t; } - /* - * @see org.jdesktop.swingx.treetable.DefaultTreeTableModel#getChildCount(java.lang.Object) - */ @Override public int getChildCount(Object parent) { @@ -255,9 +236,6 @@ public class ProjectsAndTasksModel extends AbstractTreeTableModel implements return result; } - /* - * @see org.jdesktop.swingx.treetable.DefaultTreeTableModel#getIndexOfChild(java.lang.Object, java.lang.Object) - */ @Override public int getIndexOfChild(Object parent, Object child) { @@ -265,9 +243,6 @@ public class ProjectsAndTasksModel extends AbstractTreeTableModel implements return childIndex; } - /* - * @see org.jdesktop.swingx.treetable.DefaultTreeTableModel#isLeaf(java.lang.Object) - */ @Override public boolean isLeaf(Object node) { return getChildCount(node) == 0; @@ -360,25 +335,16 @@ public class ProjectsAndTasksModel extends AbstractTreeTableModel implements return updated; } - /* - * @see org.chorem.jtimer.data.event.DataEventListener#addProject(org.chorem.jtimer.entities.TimerProject) - */ @Override public void addProject(TimerProject project) { notifyTaskChanged(project, OPERATION_ADD); } - /* - * @see org.chorem.jtimer.data.event.DataEventListener#addTask(org.chorem.jtimer.entities.TimerTask) - */ @Override public void addTask(TimerTask task) { notifyTaskChanged(task, OPERATION_ADD); } - /* - * @see org.chorem.jtimer.data.event.DataEventListener#dataLoaded(java.util.Collection) - */ @Override public void dataLoaded(Collection<TimerProject> projects) { @@ -429,34 +395,22 @@ public class ProjectsAndTasksModel extends AbstractTreeTableModel implements } - /* - * @see org.chorem.jtimer.data.event.DataEventListener#modifyTask(org.chorem.jtimer.entities.TimerTask) - */ @Override public void modifyTask(TimerTask task) { notifyTaskChanged(task, OPERATION_MODIFY); } - /* - * @see org.chorem.jtimer.event.DataEventListener#setAnnotation(org.chorem.jtimer.entities.TimerTask, java.util.Date, java.lang.String) - */ @Override public void setAnnotation(TimerTask task, Date date, String annotation) { } - /* - * @see org.chorem.jtimer.event.DataEventListener#setTaskTime(org.chorem.jtimer.entities.TimerTask, java.util.Date, java.lang.Long) - */ @Override - public void setTaskTime(TimerTask task, Date date, Long time) { + public void setTaskTime(TimerTask task, LocalDate date, Long time) { notifyTaskChanged(task, OPERATION_MODIFY); } - /* - * @see org.chorem.jtimer.data.event.DataEventListener#changeClosedState(org.chorem.jtimer.entities.TimerTask) - */ @Override public void changeClosedState(TimerTask task) { @@ -480,17 +434,11 @@ public class ProjectsAndTasksModel extends AbstractTreeTableModel implements } } - /* - * @see org.chorem.jtimer.data.event.DataEventListener#startTask(org.chorem.jtimer.entities.TimerTask) - */ @Override public void startTask(TimerTask task) { } - /* - * @see org.chorem.jtimer.data.event.DataEventListener#stopTask(org.chorem.jtimer.entities.TimerTask) - */ @Override public void stopTask(TimerTask task) { @@ -507,25 +455,16 @@ public class ProjectsAndTasksModel extends AbstractTreeTableModel implements dataLoaded(null); } - /* - * @see org.chorem.jtimer.data.event.DataEventListener#postMoveTask(org.chorem.jtimer.entities.TimerTask) - */ @Override public void moveTask(TimerTask task) { notifyTaskChanged(task, OPERATION_ADD); } - /* - * @see org.chorem.jtimer.data.event.DataEventListener#preMoveTask(org.chorem.jtimer.entities.TimerTask) - */ @Override public void preMoveTask(TimerTask task) { notifyTaskChanged(task, OPERATION_DELETE); } - - /* - * @see org.chorem.jtimer.data.DataEventListener#postMergeTasks(org.chorem.jtimer.entities.TimerTask, java.util.List) - */ + @Override public void postMergeTasks(TimerTask destinationTask, List<TimerTask> otherTasks) { @@ -536,9 +475,6 @@ public class ProjectsAndTasksModel extends AbstractTreeTableModel implements } } - /* - * @see org.chorem.jtimer.data.DataEventListener#preMergeTasks(org.chorem.jtimer.entities.TimerTask, java.util.List) - */ @Override public void preMergeTasks(TimerTask destinationTask, List<TimerTask> otherTasks) { diff --git a/src/main/java/org/chorem/jtimer/ui/treetable/ProjectsAndTasksRunningCellRenderer.java b/src/main/java/org/chorem/jtimer/ui/treetable/ProjectsAndTasksRunningCellRenderer.java index 1ee3b36..46cc9cf 100644 --- a/src/main/java/org/chorem/jtimer/ui/treetable/ProjectsAndTasksRunningCellRenderer.java +++ b/src/main/java/org/chorem/jtimer/ui/treetable/ProjectsAndTasksRunningCellRenderer.java @@ -27,6 +27,7 @@ import java.awt.Image; import java.awt.Rectangle; import java.awt.image.ImageObserver; import java.net.URL; +import java.time.LocalDate; import java.util.Collection; import java.util.Collections; import java.util.Date; @@ -98,9 +99,6 @@ public class ProjectsAndTasksRunningCellRenderer extends ProjectsAndTasksCellRen core.getData().addDataEventListener(this); } - /* - * @see org.jdesktop.swingx.renderer.DefaultTreeRenderer#getTreeCellRendererComponent(javax.swing.JTree, java.lang.Object, boolean, boolean, boolean, int, boolean) - */ @Override public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, @@ -143,9 +141,6 @@ public class ProjectsAndTasksRunningCellRenderer extends ProjectsAndTasksCellRen rows.remove(row); } - /* - * @see java.awt.image.ImageObserver#imageUpdate(java.awt.Image, int, int, int, int, int) - */ @Override public boolean imageUpdate(Image img, int flags, int x, int y, int w, int h) { @@ -159,73 +154,46 @@ public class ProjectsAndTasksRunningCellRenderer extends ProjectsAndTasksCellRen } } - /* - * @see org.chorem.jtimer.data.event.DataEventListener#addProject(org.chorem.jtimer.entities.TimerProject) - */ @Override public void addProject(TimerProject project) { } - /* - * @see org.chorem.jtimer.data.event.DataEventListener#addTask(org.chorem.jtimer.entities.TimerTask) - */ @Override public void addTask(TimerTask task) { } - /* - * @see org.chorem.jtimer.data.event.DataEventListener#dataLoaded(java.util.Collection) - */ @Override public void dataLoaded(Collection<TimerProject> projects) { } - /* - * @see org.chorem.jtimer.data.event.DataEventListener#deleteProject(org.chorem.jtimer.entities.TimerProject) - */ @Override public void deleteProject(TimerProject project) { } - /* - * @see org.chorem.jtimer.data.event.DataEventListener#deleteTask(org.chorem.jtimer.entities.TimerTask) - */ @Override public void deleteTask(TimerTask task) { } - /* - * @see org.chorem.jtimer.data.event.DataEventListener#modifyProject(org.chorem.jtimer.entities.TimerProject) - */ @Override public void modifyProject(TimerProject project) { } - /* - * @see org.chorem.jtimer.data.event.DataEventListener#modifyTask(org.chorem.jtimer.entities.TimerTask) - */ @Override public void modifyTask(TimerTask task) { } - /* - * @see org.chorem.jtimer.data.event.DataEventListener#changeClosedState(org.chorem.jtimer.entities.TimerTask) - */ @Override public void changeClosedState(TimerTask task) { } - /* - * @see org.chorem.jtimer.data.event.DataEventListener#startTask(org.chorem.jtimer.entities.TimerTask) - */ @Override public void startTask(TimerTask task) { @@ -237,9 +205,6 @@ public class ProjectsAndTasksRunningCellRenderer extends ProjectsAndTasksCellRen runningTasks.add(task); } - /* - * @see org.chorem.jtimer.data.event.DataEventListener#stopTask(org.chorem.jtimer.entities.TimerTask) - */ @Override public void stopTask(TimerTask task) { @@ -251,51 +216,32 @@ public class ProjectsAndTasksRunningCellRenderer extends ProjectsAndTasksCellRen runningTasks.remove(task); } - /* - * @see org.chorem.jtimer.data.event.DataEventListener#postMoveTask(org.chorem.jtimer.entities.TimerTask) - */ @Override public void moveTask(TimerTask task) { } - /* - * @see org.chorem.jtimer.data.event.DataEventListener#preMoveTask(org.chorem.jtimer.entities.TimerTask) - */ @Override public void preMoveTask(TimerTask task) { } - /* - * @see org.chorem.jtimer.data.DataEventListener#postMergeTasks(org.chorem.jtimer.entities.TimerTask, java.util.List) - */ @Override public void postMergeTasks(TimerTask destinationTask, List<TimerTask> otherTasks) { } - /* - * @see org.chorem.jtimer.data.DataEventListener#preMergeTasks(org.chorem.jtimer.entities.TimerTask, java.util.List) - */ @Override - public void preMergeTasks(TimerTask destinationTask, - List<TimerTask> otherTasks) { + public void preMergeTasks(TimerTask destinationTask, List<TimerTask> otherTasks) { } - /* - * @see org.chorem.jtimer.event.DataEventListener#setTaskTime(org.chorem.jtimer.entities.TimerTask, java.util.Date, java.lang.Long) - */ @Override - public void setTaskTime(TimerTask task, Date date, Long time) { + public void setTaskTime(TimerTask task, LocalDate date, Long time) { } - /* - * @see org.chorem.jtimer.event.DataEventListener#setAnnotation(org.chorem.jtimer.entities.TimerTask, java.util.Date, java.lang.String) - */ @Override public void setAnnotation(TimerTask task, Date date, String annotation) { diff --git a/src/main/java/org/chorem/jtimer/utils/DailySortedMap.java b/src/main/java/org/chorem/jtimer/utils/DailySortedMap.java deleted file mode 100644 index a7111ac..0000000 --- a/src/main/java/org/chorem/jtimer/utils/DailySortedMap.java +++ /dev/null @@ -1,308 +0,0 @@ -/* - * #%L - * jTimer - * %% - * Copyright (C) 2008 - 2011 CodeLutin, Chatellier Eric - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -package org.chorem.jtimer.utils; - -import java.util.Calendar; -import java.util.Comparator; -import java.util.Date; -import java.util.Map; -import java.util.NavigableMap; -import java.util.SortedMap; -import java.util.TreeMap; - -/** - * SortedMap that return a unique value for all date for a day. - * - * @see java.util.SortedMap - * @param <T> values type - * - * @author chatellier - * @version $Revision$ - * - * Last update : $Date$ - * By : $Author$ - * - * @deprecated since 1.5, this class can now be replaced by TreeMap<LocalDate, Long> - */ -@Deprecated -public class DailySortedMap<T> extends TreeMap<Date, T> { - - /** serialVersionUID */ - private static final long serialVersionUID = 5736472379626976185L; - - /** - * Constructs a new, empty tree map, using the natural ordering - * of its keys. - */ - public DailySortedMap() { - } - - /** - * Constructs a new, empty tree map, ordered according to - * the given comparator. - * - * @param comparator comparator - */ - public DailySortedMap(Comparator<? super Date> comparator) { - super(comparator); - } - - /** - * Constructs a new tree map containing the same mappings - * as the given map, ordered according to the natural ordering of its keys. - * - * @param m init map - */ - public DailySortedMap(Map<? extends Date, ? extends T> m) { - super(m); - } - - /** - * Constructs a new tree map containing the same mappings and - * using the same ordering as the specified sorted map. - * - * @param m init map - */ - public DailySortedMap(SortedMap<Date, ? extends T> m) { - super(m); - } - - /** - * {@inheritDoc} - */ - @Override - public Map.Entry<Date, T> ceilingEntry(Date key) { - Date dayKey = getDayDate(key); - Map.Entry<Date, T> result = super.ceilingEntry(dayKey); - return result; - - } - - /** - * {@inheritDoc} - */ - @Override - public Date ceilingKey(Date key) { - Date dayKey = getDayDate(key); - Date result = super.ceilingKey(dayKey); - return result; - - } - - /** - * {@inheritDoc} - */ - @Override - public boolean containsKey(Object key) { - boolean result = false; - - if (key instanceof Date) { - Date lDate = getDayDate((Date) key); - result = super.containsKey(lDate); - } - - return result; - } - - /** - * {@inheritDoc} - */ - @Override - public Map.Entry<Date, T> floorEntry(Date key) { - Date dayKey = getDayDate(key); - Map.Entry<Date, T> result = super.floorEntry(dayKey); - return result; - } - - /** - * {@inheritDoc} - */ - @Override - public Date floorKey(Date key) { - Date dayKey = getDayDate(key); - Date result = super.floorKey(dayKey); - return result; - } - - /** - * {@inheritDoc} - */ - @Override - public T get(Object key) { - T result = null; - - if (key instanceof Date) { - Date lDate = getDayDate((Date) key); - result = super.get(lDate); - } - - return result; - } - - /** - * {@inheritDoc} - */ - @Override - public NavigableMap<Date, T> headMap(Date toKey, boolean inclusive) { - Date dayKey = getDayDate(toKey); - NavigableMap<Date, T> result = super.headMap(dayKey, inclusive); - return result; - } - - /** - * {@inheritDoc} - */ - @Override - public SortedMap<Date, T> headMap(Date toKey) { - Date dayKey = getDayDate(toKey); - SortedMap<Date, T> result = super.headMap(dayKey); - return result; - } - - /** - * {@inheritDoc} - */ - @Override - public Map.Entry<Date, T> higherEntry(Date key) { - Date dayKey = getDayDate(key); - Map.Entry<Date, T> result = super.higherEntry(dayKey); - return result; - } - - /** - * {@inheritDoc} - */ - @Override - public Date higherKey(Date key) { - Date dayKey = getDayDate(key); - Date result = super.higherKey(dayKey); - return result; - } - - /** - * {@inheritDoc} - */ - @Override - public Map.Entry<Date, T> lowerEntry(Date key) { - Date dayKey = getDayDate(key); - Map.Entry<Date, T> result = super.lowerEntry(dayKey); - return result; - } - - /** - * {@inheritDoc} - */ - @Override - public Date lowerKey(Date key) { - Date dayKey = getDayDate(key); - Date result = super.lowerKey(dayKey); - return result; - } - - /** - * {@inheritDoc} - */ - @Override - public T put(Date key, T value) { - Date lDate = getDayDate(key); - T result = super.put(lDate, value); - - return result; - } - - /** - * {@inheritDoc} - */ - @Override - public void putAll(Map<? extends Date, ? extends T> map) { - for (Map.Entry<? extends Date, ? extends T> entry : map.entrySet()) { - put(entry.getKey(), entry.getValue()); - } - } - - /** - * {@inheritDoc} - */ - @Override - public NavigableMap<Date, T> subMap(Date fromKey, boolean fromInclusive, - Date toKey, boolean toInclusive) { - Date fromDayKey = getDayDate(fromKey); - Date toDayKey = getDayDate(toKey); - NavigableMap<Date, T> result = super.subMap(fromDayKey, fromInclusive, - toDayKey, toInclusive); - return result; - } - - /** - * {@inheritDoc} - */ - @Override - public SortedMap<Date, T> subMap(Date fromKey, Date toKey) { - Date fromDayKey = getDayDate(fromKey); - Date toDayKey = getDayDate(toKey); - SortedMap<Date, T> result = super.subMap(fromDayKey, toDayKey); - return result; - } - - /** - * {@inheritDoc} - */ - @Override - public NavigableMap<Date, T> tailMap(Date fromKey, boolean inclusive) { - Date fromDayKey = getDayDate(fromKey); - NavigableMap<Date, T> result = super.tailMap(fromDayKey, inclusive); - return result; - } - - /** - * {@inheritDoc} - */ - @Override - public SortedMap<Date, T> tailMap(Date fromKey) { - Date fromDayKey = getDayDate(fromKey); - SortedMap<Date, T> result = super.tailMap(fromDayKey); - return result; - } - - /** - * Get date at 0h00:00.000. - * - * @param date date to convert - * @return day date - */ - protected Date getDayDate(Date date) { - Date ldate = (Date) date.clone(); - - Calendar calendar = Calendar.getInstance(); - calendar.setTime(ldate); - - calendar.set(Calendar.HOUR_OF_DAY, 0); - calendar.set(Calendar.MINUTE, 0); - calendar.set(Calendar.SECOND, 0); - calendar.set(Calendar.MILLISECOND, 0); - - Date result = calendar.getTime(); - - return result; - } -} diff --git a/src/main/java/org/chorem/jtimer/utils/package-info.java b/src/main/java/org/chorem/jtimer/utils/package-info.java deleted file mode 100644 index 400a19f..0000000 --- a/src/main/java/org/chorem/jtimer/utils/package-info.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * #%L - * jTimer - * %% - * Copyright (C) 2007 - 2011 CodeLutin, Chatellier Eric - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ -/** - * JTimer util classes. - */ -package org.chorem.jtimer.utils; diff --git a/src/test/java/org/chorem/jtimer/data/TimerDataManagerTest.java b/src/test/java/org/chorem/jtimer/data/TimerDataManagerTest.java index 106c6a3..cbee3dc 100644 --- a/src/test/java/org/chorem/jtimer/data/TimerDataManagerTest.java +++ b/src/test/java/org/chorem/jtimer/data/TimerDataManagerTest.java @@ -22,6 +22,7 @@ package org.chorem.jtimer.data; +import java.time.LocalDate; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -465,7 +466,7 @@ public class TimerDataManagerTest extends AbstractJTimerTest { // add THE conflict task name TimerTask tTreeTests = new TimerTask("Tree tests"); tTreeTests.setCreationDate(new Date()); - tTreeTests.setTime(new Date(), 200000L); + tTreeTests.setTime(LocalDate.now(), 200000L); dataManager.addTask(task1, tTreeTests, null); Assert.assertEquals(task1.getSubTasks().size(), 3); diff --git a/src/test/java/org/chorem/jtimer/entities/TimerTaskTest.java b/src/test/java/org/chorem/jtimer/entities/TimerTaskTest.java index 87cc0e1..6c857cf 100644 --- a/src/test/java/org/chorem/jtimer/entities/TimerTaskTest.java +++ b/src/test/java/org/chorem/jtimer/entities/TimerTaskTest.java @@ -2,7 +2,7 @@ * #%L * jTimer * %% - * Copyright (C) 2008 - 2012 CodeLutin, Chatellier Eric + * Copyright (C) 2008 - 2016 CodeLutin, Chatellier Eric * %% * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as @@ -23,9 +23,9 @@ package org.chorem.jtimer.entities; import java.util.Date; +import java.util.TreeMap; import org.chorem.jtimer.AbstractJTimerTest; -import org.chorem.jtimer.utils.DailySortedMap; import org.testng.Assert; import org.testng.annotations.Test; @@ -63,8 +63,8 @@ public class TimerTaskTest extends AbstractJTimerTest { TimerTask clonedTask = task.clone(); - Assert.assertTrue(clonedTask.allDaysTimes instanceof DailySortedMap<?>, "Clone put invalid type for map"); - Assert.assertFalse(clonedTask.allDaysAnnotations instanceof DailySortedMap<?>, "Clone put invalid type for map"); + Assert.assertTrue(clonedTask.allDaysTimes instanceof TreeMap<?, ?>, "Clone put invalid type for map"); + Assert.assertFalse(clonedTask.allDaysAnnotations instanceof TreeMap<?, ?>, "Clone put invalid type for map"); } /** diff --git a/src/test/java/org/chorem/jtimer/io/GTimerIncrementalSaverTest.java b/src/test/java/org/chorem/jtimer/io/GTimerIncrementalSaverTest.java index 26c0675..544e632 100644 --- a/src/test/java/org/chorem/jtimer/io/GTimerIncrementalSaverTest.java +++ b/src/test/java/org/chorem/jtimer/io/GTimerIncrementalSaverTest.java @@ -24,7 +24,7 @@ package org.chorem.jtimer.io; import java.io.File; import java.io.IOException; -import java.util.Calendar; +import java.time.LocalDate; import java.util.Collection; import java.util.Date; import java.util.HashMap; @@ -195,30 +195,16 @@ public class GTimerIncrementalSaverTest extends AbstractJTimerTest { Assert.assertEquals(totalTime, 11391000); // test 20080909 9000 - - Calendar calendar = Calendar.getInstance(); - calendar.set(Calendar.YEAR, 2008); - calendar.set(Calendar.MONTH, 8); - calendar.set(Calendar.DAY_OF_MONTH, 9); - Assert.assertEquals(task.getTime(calendar.getTime()), 9000000); + Assert.assertEquals(task.getTime(LocalDate.of(2008, 8, 9)), 9000000); // 20080922 13 - calendar.set(Calendar.YEAR, 2008); - calendar.set(Calendar.MONTH, 8); - calendar.set(Calendar.DAY_OF_MONTH, 22); - Assert.assertEquals(task.getTime(calendar.getTime()), 13000); + Assert.assertEquals(task.getTime(LocalDate.of(2008, 8, 22)), 13000); // 20080930 2332 - calendar.set(Calendar.YEAR, 2008); - calendar.set(Calendar.MONTH, 8); - calendar.set(Calendar.DAY_OF_MONTH, 30); - Assert.assertEquals(task.getTime(calendar.getTime()), 2332000); + Assert.assertEquals(task.getTime(LocalDate.of(2008, 8, 30)), 2332000); // 20081011 46 - calendar.set(Calendar.YEAR, 2008); - calendar.set(Calendar.MONTH, 9); - calendar.set(Calendar.DAY_OF_MONTH, 11); - Assert.assertEquals(task.getTime(calendar.getTime()), 46000); + Assert.assertEquals(task.getTime(LocalDate.of(2008, 9, 11)), 46000); /*FIXME saver.unlock(); } catch (DataLockingException e) { diff --git a/src/test/java/org/chorem/jtimer/utils/DailySortedMapTest.java b/src/test/java/org/chorem/jtimer/utils/DailySortedMapTest.java deleted file mode 100644 index d586e6b..0000000 --- a/src/test/java/org/chorem/jtimer/utils/DailySortedMapTest.java +++ /dev/null @@ -1,538 +0,0 @@ -/* - * #%L - * jTimer - * %% - * Copyright (C) 2008 - 2016 CodeLutin, Chatellier Eric - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -package org.chorem.jtimer.utils; - -import java.text.DateFormat; -import java.text.ParseException; -import java.util.Date; -import java.util.HashMap; -import java.util.Locale; -import java.util.Map; -import java.util.SortedMap; -import java.util.TreeMap; -import java.util.Map.Entry; - -import org.testng.Assert; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; - -/** - * Test for DailySortedMap class. - * - * @author chatellier - * @version $Revision$ - * - * Last update : $Date$ - * By : $Author$ - */ -public class DailySortedMapTest { - - protected static DateFormat df; - - /** - * Init date format instance. - */ - @BeforeClass - public static void init() { - df = DateFormat.getDateInstance(DateFormat.LONG, Locale.ENGLISH); - } - - /** - * Test le contructeur par defaut. - */ - @Test - public void testConstructor() { - DailySortedMap<Long> map = new DailySortedMap<>(); - Assert.assertNotNull(map); - } - - /** - * Test le constructeur avec comparateur. - * @throws ParseException - */ - @Test - public void testConsctuctorComparator() throws ParseException { - - DailySortedMap<Long> map = new DailySortedMap<>(Date::compareTo); - - Date d1 = df.parse("December 30, 2008"); - Date d2 = df.parse("December 29, 2008"); - - map.put(d1, 1l); - map.put(d2, 2l); - map.put(d1, 3l); - - Assert.assertNotNull(map); - Assert.assertEquals(map.size(), 2); - Assert.assertEquals(map.firstEntry().getValue().longValue(), 2l); - Assert.assertEquals(map.lastEntry().getValue().longValue(), 3l); - } - - /** - * Test du constructeur avec une sorted map. - * @throws ParseException - */ - @Test - public void testConstructorMap() throws ParseException { - Date d1 = df.parse("December 30, 2008, 12:00:00 GMT"); - Date d2 = df.parse("December 30, 2008, 13:00:00 GMT"); - Date d3 = df.parse("December 31, 2008, 12:00:00 GMT"); - Date d4 = df.parse("December 31, 2008, 13:00:00 GMT"); - - SortedMap<Date, Long> map = new TreeMap<>(); - map.put(d1, 1l); - map.put(d2, 2l); - map.put(d3, 3l); - map.put(d4, 4l); - - // d2 erase d1, and d4 erase d3 - DailySortedMap<Long> newMap = new DailySortedMap<>(map); - Assert.assertEquals(newMap.size(), 2); - Assert.assertEquals(newMap.firstEntry().getValue().longValue(), 2l); - Assert.assertEquals(newMap.lastEntry().getValue().longValue(), 4l); - } - - /** - * Test du constructeur avec une map. - * @throws ParseException - */ - @Test - public void testConstructorSortedMap() throws ParseException { - Date d1 = df.parse("December 30, 2008, 12:00:00 GMT"); - Date d2 = df.parse("December 30, 2008, 13:00:00 GMT"); - Date d3 = df.parse("December 31, 2008, 12:00:00 GMT"); - Date d4 = df.parse("December 31, 2008, 13:00:00 GMT"); - - Map<Date, Long> map = new HashMap<>(); - map.put(d1, 1l); - map.put(d2, 2l); - map.put(d3, 3l); - map.put(d4, 4l); - - // d2 erase d1, and d4 erase d3 - DailySortedMap<Long> newMap = new DailySortedMap<>(map); - Assert.assertEquals(newMap.size(), 2); - Assert.assertEquals(newMap.firstEntry().getValue().longValue(), 2l); - Assert.assertEquals(newMap.lastEntry().getValue().longValue(), 4l); - } - - /** - * Test ceilingEntry. - * @throws ParseException - */ - @Test - public void ceilingEntryTest() throws ParseException { - DailySortedMap<Long> map = new DailySortedMap<>(); - - Date d1 = df.parse("May 09, 2009, 12:00:00 GMT"); - Date d2 = df.parse("June 12, 2009, 12:00:00 GMT"); - Date d3 = df.parse("December 07, 2009, 12:00:00 GMT"); - - map.put(d1, 3l); - map.put(d3, 13l); - - Entry<Date, Long> entry = map.ceilingEntry(d2); - - Assert.assertEquals(entry.getKey(), d3); - Assert.assertEquals(entry.getValue().longValue(), 13l); - } - - /** - * Test ceilingKey. - * @throws ParseException - */ - @Test - public void ceilingKeyTest() throws ParseException { - DailySortedMap<Long> map = new DailySortedMap<>(); - - Date d1 = df.parse("May 09, 2009, 12:00:00 GMT"); - Date d2 = df.parse("June 12, 2009, 12:00:00 GMT"); - Date d3 = df.parse("December 07, 2009, 12:00:00 GMT"); - - map.put(d1, 3l); - map.put(d3, 13l); - - Date d = map.ceilingKey(d2); - - Assert.assertEquals(d, d3); - } - - /** - * Test containsKey. - * @throws ParseException - */ - @Test - public void containsKeyTest() throws ParseException { - Date d1 = df.parse("December 30, 2008, 12:00:00 GMT"); - - DailySortedMap<Long> map = new DailySortedMap<>(); - map.put(d1, 1l); - - Assert.assertTrue(map.containsKey(d1)); - - Date d2 = df.parse("December 31, 2008, 12:00:00 GMT"); - Assert.assertFalse(map.containsKey(d2)); - - Date d3 = df.parse("December 30, 2008, 18:48:00 GMT"); - Assert.assertTrue(map.containsKey(d3)); - - // non date object - Assert.assertFalse(map.containsKey("test false")); - } - - /** - * Test floorEntry. - * @throws ParseException - */ - @Test - public void floorEntryTest() throws ParseException { - DailySortedMap<Long> map = new DailySortedMap<>(); - - Date d1 = df.parse("May 09, 2009, 12:00:00 GMT"); - Date d2 = df.parse("June 12, 2009, 12:00:00 GMT"); - Date d3 = df.parse("December 07, 2009, 12:00:00 GMT"); - - map.put(d1, 3l); - map.put(d3, 13l); - - Entry<Date, Long> entry = map.floorEntry(d2); - - Assert.assertEquals(entry.getKey(), d1); - Assert.assertEquals(entry.getValue().longValue(), 3l); - } - - /** - * Test floorKey. - * @throws ParseException - */ - @Test - public void floorKeyTest() throws ParseException { - DailySortedMap<Long> map = new DailySortedMap<>(); - - Date d1 = df.parse("May 09, 2009, 12:00:00 GMT"); - Date d2 = df.parse("June 12, 2009, 12:00:00 GMT"); - Date d3 = df.parse("December 07, 2009, 12:00:00 GMT"); - - map.put(d1, 3l); - map.put(d3, 13l); - - Date d = map.floorKey(d2); - - Assert.assertEquals(d, d1); - } - - /** - * Test get(). - * @throws ParseException - */ - @Test - public void getTest() throws ParseException { - Date d1 = df.parse("December 30, 2008, 12:00:00 GMT"); - Date d2 = df.parse("December 31, 2008, 12:00:00 GMT"); - - DailySortedMap<Long> map = new DailySortedMap<>(); - map.put(d1, 1l); - map.put(d2, 2l); - - Assert.assertEquals(1l, map.get(d1).longValue()); - Assert.assertEquals(2l, map.get(d2).longValue()); - - Date d3 = df.parse("December 29, 2008, 12:00:00 GMT"); - Assert.assertNull(map.get(d3)); - - Date d4 = df.parse("December 30, 2008, 18:48:00 GMT"); - Assert.assertEquals(map.get(d4).longValue(), 1l); - - // non date object - Assert.assertNull(map.get("test false")); - } - - /** - * Test headMap. - * @throws ParseException - */ - @Test - public void headMapTest() throws ParseException { - DailySortedMap<Long> map = new DailySortedMap<>(); - - Date d1 = df.parse("May 09, 2009, 12:00:00 GMT"); - Date d2 = df.parse("June 12, 2009, 12:00:00 GMT"); - Date d3 = df.parse("December 07, 2009, 12:00:00 GMT"); - - map.put(d1, 3l); - map.put(d2, 34l); - map.put(d3, 13l); - - SortedMap<Date, Long> newMap = map.headMap(df.parse("June 12, 2009, 18:44:59 GMT")); - - Assert.assertEquals(newMap.size(), 1); - } - - /** - * Test headMap. - * @throws ParseException - */ - @Test - public void headMapBooleanTest() throws ParseException { - DailySortedMap<Long> map = new DailySortedMap<>(); - - Date d1 = df.parse("May 09, 2009, 12:00:00 GMT"); - Date d2 = df.parse("June 12, 2009, 12:00:00 GMT"); - Date d3 = df.parse("December 07, 2009, 12:00:00 GMT"); - - map.put(d1, 3l); - map.put(d2, 34l); - map.put(d3, 13l); - - SortedMap<Date, Long> newMap = map.headMap(df.parse("June 12, 2009, 18:44:59 GMT"), true); - - Assert.assertEquals(newMap.size(), 2); - } - - /** - * Test higherEntry. - * @throws ParseException - */ - @Test - public void higherEntryTest() throws ParseException { - DailySortedMap<Long> map = new DailySortedMap<>(); - - Date d1 = df.parse("May 09, 2009, 12:00:00 GMT"); - //Date d2 = df.parse("June 12, 2009, 12:00:00 GMT"); - Date d3 = df.parse("December 07, 2009, 12:00:00 GMT"); - - map.put(d1, 3l); - map.put(d3, 13l); - - Entry<Date, Long> entry = map.higherEntry(df.parse("June 12, 2009, 18:44:59 GMT")); - - Assert.assertEquals(entry.getKey(), d3); - Assert.assertEquals(entry.getValue().longValue(), 13l); - } - - /** - * Test higherKey. - * @throws ParseException - */ - @Test - public void higherKeyTest() throws ParseException { - DailySortedMap<Long> map = new DailySortedMap<>(); - - Date d1 = df.parse("May 09, 2009, 12:00:00 GMT"); - //Date d2 = df.parse("June 12, 2009, 12:00:00 GMT"); - Date d3 = df.parse("December 07, 2009, 12:00:00 GMT"); - - map.put(d1, 3l); - map.put(d3, 13l); - - Date d = map.higherKey(df.parse("June 12, 2009, 18:44:59 GMT")); - - Assert.assertEquals(d, d3); - } - - /** - * Test lowerEntry. - * @throws ParseException - */ - @Test - public void lowerEntryTest() throws ParseException { - DailySortedMap<Long> map = new DailySortedMap<>(); - - Date d1 = df.parse("May 09, 2009, 12:00:00 GMT"); - //Date d2 = df.parse("June 12, 2009, 12:00:00 GMT"); - Date d3 = df.parse("December 07, 2009, 12:00:00 GMT"); - - map.put(d1, 3l); - map.put(d3, 13l); - - Entry<Date, Long> entry = map.lowerEntry(df.parse("June 12, 2009, 18:44:59 GMT")); - - Assert.assertEquals(entry.getKey(), d1); - Assert.assertEquals(entry.getValue().longValue(), 3l); - } - - /** - * Test lowerKey. - * @throws ParseException - */ - @Test - public void lowerKeyTest() throws ParseException { - DailySortedMap<Long> map = new DailySortedMap<>(); - - Date d1 = df.parse("May 09, 2009, 12:00:00 GMT"); - //Date d2 = df.parse("June 12, 2009, 12:00:00 GMT"); - Date d3 = df.parse("December 07, 2009, 12:00:00 GMT"); - - map.put(d1, 3l); - map.put(d3, 13l); - - Date d = map.lowerKey(df.parse("June 12, 2009, 18:44:59 GMT")); - - Assert.assertEquals(d, d1); - } - - /** - * Test put(). - * @throws ParseException - */ - @Test - public void putTest() throws ParseException { - Date d1 = df.parse("December 30, 2008, 12:00:00 GMT"); - Date d2 = df.parse("December 30, 2008, 14:00:00 GMT"); - Date d3 = df.parse("December 31, 2008, 12:00:00 GMT"); - Date d4 = df.parse("December 31, 2008, 18:48:00 GMT"); - Date d5 = df.parse("December 31, 2008, 00:00:00 GMT"); - - DailySortedMap<Long> map = new DailySortedMap<>(); - map.put(d1, 1l); - map.put(d2, 2l); - Assert.assertEquals(map.size(), 1); - Assert.assertEquals(map.get(d1).longValue(), 2l); - - map.put(d3, 3l); - Assert.assertEquals(map.size(), 2); - Assert.assertEquals(map.get(d3).longValue(), 3l); - - map.put(d4, 4l); - Assert.assertEquals(map.size(), 2); - Assert.assertEquals(map.get(d3).longValue(), 4l); - - map.put(d5, 5l); - Assert.assertEquals(map.size(), 2); - Assert.assertEquals(map.get(d3).longValue(), 5l); - } - - /** - * Test putAll(). - * @throws ParseException - */ - @Test - public void putAllTest() throws ParseException { - - Date d1 = df.parse("December 30, 2008, 12:00:00 GMT"); - Date d2 = df.parse("December 30, 2008, 14:00:00 GMT"); - Date d3 = df.parse("December 31, 2008, 12:00:00 GMT"); - Date d4 = df.parse("December 31, 2008, 18:48:00 GMT"); - Date d5 = df.parse("December 31, 2008, 00:00:00 GMT"); - - Map<Date, Long> map = new HashMap<>(); - map.put(d1, 1l); - map.put(d2, 2l); - map.put(d3, 3l); - map.put(d4, 4l); - map.put(d5, 5l); - Assert.assertEquals(2, map.size()); - - DailySortedMap<Long> newMap = new DailySortedMap<>(); - newMap.putAll(map); - Assert.assertEquals(map.size(), 2); - Assert.assertEquals(map.get(d1).longValue(), 2l); - Assert.assertEquals(map.get(d3).longValue(), 5l); - } - - /** - * Test subMap. - * @throws ParseException - */ - @Test - public void subMapTest() throws ParseException { - DailySortedMap<Long> map = new DailySortedMap<>(); - - Date d1 = df.parse("May 09, 2009, 12:00:00 GMT"); - Date d2 = df.parse("June 12, 2009, 12:00:00 GMT"); - Date d3 = df.parse("December 07, 2009, 12:00:00 GMT"); - - map.put(d1, 3l); - map.put(d2, 3l); - map.put(d3, 13l); - - SortedMap<Date, Long> newMap = map.subMap(df.parse("May 1, 2009, 11:02:33 GMT"), - df.parse("October 11, 2009, 18:44:59 GMT")); - - Assert.assertEquals(newMap.size(), 2); - } - - /** - * Test subMap. - * @throws ParseException - */ - @Test - public void subMapBooleanTest() throws ParseException { - DailySortedMap<Long> map = new DailySortedMap<>(); - - Date d1 = df.parse("May 09, 2009, 12:00:00 GMT"); - Date d2 = df.parse("June 12, 2009, 12:00:00 GMT"); - Date d3 = df.parse("December 07, 2009, 12:00:00 GMT"); - - map.put(d1, 3l); - map.put(d2, 3l); - map.put(d3, 13l); - - SortedMap<Date, Long> newMap = map.subMap(df.parse("May 09, 2009, 15:45:00 GMT"), true, - df.parse("December 07, 2009, 17:56:12 GMT") , false); - - Assert.assertEquals(newMap.size(), 2); - } - - /** - * Test tailMap. - * @throws ParseException - */ - @Test - public void tailMapTest() throws ParseException { - DailySortedMap<Long> map = new DailySortedMap<>(); - - Date d1 = df.parse("May 09, 2009, 12:00:00 GMT"); - Date d2 = df.parse("June 12, 2009, 12:00:00 GMT"); - Date d3 = df.parse("December 07, 2009, 12:00:00 GMT"); - - map.put(d1, 3l); - map.put(d2, 3l); - map.put(d3, 13l); - - SortedMap<Date, Long> newMap = map.tailMap(df.parse("July 15, 2009, 15:10:00 GMT")); - - Assert.assertEquals(newMap.size(), 1); - } - - /** - * Test tailMap. - * @throws ParseException - */ - @Test - public void tailMapBooleanTest() throws ParseException { - DailySortedMap<Long> map = new DailySortedMap<>(); - - Date d1 = df.parse("May 09, 2009, 12:00:00 GMT"); - Date d2 = df.parse("June 12, 2009, 12:00:00 GMT"); - Date d3 = df.parse("December 07, 2009, 12:00:00 GMT"); - - map.put(d1, 3l); - map.put(d2, 3l); - map.put(d3, 13l); - - SortedMap<Date, Long> newMap = map.tailMap(df.parse("December 07, 2009, 13:58:00 GMT"), false); - - Assert.assertEquals(newMap.size(), 0); - } -} -- To stop receiving notification emails like this one, please contact chorem.org SCM administrator <admin+scm@chorem.org>.