shared/net/tz/spss/SpssValue.scala
changeset 2 7461111ce9ed
child 5 44aad285dc66
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shared/net/tz/spss/SpssValue.scala	Thu Mar 14 15:06:13 2019 +0100
@@ -0,0 +1,33 @@
+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
+  }
+}