package jp.ymir.taskReporter.core import java.io._ import java.text.SimpleDateFormat 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]) extends AbstractTableModel { private var _reports : SortedMap[Calendar, Report] = TreeMap() private var _dirty = false _file.foreach { file => load(file) } def load(file: File) { import Task._ var reports = _reports.empty val src = Source.fromFile(file, "UTF-8") TSV.decode(src.mkString).foreach { task => if (reports.isDefinedAt(task.date)) { reports(task.date) += task } else { val report = new Report(task.date) report += task reports += (report.date -> report) } } /* for (line <- src.getLines) { if (!line.isEmpty) { val task = new Task(line) if (reports.isDefinedAt(task.date)) { reports(task.date) += task } else { val report = new Report(task.date) report += task reports += (report.date -> report) } } } */ _file = Some(file) _reports = reports _dirty = false fireTableDataChanged } def file = _file def dirty = _dirty def apply(n: Int) : Report = // THINKME: Any better way than this? _reports.values.toIndexedSeq(n) 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 = { column match { case 0 => this(row).dateString case 1 => this(row).size : Integer } } }