/** * The {@link FileSplitterSpec} builder factory method with default arguments. * @return the {@link FileSplitterSpec} builder. * @since 1.1 */ public static FileSplitterSpec splitter() { return splitter(true); }
/** * The {@link FileSplitterSpec} builder factory method with {@code iterator} flag specified. * @param iterator the {@code boolean} flag to specify the {@code iterator} mode or not. * @return the {@link FileSplitterSpec} builder. * @since 1.1 */ public static FileSplitterSpec splitter(boolean iterator) { return splitter(iterator, false); }
/** * The {@link FileSplitterSpec} builder factory method with {@code iterator} flag specified. * @param iterator the {@code boolean} flag to specify the {@code iterator} mode or not. * @return the {@link FileSplitterSpec} builder. * @since 1.1 */ public static FileSplitterSpec splitter(boolean iterator) { return splitter(iterator, false); }
/** * The {@link FileSplitterSpec} builder factory method with default arguments. * @return the {@link FileSplitterSpec} builder. * @since 1.1 */ public static FileSplitterSpec splitter() { return splitter(true); }
/** * Enhance an {@link IntegrationFlowBuilder} to add flow snippets, depending on * {@link FileConsumerProperties}. * @param flowBuilder the flow builder. * @param fileConsumerProperties the properties. * @return the updated flow builder. */ public static IntegrationFlowBuilder enhanceFlowForReadingMode(IntegrationFlowBuilder flowBuilder, FileConsumerProperties fileConsumerProperties) { switch (fileConsumerProperties.getMode()) { case contents: flowBuilder.enrichHeaders(Collections.<String, Object>singletonMap(MessageHeaders.CONTENT_TYPE, "application/octet-stream")) .transform(Transformers.fileToByteArray()); break; case lines: flowBuilder.enrichHeaders(Collections.<String, Object>singletonMap(MessageHeaders.CONTENT_TYPE, "text/plain")) .split(Files.splitter(true, fileConsumerProperties.getWithMarkers())); case ref: break; default: throw new IllegalArgumentException(fileConsumerProperties.getMode().name() + " is not a supported file reading mode."); } return flowBuilder; }
@Bean public IntegrationFlow fileSplitterFlow() { return IntegrationFlows .from(s -> s.file(tmpDir.getRoot()) .patternFilter("foo.tmp"), e -> e.poller(p -> p.fixedDelay(100))) .split(Files.splitter() .markers() .charset(StandardCharsets.US_ASCII) .applySequence(true), e -> e.id("fileSplitter")) .channel(c -> c.queue("fileSplittingResultChannel")) .get(); }
@Bean public IntegrationFlow fileSplitterAggregator() { return IntegrationFlows .from(Files.inboundAdapter(new File("/tmp/in")) .autoCreateDirectory(true) .patternFilter("*.txt"), e -> e.poller(Pollers.fixedDelay(5000))) .split(Files.splitter() .markers() .applySequence(true)) .filter(p -> !(p instanceof FileSplitter.FileMarker), e -> e.discardChannel("aggregatorChannel")) .<String, Name>transform(Name::new) .<Name>filter(p -> !p.getValue().startsWith("X")) .channel("aggregatorChannel") .aggregate(a -> a.processor(new FileMarkerAggregator())) .<List<Name>, Names>transform(Names::new) .transform(Transformers.marshaller(jaxbMarshaller(), new ResultToStringTransformer())) .handle(Files.outboundAdapter("'/tmp/out'") .fileNameGenerator(m -> m .getHeaders() .get(FileHeaders.FILENAME, String.class) .replace(".txt", ".xml")) .autoCreateDirectory(true)) .get(); }