rrenkert@6217: package org.dive4elements.river.exports.minfo; rrenkert@6217: rrenkert@6217: import gnu.trove.TDoubleArrayList; rrenkert@6217: rrenkert@6217: import java.io.IOException; rrenkert@6217: import java.io.OutputStream; rrenkert@6217: import java.text.NumberFormat; rrenkert@6217: import java.util.LinkedList; rrenkert@6217: import java.util.List; rrenkert@6217: rrenkert@6217: import org.apache.log4j.Logger; rrenkert@6217: import org.dive4elements.artifacts.CallContext; rrenkert@6217: import org.dive4elements.river.artifacts.model.CalculationResult; rrenkert@6217: import org.dive4elements.river.artifacts.model.minfo.BedDifferencesResult; rrenkert@6217: import org.dive4elements.river.exports.AbstractExporter; rrenkert@6217: import org.dive4elements.river.utils.Formatter; rrenkert@6217: import org.w3c.dom.Document; rrenkert@6217: rrenkert@6217: import au.com.bytecode.opencsv.CSVWriter; rrenkert@6217: rrenkert@6217: rrenkert@6217: public class BedDifferenceExporter rrenkert@6217: extends AbstractExporter rrenkert@6217: { rrenkert@6217: rrenkert@6217: /** Private logger. */ rrenkert@6217: private static Logger logger = rrenkert@6217: Logger.getLogger(BedDifferenceExporter.class); rrenkert@6217: rrenkert@6217: private static final String CSV_HEADER_KM = "export.minfo.beddifference.km"; rrenkert@6217: private static final String CSV_HEADER_DIFF = rrenkert@6217: "export.minfo.beddifference.diff"; rrenkert@6217: rrenkert@6217: private BedDifferencesResult[] results; rrenkert@6217: rrenkert@6217: @Override rrenkert@6217: public void init(Document request, OutputStream out, CallContext context) { rrenkert@6217: logger.debug("BedQualityExporter.init"); rrenkert@6217: super.init(request, out, context); rrenkert@6217: results = new BedDifferencesResult[0]; rrenkert@6217: } rrenkert@6217: @Override rrenkert@6217: protected void writeCSVData(CSVWriter writer) throws IOException { rrenkert@6217: writeCSVHeader(writer); rrenkert@6217: rrenkert@6217: NumberFormat kmf = Formatter.getCalculationKm(context.getMeta()); rrenkert@6217: NumberFormat mf = Formatter.getMeterFormat(context); rrenkert@6217: for (int i = 0; i < results.length; i++) { rrenkert@6217: BedDifferencesResult result = results[i]; rrenkert@6217: double[][] kms = result.getDifferencesData(); rrenkert@6217: for (int j = 0; j < kms[0].length; j++) { rrenkert@6217: writer.writeNext(new String[] { rrenkert@6217: kmf.format(kms[0][j]), mf.format(kms[1][j])}); rrenkert@6217: } rrenkert@6217: } rrenkert@6217: } rrenkert@6217: rrenkert@6217: @Override rrenkert@6217: protected void writePDF(OutputStream out) { rrenkert@6217: // TODO implement me! rrenkert@6217: rrenkert@6217: } rrenkert@6217: rrenkert@6217: @Override rrenkert@6217: protected void addData(Object data) { rrenkert@6217: if (!(data instanceof CalculationResult)) { rrenkert@6217: logger.warn("Invalid data type."); rrenkert@6217: return; rrenkert@6217: } rrenkert@6217: Object[] d = (Object[])((CalculationResult)data).getData(); rrenkert@6217: rrenkert@6217: if (!(d instanceof BedDifferencesResult[])) { rrenkert@6217: logger.warn("Invalid result object."); rrenkert@6217: return; rrenkert@6217: } rrenkert@6217: results = (BedDifferencesResult[])d; rrenkert@6217: } rrenkert@6217: rrenkert@6217: protected void writeCSVHeader(CSVWriter writer) { rrenkert@6217: logger.debug("writeCSVHeader()"); rrenkert@6217: rrenkert@6217: List header = new LinkedList(); rrenkert@6217: if (results != null) { rrenkert@6217: header.add(msg(CSV_HEADER_KM, "km")); rrenkert@6217: header.add(msg(CSV_HEADER_DIFF, "m")); rrenkert@6217: } rrenkert@6217: writer.writeNext(header.toArray(new String[header.size()])); rrenkert@6217: } rrenkert@6217: }