shared/net/tz/spss/SpssVariable.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 net.tz.spss.SpssVariable.DoubleRange
import com.bedatadriven.spss.{SpssVariable => JVar}

import scala.collection.JavaConverters._
import scala.language.postfixOps

case class SpssVariable(name: String, shortName: String, isNumeric: Boolean,
  index: Int, label: String,
  missingRange: Option[DoubleRange] = None,
  missing: List[Double] = Nil,
  missingStrings: List[String] = Nil,
  labels: Map[Double, String] = Map())

object SpssVariable {
  type DoubleRange = (Double, Double)

  def apply(v: JVar): SpssVariable = SpssVariable(
    name = v.getVariableName,
    shortName = v.getShortName,
    isNumeric = v.isNumeric,
    index = v.getIndex,
    label = v.getVariableLabel,
    missingRange = if (v.isHasMissingRange)
      Some((v.getMissingMin.doubleValue(), v.getMissingMax.doubleValue()))
    else None,
    missing = v.getMissing.asScala.map(_.doubleValue()).toList,
    missingStrings = v.getMissingStrings.asScala.toList,
    labels = v.getValueLabels.asScala.map { case (k,x) =>
      (k.doubleValue(), x) } toMap)
}