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

org.beangle.webmvc.entity.helper.PopulateHelper.scala Maven / Gradle / Ivy

The newest version!
package org.beangle.webmvc.entity.helper

import org.beangle.commons.lang.Strings
import org.beangle.data.model.Entity
import org.beangle.data.model.meta.{ EntityMetadata, EntityType }
import org.beangle.data.model.util.ConvertPopulator
import org.beangle.webmvc.api.context.Params
import org.beangle.webmvc.context.ContainerHelper

object PopulateHelper {

  var metadata: EntityMetadata = ContainerHelper.get.getBean(classOf[EntityMetadata]).head

  var populator = new ConvertPopulator

  final def getType(clazz: Class[_]): EntityType = {
    metadata.getType(clazz).getOrElse(new EntityType(clazz, clazz.getName, "id"))
  }
  /**
   * 将request中的参数设置到clazz对应的bean。
   */
  def populate[T <: Entity[_]](clazz: Class[T], name: String): T = {
    val etype = getType(clazz)
    populate(etype.newInstance().asInstanceOf[T], etype.entityName, name).asInstanceOf[T]
  }

  def populate[T <: Entity[_]](clazz: Class[T]): T = {
    val etype = getType(clazz)
    populate(etype.newInstance().asInstanceOf[T], etype.entityName, shortName(etype.entityName)).asInstanceOf[T]
  }

  def populate(entityName: String): Object = {
    val etype = getType(Class.forName(entityName))
    populate(etype.newInstance().asInstanceOf[Entity[_]], etype.entityName, shortName(etype.entityName))
  }

  def populate(entityName: String, name: String): Object = {
    val etype = getType(Class.forName(entityName))
    var params = Params.sub(name)
    val entity = etype.newInstance().asInstanceOf[Entity[_]]
    populator.populate(entity, etype, params)
    entity
  }

  def populate[T <: Entity[_]](obj: T, entityName: String, name: String): T = {
    var params = Params.sub(name)
    populator.populate(obj, getType(obj.getClass), params)
    obj
  }

  def populate[T <: Entity[_]](obj: T, params: collection.Map[String, Any]): T = {
    populator.populate(obj, getType(obj.getClass), params)
    obj
  }

  def populate[T <: Entity[_]](obj: T, entityName: String, params: collection.Map[String, Any]): T = {
    val etype = metadata.getType(entityName).get
    populator.populate(obj, etype, params)
    obj
  }

  private def shortName(entityName: String): String = Strings.uncapitalize(Strings.substringAfterLast(entityName, "."))
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy