X-Git-Url: http://git.cielonegro.org/gitweb.cgi?p=task-reporter.git;a=blobdiff_plain;f=src%2Fmain%2Fscala%2Fjp%2Fymir%2FtaskReporter%2Fcore%2FReportSet.scala;fp=src%2Fmain%2Fscala%2Fjp%2Fymir%2FtaskReporter%2Fcore%2FReportSet.scala;h=f90071dd1c65a74b584eda74969aa176bac8724e;hp=0bbd67276261c34bf6d645337ef1708c2ecc5987;hb=79bcb816daaaa042ec7f1855c8307d9143f61956;hpb=520a3f6ce5c36e933bfe6dd3977fa157aa506d05 diff --git a/src/main/scala/jp/ymir/taskReporter/core/ReportSet.scala b/src/main/scala/jp/ymir/taskReporter/core/ReportSet.scala index 0bbd672..f90071d 100644 --- a/src/main/scala/jp/ymir/taskReporter/core/ReportSet.scala +++ b/src/main/scala/jp/ymir/taskReporter/core/ReportSet.scala @@ -1,38 +1,75 @@ 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 + } + } }