diff options
Diffstat (limited to 'reportbuilder/java/org/libreoffice/report/pentaho/StarReportDataFactory.java')
-rw-r--r-- | reportbuilder/java/org/libreoffice/report/pentaho/StarReportDataFactory.java | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/reportbuilder/java/org/libreoffice/report/pentaho/StarReportDataFactory.java b/reportbuilder/java/org/libreoffice/report/pentaho/StarReportDataFactory.java new file mode 100644 index 000000000..3fde6704a --- /dev/null +++ b/reportbuilder/java/org/libreoffice/report/pentaho/StarReportDataFactory.java @@ -0,0 +1,111 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +package org.libreoffice.report.pentaho; + +import org.libreoffice.report.DataSourceException; +import org.libreoffice.report.DataSourceFactory; + +import java.util.HashMap; + +import org.jfree.report.DataSet; +import org.jfree.report.ReportData; +import org.jfree.report.ReportDataFactory; +import org.jfree.report.ReportDataFactoryException; + + +public class StarReportDataFactory implements ReportDataFactory, Cloneable +{ + + private final DataSourceFactory backend; + + public StarReportDataFactory(DataSourceFactory backend) + { + this.backend = backend; + } + + /** + * Queries a datasource. The string 'query' defines the name of the query. The + * Parameterset given here may contain more data than actually needed. + * + * <p>The dataset may change between two calls, do not assume anything!</p> + */ + public ReportData queryData(final String query, final DataSet parameters) + throws ReportDataFactoryException + { + try + { + final HashMap<String, Object> map = new HashMap<String, Object>(); + final int count = parameters.getColumnCount(); + for (int i = 0; i < count; i++) + { + final Object o = parameters.get(i); + map.put(parameters.getColumnName(i), o); + } + return new StarReportData(backend.queryData(query, map)); + } + catch (DataSourceException dse) + { + String message = dse.getMessage(); + if (message.length() == 0) + { + message = "Failed to create report data wrapper"; + } + throw new ReportDataFactoryException(message, dse); + } + catch (org.jfree.report.DataSourceException e) + { + String message = e.getMessage(); + if (message.length() == 0) + { + message = "Failed to query data"; + } + throw new ReportDataFactoryException(message, e); + } + } + + public void open() + { + } + + public void close() + { + } + + /** + * Derives a freshly initialized report data factory, which is independent of + * the original data factory. Opening or Closing one data factory must not + * affect the other factories. + */ + public ReportDataFactory derive() + { + try + { + return (ReportDataFactory) clone(); + } + catch (CloneNotSupportedException e) + { + throw new IllegalStateException(e); + } + } + + @Override + public Object clone() throws CloneNotSupportedException + { + return super.clone(); + } +} |