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.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2
7461111ce9ed Spss variable, value and reader wrapper.
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
     1
package net.tz.spss
7461111ce9ed Spss variable, value and reader wrapper.
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
     2
7461111ce9ed Spss variable, value and reader wrapper.
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
     3
import com.bedatadriven.spss.SpssDataFileReader
7461111ce9ed Spss variable, value and reader wrapper.
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
     4
7461111ce9ed Spss variable, value and reader wrapper.
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
     5
sealed trait SpssValue
7461111ce9ed Spss variable, value and reader wrapper.
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
     6
7461111ce9ed Spss variable, value and reader wrapper.
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
     7
sealed trait Missing extends SpssValue
7461111ce9ed Spss variable, value and reader wrapper.
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
     8
7461111ce9ed Spss variable, value and reader wrapper.
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
     9
abstract class Value[T] extends SpssValue {
7461111ce9ed Spss variable, value and reader wrapper.
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    10
  def v: T
7461111ce9ed Spss variable, value and reader wrapper.
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    11
}
7461111ce9ed Spss variable, value and reader wrapper.
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    12
7461111ce9ed Spss variable, value and reader wrapper.
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    13
abstract class MissingValue[T] extends Value[T]
7461111ce9ed Spss variable, value and reader wrapper.
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    14
7461111ce9ed Spss variable, value and reader wrapper.
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    15
case class StringValue(v: String) extends Value[String]
7461111ce9ed Spss variable, value and reader wrapper.
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    16
case class DoubleValue(v: Double) extends Value[Double]
7461111ce9ed Spss variable, value and reader wrapper.
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    17
case object SystemMissing extends Missing
7461111ce9ed Spss variable, value and reader wrapper.
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    18
// ??? case class MissingString(v: String) extends MissingValue[String]
7461111ce9ed Spss variable, value and reader wrapper.
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    19
case class MissingDouble(v: Double) extends MissingValue[Double]
7461111ce9ed Spss variable, value and reader wrapper.
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    20
7461111ce9ed Spss variable, value and reader wrapper.
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    21
object SpssValue {
7461111ce9ed Spss variable, value and reader wrapper.
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    22
7461111ce9ed Spss variable, value and reader wrapper.
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    23
  def apply(r: SpssDataFileReader, variable: SpssVariable): SpssValue = {
7461111ce9ed Spss variable, value and reader wrapper.
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    24
    val i = variable.index
7461111ce9ed Spss variable, value and reader wrapper.
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    25
    if (r.isSystemMissing(i))
7461111ce9ed Spss variable, value and reader wrapper.
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    26
      SystemMissing
7461111ce9ed Spss variable, value and reader wrapper.
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    27
    else
7461111ce9ed Spss variable, value and reader wrapper.
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    28
      Option(r.getDoubleValue(i)) map(x =>
7461111ce9ed Spss variable, value and reader wrapper.
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    29
        if (r.isValueMissing(i, x)) MissingDouble(x) else DoubleValue(x)
7461111ce9ed Spss variable, value and reader wrapper.
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    30
        ) orElse (Option(r.getStringValue(i)) map StringValue
7461111ce9ed Spss variable, value and reader wrapper.
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    31
        ) getOrElse SystemMissing
7461111ce9ed Spss variable, value and reader wrapper.
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    32
  }
7461111ce9ed Spss variable, value and reader wrapper.
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    33
}