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

eventstore.j.Builder.scala Maven / Gradle / Ivy

package eventstore
package j

trait Builder[T] {
  def build: T
}

trait ChainSet[T] { self: T =>
  protected def set(f: => Any): T = { f; this }
}

object Builder {
  trait ExpectVersionSnippet[T] extends ChainSet[T] { self: T =>
    protected var _expectVersion: ExpectedVersion = ExpectedVersion.Any

    def expectNoStream: T = expectVersion(ExpectedVersion.NoStream)
    def expectAnyVersion: T = expectVersion(ExpectedVersion.Any)
    def expectVersion(x: Long): T = expectVersion(ExpectedVersion.Exact(x))
    def expectVersion(x: ExpectedVersion): T = set {
      _expectVersion = x
    }
  }

  trait ResolveLinkTosSnippet[T] extends ChainSet[T] { self: T =>
    protected var _resolveLinkTos = akka.Settings.Default.resolveLinkTos

    def resolveLinkTos(x: Boolean): T = set {
      _resolveLinkTos = x
    }
  }

  trait RequireMasterSnippet[T] extends ChainSet[T] { self: T =>
    protected var _requireMaster: Boolean = akka.Settings.Default.requireMaster

    def requireMaster(x: Boolean): T = set {
      _requireMaster = x
    }

    def performOnAnyNode: T = requireMaster(x = false)

    def performOnMasterOnly: T = requireMaster(x = true)
  }

  trait EventDataSnippet[T] extends ChainSet[T] { self: T =>
    import scala.collection.mutable.ListBuffer
    import core.ScalaCompat.JavaConverters._

    protected var _events: ListBuffer[EventData] = new ListBuffer()

    def addEvent(x: EventData): T = set {
      _events += x
    }

    def addEvents(xs: java.lang.Iterable[EventData]): T = set {
      _events ++= xs.asScala
    }

    def event(x: EventData): T = set {
      _events = new ListBuffer()
      addEvent(x)
    }

    def events(xs: java.lang.Iterable[EventData]): T = set {
      _events = new ListBuffer()
      addEvents(xs)
    }
  }

  trait MaxCountSnippet[T] extends ChainSet[T] { self: T =>
    protected var _maxCount = akka.Settings.Default.readBatchSize

    def maxCount(x: Int): T = set {
      _maxCount = x
    }
  }

  trait DirectionSnippet[T] extends ChainSet[T] { self: T =>
    protected var _direction: ReadDirection = eventstore.ReadDirection.Forward

    def forward: T = set {
      _direction = eventstore.ReadDirection.Forward
    }

    def backward: T = set {
      _direction = eventstore.ReadDirection.Backward
    }
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy