2. Loaders - aegisql/conveyor GitHub Wiki

Table of Contents

Loaders

Loaders are immutable helper objects that build and submit carts/commands without exposing conveyor internals.

Loaders code

Conveyor accessors:

public interface Conveyor<K, L, OUT> {
    PartLoader<K, L> part();
    StaticPartLoader<L> staticPart();
    BuilderLoader<K, OUT> build();
    FutureLoader<K, OUT> future();
    CommandLoader<K, OUT> command();

    ResultConsumerLoader<K, OUT> resultConsumer();
    ResultConsumerLoader<K, OUT> resultConsumer(ResultConsumer<K, OUT> consumer);

    ScrapConsumerLoader<K> scrapConsumer();
    ScrapConsumerLoader<K> scrapConsumer(ScrapConsumer<K, ?> scrapConsumer);
}

PartLoader

PartLoader sends data parts to builds.

Common methods:

  • id(K id) - target one build key.
  • foreach() / foreach(SerializablePredicate<K>) - target all/matching active keys.
  • label(L label) - part label.
  • value(Object value) - part payload.
  • creationTime(...), expirationTime(...), ttl(...) - timing control.
  • priority(long) / increasePriority() - message priority.
  • addProperty(String,Object), addProperties(Map<String,Object>).
  • clearProperty(String), clearProperties().
  • place() - submit and return CompletableFuture<Boolean>.

Example:

conveyor.part()
       .id(123)
       .label("FIRST")
       .value("John")
       .ttl(1, TimeUnit.SECONDS)
       .addProperty("source", "api")
       .place();

StaticPartLoader

StaticPartLoader sets conveyor-level static values (applied to new builds).

Methods:

  • label(L label)
  • value(Object value)
  • priority(long)
  • delete() - remove static value for label.
  • addProperty(String,Object), addProperties(Map<String,Object>)
  • place()

BuilderLoader

BuilderLoader creates builds.

Methods:

  • id(K id)
  • supplier(BuilderSupplier<OUT>)
  • creationTime(...), expirationTime(...), ttl(...)
  • priority(long)
  • addProperty(...), addProperties(...), clearProperty(...), clearProperties()
  • create() - CompletableFuture<Boolean>
  • createFuture() - CompletableFuture<OUT>

FutureLoader

FutureLoader gets product futures.

Methods:

  • id(K id)
  • creationTime(...), expirationTime(...), ttl(...)
  • priority(long)
  • addProperty(...), addProperties(...), clearProperty(...), clearProperties()
  • get() - CompletableFuture<OUT>

CommandLoader and MultiKeyCommandLoader

CommandLoader sends high-priority lifecycle commands.

Single-key workflow (id(...)):

  • Timing: creationTime(...), expirationTime(...), ttl(...)
  • Lifecycle: create(), create(builderSupplier), cancel(), timeout(), reschedule(), check()
  • Completion overrides: complete(OUT), completeExceptionally(Throwable)
  • Properties: addProperty(...), addProperties(...)
  • Inspection: peek(), peek(Consumer<ProductBin<K,OUT>>), peekId(Consumer<K>), memento(), memento(Consumer<Memento>), restore(memento)
  • Conveyor control: suspend()

Foreach workflow (foreach() / foreach(Predicate<K>)) returns MultiKeyCommandLoader:

  • Supported: cancel, timeout, reschedule, addProperty, addProperties, peek, peekId, memento
  • Not available in MultiKey loader: create, check, complete, completeExceptionally, restore, suspend

ResultConsumerLoader

ResultConsumerLoader configures result consumer chains globally or per-build.

Methods:

  • Targeting: id(...), foreach(), foreach(predicate)
  • Chain: first(...), andThen(...), before(...)
  • Timing/priority: creationTime(...), expirationTime(...), ttl(...), priority(...)
  • Properties: addProperty(...), addProperties(...), clearProperty(...), clearProperties()
  • set() - apply chain and return CompletableFuture<Boolean>

ScrapConsumerLoader

ScrapConsumerLoader configures default scrap consumer chain.

Methods:

  • first(...)
  • andThen(...)
  • set()

Note: unlike result consumers, scrap consumer configuration is conveyor-level.

Get Loaders by Conveyor name

If only loader access is needed, retrieve by conveyor name:

PartLoader.byConveyorName("name");
StaticPartLoader.byConveyorName("name");
BuilderLoader.byConveyorName("name");
CommandLoader.byConveyorName("name");
FutureLoader.byConveyorName("name");
ResultConsumerLoader.byConveyorName("name");
ScrapConsumerLoader.byConveyorName("name");

Lazy Loader suppliers

Lazy suppliers can be obtained before conveyor creation:

PartLoader.lazySupplier("name").get();
StaticPartLoader.lazySupplier("name").get();
BuilderLoader.lazySupplier("name").get();
CommandLoader.lazySupplier("name").get();
FutureLoader.lazySupplier("name").get();
ResultConsumerLoader.lazySupplier("name").get();
ScrapConsumerLoader.lazySupplier("name").get();
⚠️ **GitHub.com Fallback** ⚠️