]> gitweb @ CieloNegro.org - task-reporter.git/blobdiff - src/main/scala/jp/ymir/taskReporter/core/ReportSet.scala
new tsv
[task-reporter.git] / src / main / scala / jp / ymir / taskReporter / core / ReportSet.scala
index 0bbd67276261c34bf6d645337ef1708c2ecc5987..66a5d6d08fdf90a79991b8a33adaff6ba2094eae 100644 (file)
@@ -1,38 +1,90 @@
 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]) {
-  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.foreach { file => load(file) }
+
+  def load(file: File) {
+    import Task._
+
+    var reports = _reports.empty
+    val src     = Source.fromFile(file, "UTF-8")
 
-  if (!_file.isEmpty) {
-    val src = Source.fromFile(_file.get, "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
+        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 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
+    }
+  }
 }