Mercurial > dive4elements > river
view flys-artifacts/src/main/java/de/intevation/flys/exports/minfo/BedQualityExporter.java @ 4488:5041105d2edd
Check if response code from GGInA is 200 OK
Only parse the GGInA response if the status code is 200 OK. This improves the
error message if GGInA is not available and shows the real reason instead of a
JDOM error while parsing the response.
author | Björn Ricks <bjoern.ricks@intevation.de> |
---|---|
date | Wed, 14 Nov 2012 10:36:21 +0100 |
parents | 22cd60315e08 |
children |
line wrap: on
line source
package de.intevation.flys.exports.minfo; import gnu.trove.TDoubleArrayList; import java.io.IOException; import java.io.OutputStream; import java.text.DateFormat; import java.text.NumberFormat; import java.util.Arrays; import java.util.LinkedList; import java.util.List; import org.apache.log4j.Logger; import org.w3c.dom.Document; import au.com.bytecode.opencsv.CSVWriter; import de.intevation.artifacts.CallContext; import de.intevation.flys.artifacts.model.CalculationResult; import de.intevation.flys.artifacts.model.minfo.BedDiameterResult; import de.intevation.flys.artifacts.model.minfo.BedParametersResult; import de.intevation.flys.artifacts.model.minfo.BedQualityResult; import de.intevation.flys.artifacts.model.minfo.BedloadDiameterResult; import de.intevation.flys.exports.AbstractExporter; import de.intevation.flys.utils.Formatter; public class BedQualityExporter extends AbstractExporter { /** Private logger. */ private static Logger logger = Logger.getLogger(BedQualityExporter.class); private static final String CSV_HEADER_KM = "export.minfo.bedquality.km"; private static final String CSV_HEADER_DENSITY_CAP = "export.minfo.bedquality.density_cap"; private static final String CSV_HEADER_DENSITY_SUB = "export.minfo.bedquality.density_sub"; private static final String CSV_HEADER_POROSITY_CAP = "export.minfo.bedquality.porosity_cap"; private static final String CSV_HEADER_POROSITY_SUB = "export.minfo.bedquality.porosity_sub"; private static final String CSV_HEADER_BEDLOAD = "export.minfo.bedquality.bedload"; private static final String CSV_HEADER_BED_CAP = "export.minfo.bedquality.bed_cap"; private static final String CSV_HEADER_BED_SUB = "export.minfo.bedquality.bed_sub"; private BedQualityResult[] results; @Override public void init(Document request, OutputStream out, CallContext context) { logger.debug("BedQualityExporter.init"); super.init(request, out, context); results = new BedQualityResult[0]; } @Override protected void writeCSVData(CSVWriter writer) throws IOException { // TODO Auto-generated method stub writeCSVHeader(writer); NumberFormat kmf = Formatter.getCalculationKm(context.getMeta()); TDoubleArrayList kms = new TDoubleArrayList(); int cols = 1; for (int i = 0; i < results.length; i++) { BedDiameterResult[] beds = results[i].getBedResults(); for (int j = 0; j < beds.length; j++) { TDoubleArrayList bkms = beds[j].getKms(); for (int k = 0; k < bkms.size(); k++) { if (!kms.contains(bkms.get(k))) { kms.add(bkms.get(k)); } } } BedloadDiameterResult[] loads = results[i].getBedloadResults(); for (int j = 0; j < loads.length; j++) { TDoubleArrayList lkms = loads[i].getKms(); for (int k = 0; k < lkms.size(); k++) { if (!kms.contains(lkms.get(k))) { kms.add(lkms.get(k)); } } } cols += beds.length * 2; cols += loads.length; if (beds.length > 0) { cols += 4; } } kms.sort(); List<double[]> rows = new LinkedList<double[]>(); for (int i = 0; i < kms.size(); i++) { double[] row = new double[cols]; double km = kms.get(i); row[0] = km; for (int j = 0; j < results.length; j++) { BedloadDiameterResult[] loads = results[j].getBedloadResults(); for(int k = 0; k < loads.length; k++) { // k + 1: shift km column. // j* loads.length: shift periods. row[(k + 1) + (j * loads.length)] = loads[k].getDiameter(km); } BedDiameterResult[] beds = results[j].getBedResults(); for (int k = 0; k < beds.length; k++) { // k + 1: shift km column. // j * beds.length: shift periods. // loads.length * results.length: shift bed load columns. int ndx = (k + 1) + (j * beds.length) + (loads.length * results.length); row[ndx] = beds[k].getDiameterCap(km); row[ndx + 1] = beds[k].getDiameterSub(km); } BedParametersResult[] params = results[j].getParameters(); for(int k = 0; k < params.length; k++) { // loads.length + (beds.lenght * 2) * (j + 1): shift bed and bedload columns. int ndx = 1 + (loads.length + (beds.length * 2) * (j + 1)); row[ndx] = params[k].getLoadDensityCap(km); row[ndx + 1] = params[k].getLoadDensitySub(km); row[ndx + 2] = params[k].getPorosityCap(km); row[ndx + 3] = params[k].getPorositySub(km); } } rows.add(row); } for (double[] d : rows) { logger.debug(Arrays.toString(d)); List<String> cells = new LinkedList<String>(); for (int i = 0; i < d.length; i++) { if (!Double.isNaN(d[i])) { NumberFormat nf = Formatter.getFormatter(context, 1, 3); cells.add(nf.format(d[i])); } else { cells.add(""); } } writer.writeNext(cells.toArray(new String[cells.size()])); } } @Override protected void writePDF(OutputStream out) { // TODO Auto-generated method stub } @Override protected void addData(Object data) { // TODO Auto-generated method stub logger.debug("addData()"); if (!(data instanceof CalculationResult)) { logger.warn("Invalid data type."); return; } Object[] d = (Object[])((CalculationResult)data).getData(); if (!(d instanceof BedQualityResult[])) { logger.warn("Invalid result object."); return; } results = (BedQualityResult[])d; } protected void writeCSVHeader(CSVWriter writer) { logger.debug("writeCSVHeader()"); List<String> header = new LinkedList<String>(); if (results != null) { header.add(msg(CSV_HEADER_KM, "km")); for (int i = 0; i < results.length; i++) { DateFormat df = Formatter.getDateFormatter(context.getMeta(), "dd.MM.yyyy"); String d1 = df.format(results[i].getDateRange().getFrom()); String d2 = df.format(results[i].getDateRange().getTo()); BedloadDiameterResult[] loads = results[i].getBedloadResults(); BedDiameterResult[] beds = results[i].getBedResults(); BedParametersResult[] params = results[i].getParameters(); for (int j = 0; j < loads.length; j++) { header.add(msg(CSV_HEADER_BEDLOAD, CSV_HEADER_BEDLOAD) + " - " + msg(loads[j].getType().toString(), loads[j].getType().toString()) + " - " + d1 + "-" + d2); } for (int j = 0; j < beds.length; j++) { header.add(msg(CSV_HEADER_BED_CAP, CSV_HEADER_BED_CAP) + " - " + msg(beds[j].getType().toString(), beds[j].getType().toString()) + " - " + d1 + "-" + d2); header.add(msg(CSV_HEADER_BED_SUB, CSV_HEADER_BED_SUB) + " - " + msg(beds[j].getType().toString(), beds[j].getType().toString()) + " - " + d1 + "-" + d2); } if (params.length > 0) { header.add( msg(CSV_HEADER_DENSITY_CAP, CSV_HEADER_DENSITY_CAP) + " - " + d1 + "-" + d2); header.add( msg(CSV_HEADER_DENSITY_SUB, CSV_HEADER_DENSITY_SUB) + " - " + d1 + "-" + d2); header.add( msg(CSV_HEADER_POROSITY_CAP, CSV_HEADER_POROSITY_CAP) + " - " + d1 + "-" + d2); header.add( msg(CSV_HEADER_POROSITY_SUB, CSV_HEADER_POROSITY_SUB) + " - " + d1 + "-" + d2); } } } writer.writeNext(header.toArray(new String[header.size()])); } }