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: }