File indexing completed on 2024-05-12 05:26:19
0001 /* 0002 * Copyright (C) 2015 Aaron Seigo <aseigo@kolabsystems.com> 0003 * Copyright (C) 2015 Christian Mollekopf <mollekopf@kolabsystems.com> 0004 * 0005 * This program is free software; you can redistribute it and/or modify 0006 * it under the terms of the GNU General Public License as published by 0007 * the Free Software Foundation; either version 2 of the License, or 0008 * (at your option) any later version. 0009 * 0010 * This program is distributed in the hope that it will be useful, 0011 * but WITHOUT ANY WARRANTY; without even the implied warranty of 0012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 0013 * GNU General Public License for more details. 0014 * 0015 * You should have received a copy of the GNU General Public License 0016 * along with this program; if not, write to the 0017 * Free Software Foundation, Inc., 0018 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 0019 */ 0020 0021 #pragma once 0022 0023 #include <QAbstractItemModel> 0024 #include <QSharedPointer> 0025 0026 #include "common/query.h" 0027 #include "common/store.h" 0028 0029 #include "state.h" 0030 #include "syntaxtree.h" 0031 0032 namespace SinkshUtils { 0033 0034 class StoreBase; 0035 0036 bool isValidStoreType(const QString &type); 0037 StoreBase &getStore(const QString &type); 0038 QSharedPointer<QAbstractItemModel> loadModel(const QString &type, Sink::Query query); 0039 QList<QByteArray> requestedProperties(const QString &type); 0040 QStringList resourceIds(); 0041 QStringList resourceCompleter(const QStringList &, const QString &fragment, State &state); 0042 QStringList resourceOrTypeCompleter(const QStringList &commands, const QString &fragment, State &state); 0043 QStringList typeCompleter(const QStringList &commands, const QString &fragment, State &state); 0044 QStringList debugareaCompleter(const QStringList &, const QString &fragment, State &state); 0045 QMap<QString, QString> keyValueMapFromArgs(const QStringList &args); 0046 bool applyFilter(Sink::Query &query, const QStringList &args); 0047 bool applyFilter(Sink::Query &query, const SyntaxTree::Options &args); 0048 QByteArray parseUid(const QByteArray &); 0049 0050 /** 0051 * A small abstraction layer to use the sink store with the type available as string. 0052 */ 0053 class StoreBase 0054 { 0055 public: 0056 virtual ~StoreBase(){}; 0057 virtual Sink::ApplicationDomain::ApplicationDomainType::Ptr getObject() = 0; 0058 virtual Sink::ApplicationDomain::ApplicationDomainType::Ptr getObject(const QByteArray &resourceInstanceIdentifier, const QByteArray &identifier = QByteArray()) = 0; 0059 virtual KAsync::Job<void> create(const Sink::ApplicationDomain::ApplicationDomainType &type) = 0; 0060 virtual KAsync::Job<void> modify(const Sink::ApplicationDomain::ApplicationDomainType &type) = 0; 0061 virtual KAsync::Job<void> remove(const Sink::ApplicationDomain::ApplicationDomainType &type) = 0; 0062 virtual QSharedPointer<QAbstractItemModel> loadModel(const Sink::Query &query) = 0; 0063 virtual QList<Sink::ApplicationDomain::ApplicationDomainType> read(const Sink::Query &query) = 0; 0064 }; 0065 0066 class DummyStore : public StoreBase 0067 { 0068 public: 0069 Sink::ApplicationDomain::ApplicationDomainType::Ptr getObject() Q_DECL_OVERRIDE 0070 { 0071 return {}; 0072 } 0073 0074 Sink::ApplicationDomain::ApplicationDomainType::Ptr getObject(const QByteArray &resourceInstanceIdentifier, const QByteArray &identifier = QByteArray()) Q_DECL_OVERRIDE 0075 { 0076 return {}; 0077 } 0078 0079 KAsync::Job<void> create(const Sink::ApplicationDomain::ApplicationDomainType &type) Q_DECL_OVERRIDE 0080 { 0081 return KAsync::null(); 0082 } 0083 0084 KAsync::Job<void> modify(const Sink::ApplicationDomain::ApplicationDomainType &type) Q_DECL_OVERRIDE 0085 { 0086 return KAsync::null(); 0087 } 0088 0089 KAsync::Job<void> remove(const Sink::ApplicationDomain::ApplicationDomainType &type) Q_DECL_OVERRIDE 0090 { 0091 return KAsync::null(); 0092 } 0093 0094 QSharedPointer<QAbstractItemModel> loadModel(const Sink::Query &query) Q_DECL_OVERRIDE 0095 { 0096 return {}; 0097 } 0098 0099 QList<Sink::ApplicationDomain::ApplicationDomainType> read(const Sink::Query &query) Q_DECL_OVERRIDE 0100 { 0101 return {}; 0102 } 0103 }; 0104 0105 template <typename T> 0106 class Store : public StoreBase 0107 { 0108 public: 0109 Sink::ApplicationDomain::ApplicationDomainType::Ptr getObject() Q_DECL_OVERRIDE 0110 { 0111 return T::Ptr::create(); 0112 } 0113 0114 Sink::ApplicationDomain::ApplicationDomainType::Ptr getObject(const QByteArray &resourceInstanceIdentifier, const QByteArray &identifier = QByteArray()) Q_DECL_OVERRIDE 0115 { 0116 return T::Ptr::create(resourceInstanceIdentifier, identifier, 0, QSharedPointer<Sink::ApplicationDomain::MemoryBufferAdaptor>::create()); 0117 } 0118 0119 KAsync::Job<void> create(const Sink::ApplicationDomain::ApplicationDomainType &type) Q_DECL_OVERRIDE 0120 { 0121 return Sink::Store::create<T>(*static_cast<const T *>(&type)); 0122 } 0123 0124 KAsync::Job<void> modify(const Sink::ApplicationDomain::ApplicationDomainType &type) Q_DECL_OVERRIDE 0125 { 0126 return Sink::Store::modify<T>(*static_cast<const T *>(&type)); 0127 } 0128 0129 KAsync::Job<void> remove(const Sink::ApplicationDomain::ApplicationDomainType &type) Q_DECL_OVERRIDE 0130 { 0131 return Sink::Store::remove<T>(*static_cast<const T *>(&type)); 0132 } 0133 0134 QSharedPointer<QAbstractItemModel> loadModel(const Sink::Query &query) Q_DECL_OVERRIDE 0135 { 0136 return Sink::Store::loadModel<T>(query); 0137 } 0138 0139 QList<Sink::ApplicationDomain::ApplicationDomainType> read(const Sink::Query &query) Q_DECL_OVERRIDE 0140 { 0141 QList<Sink::ApplicationDomain::ApplicationDomainType> list; 0142 for (const auto &o : Sink::Store::read<T>(query)) { 0143 list << o; 0144 } 0145 return list; 0146 } 0147 }; 0148 }