File indexing completed on 2024-05-26 03:51:12

0001 /*
0002     File                 : JsonFilter.h
0003     Project              : LabPlot
0004     Description          : JSON I/O-filter.
0005     --------------------------------------------------------------------
0006     SPDX-FileCopyrightText: 2018 Andrey Cygankov <craftplace.ms@gmail.com>
0007     SPDX-FileCopyrightText: 2018-2020 Alexander Semke <alexander.semke@web.de>
0008     SPDX-License-Identifier: GPL-2.0-or-later
0009 */
0010 
0011 #ifndef JSONFILTER_H
0012 #define JSONFILTER_H
0013 
0014 #include "backend/core/AbstractColumn.h"
0015 #include "backend/datasources/filters/AbstractFileFilter.h"
0016 
0017 #include <QJsonValue>
0018 
0019 class QIODevice;
0020 class QJsonDocument;
0021 class QJsonModel;
0022 class JsonFilterPrivate;
0023 
0024 class JsonFilter : public AbstractFileFilter {
0025     Q_OBJECT
0026 
0027 public:
0028     enum class DataContainerType { Array, Object };
0029 
0030     JsonFilter();
0031     ~JsonFilter() override;
0032 
0033     static QStringList dataTypes();
0034     static QStringList dataRowTypes();
0035     static QString fileInfoString(const QString&);
0036 
0037     // read data from any device
0038     void readDataFromDevice(QIODevice& device, AbstractDataSource*, AbstractFileFilter::ImportMode = AbstractFileFilter::ImportMode::Replace, int lines = -1);
0039     // overloaded function to read from file
0040     void
0041     readDataFromFile(const QString& fileName, AbstractDataSource* = nullptr, AbstractFileFilter::ImportMode = AbstractFileFilter::ImportMode::Replace) override;
0042     void write(const QString& fileName, AbstractDataSource*) override;
0043 
0044     QVector<QStringList> preview(const QString& fileName, int lines);
0045     QVector<QStringList> preview(QIODevice& device, int lines);
0046 
0047     void setDataRowType(const QJsonValue::Type);
0048     QJsonValue::Type dataRowType() const;
0049 
0050     void setModel(QJsonModel*);
0051     void setModelRows(const QVector<int>&);
0052     QVector<int> modelRows() const;
0053 
0054     void setDateTimeFormat(const QString&);
0055     QString dateTimeFormat() const;
0056     void setNumberFormat(QLocale::Language);
0057     QLocale::Language numberFormat() const;
0058     void setNaNValueToZero(const bool);
0059     bool NaNValueToZeroEnabled() const;
0060     void setCreateIndexEnabled(const bool);
0061     void setImportObjectNames(const bool);
0062 
0063     QStringList vectorNames() const;
0064     QVector<AbstractColumn::ColumnMode> columnModes();
0065 
0066     void setStartRow(const int);
0067     int startRow() const;
0068     void setEndRow(const int);
0069     int endRow() const;
0070     void setStartColumn(const int);
0071     int startColumn() const;
0072     void setEndColumn(const int);
0073     int endColumn() const;
0074 
0075     void save(QXmlStreamWriter*) const override;
0076     bool load(XmlStreamReader*) override;
0077 
0078 private:
0079     std::unique_ptr<JsonFilterPrivate> const d;
0080     friend class JsonFilterPrivate;
0081 };
0082 
0083 #endif