/* * Copyright 2016 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.springframework.integration.file.dsl; import java.io.File; import java.util.Comparator; import java.util.function.Function; import org.springframework.expression.Expression; import org.springframework.integration.file.transformer.FileToByteArrayTransformer; import org.springframework.integration.file.transformer.FileToStringTransformer; import org.springframework.messaging.Message; /** * The Spring Integration File components Factory. * * @author Artem Bilan * * @since 5.0 */ public abstract class Files { /** * Create a {@link FileInboundChannelAdapterSpec} builder for the {@code FileReadingMessageSource}. * @param directory the directory to scan files. * @return the {@link FileInboundChannelAdapterSpec} instance. */ public static FileInboundChannelAdapterSpec inboundAdapter(File directory) { return inboundAdapter(directory, null); } /** * Create a {@link FileInboundChannelAdapterSpec} builder for the {@code FileReadingMessageSource}. * @param directory the directory to scan files. * @param receptionOrderComparator the {@link Comparator} for ordering file objects. * @return the {@link FileInboundChannelAdapterSpec} instance. */ public static FileInboundChannelAdapterSpec inboundAdapter(File directory, Comparator<File> receptionOrderComparator) { return new FileInboundChannelAdapterSpec(receptionOrderComparator).directory(directory); } /** * Create a {@link FileWritingMessageHandlerSpec} builder for the one-way {@code FileWritingMessageHandler}. * @param destinationDirectory the target directory to write files. * @return the {@link FileWritingMessageHandlerSpec} instance. */ public static FileWritingMessageHandlerSpec outboundAdapter(File destinationDirectory) { return new FileWritingMessageHandlerSpec(destinationDirectory).expectReply(false); } /** * Create a {@link FileWritingMessageHandlerSpec} builder for the one-way {@code FileWritingMessageHandler}. * @param directoryExpression the SpEL expression to evaluate target directory for writing files. * @return the {@link FileWritingMessageHandlerSpec} instance. */ public static FileWritingMessageHandlerSpec outboundAdapter(String directoryExpression) { return new FileWritingMessageHandlerSpec(directoryExpression).expectReply(false); } /** * Create a {@link FileWritingMessageHandlerSpec} builder for the one-way {@code FileWritingMessageHandler}. * @param directoryExpression an expression to evaluate the target directory. * @return the {@link FileWritingMessageHandlerSpec} instance. */ public static FileWritingMessageHandlerSpec outboundAdapter(Expression directoryExpression) { return new FileWritingMessageHandlerSpec(directoryExpression).expectReply(false); } /** * Create a {@link FileWritingMessageHandlerSpec} builder for the one-way {@code FileWritingMessageHandler}. * @param directoryFunction the {@link Function} to evaluate the target directory at runtime. * @param <P> the payload type. * @return the {@link FileWritingMessageHandlerSpec} instance. */ public static <P> FileWritingMessageHandlerSpec outboundAdapter(Function<Message<P>, ?> directoryFunction) { return new FileWritingMessageHandlerSpec(directoryFunction).expectReply(false); } /** * Create a {@link FileWritingMessageHandlerSpec} builder for the gateway {@code FileWritingMessageHandler}. * @param destinationDirectory the target directory to write files. * @return the {@link FileWritingMessageHandlerSpec} instance. */ public static FileWritingMessageHandlerSpec outboundGateway(File destinationDirectory) { return new FileWritingMessageHandlerSpec(destinationDirectory).expectReply(true); } /** * Create a {@link FileWritingMessageHandlerSpec} builder for the gateway {@code FileWritingMessageHandler}. * @param directoryExpression the SpEL expression to evaluate target directory for writing files. * @return the {@link FileWritingMessageHandlerSpec} instance. */ public static FileWritingMessageHandlerSpec outboundGateway(String directoryExpression) { return new FileWritingMessageHandlerSpec(directoryExpression).expectReply(true); } /** * Create a {@link FileWritingMessageHandlerSpec} based on the provided {@link Expression} for directory. * @param directoryExpression an expression to evaluate the target directory. * @return the FileWritingMessageHandlerSpec instance. */ public static FileWritingMessageHandlerSpec outboundGateway(Expression directoryExpression) { return new FileWritingMessageHandlerSpec(directoryExpression).expectReply(true); } /** * Create a {@link FileWritingMessageHandlerSpec} builder for the gateway {@code FileWritingMessageHandler}. * @param directoryFunction the {@link Function} to evaluate the target directory at runtime. * @param <P> the payload type. * @return the {@link FileWritingMessageHandlerSpec} instance. */ public static <P> FileWritingMessageHandlerSpec outboundGateway(Function<Message<P>, ?> directoryFunction) { return new FileWritingMessageHandlerSpec(directoryFunction).expectReply(true); } /** * Create a {@link TailAdapterSpec} builder for the {@code FileTailingMessageProducerSupport}. * @param file the file to tail. * @return the {@link TailAdapterSpec} instance. */ public static TailAdapterSpec tailAdapter(File file) { return new TailAdapterSpec().file(file); } /** * The {@link FileSplitterSpec} builder factory method with default arguments. * @return the {@link FileSplitterSpec} builder. */ 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. */ public static FileSplitterSpec splitter(boolean iterator) { return splitter(iterator, false); } /** * The {@link FileSplitterSpec} builder factory method with {@code iterator} and {@code markers} * flags specified. * @param iterator the {@code boolean} flag to specify the {@code iterator} mode or not. * @param markers true to emit start of file/end of file marker messages before/after the data. * @return the {@link FileSplitterSpec} builder. */ public static FileSplitterSpec splitter(boolean iterator, boolean markers) { return new FileSplitterSpec(iterator, markers); } /** * Create a {@link FileToStringTransformer} instance with default {@code charset} and no delete files afterwards. * @return the {@link FileToStringTransformer}. */ public static FileToStringTransformer toStringTransformer() { return toStringTransformer(false); } /** * Create a {@link FileToStringTransformer} instance with default {@code charset} and with delete files flag. * @param deleteFiles true to delete the file. * @return the {@link FileToStringTransformer}. */ public static FileToStringTransformer toStringTransformer(boolean deleteFiles) { return toStringTransformer(null, deleteFiles); } /** * Create a {@link FileToStringTransformer} instance with provided {@code charset} and no delete files afterwards. * @param charset The charset. * @return the {@link FileToStringTransformer}. */ public static FileToStringTransformer toStringTransformer(String charset) { return toStringTransformer(charset, false); } /** * Create a {@link FileToStringTransformer} instance with provided {@code charset} and delete files flag. * @param charset The charset. * @param deleteFiles true to delete the file. * @return the {@link FileToStringTransformer}. */ public static FileToStringTransformer toStringTransformer(String charset, boolean deleteFiles) { FileToStringTransformer transformer = new FileToStringTransformer(); if (charset != null) { transformer.setCharset(charset); } transformer.setDeleteFiles(deleteFiles); return transformer; } /** * Create a {@link FileToByteArrayTransformer} instance. * @return the {@link FileToByteArrayTransformer}. */ public static FileToByteArrayTransformer toByteArrayTransformer() { return toByteArrayTransformer(false); } /** * Create a {@link FileToByteArrayTransformer} instance. * @param deleteFiles specify whether to delete the File after transformation. * Default is <em>false</em>. * @return the {@link FileToByteArrayTransformer}. */ public static FileToByteArrayTransformer toByteArrayTransformer(boolean deleteFiles) { FileToByteArrayTransformer fileToByteArrayTransformer = new FileToByteArrayTransformer(); fileToByteArrayTransformer.setDeleteFiles(deleteFiles); return fileToByteArrayTransformer; } }