Merge pull request #672 from garyrussell/INT-2438

* INT-2438: Fix Temporary Remote Directory
This commit is contained in:
Mark Fisher
2012-11-09 14:48:57 -05:00
2 changed files with 50 additions and 18 deletions

View File

@@ -45,6 +45,7 @@ import org.springframework.util.StringUtils;
* @author Josh Long * @author Josh Long
* @author Oleg Zhurakousky * @author Oleg Zhurakousky
* @author David Turanski * @author David Turanski
* @author Gary Russell
* @since 2.0 * @since 2.0
*/ */
public class FileTransferringMessageHandler<F> extends AbstractMessageHandler { public class FileTransferringMessageHandler<F> extends AbstractMessageHandler {
@@ -130,6 +131,7 @@ public class FileTransferringMessageHandler<F> extends AbstractMessageHandler {
this.temporaryFileSuffix = temporaryFileSuffix; this.temporaryFileSuffix = temporaryFileSuffix;
} }
@Override
protected void onInit() throws Exception { protected void onInit() throws Exception {
Assert.notNull(this.directoryExpressionProcessor, "remoteDirectoryExpression is required"); Assert.notNull(this.directoryExpressionProcessor, "remoteDirectoryExpression is required");
if (this.autoCreateDirectory){ if (this.autoCreateDirectory){
@@ -149,7 +151,7 @@ public class FileTransferringMessageHandler<F> extends AbstractMessageHandler {
String remoteDirectory = this.directoryExpressionProcessor.processMessage(message); String remoteDirectory = this.directoryExpressionProcessor.processMessage(message);
String temporaryRemoteDirectory = remoteDirectory; String temporaryRemoteDirectory = remoteDirectory;
if (this.temporaryDirectoryExpressionProcessor != null){ if (this.temporaryDirectoryExpressionProcessor != null){
temporaryRemoteDirectory = this.directoryExpressionProcessor.processMessage(message); temporaryRemoteDirectory = this.temporaryDirectoryExpressionProcessor.processMessage(message);
} }
String fileName = this.fileNameGenerator.generateFileName(message); String fileName = this.fileNameGenerator.generateFileName(message);
this.sendFileToRemoteDirectory(file, temporaryRemoteDirectory, remoteDirectory, fileName, session); this.sendFileToRemoteDirectory(file, temporaryRemoteDirectory, remoteDirectory, fileName, session);

View File

@@ -17,6 +17,7 @@
package org.springframework.integration.file.remote.handler; package org.springframework.integration.file.remote.handler;
import static junit.framework.Assert.assertFalse; import static junit.framework.Assert.assertFalse;
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.mock; import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times; import static org.mockito.Mockito.times;
@@ -24,12 +25,14 @@ import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
import java.io.InputStream; import java.io.InputStream;
import java.util.concurrent.atomic.AtomicReference;
import org.junit.Test; import org.junit.Test;
import org.mockito.Mockito; import org.mockito.Mockito;
import org.mockito.invocation.InvocationOnMock; import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer; import org.mockito.stubbing.Answer;
import org.springframework.expression.ExpressionParser; import org.springframework.expression.ExpressionParser;
import org.springframework.expression.common.LiteralExpression;
import org.springframework.expression.spel.standard.SpelExpressionParser; import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.integration.Message; import org.springframework.integration.Message;
import org.springframework.integration.file.remote.session.Session; import org.springframework.integration.file.remote.session.Session;
@@ -39,6 +42,7 @@ import org.springframework.integration.support.MessageBuilder;
/** /**
* @author Oleg Zhurakousky * @author Oleg Zhurakousky
* @author Gary Russell
*/ */
public class FileTransferringMessageHandlerTests { public class FileTransferringMessageHandlerTests {
@@ -64,6 +68,32 @@ public class FileTransferringMessageHandlerTests {
verify(session, times(1)).write(Mockito.any(InputStream.class), Mockito.anyString()); verify(session, times(1)).write(Mockito.any(InputStream.class), Mockito.anyString());
} }
@SuppressWarnings("unchecked")
@Test
public <F> void testTemporaryRemoteDir() throws Exception{
SessionFactory<F> sf = mock(SessionFactory.class);
Session<F> session = mock(Session.class);
final AtomicReference<String> temporaryPath = new AtomicReference<String>();
final AtomicReference<String> finalPath = new AtomicReference<String>();
when(sf.getSession()).thenReturn(session);
doAnswer(new Answer<Object>() {
public Object answer(InvocationOnMock invocation) throws Throwable {
temporaryPath.set((String) invocation.getArguments()[0]);
finalPath.set((String) invocation.getArguments()[1]);
return null;
}
}).when(session).rename(Mockito.anyString(), Mockito.anyString());
FileTransferringMessageHandler<F> handler = new FileTransferringMessageHandler<F>(sf);
handler.setRemoteDirectoryExpression(new LiteralExpression("foo"));
handler.setTemporaryRemoteDirectoryExpression(new LiteralExpression("bar"));
handler.afterPropertiesSet();
handler.handleMessage(new GenericMessage<String>("hello"));
verify(session, times(1)).write(Mockito.any(InputStream.class), Mockito.anyString());
assertEquals("bar", temporaryPath.get().substring(0, 3));
assertEquals("foo", finalPath.get().substring(0, 3));
}
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
@Test @Test
public <F> void testRemoteDirWithNull() throws Exception{ public <F> void testRemoteDirWithNull() throws Exception{