001 /**
002 *
003 * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
004 * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
005 * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
006 * License. You may obtain a copy of the License at
007 *
008 * http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
011 * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
012 * specific language governing permissions and limitations under the License.
013 */
014
015 package org.apache.camel.component.file;
016
017 import java.io.File;
018 import java.io.RandomAccessFile;
019 import java.nio.ByteBuffer;
020 import java.nio.channels.FileChannel;
021 import org.apache.camel.Producer;
022 import org.apache.camel.impl.DefaultProducer;
023 import org.apache.commons.logging.Log;
024 import org.apache.commons.logging.LogFactory;
025
026 /**
027 * A {@link Producer} implementation for File
028 *
029 * @version $Revision: 523016 $
030 */
031 public class FileProducer extends DefaultProducer<FileExchange>{
032
033 private static final transient Log log=LogFactory.getLog(FileProducer.class);
034 private final FileEndpoint endpoint;
035
036 public FileProducer(FileEndpoint endpoint){
037 super(endpoint);
038 this.endpoint=endpoint;
039 }
040
041 /**
042 * @param exchange
043 * @see org.apache.camel.Processor#process(java.lang.Object)
044 */
045 public void process(FileExchange exchange){
046 ByteBuffer payload=exchange.getIn().getBody(ByteBuffer.class);
047 payload.flip();
048 File file=null;
049 if(endpoint.getFile()!=null&&endpoint.getFile().isDirectory()){
050 file=new File(endpoint.getFile(),exchange.getFile().getName());
051 }else{
052 file=exchange.getFile();
053 }
054 try{
055 FileChannel fc=new RandomAccessFile(file,"rw").getChannel();
056 fc.position(fc.size());
057 fc.write(payload);
058 fc.close();
059 }catch(Throwable e){
060 log.error("Failed to write to File: "+file,e);
061 }
062 }
063 }