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

lspace.librarian.process.computer.TransactionStreamComputer.scala Maven / Gradle / Ivy

There is a newer version: 0.6.0.12
Show newest version
package lspace.librarian.process.computer

import java.time.Instant

import lspace.librarian.process.traversal.{TraversalPath, Traverser}
import lspace.librarian.structure.{Graph, Resource}

/**
  *
  * @param tempGraph a temporary graph with modifications on top of the original graph
  */
class TransactionStreamComputer(tempGraph: Graph) extends DefaultStreamComputer {
  private class TransactionStreamComputerTraverser[+T](val path: TraversalPath = TraversalPath(),
                                                       val loops: Int = 0,
                                                       val mit: Option[Instant] = None,
                                                       val permissions: List[String] = List())(val _get: T)
      extends Traverser[T] {
    lazy val get: T = (_get match {
      case r: Resource[_] =>
        tempGraph.resources.hasId(r.id).getOrElse(throw new Exception("traverser at foreign resource"))
      case _ => _get
    }).asInstanceOf[T]

    def apply[V](get: V,
                 path: TraversalPath = TraversalPath(),
                 loops: Int = 0,
                 mit: Option[Instant] = None,
                 permissions: List[String] = List()): Traverser[V] =
      new TransactionStreamComputerTraverser(path, loops, mit, permissions)(get)

  }

  override def createTraverser[T](get: T,
                                  path: TraversalPath = TraversalPath(),
                                  loops: Int = 0,
                                  mit: Option[Instant] = None,
                                  permissions: List[String] = List()): Traverser[T] =
    new TransactionStreamComputerTraverser(path, loops, mit, permissions)(get)
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy