All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.msgpack.template.DynamicTemplate.scala Maven / Gradle / Ivy

The newest version!
package org.msgpack.template

import org.msgpack.packer.Packer
import org.msgpack.unpacker.Unpacker
import java.util.Calendar
import org.msgpack.`type`.ValueType
import org.msgpack.MessageTypeException

/*
 * Template for Calendar.
 * This template convert Calendar to long which is millisec from epoch
 * User: takeshita
 * Date: 11/03/11
 * Time: 11:11
 */
class DynamicTemplate(registry : TemplateRegistry) extends AbstractTemplate[AnyRef]{


  def write(packer: Packer, v: AnyRef, required: Boolean) : Unit = {

    if(v == null){
      if(required){
        throw new MessageTypeException("Attempted to write null")
      }
      packer.writeNil()
    }else{
      val tmpl = getTemplate(v.getClass)

      tmpl.write(packer,v,required)
    }
  }

  def read(u: Unpacker, to: AnyRef, required: Boolean): AnyRef = {

    if(!required && u.trySkipNil){
      return null
    }else{
      if(to != null){
        val tmpl = getTemplate(to.getClass)
        tmpl.read(u,to,required)
      }else{
        val v = u.readValue()
        v.getType match{
          case ValueType.BOOLEAN => Boolean.box(v.asBooleanValue().getBoolean )
          case ValueType.INTEGER => Long.box(v.asIntegerValue().getLong())
          case ValueType.RAW => v.asRawValue().getString
          case ValueType.FLOAT => Double.box(v.asFloatValue().getDouble)
          case valueType => {
            throw new MessageTypeException("Not primitive type:%s".format(valueType))
          }
        }


      }
    }

  }

  def getTemplate(clazz : Class[_]) : Template[AnyRef] = {

    val tmpl = registry.lookup(clazz)
    if(tmpl == null){
      throw new MessageTypeException("Can't find for class:" + clazz)
    }
    if(classOf[DynamicTemplate].isAssignableFrom(tmpl.getClass)){
      throw new MessageTypeException("Can't find for class:" + clazz)
    }
    tmpl.asInstanceOf[Template[AnyRef]]
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy