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

com.networknt.tram.command.consumer.CommandHandlersBuilder Maven / Gradle / Ivy

package com.networknt.tram.command.consumer;


import com.networknt.tram.message.common.Message;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Optional;
import java.util.function.BiFunction;

public class CommandHandlersBuilder {
  private String channel;
  private Optional resource = Optional.empty();

  private List handlers = new ArrayList<>();

  public static CommandHandlersBuilder fromChannel(String channel) {
    return new CommandHandlersBuilder().andFromChannel(channel);
  }

  private CommandHandlersBuilder andFromChannel(String channel) {
    this.channel = channel;
    return this;
  }

  public CommandHandlersBuilder resource(String resource) {
    this.resource = Optional.of(resource);
    return this;
  }

  public  CommandHandlersBuilder onMessageReturningMessages(Class commandClass,
                                                               BiFunction, PathVariables, List> handler) {
    this.handlers.add(new CommandHandler(channel, resource, commandClass, handler));
    return this;
  }

  public  CommandHandlersBuilder onMessageReturningOptionalMessage(Class commandClass,
                                                                      BiFunction, PathVariables, Optional> handler) {
    this.handlers.add(new CommandHandler(channel, resource, commandClass,
            (c, pv) -> handler.apply(c, pv).map(Collections::singletonList).orElse(Collections.EMPTY_LIST)));
    return this;
  }

  public  CommandHandlersBuilder onMessage(Class commandClass,
                                              BiFunction, PathVariables, Message> handler) {
    this.handlers.add(new CommandHandler(channel, resource, commandClass, (c, pv) -> Collections.singletonList(handler.apply(c, pv))));
    return this;
  }

  public CommandHandlers build() {
    return new CommandHandlers(handlers);
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy