Implement Continuous behavior with the new scheme
[aquarium] / src / main / scala / gr / grnet / aquarium / charging / state / WorkingResourcesChargingState.scala
1 /*
2  * Copyright 2011-2012 GRNET S.A. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or
5  * without modification, are permitted provided that the following
6  * conditions are met:
7  *
8  *   1. Redistributions of source code must retain the above
9  *      copyright notice, this list of conditions and the following
10  *      disclaimer.
11  *
12  *   2. Redistributions in binary form must reproduce the above
13  *      copyright notice, this list of conditions and the following
14  *      disclaimer in the documentation and/or other materials
15  *      provided with the distribution.
16  *
17  * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
18  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
20  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
21  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
24  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
25  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
27  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28  * POSSIBILITY OF SUCH DAMAGE.
29  *
30  * The views and conclusions contained in the software and
31  * documentation are those of the authors and should not be
32  * interpreted as representing official policies, either expressed
33  * or implied, of GRNET S.A.
34  */
35
36 package gr.grnet.aquarium.charging.state
37
38 import scala.collection.mutable
39 import gr.grnet.aquarium.event.model.resource.ResourceEventModel
40
41 /**
42  * Working (mutable state) for resource instances of the same resource type.
43  *
44  * @param details Generic state related to the type of resource as a whole
45  * @param stateOfResourceInstance A map from `instanceID` to
46  *                                [[gr.grnet.aquarium.charging.state.WorkingResourceInstanceChargingState]].
47  *
48  * @author Christos KK Loverdos <loverdos@gmail.com>
49  */
50 final class WorkingResourcesChargingState(
51     val details: mutable.Map[String /* any string */, Any],
52     val stateOfResourceInstance: mutable.Map[String /* InstanceID */, WorkingResourceInstanceChargingState]
53 ) {
54
55   def immutableDetails = Map(this.details.toSeq: _*)
56
57   def immutableStateOfResourceInstance = Map((
58       for((k, v) ← this.stateOfResourceInstance)
59         yield (k, v.toResourceInstanceChargingState)
60     ).toSeq:_*)
61
62   def toResourcesChargingState = {
63     ResourcesChargingState(
64       details = immutableDetails,
65       stateOfResourceInstance = immutableStateOfResourceInstance
66     )
67   }
68
69   /**
70    * Find the most recent (latest) holder of a resource event.
71    */
72 //  def findResourceInstanceOfLatestEvent: Option[WorkingResourceInstanceChargingState] = {
73 //    stateOfResourceInstance.values.toArray.sortWith { (a, b) ⇒
74 //      (a.previousEvents, b.previousEvents
75 //    }
76 //  }
77 }