shared/net/tz/spss/SpssValue.scala
author Tomas Zeman <tzeman@volny.cz>
Thu, 14 Mar 2019 15:06:13 +0100
changeset 2 7461111ce9ed
child 5 44aad285dc66
permissions -rw-r--r--
Spss variable, value and reader wrapper.

package net.tz.spss

import com.bedatadriven.spss.SpssDataFileReader

sealed trait SpssValue

sealed trait Missing extends SpssValue

abstract class Value[T] extends SpssValue {
  def v: T
}

abstract class MissingValue[T] extends Value[T]

case class StringValue(v: String) extends Value[String]
case class DoubleValue(v: Double) extends Value[Double]
case object SystemMissing extends Missing
// ??? case class MissingString(v: String) extends MissingValue[String]
case class MissingDouble(v: Double) extends MissingValue[Double]

object SpssValue {

  def apply(r: SpssDataFileReader, variable: SpssVariable): SpssValue = {
    val i = variable.index
    if (r.isSystemMissing(i))
      SystemMissing
    else
      Option(r.getDoubleValue(i)) map(x =>
        if (r.isValueMissing(i, x)) MissingDouble(x) else DoubleValue(x)
        ) orElse (Option(r.getStringValue(i)) map StringValue
        ) getOrElse SystemMissing
  }
}