Jtimer-commits
Threads by month
- ----- 2026 -----
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- 639 discussions
r2834 - in trunk/src: main/java/org/chorem/jtimer/ui/report main/resources/ftl main/resources/org/chorem/jtimer/ui/report/resources test/java/org/chorem/jtimer test/java/org/chorem/jtimer/ui/report test/resources/testdata
by echatellier@users.chorem.org 18 Mar '12
by echatellier@users.chorem.org 18 Mar '12
18 Mar '12
Author: echatellier
Date: 2012-03-18 17:44:26 +0100 (Sun, 18 Mar 2012)
New Revision: 2834
Url: http://chorem.org/repositories/revision/jtimer/2834
Log:
#185 : Display date (date and time) on annotations
Modified:
trunk/src/main/java/org/chorem/jtimer/ui/report/ReportGenerator.java
trunk/src/main/java/org/chorem/jtimer/ui/report/ReportUtils.java
trunk/src/main/java/org/chorem/jtimer/ui/report/ReportView.java
trunk/src/main/resources/ftl/reportByDay.ftl
trunk/src/main/resources/ftl/reportByDay_fr.ftl
trunk/src/main/resources/ftl/reportByMonth.ftl
trunk/src/main/resources/ftl/reportByMonth_fr.ftl
trunk/src/main/resources/ftl/reportByProject.ftl
trunk/src/main/resources/ftl/reportByProject_fr.ftl
trunk/src/main/resources/ftl/reportByWeek.ftl
trunk/src/main/resources/ftl/reportByWeek_fr.ftl
trunk/src/main/resources/ftl/reportByYear.ftl
trunk/src/main/resources/ftl/reportByYear_fr.ftl
trunk/src/main/resources/org/chorem/jtimer/ui/report/resources/ReportView.properties
trunk/src/main/resources/org/chorem/jtimer/ui/report/resources/ReportView_fr.properties
trunk/src/test/java/org/chorem/jtimer/AbstractJTimerTest.java
trunk/src/test/java/org/chorem/jtimer/ui/report/ReportGeneratorTest.java
trunk/src/test/resources/testdata/4.ann
trunk/src/test/resources/testdata/5.ann
Modified: trunk/src/main/java/org/chorem/jtimer/ui/report/ReportGenerator.java
===================================================================
--- trunk/src/main/java/org/chorem/jtimer/ui/report/ReportGenerator.java 2012-03-17 10:47:17 UTC (rev 2833)
+++ trunk/src/main/java/org/chorem/jtimer/ui/report/ReportGenerator.java 2012-03-18 16:44:26 UTC (rev 2834)
@@ -86,7 +86,6 @@
freemarkerConfiguration.setTemplateLoader(templateLoader);
freemarkerConfiguration.setObjectWrapper(new BeansWrapper());
-
}
/**
@@ -97,11 +96,12 @@
* @param begin begin date
* @param end end date
* @param includeAnnotate include annotations
+ * @param includeAnnotateTime include annotations time
*
* @return report text
*/
public String getReportText(Type reportType, List<TimerProject> projects,
- Date begin, Date end, boolean includeAnnotate) {
+ Date begin, Date end, boolean includeAnnotate, boolean includeAnnotateTime) {
Template template = null;
String content = null;
@@ -131,7 +131,7 @@
}
content = getReportContent(template, projects, begin, end,
- includeAnnotate);
+ includeAnnotate, includeAnnotateTime);
} catch (IOException e) {
if (log.isErrorEnabled()) {
log.error("Can't get freemarker template", e);
@@ -153,6 +153,7 @@
* @param end end date
* @param template freemarker template to use
* @param includeAnnotate include annotations
+ * @param includeAnnotateTime include annotations time
*
* @return string content
*
@@ -163,7 +164,7 @@
*/
protected String getReportContent(Template template,
List<TimerProject> projects, Date begin, Date end,
- boolean includeAnnotate) throws TemplateException, IOException {
+ boolean includeAnnotate, boolean includeAnnotateTime) throws TemplateException, IOException {
// Create the root hash
Map<String, Object> root = new HashMap<String, Object>();
@@ -172,6 +173,7 @@
root.put("begin", begin);
root.put("end", end);
root.put("annotations", includeAnnotate);
+ root.put("annotationsTime", includeAnnotateTime);
root.put("utils", new ReportUtils());
Writer out = new StringWriter();
Modified: trunk/src/main/java/org/chorem/jtimer/ui/report/ReportUtils.java
===================================================================
--- trunk/src/main/java/org/chorem/jtimer/ui/report/ReportUtils.java 2012-03-17 10:47:17 UTC (rev 2833)
+++ trunk/src/main/java/org/chorem/jtimer/ui/report/ReportUtils.java 2012-03-18 16:44:26 UTC (rev 2834)
@@ -28,7 +28,9 @@
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import org.apache.commons.lang3.time.DurationFormatUtils;
import org.chorem.jtimer.entities.TimerTask;
@@ -412,9 +414,9 @@
* @param day day
* @return annotations of the day
*/
- public List<String> getDailyTaskAnnotation(TimerTask task, Date day) {
+ public Map<Date, String> getDailyTaskAnnotation(TimerTask task, Date day) {
- List<String> result = TimerTaskHelper.getAnnotation(task, day);
+ Map<Date, String> result = TimerTaskHelper.getAnnotationMap(task, day);
return result;
}
@@ -430,10 +432,10 @@
* @param toDay to day (inclusive)
* @return annotations of the week
*/
- public List<String> getWeeklyTaskAnnotation(TimerTask task, Date week,
+ public Map<Date, String> getWeeklyTaskAnnotation(TimerTask task, Date week,
Date fromDay, Date toDay) {
- List<String> result = new ArrayList<String>();
+ Map<Date, String> result = new HashMap<Date, String>();
Calendar beginPeriodDate = Calendar.getInstance();
beginPeriodDate.setTime(week);
@@ -451,9 +453,9 @@
if ((fromDay == null || fromDay.compareTo(loopPeriodDate.getTime()) <= 0)
&& (toDay == null || toDay.compareTo(loopPeriodDate
.getTime()) >= 0)) {
- List<String> anns = TimerTaskHelper
- .getAnnotation(task, loopPeriodDate.getTime());
- result.addAll(anns);
+ Map<Date, String> anns = TimerTaskHelper
+ .getAnnotationMap(task, loopPeriodDate.getTime());
+ result.putAll(anns);
}
loopPeriodDate.add(Calendar.DAY_OF_YEAR, 1);
@@ -473,9 +475,9 @@
* @param toDay to day (inclusive)
* @return annotations of the month
*/
- public List<String> getMonthlyTaskAnnotation(TimerTask task, Date month,
+ public Map<Date, String> getMonthlyTaskAnnotation(TimerTask task, Date month,
Date fromDay, Date toDay) {
- List<String> result = new ArrayList<String>();
+ Map<Date, String> result = new HashMap<Date, String>();
Calendar beginPeriodDate = Calendar.getInstance();
beginPeriodDate.setTime(month);
@@ -492,9 +494,9 @@
if ((fromDay == null || fromDay.compareTo(loopPeriodDate.getTime()) <= 0)
&& (toDay == null || toDay.compareTo(loopPeriodDate
.getTime()) >= 0)) {
- List<String> anns = TimerTaskHelper
- .getAnnotation(task, loopPeriodDate.getTime());
- result.addAll(anns);
+ Map<Date, String> anns = TimerTaskHelper
+ .getAnnotationMap(task, loopPeriodDate.getTime());
+ result.putAll(anns);
}
loopPeriodDate.add(Calendar.DAY_OF_YEAR, 1);
@@ -514,10 +516,10 @@
* @param toDay to day (inclusive)
* @return annotations of the year
*/
- public List<String> getYearlyTaskAnnotation(TimerTask task, Date year,
+ public Map<Date, String> getYearlyTaskAnnotation(TimerTask task, Date year,
Date fromDay, Date toDay) {
- List<String> result = new ArrayList<String>();
+ Map<Date, String> result = new HashMap<Date, String>();
Calendar beginPeriodDate = Calendar.getInstance();
beginPeriodDate.setTime(year);
@@ -535,9 +537,9 @@
if ((fromDay == null || fromDay.compareTo(loopPeriodDate.getTime()) <= 0)
&& (toDay == null || toDay.compareTo(loopPeriodDate
.getTime()) >= 0)) {
- List<String> anns = TimerTaskHelper
- .getAnnotation(task, loopPeriodDate.getTime());
- result.addAll(anns);
+ Map<Date, String> anns = TimerTaskHelper
+ .getAnnotationMap(task, loopPeriodDate.getTime());
+ result.putAll(anns);
}
loopPeriodDate.add(Calendar.DAY_OF_YEAR, 1);
Modified: trunk/src/main/java/org/chorem/jtimer/ui/report/ReportView.java
===================================================================
--- trunk/src/main/java/org/chorem/jtimer/ui/report/ReportView.java 2012-03-17 10:47:17 UTC (rev 2833)
+++ trunk/src/main/java/org/chorem/jtimer/ui/report/ReportView.java 2012-03-18 16:44:26 UTC (rev 2834)
@@ -108,6 +108,8 @@
/** Include annotations on reports */
protected JCheckBox checkIncludesAnnotations;
+ /** Include annotations time on reports */
+ protected JCheckBox checkIncludesAnnotationsTime;
/** Date pickers, from... to */
protected JXDatePicker datePickerFrom, datePickerTo;
@@ -247,11 +249,18 @@
new Insets(1, 1, 1, 1), 0, 0));
// miscellaneous
- checkIncludesAnnotations = new JCheckBox(getResourceMap().getString(
+ checkIncludesAnnotations = new JCheckBox();
+ checkIncludesAnnotations.setAction(getContext().getActionMap(this).get(
"reportAnnotations"));
panelOption.add(checkIncludesAnnotations, new GridBagConstraints(0, 5,
- 4, 1, 0, 0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
+ 2, 1, 0, 0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
new Insets(1, 1, 1, 1), 0, 0));
+ checkIncludesAnnotationsTime = new JCheckBox(getResourceMap().getString(
+ "reportAnnotationsTime"));
+ checkIncludesAnnotationsTime.setEnabled(false);
+ panelOption.add(checkIncludesAnnotationsTime, new GridBagConstraints(2, 5,
+ 2, 1, 0, 0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
+ new Insets(1, 1, 1, 1), 0, 0));
// panel form projects
JPanel panelProjects = new JPanel(new BorderLayout());
@@ -386,6 +395,14 @@
}
/**
+ * Show annotation checkbox checked.
+ */
+ @Action
+ public void reportAnnotations() {
+ checkIncludesAnnotationsTime.setEnabled(checkIncludesAnnotations.isSelected());
+ }
+
+ /**
* Make report.
*
* Set content in {@link #reportArea} text area.
@@ -415,7 +432,8 @@
// make report
String report = reportGenerator.getReportText(reportType,
selectedProjects, datePickerFrom.getDate(), datePickerTo
- .getDate(), checkIncludesAnnotations.isSelected());
+ .getDate(), checkIncludesAnnotations.isSelected(),
+ checkIncludesAnnotationsTime.isSelected());
if (report != null && !report.isEmpty()) {
reportArea.setText(report);
Modified: trunk/src/main/resources/ftl/reportByDay.ftl
===================================================================
--- trunk/src/main/resources/ftl/reportByDay.ftl 2012-03-17 10:47:17 UTC (rev 2833)
+++ trunk/src/main/resources/ftl/reportByDay.ftl 2012-03-18 16:44:26 UTC (rev 2834)
@@ -33,9 +33,9 @@
<#local taskTime=utils.getDailyTaskTime(subtask, periodTime?date)/>
<#list 1..ident as i> </#list>- ${subtask.name}<#if taskTime > 0> : ${utils.formatDuration(taskTime)}</#if>
<#if annotations>
- <#local taskAnnotations=utils.getDailyTaskAnnotation(subtask, periodTime?date)/>
- <#list taskAnnotations as taskAnnotation>
-<#list 1..ident as i> </#list> * ${taskAnnotation}
+ <#local taskAnnTimes=utils.getDailyTaskAnnotation(subtask, periodTime?date)/>
+ <#list taskAnnTimes.keySet() as taskAnnTime>
+<#list 1..ident as i> </#list> * <#if annotationsTime>${taskAnnTime?time?string.short} : </#if>${taskAnnTimes.get(taskAnnTime)}
</#list>
</#if>
<@displaySubtaskReport task=subtask periodTime=periodTime identation=ident/>
Modified: trunk/src/main/resources/ftl/reportByDay_fr.ftl
===================================================================
--- trunk/src/main/resources/ftl/reportByDay_fr.ftl 2012-03-17 10:47:17 UTC (rev 2833)
+++ trunk/src/main/resources/ftl/reportByDay_fr.ftl 2012-03-18 16:44:26 UTC (rev 2834)
@@ -33,9 +33,9 @@
<#local taskTime=utils.getDailyTaskTime(subtask, periodTime?date)/>
<#list 1..ident as i> </#list>- ${subtask.name}<#if taskTime > 0> : ${utils.formatDuration(taskTime)}</#if>
<#if annotations>
- <#local taskAnnotations=utils.getDailyTaskAnnotation(subtask, periodTime?date)/>
- <#list taskAnnotations as taskAnnotation>
-<#list 1..ident as i> </#list> * ${taskAnnotation}
+ <#local taskAnnTimes=utils.getDailyTaskAnnotation(subtask, periodTime?date)/>
+ <#list taskAnnTimes.keySet() as taskAnnTime>
+<#list 1..ident as i> </#list> * <#if annotationsTime>${taskAnnTime?time?string.short} : </#if>${taskAnnTimes.get(taskAnnTime)}
</#list>
</#if>
<@displaySubtaskReport task=subtask periodTime=periodTime identation=ident/>
Modified: trunk/src/main/resources/ftl/reportByMonth.ftl
===================================================================
--- trunk/src/main/resources/ftl/reportByMonth.ftl 2012-03-17 10:47:17 UTC (rev 2833)
+++ trunk/src/main/resources/ftl/reportByMonth.ftl 2012-03-18 16:44:26 UTC (rev 2834)
@@ -33,9 +33,9 @@
<#local taskTime=utils.getMonthlyTaskTime(subtask, periodTime?date, begin?date, end?date)/>
<#list 1..ident as i> </#list>- ${subtask.name}<#if taskTime > 0> : ${utils.formatDuration(taskTime)}</#if>
<#if annotations>
- <#local taskAnnotations=utils.getMonthlyTaskAnnotation(subtask, periodTime?date, begin?date, end?date)/>
- <#list taskAnnotations as taskAnnotation>
-<#list 1..ident as i> </#list> * ${taskAnnotation}
+ <#local taskAnnTimes=utils.getMonthlyTaskAnnotation(subtask, periodTime?date, begin?date, end?date)/>
+ <#list taskAnnTimes.keySet() as taskAnnTime>
+<#list 1..ident as i> </#list> * <#if annotationsTime>${taskAnnTime?datetime?string.short} : </#if>${taskAnnTimes.get(taskAnnTime)}
</#list>
</#if>
<@displaySubtaskReport task=subtask periodTime=periodTime identation=ident/>
Modified: trunk/src/main/resources/ftl/reportByMonth_fr.ftl
===================================================================
--- trunk/src/main/resources/ftl/reportByMonth_fr.ftl 2012-03-17 10:47:17 UTC (rev 2833)
+++ trunk/src/main/resources/ftl/reportByMonth_fr.ftl 2012-03-18 16:44:26 UTC (rev 2834)
@@ -33,9 +33,9 @@
<#local taskTime=utils.getMonthlyTaskTime(subtask, periodTime?date, begin?date, end?date)/>
<#list 1..ident as i> </#list>- ${subtask.name}<#if taskTime > 0> : ${utils.formatDuration(taskTime)}</#if>
<#if annotations>
- <#local taskAnnotations=utils.getMonthlyTaskAnnotation(subtask, periodTime?date, begin?date, end?date)/>
- <#list taskAnnotations as taskAnnotation>
-<#list 1..ident as i> </#list> * ${taskAnnotation}
+ <#local taskAnnTimes=utils.getMonthlyTaskAnnotation(subtask, periodTime?date, begin?date, end?date)/>
+ <#list taskAnnTimes.keySet() as taskAnnTime>
+<#list 1..ident as i> </#list> * <#if annotationsTime>${taskAnnTime?datetime?string.short} : </#if>${taskAnnTimes.get(taskAnnTime)}
</#list>
</#if>
<@displaySubtaskReport task=subtask periodTime=periodTime identation=ident/>
Modified: trunk/src/main/resources/ftl/reportByProject.ftl
===================================================================
--- trunk/src/main/resources/ftl/reportByProject.ftl 2012-03-17 10:47:17 UTC (rev 2833)
+++ trunk/src/main/resources/ftl/reportByProject.ftl 2012-03-18 16:44:26 UTC (rev 2834)
@@ -42,9 +42,9 @@
<#list 1..ident as i> </#list>- ${subtask.name}<#if taskTime > 0> : ${utils.formatDuration(taskTime)}</#if>
<#if annotations>
<#list periods as period>
- <#local taskAnnotations=utils.getDailyTaskAnnotation(subtask, period?date)/>
- <#list taskAnnotations as taskAnnotation>
-<#list 1..ident as i> </#list> * ${taskAnnotation}
+ <#local taskAnnTimes=utils.getDailyTaskAnnotation(subtask, period?date)/>
+ <#list taskAnnTimes.keySet() as taskAnnTime>
+<#list 1..ident as i> </#list> * <#if annotationsTime>${taskAnnTime?datetime?string.short} : </#if>${taskAnnTimes.get(taskAnnTime)}
</#list>
</#list>
</#if>
Modified: trunk/src/main/resources/ftl/reportByProject_fr.ftl
===================================================================
--- trunk/src/main/resources/ftl/reportByProject_fr.ftl 2012-03-17 10:47:17 UTC (rev 2833)
+++ trunk/src/main/resources/ftl/reportByProject_fr.ftl 2012-03-18 16:44:26 UTC (rev 2834)
@@ -42,9 +42,9 @@
<#list 1..ident as i> </#list>- ${subtask.name}<#if taskTime > 0> : ${utils.formatDuration(taskTime)}</#if>
<#if annotations>
<#list periods as period>
- <#local taskAnnotations=utils.getDailyTaskAnnotation(subtask, period?date)/>
- <#list taskAnnotations as taskAnnotation>
-<#list 1..ident as i> </#list> * ${taskAnnotation}
+ <#local taskAnnTimes=utils.getDailyTaskAnnotation(subtask, period?date)/>
+ <#list taskAnnTimes.keySet() as taskAnnTime>
+<#list 1..ident as i> </#list> * <#if annotationsTime>${taskAnnTime?datetime?string.short} : </#if>${taskAnnTimes.get(taskAnnTime)}
</#list>
</#list>
</#if>
Modified: trunk/src/main/resources/ftl/reportByWeek.ftl
===================================================================
--- trunk/src/main/resources/ftl/reportByWeek.ftl 2012-03-17 10:47:17 UTC (rev 2833)
+++ trunk/src/main/resources/ftl/reportByWeek.ftl 2012-03-18 16:44:26 UTC (rev 2834)
@@ -33,9 +33,9 @@
<#local taskTime=utils.getWeeklyTaskTime(subtask, periodTime?date, begin?date, end?date)/>
<#list 1..ident as i> </#list>- ${subtask.name}<#if taskTime > 0> : ${utils.formatDuration(taskTime)}</#if>
<#if annotations>
- <#local taskAnnotations=utils.getWeeklyTaskAnnotation(subtask, periodTime?date, begin?date, end?date)/>
- <#list taskAnnotations as taskAnnotation>
-<#list 1..ident as i> </#list> * ${taskAnnotation}
+ <#local taskAnnTimes=utils.getWeeklyTaskAnnotation(subtask, periodTime?date, begin?date, end?date)/>
+ <#list taskAnnTimes.keySet() as taskAnnTime>
+<#list 1..ident as i> </#list> * <#if annotationsTime>${taskAnnTime?datetime?string.short} : </#if>${taskAnnTimes.get(taskAnnTime)}
</#list>
</#if>
<@displaySubtaskReport task=subtask periodTime=periodTime identation=ident/>
Modified: trunk/src/main/resources/ftl/reportByWeek_fr.ftl
===================================================================
--- trunk/src/main/resources/ftl/reportByWeek_fr.ftl 2012-03-17 10:47:17 UTC (rev 2833)
+++ trunk/src/main/resources/ftl/reportByWeek_fr.ftl 2012-03-18 16:44:26 UTC (rev 2834)
@@ -33,9 +33,9 @@
<#local taskTime=utils.getWeeklyTaskTime(subtask, periodTime?date, begin?date, end?date)/>
<#list 1..ident as i> </#list>- ${subtask.name}<#if taskTime > 0> : ${utils.formatDuration(taskTime)}</#if>
<#if annotations>
- <#local taskAnnotations=utils.getWeeklyTaskAnnotation(subtask, periodTime?date, begin?date, end?date)/>
- <#list taskAnnotations as taskAnnotation>
-<#list 1..ident as i> </#list> * ${taskAnnotation}
+ <#local taskAnnTimes=utils.getWeeklyTaskAnnotation(subtask, periodTime?date, begin?date, end?date)/>
+ <#list taskAnnTimes.keySet() as taskAnnTime>
+<#list 1..ident as i> </#list> * <#if annotationsTime>${taskAnnTime?datetime?string.short} : </#if>${taskAnnTimes.get(taskAnnTime)}
</#list>
</#if>
<@displaySubtaskReport task=subtask periodTime=periodTime identation=ident/>
Modified: trunk/src/main/resources/ftl/reportByYear.ftl
===================================================================
--- trunk/src/main/resources/ftl/reportByYear.ftl 2012-03-17 10:47:17 UTC (rev 2833)
+++ trunk/src/main/resources/ftl/reportByYear.ftl 2012-03-18 16:44:26 UTC (rev 2834)
@@ -33,9 +33,9 @@
<#local taskTime=utils.getYearlyTaskTime(subtask, periodTime?date, begin?date, end?date)/>
<#list 1..ident as i> </#list>- ${subtask.name}<#if taskTime > 0> : ${utils.formatDuration(taskTime)}</#if>
<#if annotations>
- <#local taskAnnotations=utils.getYearlyTaskAnnotation(subtask, periodTime?date, begin?date, end?date)/>
- <#list taskAnnotations as taskAnnotation>
-<#list 1..ident as i> </#list> * ${taskAnnotation}
+ <#local taskAnnTimes=utils.getYearlyTaskAnnotation(subtask, periodTime?date, begin?date, end?date)/>
+ <#list taskAnnTimes.keySet() as taskAnnTime>
+<#list 1..ident as i> </#list> * <#if annotationsTime>${taskAnnTime?datetime?string.short} : </#if>${taskAnnTimes.get(taskAnnTime)}
</#list>
</#if>
<@displaySubtaskReport task=subtask periodTime=periodTime identation=ident/>
Modified: trunk/src/main/resources/ftl/reportByYear_fr.ftl
===================================================================
--- trunk/src/main/resources/ftl/reportByYear_fr.ftl 2012-03-17 10:47:17 UTC (rev 2833)
+++ trunk/src/main/resources/ftl/reportByYear_fr.ftl 2012-03-18 16:44:26 UTC (rev 2834)
@@ -33,9 +33,9 @@
<#local taskTime=utils.getYearlyTaskTime(subtask, periodTime?date, begin?date, end?date)/>
<#list 1..ident as i> </#list>- ${subtask.name}<#if taskTime > 0> : ${utils.formatDuration(taskTime)}</#if>
<#if annotations>
- <#local taskAnnotations=utils.getYearlyTaskAnnotation(subtask, periodTime?date, begin?date, end?date)/>
- <#list taskAnnotations as taskAnnotation>
-<#list 1..ident as i> </#list> * ${taskAnnotation}
+ <#local taskAnnTimes=utils.getYearlyTaskAnnotation(subtask, periodTime?date, begin?date, end?date)/>
+ <#list taskAnnTimes.keySet() as taskAnnTime>
+<#list 1..ident as i> </#list> * <#if annotationsTime>${taskAnnTime?datetime?string.short} : </#if>${taskAnnTimes.get(taskAnnTime)}
</#list>
</#if>
<@displaySubtaskReport task=subtask periodTime=periodTime identation=ident/>
Modified: trunk/src/main/resources/org/chorem/jtimer/ui/report/resources/ReportView.properties
===================================================================
--- trunk/src/main/resources/org/chorem/jtimer/ui/report/resources/ReportView.properties 2012-03-17 10:47:17 UTC (rev 2833)
+++ trunk/src/main/resources/org/chorem/jtimer/ui/report/resources/ReportView.properties 2012-03-18 16:44:26 UTC (rev 2834)
@@ -32,7 +32,7 @@
reportWeekly=Weekly
reportYearly=Yearly
reportByProject=By project
-reportAnnotations=Include annotations
+reportAnnotationsTime=with time
reportProjects=Projects
reportContent=Report
reportProjectsList=Projects list
@@ -43,6 +43,8 @@
previousWeek.Action.icon = date_previous.png
previousWeek.Action.shortDescription = Previous week
+reportAnnotations.Action.text = Include annotations
+
showHiddenProjects.Action.text = Show hidden projects
showHiddenProjects.Action.shortDescription = Show hidden projects
Modified: trunk/src/main/resources/org/chorem/jtimer/ui/report/resources/ReportView_fr.properties
===================================================================
--- trunk/src/main/resources/org/chorem/jtimer/ui/report/resources/ReportView_fr.properties 2012-03-17 10:47:17 UTC (rev 2833)
+++ trunk/src/main/resources/org/chorem/jtimer/ui/report/resources/ReportView_fr.properties 2012-03-18 16:44:26 UTC (rev 2834)
@@ -32,7 +32,8 @@
reportWeekly=Par semaine
reportYearly=Par ann\u00E9e
reportByProject=Par projet
-reportAnnotations=Inclure les annotations
+
+reportAnnotationsTime=avec l'heure
reportProjects=Projets
reportContent=Rapport
reportProjectsList=Liste des projets
@@ -44,6 +45,8 @@
showHiddenProjects.Action.text = Afficher les cach\u00E9s
showHiddenProjects.Action.shortDescription = Afficher les cach\u00E9s
+reportAnnotations.Action.text = Inclure les annotations
+
generateReport.Action.text = G\u00E9n\u00E9rer
generateReport.Action.shortDescription = G\u00E9n\u00E9rer le report
Modified: trunk/src/test/java/org/chorem/jtimer/AbstractJTimerTest.java
===================================================================
--- trunk/src/test/java/org/chorem/jtimer/AbstractJTimerTest.java 2012-03-17 10:47:17 UTC (rev 2833)
+++ trunk/src/test/java/org/chorem/jtimer/AbstractJTimerTest.java 2012-03-18 16:44:26 UTC (rev 2834)
@@ -29,6 +29,7 @@
import java.io.IOException;
import java.net.URL;
import java.util.Collection;
+import java.util.Locale;
import java.util.Properties;
import org.apache.commons.io.FileUtils;
@@ -137,6 +138,10 @@
log.debug("Set up test");
}
+ // jtimer code use default system locale
+ // test are coded in en_US
+ Locale.setDefault(Locale.US);
+
initDataDirectory();
}
Modified: trunk/src/test/java/org/chorem/jtimer/ui/report/ReportGeneratorTest.java
===================================================================
--- trunk/src/test/java/org/chorem/jtimer/ui/report/ReportGeneratorTest.java 2012-03-17 10:47:17 UTC (rev 2833)
+++ trunk/src/test/java/org/chorem/jtimer/ui/report/ReportGeneratorTest.java 2012-03-18 16:44:26 UTC (rev 2834)
@@ -57,6 +57,7 @@
/**
* Test report generation.
+ *
* @throws ParseException
*/
@Test
@@ -70,7 +71,8 @@
List<TimerProject> projects = new ArrayList<TimerProject>();
projects.addAll(testSaver.load());
ReportGenerator generator = new ReportGenerator();
- String content = generator.getReportText(ReportGenerator.Type.BY_DAY_REPORT, projects, d1, d2, false);
+ String content = generator.getReportText(ReportGenerator.Type.BY_DAY_REPORT,
+ projects, d1, d2, false, false);
if (log.isDebugEnabled()) {
log.debug("Daily report = " + content);
@@ -103,9 +105,48 @@
}
}*/
}
-
+
/**
+ * Test report generation with annotation time.
+ *
+ * @throws ParseException
+ */
+ @Test
+ public void getReportTextDailyAnnotationTime() throws ParseException {
+
+ /*try {
+ FIXME saver.lock();*/
+
+ Date d1 = df.parse("November 1, 2008");
+ Date d2 = df.parse("March 31, 2009");
+ List<TimerProject> projects = new ArrayList<TimerProject>();
+ projects.addAll(testSaver.load());
+ ReportGenerator generator = new ReportGenerator();
+ String content = generator.getReportText(ReportGenerator.Type.BY_DAY_REPORT,
+ projects, d1, d2, true, true);
+
+ if (log.isDebugEnabled()) {
+ log.debug("Daily report = " + content);
+ }
+
+ Assert.assertNotNull(content);
+
+ // with annotations and time (* is important in test)
+ Assert.assertTrue(content.indexOf("* 2:10 PM : Test task and subtask time") > 0);
+ Assert.assertTrue(content.indexOf("* 12:00 AM : Not easy work") > 0);
+
+ /*FIXME saver.unlock();
+ } catch (DataLockingException e) {
+ if(log.isErrorEnabled()) {
+ log.error("getProjectFromFileTest error", e);
+ Assert.fail();
+ }
+ }*/
+ }
+
+ /**
* Test report generation.
+ *
* @throws ParseException
*/
@Test
@@ -119,7 +160,8 @@
List<TimerProject> projects = new ArrayList<TimerProject>();
projects.addAll(testSaver.load());
ReportGenerator generator = new ReportGenerator();
- String content = generator.getReportText(ReportGenerator.Type.BY_WEEK_REPORT, projects, d1, d2, true);
+ String content = generator.getReportText(ReportGenerator.Type.BY_WEEK_REPORT,
+ projects, d1, d2, true, false);
if (log.isDebugEnabled()) {
log.debug("Weekly report = " + content);
@@ -136,9 +178,47 @@
Assert.assertTrue(content.indexOf("Add webservice") > 0);
Assert.assertTrue(content.indexOf("Add workspace support") > 0);
+ // with annotations
+ Assert.assertTrue(content.indexOf("* Test task and subtask time") > 0);
+ Assert.assertTrue(content.indexOf("* Not easy work") > 0);
+
+ /*FIXME saver.unlock();
+ } catch (DataLockingException e) {
+ if(log.isErrorEnabled()) {
+ log.error("getProjectFromFileTest error", e);
+ Assert.fail();
+ }
+ }*/
+ }
+
+ /**
+ * Test report generation with annotation time.
+ *
+ * @throws ParseException
+ */
+ @Test
+ public void getReportTextMonthlyAnnotationTime() throws ParseException {
+
+ /*try {
+ FIXME saver.lock();*/
+
+ Date d1 = df.parse("November 1, 2008");
+ Date d2 = df.parse("March 31, 2009");
+ List<TimerProject> projects = new ArrayList<TimerProject>();
+ projects.addAll(testSaver.load());
+ ReportGenerator generator = new ReportGenerator();
+ String content = generator.getReportText(ReportGenerator.Type.BY_MONTH_REPORT,
+ projects, d1, d2, true, true);
+
+ if (log.isDebugEnabled()) {
+ log.debug("Monthly report = " + content);
+ }
+
+ Assert.assertNotNull(content);
+
// no annotations
- Assert.assertTrue(content.indexOf("Test task and subtask time") > 0);
- Assert.assertTrue(content.indexOf("Not easy work") > 0);
+ Assert.assertTrue(content.indexOf("* 2/3/09 2:10 PM : Test task and subtask time") > 0);
+ Assert.assertTrue(content.indexOf("* 12/11/08 12:00 AM : Not easy work") > 0);
/*FIXME saver.unlock();
} catch (DataLockingException e) {
@@ -164,7 +244,8 @@
List<TimerProject> projects = new ArrayList<TimerProject>();
projects.addAll(testSaver.load());
ReportGenerator generator = new ReportGenerator();
- String content = generator.getReportText(ReportGenerator.Type.BY_MONTH_REPORT, projects, d1, d2, false);
+ String content = generator.getReportText(ReportGenerator.Type.BY_MONTH_REPORT,
+ projects, d1, d2, false, false);
if (log.isDebugEnabled()) {
log.debug("Monthly report = " + content);
@@ -209,7 +290,8 @@
List<TimerProject> projects = new ArrayList<TimerProject>();
projects.addAll(testSaver.load());
ReportGenerator generator = new ReportGenerator();
- String content = generator.getReportText(ReportGenerator.Type.BY_YEAR_REPORT, projects, d1, d2, false);
+ String content = generator.getReportText(ReportGenerator.Type.BY_YEAR_REPORT,
+ projects, d1, d2, false, false);
if (log.isDebugEnabled()) {
log.debug("Yearly report = " + content);
@@ -255,7 +337,8 @@
List<TimerProject> projects = new ArrayList<TimerProject>();
projects.addAll(testSaver.load());
ReportGenerator generator = new ReportGenerator();
- String content = generator.getReportText(ReportGenerator.Type.BY_PROJECT_REPORT, projects, d1, d2, true);
+ String content = generator.getReportText(ReportGenerator.Type.BY_PROJECT_REPORT,
+ projects, d1, d2, true, false);
if (log.isDebugEnabled()) {
log.debug("Project report = " + content);
@@ -273,9 +356,9 @@
Assert.assertTrue(content.indexOf("Add service layer") > 0);
Assert.assertTrue(content.indexOf("Calendar to date") > 0);
- // no annotations
+ // test annotations
Assert.assertFalse(content.indexOf("Test task and subtask time") > 0);
- Assert.assertTrue(content.indexOf("Not easy work") > 0);
+ Assert.assertTrue(content.indexOf("* Not easy work") > 0);
/*FIXME saver.unlock();
} catch (DataLockingException e) {
Modified: trunk/src/test/resources/testdata/4.ann
===================================================================
--- trunk/src/test/resources/testdata/4.ann 2012-03-17 10:47:17 UTC (rev 2833)
+++ trunk/src/test/resources/testdata/4.ann 2012-03-18 16:44:26 UTC (rev 2834)
@@ -1 +1 @@
-1233615601 Test task and subtask time
\ No newline at end of file
+1233666601 Test task and subtask time
\ No newline at end of file
Modified: trunk/src/test/resources/testdata/5.ann
===================================================================
--- trunk/src/test/resources/testdata/5.ann 2012-03-17 10:47:17 UTC (rev 2833)
+++ trunk/src/test/resources/testdata/5.ann 2012-03-18 16:44:26 UTC (rev 2834)
@@ -1 +1 @@
-1233615601 Test subtask time
+1233621301 Test subtask time
1
0
r2833 - in trunk/src: main/java/org/chorem/jtimer/entities test/java/org/chorem/jtimer/entities
by echatellier@users.chorem.org 17 Mar '12
by echatellier@users.chorem.org 17 Mar '12
17 Mar '12
Author: echatellier
Date: 2012-03-17 11:47:17 +0100 (Sat, 17 Mar 2012)
New Revision: 2833
Url: http://chorem.org/repositories/revision/jtimer/2833
Log:
Modify clone implementation (just soft clone now)
Modified:
trunk/src/main/java/org/chorem/jtimer/entities/TimerTask.java
trunk/src/test/java/org/chorem/jtimer/entities/TimerTaskTest.java
Modified: trunk/src/main/java/org/chorem/jtimer/entities/TimerTask.java
===================================================================
--- trunk/src/main/java/org/chorem/jtimer/entities/TimerTask.java 2012-03-17 09:58:17 UTC (rev 2832)
+++ trunk/src/main/java/org/chorem/jtimer/entities/TimerTask.java 2012-03-17 10:47:17 UTC (rev 2833)
@@ -33,21 +33,16 @@
import java.util.TreeMap;
import java.util.UUID;
-import org.apache.commons.lang3.SerializationUtils;
import org.chorem.jtimer.utils.DailySortedMap;
/**
* Represents a task.
*
- * This task is cloneable using SerializationUtils (commons-lang).
- *
* @author chatellier
* @version $Revision$
*
* Last update : $Date$
* By : $Author$
- *
- * @see SerializationUtils
*/
public class TimerTask implements Cloneable,
Comparable<TimerTask>, Serializable {
@@ -369,27 +364,14 @@
try {
task = (TimerTask) super.clone();
- // clone collections using
- // commons-lang SerializationUtils
-
- // copy name
- task.name = name;
-
// copy date
task.creationDate = creationDate == null ? null
: (Date) creationDate.clone();
- // copy durations
- task.allDaysTimes = (DailySortedMap<Long>) SerializationUtils
- .clone((DailySortedMap<Long>) allDaysTimes);
-
- // copy notes
- task.allDaysAnnotations = (TreeMap<Date, String>) SerializationUtils
- .clone((TreeMap<Date, String>) allDaysAnnotations);
-
- // copy subtasks
- task.subTasks = (ArrayList<TimerTask>) SerializationUtils
- .clone((ArrayList<TimerTask>) subTasks);
+ // make new list instance
+ task.allDaysTimes = new DailySortedMap<Long>(allDaysTimes);
+ task.allDaysAnnotations = new TreeMap<Date, String>(allDaysAnnotations);
+ task.subTasks = new ArrayList<TimerTask>(subTasks);
} catch (CloneNotSupportedException e) {
throw new RuntimeException("Can't clone", e);
}
Modified: trunk/src/test/java/org/chorem/jtimer/entities/TimerTaskTest.java
===================================================================
--- trunk/src/test/java/org/chorem/jtimer/entities/TimerTaskTest.java 2012-03-17 09:58:17 UTC (rev 2832)
+++ trunk/src/test/java/org/chorem/jtimer/entities/TimerTaskTest.java 2012-03-17 10:47:17 UTC (rev 2833)
@@ -5,7 +5,7 @@
* $Id$
* $HeadURL$
* %%
- * Copyright (C) 2008 - 2011 CodeLutin, Chatellier Eric
+ * Copyright (C) 2008 - 2012 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
@@ -25,7 +25,6 @@
package org.chorem.jtimer.entities;
-import java.util.Calendar;
import java.util.Date;
import org.chorem.jtimer.AbstractJTimerTest;
@@ -70,7 +69,7 @@
Assert.assertTrue(clonedTask.allDaysTimes instanceof DailySortedMap<?>, "Clone put invalid type for map");
Assert.assertFalse(clonedTask.allDaysAnnotations instanceof DailySortedMap<?>, "Clone put invalid type for map");
}
-
+
/**
* Test task subtasks.
*/
@@ -91,7 +90,6 @@
Assert.assertEquals(1, clonedTask.getSubTasks().size());
// subtask modification
- subtask.setName("bobo");
Assert.assertEquals("subtest", clonedTask.getSubTasks().get(0).getName());
// clone removal, not modify first
@@ -99,4 +97,26 @@
Assert.assertEquals(0, clonedTask.getSubTasks().size());
Assert.assertEquals(1, task.getSubTasks().size());
}
+
+ /**
+ * Test that clone is a soft clone (excepted for lists).
+ */
+ @Test
+ public void testCloneLists() {
+ TimerTask task = new TimerTask();
+ task.setName("test");
+
+ TimerTask clonedTask = task.clone();
+
+ task.setClosed(true);
+ task.addTask(new TimerTask());
+ task.setName("new name");
+
+ Assert.assertEquals(task.getName(), "new name");
+ Assert.assertEquals(clonedTask.getName(), "test");
+ Assert.assertTrue(task.isClosed());
+ Assert.assertFalse(clonedTask.isClosed());
+ Assert.assertEquals(task.getSubTasks().size(), 1);
+ Assert.assertEquals(clonedTask.getSubTasks().size(), 0);
+ }
}
1
0
r2832 - in trunk/src/main/java/org/chorem/jtimer: data io ui ui/systray ui/treetable ws/xmlrpc
by echatellier@users.chorem.org 17 Mar '12
by echatellier@users.chorem.org 17 Mar '12
17 Mar '12
Author: echatellier
Date: 2012-03-17 10:58:17 +0100 (Sat, 17 Mar 2012)
New Revision: 2832
Url: http://chorem.org/repositories/revision/jtimer/2832
Log:
Remove useless pre/post change task closed state
Modified:
trunk/src/main/java/org/chorem/jtimer/data/DataEventListener.java
trunk/src/main/java/org/chorem/jtimer/data/TimerDataManager.java
trunk/src/main/java/org/chorem/jtimer/io/GTimerIncrementalSaver.java
trunk/src/main/java/org/chorem/jtimer/ui/StatusBar.java
trunk/src/main/java/org/chorem/jtimer/ui/systray/SystrayManager.java
trunk/src/main/java/org/chorem/jtimer/ui/treetable/ProjectsAndTasksCellRenderer.java
trunk/src/main/java/org/chorem/jtimer/ui/treetable/ProjectsAndTasksModel.java
trunk/src/main/java/org/chorem/jtimer/ws/xmlrpc/ChoremXMLRPCClient.java
Modified: trunk/src/main/java/org/chorem/jtimer/data/DataEventListener.java
===================================================================
--- trunk/src/main/java/org/chorem/jtimer/data/DataEventListener.java 2012-03-17 09:44:07 UTC (rev 2831)
+++ trunk/src/main/java/org/chorem/jtimer/data/DataEventListener.java 2012-03-17 09:58:17 UTC (rev 2832)
@@ -104,20 +104,13 @@
public void setTaskTime(TimerTask task, Date date, Long time);
/**
- * Pre change task state.
+ * Change task state.
*
* @param task task
*/
- public void preChangeClosedState(TimerTask task);
+ public void changeClosedState(TimerTask task);
/**
- * Post change task state.
- *
- * @param task task
- */
- public void postChangeClosedState(TimerTask task);
-
- /**
* Pre move task.
*
* @param task task
Modified: trunk/src/main/java/org/chorem/jtimer/data/TimerDataManager.java
===================================================================
--- trunk/src/main/java/org/chorem/jtimer/data/TimerDataManager.java 2012-03-17 09:44:07 UTC (rev 2831)
+++ trunk/src/main/java/org/chorem/jtimer/data/TimerDataManager.java 2012-03-17 09:58:17 UTC (rev 2832)
@@ -319,19 +319,12 @@
vetoableDataEventListener.checkChangeClosedState(task);
}
- // send notification
- Iterator<DataEventListener> itDataEventListener = dataEventListeners
- .iterator();
- while (itDataEventListener.hasNext()) {
- itDataEventListener.next().preChangeClosedState(task);
- }
-
task.setClosed(!task.isClosed());
// send notification
- itDataEventListener = dataEventListeners.iterator();
+ Iterator<DataEventListener> itDataEventListener = dataEventListeners.iterator();
while (itDataEventListener.hasNext()) {
- itDataEventListener.next().postChangeClosedState(task);
+ itDataEventListener.next().changeClosedState(task);
}
}
Modified: trunk/src/main/java/org/chorem/jtimer/io/GTimerIncrementalSaver.java
===================================================================
--- trunk/src/main/java/org/chorem/jtimer/io/GTimerIncrementalSaver.java 2012-03-17 09:44:07 UTC (rev 2831)
+++ trunk/src/main/java/org/chorem/jtimer/io/GTimerIncrementalSaver.java 2012-03-17 09:58:17 UTC (rev 2832)
@@ -1344,10 +1344,10 @@
}
/*
- * @see org.chorem.jtimer.data.event.DataEventListener#postChangeClosedState(org.chorem.jtimer.entities.TimerTask)
+ * @see org.chorem.jtimer.data.event.DataEventListener#changeClosedState(org.chorem.jtimer.entities.TimerTask)
*/
@Override
- public void postChangeClosedState(TimerTask task) {
+ public void changeClosedState(TimerTask task) {
if (task instanceof TimerProject) {
saveProject((TimerProject) task);
} else {
@@ -1360,14 +1360,6 @@
}
/*
- * @see org.chorem.jtimer.data.event.DataEventListener#preChangeClosedState(org.chorem.jtimer.entities.TimerTask)
- */
- @Override
- public void preChangeClosedState(TimerTask task) {
- // nothing
- }
-
- /*
* @see org.chorem.jtimer.data.event.DataEventListener#preMoveTask(org.chorem.jtimer.entities.TimerTask)
*/
@Override
Modified: trunk/src/main/java/org/chorem/jtimer/ui/StatusBar.java
===================================================================
--- trunk/src/main/java/org/chorem/jtimer/ui/StatusBar.java 2012-03-17 09:44:07 UTC (rev 2831)
+++ trunk/src/main/java/org/chorem/jtimer/ui/StatusBar.java 2012-03-17 09:58:17 UTC (rev 2832)
@@ -199,22 +199,14 @@
}
/*
- * @see org.chorem.jtimer.data.event.DataEventListener#postChangeClosedState(org.chorem.jtimer.entities.TimerTask)
+ * @see org.chorem.jtimer.data.event.DataEventListener#changeClosedState(org.chorem.jtimer.entities.TimerTask)
*/
@Override
- public void postChangeClosedState(TimerTask task) {
+ public void changeClosedState(TimerTask task) {
}
/*
- * @see org.chorem.jtimer.data.event.DataEventListener#preChangeClosedState(org.chorem.jtimer.entities.TimerTask)
- */
- @Override
- public void preChangeClosedState(TimerTask task) {
-
- }
-
- /*
* @see org.chorem.jtimer.data.event.DataEventListener#startTask(org.chorem.jtimer.entities.TimerTask)
*/
@Override
Modified: trunk/src/main/java/org/chorem/jtimer/ui/systray/SystrayManager.java
===================================================================
--- trunk/src/main/java/org/chorem/jtimer/ui/systray/SystrayManager.java 2012-03-17 09:44:07 UTC (rev 2831)
+++ trunk/src/main/java/org/chorem/jtimer/ui/systray/SystrayManager.java 2012-03-17 09:58:17 UTC (rev 2832)
@@ -254,22 +254,14 @@
}
/*
- * @see org.chorem.jtimer.data.event.DataEventListener#postChangeClosedState(org.chorem.jtimer.entities.TimerTask)
+ * @see org.chorem.jtimer.data.event.DataEventListener#changeClosedState(org.chorem.jtimer.entities.TimerTask)
*/
@Override
- public void postChangeClosedState(TimerTask task) {
+ public void changeClosedState(TimerTask task) {
}
/*
- * @see org.chorem.jtimer.data.event.DataEventListener#preChangeClosedState(org.chorem.jtimer.entities.TimerTask)
- */
- @Override
- public void preChangeClosedState(TimerTask task) {
-
- }
-
- /*
* @see org.chorem.jtimer.ui.systray.SystrayManager#startTask(org.chorem.jtimer.entities.TimerTask)
*/
@Override
Modified: trunk/src/main/java/org/chorem/jtimer/ui/treetable/ProjectsAndTasksCellRenderer.java
===================================================================
--- trunk/src/main/java/org/chorem/jtimer/ui/treetable/ProjectsAndTasksCellRenderer.java 2012-03-17 09:44:07 UTC (rev 2831)
+++ trunk/src/main/java/org/chorem/jtimer/ui/treetable/ProjectsAndTasksCellRenderer.java 2012-03-17 09:58:17 UTC (rev 2832)
@@ -234,22 +234,14 @@
}
/*
- * @see org.chorem.jtimer.data.event.DataEventListener#postChangeClosedState(org.chorem.jtimer.entities.TimerTask)
+ * @see org.chorem.jtimer.data.event.DataEventListener#changeClosedState(org.chorem.jtimer.entities.TimerTask)
*/
@Override
- public void postChangeClosedState(TimerTask task) {
+ public void changeClosedState(TimerTask task) {
}
/*
- * @see org.chorem.jtimer.data.event.DataEventListener#preChangeClosedState(org.chorem.jtimer.entities.TimerTask)
- */
- @Override
- public void preChangeClosedState(TimerTask task) {
-
- }
-
- /*
* @see org.chorem.jtimer.data.event.DataEventListener#startTask(org.chorem.jtimer.entities.TimerTask)
*/
@Override
Modified: trunk/src/main/java/org/chorem/jtimer/ui/treetable/ProjectsAndTasksModel.java
===================================================================
--- trunk/src/main/java/org/chorem/jtimer/ui/treetable/ProjectsAndTasksModel.java 2012-03-17 09:44:07 UTC (rev 2831)
+++ trunk/src/main/java/org/chorem/jtimer/ui/treetable/ProjectsAndTasksModel.java 2012-03-17 09:58:17 UTC (rev 2832)
@@ -469,26 +469,18 @@
}
/*
- * @see org.chorem.jtimer.data.event.DataEventListener#postChangeClosedState(org.chorem.jtimer.entities.TimerTask)
+ * @see org.chorem.jtimer.data.event.DataEventListener#changeClosedState(org.chorem.jtimer.entities.TimerTask)
*/
@Override
- public void postChangeClosedState(TimerTask task) {
+ public void changeClosedState(TimerTask task) {
- }
-
- /*
- * @see org.chorem.jtimer.data.event.DataEventListener#preChangeClosedState(org.chorem.jtimer.entities.TimerTask)
- */
- @Override
- public void preChangeClosedState(TimerTask task) {
-
if (showClosedTask) {
if (log.isDebugEnabled()) {
log.debug("Fire modify on state change because hidden task are shown");
}
notifyTaskChanged(task, OPERATION_MODIFY);
} else {
- if (!task.isClosed()) {
+ if (task.isClosed()) {
if (log.isDebugEnabled()) {
log.debug("Fire delete on state change because task disapear from view");
}
Modified: trunk/src/main/java/org/chorem/jtimer/ws/xmlrpc/ChoremXMLRPCClient.java
===================================================================
--- trunk/src/main/java/org/chorem/jtimer/ws/xmlrpc/ChoremXMLRPCClient.java 2012-03-17 09:44:07 UTC (rev 2831)
+++ trunk/src/main/java/org/chorem/jtimer/ws/xmlrpc/ChoremXMLRPCClient.java 2012-03-17 09:58:17 UTC (rev 2832)
@@ -767,22 +767,14 @@
}
/*
- * @see org.chorem.jtimer.event.DataEventListener#preChangeClosedState(org.chorem.jtimer.entities.TimerTask)
+ * @see org.chorem.jtimer.event.DataEventListener#changeClosedState(org.chorem.jtimer.entities.TimerTask)
*/
@Override
- public void preChangeClosedState(TimerTask task) {
+ public void changeClosedState(TimerTask task) {
}
/*
- * @see org.chorem.jtimer.event.DataEventListener#postChangeClosedState(org.chorem.jtimer.entities.TimerTask)
- */
- @Override
- public void postChangeClosedState(TimerTask task) {
-
- }
-
- /*
* @see org.chorem.jtimer.event.DataEventListener#postMoveTask(org.chorem.jtimer.entities.TimerTask)
*/
@Override
1
0
Author: echatellier
Date: 2012-03-17 10:44:07 +0100 (Sat, 17 Mar 2012)
New Revision: 2831
Url: http://chorem.org/repositories/revision/jtimer/2831
Log:
#481: Migration configuration to NuitonUtils's ApplicationConfig
Modified:
trunk/pom.xml
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2012-03-16 11:02:04 UTC (rev 2830)
+++ trunk/pom.xml 2012-03-17 09:44:07 UTC (rev 2831)
@@ -208,7 +208,7 @@
<dependency>
<groupId>org.nuiton</groupId>
<artifactId>nuiton-utils</artifactId>
- <version>2.4.4</version>
+ <version>2.4.5</version>
<scope>compile</scope>
<exclusions>
<exclusion>
1
0
r2830 - trunk/src/main/java/org/chorem/jtimer/ui/treetable
by echatellier@users.chorem.org 16 Mar '12
by echatellier@users.chorem.org 16 Mar '12
16 Mar '12
Author: echatellier
Date: 2012-03-16 12:02:04 +0100 (Fri, 16 Mar 2012)
New Revision: 2830
Url: http://chorem.org/repositories/revision/jtimer/2830
Log:
Useless cast
Modified:
trunk/src/main/java/org/chorem/jtimer/ui/treetable/ProjectsAndTasksModel.java
Modified: trunk/src/main/java/org/chorem/jtimer/ui/treetable/ProjectsAndTasksModel.java
===================================================================
--- trunk/src/main/java/org/chorem/jtimer/ui/treetable/ProjectsAndTasksModel.java 2012-03-16 11:01:06 UTC (rev 2829)
+++ trunk/src/main/java/org/chorem/jtimer/ui/treetable/ProjectsAndTasksModel.java 2012-03-16 11:02:04 UTC (rev 2830)
@@ -315,7 +315,7 @@
List<TimerTask> subTask = getFiteredSubListFor(pathLastComponent, operation == OPERATION_ADD);
int childCount = subTask.size();
for (int childIndex = 0; !updated && childIndex < childCount; ++childIndex) {
- TimerTask taskUO = (TimerTask) subTask.get(childIndex);
+ TimerTask taskUO = subTask.get(childIndex);
if (task.equals(taskUO)) {
1
0
16 Mar '12
Author: echatellier
Date: 2012-03-16 12:01:06 +0100 (Fri, 16 Mar 2012)
New Revision: 2829
Url: http://chorem.org/repositories/revision/jtimer/2829
Log:
Revert commit on test code (never been used)
Removed:
trunk/src/main/java/org/chorem/jtimer/entities/TimerObject.java
trunk/src/main/java/org/chorem/jtimer/entities/TimerProjectsList.java
Modified:
trunk/src/main/java/org/chorem/jtimer/entities/TimerAlert.java
trunk/src/main/java/org/chorem/jtimer/entities/TimerTask.java
Modified: trunk/src/main/java/org/chorem/jtimer/entities/TimerAlert.java
===================================================================
--- trunk/src/main/java/org/chorem/jtimer/entities/TimerAlert.java 2012-03-16 11:00:21 UTC (rev 2828)
+++ trunk/src/main/java/org/chorem/jtimer/entities/TimerAlert.java 2012-03-16 11:01:06 UTC (rev 2829)
@@ -5,7 +5,7 @@
* $Id$
* $HeadURL$
* %%
- * Copyright (C) 2009 - 2011 CodeLutin, Chatellier Eric
+ * Copyright (C) 2009 - 2012 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
@@ -36,14 +36,11 @@
* Last update : $Date$
* By : $Author$
*/
-public class TimerAlert extends TimerObject implements Serializable, Cloneable {
+public class TimerAlert implements Serializable, Cloneable {
/** serialVersionUID. */
private static final long serialVersionUID = 584921087501157113L;
- public static final String PROPERTY_TYPE = "type";
- public static final String PROPERTY_DURATION = "duration";
-
/**
* Alert type.
*/
@@ -92,10 +89,7 @@
* @param type the type to set
*/
public void setType(Type type) {
- getVetoableSupport().firePropertyChange(PROPERTY_TYPE, this.type, type);
- Type oldValue = this.type;
this.type = type;
- getChangeSupport().firePropertyChange(PROPERTY_TYPE, oldValue, this.type);
}
/**
@@ -113,10 +107,7 @@
* @param duration the duration to set (in seconds)
*/
public void setDuration(long duration) {
- getVetoableSupport().firePropertyChange(PROPERTY_DURATION, this.duration, duration);
- long oldValue = this.duration;
this.duration = duration;
- getChangeSupport().firePropertyChange(PROPERTY_DURATION, oldValue, this.duration);
}
/*
Deleted: trunk/src/main/java/org/chorem/jtimer/entities/TimerObject.java
===================================================================
--- trunk/src/main/java/org/chorem/jtimer/entities/TimerObject.java 2012-03-16 11:00:21 UTC (rev 2828)
+++ trunk/src/main/java/org/chorem/jtimer/entities/TimerObject.java 2012-03-16 11:01:06 UTC (rev 2829)
@@ -1,93 +0,0 @@
-/*
- * #%L
- * $Id$
- * $HeadURL$
- * %%
- * Copyright (C) 2011 - 2012 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.entities;
-
-import java.beans.PropertyChangeListener;
-import java.beans.PropertyChangeSupport;
-
-/**
- * Timer object.
- *
- * Contains listener.
- *
- * @author chatellier
- * @version $Revision$
- *
- * Last update : $Date$
- * By : $Author$
- */
-public abstract class TimerObject {
-
- /** Property change support for vetoable actions (private to use getter). */
- private transient PropertyChangeSupport vetoableSupport;
-
- /** Property change support for change actions (private to use getter). */
- private transient PropertyChangeSupport changeSupport;
-
- protected PropertyChangeSupport getVetoableSupport() {
- if (vetoableSupport == null) {
- vetoableSupport = new PropertyChangeSupport(this);
- }
- return vetoableSupport;
- }
-
- protected PropertyChangeSupport getChangeSupport() {
- if (changeSupport == null) {
- changeSupport = new PropertyChangeSupport(this);
- }
- return changeSupport;
- }
-
- public void addVetoableListener(PropertyChangeListener listener) {
- vetoableSupport.addPropertyChangeListener(listener);
- }
-
- public void removeVetoableListener(PropertyChangeListener listener) {
- vetoableSupport.removePropertyChangeListener(listener);
- }
-
- public void addVetoableListener(String propertyName, PropertyChangeListener listener) {
- vetoableSupport.addPropertyChangeListener(propertyName, listener);
- }
-
- public void removeVetoableListener(String propertyName, PropertyChangeListener listener) {
- vetoableSupport.removePropertyChangeListener(propertyName, listener);
- }
-
- public void addChangeListener(PropertyChangeListener listener) {
- changeSupport.addPropertyChangeListener(listener);
- }
-
- public void removeChangeListener(PropertyChangeListener listener) {
- changeSupport.removePropertyChangeListener(listener);
- }
-
- public void addChangeListener(String propertyName, PropertyChangeListener listener) {
- changeSupport.addPropertyChangeListener(propertyName, listener);
- }
-
- public void removeChangeListener(String propertyName, PropertyChangeListener listener) {
- changeSupport.removePropertyChangeListener(propertyName, listener);
- }
-}
Deleted: trunk/src/main/java/org/chorem/jtimer/entities/TimerProjectsList.java
===================================================================
--- trunk/src/main/java/org/chorem/jtimer/entities/TimerProjectsList.java 2012-03-16 11:00:21 UTC (rev 2828)
+++ trunk/src/main/java/org/chorem/jtimer/entities/TimerProjectsList.java 2012-03-16 11:01:06 UTC (rev 2829)
@@ -1,72 +0,0 @@
-/*
- * #%L
- * jTimer
- *
- * $Id$
- * $HeadURL$
- * %%
- * Copyright (C) 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.entities;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Simply manage a project list for listener to register on that object.
- *
- * @author chatellier
- * @version $Revision$
- *
- * Last update : $Date$
- * By : $Author$
- */
-public class TimerProjectsList extends TimerObject {
-
- protected List<TimerProject> projects;
-
- public static final String PROPERTY_PROJECTS = "projects";
-
- /**
- * Constructor.
- */
- public TimerProjectsList() {
- projects = new ArrayList<TimerProject>();
- }
-
- /**
- * Get project list.
- *
- * @return project list
- */
- public List<TimerProject> getProjects() {
- return projects;
- }
-
- /**
- * Add new project to project list.
- *
- * @param project project
- */
- public void addProject(TimerProject project) {
- getVetoableSupport().firePropertyChange(PROPERTY_PROJECTS, null, projects);
- projects.add(project);
- getChangeSupport().firePropertyChange(PROPERTY_PROJECTS, null, projects);
- }
-}
Modified: trunk/src/main/java/org/chorem/jtimer/entities/TimerTask.java
===================================================================
--- trunk/src/main/java/org/chorem/jtimer/entities/TimerTask.java 2012-03-16 11:00:21 UTC (rev 2828)
+++ trunk/src/main/java/org/chorem/jtimer/entities/TimerTask.java 2012-03-16 11:01:06 UTC (rev 2829)
@@ -49,22 +49,12 @@
*
* @see SerializationUtils
*/
-public class TimerTask extends TimerObject implements Cloneable,
+public class TimerTask implements Cloneable,
Comparable<TimerTask>, Serializable {
/** serialVersionUID */
private static final long serialVersionUID = -7590755569706702695L;
- public static final String PROPERTY_NUMBER = "number";
- public static final String PROPERTY_NAME = "name";
- public static final String PROPERTY_CREATION_DATE = "creationDate";
- public static final String PROPERTY_CLOSED = "closed";
- public static final String PROPERTY_PARENT = "parent";
- public static final String PROPERTY_ALL_DAYS_TIMES = "allDaysTimes";
- public static final String PROPERTY_ALL_DAYS_ANNOTATIONS = "allDaysAnnotations";
- public static final String PROPERTY_SUB_TASKS = "subTasks";
- public static final String PROPERTY_ALERTS = "alerts";
-
/** Task uuid used to managed task equality. */
protected String uuid = UUID.randomUUID().toString();
@@ -145,10 +135,7 @@
* @param number the number to set
*/
public void setNumber(int number) {
- getVetoableSupport().firePropertyChange(PROPERTY_NUMBER, this.number, number);
- int oldValue = this.number;
this.number = number;
- getChangeSupport().firePropertyChange(PROPERTY_NUMBER, oldValue, this.number);
}
/**
@@ -166,10 +153,7 @@
* @param name the name to set
*/
public void setName(String name) {
- getVetoableSupport().firePropertyChange(PROPERTY_NAME, this.name, name);
- String oldValue = this.name;
this.name = name;
- getChangeSupport().firePropertyChange(PROPERTY_NAME, oldValue, this.name);
}
/**
@@ -187,10 +171,7 @@
* @param creationDate creation date
*/
public void setCreationDate(Date creationDate) {
- getVetoableSupport().firePropertyChange(PROPERTY_CREATION_DATE, this.creationDate, creationDate);
- Date oldValue = this.creationDate;
this.creationDate = creationDate;
- getChangeSupport().firePropertyChange(PROPERTY_CREATION_DATE, oldValue, this.creationDate);
}
/**
@@ -208,10 +189,7 @@
* @param closed closed
*/
public void setClosed(boolean closed) {
- getVetoableSupport().firePropertyChange(PROPERTY_CLOSED, this.closed, closed);
- boolean oldValue = this.closed;
this.closed = closed;
- getChangeSupport().firePropertyChange(PROPERTY_CLOSED, oldValue, this.closed);
}
/**
@@ -231,16 +209,12 @@
* @param parent the parent to set
*/
protected void setParent(TimerTask parent) {
-
// will cause an infinite loop
if (parent == this) {
throw new IllegalArgumentException("Parent can't be current task");
}
-
- getVetoableSupport().firePropertyChange(PROPERTY_PARENT, this.parent, parent);
- TimerTask oldValue = this.parent;
this.parent = parent;
- getChangeSupport().firePropertyChange(PROPERTY_PARENT, oldValue, this.parent);
+
}
/**
@@ -264,10 +238,7 @@
// set parent
t.setParent(this);
-
- getVetoableSupport().firePropertyChange(PROPERTY_SUB_TASKS, null, subTasks);
boolean result = subTasks.add(t);
- getChangeSupport().firePropertyChange(PROPERTY_SUB_TASKS, null, this.parent);
return result;
}
@@ -280,9 +251,7 @@
* @param seconds seconds
*/
public void setTime(Date date, Long seconds) {
- getVetoableSupport().firePropertyChange(PROPERTY_ALL_DAYS_TIMES, null, allDaysTimes);
allDaysTimes.put(date, seconds);
- getChangeSupport().firePropertyChange(PROPERTY_ALL_DAYS_TIMES, null, this.allDaysTimes);
}
/**
@@ -318,9 +287,7 @@
* @param note note text
*/
public void addAnnotation(Date date, String note) {
- getVetoableSupport().firePropertyChange(PROPERTY_ALL_DAYS_ANNOTATIONS, null, allDaysAnnotations);
allDaysAnnotations.put(date, note);
- getChangeSupport().firePropertyChange(PROPERTY_ALL_DAYS_ANNOTATIONS, null, this.allDaysAnnotations);
}
/**
@@ -338,9 +305,7 @@
* @param alert
*/
public void addAlert(TimerAlert alert) {
- getVetoableSupport().firePropertyChange(PROPERTY_ALERTS, null, alerts);
alerts.add(alert);
- getChangeSupport().firePropertyChange(PROPERTY_ALERTS, null, alerts);
}
/**
@@ -358,9 +323,7 @@
* @param alerts new alerts list
*/
public void setAlert(List<TimerAlert> alerts) {
- getVetoableSupport().firePropertyChange(PROPERTY_ALERTS, null, alerts);
this.alerts = alerts;
- getChangeSupport().firePropertyChange(PROPERTY_ALERTS, null, alerts);
}
/*
1
0
r2828 - trunk/src/main/java/org/chorem/jtimer/ui/system/unix
by echatellier@users.chorem.org 16 Mar '12
by echatellier@users.chorem.org 16 Mar '12
16 Mar '12
Author: echatellier
Date: 2012-03-16 12:00:21 +0100 (Fri, 16 Mar 2012)
New Revision: 2828
Url: http://chorem.org/repositories/revision/jtimer/2828
Log:
Fix potential NPE
Modified:
trunk/src/main/java/org/chorem/jtimer/ui/system/unix/UnixSystemInfo.java
Modified: trunk/src/main/java/org/chorem/jtimer/ui/system/unix/UnixSystemInfo.java
===================================================================
--- trunk/src/main/java/org/chorem/jtimer/ui/system/unix/UnixSystemInfo.java 2012-03-16 09:29:46 UTC (rev 2827)
+++ trunk/src/main/java/org/chorem/jtimer/ui/system/unix/UnixSystemInfo.java 2012-03-16 11:00:21 UTC (rev 2828)
@@ -124,10 +124,10 @@
idleTime = screenSaverInfo.idle.longValue();
}
}
+
+ // free resources
+ X11.INSTANCE.XFree(screenSaverInfo.getPointer());
}
-
- // free resources
- X11.INSTANCE.XFree(screenSaverInfo.getPointer());
}
// free resources
1
0
Author: echatellier
Date: 2012-03-16 10:29:46 +0100 (Fri, 16 Mar 2012)
New Revision: 2827
Url: http://chorem.org/repositories/revision/jtimer/2827
Log:
Fix openjdk compilation
Modified:
trunk/pom.xml
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2012-03-15 10:46:06 UTC (rev 2826)
+++ trunk/pom.xml 2012-03-16 09:29:46 UTC (rev 2827)
@@ -230,6 +230,12 @@
<artifactId>bsaf</artifactId>
<version>1.9.2</version>
<scope>compile</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>javax.jnlp</groupId>
+ <artifactId>jnlp</artifactId>
+ </exclusion>
+ </exclusions>
</dependency>
<dependency>
<groupId>org.swinglabs.swingx</groupId>
1
0
15 Mar '12
Author: echatellier
Date: 2012-03-15 11:46:06 +0100 (Thu, 15 Mar 2012)
New Revision: 2826
Url: http://chorem.org/repositories/revision/jtimer/2826
Log:
#486: Add close to systray option
Modified:
trunk/src/main/java/org/chorem/jtimer/ui/systray/SystrayManager.java
Modified: trunk/src/main/java/org/chorem/jtimer/ui/systray/SystrayManager.java
===================================================================
--- trunk/src/main/java/org/chorem/jtimer/ui/systray/SystrayManager.java 2012-03-15 10:41:39 UTC (rev 2825)
+++ trunk/src/main/java/org/chorem/jtimer/ui/systray/SystrayManager.java 2012-03-15 10:46:06 UTC (rev 2826)
@@ -504,7 +504,7 @@
public void windowClosing(WindowEvent e) {
// tray available only if trayIcon != null
- if (trayIcon != null) {
+ if (trayIcon != null && JTimer.config.isCloseToSystray()) {
// hide window (without exiting)
parent.hide();
showItem.setText(resourceMap.getString("showMenuText"));
1
0
r2825 - in trunk/src/main: java/org/chorem/jtimer java/org/chorem/jtimer/ui/report java/org/chorem/jtimer/ui/treetable resources/org/chorem/jtimer/resources resources/org/chorem/jtimer/ui/report/resources
by echatellier@users.chorem.org 15 Mar '12
by echatellier@users.chorem.org 15 Mar '12
15 Mar '12
Author: echatellier
Date: 2012-03-15 11:41:39 +0100 (Thu, 15 Mar 2012)
New Revision: 2825
Url: http://chorem.org/repositories/revision/jtimer/2825
Log:
#281: Ability to save report options
#486: Add close to systray option
#488: Remember show closed option
Added:
trunk/src/main/resources/org/chorem/jtimer/ui/report/resources/applications-system.png
trunk/src/main/resources/org/chorem/jtimer/ui/report/resources/mail-forward.png
Modified:
trunk/src/main/java/org/chorem/jtimer/JTimer.java
trunk/src/main/java/org/chorem/jtimer/JTimerConfig.java
trunk/src/main/java/org/chorem/jtimer/ui/report/ReportView.java
trunk/src/main/java/org/chorem/jtimer/ui/treetable/ProjectsAndTasksTable.java
trunk/src/main/resources/org/chorem/jtimer/resources/JTimer.properties
trunk/src/main/resources/org/chorem/jtimer/resources/JTimer_fr.properties
trunk/src/main/resources/org/chorem/jtimer/ui/report/resources/ReportView.properties
Modified: trunk/src/main/java/org/chorem/jtimer/JTimer.java
===================================================================
--- trunk/src/main/java/org/chorem/jtimer/JTimer.java 2012-03-15 09:56:38 UTC (rev 2824)
+++ trunk/src/main/java/org/chorem/jtimer/JTimer.java 2012-03-15 10:41:39 UTC (rev 2825)
@@ -38,16 +38,19 @@
import java.util.List;
import java.util.Timer;
+import javax.swing.ButtonGroup;
import javax.swing.InputMap;
import javax.swing.JButton;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JComponent;
+import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
+import javax.swing.JRadioButtonMenuItem;
import javax.swing.JScrollPane;
import javax.swing.JSeparator;
import javax.swing.JToolBar;
@@ -75,6 +78,7 @@
import org.chorem.jtimer.ui.tasks.RefreshTreeTask;
import org.chorem.jtimer.ui.tasks.RunTaskJob;
import org.chorem.jtimer.ui.treetable.ProjectsAndTasksTable;
+import org.chorem.jtimer.ui.widget.WindowProperty2;
import org.chorem.jtimer.ui.ws.SwingConnectionInformationHandler;
import org.chorem.jtimer.ws.ConnectionDataHandler;
import org.chorem.jtimer.ws.ProjectManagement;
@@ -175,6 +179,9 @@
ApplicationContext ctxt = getContext();
resourceMap = ctxt.getResourceMap();
+ // fix start in iconified mode
+ ctxt.getSessionStorage().putProperty(JFrame.class, new WindowProperty2());
+
// init timercore
core = new TimerCore();
@@ -289,6 +296,7 @@
projectsAndTasksTable.setName("projectslist");
projectsAndTasksTable.addTreeSelectionListener(this);
projectsAndTasksTable.addMouseListener(this);
+ projectsAndTasksTable.setShowClosed(config.isShowClosed());
// since merge option, selection can be multiple
projectsAndTasksTable
@@ -360,8 +368,8 @@
String[] reportMenuActionNames = { "makeReport" };
menuBar.add(createMenu("reportMenu", reportMenuActionNames));
- String[] optionMenuActionNames = { "isShowClosed" };
- menuBar.add(createMenu("optionMenu", optionMenuActionNames));
+ JMenu optionmMenu = createOptionMenu();
+ menuBar.add(optionmMenu);
String[] helpMenuActionNames = { "about" };
menuBar.add(createMenu("helpMenu", helpMenuActionNames));
@@ -370,6 +378,49 @@
}
/**
+ * Create option dynamic menu.
+ *
+ * @return option menu
+ */
+ protected JMenu createOptionMenu() {
+ JMenu menu = new JMenu();
+ menu.setName("optionMenu");
+
+ // show closed
+ JMenuItem showClosedItem = new JCheckBoxMenuItem();
+ showClosedItem.setAction(getAction("isShowClosed"));
+ showClosedItem.setSelected(config.isShowClosed());
+ showClosedItem.setIcon(null);
+ menu.add(showClosedItem);
+
+ // close to systray
+ JMenuItem closeToSysItem = new JCheckBoxMenuItem();
+ closeToSysItem.setAction(getAction("isCloseToSystray"));
+ closeToSysItem.setSelected(config.isCloseToSystray());
+ closeToSysItem.setIcon(null);
+ menu.add(closeToSysItem);
+
+ // report first day of week
+ JMenu reportFDoW = new JMenu();
+ reportFDoW.setName("optionReportFirstDayMenu");
+ Calendar calendar = Calendar.getInstance();
+ ButtonGroup bg = new ButtonGroup();
+ // affiche la liste des jours dans l'ordre de la locale utilisateur
+ for (int day = calendar.getFirstDayOfWeek() ; day < calendar.getFirstDayOfWeek() + 7 ; day++) {
+ int realDay = (day - 1) % 7 + 1;
+ JRadioButtonMenuItem fdowItem = new JRadioButtonMenuItem();
+ fdowItem.setAction(getAction("isReportFirstDayOfWeek" + realDay));
+ fdowItem.setSelected(realDay == JTimer.config.getReportFirstDayOfWeek());
+ fdowItem.setIcon(null);
+ reportFDoW.add(fdowItem);
+ bg.add(fdowItem);
+ }
+ menu.add(reportFDoW);
+
+ return menu;
+ }
+
+ /**
* Create single menu.
*
* @param menuName menu name
@@ -786,17 +837,87 @@
}
/**
- * Increment task time.
+ * Change show closed option.
*
* @param event action event
*/
@Action
public void isShowClosed(ActionEvent event) {
JCheckBoxMenuItem source = (JCheckBoxMenuItem) event.getSource();
- projectsAndTasksTable.setShowClosed(source.isSelected());
+ boolean showClosed = source.isSelected();
+ projectsAndTasksTable.setShowClosed(showClosed);
+ config.setShowClosed(showClosed);
}
/**
+ * Change close to systray option.
+ *
+ * @param event action event
+ */
+ @Action
+ public void isCloseToSystray(ActionEvent event) {
+ JCheckBoxMenuItem source = (JCheckBoxMenuItem) event.getSource();
+ boolean closeToSystray = source.isSelected();
+ config.setCloseToSystray(closeToSystray);
+ }
+
+ /**
+ * Change report first day of week.
+ */
+ @Action
+ public void isReportFirstDayOfWeek1() {
+ config.setReportFirstDayOfWeek(1);
+ }
+
+ /**
+ * Change report first day of week.
+ */
+ @Action
+ public void isReportFirstDayOfWeek2() {
+ config.setReportFirstDayOfWeek(2);
+ }
+
+ /**
+ * Change report first day of week.
+ */
+ @Action
+ public void isReportFirstDayOfWeek3() {
+ config.setReportFirstDayOfWeek(3);
+ }
+
+ /**
+ * Change report first day of week.
+ */
+ @Action
+ public void isReportFirstDayOfWeek4() {
+ config.setReportFirstDayOfWeek(4);
+ }
+
+ /**
+ * Change report first day of week.
+ */
+ @Action
+ public void isReportFirstDayOfWeek5() {
+ config.setReportFirstDayOfWeek(5);
+ }
+
+ /**
+ * Change report first day of week.
+ */
+ @Action
+ public void isReportFirstDayOfWeek6() {
+ config.setReportFirstDayOfWeek(6);
+ }
+
+ /**
+ * Change report first day of week.
+ */
+ @Action
+ public void isReportFirstDayOfWeek7() {
+ config.setReportFirstDayOfWeek(7);
+ }
+
+ /**
* Increment task time.
*/
@Action(enabledProperty = "selectedSingleTask")
Modified: trunk/src/main/java/org/chorem/jtimer/JTimerConfig.java
===================================================================
--- trunk/src/main/java/org/chorem/jtimer/JTimerConfig.java 2012-03-15 09:56:38 UTC (rev 2824)
+++ trunk/src/main/java/org/chorem/jtimer/JTimerConfig.java 2012-03-15 10:41:39 UTC (rev 2825)
@@ -109,6 +109,44 @@
}
/**
+ * Show closed project on main ui tree.
+ *
+ * @return show closed project
+ */
+ public boolean isShowClosed() {
+ return appConfig.getOptionAsBoolean(JTimerOption.UI_SHOW_CLOSED.key);
+ }
+
+ /**
+ * Set show closed option.
+ *
+ * @param showClosed show closed
+ */
+ public void setShowClosed(boolean showClosed) {
+ appConfig.setOption(JTimerOption.UI_SHOW_CLOSED.key, String.valueOf(showClosed));
+ appConfig.saveForUser();
+ }
+
+ /**
+ * Get close to systray option.
+ *
+ * @return close to systray
+ */
+ public boolean isCloseToSystray() {
+ return appConfig.getOptionAsBoolean(JTimerOption.UI_CLOSE_TO_SYSTRAY.key);
+ }
+
+ /**
+ * Set close to systray option
+ *
+ * @param closeToSystray close to systray
+ */
+ public void setCloseToSystray(boolean closeToSystray) {
+ appConfig.setOption(JTimerOption.UI_CLOSE_TO_SYSTRAY.key, String.valueOf(closeToSystray));
+ appConfig.saveForUser();
+ }
+
+ /**
* Return first day of week.
* Default to {@code -1} (no preference).
*
@@ -118,6 +156,16 @@
return appConfig.getOptionAsInt(JTimerOption.UI_REPORT_FIRSTDAYOFWEEK.key);
}
+ /**
+ * Report first day of week.
+ *
+ * @param firstDayOfWeek first day of week
+ */
+ public void setReportFirstDayOfWeek(int firstDayOfWeek) {
+ appConfig.setOption(JTimerOption.UI_REPORT_FIRSTDAYOFWEEK.key, String.valueOf(firstDayOfWeek));
+ appConfig.saveForUser();
+ }
+
public enum JTimerOption {
CONFIG_FILENAME(ApplicationConfig.CONFIG_FILE_NAME, "jtimer.properties"),
SERVICE_CLASS("jtimer.service.class", null),
@@ -127,7 +175,9 @@
IO_SAVER_DIRECTORY("jtimer.io.saver.directory", "${user.home}/.gtimer"),
IO_SAVER_AUTOSAVEDELAY("jtimer.io.saver.autosavedelay", "300"),
UI_IDLE_TIME("jtimer.ui.idletime", "300"),
- UI_REPORT_FIRSTDAYOFWEEK("jtimer.ui.report.firstdayofweek", "-1");
+ UI_SHOW_CLOSED("jtimer.ui.showclosed", "false"),
+ UI_CLOSE_TO_SYSTRAY("jtimer.ui.closetosystray", "true"),
+ UI_REPORT_FIRSTDAYOFWEEK("jtimer.ui.report.firstdayofweek", "0");
protected String key;
Modified: trunk/src/main/java/org/chorem/jtimer/ui/report/ReportView.java
===================================================================
--- trunk/src/main/java/org/chorem/jtimer/ui/report/ReportView.java 2012-03-15 09:56:38 UTC (rev 2824)
+++ trunk/src/main/java/org/chorem/jtimer/ui/report/ReportView.java 2012-03-15 10:41:39 UTC (rev 2825)
@@ -54,6 +54,7 @@
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
+import javax.swing.JSplitPane;
import javax.swing.JTextArea;
import javax.swing.JTree;
import javax.swing.event.DocumentEvent;
@@ -162,7 +163,7 @@
*/
protected JComponent getMainComponent() {
- JPanel mainComponent = new JPanel(new GridBagLayout());
+ JPanel configComponent = new JPanel(new GridBagLayout());
// panel for options
JPanel panelOption = new JPanel(new GridBagLayout());
@@ -275,8 +276,16 @@
JScrollPane jspTable = new JScrollPane(projectsTree);
panelProjects.add(jspTable, BorderLayout.CENTER);
+ configComponent.add(panelOption, new GridBagConstraints(0, 0, 1, 1, 0, 0,
+ GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
+ new Insets(1, 1, 1, 1), 0, 0));
+
+ configComponent.add(panelProjects, new GridBagConstraints(0, 1, 1, 1, 1,
+ 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH,
+ new Insets(1, 1, 1, 1), 0, 0));
+
// panel for report text
- JPanel panelReports = new JPanel(new BorderLayout());
+ JPanel panelReports = new JPanel(new GridBagLayout());
panelReports.setBorder(BorderFactory.createTitledBorder(getResourceMap()
.getString("reportContent")));
@@ -284,42 +293,34 @@
reportArea.setFont(new Font("Courier", Font.PLAIN, 12));
reportArea.getDocument().addDocumentListener(this);
JScrollPane jspReport = new JScrollPane(reportArea);
- panelReports.add(jspReport, BorderLayout.CENTER);
-
- mainComponent.add(panelOption, new GridBagConstraints(0, 0, 3, 1, 2, 0,
- GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
+ panelReports.add(jspReport, new GridBagConstraints(0, 0, 3, 1, 1, 1,
+ GridBagConstraints.CENTER, GridBagConstraints.BOTH,
new Insets(1, 1, 1, 1), 0, 0));
- mainComponent.add(panelProjects, new GridBagConstraints(0, 1, 3, 1, 2,
- 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH,
- new Insets(1, 1, 1, 1), 0, 0));
-
// buttons
JButton generateButton = new JButton();
generateButton.setAction(getContext().getActionMap(this).get(
"generateReport"));
- mainComponent.add(generateButton, new GridBagConstraints(0, 2, 1, 1, 1,
+ panelReports.add(generateButton, new GridBagConstraints(0, 1, 1, 1, 1,
0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
new Insets(1, 1, 1, 1), 0, 0));
JButton sendMailButton = new JButton();
sendMailButton.setAction(getContext().getActionMap(this)
.get("sendMail"));
- mainComponent.add(sendMailButton, new GridBagConstraints(1, 2, 1, 1, 1,
+ panelReports.add(sendMailButton, new GridBagConstraints(1, 1, 1, 1, 1,
0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
new Insets(1, 1, 1, 1), 0, 0));
JButton closeButton = new JButton();
closeButton.setAction(getContext().getActionMap(this).get("closeView"));
- mainComponent.add(closeButton, new GridBagConstraints(2, 2, 1, 1, 1, 0,
+ panelReports.add(closeButton, new GridBagConstraints(2, 1, 1, 1, 1, 0,
GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
new Insets(1, 1, 1, 1), 0, 0));
-
- mainComponent.add(panelReports, new GridBagConstraints(3, 0, 1, 3, 8,
- 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH,
- new Insets(1, 1, 1, 1), 250, 0));
-
- return mainComponent;
+
+ JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, configComponent, panelReports);
+ splitPane.setOneTouchExpandable(true);
+ return splitPane;
}
/**
@@ -348,7 +349,7 @@
// init dates
Calendar calendarBegin = Calendar.getInstance();
int firstDayOfWeek = JTimer.config.getReportFirstDayOfWeek();
- if (firstDayOfWeek < 0 || firstDayOfWeek > 6) {
+ if (firstDayOfWeek <= 0 || firstDayOfWeek > 7) {
firstDayOfWeek = calendarBegin.getFirstDayOfWeek();
}
calendarBegin.set(Calendar.DAY_OF_WEEK, firstDayOfWeek);
Modified: trunk/src/main/java/org/chorem/jtimer/ui/treetable/ProjectsAndTasksTable.java
===================================================================
--- trunk/src/main/java/org/chorem/jtimer/ui/treetable/ProjectsAndTasksTable.java 2012-03-15 09:56:38 UTC (rev 2824)
+++ trunk/src/main/java/org/chorem/jtimer/ui/treetable/ProjectsAndTasksTable.java 2012-03-15 10:41:39 UTC (rev 2825)
@@ -86,8 +86,7 @@
columnIdentifiers.add(resourceMap.getString("totalTimeColumnName"));
// set model
- treeTableModel = new ProjectsAndTasksModel(this, core,
- columnIdentifiers);
+ treeTableModel = new ProjectsAndTasksModel(this, core, columnIdentifiers);
// set renderer
treeCellRenderer = new ProjectsAndTasksCellRenderer(core);
Modified: trunk/src/main/resources/org/chorem/jtimer/resources/JTimer.properties
===================================================================
--- trunk/src/main/resources/org/chorem/jtimer/resources/JTimer.properties 2012-03-15 09:56:38 UTC (rev 2824)
+++ trunk/src/main/resources/org/chorem/jtimer/resources/JTimer.properties 2012-03-15 10:41:39 UTC (rev 2825)
@@ -119,6 +119,17 @@
isShowClosed.Action.text = Show closed
isShowClosed.Action.shortDescription = Show closed task and project
+isCloseToSystray.Action.text = Close to systray
+isCloseToSystray.Action.shortDescription = Reduce application to system tray instead of closing
+
+isReportFirstDayOfWeek1.Action.text = Sunday
+isReportFirstDayOfWeek2.Action.text = Monday
+isReportFirstDayOfWeek3.Action.text = Tuesday
+isReportFirstDayOfWeek4.Action.text = Wednesday
+isReportFirstDayOfWeek5.Action.text = Thursday
+isReportFirstDayOfWeek6.Action.text = Friday
+isReportFirstDayOfWeek7.Action.text = Saturday
+
about.Action.text = About...
about.Action.shortDescription = About ${Application.title}
@@ -136,6 +147,7 @@
taskMenu.text = Task
reportMenu.text = Report
optionMenu.text = Options
+optionReportFirstDayMenu.text = Report - First day of week
helpMenu.text = Help
# Input
@@ -156,11 +168,11 @@
input.addAnnotationTitle=Add annotation
input.addAnnotationMessage=Annotation for task "%s" :
-#�Error
+# Error
action.invalidActionTitle=Can't do action
action.missingErrorMessage=Error message is missing (%s)
-#�listeners errors
+# listeners errors
vetoable.common.duplicated.project.name=A project already exists with that name at this level !
vetoable.common.duplicated.task.name=A task already exists with that name at this level !
vetoable.common.merge.invalid.types=Can't merge project and task !
@@ -169,6 +181,6 @@
vetoable.saver.invalid.task.characters=Task name contains invalid characters !
vetoable.ws.chorem.cant.modify.synchronized.project=Can't do this action on a synchronized project !
-#�Start fail i18n
+# Start fail i18n
startFail.title=Error
startFail.message=${Application.title} fail to init.\nCheck that ${Application.title} is not already launched.
Modified: trunk/src/main/resources/org/chorem/jtimer/resources/JTimer_fr.properties
===================================================================
--- trunk/src/main/resources/org/chorem/jtimer/resources/JTimer_fr.properties 2012-03-15 09:56:38 UTC (rev 2824)
+++ trunk/src/main/resources/org/chorem/jtimer/resources/JTimer_fr.properties 2012-03-15 10:41:39 UTC (rev 2825)
@@ -90,7 +90,7 @@
decrement30Task.Action.shortDescription = Retire 30 minutes au temps de la t\u00E2che
setToZero.Action.text = Remettre \u00E0 Zero
-setToZero.Action.shortDecription = Remet le temps de la t\u00E2che \u00E0 zero
+setToZero.Action.shortDecription = Remet le temps de la t\u00E2che \u00E0 z\u00E9ro
mergeTasks.Action.text = Fusionner
mergeTasks.Action.shortDecription = Fusionner les t\u00E2ches
@@ -98,9 +98,20 @@
makeReport.Action.text = Rapport...
makeReport.Action.shortDescription = Cr\u00E9er un rapport
-isShowClosed.Action.text = Afficher les cach\u00E9es
-isShowClosed.Action.shortDescription = Affiche les projets et t\u00E2ches ferm\u00E9es
+isShowClosed.Action.text = Afficher les cach\u00E9s
+isShowClosed.Action.shortDescription = Affiche les projets et t\u00E2ches ferm\u00E9s
+isCloseToSystray.Action.text = Fermer vers le systray
+isCloseToSystray.Action.shortDescription = R\u00E9duit l'application dans le systray au lieu de la fermer
+
+isReportFirstDayOfWeek1.Action.text = Dimanche
+isReportFirstDayOfWeek2.Action.text = Lundi
+isReportFirstDayOfWeek3.Action.text = Mardi
+isReportFirstDayOfWeek4.Action.text = Mercredi
+isReportFirstDayOfWeek5.Action.text = Jeudi
+isReportFirstDayOfWeek6.Action.text = Vendredi
+isReportFirstDayOfWeek7.Action.text = Samedi
+
about.Action.text = \u00C0 propos...
about.Action.shortDescription = About ${Application.title}
@@ -115,6 +126,7 @@
taskMenu.text = T\u00E2che
reportMenu.text = Rapport
optionMenu.text = Options
+optionReportFirstDayMenu.text = Rapport - Premier jour de la semaine
helpMenu.text = Aide
# Input
@@ -135,11 +147,11 @@
input.addAnnotationTitle=Ajouter une annotation
input.addAnnotationMessage=Annotation pour la t\u00E2che "%s" :
-#�Error
+# Error
action.invalidActionTitle=Impossible d'effectuer cette action
action.missingErrorMessage=Message d'erreur manquant (%s)
-#�listeners errors
+# listeners errors
vetoable.common.duplicated.project.name=Un projet avec ce nom existe d\u00E9j\u00E0 \u00E0 ce niveau !
vetoable.common.duplicated.task.name=Une t\u00E2che avec ce nom existe d\u00E9j\u00E0 \u00E0 ce niveau !
vetoable.common.merge.invalid.types=Impossible de fusionner un projet et une t\u00E2che !
@@ -148,6 +160,6 @@
vetoable.saver.invalid.characters=Le nom contient des caract\u00E8res invalide !
vetoable.ws.chorem.cant.modify.synchronized.project=Impossible d'effectuer cette action sur un projet synchronis\u00E9 !
-#�Start fail i18n
+# Start fail i18n
startFail.title=Erreur
startFail.message=${Application.title} n'a pas r\u00E9ussi \u00E0 s'initiliser.\nV\u00E9rifiez que ${Application.title} n'est pas d\u00E9j\u00E0 lanc\u00E9.
\ No newline at end of file
Modified: trunk/src/main/resources/org/chorem/jtimer/ui/report/resources/ReportView.properties
===================================================================
--- trunk/src/main/resources/org/chorem/jtimer/ui/report/resources/ReportView.properties 2012-03-15 09:56:38 UTC (rev 2824)
+++ trunk/src/main/resources/org/chorem/jtimer/ui/report/resources/ReportView.properties 2012-03-15 10:41:39 UTC (rev 2825)
@@ -47,9 +47,11 @@
showHiddenProjects.Action.shortDescription = Show hidden projects
generateReport.Action.text = Generate
+generateReport.Action.icon = applications-system.png
generateReport.Action.shortDescription = Generate report
sendMail.Action.text = Send by mail
+sendMail.Action.icon = mail-forward.png
sendMail.Action.shortDescription = Send report by mail
closeView.Action.text = Close
Added: trunk/src/main/resources/org/chorem/jtimer/ui/report/resources/applications-system.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/main/resources/org/chorem/jtimer/ui/report/resources/applications-system.png
___________________________________________________________________
Added: svn:mime-type
+ image/png
Added: trunk/src/main/resources/org/chorem/jtimer/ui/report/resources/mail-forward.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/main/resources/org/chorem/jtimer/ui/report/resources/mail-forward.png
___________________________________________________________________
Added: svn:mime-type
+ image/png
1
0