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"