All Downloads are FREE. Search and download functionalities are using the official Maven repository.
Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
lspace.provider.transaction.TResource.scala Maven / Gradle / Ivy
package lspace.provider.transaction
import lspace.provider.mem.MemResource
import lspace.structure._
import scala.collection.mutable
object TResource {}
trait TResource[T] extends MemResource[T] {
val graph: Transaction
def id: Long = self.id
val deletedEdges: mutable.Set[Long] = mutable.Set[Long]()
override def iri: String = self.iri
override def iris: Set[String] = self.iris
override def out(key: Property*): List[Any] =
super.out(key: _*) ++ self
.outE(key: _*)
.filterNot(e => deletedEdges.contains(e.id))
.map(_.to.asInstanceOf[graph.parent._Resource[Any]])
.map(graph.wrapTR(_).map(_.value).value())
override def outMap(key: Property*): Map[Property, List[Any]] =
Seq(
super.outMap(key: _*),
self
.outE(key: _*)
.filterNot(e => deletedEdges.contains(e.id))
.groupBy(_.key)
.mapValues(_.map(_.to.asInstanceOf[graph.parent._Resource[Any]]).map(graph.wrapTR(_).map(_.value).value())) //wrapTR brings nested resources (aka within collections) in transaction context
).reduceLeft((r, m) =>
m.foldLeft(r) {
case (dict, (k, v)) => dict + (k -> (v ++ dict.getOrElse(k, List())))
})
override def outE(key: Property*): List[Edge[T, Any]] =
super.outE(key: _*) ++ self
.outE(key: _*)
.filterNot(e => deletedEdges.contains(e.id))
.map(_.asInstanceOf[graph.parent._Resource[Edge[T, Any]]])
.map(graph.wrapTR(_).value())
.asInstanceOf[List[Edge[T, Any]]]
override def outEMap(key: Property*): Map[Property, List[Edge[T, Any]]] =
Seq(
super.outEMap(key: _*),
self
.outE(key: _*)
.filterNot(e => deletedEdges.contains(e.id))
.map(_.asInstanceOf[graph.parent._Resource[Edge[T, Any]]])
.map(graph.wrapTR(_).value().asInstanceOf[Edge[T, Any]])
.groupBy(_.key)
).reduceLeft((r, m) =>
m.foldLeft(r) {
case (dict, (k, v)) => dict + (k -> (v ++ dict.getOrElse(k, List())))
})
override def in(key: Property*): List[Any] =
super.in(key: _*) ++ self
.inE(key: _*)
.filterNot(e => deletedEdges.contains(e.id))
.map(_.from.asInstanceOf[graph.parent._Resource[Edge[Any, T]]])
.map(graph.wrapTR(_).map(_.value).value())
override def inMap(key: Property*): Map[Property, List[Any]] =
Seq(
super.inMap(key: _*),
self
.inE(key: _*)
.filterNot(e => deletedEdges.contains(e.id))
.groupBy(_.key)
.mapValues(_.map(_.from.asInstanceOf[graph.parent._Resource[Any]]).map(graph.wrapTR(_).map(_.value).value()))
).reduceLeft((r, m) =>
m.foldLeft(r) {
case (dict, (k, v)) => dict + (k -> (v ++ dict.getOrElse(k, List())))
})
override def inE(key: Property*): List[Edge[Any, T]] =
super.inE(key: _*) ++ self
.inE(key: _*)
.filterNot(e => deletedEdges.contains(e.id))
.map(_.asInstanceOf[graph.parent._Resource[Edge[Any, T]]])
.map(graph.wrapTR(_).value())
.asInstanceOf[List[Edge[Any, T]]]
override def inEMap(key: Property*): Map[Property, List[Edge[Any, T]]] =
Seq(
super.inEMap(key: _*),
self
.inE(key: _*)
.filterNot(e => deletedEdges.contains(e.id))
.map(_.asInstanceOf[graph.parent._Resource[Edge[Any, T]]])
.map(graph.wrapTR(_).value().asInstanceOf[Edge[Any, T]])
.groupBy(_.key)
).reduceLeft((r, m) =>
m.foldLeft(r) {
case (dict, (k, v)) => dict + (k -> (v ++ dict.getOrElse(k, List())))
})
}