
code.snippet.DataImport.scala Maven / Gradle / Ivy
The newest version!
package code.snippet
import code.model.{Job, Project, Template}
import com.homedepot.bigbricks.data.ScriptDBImport.ScriptDBJob
import com.homedepot.bigbricks.data.{BigBricksImport, ScriptDBImport}
import net.liftweb.common.{Box, Empty, Full}
import net.liftweb.http._
import net.liftweb.json.Serialization._
import net.liftweb.json._
import net.liftweb.mapper.By
import net.liftweb.util.Helpers._
/**
* A snippet that binds behavior, functions,
* to HTML elements
*/
object DataImport {
implicit val formats = DefaultFormats
def render = {
// define some variables to put our values into
var fileHolder: Box[FileParamHolder] = Empty
var submitType = ""
// process the form
def process() {
// otherwise give the user feedback and
// redirect to the home page
val message =
fileHolder.map(f => f.file) match {
case Full(x) => {
val content = new String(x, "UTF-8")
submitType match {
case "project" => {
val projects = ScriptDBImport.extractProjects(content)
projects.foreach(f =>
Project
.create
.projectName(f.projectName)
.projectLocation(f.projectLocation)
.gitBranch("")
.jarName(f.jarName)
.save
)
s"added ${projects.size} projects"
}
case "template" => {
val templates = ScriptDBImport.extractTemplates(content)
templates.foreach(f =>
Template
.create
.templateName(f.templateName)
.template(f.template)
.save
)
s"added ${templates.size} templates"
}
case "job" => {
val jobs = ScriptDBImport.extractJobs(content)
val result = getValidJobs(jobs)
result._2.foreach(f => createJob(f))
s"added ${result._2.size} jobs, skipped ${result._1}"
}
case "bigbricks" => {
BigBricksImport.importBigBricks(content)
s"uploaded com.recipegrace.bigbricks data"
}
case _ => {
"Invalid type"
}
}
}
case _ => {
"Looks like file is invalid"
}
}
S.notice(message)
S.redirectTo("/")
}
// associate each of the form elements
// with a function... behavior to perform when the
// for element is submitted
("name=file_upload" #> SHtml.fileUpload(ul => fileHolder = Full(ul))) & // set the name
"name=contentType" #> SHtml.onSubmit(submitType = _) &
"type=submit" #> SHtml.onSubmitUnit(process)
}
def createJob(job: ScriptDBJob) = {
val templates = Template.findAll(By(Template.templateName, job.templateName))
val projects = Project.findAll(By(Project.projectName, job.projectName))
Job
.create
.project(projects.head)
.template(templates.head)
.mainClassName(job.mainClassName)
.arguments(createArguments(job))
.save
}
def createArguments(job: ScriptDBJob): String = {
val arguments: List[Argument] = (job.vmArguments.map(f => Argument(f._1, f._2, "vm")) ++
job.programArguments.map(f => Argument(f._1, f._2, "pm"))).toList
write(arguments)
}
def getValidJobs(jobs: List[ScriptDBJob]) = {
val oKJobs =
jobs.filter(job => {
val templates = Template.findAll(By(Template.templateName, job.templateName))
val projects = Project.findAll(By(Project.projectName, job.projectName))
projects.size == 1 && templates.size == 1
})
(jobs.size - oKJobs.size, oKJobs)
}
case class Argument(name: String, value: String, valType: String)
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy