gernotbelger@8854: /* Copyright (C) 2017 by Bundesanstalt für Gewässerkunde gernotbelger@8946: * Software engineering by gernotbelger@8946: * Björnsen Beratende Ingenieure GmbH gernotbelger@8854: * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt gernotbelger@8854: * gernotbelger@8854: * This file is Free Software under the GNU AGPL (>=v3) gernotbelger@8854: * and comes with ABSOLUTELY NO WARRANTY! Check out the gernotbelger@8854: * documentation coming with Dive4Elements River for details. gernotbelger@8854: */ gernotbelger@9005: package org.dive4elements.river.artifacts.common; gernotbelger@8854: gernotbelger@8854: import java.util.ArrayList; gernotbelger@8854: import java.util.HashMap; gernotbelger@8854: import java.util.List; gernotbelger@8854: import java.util.Map; gernotbelger@8854: gernotbelger@8854: import net.sf.jasperreports.engine.JRDataSource; gernotbelger@8854: import net.sf.jasperreports.engine.JRException; gernotbelger@8854: import net.sf.jasperreports.engine.JRField; gernotbelger@8854: gernotbelger@8854: /** gernotbelger@8854: * @author Raimund Renkert gernotbelger@8854: */ gernotbelger@8946: public final class MetaAndTableJRDataSource implements JRDataSource { gernotbelger@8854: gernotbelger@8946: private final List data = new ArrayList<>(); gernotbelger@8946: gernotbelger@8946: private final Map metaData = new HashMap<>(); gernotbelger@8854: gernotbelger@8854: private int index = -1; gernotbelger@8854: gernotbelger@8946: public void addData(final String[] row) { gernotbelger@8946: this.data.add(row); gernotbelger@8854: } gernotbelger@8854: gernotbelger@8854: public void addMetaData(final String key, final String value) { gernotbelger@8854: this.metaData.put(key, value); gernotbelger@8854: } gernotbelger@8854: gernotbelger@8854: @Override gernotbelger@8946: public boolean next() throws JRException { gernotbelger@8946: this.index++; gernotbelger@8854: gernotbelger@8946: return this.index < this.data.size(); gernotbelger@8854: } gernotbelger@8854: gernotbelger@8854: @Override gernotbelger@8946: public Object getFieldValue(final JRField field) throws JRException { gernotbelger@8854: final String fieldName = field.getName(); gernotbelger@8854: gernotbelger@8946: if (fieldName.startsWith("meta:")) gernotbelger@8946: return this.metaData.get(fieldName.substring("meta:".length())); gernotbelger@8946: gernotbelger@8946: if (fieldName.startsWith("data:")) { gernotbelger@8946: final int column = Integer.valueOf(fieldName.substring("data:".length())); gernotbelger@8946: return this.data.get(this.index)[column]; gernotbelger@8854: } gernotbelger@8854: return null; gernotbelger@8854: } gernotbelger@9005: gernotbelger@9005: public JRDataSource withPagePageOffsets(final int startpageoffset, final int totalpagesoffset) { gernotbelger@9005: gernotbelger@9005: final MetaAndTableJRDataSource newSource = new MetaAndTableJRDataSource(); gernotbelger@9005: newSource.data.addAll(this.data); gernotbelger@9005: newSource.metaData.putAll(this.metaData); gernotbelger@9005: gernotbelger@9005: newSource.addMetaData("meta:startpageoffset", "" + startpageoffset); gernotbelger@9005: newSource.addMetaData("meta:totalpagesoffset", "" + totalpagesoffset); gernotbelger@9005: gernotbelger@9005: return newSource; gernotbelger@9005: } gernotbelger@8854: }