/
AddDefinition.scala
74 lines (56 loc) · 2.23 KB
/
AddDefinition.scala
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
package com.collective.modelmatrix.cli.definition
import java.nio.file.Path
import java.time.Instant
import com.collective.modelmatrix.ModelMatrixAccess.ModelMatrixCatalogAccess
import com.collective.modelmatrix.cli.{ModelConfigurationParser, Script}
import com.typesafe.config.{ConfigFactory, ConfigResolveOptions}
import org.slf4j.LoggerFactory
import scalaz._
case class AddDefinition(
config: Path,
configPath: String,
name: Option[String],
comment: Option[String]
) extends Script with ModelMatrixCatalogAccess {
private val log = LoggerFactory.getLogger(classOf[AddDefinition])
private implicit val ec = Tag.unwrap(catalogExecutionContext)
private val parser = new ModelConfigurationParser(
ConfigFactory.parseFile(config.toFile).resolve(ConfigResolveOptions.defaults()),
configPath
)
import com.collective.modelmatrix.cli.ASCIITableFormat._
import com.collective.modelmatrix.cli.ASCIITableFormats._
def run(): Unit = {
log.info(s"Add Model Matrix definition. " +
s"Config: $configPath @ $config. " +
s"Name: $name. " +
s"Comment: $comment")
val features = parser.features()
val errors = features collect { case (f, Failure(e)) => (f, e) }
val success = features collect { case (_, Success(feature)) => feature }
if (errors.nonEmpty) {
Console.out.println(s"Incorrect configured model features: ${errors.size}")
errors.printASCIITable()
}
if (success.nonEmpty && errors.isEmpty) {
val addModelDefinition = modelDefinitions.add(
name = name,
source = definitionSource(),
createdBy = System.getProperty("user.name"),
createdAt = Instant.now(),
comment = comment
)
val insert = for {
id <- addModelDefinition
featureId <- modelDefinitionFeatures.addFeatures(id, success: _*)
} yield (id, featureId)
import driver.api._
val (modelDefinitionId, _) = blockOn(db.run(insert.transactionally))
Console.out.println(s"Successfully created new model definition")
Console.out.println(s"Matrix Model definition id: $modelDefinitionId")
}
}
private def definitionSource(): String = {
scala.io.Source.fromFile(config.toFile).getLines().mkString(System.lineSeparator())
}
}