mirror of
https://github.com/OpenBankProject/OBP-API.git
synced 2026-02-06 17:37:00 +00:00
Refactored RemotedataActors, improved ActorSystem configuration
This commit is contained in:
parent
1de412a81d
commit
e164dea18e
@ -1,68 +0,0 @@
|
||||
akka {
|
||||
|
||||
extensions = ["com.romix.akka.serialization.kryo.KryoSerializationExtension$"]
|
||||
|
||||
actor {
|
||||
provider = "akka.remote.RemoteActorRefProvider"
|
||||
|
||||
kryo {
|
||||
type = "graph"
|
||||
idstrategy = "default"
|
||||
buffer-size = 65536
|
||||
max-buffer-size = -1
|
||||
use-manifests = false
|
||||
use-unsafe = true
|
||||
post-serialization-transformations = "off"
|
||||
#post-serialization-transformations = "lz4,aes"
|
||||
#encryption {
|
||||
# aes {
|
||||
# mode = "AES/CBC/PKCS5Padding"
|
||||
# key = j68KkRjq21ykRGAQ
|
||||
# IV-length = 16
|
||||
# }
|
||||
#}
|
||||
implicit-registration-logging = true
|
||||
kryo-trace = false
|
||||
resolve-subclasses = true
|
||||
}
|
||||
|
||||
serializers {
|
||||
#java = "akka.serialization.JavaSerializer"
|
||||
kryo = "com.romix.akka.serialization.kryo.KryoSerializer"
|
||||
}
|
||||
|
||||
serialization-bindings {
|
||||
"net.liftweb.common.Full" = kryo,
|
||||
"net.liftweb.common.Empty" = kryo,
|
||||
"net.liftweb.common.Box" = kryo,
|
||||
"net.liftweb.common.ParamFailure" = kryo,
|
||||
"code.api.APIFailure" = kryo,
|
||||
"code.views.RemoteViewCaseClasses" = kryo,
|
||||
"code.model.BankAccount" = kryo,
|
||||
"code.model.View" = kryo,
|
||||
"code.model.dataAccess.ViewImpl" = kryo,
|
||||
"code.model.User" = kryo,
|
||||
"code.model.ViewId" = kryo,
|
||||
"code.model.ViewUID" = kryo,
|
||||
//"code.model.Permission" = kryo,
|
||||
"scala.Unit" = kryo,
|
||||
"scala.Boolean" = kryo,
|
||||
"java.io.Serializable" = kryo,
|
||||
"scala.collection.immutable.List" = kryo,
|
||||
"akka.actor.ActorSelectionMessage" = kryo
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
remote {
|
||||
netty {
|
||||
hostname = "127.0.0.1"
|
||||
tcp {
|
||||
send-buffer-size = 50000000
|
||||
receive-buffer-size = 50000000
|
||||
maximum-frame-size = 52428800
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,6 +0,0 @@
|
||||
include "common"
|
||||
|
||||
akka {
|
||||
remote.netty.tcp.hostname = "127.0.0.1"
|
||||
remote.netty.tcp.port = 5446
|
||||
}
|
||||
@ -1,6 +0,0 @@
|
||||
include "common"
|
||||
|
||||
akka {
|
||||
remote.netty.tcp.hostname = "10.38.16.163"
|
||||
remote.netty.tcp.port = 5448
|
||||
}
|
||||
@ -68,12 +68,15 @@ write_metrics=true
|
||||
db.url=jdbc:postgresql://localhost:5432/dbname?user=dbusername&password=thepassword
|
||||
|
||||
## Enable remote Akka actor for data split
|
||||
## Set to true and also edit and set host/port in obpremotedata.conf
|
||||
#enable_remotedata=true
|
||||
# Note! Above is currently disabled in source code!!
|
||||
## If set to true, must set hostname and port
|
||||
## of remote machine
|
||||
#remotedata.enable=true
|
||||
#remotedata.hostname=127.0.0.1
|
||||
#remotedata.port=2662
|
||||
|
||||
## If remotedata is enabled, set the remote database parameters
|
||||
## db has to be accessible from box set in obpremotedata.conf
|
||||
## Set separate database for data split
|
||||
## If remotedata is disabled, bd has to be accessible from local machine
|
||||
## If remotedata is enabled, db has to be accessible from remote machine
|
||||
#remotedata.db.driver=org.h2.Driver
|
||||
#remotedata.db.url=jdbc:h2:./lift_proto.db.remotedata;DB_CLOSE_ON_EXIT=FALSE
|
||||
#remotedata.db.username=user
|
||||
|
||||
@ -1,6 +0,0 @@
|
||||
include "common"
|
||||
|
||||
akka {
|
||||
remote.natty.tcp.hostname = "127.0.0.1"
|
||||
remote.netty.tcp.port = 5444
|
||||
}
|
||||
@ -78,7 +78,7 @@ import code.api.Constant._
|
||||
import code.cards.MappedPhysicalCard
|
||||
import code.cards.PinReset
|
||||
import code.fx.{MappedCurrency, MappedFXRate}
|
||||
import code.remotedata.RemotedataActorSystem
|
||||
import code.remotedata.RemotedataActors
|
||||
import code.transaction.MappedTransaction
|
||||
import code.transactionStatusScheduler.TransactionStatusScheduler
|
||||
|
||||
@ -355,11 +355,12 @@ class Boot extends Loggable{
|
||||
}
|
||||
}
|
||||
|
||||
if (!Props.getBool("enable_remotedata", false)) {
|
||||
if (!Props.getBool("remotedata.enable", false)) {
|
||||
try {
|
||||
RemotedataActorSystem.startLocalWorkerSystem()
|
||||
logger.info(s"RemoteDataActors.startLocalWorkerSystem() starting")
|
||||
RemotedataActors.startLocalWorkerSystem()
|
||||
} catch {
|
||||
case ex: Exception => logger.warn(s"RemoteDataActorSystem.startLocalWorkerSystem() could not start: $ex")
|
||||
case ex: Exception => logger.warn(s"RemoteDataActors.startLocalWorkerSystem() could not start: $ex")
|
||||
}
|
||||
}
|
||||
|
||||
@ -434,6 +435,9 @@ object ToSchemify {
|
||||
)
|
||||
|
||||
val models = List(
|
||||
MappedCounterparty,
|
||||
MappedCounterpartyMetadata,
|
||||
MappedCounterpartyWhereTag,
|
||||
AuthUser,
|
||||
Admin,
|
||||
Nonce,
|
||||
@ -441,8 +445,6 @@ object ToSchemify {
|
||||
Consumer,
|
||||
MappedNarrative,
|
||||
MappedWhereTag,
|
||||
MappedCounterpartyMetadata,
|
||||
MappedCounterpartyWhereTag,
|
||||
MappedBank,
|
||||
MappedBankAccount,
|
||||
MappedTransaction,
|
||||
@ -467,7 +469,6 @@ object ToSchemify {
|
||||
MappedEntitlement,
|
||||
MappedPhysicalCard,
|
||||
PinReset,
|
||||
MappedCounterparty,
|
||||
MappedBadLoginAttempt,
|
||||
MappedFXRate,
|
||||
MappedCurrency,
|
||||
|
||||
@ -4,7 +4,7 @@ package code.accountholder
|
||||
|
||||
import code.model.{AccountId, BankId, User}
|
||||
import net.liftweb.util.SimpleInjector
|
||||
import code.remotedata.Remotedata
|
||||
import code.remotedata.RemotedataAccountHolders
|
||||
import net.liftweb.common.Box
|
||||
|
||||
|
||||
@ -12,8 +12,8 @@ object AccountHolders extends SimpleInjector {
|
||||
|
||||
val accountHolders = new Inject(buildOne _) {}
|
||||
|
||||
def buildOne: AccountHolders = MapperAccountHolders
|
||||
//def buildOne: AccountHolders = Remotedata
|
||||
//def buildOne: AccountHolders = MapperAccountHolders
|
||||
def buildOne: AccountHolders = RemotedataAccountHolders
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -5,14 +5,14 @@ import net.liftweb.common.Box
|
||||
import code.model._
|
||||
import java.util.Date
|
||||
|
||||
import code.remotedata.Remotedata
|
||||
import code.remotedata.RemotedataComments
|
||||
|
||||
object Comments extends SimpleInjector {
|
||||
|
||||
val comments = new Inject(buildOne _) {}
|
||||
|
||||
//def buildOne: Comments = MappedComments
|
||||
def buildOne: Comments = Remotedata
|
||||
def buildOne: Comments = RemotedataComments
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -3,14 +3,14 @@ package code.metadata.counterparties
|
||||
import net.liftweb.common.Box
|
||||
import net.liftweb.util.SimpleInjector
|
||||
import code.model.{AccountId, BankId, Counterparty, CounterpartyMetadata}
|
||||
import code.remotedata.Remotedata
|
||||
import code.remotedata.RemotedataCounterparties
|
||||
|
||||
object Counterparties extends SimpleInjector {
|
||||
|
||||
val counterparties = new Inject(buildOne _) {}
|
||||
|
||||
def buildOne: Counterparties = MapperCounterparties
|
||||
// def buildOne: Counterparties = AkkaMapperViews
|
||||
//def buildOne: Counterparties = RemotedataCounterparties
|
||||
|
||||
}
|
||||
|
||||
@ -85,4 +85,4 @@ class RemoteCounterpartiesCaseClasses {
|
||||
case class checkCounterpartyAvailable(name: String, thisBankId: String, thisAccountId: String, thisViewId: String)
|
||||
}
|
||||
|
||||
object RemoteCounterpartiesCaseClasses extends RemoteCounterpartiesCaseClasses
|
||||
object RemoteCounterpartiesCaseClasses extends RemoteCounterpartiesCaseClasses
|
||||
|
||||
@ -5,14 +5,14 @@ import java.util.Date
|
||||
|
||||
import net.liftweb.common.Box
|
||||
import code.model._
|
||||
import code.remotedata.Remotedata
|
||||
import code.remotedata.RemotedataTags
|
||||
|
||||
object Tags extends SimpleInjector {
|
||||
|
||||
val tags = new Inject(buildOne _) {}
|
||||
|
||||
//def buildOne: Tags = MappedTags
|
||||
def buildOne: Tags = Remotedata
|
||||
def buildOne: Tags = RemotedataTags
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -1,756 +0,0 @@
|
||||
package code.remotedata
|
||||
|
||||
import java.util.Date
|
||||
|
||||
import akka.actor.{ActorKilledException, ActorSelection, ActorSystem}
|
||||
import akka.pattern.ask
|
||||
import akka.util.Timeout
|
||||
import code.accountholder.{AccountHolders, RemoteAccountHoldersCaseClasses}
|
||||
import code.api.APIFailure
|
||||
import code.metadata.comments.{Comments, RemoteCommentsCaseClasses}
|
||||
import code.metadata.counterparties.{Counterparties, CounterpartyTrait, RemoteCounterpartiesCaseClasses}
|
||||
import code.model.dataAccess.ResourceUser
|
||||
import code.model.{CreateViewJSON, Permission, UpdateViewJSON, _}
|
||||
import code.users.{RemoteUserCaseClasses, Users}
|
||||
import code.views.{RemoteViewCaseClasses, Views}
|
||||
import com.typesafe.config.ConfigFactory
|
||||
import net.liftweb.common.{Full, _}
|
||||
import net.liftweb.util.Props
|
||||
import code.metadata.tags.{RemoteTagsCaseClasses, Tags}
|
||||
|
||||
import scala.collection.immutable.List
|
||||
import scala.concurrent.Await
|
||||
import scala.concurrent.duration._
|
||||
|
||||
|
||||
object Remotedata extends Views with Users with Counterparties with AccountHolders with Comments with Tags{
|
||||
|
||||
val TIMEOUT = 10 seconds
|
||||
val rViews = RemoteViewCaseClasses
|
||||
val rUsers = RemoteUserCaseClasses
|
||||
val rCounterparties = RemoteCounterpartiesCaseClasses
|
||||
val rAccountHolders = RemoteAccountHoldersCaseClasses
|
||||
val rComments = RemoteCommentsCaseClasses
|
||||
val rTags = RemoteTagsCaseClasses
|
||||
implicit val timeout = Timeout(10000 milliseconds)
|
||||
|
||||
val remote = ActorSystem("LookupSystem", ConfigFactory.load("remotelookup"))
|
||||
val cfg = ConfigFactory.load("obplocaldata")
|
||||
val host = cfg.getString("akka.remote.netty.tcp.hostname")
|
||||
val port = cfg.getString("akka.remote.netty.tcp.port")
|
||||
var actorPath = "akka.tcp://OBPDataWorkerSystem@" + host + ":" + port + "/user/OBPLocalDataActor"
|
||||
if (Props.getBool("enable_remotedata", false)) {
|
||||
val cfg = ConfigFactory.load("obpremotedata")
|
||||
val rhost = cfg.getString("akka.remote.netty.tcp.hostname")
|
||||
val rport = cfg.getString("akka.remote.netty.tcp.port")
|
||||
actorPath = "akka.tcp://OBPDataWorkerSystem@" + rhost + ":" + rport + "/user/OBPRemoteDataActor"
|
||||
}
|
||||
|
||||
var viewsActor: ActorSelection = remote.actorSelection(actorPath)
|
||||
|
||||
def addPermissions(views: List[ViewUID], user: User): Box[List[View]] = {
|
||||
val res = try {
|
||||
Full(
|
||||
Await.result(
|
||||
(viewsActor ? rViews.addPermissions(views, user)).mapTo[List[View]],
|
||||
TIMEOUT
|
||||
)
|
||||
)
|
||||
}
|
||||
catch {
|
||||
case k: ActorKilledException => Empty ~> APIFailure(s"One or more views not found", 404)
|
||||
case e: Throwable => throw e
|
||||
}
|
||||
res
|
||||
}
|
||||
|
||||
def permission(account: BankAccountUID, user: User): Box[Permission] = {
|
||||
Full(
|
||||
Await.result(
|
||||
(viewsActor ? rViews.permission(account, user)).mapTo[Permission],
|
||||
TIMEOUT
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
def addPermission(viewUID: ViewUID, user: User): Box[View] = {
|
||||
val res = try {
|
||||
Full(
|
||||
Await.result(
|
||||
(viewsActor ? rViews.addPermission(viewUID, user)).mapTo[View],
|
||||
TIMEOUT
|
||||
)
|
||||
)
|
||||
}
|
||||
catch {
|
||||
case k: ActorKilledException => Empty ~> APIFailure(s"View $viewUID. not found", 404)
|
||||
case e: Throwable => throw e
|
||||
}
|
||||
res
|
||||
|
||||
}
|
||||
|
||||
//TODO Fix return values in order to better describe failures
|
||||
def revokePermission(viewUID : ViewUID, user : User) : Box[Boolean] = {
|
||||
val res = try {
|
||||
Full(
|
||||
Await.result(
|
||||
(viewsActor ? rViews.revokePermission(viewUID, user)).mapTo[Boolean],
|
||||
TIMEOUT
|
||||
)
|
||||
)
|
||||
}
|
||||
catch {
|
||||
case k: ClassCastException => k.getMessage match {
|
||||
case "Cannot cast net.liftweb.common.Failure to java.lang.Boolean" =>
|
||||
return Empty ~> APIFailure(s"View $viewUID. not removed", 400)
|
||||
case "Cannot cast net.liftweb.common.ParamFailure to java.lang.Boolean" =>
|
||||
return Empty ~> APIFailure(s"View $viewUID. not found", 404)
|
||||
case _ =>
|
||||
return Empty ~> APIFailure(s"Unknown error", 406)
|
||||
}
|
||||
case e: Throwable => throw e
|
||||
}
|
||||
res
|
||||
}
|
||||
|
||||
def revokeAllPermissions(bankId : BankId, accountId: AccountId, user : User) : Box[Boolean] = {
|
||||
val res = try{
|
||||
Full(
|
||||
Await.result(
|
||||
(viewsActor ? rViews.revokeAllPermissions(bankId, accountId, user)).mapTo[Boolean],
|
||||
TIMEOUT
|
||||
)
|
||||
)
|
||||
}
|
||||
catch {
|
||||
case k: ActorKilledException => Empty ~> Failure("One of the views this user has access to is the owner view, and there would be no one with access" +
|
||||
" to this owner view if access to the user was revoked. No permissions to any views on the account have been revoked.")
|
||||
|
||||
case e: Throwable => throw e
|
||||
}
|
||||
res
|
||||
}
|
||||
|
||||
def view(viewUID : ViewUID) : Box[View] = {
|
||||
val res = try {
|
||||
Full(
|
||||
Await.result(
|
||||
(viewsActor ? rViews.view(viewUID)).mapTo[View],
|
||||
TIMEOUT
|
||||
)
|
||||
)
|
||||
}
|
||||
catch {
|
||||
case k: ActorKilledException => Empty ~> APIFailure(s"View $viewUID. not found", 404)
|
||||
case e: Throwable => throw e
|
||||
}
|
||||
res
|
||||
}
|
||||
|
||||
def view(viewId : ViewId, account: BankAccountUID) : Box[View] = {
|
||||
val res = try {
|
||||
Full(
|
||||
Await.result(
|
||||
(viewsActor ? rViews.view(viewId, account)).mapTo[View],
|
||||
TIMEOUT
|
||||
)
|
||||
)
|
||||
}
|
||||
catch {
|
||||
case k: ActorKilledException => Empty ~> APIFailure(s"View $viewId. not found", 404)
|
||||
case e: Throwable => throw e
|
||||
}
|
||||
res
|
||||
}
|
||||
|
||||
|
||||
def createView(bankAccountId: BankAccountUID, view: CreateViewJSON): Box[View] = {
|
||||
Await.result(
|
||||
(viewsActor ? rViews.createView(bankAccountId, view)).mapTo[Box[View]],
|
||||
TIMEOUT
|
||||
)
|
||||
}
|
||||
|
||||
def updateView(bankAccountId : BankAccountUID, viewId: ViewId, viewUpdateJson : UpdateViewJSON) : Box[View] = {
|
||||
Await.result(
|
||||
(viewsActor ? rViews.updateView(bankAccountId, viewId, viewUpdateJson)).mapTo[Box[View]],
|
||||
TIMEOUT
|
||||
)
|
||||
}
|
||||
|
||||
def removeView(viewId: ViewId, bankAccountId: BankAccountUID): Box[Unit] = {
|
||||
Await.result(
|
||||
(viewsActor ? rViews.removeView(viewId, bankAccountId)).mapTo[Box[Unit]],
|
||||
TIMEOUT
|
||||
)
|
||||
}
|
||||
|
||||
def permissions(account : BankAccountUID) : List[Permission] = {
|
||||
Await.result(
|
||||
(viewsActor ? rViews.permissions(account)).mapTo[List[Permission]],
|
||||
TIMEOUT
|
||||
)
|
||||
}
|
||||
|
||||
def views(bankAccountId : BankAccountUID) : List[View] = {
|
||||
Await.result(
|
||||
(viewsActor ? rViews.views(bankAccountId)).mapTo[List[View]],
|
||||
TIMEOUT
|
||||
)
|
||||
}
|
||||
|
||||
def permittedViews(user: User, bankAccountId: BankAccountUID): List[View] = {
|
||||
Await.result(
|
||||
(viewsActor ? rViews.permittedViews(user, bankAccountId)).mapTo[List[View]],
|
||||
TIMEOUT
|
||||
)
|
||||
}
|
||||
|
||||
def publicViews(bankAccountId : BankAccountUID) : List[View] = {
|
||||
Await.result(
|
||||
(viewsActor ? rViews.publicViews(bankAccountId)).mapTo[List[View]],
|
||||
TIMEOUT
|
||||
)
|
||||
}
|
||||
|
||||
def getAllPublicAccounts() : List[BankAccountUID] = {
|
||||
Await.result(
|
||||
(viewsActor ? rViews.getAllPublicAccounts()).mapTo[List[BankAccountUID]],
|
||||
TIMEOUT
|
||||
)
|
||||
}
|
||||
|
||||
def getPublicBankAccounts(bank : Bank) : List[BankAccountUID] = {
|
||||
Await.result(
|
||||
(viewsActor ? rViews.getPublicBankAccounts(bank)).mapTo[List[BankAccountUID]],
|
||||
TIMEOUT
|
||||
)
|
||||
}
|
||||
|
||||
def getAllAccountsUserCanSee(user : Box[User]) : List[BankAccountUID] = {
|
||||
user match {
|
||||
case Full(theUser) => {
|
||||
Await.result (
|
||||
(viewsActor ? rViews.getAllAccountsUserCanSee(theUser)).mapTo[List[BankAccountUID]],
|
||||
TIMEOUT)
|
||||
}
|
||||
case _ => getAllPublicAccounts()
|
||||
}
|
||||
}
|
||||
|
||||
def getAllAccountsUserCanSee(bank: Bank, user : Box[User]) : List[BankAccountUID] = {
|
||||
user match {
|
||||
case Full(theUser) => {
|
||||
Await.result(
|
||||
(viewsActor ? rViews.getAllAccountsUserCanSee(bank, theUser)).mapTo[List[BankAccountUID]],
|
||||
TIMEOUT
|
||||
)
|
||||
}
|
||||
case _ => getPublicBankAccounts(bank)
|
||||
}
|
||||
}
|
||||
|
||||
def getNonPublicBankAccounts(user : User) : List[BankAccountUID] = {
|
||||
Await.result(
|
||||
(viewsActor ? rViews.getNonPublicBankAccounts(user)).mapTo[List[BankAccountUID]],
|
||||
TIMEOUT
|
||||
)
|
||||
}
|
||||
|
||||
def getNonPublicBankAccounts(user : User, bankId : BankId) : List[BankAccountUID] = {
|
||||
Await.result(
|
||||
(viewsActor ? rViews.getNonPublicBankAccounts(user, bankId)).mapTo[List[BankAccountUID]],
|
||||
TIMEOUT
|
||||
)
|
||||
}
|
||||
|
||||
def grantAccessToAllExistingViews(user : User) = {
|
||||
Await.result(
|
||||
(viewsActor ? rViews.grantAccessToAllExistingViews(user)).mapTo[Boolean],
|
||||
TIMEOUT
|
||||
)
|
||||
}
|
||||
|
||||
def grantAccessToView(user : User, view : View) = {
|
||||
Await.result(
|
||||
(viewsActor ? rViews.grantAccessToView(user, view)).mapTo[Boolean],
|
||||
TIMEOUT
|
||||
)
|
||||
}
|
||||
|
||||
def getOwners(view: View) : Set[User] = {
|
||||
Await.result(
|
||||
(viewsActor ? rViews.getOwners(view)).mapTo[Set[User]],
|
||||
TIMEOUT
|
||||
)
|
||||
}
|
||||
|
||||
def createOwnerView(bankId: BankId, accountId: AccountId, description: String) : Box[View] = {
|
||||
Full(Await.result(
|
||||
(viewsActor ? rViews.createOwnerView(bankId, accountId, description)).mapTo[View],
|
||||
TIMEOUT
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
def createPublicView(bankId: BankId, accountId: AccountId, description: String) : Box[View] = {
|
||||
Full(Await.result(
|
||||
(viewsActor ? rViews.createPublicView(bankId, accountId, description)).mapTo[View],
|
||||
TIMEOUT
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
def createAccountantsView(bankId: BankId, accountId: AccountId, description: String) : Box[View] = {
|
||||
Full(Await.result(
|
||||
(viewsActor ? rViews.createAccountantsView(bankId, accountId, description)).mapTo[View],
|
||||
TIMEOUT
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
def createAuditorsView(bankId: BankId, accountId: AccountId, description: String) : Box[View] = {
|
||||
Full(Await.result(
|
||||
(viewsActor ? rViews.createAuditorsView(bankId, accountId, description)).mapTo[View],
|
||||
TIMEOUT
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
def createRandomView(bankId: BankId, accountId: AccountId) : Box[View] = {
|
||||
Full(Await.result(
|
||||
(viewsActor ? rViews.createRandomView(bankId, accountId)).mapTo[View],
|
||||
TIMEOUT
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
def viewExists(bankId: BankId, accountId: AccountId, name: String): Boolean = {
|
||||
Await.result(
|
||||
(viewsActor ? rViews.viewExists(bankId, accountId, name)).mapTo[Boolean],
|
||||
TIMEOUT
|
||||
)
|
||||
}
|
||||
|
||||
def removeAllViews(bankId: BankId, accountId: AccountId): Boolean = {
|
||||
Await.result(
|
||||
(viewsActor ? rViews.removeAllViews(bankId, accountId)).mapTo[Boolean],
|
||||
TIMEOUT
|
||||
)
|
||||
}
|
||||
|
||||
def removeAllPermissions(bankId: BankId, accountId: AccountId): Boolean = {
|
||||
Await.result(
|
||||
(viewsActor ? rViews.removeAllViews(bankId, accountId)).mapTo[Boolean],
|
||||
TIMEOUT
|
||||
)
|
||||
}
|
||||
|
||||
// Resource user part
|
||||
def getUserByResourceUserId(id : Long) : Box[User] = {
|
||||
val res = try {
|
||||
Full(
|
||||
Await.result(
|
||||
(viewsActor ? rUsers.getUserByResourceUserId(id)).mapTo[User],
|
||||
TIMEOUT
|
||||
)
|
||||
)
|
||||
}
|
||||
catch {
|
||||
case k: ActorKilledException => Empty ~> APIFailure(s"User not found", 404)
|
||||
case e: Throwable => throw e
|
||||
}
|
||||
res
|
||||
}
|
||||
|
||||
def getResourceUserByResourceUserId(id : Long) : Box[ResourceUser] = {
|
||||
val res = try {
|
||||
Full(
|
||||
Await.result(
|
||||
(viewsActor ? rUsers.getResourceUserByResourceUserId(id)).mapTo[ResourceUser],
|
||||
TIMEOUT
|
||||
)
|
||||
)
|
||||
}
|
||||
catch {
|
||||
case k: ActorKilledException => Empty ~> APIFailure(s"ResourceUser not found", 404)
|
||||
case e: Throwable => throw e
|
||||
}
|
||||
res
|
||||
}
|
||||
|
||||
def getUserByProviderId(provider : String, idGivenByProvider : String) : Box[User] = {
|
||||
val res = try {
|
||||
Full(
|
||||
Await.result(
|
||||
(viewsActor ? rUsers.getUserByProviderId(provider, idGivenByProvider)).mapTo[User],
|
||||
TIMEOUT
|
||||
)
|
||||
)
|
||||
}
|
||||
catch {
|
||||
case k: ActorKilledException => Empty ~> APIFailure(s"User not found", 404)
|
||||
case e: Throwable => throw e
|
||||
}
|
||||
res
|
||||
}
|
||||
|
||||
def getUserByUserId(userId : String) : Box[User] = {
|
||||
val res = try {
|
||||
Full(
|
||||
Await.result(
|
||||
(viewsActor ? rUsers.getUserByUserId(userId)).mapTo[User],
|
||||
TIMEOUT
|
||||
)
|
||||
)
|
||||
}
|
||||
catch {
|
||||
case k: ActorKilledException => Empty ~> APIFailure(s"User not found", 404)
|
||||
case e: Throwable => throw e
|
||||
}
|
||||
res
|
||||
}
|
||||
|
||||
def getUserByUserName(userName : String) : Box[ResourceUser] = {
|
||||
val res = try {
|
||||
Full(
|
||||
Await.result(
|
||||
(viewsActor ? rUsers.getUserByUserName(userName)).mapTo[ResourceUser],
|
||||
TIMEOUT
|
||||
)
|
||||
)
|
||||
}
|
||||
catch {
|
||||
case k: ActorKilledException => Empty ~> APIFailure(s"User not found", 404)
|
||||
case e: Throwable => throw e
|
||||
}
|
||||
res
|
||||
}
|
||||
|
||||
def getUserByEmail(email : String) : Box[List[ResourceUser]] = {
|
||||
val res = try {
|
||||
Full(
|
||||
Await.result(
|
||||
(viewsActor ? rUsers.getUserByEmail(email)).mapTo[List[ResourceUser]],
|
||||
TIMEOUT
|
||||
)
|
||||
)
|
||||
}
|
||||
catch {
|
||||
case k: ActorKilledException => Empty ~> APIFailure(s"User not found", 404)
|
||||
case e: Throwable => throw e
|
||||
}
|
||||
res
|
||||
}
|
||||
|
||||
def getAllUsers() : Box[List[ResourceUser]] = {
|
||||
val res = try {
|
||||
Full(
|
||||
Await.result(
|
||||
(viewsActor ? rUsers.getAllUsers()).mapTo[List[ResourceUser]],
|
||||
TIMEOUT
|
||||
)
|
||||
)
|
||||
}
|
||||
catch {
|
||||
case k: ActorKilledException => Empty ~> APIFailure(s"Users not found", 404)
|
||||
case e: Throwable => throw e
|
||||
}
|
||||
res
|
||||
}
|
||||
|
||||
def createResourceUser(provider: String, providerId: Option[String], name: Option[String], email: Option[String], userId: Option[String]) : Box[ResourceUser] = {
|
||||
val res = try {
|
||||
Full(
|
||||
Await.result(
|
||||
(viewsActor ? rUsers.createResourceUser(provider, providerId, name, email, userId)).mapTo[ResourceUser],
|
||||
TIMEOUT
|
||||
)
|
||||
)
|
||||
}
|
||||
catch {
|
||||
case k: ActorKilledException => Empty ~> APIFailure(s"User not created", 404)
|
||||
case e: Throwable => throw e
|
||||
}
|
||||
res
|
||||
}
|
||||
|
||||
def createUnsavedResourceUser(provider: String, providerId: Option[String], name: Option[String], email: Option[String], userId: Option[String]) : Box[ResourceUser] = {
|
||||
val res = try {
|
||||
Full(
|
||||
Await.result(
|
||||
(viewsActor ? rUsers.createUnsavedResourceUser(provider, providerId, name, email, userId)).mapTo[ResourceUser],
|
||||
TIMEOUT
|
||||
)
|
||||
)
|
||||
}
|
||||
catch {
|
||||
case k: ActorKilledException => Empty ~> APIFailure(s"User not created", 404)
|
||||
case e: Throwable => throw e
|
||||
}
|
||||
res
|
||||
}
|
||||
|
||||
def saveResourceUser(resourceUser: ResourceUser) : Box[ResourceUser] = {
|
||||
val res = try {
|
||||
Full(
|
||||
Await.result(
|
||||
(viewsActor ? rUsers.saveResourceUser(resourceUser)).mapTo[ResourceUser],
|
||||
TIMEOUT
|
||||
)
|
||||
)
|
||||
}
|
||||
catch {
|
||||
case k: ActorKilledException => Empty ~> APIFailure(s"User not created", 404)
|
||||
case e: Throwable => throw e
|
||||
}
|
||||
res
|
||||
}
|
||||
|
||||
def deleteResourceUser(userId: Long) : Box[Boolean] = {
|
||||
val res = try{
|
||||
Full(
|
||||
Await.result(
|
||||
(viewsActor ? rUsers.deleteResourceUser(userId)).mapTo[Boolean],
|
||||
TIMEOUT
|
||||
)
|
||||
)
|
||||
}
|
||||
catch {
|
||||
case k: ActorKilledException => Empty ~> APIFailure(s"User not deleted", 404)
|
||||
case e: Throwable => throw e
|
||||
}
|
||||
res
|
||||
}
|
||||
|
||||
override def getOrCreateMetadata(originalPartyBankId: BankId, originalPartyAccountId: AccountId, otherParty: Counterparty): Box[CounterpartyMetadata] = {
|
||||
val res = try {
|
||||
Full(
|
||||
Await.result(
|
||||
(viewsActor ? rCounterparties.getOrCreateMetadata(originalPartyBankId: BankId, originalPartyAccountId: AccountId, otherParty: Counterparty)).mapTo[CounterpartyMetadata],
|
||||
TIMEOUT
|
||||
)
|
||||
)
|
||||
}
|
||||
catch {
|
||||
case k: ActorKilledException => Empty ~> APIFailure(s"Can not getOrCreateMetadata", 404)
|
||||
case e: Throwable => throw e
|
||||
}
|
||||
res
|
||||
}
|
||||
|
||||
override def getMetadatas(originalPartyBankId: BankId, originalPartyAccountId: AccountId): List[CounterpartyMetadata] = {
|
||||
val res = try {
|
||||
Full(
|
||||
Await.result(
|
||||
(viewsActor ? rCounterparties.getMetadatas(originalPartyBankId: BankId, originalPartyAccountId: AccountId)).mapTo[List[CounterpartyMetadata]],
|
||||
TIMEOUT
|
||||
)
|
||||
)
|
||||
}
|
||||
catch {
|
||||
case k: ActorKilledException => Empty ~> APIFailure(s"Can not getMetadatas", 404)
|
||||
case e: Throwable => throw e
|
||||
}
|
||||
res.get
|
||||
}
|
||||
|
||||
override def getMetadata(originalPartyBankId: BankId, originalPartyAccountId: AccountId, counterpartyMetadataId: String): Box[CounterpartyMetadata] = {
|
||||
val res = try {
|
||||
Full(
|
||||
Await.result(
|
||||
(viewsActor ? rCounterparties.getMetadata(originalPartyBankId: BankId, originalPartyAccountId: AccountId, counterpartyMetadataId: String)).mapTo[CounterpartyMetadata],
|
||||
TIMEOUT
|
||||
)
|
||||
)
|
||||
}
|
||||
catch {
|
||||
case k: ActorKilledException => Empty ~> APIFailure(s"Can not getMetadata", 404)
|
||||
case e: Throwable => throw e
|
||||
}
|
||||
res
|
||||
}
|
||||
|
||||
override def getCounterparty(counterPartyId: String): Box[CounterpartyTrait] = {
|
||||
val res = try {
|
||||
Full(
|
||||
Await.result(
|
||||
(viewsActor ? rCounterparties.getCounterparty(counterPartyId: String)).mapTo[CounterpartyTrait],
|
||||
TIMEOUT
|
||||
)
|
||||
)
|
||||
}
|
||||
catch {
|
||||
case k: ActorKilledException => Empty ~> APIFailure(s"Can not getCounterparty", 404)
|
||||
case e: Throwable => throw e
|
||||
}
|
||||
res
|
||||
}
|
||||
|
||||
override def getCounterpartyByIban(iban: String): Box[CounterpartyTrait] = {
|
||||
val res = try {
|
||||
Full(
|
||||
Await.result(
|
||||
(viewsActor ? rCounterparties.getCounterpartyByIban(iban: String)).mapTo[CounterpartyTrait],
|
||||
TIMEOUT
|
||||
)
|
||||
)
|
||||
}
|
||||
catch {
|
||||
case k: ActorKilledException => Empty ~> APIFailure(s"Can not getCounterpartyByIban", 404)
|
||||
case e: Throwable => throw e
|
||||
}
|
||||
res
|
||||
}
|
||||
|
||||
override def createCounterparty(createdByUserId: String, thisBankId: String, thisAccountId: String, thisViewId: String, name: String, otherBankId: String, otherAccountId: String, otherAccountRoutingScheme: String, otherAccountRoutingAddress: String, otherBankRoutingScheme: String, otherBankRoutingAddress: String, isBeneficiary: Boolean): Box[CounterpartyTrait] = {
|
||||
val res = try {
|
||||
Full(
|
||||
Await.result(
|
||||
(viewsActor ? rCounterparties.createCounterparty(createdByUserId, thisBankId, thisAccountId, thisViewId, name, otherBankId, otherAccountId,
|
||||
otherAccountRoutingScheme, otherAccountRoutingAddress, otherBankRoutingScheme, otherBankRoutingAddress,
|
||||
isBeneficiary)).mapTo[CounterpartyTrait],
|
||||
TIMEOUT
|
||||
)
|
||||
)
|
||||
}
|
||||
catch {
|
||||
case k: ActorKilledException => Empty ~> APIFailure(s"Can not createCounterparty", 404)
|
||||
case e: Throwable => throw e
|
||||
}
|
||||
res
|
||||
}
|
||||
|
||||
override def checkCounterpartyAvailable(name: String, thisBankId: String, thisAccountId: String, thisViewId: String): Boolean = {
|
||||
Await.result(
|
||||
(viewsActor ? rCounterparties.checkCounterpartyAvailable(name: String, thisBankId: String, thisAccountId: String, thisViewId: String)).mapTo[Boolean],
|
||||
TIMEOUT
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
override def createAccountHolder(userId: Long, bankId: String, accountId: String, source: String = "MappedAccountHolder"): Boolean = {
|
||||
Await.result(
|
||||
(viewsActor ? rAccountHolders.createAccountHolder(userId, bankId, accountId, source)).mapTo[Boolean],
|
||||
TIMEOUT
|
||||
)
|
||||
}
|
||||
|
||||
override def getAccountHolders(bankId: BankId, accountId: AccountId): Set[User] = {
|
||||
Await.result(
|
||||
(viewsActor ? rAccountHolders.getAccountHolders(bankId, accountId)).mapTo[Set[User]],
|
||||
TIMEOUT
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
// bulkDeletes for tests
|
||||
def bulkDeleteAllPermissionsAndViews(): Boolean = {
|
||||
Await.result(
|
||||
(viewsActor ? rViews.bulkDeleteAllPermissionsAndViews()).mapTo[Boolean],
|
||||
TIMEOUT
|
||||
)
|
||||
}
|
||||
|
||||
def bulkDeleteAllAccountHolders(): Box[Boolean] = {
|
||||
Full(
|
||||
Await.result(
|
||||
(viewsActor ? rAccountHolders.bulkDeleteAllAccountHolders()).mapTo[Boolean],
|
||||
TIMEOUT
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
def bulkDeleteAllResourceUsers(): Box[Boolean] = {
|
||||
Full(
|
||||
Await.result(
|
||||
(viewsActor ? rUsers.bulkDeleteAllResourceUsers()).mapTo[Boolean],
|
||||
TIMEOUT
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
// METADATA
|
||||
// Comments
|
||||
def getComments(bankId : BankId, accountId : AccountId, transactionId : TransactionId)(viewId : ViewId) : List[Comment] = {
|
||||
Await.result(
|
||||
(viewsActor ? rComments.getComments(bankId, accountId, transactionId, viewId)).mapTo[List[Comment]],
|
||||
TIMEOUT
|
||||
)
|
||||
}
|
||||
|
||||
def addComment(bankId : BankId, accountId : AccountId, transactionId: TransactionId)(userId: UserId, viewId : ViewId, text : String, datePosted : Date) : Box[Comment] = {
|
||||
Full(
|
||||
Await.result(
|
||||
(viewsActor ? rComments.addComment(bankId, accountId, transactionId, userId, viewId, text, datePosted)).mapTo[Comment],
|
||||
TIMEOUT
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
def deleteComment(bankId : BankId, accountId : AccountId, transactionId: TransactionId)(commentId : String) : Box[Boolean] = {
|
||||
val res = try {
|
||||
Full(
|
||||
Await.result(
|
||||
(viewsActor ? rComments.deleteComment(bankId, accountId, transactionId, commentId)).mapTo[Boolean],
|
||||
TIMEOUT
|
||||
)
|
||||
)
|
||||
}
|
||||
catch {
|
||||
case k: ActorKilledException => Empty ~> APIFailure(s"Cannot delete the comment", 404)
|
||||
case e: Throwable => throw e
|
||||
}
|
||||
res
|
||||
}
|
||||
|
||||
def bulkDeleteComments(bankId: BankId, accountId: AccountId): Boolean = {
|
||||
Await.result(
|
||||
(viewsActor ? rComments.bulkDeleteComments(bankId, accountId)).mapTo[Boolean],
|
||||
TIMEOUT
|
||||
)
|
||||
}
|
||||
|
||||
// Tags
|
||||
def getTags(bankId : BankId, accountId : AccountId, transactionId : TransactionId)(viewId : ViewId) : List[TransactionTag] = {
|
||||
Await.result(
|
||||
(viewsActor ? rTags.getTags(bankId, accountId, transactionId, viewId)).mapTo[List[TransactionTag]],
|
||||
TIMEOUT
|
||||
)
|
||||
}
|
||||
|
||||
def addTag(bankId : BankId, accountId : AccountId, transactionId: TransactionId)(userId: UserId, viewId : ViewId, tagText : String, datePosted : Date) : Box[TransactionTag] = {
|
||||
Full(
|
||||
Await.result(
|
||||
(viewsActor ? rTags.addTag(bankId, accountId, transactionId, userId, viewId, tagText, datePosted)).mapTo[TransactionTag],
|
||||
TIMEOUT
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
def deleteTag(bankId : BankId, accountId : AccountId, transactionId: TransactionId)(tagId : String) : Box[Boolean] = {
|
||||
val res = try {
|
||||
Full(
|
||||
Await.result(
|
||||
(viewsActor ? rTags.deleteTag(bankId, accountId, transactionId, tagId)).mapTo[Boolean],
|
||||
TIMEOUT
|
||||
)
|
||||
)
|
||||
}
|
||||
catch {
|
||||
case k: ActorKilledException => Empty ~> APIFailure(s"Cannot delete the tag", 404)
|
||||
case e: Throwable => throw e
|
||||
}
|
||||
res
|
||||
}
|
||||
|
||||
def bulkDeleteTags(bankId: BankId, accountId: AccountId): Boolean = {
|
||||
Await.result(
|
||||
(viewsActor ? rTags.bulkDeleteTags(bankId, accountId)).mapTo[Boolean],
|
||||
TIMEOUT
|
||||
)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -0,0 +1,43 @@
|
||||
package code.remotedata
|
||||
|
||||
import code.accountholder.{AccountHolders, RemoteAccountHoldersCaseClasses}
|
||||
import code.model.{AccountId, BankId, User}
|
||||
import net.liftweb.common.{Full, _}
|
||||
import akka.pattern.ask
|
||||
import akka.util.Timeout
|
||||
import scala.concurrent.Await
|
||||
import scala.concurrent.duration._
|
||||
|
||||
|
||||
object RemotedataAccountHolders extends AccountHolders {
|
||||
|
||||
implicit val timeout = Timeout(10000 milliseconds)
|
||||
val TIMEOUT = 10 seconds
|
||||
val rAccountHolders = RemoteAccountHoldersCaseClasses
|
||||
var accountHoldersActor = RemotedataActorSystem.getActor("accountHolders")
|
||||
|
||||
override def createAccountHolder(userId: Long, bankId: String, accountId: String, source: String = "MappedAccountHolder"): Boolean = {
|
||||
Await.result(
|
||||
(accountHoldersActor ? rAccountHolders.createAccountHolder(userId, bankId, accountId, source)).mapTo[Boolean],
|
||||
TIMEOUT
|
||||
)
|
||||
}
|
||||
|
||||
override def getAccountHolders(bankId: BankId, accountId: AccountId): Set[User] = {
|
||||
Await.result(
|
||||
(accountHoldersActor ? rAccountHolders.getAccountHolders(bankId, accountId)).mapTo[Set[User]],
|
||||
TIMEOUT
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
def bulkDeleteAllAccountHolders(): Box[Boolean] = {
|
||||
Full(
|
||||
Await.result(
|
||||
(accountHoldersActor ? rAccountHolders.bulkDeleteAllAccountHolders()).mapTo[Boolean],
|
||||
TIMEOUT
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,66 @@
|
||||
package code.remotedata
|
||||
|
||||
import java.util.concurrent.TimeUnit
|
||||
|
||||
import akka.actor.Actor
|
||||
import akka.event.Logging
|
||||
import akka.util.Timeout
|
||||
import code.accountholder.{MapperAccountHolders, RemoteAccountHoldersCaseClasses}
|
||||
import code.model._
|
||||
import net.liftweb.common._
|
||||
import net.liftweb.util.ControlHelpers.tryo
|
||||
|
||||
import scala.concurrent.duration._
|
||||
|
||||
|
||||
class RemotedataAccountHoldersActor extends Actor {
|
||||
|
||||
val logger = Logging(context.system, this)
|
||||
|
||||
val mAccountHolders = MapperAccountHolders
|
||||
val rAccountHolders = RemoteAccountHoldersCaseClasses
|
||||
|
||||
def receive = {
|
||||
|
||||
case rAccountHolders.createAccountHolder(userId: Long, bankId: String, accountId: String, source: String) =>
|
||||
|
||||
logger.info("createAccountHolder(" + userId +", "+ bankId +", "+ accountId +", "+ source +")")
|
||||
|
||||
{
|
||||
for {
|
||||
res <- tryo{mAccountHolders.createAccountHolder(userId, bankId, accountId, source)}
|
||||
} yield {
|
||||
sender ! res.asInstanceOf[Boolean]
|
||||
}
|
||||
}.getOrElse( context.stop(sender) )
|
||||
|
||||
|
||||
case rAccountHolders.getAccountHolders(bankId: BankId, accountId: AccountId) =>
|
||||
|
||||
logger.info("getAccountHolders(" + bankId +", "+ accountId +")")
|
||||
|
||||
{
|
||||
for {
|
||||
res <- tryo{mAccountHolders.getAccountHolders(bankId, accountId)}
|
||||
} yield {
|
||||
sender ! res.asInstanceOf[Set[User]]
|
||||
}
|
||||
}.getOrElse( context.stop(sender) )
|
||||
|
||||
|
||||
case rAccountHolders.bulkDeleteAllAccountHolders() =>
|
||||
|
||||
logger.info("bulkDeleteAllAccountHolders()")
|
||||
|
||||
{
|
||||
for {
|
||||
res <- mAccountHolders.bulkDeleteAllAccountHolders()
|
||||
} yield {
|
||||
sender ! res.asInstanceOf[Boolean]
|
||||
}
|
||||
}.getOrElse( context.stop(sender) )
|
||||
|
||||
case message => logger.info("[AKKA ACTOR ERROR - REQUEST NOT RECOGNIZED] " + message)
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,705 +0,0 @@
|
||||
package code.remotedata
|
||||
|
||||
import java.util.concurrent.TimeUnit
|
||||
|
||||
import akka.actor.{Actor, ActorSystem, Props => ActorProps}
|
||||
import akka.event.Logging
|
||||
import akka.util.Timeout
|
||||
import bootstrap.liftweb.ToSchemify
|
||||
import code.accountholder.{MapperAccountHolders, RemoteAccountHoldersCaseClasses}
|
||||
import code.metadata.comments.{MappedComment, MappedComments, RemoteCommentsCaseClasses}
|
||||
import code.metadata.counterparties.{CounterpartyTrait, MapperCounterparties, RemoteCounterpartiesCaseClasses}
|
||||
import code.metadata.tags.{MappedTags, RemoteTagsCaseClasses}
|
||||
import code.model._
|
||||
import code.model.dataAccess.ResourceUser
|
||||
import code.users.{LiftUsers, RemoteUserCaseClasses}
|
||||
import code.views.{MapperViews, RemoteViewCaseClasses}
|
||||
import com.typesafe.config.ConfigFactory
|
||||
import net.liftweb.common._
|
||||
import net.liftweb.db.StandardDBVendor
|
||||
import net.liftweb.http.LiftRules
|
||||
import net.liftweb.mapper.{DB, Schemifier}
|
||||
import net.liftweb.util.Props
|
||||
import net.liftweb.util.ControlHelpers.tryo
|
||||
|
||||
import scala.concurrent.duration._
|
||||
|
||||
|
||||
class RemotedataActor extends Actor {
|
||||
|
||||
val logger = Logging(context.system, this)
|
||||
|
||||
Schemifier.schemify(true, Schemifier.infoF _, ToSchemify.modelsRemotedata: _*)
|
||||
|
||||
val mViews = MapperViews
|
||||
val rViews = RemoteViewCaseClasses
|
||||
|
||||
val mUsers = LiftUsers
|
||||
val rUsers = RemoteUserCaseClasses
|
||||
|
||||
val mCounterparties = MapperCounterparties
|
||||
val rCounterparties = RemoteCounterpartiesCaseClasses
|
||||
|
||||
val mAccountHolders = MapperAccountHolders
|
||||
val rAccountHolders = RemoteAccountHoldersCaseClasses
|
||||
|
||||
val mComments = MappedComments
|
||||
val rComments = RemoteCommentsCaseClasses
|
||||
|
||||
val mTags = MappedTags
|
||||
val rTags = RemoteTagsCaseClasses
|
||||
|
||||
def receive = {
|
||||
|
||||
case rViews.addPermissions(views : List[ViewUID], user : User) =>
|
||||
|
||||
logger.info("addPermissions(" + views +"," + user +")")
|
||||
|
||||
{
|
||||
for {
|
||||
res <- mViews.addPermissions(views, user)
|
||||
} yield {
|
||||
sender ! res.asInstanceOf[List[View]]
|
||||
}
|
||||
}.getOrElse( context.stop(sender) )
|
||||
|
||||
|
||||
case rViews.addPermission(viewUID : ViewUID, user : User) =>
|
||||
|
||||
logger.info("addPermission(" + viewUID +"," + user +")")
|
||||
|
||||
{
|
||||
for {
|
||||
res <- mViews.addPermission(viewUID, user)
|
||||
} yield {
|
||||
sender ! res.asInstanceOf[View]
|
||||
}
|
||||
}.getOrElse( context.stop(sender) )
|
||||
|
||||
|
||||
case rViews.permission(account : BankAccountUID, user: User) =>
|
||||
|
||||
logger.info("permission(" + account +"," + user +")")
|
||||
|
||||
{
|
||||
for {
|
||||
res <- mViews.permission(account, user)
|
||||
} yield {
|
||||
sender ! res.asInstanceOf[Permission]
|
||||
}
|
||||
}.getOrElse( context.stop(sender) )
|
||||
|
||||
|
||||
//TODO Fix return values in order to better describe failures
|
||||
case rViews.revokePermission(viewUID : ViewUID, user : User) =>
|
||||
|
||||
logger.info("revokePermission(" + viewUID +"," + user +")")
|
||||
|
||||
|
||||
val res = mViews.revokePermission(viewUID, user)
|
||||
res match {
|
||||
case Full(r) => sender ! r
|
||||
case f => sender ! f
|
||||
}
|
||||
|
||||
case rViews.revokeAllPermissions(bankId : BankId, accountId : AccountId, user : User) =>
|
||||
|
||||
logger.info("revokeAllPermissions(" + bankId +"," + accountId +","+ user +")")
|
||||
|
||||
{
|
||||
for {
|
||||
res <- mViews.revokeAllPermissions(bankId, accountId, user)
|
||||
} yield {
|
||||
sender ! res.asInstanceOf[Boolean]
|
||||
}
|
||||
}.getOrElse( context.stop(sender) )
|
||||
|
||||
|
||||
case rViews.view(viewUID : ViewUID) =>
|
||||
|
||||
logger.info("view(" + viewUID +")")
|
||||
|
||||
{
|
||||
for {
|
||||
res <- mViews.view(viewUID)
|
||||
} yield {
|
||||
sender ! res.asInstanceOf[View]
|
||||
}
|
||||
}.getOrElse( context.stop(sender) )
|
||||
|
||||
|
||||
case rViews.view(viewId: ViewId, bankAccountId: BankAccountUID) =>
|
||||
|
||||
logger.info("view(" + viewId +", "+ bankAccountId + ")")
|
||||
|
||||
{
|
||||
for {
|
||||
res <- mViews.view(viewId, bankAccountId)
|
||||
} yield {
|
||||
sender ! res.asInstanceOf[View]
|
||||
}
|
||||
}.getOrElse( context.stop(sender) )
|
||||
|
||||
case rViews.createView(bankAccountId : BankAccountUID, view: CreateViewJSON) =>
|
||||
logger.info("createView(" + bankAccountId +","+ view +")")
|
||||
sender ! mViews.createView(bankAccountId, view)
|
||||
|
||||
case rViews.updateView(bankAccountId : BankAccountUID, viewId : ViewId, viewUpdateJson : UpdateViewJSON) =>
|
||||
logger.info("updateView(" + bankAccountId +","+ viewId +","+ viewUpdateJson +")")
|
||||
sender ! mViews.updateView(bankAccountId, viewId, viewUpdateJson)
|
||||
|
||||
//case r.view(viewId: ViewId, bankAccountId: BankAccountUID) =>
|
||||
// logger.info("view(" + viewId +","+ bankAccountId +")")
|
||||
// sender ! v.view(ViewId(viewId.value), bankAccountId)
|
||||
|
||||
case rViews.removeView(viewId : ViewId, bankAccountId: BankAccountUID) =>
|
||||
logger.info("removeView(" + viewId +","+ bankAccountId +")")
|
||||
sender ! mViews.removeView(viewId, bankAccountId)
|
||||
|
||||
case rViews.permissions(bankAccountId : BankAccountUID) =>
|
||||
logger.info("premissions(" + bankAccountId +")")
|
||||
sender ! mViews.permissions(bankAccountId)
|
||||
|
||||
case rViews.views(bankAccountId : BankAccountUID) =>
|
||||
logger.info("views(" + bankAccountId +")")
|
||||
sender ! mViews.views(bankAccountId)
|
||||
|
||||
case rViews.permittedViews(user: User, bankAccountId: BankAccountUID) =>
|
||||
logger.info("permittedViews(" + user +", " + bankAccountId +")")
|
||||
sender ! mViews.permittedViews(user, bankAccountId)
|
||||
|
||||
case rViews.publicViews(bankAccountId : BankAccountUID) =>
|
||||
logger.info("publicViews(" + bankAccountId +")")
|
||||
sender ! mViews.publicViews(bankAccountId)
|
||||
|
||||
case rViews.getAllPublicAccounts() =>
|
||||
logger.info("getAllPublicAccounts()")
|
||||
sender ! mViews.getAllPublicAccounts
|
||||
|
||||
case rViews.getPublicBankAccounts(bank : Bank) =>
|
||||
logger.info("getPublicBankAccounts(" + bank +")")
|
||||
sender ! mViews.getPublicBankAccounts(bank)
|
||||
|
||||
case rViews.getAllAccountsUserCanSee(user : Box[User]) =>
|
||||
logger.info("getAllAccountsUserCanSee(" + user +")")
|
||||
sender ! mViews.getAllAccountsUserCanSee(user)
|
||||
|
||||
case rViews.getAllAccountsUserCanSee(user : User) =>
|
||||
logger.info("getAllAccountsUserCanSee(" + user +")")
|
||||
sender ! mViews.getAllAccountsUserCanSee(Full(user))
|
||||
|
||||
case rViews.getAllAccountsUserCanSee(bank: Bank, user : Box[User]) =>
|
||||
logger.info("getAllAccountsUserCanSee(" + bank +", "+ user +")")
|
||||
sender ! mViews.getAllAccountsUserCanSee(bank, user)
|
||||
|
||||
case rViews.getAllAccountsUserCanSee(bank: Bank, user : User) =>
|
||||
logger.info("getAllAccountsUserCanSee(" + bank +", "+ user +")")
|
||||
sender ! mViews.getAllAccountsUserCanSee(bank, Full(user))
|
||||
|
||||
case rViews.getNonPublicBankAccounts(user: User, bankId: BankId) =>
|
||||
logger.info("getNonPublicBankAccounts(" + user +", "+ bankId +")")
|
||||
sender ! mViews.getNonPublicBankAccounts(user, bankId)
|
||||
|
||||
case rViews.getNonPublicBankAccounts(user: User) =>
|
||||
logger.info("getNonPublicBankAccounts(" + user +")")
|
||||
sender ! mViews.getNonPublicBankAccounts(user)
|
||||
|
||||
case rViews.createOwnerView(bankId, accountId, description) =>
|
||||
logger.info("createOwnerView(" + bankId +", "+ accountId +", "+ description +")")
|
||||
sender ! mViews.createOwnerView(bankId, accountId, description).orNull
|
||||
|
||||
case rViews.createPublicView(bankId, accountId, description) =>
|
||||
logger.info("createPublicView(" + bankId +", "+ accountId +", "+ description +")")
|
||||
sender ! mViews.createPublicView(bankId, accountId, description).orNull
|
||||
|
||||
case rViews.createAccountantsView(bankId, accountId, description) =>
|
||||
logger.info("createAccountantsView(" + bankId +", "+ accountId +", "+ description +")")
|
||||
sender ! mViews.createAccountantsView(bankId, accountId, description).orNull
|
||||
|
||||
case rViews.createAuditorsView(bankId, accountId, description) =>
|
||||
logger.info("createAuditorsView(" + bankId +", "+ accountId +", "+ description +")")
|
||||
sender ! mViews.createAuditorsView(bankId, accountId, description).orNull
|
||||
|
||||
case rViews.createRandomView(bankId, accountId) =>
|
||||
logger.info("createRandomView(" + bankId +", "+ accountId +")")
|
||||
sender ! mViews.createRandomView(bankId, accountId).orNull
|
||||
|
||||
case rViews.getOwners(view) =>
|
||||
logger.info("getOwners(" + view +")")
|
||||
sender ! mViews.getOwners(view)
|
||||
|
||||
case rViews.grantAccessToView(user, view) =>
|
||||
logger.info("grantAccessToView(" + user +", "+ view +")")
|
||||
sender ! mViews.grantAccessToView(user, view)
|
||||
|
||||
case rViews.grantAccessToAllExistingViews(user) =>
|
||||
logger.info("grantAccessToAllExistingViews(" + user +")")
|
||||
sender ! mViews.grantAccessToAllExistingViews(user)
|
||||
|
||||
case rViews.removeAllPermissions(bankId, accountId) =>
|
||||
logger.info("removeAllPermissions(" + bankId +", "+ accountId +")")
|
||||
sender ! mViews.removeAllPermissions(bankId, accountId)
|
||||
|
||||
case rViews.removeAllViews(bankId, accountId) =>
|
||||
logger.info("removeAllViews(" + bankId +", "+ accountId +")")
|
||||
sender ! mViews.removeAllViews(bankId, accountId)
|
||||
|
||||
// Resource User part
|
||||
case rUsers.getUserByResourceUserId(id: Long) =>
|
||||
logger.info("getUserByResourceUserId(" + id +")")
|
||||
|
||||
{
|
||||
for {
|
||||
res <- mUsers.getUserByResourceUserId(id)
|
||||
} yield {
|
||||
sender ! res.asInstanceOf[User]
|
||||
}
|
||||
}.getOrElse( context.stop(sender) )
|
||||
|
||||
case rUsers.getResourceUserByResourceUserId(id: Long) =>
|
||||
logger.info("getResourceUserByResourceUserId(" + id +")")
|
||||
|
||||
{
|
||||
for {
|
||||
res <- mUsers.getResourceUserByResourceUserId(id)
|
||||
} yield {
|
||||
sender ! res.asInstanceOf[ResourceUser]
|
||||
}
|
||||
}.getOrElse( context.stop(sender) )
|
||||
|
||||
case rUsers.getUserByProviderId(provider : String, idGivenByProvider : String) =>
|
||||
logger.info("getUserByProviderId(" + provider +"," + idGivenByProvider +")")
|
||||
|
||||
{
|
||||
for {
|
||||
res <- mUsers.getUserByProviderId(provider, idGivenByProvider)
|
||||
} yield {
|
||||
sender ! res.asInstanceOf[User]
|
||||
}
|
||||
}.getOrElse( context.stop(sender) )
|
||||
|
||||
case rUsers.getUserByUserId(userId: String) =>
|
||||
logger.info("getUserByUserId(" + userId +")")
|
||||
|
||||
{
|
||||
for {
|
||||
res <- mUsers.getUserByUserId(userId)
|
||||
} yield {
|
||||
sender ! res.asInstanceOf[User]
|
||||
}
|
||||
}.getOrElse( context.stop(sender) )
|
||||
|
||||
case rUsers.getUserByUserName(userName: String) =>
|
||||
logger.info("getUserByUserName(" + userName +")")
|
||||
|
||||
{
|
||||
for {
|
||||
res <- mUsers.getUserByUserName(userName)
|
||||
} yield {
|
||||
sender ! res.asInstanceOf[ResourceUser]
|
||||
}
|
||||
}.getOrElse( context.stop(sender) )
|
||||
|
||||
case rUsers.getUserByEmail(email: String) =>
|
||||
logger.info("getUserByEmail(" + email +")")
|
||||
|
||||
{
|
||||
for {
|
||||
res <- mUsers.getUserByEmail(email)
|
||||
} yield {
|
||||
sender ! res
|
||||
}
|
||||
}.getOrElse( context.stop(sender) )
|
||||
|
||||
case rUsers.getAllUsers() =>
|
||||
logger.info("getAllUsers()")
|
||||
|
||||
{
|
||||
for {
|
||||
res <- mUsers.getAllUsers()
|
||||
} yield {
|
||||
sender ! res
|
||||
}
|
||||
}.getOrElse( context.stop(sender) )
|
||||
|
||||
case rUsers.createResourceUser(provider: String, providerId: Option[String], name: Option[String], email: Option[String], userId: Option[String]) =>
|
||||
logger.info("createResourceUser(" + provider + ", " + providerId.getOrElse("None") + ", " + name.getOrElse("None") + ", " + email.getOrElse("None") + ", " + userId.getOrElse("None") + ")")
|
||||
|
||||
{
|
||||
for {
|
||||
res <- mUsers.createResourceUser(provider, providerId, name, email, userId)
|
||||
} yield {
|
||||
sender ! res.asInstanceOf[ResourceUser]
|
||||
}
|
||||
}.getOrElse( context.stop(sender) )
|
||||
|
||||
case rUsers.createUnsavedResourceUser(provider: String, providerId: Option[String], name: Option[String], email: Option[String], userId: Option[String]) =>
|
||||
logger.info("createUnsavedResourceUser(" + provider + ", " + providerId.getOrElse("None") + ", " + name.getOrElse("None") + ", " + email.getOrElse("None") + ", " + userId.getOrElse("None") + ")")
|
||||
|
||||
{
|
||||
for {
|
||||
res <- mUsers.createUnsavedResourceUser(provider, providerId, name, email, userId)
|
||||
} yield {
|
||||
sender ! res.asInstanceOf[ResourceUser]
|
||||
}
|
||||
}.getOrElse( context.stop(sender) )
|
||||
|
||||
case rUsers.saveResourceUser(resourceUser: ResourceUser) =>
|
||||
logger.info("saveResourceUser")
|
||||
|
||||
{
|
||||
for {
|
||||
res <- mUsers.saveResourceUser(resourceUser)
|
||||
} yield {
|
||||
sender ! res.asInstanceOf[ResourceUser]
|
||||
}
|
||||
}.getOrElse( context.stop(sender) )
|
||||
|
||||
case rUsers.deleteResourceUser(id: Long) =>
|
||||
logger.info("deleteResourceUser(" + id +")")
|
||||
|
||||
{
|
||||
for {
|
||||
res <- tryo{mUsers.deleteResourceUser(id)}
|
||||
} yield {
|
||||
sender ! res.asInstanceOf[Boolean]
|
||||
}
|
||||
}.getOrElse( context.stop(sender) )
|
||||
|
||||
case rCounterparties.checkCounterpartyAvailable(name: String, thisBankId: String, thisAccountId: String, thisViewId: String)=>
|
||||
logger.info("checkCounterpartyAvailable(" + name +", "+ thisBankId +", "+ thisAccountId +", "+ thisViewId +")")
|
||||
sender ! mCounterparties.checkCounterpartyAvailable(name: String, thisBankId: String, thisAccountId: String, thisViewId: String)
|
||||
|
||||
case rCounterparties.createCounterparty(createdByUserId, thisBankId, thisAccountId, thisViewId, name, otherBankId, otherAccountId,
|
||||
otherAccountRoutingScheme, otherAccountRoutingAddress, otherBankRoutingScheme, otherBankRoutingAddress,
|
||||
isBeneficiary) =>
|
||||
logger.info("createCounterparty(" + createdByUserId +", "+ thisBankId +", "+ thisAccountId +", "+ thisViewId +", "+ name +", "+ otherBankId + otherAccountId +", "
|
||||
+ otherAccountRoutingScheme +", "+ otherAccountRoutingAddress +", "+ otherBankRoutingScheme +", "+ otherBankRoutingAddress +", "+ isBeneficiary+ ")")
|
||||
|
||||
{
|
||||
for {
|
||||
res <- mCounterparties.createCounterparty(createdByUserId, thisBankId, thisAccountId, thisViewId, name, otherBankId, otherAccountId,
|
||||
otherAccountRoutingScheme, otherAccountRoutingAddress, otherBankRoutingScheme, otherBankRoutingAddress,
|
||||
isBeneficiary)
|
||||
} yield {
|
||||
sender ! res.asInstanceOf[CounterpartyTrait]
|
||||
}
|
||||
}.getOrElse( context.stop(sender) )
|
||||
|
||||
|
||||
|
||||
case rCounterparties.getOrCreateMetadata(originalPartyBankId: BankId, originalPartyAccountId: AccountId, otherParty: Counterparty) =>
|
||||
logger.info("getOrCreateMetadata(" + originalPartyBankId +", " +originalPartyAccountId+otherParty+")")
|
||||
|
||||
{
|
||||
for {
|
||||
res <- mCounterparties.getOrCreateMetadata(originalPartyBankId: BankId, originalPartyAccountId: AccountId, otherParty: Counterparty)
|
||||
} yield {
|
||||
sender ! res.asInstanceOf[CounterpartyMetadata]
|
||||
}
|
||||
}.getOrElse( context.stop(sender) )
|
||||
|
||||
case rCounterparties.getMetadatas(originalPartyBankId: BankId, originalPartyAccountId: AccountId) =>
|
||||
logger.info("getOrCreateMetadata(" + originalPartyBankId +", "+originalPartyAccountId+")")
|
||||
|
||||
Full({
|
||||
for {
|
||||
res <- Full(mCounterparties.getMetadatas(originalPartyBankId: BankId, originalPartyAccountId: AccountId))
|
||||
} yield {
|
||||
sender ! res.asInstanceOf[List[CounterpartyMetadata]]
|
||||
}
|
||||
}).getOrElse(context.stop(sender))
|
||||
|
||||
|
||||
case rCounterparties.getMetadata(originalPartyBankId: BankId, originalPartyAccountId: AccountId, counterpartyMetadataId: String) =>
|
||||
logger.info("getMetadata(" + originalPartyBankId +", "+originalPartyAccountId+")")
|
||||
|
||||
{
|
||||
for {
|
||||
res <- mCounterparties.getMetadata(originalPartyBankId: BankId, originalPartyAccountId: AccountId, counterpartyMetadataId: String)
|
||||
} yield {
|
||||
sender ! res.asInstanceOf[CounterpartyMetadata]
|
||||
}
|
||||
}.getOrElse( context.stop(sender) )
|
||||
|
||||
|
||||
|
||||
case rCounterparties.getCounterparty(counterPartyId: String) =>
|
||||
logger.info("getCounterparty(" + counterPartyId +")")
|
||||
|
||||
{
|
||||
for {
|
||||
res <- mCounterparties.getCounterparty(counterPartyId: String)
|
||||
} yield {
|
||||
sender ! res.asInstanceOf[CounterpartyTrait]
|
||||
}
|
||||
}.getOrElse( context.stop(sender) )
|
||||
|
||||
|
||||
case rCounterparties.getCounterpartyByIban(iban: String) =>
|
||||
|
||||
logger.info("getOrCreateMetadata(" + iban +")")
|
||||
|
||||
{
|
||||
for {
|
||||
res <- mCounterparties.getCounterpartyByIban(iban: String)
|
||||
} yield {
|
||||
sender ! res.asInstanceOf[CounterpartyTrait]
|
||||
}
|
||||
}.getOrElse( context.stop(sender) )
|
||||
|
||||
|
||||
case rAccountHolders.createAccountHolder(userId: Long, bankId: String, accountId: String, source: String) =>
|
||||
|
||||
logger.info("createAccountHolder(" + userId +", "+ bankId +", "+ accountId +", "+ source +")")
|
||||
|
||||
{
|
||||
for {
|
||||
res <- tryo{mAccountHolders.createAccountHolder(userId, bankId, accountId, source)}
|
||||
} yield {
|
||||
sender ! res.asInstanceOf[Boolean]
|
||||
}
|
||||
}.getOrElse( context.stop(sender) )
|
||||
|
||||
|
||||
case rAccountHolders.getAccountHolders(bankId: BankId, accountId: AccountId) =>
|
||||
|
||||
logger.info("getAccountHolders(" + bankId +", "+ accountId +")")
|
||||
|
||||
{
|
||||
for {
|
||||
res <- tryo{mAccountHolders.getAccountHolders(bankId, accountId)}
|
||||
} yield {
|
||||
sender ! res.asInstanceOf[Set[User]]
|
||||
}
|
||||
}.getOrElse( context.stop(sender) )
|
||||
|
||||
|
||||
case rAccountHolders.bulkDeleteAllAccountHolders() =>
|
||||
|
||||
logger.info("bulkDeleteAllAccountHolders()")
|
||||
|
||||
{
|
||||
for {
|
||||
res <- mAccountHolders.bulkDeleteAllAccountHolders()
|
||||
} yield {
|
||||
sender ! res.asInstanceOf[Boolean]
|
||||
}
|
||||
}.getOrElse( context.stop(sender) )
|
||||
|
||||
|
||||
case rUsers.bulkDeleteAllResourceUsers() =>
|
||||
|
||||
logger.info("bulkDeleteAllResourceUsers()")
|
||||
|
||||
{
|
||||
for {
|
||||
res <- mUsers.bulkDeleteAllResourceUsers()
|
||||
} yield {
|
||||
sender ! res.asInstanceOf[Boolean]
|
||||
}
|
||||
}.getOrElse( context.stop(sender) )
|
||||
|
||||
|
||||
|
||||
case rViews.bulkDeleteAllPermissionsAndViews() =>
|
||||
|
||||
logger.info("bulkDeleteAllPermissionsAndViews()")
|
||||
|
||||
{
|
||||
for {
|
||||
res <- tryo{mViews.bulkDeleteAllPermissionsAndViews()}
|
||||
} yield {
|
||||
sender ! res.asInstanceOf[Boolean]
|
||||
}
|
||||
}.getOrElse( context.stop(sender) )
|
||||
|
||||
// METADATA
|
||||
// Comments
|
||||
case rComments.getComments(bankId, accountId, transactionId, viewId) =>
|
||||
logger.info("getComments(" + bankId +", "+ accountId +", "+ transactionId +", "+ viewId +")")
|
||||
sender ! mComments.getComments(bankId, accountId, transactionId)(viewId)
|
||||
|
||||
case rComments.addComment(bankId, accountId, transactionId, userId, viewId, text, datePosted) =>
|
||||
logger.info("addComment(" + bankId +", "+ accountId +", "+ transactionId +", "+ text +", "+ text +", "+ datePosted +")")
|
||||
|
||||
{
|
||||
for {
|
||||
res <- mComments.addComment(bankId, accountId, transactionId)(userId, viewId, text, datePosted)
|
||||
} yield {
|
||||
sender ! res.asInstanceOf[Comment]
|
||||
}
|
||||
}.getOrElse( context.stop(sender) )
|
||||
|
||||
case rComments.deleteComment(bankId : BankId, accountId : AccountId, transactionId: TransactionId, commentId : String) =>
|
||||
logger.info("deleteComment(" + bankId +", "+ accountId +", "+ transactionId + commentId +")")
|
||||
|
||||
{
|
||||
for {
|
||||
res <- mComments.deleteComment(bankId, accountId, transactionId)(commentId)
|
||||
} yield {
|
||||
sender ! res.asInstanceOf[Boolean]
|
||||
}
|
||||
}.getOrElse( context.stop(sender) )
|
||||
|
||||
case rComments.bulkDeleteComments(bankId: BankId, accountId: AccountId) =>
|
||||
|
||||
logger.info("bulkDeleteComments(" + bankId +", "+ accountId + ")")
|
||||
|
||||
{
|
||||
for {
|
||||
res <- tryo{mComments.bulkDeleteComments(bankId, accountId)}
|
||||
} yield {
|
||||
sender ! res.asInstanceOf[Boolean]
|
||||
}
|
||||
}.getOrElse( context.stop(sender) )
|
||||
|
||||
// Tags
|
||||
case rTags.getTags(bankId, accountId, transactionId, viewId) =>
|
||||
logger.info("getTags(" + bankId +", "+ accountId +", "+ transactionId +", "+ viewId +")")
|
||||
sender ! mTags.getTags(bankId, accountId, transactionId)(viewId)
|
||||
|
||||
case rTags.addTag(bankId, accountId, transactionId, userId, viewId, text, datePosted) =>
|
||||
logger.info("addTag(" + bankId +", "+ accountId +", "+ transactionId +", "+ text +", "+ text +", "+ datePosted +")")
|
||||
|
||||
{
|
||||
for {
|
||||
res <- mTags.addTag(bankId, accountId, transactionId)(userId, viewId, text, datePosted)
|
||||
} yield {
|
||||
sender ! res.asInstanceOf[TransactionTag]
|
||||
}
|
||||
}.getOrElse( context.stop(sender) )
|
||||
|
||||
case rTags.deleteTag(bankId : BankId, accountId : AccountId, transactionId: TransactionId, tagId : String) =>
|
||||
logger.info("deleteTag(" + bankId +", "+ accountId +", "+ transactionId + tagId +")")
|
||||
|
||||
{
|
||||
for {
|
||||
res <- mTags.deleteTag(bankId, accountId, transactionId)(tagId)
|
||||
} yield {
|
||||
sender ! res.asInstanceOf[Boolean]
|
||||
}
|
||||
}.getOrElse( context.stop(sender) )
|
||||
|
||||
case rTags.bulkDeleteTags(bankId: BankId, accountId: AccountId) =>
|
||||
|
||||
logger.info("bulkDeleteTags(" + bankId +", "+ accountId + ")")
|
||||
|
||||
{
|
||||
for {
|
||||
res <- tryo{mTags.bulkDeleteTags(bankId, accountId)}
|
||||
} yield {
|
||||
sender ! res.asInstanceOf[Boolean]
|
||||
}
|
||||
}.getOrElse( context.stop(sender) )
|
||||
|
||||
|
||||
|
||||
|
||||
case message => logger.info("[AKKA ACTOR ERROR - REQUEST NOT RECOGNIZED] " + message)
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
object RemotedataActorSystem extends Loggable {
|
||||
implicit val timeout = Timeout(1 seconds)
|
||||
|
||||
def startRemoteWorkerSystem(): Unit = {
|
||||
val remote = ActorSystem("OBPDataWorkerSystem", ConfigFactory.load("obpremotedata"))
|
||||
val actor = remote.actorOf(ActorProps[RemotedataActor], name = "OBPRemoteDataActor")
|
||||
logger.info("Started OBPDataWorkerSystem")
|
||||
}
|
||||
|
||||
def startLocalWorkerSystem(): Unit = {
|
||||
val remote = ActorSystem("OBPDataWorkerSystem", ConfigFactory.load("obplocaldata"))
|
||||
val actor = remote.actorOf(ActorProps[RemotedataActor], name = "OBPLocalDataActor")
|
||||
logger.info("Started OBPDataWorkerSystem locally")
|
||||
}
|
||||
|
||||
def setupRemotedataDB(): Unit = {
|
||||
// set up the way to connect to the relational DB we're using (ok if other connector than relational)
|
||||
if (!DB.jndiJdbcConnAvailable_?) {
|
||||
val driver =
|
||||
Props.mode match {
|
||||
case Props.RunModes.Production | Props.RunModes.Staging | Props.RunModes.Development => Props.get("remotedata.db.driver") openOr "org.h2.Driver"
|
||||
case _ => "org.h2.Driver"
|
||||
}
|
||||
val vendor =
|
||||
Props.mode match {
|
||||
case Props.RunModes.Production | Props.RunModes.Staging | Props.RunModes.Development =>
|
||||
new StandardDBVendor(driver,
|
||||
Props.get("remotedata.db.url") openOr "jdbc:h2:./lift_proto.remotedata.db;AUTO_SERVER=TRUE",
|
||||
Props.get("remotedata.db.user"), Props.get("remotedata.db.password"))
|
||||
case _ =>
|
||||
new StandardDBVendor(
|
||||
driver,
|
||||
"jdbc:h2:mem:OBPData;DB_CLOSE_DELAY=-1",
|
||||
Empty, Empty)
|
||||
}
|
||||
|
||||
logger.debug("Using database driver: " + driver)
|
||||
LiftRules.unloadHooks.append(vendor.closeAllConnections_! _)
|
||||
|
||||
DB.defineConnectionManager(net.liftweb.util.DefaultConnectionIdentifier, vendor)
|
||||
}
|
||||
}
|
||||
|
||||
// Entry point if running as standalone remote data server, without jetty
|
||||
def main (args: Array[String]): Unit = {
|
||||
if (args.length >= 1 && args(0) == "standalone") {
|
||||
setupRemotedataDB()
|
||||
showLogoAfterDelay()
|
||||
startRemoteWorkerSystem()
|
||||
}
|
||||
}
|
||||
|
||||
def showLogoAfterDelay() = {
|
||||
val actorSystem = ActorSystem()
|
||||
implicit val executor = actorSystem.dispatcher
|
||||
val scheduler = actorSystem.scheduler
|
||||
scheduler.scheduleOnce(
|
||||
Duration(4, TimeUnit.SECONDS),
|
||||
runnable = new Runnable {
|
||||
def run(): Unit = {
|
||||
println(
|
||||
"""
|
||||
| ______ _______ _______ __ _______ __
|
||||
| / " \ | _ "\ | __ "\ /""\ | __ "\ |" \
|
||||
| // ____ \ (. |_) :) (. |__) :) _____ / \ (. |__) :)|| |
|
||||
| / / ) :)|: \/ |: ____/ // ") /' /\ \ |: ____/ |: |
|
||||
| (: (____/ // (| _ \\ (| / (_____/ // __' \ (| / |. |
|
||||
| \ / |: |_) :)/|__/ \ / / \\ \ /|__/ \ /\ |\
|
||||
| \"_____/ (_______/(_______) (___/ \___)(_______) (__\_|_)
|
||||
| _______ _______ ___ ___ ______ ___________ _______
|
||||
| /" \ /" "||" \ /" | / " \(" _ ")/" "|
|
||||
| |: |(: ______) \ \ // | // ____ \)__/ \\__/(: ______)
|
||||
| |_____/ ) \/ | /\\ \/. | / / ) :) \\_ / \/ |
|
||||
| // / // ___)_ |: \. |(: (____/ // |. | // ___)_
|
||||
| |: __ \ (: "||. \ /: | \ / \: | (: "|
|
||||
| |__| \___) \_______)|___|\__/|___| \"_____/ \__| \_______)
|
||||
| __ ______ ___________ ______ _______
|
||||
| /""\ /" _ "\(" _ ")/ " \ /" \
|
||||
| / \ (: ( \___))__/ \\__/// ____ \ |: |
|
||||
| /' /\ \ \/ \ \\_ / / / ) :)|_____/ )
|
||||
| // __' \ // \ _ |. | (: (____/ // // /
|
||||
| / / \\ \(: _) \ \: | \ / |: __ \
|
||||
| (___/ \___)\_______) \__| \"_____/ |__| \___)
|
||||
|""".stripMargin)
|
||||
}
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
}
|
||||
42
src/main/scala/code/remotedata/RemotedataActorSystem.scala
Normal file
42
src/main/scala/code/remotedata/RemotedataActorSystem.scala
Normal file
@ -0,0 +1,42 @@
|
||||
package code.remotedata
|
||||
|
||||
import akka.actor.ActorSystem
|
||||
import com.typesafe.config.ConfigFactory
|
||||
import net.liftweb.util.Props
|
||||
import net.liftweb.common.Loggable
|
||||
|
||||
|
||||
object RemotedataActorSystem extends Loggable {
|
||||
|
||||
var obpActorSystem: ActorSystem = null
|
||||
|
||||
def init () = {
|
||||
if (obpActorSystem == null ) {
|
||||
val system = ActorSystem("LookupSystem", ConfigFactory.load(ConfigFactory.parseString(RemotedataConfig.lookupConf)))
|
||||
logger.info(RemotedataConfig.lookupConf)
|
||||
obpActorSystem = system
|
||||
}
|
||||
obpActorSystem
|
||||
}
|
||||
|
||||
|
||||
def getActor(actorName: String) = {
|
||||
this.init
|
||||
|
||||
val actorPath = Props.getBool("remotedata.enable", false) match {
|
||||
case true =>
|
||||
val hostname = RemotedataConfig.remoteHostname
|
||||
val port = RemotedataConfig.remotePort
|
||||
"akka.tcp://RemotedataActorSystem@" + hostname + ":" + port + "/user/" + actorName
|
||||
|
||||
case false =>
|
||||
val hostname = RemotedataConfig.localHostname
|
||||
val port = RemotedataConfig.localPort
|
||||
"akka.tcp://RemotedataActorSystem@" + hostname + ":" + port + "/user/" + actorName
|
||||
}
|
||||
|
||||
this.obpActorSystem.actorSelection(actorPath)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
123
src/main/scala/code/remotedata/RemotedataActors.scala
Normal file
123
src/main/scala/code/remotedata/RemotedataActors.scala
Normal file
@ -0,0 +1,123 @@
|
||||
package code.remotedata
|
||||
|
||||
import java.util.concurrent.TimeUnit
|
||||
|
||||
import akka.actor.{Actor, ActorSystem, Props => ActorProps}
|
||||
import akka.event.Logging
|
||||
import akka.util.Timeout
|
||||
import bootstrap.liftweb.ToSchemify
|
||||
import com.typesafe.config.ConfigFactory
|
||||
import net.liftweb.common._
|
||||
import net.liftweb.db.StandardDBVendor
|
||||
import net.liftweb.http.LiftRules
|
||||
import net.liftweb.mapper.{DB, Schemifier}
|
||||
import net.liftweb.util.Props
|
||||
|
||||
import scala.concurrent.duration._
|
||||
|
||||
|
||||
object RemotedataActors extends Loggable {
|
||||
|
||||
def startLocalWorkerSystem(): Unit = {
|
||||
val system = ActorSystem("RemotedataActorSystem", ConfigFactory.load(ConfigFactory.parseString(RemotedataConfig.localConf)))
|
||||
logger.info("Starting local RemotedataActorSystem")
|
||||
logger.info(RemotedataConfig.localConf)
|
||||
logger.info(system.actorOf(ActorProps[RemotedataUsersActor], name = "users"))
|
||||
logger.info(system.actorOf(ActorProps[RemotedataViewsActor], name = "views"))
|
||||
logger.info(system.actorOf(ActorProps[RemotedataAccountHoldersActor], name = "accountHolders"))
|
||||
logger.info(system.actorOf(ActorProps[RemotedataCounterpartiesActor], name = "counterparties"))
|
||||
logger.info(system.actorOf(ActorProps[RemotedataTagsActor], name = "tags"))
|
||||
logger.info(system.actorOf(ActorProps[RemotedataCommentsActor], name = "comments"))
|
||||
logger.info("Cmplete")
|
||||
}
|
||||
|
||||
def startRemoteWorkerSystem(): Unit = {
|
||||
val system = ActorSystem("RemotedataActorSystem", ConfigFactory.load(ConfigFactory.parseString(RemotedataConfig.remoteConf)))
|
||||
logger.info("Starting remote RemotedataActorSystem")
|
||||
logger.info(RemotedataConfig.remoteConf)
|
||||
logger.info(system.actorOf(ActorProps[RemotedataUsersActor], name = "users"))
|
||||
logger.info(system.actorOf(ActorProps[RemotedataViewsActor], name = "views"))
|
||||
logger.info(system.actorOf(ActorProps[RemotedataAccountHoldersActor], name = "accountHolders"))
|
||||
logger.info(system.actorOf(ActorProps[RemotedataCounterpartiesActor], name = "counterparties"))
|
||||
logger.info(system.actorOf(ActorProps[RemotedataTagsActor], name = "tags"))
|
||||
logger.info(system.actorOf(ActorProps[RemotedataCommentsActor], name = "comments"))
|
||||
logger.info("Complete")
|
||||
}
|
||||
|
||||
|
||||
def setupRemotedataDB(): Unit = {
|
||||
// set up the way to connect to the relational DB we're using (ok if other connector than relational)
|
||||
if (!DB.jndiJdbcConnAvailable_?) {
|
||||
val driver =
|
||||
Props.mode match {
|
||||
case Props.RunModes.Production | Props.RunModes.Staging | Props.RunModes.Development => Props.get("remotedata.db.driver") openOr "org.h2.Driver"
|
||||
case _ => "org.h2.Driver"
|
||||
}
|
||||
val vendor =
|
||||
Props.mode match {
|
||||
case Props.RunModes.Production | Props.RunModes.Staging | Props.RunModes.Development =>
|
||||
new StandardDBVendor(driver,
|
||||
Props.get("remotedata.db.url") openOr "jdbc:h2:./lift_proto.remotedata.db;AUTO_SERVER=TRUE",
|
||||
Props.get("remotedata.db.user"), Props.get("remotedata.db.password"))
|
||||
case _ =>
|
||||
new StandardDBVendor(
|
||||
driver,
|
||||
"jdbc:h2:mem:OBPData;DB_CLOSE_DELAY=-1",
|
||||
Empty, Empty)
|
||||
}
|
||||
|
||||
logger.debug("Using database driver: " + driver)
|
||||
LiftRules.unloadHooks.append(vendor.closeAllConnections_! _)
|
||||
|
||||
DB.defineConnectionManager(net.liftweb.util.DefaultConnectionIdentifier, vendor)
|
||||
}
|
||||
Schemifier.schemify(true, Schemifier.infoF _, ToSchemify.modelsRemotedata: _*)
|
||||
}
|
||||
|
||||
// Entry point if running as standalone remote data server, without jetty
|
||||
def main (args: Array[String]): Unit = {
|
||||
if (args.length >= 1 && args(0) == "standalone") {
|
||||
setupRemotedataDB()
|
||||
showLogoAfterDelay()
|
||||
startRemoteWorkerSystem()
|
||||
}
|
||||
}
|
||||
|
||||
def showLogoAfterDelay() = {
|
||||
val actorSystem = ActorSystem()
|
||||
implicit val executor = actorSystem.dispatcher
|
||||
val scheduler = actorSystem.scheduler
|
||||
scheduler.scheduleOnce(
|
||||
Duration(4, TimeUnit.SECONDS),
|
||||
runnable = new Runnable {
|
||||
def run(): Unit = {
|
||||
println(
|
||||
"""
|
||||
| ______ _______ _______ __ _______ __
|
||||
| / " \ | _ "\ | __ "\ /""\ | __ "\ |" \
|
||||
| // ____ \ (. |_) :) (. |__) :) _____ / \ (. |__) :)|| |
|
||||
| / / ) :)|: \/ |: ____/ // ") /' /\ \ |: ____/ |: |
|
||||
| (: (____/ // (| _ \\ (| / (_____/ // __' \ (| / |. |
|
||||
| \ / |: |_) :)/|__/ \ / / \\ \ /|__/ \ /\ |\
|
||||
| \"_____/ (_______/(_______) (___/ \___)(_______) (__\_|_)
|
||||
| _______ _______ ___ ___ ______ ___________ _______
|
||||
| /" \ /" "||" \ /" | / " \(" _ ")/" "|
|
||||
| |: |(: ______) \ \ // | // ____ \)__/ \\__/(: ______)
|
||||
| |_____/ ) \/ | /\\ \/. | / / ) :) \\_ / \/ |
|
||||
| // / // ___)_ |: \. |(: (____/ // |. | // ___)_
|
||||
| |: __ \ (: "||. \ /: | \ / \: | (: "|
|
||||
| |__| \___) \_______)|___|\__/|___| \"_____/ \__| \_______)
|
||||
| __ ______ ___________ ______ _______
|
||||
| /""\ /" _ "\(" _ ")/ " \ /" \
|
||||
| / \ (: ( \___))__/ \\__/// ____ \ |: |
|
||||
| /' /\ \ \/ \ \\_ / / / ) :)|_____/ )
|
||||
| // __' \ // \ _ |. | (: (____/ // // /
|
||||
| / / \\ \(: _) \ \: | \ / |: __ \
|
||||
| (___/ \___)\_______) \__| \"_____/ |__| \___)
|
||||
|""".stripMargin)
|
||||
}
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
}
|
||||
65
src/main/scala/code/remotedata/RemotedataComments.scala
Normal file
65
src/main/scala/code/remotedata/RemotedataComments.scala
Normal file
@ -0,0 +1,65 @@
|
||||
package code.remotedata
|
||||
|
||||
import java.util.Date
|
||||
|
||||
import akka.actor.ActorKilledException
|
||||
import akka.pattern.ask
|
||||
import akka.util.Timeout
|
||||
import code.api.APIFailure
|
||||
import code.metadata.comments.{Comments, RemoteCommentsCaseClasses}
|
||||
import code.model._
|
||||
import net.liftweb.common.{Full, _}
|
||||
|
||||
import scala.collection.immutable.List
|
||||
import scala.concurrent.Await
|
||||
import scala.concurrent.duration._
|
||||
|
||||
|
||||
object RemotedataComments extends Comments {
|
||||
|
||||
implicit val timeout = Timeout(10000 milliseconds)
|
||||
val TIMEOUT = 10 seconds
|
||||
val rComments = RemoteCommentsCaseClasses
|
||||
var commentsActor = RemotedataActorSystem.getActor("comments")
|
||||
|
||||
def getComments(bankId : BankId, accountId : AccountId, transactionId : TransactionId)(viewId : ViewId) : List[Comment] = {
|
||||
Await.result(
|
||||
(commentsActor ? rComments.getComments(bankId, accountId, transactionId, viewId)).mapTo[List[Comment]],
|
||||
TIMEOUT
|
||||
)
|
||||
}
|
||||
|
||||
def addComment(bankId : BankId, accountId : AccountId, transactionId: TransactionId)(userId: UserId, viewId : ViewId, text : String, datePosted : Date) : Box[Comment] = {
|
||||
Full(
|
||||
Await.result(
|
||||
(commentsActor ? rComments.addComment(bankId, accountId, transactionId, userId, viewId, text, datePosted)).mapTo[Comment],
|
||||
TIMEOUT
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
def deleteComment(bankId : BankId, accountId : AccountId, transactionId: TransactionId)(commentId : String) : Box[Boolean] = {
|
||||
val res = try {
|
||||
Full(
|
||||
Await.result(
|
||||
(commentsActor ? rComments.deleteComment(bankId, accountId, transactionId, commentId)).mapTo[Boolean],
|
||||
TIMEOUT
|
||||
)
|
||||
)
|
||||
}
|
||||
catch {
|
||||
case k: ActorKilledException => Empty ~> APIFailure(s"Cannot delete the comment", 404)
|
||||
case e: Throwable => throw e
|
||||
}
|
||||
res
|
||||
}
|
||||
|
||||
def bulkDeleteComments(bankId: BankId, accountId: AccountId): Boolean = {
|
||||
Await.result(
|
||||
(commentsActor ? rComments.bulkDeleteComments(bankId, accountId)).mapTo[Boolean],
|
||||
TIMEOUT
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
70
src/main/scala/code/remotedata/RemotedataCommentsActor.scala
Normal file
70
src/main/scala/code/remotedata/RemotedataCommentsActor.scala
Normal file
@ -0,0 +1,70 @@
|
||||
package code.remotedata
|
||||
|
||||
import java.util.concurrent.TimeUnit
|
||||
|
||||
import akka.actor.Actor
|
||||
import akka.event.Logging
|
||||
import akka.util.Timeout
|
||||
import bootstrap.liftweb.ToSchemify
|
||||
import code.metadata.comments.{MappedComment, MappedComments, RemoteCommentsCaseClasses}
|
||||
import code.model._
|
||||
import net.liftweb.common._
|
||||
import net.liftweb.util.ControlHelpers.tryo
|
||||
|
||||
import scala.concurrent.duration._
|
||||
|
||||
|
||||
class RemotedataCommentsActor extends Actor {
|
||||
|
||||
val logger = Logging(context.system, this)
|
||||
|
||||
val mComments = MappedComments
|
||||
val rComments = RemoteCommentsCaseClasses
|
||||
|
||||
def receive = {
|
||||
|
||||
case rComments.getComments(bankId, accountId, transactionId, viewId) =>
|
||||
logger.info("getComments(" + bankId +", "+ accountId +", "+ transactionId +", "+ viewId +")")
|
||||
sender ! mComments.getComments(bankId, accountId, transactionId)(viewId)
|
||||
|
||||
case rComments.addComment(bankId, accountId, transactionId, userId, viewId, text, datePosted) =>
|
||||
logger.info("addComment(" + bankId +", "+ accountId +", "+ transactionId +", "+ text +", "+ text +", "+ datePosted +")")
|
||||
|
||||
{
|
||||
for {
|
||||
res <- mComments.addComment(bankId, accountId, transactionId)(userId, viewId, text, datePosted)
|
||||
} yield {
|
||||
sender ! res.asInstanceOf[Comment]
|
||||
}
|
||||
}.getOrElse( context.stop(sender) )
|
||||
|
||||
case rComments.deleteComment(bankId : BankId, accountId : AccountId, transactionId: TransactionId, commentId : String) =>
|
||||
logger.info("deleteComment(" + bankId +", "+ accountId +", "+ transactionId + commentId +")")
|
||||
|
||||
{
|
||||
for {
|
||||
res <- mComments.deleteComment(bankId, accountId, transactionId)(commentId)
|
||||
} yield {
|
||||
sender ! res.asInstanceOf[Boolean]
|
||||
}
|
||||
}.getOrElse( context.stop(sender) )
|
||||
|
||||
case rComments.bulkDeleteComments(bankId: BankId, accountId: AccountId) =>
|
||||
|
||||
logger.info("bulkDeleteComments(" + bankId +", "+ accountId + ")")
|
||||
|
||||
{
|
||||
for {
|
||||
res <- tryo{mComments.bulkDeleteComments(bankId, accountId)}
|
||||
} yield {
|
||||
sender ! res.asInstanceOf[Boolean]
|
||||
}
|
||||
}.getOrElse( context.stop(sender) )
|
||||
|
||||
|
||||
case message => logger.info("[AKKA ACTOR ERROR - REQUEST NOT RECOGNIZED] " + message)
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
106
src/main/scala/code/remotedata/RemotedataConfig.scala
Normal file
106
src/main/scala/code/remotedata/RemotedataConfig.scala
Normal file
@ -0,0 +1,106 @@
|
||||
package code.remotedata
|
||||
|
||||
|
||||
import akka.actor.ActorSystem
|
||||
import com.typesafe.config.ConfigFactory
|
||||
import net.liftweb.util.Props
|
||||
|
||||
|
||||
object RemotedataConfig {
|
||||
|
||||
val remoteHostname = Props.get("remotedata.hostname").openOr("127.0.0.1")
|
||||
val remotePort = Props.get("remotedata.port").openOr("2662")
|
||||
|
||||
val localHostname = "127.0.0.1"
|
||||
val localPort = "2552"
|
||||
|
||||
val commonConf =
|
||||
"""
|
||||
akka {
|
||||
extensions = ["com.romix.akka.serialization.kryo.KryoSerializationExtension$"]
|
||||
actor {
|
||||
provider = "akka.remote.RemoteActorRefProvider"
|
||||
kryo {
|
||||
type = "graph"
|
||||
idstrategy = "default"
|
||||
buffer-size = 65536
|
||||
max-buffer-size = -1
|
||||
use-manifests = false
|
||||
use-unsafe = true
|
||||
post-serialization-transformations = "off"
|
||||
#post-serialization-transformations = "lz4,aes"
|
||||
#encryption {
|
||||
# aes {
|
||||
# mode = "AES/CBC/PKCS5Padding"
|
||||
# key = j68KkRjq21ykRGAQ
|
||||
# IV-length = 16
|
||||
# }
|
||||
#}
|
||||
implicit-registration-logging = true
|
||||
kryo-trace = false
|
||||
resolve-subclasses = true
|
||||
}
|
||||
serializers {
|
||||
kryo = "com.romix.akka.serialization.kryo.KryoSerializer"
|
||||
}
|
||||
serialization-bindings {
|
||||
"net.liftweb.common.Full" = kryo,
|
||||
"net.liftweb.common.Empty" = kryo,
|
||||
"net.liftweb.common.Box" = kryo,
|
||||
"net.liftweb.common.ParamFailure" = kryo,
|
||||
"code.api.APIFailure" = kryo,
|
||||
"code.views.RemoteViewCaseClasses" = kryo,
|
||||
"code.model.BankAccount" = kryo,
|
||||
"code.model.View" = kryo,
|
||||
"code.model.dataAccess.ViewImpl" = kryo,
|
||||
"code.model.User" = kryo,
|
||||
"code.model.ViewId" = kryo,
|
||||
"code.model.ViewUID" = kryo,
|
||||
"code.model.Permission" = kryo,
|
||||
"scala.Unit" = kryo,
|
||||
"scala.Boolean" = kryo,
|
||||
"java.io.Serializable" = kryo,
|
||||
"scala.collection.immutable.List" = kryo,
|
||||
"akka.actor.ActorSelectionMessage" = kryo
|
||||
}
|
||||
}
|
||||
remote {
|
||||
enabled-transports = ["akka.remote.netty.tcp"]
|
||||
netty {
|
||||
tcp {
|
||||
send-buffer-size = 50000000
|
||||
receive-buffer-size = 50000000
|
||||
maximum-frame-size = 52428800
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
"""
|
||||
|
||||
val lookupConf =
|
||||
s"""
|
||||
${commonConf}
|
||||
akka {
|
||||
remote.netty.tcp.hostname = ${localHostname}
|
||||
remote.netty.tcp.port = 0
|
||||
}
|
||||
"""
|
||||
|
||||
val localConf =
|
||||
s"""
|
||||
${commonConf}
|
||||
akka {
|
||||
remote.netty.tcp.hostname = ${localHostname}
|
||||
remote.netty.tcp.port = ${localPort}
|
||||
}
|
||||
"""
|
||||
|
||||
val remoteConf =
|
||||
s"""
|
||||
${commonConf}
|
||||
akka {
|
||||
remote.netty.tcp.hostname = ${remoteHostname}
|
||||
remote.netty.tcp.port = ${remotePort}
|
||||
}
|
||||
"""
|
||||
}
|
||||
131
src/main/scala/code/remotedata/RemotedataCounterparties.scala
Normal file
131
src/main/scala/code/remotedata/RemotedataCounterparties.scala
Normal file
@ -0,0 +1,131 @@
|
||||
package code.remotedata
|
||||
|
||||
import java.util.Date
|
||||
|
||||
import akka.actor.ActorKilledException
|
||||
import akka.pattern.ask
|
||||
import akka.util.Timeout
|
||||
import code.api.APIFailure
|
||||
import code.metadata.counterparties.{RemoteCounterpartiesCaseClasses, CounterpartyTrait, Counterparties}
|
||||
import code.model._
|
||||
import net.liftweb.common.{Full, _}
|
||||
|
||||
import scala.collection.immutable.List
|
||||
import scala.concurrent.Await
|
||||
import scala.concurrent.duration._
|
||||
|
||||
|
||||
object RemotedataCounterparties extends Counterparties {
|
||||
|
||||
implicit val timeout = Timeout(10000 milliseconds)
|
||||
val TIMEOUT = 10 seconds
|
||||
val rCounterparties = RemoteCounterpartiesCaseClasses
|
||||
var counterpartiesActor = RemotedataActorSystem.getActor("counterparties")
|
||||
|
||||
|
||||
override def getOrCreateMetadata(originalPartyBankId: BankId, originalPartyAccountId: AccountId, otherParty: Counterparty): Box[CounterpartyMetadata] = {
|
||||
val res = try {
|
||||
Full(
|
||||
Await.result(
|
||||
(counterpartiesActor ? rCounterparties.getOrCreateMetadata(originalPartyBankId: BankId, originalPartyAccountId: AccountId, otherParty: Counterparty)).mapTo[CounterpartyMetadata],
|
||||
TIMEOUT
|
||||
)
|
||||
)
|
||||
}
|
||||
catch {
|
||||
case k: ActorKilledException => Empty ~> APIFailure(s"Can not getOrCreateMetadata", 404)
|
||||
case e: Throwable => throw e
|
||||
}
|
||||
res
|
||||
}
|
||||
|
||||
override def getMetadatas(originalPartyBankId: BankId, originalPartyAccountId: AccountId): List[CounterpartyMetadata] = {
|
||||
val res = try {
|
||||
Full(
|
||||
Await.result(
|
||||
(counterpartiesActor ? rCounterparties.getMetadatas(originalPartyBankId: BankId, originalPartyAccountId: AccountId)).mapTo[List[CounterpartyMetadata]],
|
||||
TIMEOUT
|
||||
)
|
||||
)
|
||||
}
|
||||
catch {
|
||||
case k: ActorKilledException => Empty ~> APIFailure(s"Can not getMetadatas", 404)
|
||||
case e: Throwable => throw e
|
||||
}
|
||||
res.get
|
||||
}
|
||||
|
||||
override def getMetadata(originalPartyBankId: BankId, originalPartyAccountId: AccountId, counterpartyMetadataId: String): Box[CounterpartyMetadata] = {
|
||||
val res = try {
|
||||
Full(
|
||||
Await.result(
|
||||
(counterpartiesActor ? rCounterparties.getMetadata(originalPartyBankId: BankId, originalPartyAccountId: AccountId, counterpartyMetadataId: String)).mapTo[CounterpartyMetadata],
|
||||
TIMEOUT
|
||||
)
|
||||
)
|
||||
}
|
||||
catch {
|
||||
case k: ActorKilledException => Empty ~> APIFailure(s"Can not getMetadata", 404)
|
||||
case e: Throwable => throw e
|
||||
}
|
||||
res
|
||||
}
|
||||
|
||||
override def getCounterparty(counterPartyId: String): Box[CounterpartyTrait] = {
|
||||
val res = try {
|
||||
Full(
|
||||
Await.result(
|
||||
(counterpartiesActor ? rCounterparties.getCounterparty(counterPartyId: String)).mapTo[CounterpartyTrait],
|
||||
TIMEOUT
|
||||
)
|
||||
)
|
||||
}
|
||||
catch {
|
||||
case k: ActorKilledException => Empty ~> APIFailure(s"Can not getCounterparty", 404)
|
||||
case e: Throwable => throw e
|
||||
}
|
||||
res
|
||||
}
|
||||
|
||||
override def getCounterpartyByIban(iban: String): Box[CounterpartyTrait] = {
|
||||
val res = try {
|
||||
Full(
|
||||
Await.result(
|
||||
(counterpartiesActor ? rCounterparties.getCounterpartyByIban(iban: String)).mapTo[CounterpartyTrait],
|
||||
TIMEOUT
|
||||
)
|
||||
)
|
||||
}
|
||||
catch {
|
||||
case k: ActorKilledException => Empty ~> APIFailure(s"Can not getCounterpartyByIban", 404)
|
||||
case e: Throwable => throw e
|
||||
}
|
||||
res
|
||||
}
|
||||
|
||||
override def createCounterparty(createdByUserId: String, thisBankId: String, thisAccountId: String, thisViewId: String, name: String, otherBankId: String, otherAccountId: String, otherAccountRoutingScheme: String, otherAccountRoutingAddress: String, otherBankRoutingScheme: String, otherBankRoutingAddress: String, isBeneficiary: Boolean): Box[CounterpartyTrait] = {
|
||||
val res = try {
|
||||
Full(
|
||||
Await.result(
|
||||
(counterpartiesActor ? rCounterparties.createCounterparty(createdByUserId, thisBankId, thisAccountId, thisViewId, name, otherBankId, otherAccountId,
|
||||
otherAccountRoutingScheme, otherAccountRoutingAddress, otherBankRoutingScheme, otherBankRoutingAddress,
|
||||
isBeneficiary)).mapTo[CounterpartyTrait],
|
||||
TIMEOUT
|
||||
)
|
||||
)
|
||||
}
|
||||
catch {
|
||||
case k: ActorKilledException => Empty ~> APIFailure(s"Can not createCounterparty", 404)
|
||||
case e: Throwable => throw e
|
||||
}
|
||||
res
|
||||
}
|
||||
|
||||
override def checkCounterpartyAvailable(name: String, thisBankId: String, thisAccountId: String, thisViewId: String): Boolean = {
|
||||
Await.result(
|
||||
(counterpartiesActor ? rCounterparties.checkCounterpartyAvailable(name: String, thisBankId: String, thisAccountId: String, thisViewId: String)).mapTo[Boolean],
|
||||
TIMEOUT
|
||||
)
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,119 @@
|
||||
package code.remotedata
|
||||
|
||||
import java.util.concurrent.TimeUnit
|
||||
|
||||
import akka.actor.Actor
|
||||
import akka.event.Logging
|
||||
import akka.util.Timeout
|
||||
import code.metadata.counterparties.{CounterpartyTrait, MapperCounterparties, RemoteCounterpartiesCaseClasses}
|
||||
import code.model._
|
||||
import net.liftweb.common._
|
||||
import net.liftweb.util.ControlHelpers.tryo
|
||||
|
||||
import scala.concurrent.duration._
|
||||
|
||||
|
||||
class RemotedataCounterpartiesActor extends Actor {
|
||||
|
||||
val logger = Logging(context.system, this)
|
||||
|
||||
val mCounterparties = MapperCounterparties
|
||||
val rCounterparties = RemoteCounterpartiesCaseClasses
|
||||
|
||||
def receive = {
|
||||
|
||||
case rCounterparties.checkCounterpartyAvailable(name: String, thisBankId: String, thisAccountId: String, thisViewId: String)=>
|
||||
|
||||
logger.info("checkCounterpartyAvailable(" + name +", "+ thisBankId +", "+ thisAccountId +", "+ thisViewId +")")
|
||||
|
||||
sender ! mCounterparties.checkCounterpartyAvailable(name: String, thisBankId: String, thisAccountId: String, thisViewId: String)
|
||||
|
||||
case rCounterparties.createCounterparty(createdByUserId, thisBankId, thisAccountId, thisViewId,
|
||||
name, otherBankId, otherAccountId, otherAccountRoutingScheme,
|
||||
otherAccountRoutingAddress, otherBankRoutingScheme,
|
||||
otherBankRoutingAddress, isBeneficiary) =>
|
||||
|
||||
logger.info("createCounterparty(" + createdByUserId +", "+ thisBankId +", "+ thisAccountId +", "+ thisViewId +", "+ name +", "+ otherBankId + otherAccountId +", "
|
||||
+ otherAccountRoutingScheme +", "+ otherAccountRoutingAddress +", "+ otherBankRoutingScheme +", "+ otherBankRoutingAddress +", "+ isBeneficiary+ ")")
|
||||
|
||||
{
|
||||
for {
|
||||
res <- mCounterparties.createCounterparty(createdByUserId, thisBankId, thisAccountId, thisViewId, name, otherBankId, otherAccountId,
|
||||
otherAccountRoutingScheme, otherAccountRoutingAddress, otherBankRoutingScheme, otherBankRoutingAddress,
|
||||
isBeneficiary)
|
||||
} yield {
|
||||
sender ! res.asInstanceOf[CounterpartyTrait]
|
||||
}
|
||||
}.getOrElse( context.stop(sender) )
|
||||
|
||||
|
||||
|
||||
case rCounterparties.getOrCreateMetadata(originalPartyBankId: BankId, originalPartyAccountId: AccountId, otherParty: Counterparty) =>
|
||||
|
||||
logger.info("getOrCreateMetadata(" + originalPartyBankId +", " +originalPartyAccountId+otherParty+")")
|
||||
|
||||
{
|
||||
for {
|
||||
res <- mCounterparties.getOrCreateMetadata(originalPartyBankId: BankId, originalPartyAccountId: AccountId, otherParty: Counterparty)
|
||||
} yield {
|
||||
sender ! res.asInstanceOf[CounterpartyMetadata]
|
||||
}
|
||||
}.getOrElse( context.stop(sender) )
|
||||
|
||||
case rCounterparties.getMetadatas(originalPartyBankId: BankId, originalPartyAccountId: AccountId) =>
|
||||
logger.info("getOrCreateMetadata(" + originalPartyBankId +", "+originalPartyAccountId+")")
|
||||
|
||||
Full({
|
||||
for {
|
||||
res <- Full(mCounterparties.getMetadatas(originalPartyBankId: BankId, originalPartyAccountId: AccountId))
|
||||
} yield {
|
||||
sender ! res.asInstanceOf[List[CounterpartyMetadata]]
|
||||
}
|
||||
}).getOrElse(context.stop(sender))
|
||||
|
||||
|
||||
case rCounterparties.getMetadata(originalPartyBankId: BankId, originalPartyAccountId: AccountId, counterpartyMetadataId: String) =>
|
||||
|
||||
logger.info("getMetadata(" + originalPartyBankId +", "+originalPartyAccountId+")")
|
||||
|
||||
{
|
||||
for {
|
||||
res <- mCounterparties.getMetadata(originalPartyBankId: BankId, originalPartyAccountId: AccountId, counterpartyMetadataId: String)
|
||||
} yield {
|
||||
sender ! res.asInstanceOf[CounterpartyMetadata]
|
||||
}
|
||||
}.getOrElse( context.stop(sender) )
|
||||
|
||||
|
||||
|
||||
case rCounterparties.getCounterparty(counterPartyId: String) =>
|
||||
|
||||
logger.info("getCounterparty(" + counterPartyId +")")
|
||||
|
||||
{
|
||||
for {
|
||||
res <- mCounterparties.getCounterparty(counterPartyId: String)
|
||||
} yield {
|
||||
sender ! res.asInstanceOf[CounterpartyTrait]
|
||||
}
|
||||
}.getOrElse( context.stop(sender) )
|
||||
|
||||
|
||||
case rCounterparties.getCounterpartyByIban(iban: String) =>
|
||||
|
||||
logger.info("getOrCreateMetadata(" + iban +")")
|
||||
|
||||
{
|
||||
for {
|
||||
res <- mCounterparties.getCounterpartyByIban(iban: String)
|
||||
} yield {
|
||||
sender ! res.asInstanceOf[CounterpartyTrait]
|
||||
}
|
||||
}.getOrElse( context.stop(sender) )
|
||||
|
||||
|
||||
case message => logger.info("[AKKA ACTOR ERROR - REQUEST NOT RECOGNIZED] " + message)
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
66
src/main/scala/code/remotedata/RemotedataTags.scala
Normal file
66
src/main/scala/code/remotedata/RemotedataTags.scala
Normal file
@ -0,0 +1,66 @@
|
||||
package code.remotedata
|
||||
|
||||
import java.util.Date
|
||||
|
||||
import akka.actor.ActorKilledException
|
||||
import akka.pattern.ask
|
||||
import akka.util.Timeout
|
||||
import code.api.APIFailure
|
||||
import code.metadata.tags.{RemoteTagsCaseClasses, Tags}
|
||||
import code.model._
|
||||
import net.liftweb.common.{Full, _}
|
||||
|
||||
import scala.collection.immutable.List
|
||||
import scala.concurrent.Await
|
||||
import scala.concurrent.duration._
|
||||
|
||||
|
||||
object RemotedataTags extends Tags {
|
||||
|
||||
implicit val timeout = Timeout(10000 milliseconds)
|
||||
val TIMEOUT = 10 seconds
|
||||
val rTags = RemoteTagsCaseClasses
|
||||
var tagsActor = RemotedataActorSystem.getActor("tags")
|
||||
|
||||
|
||||
def getTags(bankId : BankId, accountId : AccountId, transactionId : TransactionId)(viewId : ViewId) : List[TransactionTag] = {
|
||||
Await.result(
|
||||
(tagsActor ? rTags.getTags(bankId, accountId, transactionId, viewId)).mapTo[List[TransactionTag]],
|
||||
TIMEOUT
|
||||
)
|
||||
}
|
||||
|
||||
def addTag(bankId : BankId, accountId : AccountId, transactionId: TransactionId)(userId: UserId, viewId : ViewId, tagText : String, datePosted : Date) : Box[TransactionTag] = {
|
||||
Full(
|
||||
Await.result(
|
||||
(tagsActor ? rTags.addTag(bankId, accountId, transactionId, userId, viewId, tagText, datePosted)).mapTo[TransactionTag],
|
||||
TIMEOUT
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
def deleteTag(bankId : BankId, accountId : AccountId, transactionId: TransactionId)(tagId : String) : Box[Boolean] = {
|
||||
val res = try {
|
||||
Full(
|
||||
Await.result(
|
||||
(tagsActor ? rTags.deleteTag(bankId, accountId, transactionId, tagId)).mapTo[Boolean],
|
||||
TIMEOUT
|
||||
)
|
||||
)
|
||||
}
|
||||
catch {
|
||||
case k: ActorKilledException => Empty ~> APIFailure(s"Cannot delete the tag", 404)
|
||||
case e: Throwable => throw e
|
||||
}
|
||||
res
|
||||
}
|
||||
|
||||
def bulkDeleteTags(bankId: BankId, accountId: AccountId): Boolean = {
|
||||
Await.result(
|
||||
(tagsActor ? rTags.bulkDeleteTags(bankId, accountId)).mapTo[Boolean],
|
||||
TIMEOUT
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
70
src/main/scala/code/remotedata/RemotedataTagsActor.scala
Normal file
70
src/main/scala/code/remotedata/RemotedataTagsActor.scala
Normal file
@ -0,0 +1,70 @@
|
||||
package code.remotedata
|
||||
|
||||
import java.util.concurrent.TimeUnit
|
||||
|
||||
import akka.actor.Actor
|
||||
import akka.event.Logging
|
||||
import akka.util.Timeout
|
||||
import code.metadata.tags.{MappedTags, RemoteTagsCaseClasses}
|
||||
import code.model._
|
||||
import net.liftweb.common._
|
||||
import net.liftweb.util.ControlHelpers.tryo
|
||||
|
||||
import scala.concurrent.duration._
|
||||
|
||||
|
||||
class RemotedataTagsActor extends Actor {
|
||||
|
||||
val logger = Logging(context.system, this)
|
||||
|
||||
val mTags = MappedTags
|
||||
val rTags = RemoteTagsCaseClasses
|
||||
|
||||
def receive = {
|
||||
|
||||
case rTags.getTags(bankId, accountId, transactionId, viewId) =>
|
||||
logger.info("getTags(" + bankId +", "+ accountId +", "+ transactionId +", "+ viewId +")")
|
||||
sender ! mTags.getTags(bankId, accountId, transactionId)(viewId)
|
||||
|
||||
case rTags.addTag(bankId, accountId, transactionId, userId, viewId, text, datePosted) =>
|
||||
logger.info("addTag(" + bankId +", "+ accountId +", "+ transactionId +", "+ text +", "+ text +", "+ datePosted +")")
|
||||
|
||||
{
|
||||
for {
|
||||
res <- mTags.addTag(bankId, accountId, transactionId)(userId, viewId, text, datePosted)
|
||||
} yield {
|
||||
sender ! res.asInstanceOf[TransactionTag]
|
||||
}
|
||||
}.getOrElse( context.stop(sender) )
|
||||
|
||||
case rTags.deleteTag(bankId : BankId, accountId : AccountId, transactionId: TransactionId, tagId : String) =>
|
||||
logger.info("deleteTag(" + bankId +", "+ accountId +", "+ transactionId + tagId +")")
|
||||
|
||||
{
|
||||
for {
|
||||
res <- mTags.deleteTag(bankId, accountId, transactionId)(tagId)
|
||||
} yield {
|
||||
sender ! res.asInstanceOf[Boolean]
|
||||
}
|
||||
}.getOrElse( context.stop(sender) )
|
||||
|
||||
case rTags.bulkDeleteTags(bankId: BankId, accountId: AccountId) =>
|
||||
|
||||
logger.info("bulkDeleteTags(" + bankId +", "+ accountId + ")")
|
||||
|
||||
{
|
||||
for {
|
||||
res <- tryo{mTags.bulkDeleteTags(bankId, accountId)}
|
||||
} yield {
|
||||
sender ! res.asInstanceOf[Boolean]
|
||||
}
|
||||
}.getOrElse( context.stop(sender) )
|
||||
|
||||
|
||||
case message => logger.info("[AKKA ACTOR ERROR - REQUEST NOT RECOGNIZED] " + message)
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
210
src/main/scala/code/remotedata/RemotedataUsers.scala
Normal file
210
src/main/scala/code/remotedata/RemotedataUsers.scala
Normal file
@ -0,0 +1,210 @@
|
||||
package code.remotedata
|
||||
|
||||
import akka.actor.ActorKilledException
|
||||
import akka.pattern.ask
|
||||
import akka.util.Timeout
|
||||
import code.api.APIFailure
|
||||
import code.model.User
|
||||
import code.model.dataAccess.ResourceUser
|
||||
import code.users.{RemoteUserCaseClasses, Users}
|
||||
import net.liftweb.common.{Full, _}
|
||||
|
||||
import scala.collection.immutable.List
|
||||
import scala.concurrent.Await
|
||||
import scala.concurrent.duration._
|
||||
|
||||
|
||||
object RemotedataUsers extends Users {
|
||||
|
||||
implicit val timeout = Timeout(10000 milliseconds)
|
||||
val TIMEOUT = 10 seconds
|
||||
val rUsers = RemoteUserCaseClasses
|
||||
var usersActor = RemotedataActorSystem.getActor("users")
|
||||
|
||||
def getUserByResourceUserId(id : Long) : Box[User] = {
|
||||
val res = try {
|
||||
Full(
|
||||
Await.result(
|
||||
(usersActor ? rUsers.getUserByResourceUserId(id)).mapTo[User],
|
||||
TIMEOUT
|
||||
)
|
||||
)
|
||||
}
|
||||
catch {
|
||||
case k: ActorKilledException => Empty ~> APIFailure(s"User not found", 404)
|
||||
case e: Throwable => throw e
|
||||
}
|
||||
res
|
||||
}
|
||||
|
||||
def getResourceUserByResourceUserId(id : Long) : Box[ResourceUser] = {
|
||||
val res = try {
|
||||
Full(
|
||||
Await.result(
|
||||
(usersActor ? rUsers.getResourceUserByResourceUserId(id)).mapTo[ResourceUser],
|
||||
TIMEOUT
|
||||
)
|
||||
)
|
||||
}
|
||||
catch {
|
||||
case k: ActorKilledException => Empty ~> APIFailure(s"ResourceUser not found", 404)
|
||||
case e: Throwable => throw e
|
||||
}
|
||||
res
|
||||
}
|
||||
|
||||
def getUserByProviderId(provider : String, idGivenByProvider : String) : Box[User] = {
|
||||
val res = try {
|
||||
Full(
|
||||
Await.result(
|
||||
(usersActor ? rUsers.getUserByProviderId(provider, idGivenByProvider)).mapTo[User],
|
||||
TIMEOUT
|
||||
)
|
||||
)
|
||||
}
|
||||
catch {
|
||||
case k: ActorKilledException => Empty ~> APIFailure(s"User not found", 404)
|
||||
case e: Throwable => throw e
|
||||
}
|
||||
res
|
||||
}
|
||||
|
||||
def getUserByUserId(userId : String) : Box[User] = {
|
||||
val res = try {
|
||||
Full(
|
||||
Await.result(
|
||||
(usersActor ? rUsers.getUserByUserId(userId)).mapTo[User],
|
||||
TIMEOUT
|
||||
)
|
||||
)
|
||||
}
|
||||
catch {
|
||||
case k: ActorKilledException => Empty ~> APIFailure(s"User not found", 404)
|
||||
case e: Throwable => throw e
|
||||
}
|
||||
res
|
||||
}
|
||||
|
||||
def getUserByUserName(userName : String) : Box[ResourceUser] = {
|
||||
val res = try {
|
||||
Full(
|
||||
Await.result(
|
||||
(usersActor ? rUsers.getUserByUserName(userName)).mapTo[ResourceUser],
|
||||
TIMEOUT
|
||||
)
|
||||
)
|
||||
}
|
||||
catch {
|
||||
case k: ActorKilledException => Empty ~> APIFailure(s"User not found", 404)
|
||||
case e: Throwable => throw e
|
||||
}
|
||||
res
|
||||
}
|
||||
|
||||
def getUserByEmail(email : String) : Box[List[ResourceUser]] = {
|
||||
val res = try {
|
||||
Full(
|
||||
Await.result(
|
||||
(usersActor ? rUsers.getUserByEmail(email)).mapTo[List[ResourceUser]],
|
||||
TIMEOUT
|
||||
)
|
||||
)
|
||||
}
|
||||
catch {
|
||||
case k: ActorKilledException => Empty ~> APIFailure(s"User not found", 404)
|
||||
case e: Throwable => throw e
|
||||
}
|
||||
res
|
||||
}
|
||||
|
||||
def getAllUsers() : Box[List[ResourceUser]] = {
|
||||
val res = try {
|
||||
Full(
|
||||
Await.result(
|
||||
(usersActor ? rUsers.getAllUsers()).mapTo[List[ResourceUser]],
|
||||
TIMEOUT
|
||||
)
|
||||
)
|
||||
}
|
||||
catch {
|
||||
case k: ActorKilledException => Empty ~> APIFailure(s"Users not found", 404)
|
||||
case e: Throwable => throw e
|
||||
}
|
||||
res
|
||||
}
|
||||
|
||||
def createResourceUser(provider: String, providerId: Option[String], name: Option[String], email: Option[String], userId: Option[String]) : Box[ResourceUser] = {
|
||||
val res = try {
|
||||
Full(
|
||||
Await.result(
|
||||
(usersActor ? rUsers.createResourceUser(provider, providerId, name, email, userId)).mapTo[ResourceUser],
|
||||
TIMEOUT
|
||||
)
|
||||
)
|
||||
}
|
||||
catch {
|
||||
case k: ActorKilledException => Empty ~> APIFailure(s"User not created", 404)
|
||||
case e: Throwable => throw e
|
||||
}
|
||||
res
|
||||
}
|
||||
|
||||
def createUnsavedResourceUser(provider: String, providerId: Option[String], name: Option[String], email: Option[String], userId: Option[String]) : Box[ResourceUser] = {
|
||||
val res = try {
|
||||
Full(
|
||||
Await.result(
|
||||
(usersActor ? rUsers.createUnsavedResourceUser(provider, providerId, name, email, userId)).mapTo[ResourceUser],
|
||||
TIMEOUT
|
||||
)
|
||||
)
|
||||
}
|
||||
catch {
|
||||
case k: ActorKilledException => Empty ~> APIFailure(s"User not created", 404)
|
||||
case e: Throwable => throw e
|
||||
}
|
||||
res
|
||||
}
|
||||
|
||||
def saveResourceUser(resourceUser: ResourceUser) : Box[ResourceUser] = {
|
||||
val res = try {
|
||||
Full(
|
||||
Await.result(
|
||||
(usersActor ? rUsers.saveResourceUser(resourceUser)).mapTo[ResourceUser],
|
||||
TIMEOUT
|
||||
)
|
||||
)
|
||||
}
|
||||
catch {
|
||||
case k: ActorKilledException => Empty ~> APIFailure(s"User not created", 404)
|
||||
case e: Throwable => throw e
|
||||
}
|
||||
res
|
||||
}
|
||||
|
||||
def deleteResourceUser(userId: Long) : Box[Boolean] = {
|
||||
val res = try{
|
||||
Full(
|
||||
Await.result(
|
||||
(usersActor ? rUsers.deleteResourceUser(userId)).mapTo[Boolean],
|
||||
TIMEOUT
|
||||
)
|
||||
)
|
||||
}
|
||||
catch {
|
||||
case k: ActorKilledException => Empty ~> APIFailure(s"User not deleted", 404)
|
||||
case e: Throwable => throw e
|
||||
}
|
||||
res
|
||||
}
|
||||
|
||||
|
||||
def bulkDeleteAllResourceUsers(): Box[Boolean] = {
|
||||
Full(
|
||||
Await.result(
|
||||
(usersActor ? rUsers.bulkDeleteAllResourceUsers()).mapTo[Boolean],
|
||||
TIMEOUT
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
}
|
||||
166
src/main/scala/code/remotedata/RemotedataUsersActor.scala
Normal file
166
src/main/scala/code/remotedata/RemotedataUsersActor.scala
Normal file
@ -0,0 +1,166 @@
|
||||
package code.remotedata
|
||||
|
||||
import java.util.concurrent.TimeUnit
|
||||
|
||||
import akka.actor.Actor
|
||||
import akka.event.Logging
|
||||
import akka.util.Timeout
|
||||
import code.model._
|
||||
import code.model.dataAccess.ResourceUser
|
||||
import code.users.{LiftUsers, RemoteUserCaseClasses}
|
||||
import net.liftweb.common._
|
||||
import net.liftweb.util.ControlHelpers.tryo
|
||||
|
||||
import scala.concurrent.duration._
|
||||
|
||||
|
||||
class RemotedataUsersActor extends Actor {
|
||||
|
||||
val logger = Logging(context.system, this)
|
||||
|
||||
val mUsers = LiftUsers
|
||||
val rUsers = RemoteUserCaseClasses
|
||||
|
||||
def receive = {
|
||||
|
||||
case rUsers.getUserByResourceUserId(id: Long) =>
|
||||
logger.info("getUserByResourceUserId(" + id +")")
|
||||
|
||||
{
|
||||
for {
|
||||
res <- mUsers.getUserByResourceUserId(id)
|
||||
} yield {
|
||||
sender ! res.asInstanceOf[User]
|
||||
}
|
||||
}.getOrElse( context.stop(sender) )
|
||||
|
||||
case rUsers.getResourceUserByResourceUserId(id: Long) =>
|
||||
logger.info("getResourceUserByResourceUserId(" + id +")")
|
||||
|
||||
{
|
||||
for {
|
||||
res <- mUsers.getResourceUserByResourceUserId(id)
|
||||
} yield {
|
||||
sender ! res.asInstanceOf[ResourceUser]
|
||||
}
|
||||
}.getOrElse( context.stop(sender) )
|
||||
|
||||
case rUsers.getUserByProviderId(provider : String, idGivenByProvider : String) =>
|
||||
logger.info("getUserByProviderId(" + provider +"," + idGivenByProvider +")")
|
||||
|
||||
{
|
||||
for {
|
||||
res <- mUsers.getUserByProviderId(provider, idGivenByProvider)
|
||||
} yield {
|
||||
sender ! res.asInstanceOf[User]
|
||||
}
|
||||
}.getOrElse( context.stop(sender) )
|
||||
|
||||
case rUsers.getUserByUserId(userId: String) =>
|
||||
logger.info("getUserByUserId(" + userId +")")
|
||||
|
||||
{
|
||||
for {
|
||||
res <- mUsers.getUserByUserId(userId)
|
||||
} yield {
|
||||
sender ! res.asInstanceOf[User]
|
||||
}
|
||||
}.getOrElse( context.stop(sender) )
|
||||
|
||||
case rUsers.getUserByUserName(userName: String) =>
|
||||
logger.info("getUserByUserName(" + userName +")")
|
||||
|
||||
{
|
||||
for {
|
||||
res <- mUsers.getUserByUserName(userName)
|
||||
} yield {
|
||||
sender ! res.asInstanceOf[ResourceUser]
|
||||
}
|
||||
}.getOrElse( context.stop(sender) )
|
||||
|
||||
case rUsers.getUserByEmail(email: String) =>
|
||||
logger.info("getUserByEmail(" + email +")")
|
||||
|
||||
{
|
||||
for {
|
||||
res <- mUsers.getUserByEmail(email)
|
||||
} yield {
|
||||
sender ! res
|
||||
}
|
||||
}.getOrElse( context.stop(sender) )
|
||||
|
||||
case rUsers.getAllUsers() =>
|
||||
logger.info("getAllUsers()")
|
||||
|
||||
{
|
||||
for {
|
||||
res <- mUsers.getAllUsers()
|
||||
} yield {
|
||||
sender ! res
|
||||
}
|
||||
}.getOrElse( context.stop(sender) )
|
||||
|
||||
case rUsers.createResourceUser(provider: String, providerId: Option[String], name: Option[String], email: Option[String], userId: Option[String]) =>
|
||||
logger.info("createResourceUser(" + provider + ", " + providerId.getOrElse("None") + ", " + name.getOrElse("None") + ", " + email.getOrElse("None") + ", " + userId.getOrElse("None") + ")")
|
||||
|
||||
{
|
||||
for {
|
||||
res <- mUsers.createResourceUser(provider, providerId, name, email, userId)
|
||||
} yield {
|
||||
sender ! res.asInstanceOf[ResourceUser]
|
||||
}
|
||||
}.getOrElse( context.stop(sender) )
|
||||
|
||||
case rUsers.createUnsavedResourceUser(provider: String, providerId: Option[String], name: Option[String], email: Option[String], userId: Option[String]) =>
|
||||
logger.info("createUnsavedResourceUser(" + provider + ", " + providerId.getOrElse("None") + ", " + name.getOrElse("None") + ", " + email.getOrElse("None") + ", " + userId.getOrElse("None") + ")")
|
||||
|
||||
{
|
||||
for {
|
||||
res <- mUsers.createUnsavedResourceUser(provider, providerId, name, email, userId)
|
||||
} yield {
|
||||
sender ! res.asInstanceOf[ResourceUser]
|
||||
}
|
||||
}.getOrElse( context.stop(sender) )
|
||||
|
||||
case rUsers.saveResourceUser(resourceUser: ResourceUser) =>
|
||||
logger.info("saveResourceUser")
|
||||
|
||||
{
|
||||
for {
|
||||
res <- mUsers.saveResourceUser(resourceUser)
|
||||
} yield {
|
||||
sender ! res.asInstanceOf[ResourceUser]
|
||||
}
|
||||
}.getOrElse( context.stop(sender) )
|
||||
|
||||
case rUsers.deleteResourceUser(id: Long) =>
|
||||
logger.info("deleteResourceUser(" + id +")")
|
||||
|
||||
{
|
||||
for {
|
||||
res <- tryo{mUsers.deleteResourceUser(id)}
|
||||
} yield {
|
||||
sender ! res.asInstanceOf[Boolean]
|
||||
}
|
||||
}.getOrElse( context.stop(sender) )
|
||||
|
||||
|
||||
case rUsers.bulkDeleteAllResourceUsers() =>
|
||||
|
||||
logger.info("bulkDeleteAllResourceUsers()")
|
||||
|
||||
{
|
||||
for {
|
||||
res <- mUsers.bulkDeleteAllResourceUsers()
|
||||
} yield {
|
||||
sender ! res.asInstanceOf[Boolean]
|
||||
}
|
||||
}.getOrElse( context.stop(sender) )
|
||||
|
||||
|
||||
case message => logger.info("[AKKA ACTOR ERROR - REQUEST NOT RECOGNIZED] " + message)
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
331
src/main/scala/code/remotedata/RemotedataViews.scala
Normal file
331
src/main/scala/code/remotedata/RemotedataViews.scala
Normal file
@ -0,0 +1,331 @@
|
||||
package code.remotedata
|
||||
|
||||
|
||||
import akka.actor.ActorKilledException
|
||||
import akka.pattern.ask
|
||||
import akka.util.Timeout
|
||||
import code.api.APIFailure
|
||||
import code.model.{CreateViewJSON, Permission, UpdateViewJSON, _}
|
||||
import code.views.{RemoteViewCaseClasses, Views}
|
||||
import net.liftweb.common.{Full, _}
|
||||
|
||||
import scala.collection.immutable.List
|
||||
import scala.concurrent.Await
|
||||
import scala.concurrent.duration._
|
||||
|
||||
|
||||
object RemotedataViews extends Views {
|
||||
|
||||
implicit val timeout = Timeout(10000 milliseconds)
|
||||
val TIMEOUT = 10 seconds
|
||||
val rViews = RemoteViewCaseClasses
|
||||
var viewsActor = RemotedataActorSystem.getActor("views")
|
||||
|
||||
def addPermissions(views: List[ViewUID], user: User): Box[List[View]] = {
|
||||
val res = try {
|
||||
Full(
|
||||
Await.result(
|
||||
(viewsActor ? rViews.addPermissions(views, user)).mapTo[List[View]],
|
||||
TIMEOUT
|
||||
)
|
||||
)
|
||||
}
|
||||
catch {
|
||||
case k: ActorKilledException => Empty ~> APIFailure(s"One or more views not found", 404)
|
||||
case e: Throwable => throw e
|
||||
}
|
||||
res
|
||||
}
|
||||
|
||||
def permission(account: BankAccountUID, user: User): Box[Permission] = {
|
||||
Full(
|
||||
Await.result(
|
||||
(viewsActor ? rViews.permission(account, user)).mapTo[Permission],
|
||||
TIMEOUT
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
def addPermission(viewUID: ViewUID, user: User): Box[View] = {
|
||||
val res = try {
|
||||
Full(
|
||||
Await.result(
|
||||
(viewsActor ? rViews.addPermission(viewUID, user)).mapTo[View],
|
||||
TIMEOUT
|
||||
)
|
||||
)
|
||||
}
|
||||
catch {
|
||||
case k: ActorKilledException => Empty ~> APIFailure(s"View $viewUID. not found", 404)
|
||||
case e: Throwable => throw e
|
||||
}
|
||||
res
|
||||
|
||||
}
|
||||
|
||||
//TODO Fix return values in order to better describe failures
|
||||
def revokePermission(viewUID : ViewUID, user : User) : Box[Boolean] = {
|
||||
val res = try {
|
||||
Full(
|
||||
Await.result(
|
||||
(viewsActor ? rViews.revokePermission(viewUID, user)).mapTo[Boolean],
|
||||
TIMEOUT
|
||||
)
|
||||
)
|
||||
}
|
||||
catch {
|
||||
case k: ClassCastException => k.getMessage match {
|
||||
case "Cannot cast net.liftweb.common.Failure to java.lang.Boolean" =>
|
||||
return Empty ~> APIFailure(s"View $viewUID. not removed", 400)
|
||||
case "Cannot cast net.liftweb.common.ParamFailure to java.lang.Boolean" =>
|
||||
return Empty ~> APIFailure(s"View $viewUID. not found", 404)
|
||||
case _ =>
|
||||
return Empty ~> APIFailure(s"Unknown error", 406)
|
||||
}
|
||||
case e: Throwable => throw e
|
||||
}
|
||||
res
|
||||
}
|
||||
|
||||
def revokeAllPermissions(bankId : BankId, accountId: AccountId, user : User) : Box[Boolean] = {
|
||||
val res = try{
|
||||
Full(
|
||||
Await.result(
|
||||
(viewsActor ? rViews.revokeAllPermissions(bankId, accountId, user)).mapTo[Boolean],
|
||||
TIMEOUT
|
||||
)
|
||||
)
|
||||
}
|
||||
catch {
|
||||
case k: ActorKilledException => Empty ~> Failure("One of the views this user has access to is the owner view, and there would be no one with access" +
|
||||
" to this owner view if access to the user was revoked. No permissions to any views on the account have been revoked.")
|
||||
|
||||
case e: Throwable => throw e
|
||||
}
|
||||
res
|
||||
}
|
||||
|
||||
def view(viewUID : ViewUID) : Box[View] = {
|
||||
val res = try {
|
||||
Full(
|
||||
Await.result(
|
||||
(viewsActor ? rViews.view(viewUID)).mapTo[View],
|
||||
TIMEOUT
|
||||
)
|
||||
)
|
||||
}
|
||||
catch {
|
||||
case k: ActorKilledException => Empty ~> APIFailure(s"View $viewUID. not found", 404)
|
||||
case e: Throwable => throw e
|
||||
}
|
||||
res
|
||||
}
|
||||
|
||||
def view(viewId : ViewId, account: BankAccountUID) : Box[View] = {
|
||||
val res = try {
|
||||
Full(
|
||||
Await.result(
|
||||
(viewsActor ? rViews.view(viewId, account)).mapTo[View],
|
||||
TIMEOUT
|
||||
)
|
||||
)
|
||||
}
|
||||
catch {
|
||||
case k: ActorKilledException => Empty ~> APIFailure(s"View $viewId. not found", 404)
|
||||
case e: Throwable => throw e
|
||||
}
|
||||
res
|
||||
}
|
||||
|
||||
|
||||
def createView(bankAccountId: BankAccountUID, view: CreateViewJSON): Box[View] = {
|
||||
Await.result(
|
||||
(viewsActor ? rViews.createView(bankAccountId, view)).mapTo[Box[View]],
|
||||
TIMEOUT
|
||||
)
|
||||
}
|
||||
|
||||
def updateView(bankAccountId : BankAccountUID, viewId: ViewId, viewUpdateJson : UpdateViewJSON) : Box[View] = {
|
||||
Await.result(
|
||||
(viewsActor ? rViews.updateView(bankAccountId, viewId, viewUpdateJson)).mapTo[Box[View]],
|
||||
TIMEOUT
|
||||
)
|
||||
}
|
||||
|
||||
def removeView(viewId: ViewId, bankAccountId: BankAccountUID): Box[Unit] = {
|
||||
Await.result(
|
||||
(viewsActor ? rViews.removeView(viewId, bankAccountId)).mapTo[Box[Unit]],
|
||||
TIMEOUT
|
||||
)
|
||||
}
|
||||
|
||||
def permissions(account : BankAccountUID) : List[Permission] = {
|
||||
Await.result(
|
||||
(viewsActor ? rViews.permissions(account)).mapTo[List[Permission]],
|
||||
TIMEOUT
|
||||
)
|
||||
}
|
||||
|
||||
def views(bankAccountId : BankAccountUID) : List[View] = {
|
||||
Await.result(
|
||||
(viewsActor ? rViews.views(bankAccountId)).mapTo[List[View]],
|
||||
TIMEOUT
|
||||
)
|
||||
}
|
||||
|
||||
def permittedViews(user: User, bankAccountId: BankAccountUID): List[View] = {
|
||||
Await.result(
|
||||
(viewsActor ? rViews.permittedViews(user, bankAccountId)).mapTo[List[View]],
|
||||
TIMEOUT
|
||||
)
|
||||
}
|
||||
|
||||
def publicViews(bankAccountId : BankAccountUID) : List[View] = {
|
||||
Await.result(
|
||||
(viewsActor ? rViews.publicViews(bankAccountId)).mapTo[List[View]],
|
||||
TIMEOUT
|
||||
)
|
||||
}
|
||||
|
||||
def getAllPublicAccounts() : List[BankAccountUID] = {
|
||||
Await.result(
|
||||
(viewsActor ? rViews.getAllPublicAccounts()).mapTo[List[BankAccountUID]],
|
||||
TIMEOUT
|
||||
)
|
||||
}
|
||||
|
||||
def getPublicBankAccounts(bank : Bank) : List[BankAccountUID] = {
|
||||
Await.result(
|
||||
(viewsActor ? rViews.getPublicBankAccounts(bank)).mapTo[List[BankAccountUID]],
|
||||
TIMEOUT
|
||||
)
|
||||
}
|
||||
|
||||
def getAllAccountsUserCanSee(user : Box[User]) : List[BankAccountUID] = {
|
||||
user match {
|
||||
case Full(theUser) => {
|
||||
Await.result (
|
||||
(viewsActor ? rViews.getAllAccountsUserCanSee(theUser)).mapTo[List[BankAccountUID]],
|
||||
TIMEOUT)
|
||||
}
|
||||
case _ => getAllPublicAccounts()
|
||||
}
|
||||
}
|
||||
|
||||
def getAllAccountsUserCanSee(bank: Bank, user : Box[User]) : List[BankAccountUID] = {
|
||||
user match {
|
||||
case Full(theUser) => {
|
||||
Await.result(
|
||||
(viewsActor ? rViews.getAllAccountsUserCanSee(bank, theUser)).mapTo[List[BankAccountUID]],
|
||||
TIMEOUT
|
||||
)
|
||||
}
|
||||
case _ => getPublicBankAccounts(bank)
|
||||
}
|
||||
}
|
||||
|
||||
def getNonPublicBankAccounts(user : User) : List[BankAccountUID] = {
|
||||
Await.result(
|
||||
(viewsActor ? rViews.getNonPublicBankAccounts(user)).mapTo[List[BankAccountUID]],
|
||||
TIMEOUT
|
||||
)
|
||||
}
|
||||
|
||||
def getNonPublicBankAccounts(user : User, bankId : BankId) : List[BankAccountUID] = {
|
||||
Await.result(
|
||||
(viewsActor ? rViews.getNonPublicBankAccounts(user, bankId)).mapTo[List[BankAccountUID]],
|
||||
TIMEOUT
|
||||
)
|
||||
}
|
||||
|
||||
def grantAccessToAllExistingViews(user : User) = {
|
||||
Await.result(
|
||||
(viewsActor ? rViews.grantAccessToAllExistingViews(user)).mapTo[Boolean],
|
||||
TIMEOUT
|
||||
)
|
||||
}
|
||||
|
||||
def grantAccessToView(user : User, view : View) = {
|
||||
Await.result(
|
||||
(viewsActor ? rViews.grantAccessToView(user, view)).mapTo[Boolean],
|
||||
TIMEOUT
|
||||
)
|
||||
}
|
||||
|
||||
def getOwners(view: View) : Set[User] = {
|
||||
Await.result(
|
||||
(viewsActor ? rViews.getOwners(view)).mapTo[Set[User]],
|
||||
TIMEOUT
|
||||
)
|
||||
}
|
||||
|
||||
def createOwnerView(bankId: BankId, accountId: AccountId, description: String) : Box[View] = {
|
||||
Full(Await.result(
|
||||
(viewsActor ? rViews.createOwnerView(bankId, accountId, description)).mapTo[View],
|
||||
TIMEOUT
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
def createPublicView(bankId: BankId, accountId: AccountId, description: String) : Box[View] = {
|
||||
Full(Await.result(
|
||||
(viewsActor ? rViews.createPublicView(bankId, accountId, description)).mapTo[View],
|
||||
TIMEOUT
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
def createAccountantsView(bankId: BankId, accountId: AccountId, description: String) : Box[View] = {
|
||||
Full(Await.result(
|
||||
(viewsActor ? rViews.createAccountantsView(bankId, accountId, description)).mapTo[View],
|
||||
TIMEOUT
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
def createAuditorsView(bankId: BankId, accountId: AccountId, description: String) : Box[View] = {
|
||||
Full(Await.result(
|
||||
(viewsActor ? rViews.createAuditorsView(bankId, accountId, description)).mapTo[View],
|
||||
TIMEOUT
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
def createRandomView(bankId: BankId, accountId: AccountId) : Box[View] = {
|
||||
Full(Await.result(
|
||||
(viewsActor ? rViews.createRandomView(bankId, accountId)).mapTo[View],
|
||||
TIMEOUT
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
def viewExists(bankId: BankId, accountId: AccountId, name: String): Boolean = {
|
||||
Await.result(
|
||||
(viewsActor ? rViews.viewExists(bankId, accountId, name)).mapTo[Boolean],
|
||||
TIMEOUT
|
||||
)
|
||||
}
|
||||
|
||||
def removeAllViews(bankId: BankId, accountId: AccountId): Boolean = {
|
||||
Await.result(
|
||||
(viewsActor ? rViews.removeAllViews(bankId, accountId)).mapTo[Boolean],
|
||||
TIMEOUT
|
||||
)
|
||||
}
|
||||
|
||||
def removeAllPermissions(bankId: BankId, accountId: AccountId): Boolean = {
|
||||
Await.result(
|
||||
(viewsActor ? rViews.removeAllViews(bankId, accountId)).mapTo[Boolean],
|
||||
TIMEOUT
|
||||
)
|
||||
}
|
||||
|
||||
// bulkDeletes for tests
|
||||
def bulkDeleteAllPermissionsAndViews(): Boolean = {
|
||||
Await.result(
|
||||
(viewsActor ? rViews.bulkDeleteAllPermissionsAndViews()).mapTo[Boolean],
|
||||
TIMEOUT
|
||||
)
|
||||
}
|
||||
|
||||
}
|
||||
237
src/main/scala/code/remotedata/RemotedataViewsActor.scala
Normal file
237
src/main/scala/code/remotedata/RemotedataViewsActor.scala
Normal file
@ -0,0 +1,237 @@
|
||||
package code.remotedata
|
||||
|
||||
import java.util.concurrent.TimeUnit
|
||||
|
||||
import akka.actor.Actor
|
||||
import akka.event.Logging
|
||||
import akka.util.Timeout
|
||||
import code.views.{MapperViews, RemoteViewCaseClasses}
|
||||
import code.model._
|
||||
import net.liftweb.common._
|
||||
import net.liftweb.util.ControlHelpers.tryo
|
||||
|
||||
import scala.concurrent.duration._
|
||||
|
||||
|
||||
class RemotedataViewsActor extends Actor {
|
||||
|
||||
val logger = Logging(context.system, this)
|
||||
|
||||
val mViews = MapperViews
|
||||
val rViews = RemoteViewCaseClasses
|
||||
|
||||
def receive = {
|
||||
|
||||
case rViews.addPermissions(views : List[ViewUID], user : User) =>
|
||||
|
||||
logger.info("addPermissions(" + views +"," + user +")")
|
||||
|
||||
{
|
||||
for {
|
||||
res <- mViews.addPermissions(views, user)
|
||||
} yield {
|
||||
sender ! res.asInstanceOf[List[View]]
|
||||
}
|
||||
}.getOrElse( context.stop(sender) )
|
||||
|
||||
|
||||
case rViews.addPermission(viewUID : ViewUID, user : User) =>
|
||||
|
||||
logger.info("addPermission(" + viewUID +"," + user +")")
|
||||
|
||||
{
|
||||
for {
|
||||
res <- mViews.addPermission(viewUID, user)
|
||||
} yield {
|
||||
sender ! res.asInstanceOf[View]
|
||||
}
|
||||
}.getOrElse( context.stop(sender) )
|
||||
|
||||
|
||||
case rViews.permission(account : BankAccountUID, user: User) =>
|
||||
|
||||
logger.info("permission(" + account +"," + user +")")
|
||||
|
||||
{
|
||||
for {
|
||||
res <- mViews.permission(account, user)
|
||||
} yield {
|
||||
sender ! res.asInstanceOf[Permission]
|
||||
}
|
||||
}.getOrElse( context.stop(sender) )
|
||||
|
||||
|
||||
//TODO Fix return values in order to better describe failures
|
||||
case rViews.revokePermission(viewUID : ViewUID, user : User) =>
|
||||
|
||||
logger.info("revokePermission(" + viewUID +"," + user +")")
|
||||
|
||||
|
||||
val res = mViews.revokePermission(viewUID, user)
|
||||
res match {
|
||||
case Full(r) => sender ! r
|
||||
case f => sender ! f
|
||||
}
|
||||
|
||||
case rViews.revokeAllPermissions(bankId : BankId, accountId : AccountId, user : User) =>
|
||||
|
||||
logger.info("revokeAllPermissions(" + bankId +"," + accountId +","+ user +")")
|
||||
|
||||
{
|
||||
for {
|
||||
res <- mViews.revokeAllPermissions(bankId, accountId, user)
|
||||
} yield {
|
||||
sender ! res.asInstanceOf[Boolean]
|
||||
}
|
||||
}.getOrElse( context.stop(sender) )
|
||||
|
||||
|
||||
case rViews.view(viewUID : ViewUID) =>
|
||||
|
||||
logger.info("view(" + viewUID +")")
|
||||
|
||||
{
|
||||
for {
|
||||
res <- mViews.view(viewUID)
|
||||
} yield {
|
||||
sender ! res.asInstanceOf[View]
|
||||
}
|
||||
}.getOrElse( context.stop(sender) )
|
||||
|
||||
|
||||
case rViews.view(viewId: ViewId, bankAccountId: BankAccountUID) =>
|
||||
|
||||
logger.info("view(" + viewId +", "+ bankAccountId + ")")
|
||||
|
||||
{
|
||||
for {
|
||||
res <- mViews.view(viewId, bankAccountId)
|
||||
} yield {
|
||||
sender ! res.asInstanceOf[View]
|
||||
}
|
||||
}.getOrElse( context.stop(sender) )
|
||||
|
||||
case rViews.createView(bankAccountId : BankAccountUID, view: CreateViewJSON) =>
|
||||
logger.info("createView(" + bankAccountId +","+ view +")")
|
||||
sender ! mViews.createView(bankAccountId, view)
|
||||
|
||||
case rViews.updateView(bankAccountId : BankAccountUID, viewId : ViewId, viewUpdateJson : UpdateViewJSON) =>
|
||||
logger.info("updateView(" + bankAccountId +","+ viewId +","+ viewUpdateJson +")")
|
||||
sender ! mViews.updateView(bankAccountId, viewId, viewUpdateJson)
|
||||
|
||||
//case r.view(viewId: ViewId, bankAccountId: BankAccountUID) =>
|
||||
// logger.info("view(" + viewId +","+ bankAccountId +")")
|
||||
// sender ! v.view(ViewId(viewId.value), bankAccountId)
|
||||
|
||||
case rViews.removeView(viewId : ViewId, bankAccountId: BankAccountUID) =>
|
||||
logger.info("removeView(" + viewId +","+ bankAccountId +")")
|
||||
sender ! mViews.removeView(viewId, bankAccountId)
|
||||
|
||||
case rViews.permissions(bankAccountId : BankAccountUID) =>
|
||||
logger.info("premissions(" + bankAccountId +")")
|
||||
sender ! mViews.permissions(bankAccountId)
|
||||
|
||||
case rViews.views(bankAccountId : BankAccountUID) =>
|
||||
logger.info("views(" + bankAccountId +")")
|
||||
sender ! mViews.views(bankAccountId)
|
||||
|
||||
case rViews.permittedViews(user: User, bankAccountId: BankAccountUID) =>
|
||||
logger.info("permittedViews(" + user +", " + bankAccountId +")")
|
||||
sender ! mViews.permittedViews(user, bankAccountId)
|
||||
|
||||
case rViews.publicViews(bankAccountId : BankAccountUID) =>
|
||||
logger.info("publicViews(" + bankAccountId +")")
|
||||
sender ! mViews.publicViews(bankAccountId)
|
||||
|
||||
case rViews.getAllPublicAccounts() =>
|
||||
logger.info("getAllPublicAccounts()")
|
||||
sender ! mViews.getAllPublicAccounts
|
||||
|
||||
case rViews.getPublicBankAccounts(bank : Bank) =>
|
||||
logger.info("getPublicBankAccounts(" + bank +")")
|
||||
sender ! mViews.getPublicBankAccounts(bank)
|
||||
|
||||
case rViews.getAllAccountsUserCanSee(user : Box[User]) =>
|
||||
logger.info("getAllAccountsUserCanSee(" + user +")")
|
||||
sender ! mViews.getAllAccountsUserCanSee(user)
|
||||
|
||||
case rViews.getAllAccountsUserCanSee(user : User) =>
|
||||
logger.info("getAllAccountsUserCanSee(" + user +")")
|
||||
sender ! mViews.getAllAccountsUserCanSee(Full(user))
|
||||
|
||||
case rViews.getAllAccountsUserCanSee(bank: Bank, user : Box[User]) =>
|
||||
logger.info("getAllAccountsUserCanSee(" + bank +", "+ user +")")
|
||||
sender ! mViews.getAllAccountsUserCanSee(bank, user)
|
||||
|
||||
case rViews.getAllAccountsUserCanSee(bank: Bank, user : User) =>
|
||||
logger.info("getAllAccountsUserCanSee(" + bank +", "+ user +")")
|
||||
sender ! mViews.getAllAccountsUserCanSee(bank, Full(user))
|
||||
|
||||
case rViews.getNonPublicBankAccounts(user: User, bankId: BankId) =>
|
||||
logger.info("getNonPublicBankAccounts(" + user +", "+ bankId +")")
|
||||
sender ! mViews.getNonPublicBankAccounts(user, bankId)
|
||||
|
||||
case rViews.getNonPublicBankAccounts(user: User) =>
|
||||
logger.info("getNonPublicBankAccounts(" + user +")")
|
||||
sender ! mViews.getNonPublicBankAccounts(user)
|
||||
|
||||
case rViews.createOwnerView(bankId, accountId, description) =>
|
||||
logger.info("createOwnerView(" + bankId +", "+ accountId +", "+ description +")")
|
||||
sender ! mViews.createOwnerView(bankId, accountId, description).orNull
|
||||
|
||||
case rViews.createPublicView(bankId, accountId, description) =>
|
||||
logger.info("createPublicView(" + bankId +", "+ accountId +", "+ description +")")
|
||||
sender ! mViews.createPublicView(bankId, accountId, description).orNull
|
||||
|
||||
case rViews.createAccountantsView(bankId, accountId, description) =>
|
||||
logger.info("createAccountantsView(" + bankId +", "+ accountId +", "+ description +")")
|
||||
sender ! mViews.createAccountantsView(bankId, accountId, description).orNull
|
||||
|
||||
case rViews.createAuditorsView(bankId, accountId, description) =>
|
||||
logger.info("createAuditorsView(" + bankId +", "+ accountId +", "+ description +")")
|
||||
sender ! mViews.createAuditorsView(bankId, accountId, description).orNull
|
||||
|
||||
case rViews.createRandomView(bankId, accountId) =>
|
||||
logger.info("createRandomView(" + bankId +", "+ accountId +")")
|
||||
sender ! mViews.createRandomView(bankId, accountId).orNull
|
||||
|
||||
case rViews.getOwners(view) =>
|
||||
logger.info("getOwners(" + view +")")
|
||||
sender ! mViews.getOwners(view)
|
||||
|
||||
case rViews.grantAccessToView(user, view) =>
|
||||
logger.info("grantAccessToView(" + user +", "+ view +")")
|
||||
sender ! mViews.grantAccessToView(user, view)
|
||||
|
||||
case rViews.grantAccessToAllExistingViews(user) =>
|
||||
logger.info("grantAccessToAllExistingViews(" + user +")")
|
||||
sender ! mViews.grantAccessToAllExistingViews(user)
|
||||
|
||||
case rViews.removeAllPermissions(bankId, accountId) =>
|
||||
logger.info("removeAllPermissions(" + bankId +", "+ accountId +")")
|
||||
sender ! mViews.removeAllPermissions(bankId, accountId)
|
||||
|
||||
case rViews.removeAllViews(bankId, accountId) =>
|
||||
logger.info("removeAllViews(" + bankId +", "+ accountId +")")
|
||||
sender ! mViews.removeAllViews(bankId, accountId)
|
||||
|
||||
|
||||
case rViews.bulkDeleteAllPermissionsAndViews() =>
|
||||
|
||||
logger.info("bulkDeleteAllPermissionsAndViews()")
|
||||
|
||||
{
|
||||
for {
|
||||
res <- tryo{mViews.bulkDeleteAllPermissionsAndViews()}
|
||||
} yield {
|
||||
sender ! res.asInstanceOf[Boolean]
|
||||
}
|
||||
}.getOrElse( context.stop(sender) )
|
||||
|
||||
|
||||
case message => logger.info("[AKKA ACTOR ERROR - REQUEST NOT RECOGNIZED] " + message)
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -4,14 +4,14 @@ import net.liftweb.util.SimpleInjector
|
||||
import net.liftweb.common.Box
|
||||
import code.model.User
|
||||
import code.model.dataAccess.ResourceUser
|
||||
import code.remotedata.Remotedata
|
||||
import code.remotedata.RemotedataUsers
|
||||
|
||||
object Users extends SimpleInjector {
|
||||
|
||||
val users = new Inject(buildOne _) {}
|
||||
|
||||
def buildOne: Users = LiftUsers
|
||||
//def buildOne: Users = Remotedata
|
||||
//def buildOne: Users = LiftUsers
|
||||
def buildOne: Users = RemotedataUsers
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -5,15 +5,15 @@ import code.model._
|
||||
import net.liftweb.util.SimpleInjector
|
||||
import code.model.Permission
|
||||
import code.model.CreateViewJSON
|
||||
import code.remotedata.Remotedata
|
||||
import code.remotedata.RemotedataViews
|
||||
|
||||
object Views extends SimpleInjector {
|
||||
|
||||
val views = new Inject(buildOne _) {}
|
||||
|
||||
//TODO Remove MapperViews when Remotedata is optimized and stable
|
||||
def buildOne: Views = MapperViews
|
||||
//def buildOne: Views = Remotedata
|
||||
//def buildOne: Views = MapperViews
|
||||
def buildOne: Views = RemotedataViews
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -121,7 +121,7 @@ trait LocalMappedConnectorTestSetup extends TestConnectorSetupWithStandardPermis
|
||||
|
||||
//empty the relational db tables after each test
|
||||
ToSchemify.models.filterNot(exclusion).foreach(_.bulkDelete_!!())
|
||||
if (!Props.getBool("enable_remotedata", false)) {
|
||||
if (!Props.getBool("remotedata.enable", false)) {
|
||||
ToSchemify.modelsRemotedata.filterNot(exclusion).foreach(_.bulkDelete_!!())
|
||||
} else {
|
||||
Views.views.vend.bulkDeleteAllPermissionsAndViews()
|
||||
|
||||
@ -53,7 +53,7 @@ trait TestConnectorSetupWithStandardPermissions extends TestConnectorSetup {
|
||||
|
||||
//empty the relational db tables after each test
|
||||
ToSchemify.models.filterNot(exclusion).foreach(_.bulkDelete_!!())
|
||||
if (!Props.getBool("enable_remotedata", false)) {
|
||||
if (!Props.getBool("remotedata.enable", false)) {
|
||||
ToSchemify.modelsRemotedata.filterNot(exclusion).foreach(_.bulkDelete_!!())
|
||||
} else {
|
||||
Views.views.vend.bulkDeleteAllPermissionsAndViews()
|
||||
|
||||
@ -92,7 +92,7 @@ class SandboxDataLoadingTest extends FlatSpec with SendServerRequests with Shoul
|
||||
//drop database tables before
|
||||
//MongoDB.getDb(DefaultMongoIdentifier).foreach(_.dropDatabase())
|
||||
ToSchemify.models.foreach(_.bulkDelete_!!())
|
||||
if (!Props.getBool("enable_remotedata", false)) {
|
||||
if (!Props.getBool("remotedata.enable", false)) {
|
||||
ToSchemify.modelsRemotedata.foreach(_.bulkDelete_!!())
|
||||
} else {
|
||||
Views.views.vend.bulkDeleteAllPermissionsAndViews()
|
||||
|
||||
Loading…
Reference in New Issue
Block a user