blob: b28242a09c2cfaecc51b72a4ba18be7bf164be28 [file] [log] [blame]
/*
* Copyright 2019 WeBank
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.webank.wedatasphere.linkis.resourcemanager.event.notify
import com.webank.wedatasphere.linkis.common.ServiceInstance
import com.webank.wedatasphere.linkis.resourcemanager.domain._
import com.webank.wedatasphere.linkis.resourcemanager.event.EventScope
import org.json4s.JsonAST.JObject
import org.json4s.JsonDSL._
import org.json4s.{CustomSerializer, DefaultFormats, Extraction}
/**
* Created by shanhuang on 9/11/18.
*/
object NotifyRMEventSerializer extends CustomSerializer[NotifyRMEvent](implicit formats => ( {
case JObject(List(("DefaultNotifyRMEvent", JObject(List(("user", user), ("moduleName", moduleName), ("eventScope", eventScope)))))) =>
new DefaultNotifyRMEvent(user.extract[String], moduleName.extract[String], EventScope.withName(eventScope.extract[String]))
case JObject(List(("ModuleRegisterEvent", JObject(List(("eventScope", eventScope), ("moduleInfo", moduleInfo)))))) =>
implicit val formats = DefaultFormats + ModuleInfoSerializer
new ModuleRegisterEvent(EventScope.withName(eventScope.extract[String]), moduleInfo.extract[ModuleInfo])
case JObject(List(("ModuleUnregisterEvent", JObject(List(("eventScope", eventScope), ("moduleInstance", moduleInstance)))))) =>
implicit val formats = DefaultFormats + ModuleInstanceSerializer
new ModuleUnregisterEvent(EventScope.withName(eventScope.extract[String]), moduleInstance.extract[ServiceInstance])
case JObject(List(("ModuleLock", JObject(List(("eventScope", eventScope), ("moduleInstance", moduleInstance)))))) =>
implicit val formats = DefaultFormats + ModuleInstanceSerializer
new ModuleLock(EventScope.withName(eventScope.extract[String]), moduleInstance.extract[ServiceInstance])
case JObject(List(("UserLock", JObject(List(("eventScope", eventScope), ("user", user), ("moduleInstance", moduleInstance)))))) =>
implicit val formats = DefaultFormats + ModuleInstanceSerializer
new UserLock(EventScope.withName(eventScope.extract[String]), user.extract[String], moduleInstance.extract[ServiceInstance])
case JObject(List(("UserPreUsedEvent", JObject(List(("eventScope", eventScope), ("user", user), ("creator", creator), ("userPreUsedResource", userPreUsedResource)))))) =>
implicit val formats = DefaultFormats + UserResourceInfoSerializer
new UserPreUsedEvent(EventScope.withName(eventScope.extract[String]), user.extract[String], creator.extract[String], userPreUsedResource.extract[UserResourceInfo].asInstanceOf[UserPreUsedResource])
case JObject(List(("UserUsedEvent", JObject(List(("eventScope", eventScope), ("user", user), ("userUsedResource", userUsedResource)))))) =>
implicit val formats = DefaultFormats + UserResourceInfoSerializer
new UserUsedEvent(EventScope.withName(eventScope.extract[String]), user.extract[String], userUsedResource.extract[UserResourceInfo].asInstanceOf[UserUsedResource])
case JObject(List(("UserReleasedEvent", JObject(List(("eventScope", eventScope), ("user", user), ("userReleasedResource", userReleasedResource)))))) =>
implicit val formats = DefaultFormats + UserResourceInfoSerializer
new UserReleasedEvent(EventScope.withName(eventScope.extract[String]), user.extract[String], userReleasedResource.extract[UserResourceInfo].asInstanceOf[UserReleasedResource])
case JObject(List(("ClearPrdUsedEvent", JObject(List(("eventScope", eventScope), ("user", user), ("userPreUsedResource", userPreUsedResource)))))) =>
implicit val formats = DefaultFormats + UserResourceInfoSerializer
new ClearPrdUsedEvent(EventScope.withName(eventScope.extract[String]), user.extract[String], userPreUsedResource.extract[UserResourceInfo].asInstanceOf[UserPreUsedResource])
case JObject(List(("ClearUsedEvent", JObject(List(("eventScope", eventScope), ("user", user), ("userUsedResource", userUsedResource)))))) =>
implicit val formats = DefaultFormats + UserResourceInfoSerializer
new ClearUsedEvent(EventScope.withName(eventScope.extract[String]), user.extract[String], userUsedResource.extract[UserResourceInfo].asInstanceOf[UserUsedResource])
case JObject(List(("WaitUsedEvent", JObject(List(("clearEvent", clearEvent), ("timeOut", timeOut)))))) =>
new WaitUsedEvent(clearEvent.extract[NotifyRMEvent].asInstanceOf[ClearEvent], timeOut.extract[Long])
case JObject(List(("WaitReleasedEvent", JObject(List(("clearEvent", clearEvent), ("timeOut", timeOut)))))) =>
new WaitReleasedEvent(clearEvent.extract[NotifyRMEvent].asInstanceOf[ClearEvent], timeOut.extract[Long])
}, {
case d: DefaultNotifyRMEvent =>
("DefaultNotifyRMEvent", ("user", d.user) ~ ("moduleName", d.moduleName) ~ ("eventScope", d.eventScope.toString))
case d: ModuleRegisterEvent =>
implicit val formats = DefaultFormats + ModuleInfoSerializer
("ModuleRegisterEvent", ("eventScope", d.eventScope.toString) ~ ("moduleInfo", Extraction.decompose(d.moduleInfo)))
case d: ModuleUnregisterEvent =>
implicit val formats = DefaultFormats + ModuleInstanceSerializer
("ModuleUnregisterEvent", ("eventScope", d.eventScope.toString) ~ ("moduleInstance", Extraction.decompose(d.moduleInstance)))
case d: ModuleLock =>
implicit val formats = DefaultFormats + ModuleInstanceSerializer
("ModuleLock", ("eventScope", d.eventScope.toString) ~ ("moduleInstance", Extraction.decompose(d.moduleInstance)))
case d: UserLock =>
implicit val formats = DefaultFormats + ModuleInstanceSerializer
("UserLock", ("eventScope", d.eventScope.toString) ~ ("user", d.user) ~ ("moduleInstance", Extraction.decompose(d.moduleInstance)))
case d: UserPreUsedEvent =>
implicit val formats = DefaultFormats + UserResourceInfoSerializer
("UserPreUsedEvent", ("eventScope", d.eventScope.toString) ~ ("user", d.user) ~ ("creator", d.creator) ~ ("userPreUsedResource", Extraction.decompose(d.userPreUsedResource)))
case d: UserUsedEvent =>
implicit val formats = DefaultFormats + UserResourceInfoSerializer
("UserUsedEvent", ("eventScope", d.eventScope.toString) ~ ("user", d.user) ~ ("userUsedResource", Extraction.decompose(d.userUsedResource)))
case d: UserReleasedEvent =>
implicit val formats = DefaultFormats + UserResourceInfoSerializer
("UserReleasedEvent", ("eventScope", d.eventScope.toString) ~ ("user", d.user) ~ ("userReleasedResource", Extraction.decompose(d.userReleasedResource)))
case d: ClearPrdUsedEvent =>
implicit val formats = DefaultFormats + UserResourceInfoSerializer
("ClearPrdUsedEvent", ("eventScope", d.eventScope.toString) ~ ("user", d.user) ~ ("userPreUsedResource", Extraction.decompose(d.userPreUsedResource)))
case d: ClearUsedEvent =>
implicit val formats = DefaultFormats + UserResourceInfoSerializer
("ClearUsedEvent", ("eventScope", d.eventScope.toString) ~ ("user", d.user) ~ ("userUsedResource", Extraction.decompose(d.userUsedResource)))
case d: WaitUsedEvent =>
("WaitUsedEvent", ("clearEvent", Extraction.decompose(d.clearEvent)) ~ ("timeOut", d.timeOut))
case d: WaitReleasedEvent =>
("WaitReleasedEvent", ("clearEvent", Extraction.decompose(d.clearEvent)) ~ ("timeOut", d.timeOut))
})
)