X-Git-Url: http://git.cielonegro.org/gitweb.cgi?p=task-reporter.git;a=blobdiff_plain;f=src%2Fmain%2Fscala%2Fjp%2Fymir%2FtaskReporter%2Fcore%2FTask.scala;h=53e813d7b0c5079bed38816c010f5cc9be1c02c5;hp=7b38e0a8013f8ddbecf77d0b1e64c87642d2b7a6;hb=cb226bf20b21a6ebc1213152f96e7bcd465cda9d;hpb=f6a51dbcc510104994344140fccdeaab459eb570 diff --git a/src/main/scala/jp/ymir/taskReporter/core/Task.scala b/src/main/scala/jp/ymir/taskReporter/core/Task.scala index 7b38e0a..53e813d 100644 --- a/src/main/scala/jp/ymir/taskReporter/core/Task.scala +++ b/src/main/scala/jp/ymir/taskReporter/core/Task.scala @@ -3,6 +3,63 @@ import java.util.Calendar import java.util.GregorianCalendar import scala.util.matching.Regex +case class Task( + date: Calendar, + ticketID: Option[Int], + title: String, + expectedCompletionDate: Calendar, + deadline: Option[Calendar], + status: Task.Status, + description: Option[String] +) + +object Task { + import TSV._ + + sealed abstract class Status + object Status { + case object DoingFine extends Status + case object Lagging extends Status + case object DeadlineChanged extends Status + case object Completed extends Status + } + + implicit def CalendarFromField = new FromField[Calendar] { + val pattern = """^(\d{4})/(\d{2})/(\d{2})$""".r + + def parseField(f: Field): Calendar = { + f match { + case pattern(year, month, day) => + new GregorianCalendar(year.toInt, month.toInt, day.toInt) + } + } + } + + implicit def StatusFromField = new FromField[Status] { + def parseField(f: Field): Status = f match { + case "順調" => Status.DoingFine + case "遅延" => Status.Lagging + case "期限変更" => Status.DeadlineChanged + case "完了" => Status.Completed + } + } + + implicit def TaskFromRecord = new FromRecord[Task] { + def parseRecord(r: Record): Task = { + return Task( + date = parseField[Calendar](r('報告日)), + ticketID = parseField[Option[Int]](r('チケットID)), + title = parseField[String](r('作業名)), + expectedCompletionDate = parseField[Calendar](r('作業完了予定年月日)), + deadline = parseField[Option[Calendar]](r('タスク期限)), + status = parseField[Status](r('状態)), + description = parseField[Option[String]](r('説明)) + ) + } + } +} + +/* class Task(tsvLine: String) { sealed abstract class Status object Status { @@ -88,3 +145,4 @@ class Task(tsvLine: String) { } } } + */