shared/net/tz/spss/SpssValue.scala
changeset 2 7461111ce9ed
child 5 44aad285dc66
equal deleted inserted replaced
1:3a70d40db0fd 2:7461111ce9ed
       
     1 package net.tz.spss
       
     2 
       
     3 import com.bedatadriven.spss.SpssDataFileReader
       
     4 
       
     5 sealed trait SpssValue
       
     6 
       
     7 sealed trait Missing extends SpssValue
       
     8 
       
     9 abstract class Value[T] extends SpssValue {
       
    10   def v: T
       
    11 }
       
    12 
       
    13 abstract class MissingValue[T] extends Value[T]
       
    14 
       
    15 case class StringValue(v: String) extends Value[String]
       
    16 case class DoubleValue(v: Double) extends Value[Double]
       
    17 case object SystemMissing extends Missing
       
    18 // ??? case class MissingString(v: String) extends MissingValue[String]
       
    19 case class MissingDouble(v: Double) extends MissingValue[Double]
       
    20 
       
    21 object SpssValue {
       
    22 
       
    23   def apply(r: SpssDataFileReader, variable: SpssVariable): SpssValue = {
       
    24     val i = variable.index
       
    25     if (r.isSystemMissing(i))
       
    26       SystemMissing
       
    27     else
       
    28       Option(r.getDoubleValue(i)) map(x =>
       
    29         if (r.isValueMissing(i, x)) MissingDouble(x) else DoubleValue(x)
       
    30         ) orElse (Option(r.getStringValue(i)) map StringValue
       
    31         ) getOrElse SystemMissing
       
    32   }
       
    33 }