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
}
}