Remodeling events
[aquarium] / src / main / scala / gr / grnet / aquarium / event / im / StdIMEvent.scala
index dab1058..27ad155 100644 (file)
@@ -35,7 +35,8 @@
 
 package gr.grnet.aquarium.event.im
 
-import gr.grnet.aquarium.event.{AquariumEventModel, AquariumEventSkeleton}
+import gr.grnet.aquarium.util.makeString
+import gr.grnet.aquarium.converter.{JsonTextFormat, StdConverters}
 
 
 /**
@@ -43,28 +44,48 @@ import gr.grnet.aquarium.event.{AquariumEventModel, AquariumEventSkeleton}
  * @author Christos KK Loverdos <loverdos@gmail.com>
  */
 
-class StdIMEvent(
-    val id: String, // The id at the sender side
-    val occurredMillis: Long, // When it occurred at the sender side
-    val receivedMillis: Long, // When it was received by Aquarium
-    val userID: String,
-    val clientID: String,
-    val isActive: Boolean,
-    val role: String,
-    val eventVersion: String,
-    val eventType: String,
-    val details: Map[String, String])
-extends AquariumEventModel with IMEventModel {
-  def withReceivedMillis(newReceivedMillis: Long) = new StdIMEvent(
-    id,
-    occurredMillis,
-    newReceivedMillis,
-    userID,
-    clientID,
-    isActive,
-    role,
-    eventVersion,
-    eventType,
-    details
-  )
+case class StdIMEvent(
+    id: String, // The id at the sender side
+    occurredMillis: Long, // When it occurred at the sender side
+    receivedMillis: Long, // When it was received by Aquarium
+    userID: String,
+    clientID: String,
+    isActive: Boolean,
+    role: String,
+    eventVersion: String,
+    eventType: String,
+    details: Map[String, String])
+extends IMEventModel {
+  def withReceivedMillis(newReceivedMillis: Long) =
+    this.copy(receivedMillis = newReceivedMillis)
+
+  def withDetails(newDetails: Map[String, String], newOccurredMillis: Long) =
+    this.copy(details = newDetails, occurredMillis = newOccurredMillis)
+}
+
+object StdIMEvent {
+  final def fromJsonString(json: String): StdIMEvent = {
+    StdConverters.AllConverters.convertEx[StdIMEvent](JsonTextFormat(json))
+  }
+
+  final def fromJsonBytes(jsonBytes: Array[Byte]): StdIMEvent = {
+    fromJsonString(makeString(jsonBytes))
+  }
+
+  final def fromOther(event: IMEventModel): StdIMEvent = {
+    if(event.isInstanceOf[StdIMEvent]) event.asInstanceOf[StdIMEvent]
+    else new StdIMEvent(
+      event.id,
+      event.occurredMillis,
+      event.receivedMillis,
+      event.userID,
+      event.clientID,
+      event.isActive,
+      event.role,
+      event.eventVersion,
+      event.eventType,
+      event.details
+    )
+  }
+
 }