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 match { case Some(file) => load(file) case None => } def load(file: File) { var reports = _reports.empty val src = Source.fromFile(file, "UTF-8") 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 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 } } }