package net.sf.xbus.technical.file;
import java.io.BufferedWriter;
import net.sf.xbus.base.core.Constants;
import net.sf.xbus.base.core.XException;
import net.sf.xbus.base.linereader.LineReader;
import net.sf.xbus.base.xbussystem.XBUSSystem;
import net.sf.xbus.technical.ObjectSender;
import net.sf.xbus.technical.Sender;
/**
* <code></code>
*
* @author d�wel
*/
public class FileLineWriterSender extends FileSender
implements
Sender,
ObjectSender
{
private XBUSSystem mDestination = null;
/**
* Constructor for FileLineWriterSender.
*
* @param system
* @throws XException
*/
public FileLineWriterSender(XBUSSystem system) throws XException
{
super(system);
mDestination = system;
}
public Object execute(String function, Object source) throws XException
{
senderExecuted = true;
LineReader reader = null;
BufferedWriter buffOut = null;
try
{
reader = (LineReader) source;
reader.prepareReading(mDestination);
buffOut = prepareWriter(mConfiguration.getFileNames()[0], 0);
String record = reader.readRecord();
String lastRecord = "";
if (record != null)
{
buffOut.write(record);
lastRecord = record;
record = reader.readRecord();
} // while (record != null)
while (record != null)
{
buffOut.write(Constants.LINE_SEPERATOR);
buffOut.write(record);
lastRecord = record;
record = reader.readRecord();
} // while (record != null)
// Writing an end of file sign on Unix systems
if (Constants.LINE_SEPERATOR.equals("\n")
&& (lastRecord.length() == 0 || lastRecord
.charAt(lastRecord.length() - 1) != '\n'))
buffOut.newLine();
}
catch (Exception e)
{
throw new XException(Constants.LOCATION_EXTERN,
Constants.LAYER_TECHNICAL,
Constants.PACKAGE_TECHNICAL_FILE, "0", e);
}
finally
{
try
{
if (reader != null)
{
reader.terminateReading();
}
if (buffOut != null)
{
buffOut.close();
}
}
catch (Exception e)
{
/*
* do nothing
*/
}
}
return null;
}
public String getType()
{
return Constants.TYPE_OBJECT;
}
}