]> gitweb @ CieloNegro.org - task-reporter.git/blob - src/main/scala/jp/ymir/taskReporter/core/ReportSet.scala
new tsv
[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     TSV.decode(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 /*
36     for (line <- src.getLines) {
37       if (!line.isEmpty) {
38         val task = new Task(line)
39         if (reports.isDefinedAt(task.date)) {
40           reports(task.date) += task
41         }
42         else {
43           val report = new Report(task.date)
44           report  += task
45           reports += (report.date -> report)
46         }
47       }
48     }
49  */
50
51     _file    = Some(file)
52     _reports = reports
53     _dirty   = false
54     fireTableDataChanged
55   }
56
57   def file  = _file
58   def dirty = _dirty
59
60   def apply(n: Int) : Report =
61     // THINKME: Any better way than this?
62     _reports.values.toIndexedSeq(n)
63
64   def save(file: File) {
65     _file = Some(file); save
66   }
67   def save {
68     // FIXME
69     _dirty = false
70   }
71
72   /* Method definitions for AbstractTableModel
73    */
74   def getColumnCount = 2
75   def getRowCount    = _reports.size
76
77   override def getColumnName(column: Int) : String = {
78     column match {
79       case 0 => "Date"
80       case 1 => "# Tasks"
81     }
82   }
83
84   def getValueAt(row: Int, column: Int) : Object = {
85     column match {
86       case 0 => this(row).dateString
87       case 1 => this(row).size : Integer
88     }
89   }
90 }