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