All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.florinn.veryfay.ActivityRegistry.scala Maven / Gradle / Ivy

package com.github.florinn.veryfay

import scala.util.Try
import scala.reflect.runtime.universe.Type

private[veryfay] class ActivityRegistry {
  private val registeredPermissions = scala.collection.mutable.Map.empty[(Class[_ <: Activity[_]], Type), ActivityPermissionListType]

  def add[T <: Activity[_]](activity: T, ps: PermissionSet): Unit = activity match {
    case container: Container[_] =>
      for (a <- container.activities)
        this.add(a, ps)
    case simple => this.addActivityPermissions(activity, ps)
  }

  private def addActivityPermissions[T <: Activity[_]](activity: T, ps: PermissionSet) = {
    val activityPermissionList = registeredPermissions.getOrElse((activity.getClass, activity.target.tpe), List.empty)
    registeredPermissions += ((activity.getClass, activity.target.tpe) -> (activityPermissionList :+ ps))
  }

  def get[T <: Activity[_]](activity: T): Try[ActivityPermissionListType] =
    Try{
      registeredPermissions.filterKeys {
        case (x, y) =>
          x == activity.getClass &&
            y =:= activity.target.tpe
      }.values.toList match {
        case x :: xs => x
        case _ => throw new RuntimeException(s"no registered activity of type ${activity} - ${activity.target}")
      }}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy