File indexing completed on 2024-05-12 05:06:45
0001 /* 0002 SPDX-FileCopyrightText: 2020 Thomas Baumgart <tbaumgart@kde.org> 0003 SPDX-License-Identifier: GPL-2.0-or-later 0004 */ 0005 0006 #include "mymoneytemplate.h" 0007 0008 // ---------------------------------------------------------------------------- 0009 // QT Includes 0010 0011 #include <QFile> 0012 #include <QUrl> 0013 #include <QMap> 0014 #include <QDomDocument> 0015 #include <QDomNode> 0016 #include <QDebug> 0017 0018 // ---------------------------------------------------------------------------- 0019 // KDE Includes 0020 0021 #include <KLocalizedString> 0022 0023 // ---------------------------------------------------------------------------- 0024 // Project Includes 0025 0026 #if 0 0027 #include "kmymoneyutils.h" 0028 #include "mymoneyfile.h" 0029 #include "mymoneyaccount.h" 0030 #include "mymoneyexception.h" 0031 #include "mymoneyenums.h" 0032 #endif 0033 #include "mymoneyobject_p.h" 0034 0035 bool MyMoneyTemplateLoadResult::isOK() const 0036 { 0037 return (errorLine == -1) && (errorColumn == -1); 0038 } 0039 0040 void MyMoneyTemplateLoadResult::setErrorMsg(const QString& msg) 0041 { 0042 errorMsg = msg; 0043 // make sure isOK() returns false 0044 if (isOK()) { 0045 errorLine = 0; 0046 errorColumn = 0; 0047 } 0048 } 0049 0050 class MyMoneyTemplatePrivate : public MyMoneyObjectPrivate 0051 { 0052 public: 0053 MyMoneyTemplatePrivate() {} 0054 0055 QDomDocument m_doc; 0056 QDomNode m_accounts; 0057 QString m_title; 0058 QString m_shortDesc; 0059 QString m_longDesc; 0060 QString m_locale; 0061 QUrl m_source; 0062 QMap<QString,QString> m_vatAccountMap; 0063 0064 void collectReferencedObjects() override 0065 { 0066 } 0067 0068 MyMoneyTemplateLoadResult loadDescription() 0069 { 0070 MyMoneyTemplateLoadResult result; 0071 int validMask = 0x00; 0072 const int validAccount = 0x01; 0073 const int validTitle = 0x02; 0074 const int validShort = 0x04; 0075 const int validLong = 0x08; 0076 const int invalid = 0x10; 0077 const int validHeader = 0x0F; 0078 0079 QDomElement rootElement = m_doc.documentElement(); 0080 if (!rootElement.isNull() 0081 && rootElement.tagName() == QLatin1String("kmymoney-account-template")) { 0082 QDomNode child = rootElement.firstChild(); 0083 while (!child.isNull() && child.isElement()) { 0084 QDomElement childElement = child.toElement(); 0085 // qDebug("MyMoneyTemplate::import: Processing child node %s", childElement.tagName().data()); 0086 if (childElement.tagName() == QLatin1String("accounts")) { 0087 m_accounts = childElement.firstChild(); 0088 validMask |= validAccount; 0089 } else if (childElement.tagName() == QLatin1String("title")) { 0090 m_title = childElement.text(); 0091 validMask |= validTitle; 0092 } else if (childElement.tagName() == QLatin1String("shortdesc")) { 0093 m_shortDesc = childElement.text(); 0094 validMask |= validShort; 0095 } else if (childElement.tagName() == QLatin1String("longdesc")) { 0096 m_longDesc = childElement.text(); 0097 validMask |= validLong; 0098 } else { 0099 result.setErrorMsg(i18n("<p>Invalid tag <b>%1</b> in template file <b>%2</b></p>", childElement.tagName(), m_source.toDisplayString())); 0100 validMask |= invalid; 0101 } 0102 child = child.nextSibling(); 0103 } 0104 if (validMask != validHeader) { 0105 if (!(validMask & validAccount)) { 0106 result.setErrorMsg(i18n("<p>Missing tag <b>%1</b> in template file <b>%2</b></p>", QLatin1String("accounts"), m_source.toDisplayString())); 0107 } else if (!(validMask & validTitle)) { 0108 result.setErrorMsg(i18n("<p>Missing tag <b>%1</b> in template file <b>%2</b></p>", QLatin1String("title"), m_source.toDisplayString())); 0109 } else if (!(validMask & validShort)) { 0110 result.setErrorMsg(i18n("<p>Missing tag <b>%1</b> in template file <b>%2</b></p>", QLatin1String("shortdesc"), m_source.toDisplayString())); 0111 } else if (!(validMask & validLong)) { 0112 result.setErrorMsg(i18n("<p>Missing tag <b>%1</b> in template file <b>%2</b></p>", QLatin1String("longdesc"), m_source.toDisplayString())); 0113 } 0114 } 0115 } else { 0116 result.setErrorMsg(i18n("<p>Invalid root element in template file <b>%1</b></p>", m_source.toDisplayString())); 0117 } 0118 return result; 0119 } 0120 }; 0121 0122 0123 MyMoneyTemplate::MyMoneyTemplate() 0124 : MyMoneyObject(*(new MyMoneyTemplatePrivate)) 0125 { 0126 } 0127 0128 MyMoneyTemplate::MyMoneyTemplate(const QString& id, const MyMoneyTemplate& other) 0129 : MyMoneyObject(*new MyMoneyTemplatePrivate(*other.d_func()), id) 0130 { 0131 } 0132 0133 MyMoneyTemplate::MyMoneyTemplate(const MyMoneyTemplate& other) 0134 : MyMoneyObject(*new MyMoneyTemplatePrivate(*other.d_func()), other.id()) 0135 { 0136 } 0137 0138 MyMoneyTemplate::~MyMoneyTemplate() 0139 { 0140 } 0141 0142 MyMoneyTemplateLoadResult MyMoneyTemplate::setAccountTree(QFile* file) 0143 { 0144 Q_D(MyMoneyTemplate); 0145 MyMoneyTemplateLoadResult result; 0146 d->m_doc.setContent(file, &result.errorMsg, &result.errorLine, &result.errorColumn); 0147 if (result.isOK()) { 0148 result = d->loadDescription(); 0149 } 0150 return result; 0151 } 0152 0153 const QDomNode& MyMoneyTemplate::accountTree() const 0154 { 0155 Q_D(const MyMoneyTemplate); 0156 return d->m_accounts; 0157 } 0158 0159 const QString& MyMoneyTemplate::title() const 0160 { 0161 Q_D(const MyMoneyTemplate); 0162 return d->m_title; 0163 } 0164 0165 const QString& MyMoneyTemplate::shortDescription() const 0166 { 0167 Q_D(const MyMoneyTemplate); 0168 return d->m_shortDesc; 0169 } 0170 0171 const QString& MyMoneyTemplate::longDescription() const 0172 { 0173 Q_D(const MyMoneyTemplate); 0174 return d->m_longDesc; 0175 } 0176 0177 const QString& MyMoneyTemplate::locale() const 0178 { 0179 Q_D(const MyMoneyTemplate); 0180 return d->m_locale; 0181 } 0182 0183 const QUrl& MyMoneyTemplate::source() const 0184 { 0185 Q_D(const MyMoneyTemplate); 0186 return d->m_source; 0187 } 0188 0189 void MyMoneyTemplate::setTitle(const QString &s) 0190 { 0191 Q_D(MyMoneyTemplate); 0192 d->m_title = s; 0193 } 0194 0195 void MyMoneyTemplate::setShortDescription(const QString &s) 0196 { 0197 Q_D(MyMoneyTemplate); 0198 d->m_shortDesc = s; 0199 } 0200 0201 void MyMoneyTemplate::setLongDescription(const QString &s) 0202 { 0203 Q_D(MyMoneyTemplate); 0204 d->m_longDesc = s; 0205 } 0206 0207 void MyMoneyTemplate::setLocale(const QString& s) 0208 { 0209 Q_D(MyMoneyTemplate); 0210 d->m_locale = s; 0211 } 0212 0213 void MyMoneyTemplate::setSource(const QUrl& s) 0214 { 0215 Q_D(MyMoneyTemplate); 0216 d->m_source = s; 0217 }