File indexing completed on 2024-05-12 16:46:36
0001 /*************************************************************************** 0002 Copyright (C) 2008-2009 Robby Stephenson <robby@periapsis.org> 0003 ***************************************************************************/ 0004 0005 /*************************************************************************** 0006 * * 0007 * This program is free software; you can redistribute it and/or * 0008 * modify it under the terms of the GNU General Public License as * 0009 * published by the Free Software Foundation; either version 2 of * 0010 * the License or (at your option) version 3 or any later version * 0011 * accepted by the membership of KDE e.V. (or its successor approved * 0012 * by the membership of KDE e.V.), which shall act as a proxy * 0013 * defined in Section 14 of version 3 of the license. * 0014 * * 0015 * This program is distributed in the hope that it will be useful, * 0016 * but WITHOUT ANY WARRANTY; without even the implied warranty of * 0017 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * 0018 * GNU General Public License for more details. * 0019 * * 0020 * You should have received a copy of the GNU General Public License * 0021 * along with this program. If not, see <http://www.gnu.org/licenses/>. * 0022 * * 0023 ***************************************************************************/ 0024 0025 #ifndef TELLICO_IMPORT_XMLSTATEHANDLER_H 0026 #define TELLICO_IMPORT_XMLSTATEHANDLER_H 0027 0028 #include <QXmlStreamAttributes> 0029 0030 #include "../datavectors.h" 0031 0032 namespace Tellico { 0033 namespace Import { 0034 namespace SAX { 0035 0036 class StateData { 0037 public: 0038 StateData() : syntaxVersion(0), collType(0), defaultFields(false), loadImages(false), hasImages(false), showImageLoadErrors(true) {} 0039 QString text; 0040 QString error; 0041 QString ns; // namespace 0042 QString textBuffer; 0043 uint syntaxVersion; 0044 QString collTitle; 0045 int collType; 0046 QString entryName; 0047 Data::CollPtr coll; 0048 Data::FieldList fields; 0049 Data::FieldPtr currentField; 0050 Data::EntryList entries; 0051 QString modifiedDate; 0052 FilterPtr filter; 0053 Data::BorrowerPtr borrower; 0054 bool defaultFields; 0055 bool loadImages; 0056 bool hasImages; 0057 bool showImageLoadErrors; 0058 }; 0059 0060 class StateHandler { 0061 public: 0062 StateHandler(StateData* data) : d(data) {} 0063 virtual ~StateHandler() {} 0064 0065 virtual bool start(const QStringRef& nsUri, const QStringRef& localName, const QXmlStreamAttributes& attributes) = 0; 0066 virtual bool end(const QStringRef& nsUri, const QStringRef& localName) = 0; 0067 0068 StateHandler* nextHandler(const QStringRef& nsUri, const QStringRef& localName); 0069 protected: 0070 StateData* d; 0071 private: 0072 Q_DISABLE_COPY(StateHandler) 0073 virtual StateHandler* nextHandlerImpl(const QStringRef&, const QStringRef&) { return nullptr; } 0074 }; 0075 0076 class NullHandler : public StateHandler { 0077 public: 0078 NullHandler(StateData* data) : StateHandler(data) {} 0079 virtual ~NullHandler() {} 0080 0081 virtual bool start(const QStringRef&, const QStringRef&, const QXmlStreamAttributes&) Q_DECL_OVERRIDE { return true; } 0082 virtual bool end(const QStringRef&, const QStringRef&) Q_DECL_OVERRIDE { return true; } 0083 }; 0084 0085 class RootHandler : public StateHandler { 0086 public: 0087 RootHandler(StateData* data) : StateHandler(data) {} 0088 virtual ~RootHandler() {} 0089 0090 virtual bool start(const QStringRef&, const QStringRef&, const QXmlStreamAttributes&) Q_DECL_OVERRIDE { return true; } 0091 virtual bool end(const QStringRef&, const QStringRef&) Q_DECL_OVERRIDE { return true; } 0092 0093 private: 0094 virtual StateHandler* nextHandlerImpl(const QStringRef&, const QStringRef&) Q_DECL_OVERRIDE; 0095 }; 0096 0097 class DocumentHandler : public StateHandler { 0098 public: 0099 DocumentHandler(StateData* data) : StateHandler(data) {} 0100 virtual ~DocumentHandler() {} 0101 0102 virtual bool start(const QStringRef&, const QStringRef&, const QXmlStreamAttributes&) Q_DECL_OVERRIDE; 0103 virtual bool end(const QStringRef&, const QStringRef&) Q_DECL_OVERRIDE; 0104 0105 private: 0106 virtual StateHandler* nextHandlerImpl(const QStringRef&, const QStringRef&) Q_DECL_OVERRIDE; 0107 }; 0108 0109 class CollectionHandler : public StateHandler { 0110 public: 0111 CollectionHandler(StateData* data) : StateHandler(data) {} 0112 virtual ~CollectionHandler() {} 0113 0114 virtual bool start(const QStringRef&, const QStringRef&, const QXmlStreamAttributes&) Q_DECL_OVERRIDE; 0115 virtual bool end(const QStringRef&, const QStringRef&) Q_DECL_OVERRIDE; 0116 0117 private: 0118 virtual StateHandler* nextHandlerImpl(const QStringRef&, const QStringRef&) Q_DECL_OVERRIDE; 0119 }; 0120 0121 class FieldsHandler : public StateHandler { 0122 public: 0123 FieldsHandler(StateData* data) : StateHandler(data) {} 0124 virtual ~FieldsHandler() {} 0125 0126 virtual bool start(const QStringRef&, const QStringRef&, const QXmlStreamAttributes&) Q_DECL_OVERRIDE; 0127 virtual bool end(const QStringRef&, const QStringRef&) Q_DECL_OVERRIDE; 0128 0129 private: 0130 virtual StateHandler* nextHandlerImpl(const QStringRef&, const QStringRef&) Q_DECL_OVERRIDE; 0131 }; 0132 0133 class FieldHandler : public StateHandler { 0134 public: 0135 FieldHandler(StateData* data) : StateHandler(data) {} 0136 virtual ~FieldHandler() {} 0137 0138 virtual bool start(const QStringRef&, const QStringRef&, const QXmlStreamAttributes&) Q_DECL_OVERRIDE; 0139 virtual bool end(const QStringRef&, const QStringRef&) Q_DECL_OVERRIDE; 0140 0141 private: 0142 virtual StateHandler* nextHandlerImpl(const QStringRef&, const QStringRef&) Q_DECL_OVERRIDE; 0143 }; 0144 0145 class FieldPropertyHandler : public StateHandler { 0146 public: 0147 FieldPropertyHandler(StateData* data) : StateHandler(data) {} 0148 virtual ~FieldPropertyHandler() {} 0149 0150 virtual bool start(const QStringRef&, const QStringRef&, const QXmlStreamAttributes&) Q_DECL_OVERRIDE; 0151 virtual bool end(const QStringRef&, const QStringRef&) Q_DECL_OVERRIDE; 0152 0153 private: 0154 QString m_propertyName; 0155 }; 0156 0157 class BibtexPreambleHandler : public StateHandler { 0158 public: 0159 BibtexPreambleHandler(StateData* data) : StateHandler(data) {} 0160 virtual ~BibtexPreambleHandler() {} 0161 0162 virtual bool start(const QStringRef&, const QStringRef&, const QXmlStreamAttributes&) Q_DECL_OVERRIDE; 0163 virtual bool end(const QStringRef&, const QStringRef&) Q_DECL_OVERRIDE; 0164 }; 0165 0166 class BibtexMacrosHandler : public StateHandler { 0167 public: 0168 BibtexMacrosHandler(StateData* data) : StateHandler(data) {} 0169 virtual ~BibtexMacrosHandler() {} 0170 0171 virtual bool start(const QStringRef&, const QStringRef&, const QXmlStreamAttributes&) Q_DECL_OVERRIDE; 0172 virtual bool end(const QStringRef&, const QStringRef&) Q_DECL_OVERRIDE; 0173 0174 private: 0175 virtual StateHandler* nextHandlerImpl(const QStringRef&, const QStringRef&) Q_DECL_OVERRIDE; 0176 }; 0177 0178 class BibtexMacroHandler : public StateHandler { 0179 public: 0180 BibtexMacroHandler(StateData* data) : StateHandler(data) {} 0181 virtual ~BibtexMacroHandler() {} 0182 0183 virtual bool start(const QStringRef&, const QStringRef&, const QXmlStreamAttributes&) Q_DECL_OVERRIDE; 0184 virtual bool end(const QStringRef&, const QStringRef&) Q_DECL_OVERRIDE; 0185 0186 private: 0187 QString m_macroName; 0188 }; 0189 0190 class EntryHandler : public StateHandler { 0191 public: 0192 EntryHandler(StateData* data) : StateHandler(data) {} 0193 virtual ~EntryHandler() {} 0194 0195 virtual bool start(const QStringRef&, const QStringRef&, const QXmlStreamAttributes&) Q_DECL_OVERRIDE; 0196 virtual bool end(const QStringRef&, const QStringRef&) Q_DECL_OVERRIDE; 0197 0198 private: 0199 virtual StateHandler* nextHandlerImpl(const QStringRef&, const QStringRef&) Q_DECL_OVERRIDE; 0200 }; 0201 0202 class FieldValueContainerHandler : public StateHandler { 0203 public: 0204 FieldValueContainerHandler(StateData* data) : StateHandler(data) {} 0205 virtual ~FieldValueContainerHandler() {} 0206 0207 virtual bool start(const QStringRef&, const QStringRef&, const QXmlStreamAttributes&) Q_DECL_OVERRIDE; 0208 virtual bool end(const QStringRef&, const QStringRef&) Q_DECL_OVERRIDE; 0209 0210 private: 0211 virtual StateHandler* nextHandlerImpl(const QStringRef&, const QStringRef&) Q_DECL_OVERRIDE; 0212 }; 0213 0214 class FieldValueHandler : public StateHandler { 0215 public: 0216 FieldValueHandler(StateData* data) : StateHandler(data) 0217 , m_i18n(false), m_validateISBN(false) {} 0218 virtual ~FieldValueHandler() {} 0219 0220 virtual bool start(const QStringRef&, const QStringRef&, const QXmlStreamAttributes&) Q_DECL_OVERRIDE; 0221 virtual bool end(const QStringRef&, const QStringRef&) Q_DECL_OVERRIDE; 0222 0223 private: 0224 virtual StateHandler* nextHandlerImpl(const QStringRef&, const QStringRef&) Q_DECL_OVERRIDE; 0225 bool m_i18n; 0226 bool m_validateISBN; 0227 }; 0228 0229 class DateValueHandler : public StateHandler { 0230 public: 0231 DateValueHandler(StateData* data) : StateHandler(data) {} 0232 virtual ~DateValueHandler() {} 0233 0234 virtual bool start(const QStringRef&, const QStringRef&, const QXmlStreamAttributes&) Q_DECL_OVERRIDE; 0235 virtual bool end(const QStringRef&, const QStringRef&) Q_DECL_OVERRIDE; 0236 }; 0237 0238 class TableColumnHandler : public StateHandler { 0239 public: 0240 TableColumnHandler(StateData* data) : StateHandler(data) {} 0241 virtual ~TableColumnHandler() {} 0242 0243 virtual bool start(const QStringRef&, const QStringRef&, const QXmlStreamAttributes&) Q_DECL_OVERRIDE; 0244 virtual bool end(const QStringRef&, const QStringRef&) Q_DECL_OVERRIDE; 0245 }; 0246 0247 class ImagesHandler : public StateHandler { 0248 public: 0249 ImagesHandler(StateData* data) : StateHandler(data) {} 0250 virtual ~ImagesHandler() {} 0251 0252 virtual bool start(const QStringRef&, const QStringRef&, const QXmlStreamAttributes&) Q_DECL_OVERRIDE; 0253 virtual bool end(const QStringRef&, const QStringRef&) Q_DECL_OVERRIDE; 0254 0255 private: 0256 virtual StateHandler* nextHandlerImpl(const QStringRef&, const QStringRef&) Q_DECL_OVERRIDE; 0257 }; 0258 0259 class ImageHandler : public StateHandler { 0260 public: 0261 ImageHandler(StateData* data) : StateHandler(data) 0262 , m_link(false), m_width(0), m_height(0) {} 0263 virtual ~ImageHandler() {} 0264 0265 virtual bool start(const QStringRef&, const QStringRef&, const QXmlStreamAttributes&) Q_DECL_OVERRIDE; 0266 virtual bool end(const QStringRef&, const QStringRef&) Q_DECL_OVERRIDE; 0267 0268 private: 0269 QString m_format; 0270 bool m_link; 0271 QString m_imageId; 0272 int m_width; 0273 int m_height; 0274 }; 0275 0276 class FiltersHandler : public StateHandler { 0277 public: 0278 FiltersHandler(StateData* data) : StateHandler(data) {} 0279 virtual ~FiltersHandler() {} 0280 0281 virtual bool start(const QStringRef&, const QStringRef&, const QXmlStreamAttributes&) Q_DECL_OVERRIDE; 0282 virtual bool end(const QStringRef&, const QStringRef&) Q_DECL_OVERRIDE; 0283 0284 private: 0285 virtual StateHandler* nextHandlerImpl(const QStringRef&, const QStringRef&) Q_DECL_OVERRIDE; 0286 }; 0287 0288 class FilterHandler : public StateHandler { 0289 public: 0290 FilterHandler(StateData* data) : StateHandler(data) {} 0291 virtual ~FilterHandler() {} 0292 0293 virtual bool start(const QStringRef&, const QStringRef&, const QXmlStreamAttributes&) Q_DECL_OVERRIDE; 0294 virtual bool end(const QStringRef&, const QStringRef&) Q_DECL_OVERRIDE; 0295 0296 private: 0297 virtual StateHandler* nextHandlerImpl(const QStringRef&, const QStringRef&) Q_DECL_OVERRIDE; 0298 }; 0299 0300 class FilterRuleHandler : public StateHandler { 0301 public: 0302 FilterRuleHandler(StateData* data) : StateHandler(data) {} 0303 virtual ~FilterRuleHandler() {} 0304 0305 virtual bool start(const QStringRef&, const QStringRef&, const QXmlStreamAttributes&) Q_DECL_OVERRIDE; 0306 virtual bool end(const QStringRef&, const QStringRef&) Q_DECL_OVERRIDE; 0307 }; 0308 0309 class BorrowersHandler : public StateHandler { 0310 public: 0311 BorrowersHandler(StateData* data) : StateHandler(data) {} 0312 virtual ~BorrowersHandler() {} 0313 0314 virtual bool start(const QStringRef&, const QStringRef&, const QXmlStreamAttributes&) Q_DECL_OVERRIDE; 0315 virtual bool end(const QStringRef&, const QStringRef&) Q_DECL_OVERRIDE; 0316 0317 private: 0318 virtual StateHandler* nextHandlerImpl(const QStringRef&, const QStringRef&) Q_DECL_OVERRIDE; 0319 }; 0320 0321 class BorrowerHandler : public StateHandler { 0322 public: 0323 BorrowerHandler(StateData* data) : StateHandler(data) {} 0324 virtual ~BorrowerHandler() {} 0325 0326 virtual bool start(const QStringRef&, const QStringRef&, const QXmlStreamAttributes&) Q_DECL_OVERRIDE; 0327 virtual bool end(const QStringRef&, const QStringRef&) Q_DECL_OVERRIDE; 0328 0329 private: 0330 virtual StateHandler* nextHandlerImpl(const QStringRef&, const QStringRef&) Q_DECL_OVERRIDE; 0331 }; 0332 0333 class LoanHandler : public StateHandler { 0334 public: 0335 LoanHandler(StateData* data) : StateHandler(data) 0336 , m_id(-1), m_inCalendar(false) {} 0337 virtual ~LoanHandler() {} 0338 0339 virtual bool start(const QStringRef&, const QStringRef&, const QXmlStreamAttributes&) Q_DECL_OVERRIDE; 0340 virtual bool end(const QStringRef&, const QStringRef&) Q_DECL_OVERRIDE; 0341 0342 private: 0343 int m_id; 0344 QString m_uid; 0345 QString m_loanDate; 0346 QString m_dueDate; 0347 bool m_inCalendar; 0348 }; 0349 0350 } 0351 } 0352 } 0353 #endif