]> gitweb @ CieloNegro.org - task-reporter.git/blob - src/main/scala/jp/ymir/taskReporter/core/ReportSet.scala
adopt the new format
[task-reporter.git] / src / main / scala / jp / ymir / taskReporter / core / ReportSet.scala
1 package jp.ymir.taskReporter.core
2 import java.io._
3 import java.text.SimpleDateFormat
4 import java.util.Calendar
5 import javax.swing.table.AbstractTableModel
6 import jp.ymir.taskReporter.core._
7 import scala.collection.immutable._
8 import scala.io._
9
10 class ReportSet(private var _file: Option[File])
11     extends AbstractTableModel {
12
13   private var _reports : SortedMap[Calendar, Report] = TreeMap()
14   private var _dirty = false
15
16   _file.foreach { file => load(file) }
17
18   def load(file: File) {
19     import Task._
20
21     var reports = _reports.empty
22     val src     = Source.fromFile(file, "UTF-8")
23
24     LTSV.decode[Task](src.mkString).foreach { task =>
25       if (reports.isDefinedAt(task.date)) {
26         reports(task.date) += task
27       }
28       else {
29         val report = new Report(task.date)
30         report  += task
31         reports += (report.date -> report)
32       }
33     }
34
35     _file    = Some(file)
36     _reports = reports
37     _dirty   = false
38     fireTableDataChanged
39   }
40
41   def file  = _file
42   def dirty = _dirty
43
44   def apply(n: Int) : Report =
45     // THINKME: Any better way than this?
46     _reports.values.toIndexedSeq(n)
47
48   def save(file: File) {
49     _file = Some(file); save
50   }
51   def save {
52     // FIXME
53     _dirty = false
54   }
55
56   /* Method definitions for AbstractTableModel
57    */
58   def getColumnCount = 2
59   def getRowCount    = _reports.size
60
61   override def getColumnName(column: Int) : String = {
62     column match {
63       case 0 => "Date"
64       case 1 => "# Tasks"
65     }
66   }
67
68   def getValueAt(row: Int, column: Int) : Object = {
69     column match {
70       case 0 => this(row).dateString
71       case 1 => this(row).size : Integer
72     }
73   }
74 }