X-Git-Url: http://git.cielonegro.org/gitweb.cgi?a=blobdiff_plain;f=src%2Fmain%2Fscala%2Fjp%2Fymir%2FtaskReporter%2Fcore%2FReportSet.scala;h=b27af43a376f14dfaf528e6891af6785b99763b6;hb=100ec0110d33876011bbd191da7e614445b627a5;hp=f4392b76e41d7c3993d0e91ef664b1b073fbe4b9;hpb=cac69ad60a6bf6df341e65e3309b7700e14741df;p=task-reporter.git diff --git a/src/main/scala/jp/ymir/taskReporter/core/ReportSet.scala b/src/main/scala/jp/ymir/taskReporter/core/ReportSet.scala index f4392b7..b27af43 100644 --- a/src/main/scala/jp/ymir/taskReporter/core/ReportSet.scala +++ b/src/main/scala/jp/ymir/taskReporter/core/ReportSet.scala @@ -1,14 +1,76 @@ package jp.ymir.taskReporter.core -import java.io._; +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]) { - private var _dirty : Boolean = false +class ReportSet(private var _file: Option[File]) + extends AbstractTableModel { - def file: Option[File] = { - return _file + 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 dirty: Boolean = { - return _dirty + 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 + } } }