package jp.ymir.taskReporter.core
import java.io._
import java.util.Calendar
+import javax.swing.table.AbstractTableModel
import jp.ymir.taskReporter.core._
import scala.collection.immutable._
import scala.io._
-class ReportSet(private var _file: Option[File]) {
- private var _dirty = false
+class ReportSet(private var _file: Option[File])
+ extends AbstractTableModel {
+
private var _reports : SortedMap[Calendar, Report] = TreeMap()
+ private var _dirty = false
+
+ _file match {
+ case Some(file) => load(file)
+ case None =>
+ }
+
+ def load(file: File) {
+ var reports = _reports.empty
+ val src = Source.fromFile(file, "UTF-8")
- if (!_file.isEmpty) {
- val src = Source.fromFile(_file.get, "UTF-8")
for (line <- src.getLines) {
if (!line.isEmpty) {
val task = new Task(line)
- if (_reports.isDefinedAt(task.date)) {
- _reports(task.date) += task
+ if (reports.isDefinedAt(task.date)) {
+ reports(task.date) += task
}
else {
val report = new Report(task.date)
- report += task
- _reports = _reports + (report.date -> report)
+ report += task
+ reports += (report.date -> report)
}
}
}
- }
- def file = _file
- def file_=(f: Option[File]) { _file = f }
+ _file = Some(file)
+ _reports = reports
+ _dirty = false
+ fireTableDataChanged
+ }
+ def file = _file
def dirty = _dirty
+ def save(file: File) {
+ _file = Some(file); save
+ }
def save {
// FIXME
_dirty = false
}
+
+ /* Method definitions for AbstractTableModel
+ */
+ def getColumnCount = 2
+ def getRowCount = _reports.size
+
+ override def getColumnName(column: Int) : String = {
+ column match {
+ case 0 => "Date"
+ case 1 => "# Tasks"
+ }
+ }
+
+ def getValueAt(row: Int, column: Int) : Object = {
+ // THINKME: Any better way than this?
+ val report = _reports.values.toIndexedSeq(row)
+ column match {
+ case 0 => report.dateString
+ case 1 => report.size : Integer
+ }
+ }
}