/* * codjo.net * * Common Apache License 2.0 */ package net.codjo.broadcast.server; import net.codjo.broadcast.common.BroadcastException; import net.codjo.broadcast.common.Context; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.sql.Connection; import java.sql.SQLException; import org.apache.log4j.Logger; /** * Generateur de fichier par d�faut. * * @author $Author: galaber $ * @version $Revision: 1.4 $ */ class DefaultFileGenerator implements FileGenerator { private static final Logger APP = Logger.getLogger(DefaultFileGenerator.class); private String fileHeader; private boolean hasFileHeader; private boolean hasSectionSeparator; private FileSectionGenerator[] sections; DefaultFileGenerator(FileSectionGenerator[] sections, boolean hasFileHeader, String header, boolean hasSectionSeparator) { this.sections = sections; this.hasSectionSeparator = hasSectionSeparator; this.hasFileHeader = hasFileHeader; this.fileHeader = header; } /** * @return Le fichier genere */ public File generate(Context context, Connection connection) throws IOException, SQLException, BroadcastException { File generatedFile = File.createTempFile("EXPORT", null); PrintWriter writer = new PrintWriter(new FileWriter(generatedFile)); try { if (generate(context, writer, connection) >= 0) { writer.close(); return generatedFile; } else { APP.info("delete du fichier : " + generatedFile); cleanup(writer, generatedFile); return null; } } catch (RuntimeException ex) { cleanup(writer, generatedFile); throw ex; } catch (SQLException ex) { cleanup(writer, generatedFile); throw ex; } catch (IOException ex) { cleanup(writer, generatedFile); throw ex; } } int generate(Context context, PrintWriter writer, Connection connection) throws IOException, SQLException, BroadcastException { int sectionLines = 0; if (hasFileHeader && fileHeader != null) { writer.println(context.replaceVariables(fileHeader)); } for (int i = 0; i < sections.length; i++) { sectionLines += sections[i].generate(context, connection, writer); if (hasSectionSeparator && (i + 1) < sections.length) { writer.println(); } } writer.flush(); return sectionLines; } private void cleanup(PrintWriter writer, File generatedFile) { writer.close(); generatedFile.delete(); } }