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}
/**
* @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
+ )
+ }
+
}