37ef758f2e0c265954f27cd7352627a0afe581d4
[aquarium] / model / src / main / scala / gr / grnet / aquarium / model / ResourceType.scala
1 package gr.grnet.aquarium.model
2
3 import javax.persistence._
4 import java.util.{HashSet, Set}
5
6 @javax.persistence.Entity
7 @Table(name = "RESOURCE_TYPE")
8 @NamedQueries(Array(
9   new NamedQuery(name = "restypeFromType",
10                  query = "select rt from ResourceType rt where rt.resType = :type")
11 ))
12 class ResourceType extends Id {
13
14   @Column(name = "TYPE")
15   var resType : Int = 0
16
17   @Column(name = "NAME")
18   var name : String = _
19
20   @OneToMany(mappedBy = "restype",  targetEntity = classOf[ConsumableResource],
21              cascade = Array(CascadeType.ALL))
22   var consResources : Set[ConsumableResource] = new HashSet[ConsumableResource]()
23
24   @ManyToMany(targetEntity = classOf[ServiceTemplate],
25               mappedBy = "resTypes",
26               cascade= Array(CascadeType.ALL))
27   var srvTemplates : Set[ServiceTemplate] = new HashSet[ServiceTemplate]()
28 }
29
30 object ResourceType {
31   def CPU = getResourceByType(0x1, "CPU")
32   def RAM = getResourceByType(0x2, "RAM")
33   def DISKSPACE = getResourceByType(0x4, "DISKSPACE")
34   def NETBANDWIDTH = getResourceByType(0x8, "NETBANDWIDTH")
35   def LICENSE = getResourceByType(0x10, "LICENSE")
36
37   private def getResourceByType(restype : Int, name : String) : ResourceType = {
38     val res = DB.findAll[ResourceType]("restypeFromType",
39                                        "type" -> restype).headOption
40     if (!res.isEmpty)
41       return res.get
42
43     val rt = new ResourceType
44     rt.resType = restype
45     rt.name = name
46
47     DB.persist(rt)
48     rt
49   }
50 }