package camelinaction.goal; import java.io.InputStream; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; import camelinaction.util.IOHelper; import org.apache.camel.Component; import org.apache.camel.Consumer; import org.apache.camel.Processor; import org.apache.camel.Producer; import org.apache.camel.component.ResourceEndpoint; public class GoalEndpoint extends ResourceEndpoint { public GoalEndpoint(String endpointUri, Component component, String resourceUri) { super(endpointUri, component, resourceUri); } @Override public boolean isSingleton() { return true; } @Override public Producer createProducer() throws Exception { // load games from resource InputStream is = getResourceAsInputStream(); String text = IOHelper.loadText(is); // store games in a list Stream<String> stream = Arrays.stream(text.split("\n")); List<String> games = stream.collect(Collectors.toList()); // create producer with the games return new GoalProducer(this, games); } @Override public Consumer createConsumer(Processor processor) throws Exception { // load goals from resource InputStream is = getResourceAsInputStream(); String text = IOHelper.loadText(is); // split each line Stream<String> stream = Arrays.stream(text.split("\n")); // sort goals scored on minutes stream = stream.sorted((a, b) -> goalTime(a).compareTo(goalTime(b))); // store goals in a list List<String> goals = stream.collect(Collectors.toList()); // create consumer with the goals return new GoalConsumer(this, processor, goals); } private static Integer goalTime(String line) { return Integer.valueOf(line.split(",")[1]); } }