mirror of
https://github.com/ysoftdevs/odc-analyzer.git
synced 2026-03-18 23:34:34 +01:00
Initial commit
This commit is contained in:
52
app/models/Library.scala
Normal file
52
app/models/Library.scala
Normal file
@@ -0,0 +1,52 @@
|
||||
package models
|
||||
|
||||
import models.profile.MappedJdbcType
|
||||
import models.profile.api._
|
||||
import slick.lifted.Tag
|
||||
|
||||
abstract sealed class LibraryType(val name: String){
|
||||
override final def toString: String = name
|
||||
}
|
||||
object LibraryType{
|
||||
case object Maven extends LibraryType("maven")
|
||||
case object DotNet extends LibraryType("dotnet")
|
||||
val All = Set(Maven, DotNet)
|
||||
val ByName = All.map(x => x.name -> x).toMap
|
||||
implicit val libraryTypeMapper = MappedJdbcType.base[LibraryType, String](_.name, LibraryType.ByName)
|
||||
}
|
||||
|
||||
final case class Library(plainLibraryIdentifier: PlainLibraryIdentifier, classified: Boolean)
|
||||
|
||||
final case class PlainLibraryIdentifier(libraryType: LibraryType, libraryIdentifier: String){
|
||||
override def toString: String = s"$libraryType:$libraryIdentifier"
|
||||
}
|
||||
|
||||
object PlainLibraryIdentifier extends ((LibraryType, String) => PlainLibraryIdentifier) {
|
||||
def fromString(id: String) = {
|
||||
val (libraryType, libraryNameWithColon) = id.span(_ != ':')
|
||||
if(libraryNameWithColon(0) != ':'){
|
||||
sys.error("Expected colon")
|
||||
}
|
||||
val libraryName = libraryNameWithColon.drop(1)
|
||||
PlainLibraryIdentifier(
|
||||
libraryType = LibraryType.ByName(libraryType),
|
||||
libraryIdentifier = libraryName
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
class Libraries(tag: Tag) extends Table[(Int, Library)](tag, "library") {
|
||||
import LibraryType.libraryTypeMapper
|
||||
def id = column[Int]("id", O.PrimaryKey)
|
||||
def libraryType = column[LibraryType]("library_type")
|
||||
def libraryIdentifier = column[String]("identifier")
|
||||
def classified = column[Boolean]("classified")
|
||||
|
||||
def plainLibraryIdentifierUnmapped = (libraryType, libraryIdentifier)
|
||||
def plainLibraryIdentifier = plainLibraryIdentifierUnmapped <> (PlainLibraryIdentifier.tupled, PlainLibraryIdentifier.unapply)
|
||||
|
||||
def base = (plainLibraryIdentifier, classified) <> (Library.tupled, Library.unapply)
|
||||
def * = (id, base)
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user