File indexing completed on 2024-04-28 05:11:37
0001 /* 0002 * SPDX-FileCopyrightText: 2014 Sandro Knauß <knauss@kolabsys.com> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0005 * 0006 */ 0007 #include "resourceitem.h" 0008 0009 #include <KLDAPCore/LdapServer> 0010 0011 using namespace IncidenceEditorNG; 0012 0013 ResourceItem::ResourceItem(const KLDAPCore::LdapDN &dn, const QStringList &attrs, const KLDAPWidgets::LdapClient &ldapClient, const ResourceItem::Ptr &parent) 0014 : parentItem(parent) 0015 , dn(dn) 0016 , mAttrs(attrs) 0017 , mLdapClient(0, this) 0018 { 0019 if (!dn.isEmpty()) { 0020 KLDAPCore::LdapServer server = ldapClient.server(); 0021 0022 server.setScope(KLDAPCore::LdapUrl::Base); 0023 server.setBaseDn(dn); 0024 mLdapClient.setServer(server); 0025 0026 connect(&mLdapClient, &KLDAPWidgets::LdapClient::result, this, &ResourceItem::slotLDAPResult); 0027 0028 mAttrs << QStringLiteral("uniqueMember"); 0029 mLdapClient.setAttributes(attrs); 0030 } else { 0031 itemData.reserve(mAttrs.count()); 0032 for (const QString &header : std::as_const(mAttrs)) { 0033 itemData << header; 0034 } 0035 } 0036 } 0037 0038 ResourceItem::~ResourceItem() = default; 0039 0040 ResourceItem::Ptr ResourceItem::child(int number) 0041 { 0042 return childItems.value(number); 0043 } 0044 0045 int ResourceItem::childCount() const 0046 { 0047 return childItems.count(); 0048 } 0049 0050 int ResourceItem::childNumber() const 0051 { 0052 if (parentItem) { 0053 int i = 0; 0054 for (const ResourceItem::Ptr &child : std::as_const(parentItem->childItems)) { 0055 if (child == this) { 0056 return i; 0057 } 0058 i++; 0059 } 0060 } 0061 0062 return 0; 0063 } 0064 0065 int ResourceItem::columnCount() const 0066 { 0067 return itemData.count(); 0068 } 0069 0070 QVariant ResourceItem::data(int column) const 0071 { 0072 return itemData.value(column); 0073 } 0074 0075 QVariant ResourceItem::data(const QString &column) const 0076 { 0077 if (!mLdapObject.attributes()[column].isEmpty()) { 0078 return QString::fromUtf8(mLdapObject.attributes()[column][0]); 0079 } 0080 return {}; 0081 } 0082 0083 bool ResourceItem::insertChild(int position, const ResourceItem::Ptr &item) 0084 { 0085 if (position < 0 || position > childItems.size()) { 0086 return false; 0087 } 0088 0089 childItems.insert(position, item); 0090 0091 return true; 0092 } 0093 0094 ResourceItem::Ptr ResourceItem::parent() 0095 { 0096 return parentItem; 0097 } 0098 0099 bool ResourceItem::removeChildren(int position, int count) 0100 { 0101 if (position < 0 || position + count > childItems.size()) { 0102 return false; 0103 } 0104 0105 for (int row = 0; row < count; ++row) { 0106 childItems.removeAt(position); 0107 } 0108 0109 return true; 0110 } 0111 0112 const QStringList &ResourceItem::attributes() const 0113 { 0114 return mAttrs; 0115 } 0116 0117 const KLDAPCore::LdapObject &ResourceItem::ldapObject() const 0118 { 0119 return mLdapObject; 0120 } 0121 0122 void ResourceItem::startSearch() 0123 { 0124 mLdapClient.startQuery(QStringLiteral("objectclass=*")); 0125 } 0126 0127 void ResourceItem::setLdapObject(const KLDAPCore::LdapObject &obj) 0128 { 0129 slotLDAPResult(mLdapClient, obj); 0130 } 0131 0132 const KLDAPWidgets::LdapClient &ResourceItem::ldapClient() const 0133 { 0134 return mLdapClient; 0135 } 0136 0137 void ResourceItem::slotLDAPResult(const KLDAPWidgets::LdapClient &client, const KLDAPCore::LdapObject &obj) 0138 { 0139 Q_UNUSED(client) 0140 mLdapObject = obj; 0141 for (const QString &header : std::as_const(mAttrs)) { 0142 if (!obj.attributes()[header].isEmpty()) { 0143 itemData << QString::fromUtf8(obj.attributes()[header][0]); 0144 } else { 0145 itemData << QString(); 0146 } 0147 } 0148 Q_EMIT searchFinished(); 0149 } 0150 0151 #include "moc_resourceitem.cpp"