001 package org.apache.camel.component.file.strategy; 002 003 import java.io.File; 004 005 import org.apache.camel.Expression; 006 import org.apache.camel.component.file.FileExchange; 007 008 /** 009 * File renamed using {@link Expression} to dynamically compute the file name. 010 * <p/> 011 * If most cases the {@link org.apache.camel.language.simple.FileLanguage FileLanguage} is used to 012 * create the expressions. 013 */ 014 public class FileExpressionRenamer implements FileRenamer { 015 016 private static final boolean ON_WINDOWS = System.getProperty("os.name").startsWith("Windows"); 017 018 private Expression expression; 019 020 public File renameFile(FileExchange exchange, File file) { 021 if (expression == null) { 022 throw new IllegalArgumentException("Expression is not set"); 023 } 024 File parent = file.getParentFile(); 025 026 Object result = expression.evaluate(exchange); 027 String name = exchange.getContext().getTypeConverter().convertTo(String.class, result); 028 029 if (ON_WINDOWS && (name.indexOf(":") >= 0 || name.startsWith("//"))) { 030 return new File(name); 031 } 032 return new File(parent, name); 033 } 034 035 public Expression getExpression() { 036 return expression; 037 } 038 039 public void setExpression(Expression expression) { 040 this.expression = expression; 041 } 042 }