File indexing completed on 2024-04-28 11:20:46

0001 /*
0002     SPDX-License-Identifier: GPL-2.0-or-later
0003     SPDX-FileCopyrightText: 2020 Sirgienko Nikita <warquark@gmail.com>
0004 */
0005 
0006 #include "graphicpackage.h"
0007 
0008 #include <QDir>
0009 #include <QDomDocument>
0010 #include <QDebug>
0011 
0012 #include "session.h"
0013 #include "expression.h"
0014 
0015 using namespace Cantor;
0016 
0017 class Cantor::GraphicPackagePrivate
0018 {
0019   public:
0020     QString id;
0021     QString name;
0022     QString testPresenceCommand;
0023     QString enableSupportCommand;
0024     QString disableSupportCommand;
0025     QString saveToFileCommandTemplate;
0026     QStringList plotPrecenseKeywords;
0027 };
0028 
0029 Cantor::GraphicPackage::GraphicPackage(const Cantor::GraphicPackage& other): d(new GraphicPackagePrivate)
0030 {
0031     *d = *other.d;
0032 }
0033 
0034 Cantor::GraphicPackage::GraphicPackage(): d(new GraphicPackagePrivate)
0035 {
0036 }
0037 
0038 Cantor::GraphicPackage::~GraphicPackage()
0039 {
0040     delete d;
0041 }
0042 
0043 QString Cantor::GraphicPackage::id() const
0044 {
0045     return d->id;
0046 }
0047 
0048 QString Cantor::GraphicPackage::name() const
0049 {
0050     return d->name;
0051 }
0052 
0053 Expression* Cantor::GraphicPackage::isAvailable(Session* session) const
0054 {
0055     return session->evaluateExpression(d->testPresenceCommand, Expression::FinishingBehavior::DoNotDelete, true);
0056 }
0057 
0058 QString Cantor::GraphicPackage::enableSupportCommand(QString additionalInfo) const
0059 {
0060     return d->enableSupportCommand.arg(additionalInfo);
0061 }
0062 
0063 QString Cantor::GraphicPackage::disableSupportCommand() const
0064 {
0065     return d->disableSupportCommand;
0066 }
0067 
0068 QString Cantor::GraphicPackage::savePlotCommand(QString filenamePrefix, int plotNumber, QString additionalInfo) const
0069 {
0070     return d->saveToFileCommandTemplate.arg(filenamePrefix, QString::number(plotNumber), additionalInfo);
0071 }
0072 
0073 bool Cantor::GraphicPackage::isHavePlotCommand() const
0074 {
0075     return !d->saveToFileCommandTemplate.isEmpty();
0076 }
0077 
0078 const QStringList & Cantor::GraphicPackage::plotCommandPrecentsKeywords() const
0079 {
0080     return d->plotPrecenseKeywords;
0081 }
0082 
0083 QList<GraphicPackage> Cantor::GraphicPackage::loadFromFile(const QString& filename)
0084 {
0085     QList<GraphicPackage> packages;
0086 
0087     if (!QFile::exists(filename))
0088         return packages;
0089 
0090     QFile fin(filename);
0091     if (fin.open(QFile::ReadOnly))
0092     {
0093         QDomDocument doc;
0094         if (doc.setContent(fin.readAll()) && doc.firstChildElement(QLatin1String("GraphicPackages")).isNull() == false)
0095         {
0096             const auto& elements = doc.elementsByTagName(QLatin1String("GraphicPackage"));
0097             for (int i = 0; i < elements.size(); i++)
0098             {
0099                 const QDomNode& root = elements.item(i);
0100 
0101                 GraphicPackage package;
0102                 package.d->id = root.firstChildElement(QLatin1String("Id")).text().trimmed();
0103                 package.d->name = root.firstChildElement(QLatin1String("Name")).text().trimmed();
0104                 package.d->testPresenceCommand = root.firstChildElement(QLatin1String("TestPresenceCommand")).text().trimmed();
0105                 package.d->enableSupportCommand = root.firstChildElement(QLatin1String("EnableCommand")).text().trimmed();
0106                 package.d->disableSupportCommand = root.firstChildElement(QLatin1String("DisableCommand")).text().trimmed();
0107                 package.d->saveToFileCommandTemplate = root.firstChildElement(QLatin1String("ToFileCommandTemplate")).text().trimmed();
0108 
0109                 QString delimiter = QLatin1String("\n");
0110                 const QDomElement& delimiterElement = root.firstChildElement(QLatin1String("PlotPrecenseKeywordsDelimiter"));
0111                 if (!delimiterElement.isNull())
0112                     delimiter = delimiterElement.text().trimmed();
0113                 package.d->plotPrecenseKeywords = root.firstChildElement(QLatin1String("PlotPrecenseKeywords")).text().trimmed().split(delimiter, QString::SkipEmptyParts);
0114                 for (QString& name : package.d->plotPrecenseKeywords)
0115                     name = name.trimmed();
0116 
0117                 packages.append(package);
0118             }
0119         }
0120         else
0121             qWarning() << "fail parse" << filename << "as xml file";
0122     }
0123 
0124     return packages;
0125 }
0126 
0127 int Cantor::GraphicPackage::findById(const GraphicPackage& package, const QList<GraphicPackage>& list)
0128 {
0129     for (int i = 0; i < list.size(); i++)
0130         if (list[i].id() == package.id())
0131             return i;
0132     return -1;
0133 }
0134 
0135