You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

72 lines
2.4 KiB

// package org.gerweck.scalafx.akka
// import language.implicitConversions
// import scala.collection.mutable.{ Clearable, Growable }
// import scala.concurrent._
// import scala.concurrent.duration._
// import scala.util._
// import akka.{ Done, NotUsed }
// import akka.stream.Materializer
// import akka.stream.scaladsl._
// import scalafx.application.Platform.runLater
// import scalafx.beans.Observable
// import scalafx.beans.property._
// import org.gerweck.scalafx.util.FutureObservable
// trait AkkaFXCollections extends Any {
// implicit def sourceToRichSource[A, B](source: Source[A, B]) = new AkkaFXCollections.RichSource(source)
// }
// object AkkaFXCollections {
// def collectionWriterSink[A]
// (buffer: Observable with Growable[A] with Clearable,
// clearFirst: Boolean,
// groupingSize: Int = 50, groupingTimeout: FiniteDuration = 100.milliseconds)
// : Sink[A, Future[Done]] = {
// sealed trait PopulateAction
// case class InsertRows(data: Seq[A]) extends PopulateAction
// case object ClearData extends PopulateAction
// val grouping = {
// Flow[A]
// .groupedWithin(groupingSize, groupingTimeout)
// .map(InsertRows)
// .named("GroupInsertActions")
// }
// val clearData = {
// if (clearFirst)
// Source.single(ClearData)
// else
// Source.empty
// }.named("OptionalClearAction")
// val combinedSource: Flow[A, PopulateAction, NotUsed] = grouping.prepend(clearData)
// combinedSource .toMat {
// Sink .foreach[PopulateAction] {
// case ClearData => runLater { buffer.clear() }
// case InsertRows(data) => runLater { buffer ++= data }
// } .named("BufferWriter")
// }(Keep.right)
// }
// class RichSource[A, B](val inner: Source[A, B]) extends AnyVal {
// def populateCollection[C >: A]
// (buffer: Observable with Growable[C] with Clearable,
// clearFirst: Boolean,
// groupingSize: Int = 50, groupingTimeout: FiniteDuration = 100.milliseconds)
// (implicit mat: Materializer, ec: ExecutionContext)
// : ReadOnlyObjectProperty[Option[Try[Done]]] = {
// val sink = collectionWriterSink(buffer, clearFirst, groupingSize, groupingTimeout)
// val graph = inner.toMat(sink)(Keep.right)
// FutureObservable.ofTryOption(graph.run())
// }
// }
// }