File indexing completed on 2024-05-12 05:22:24
0001 /* 0002 * SPDX-FileCopyrightText: 2021 Daniel Vrátil <dvratil@kde.org> 0003 * SPDX-FileCopyrightText: 2022 Claudio Cambra <claudio.cambra@kde.org> 0004 * 0005 * SPDX-License-Identifier: LGPL-2.1-only 0006 * SPDX-License-Identifier: LGPL-3.0-only 0007 * SPDX-License-Identifier: LicenseRef-KDE-Accepted-LGPL 0008 */ 0009 0010 #include "address.h" 0011 0012 #include "fieldmetadata.h" 0013 #include "peopleservice.h" 0014 0015 #include <QJsonValue> 0016 #include <QSharedData> 0017 0018 #include <algorithm> 0019 0020 namespace KGAPI2::People 0021 { 0022 class Address::Private : public QSharedData 0023 { 0024 public: 0025 explicit Private() = default; 0026 Private(const Private &) = default; 0027 Private(Private &&) noexcept = delete; 0028 Private &operator=(const Private &) = delete; 0029 Private &operator=(Private &&) noexcept = delete; 0030 ~Private() = default; 0031 0032 bool operator==(const Private &other) const 0033 { 0034 return formattedType == other.formattedType && city == other.city && metadata == other.metadata && countryCode == other.countryCode 0035 && postalCode == other.postalCode && poBox == other.poBox && type == other.type && formattedValue == other.formattedValue 0036 && extendedAddress == other.extendedAddress && region == other.region && streetAddress == other.streetAddress && country == other.country; 0037 } 0038 0039 bool operator!=(const Private &other) const 0040 { 0041 return !(*this == other); 0042 } 0043 0044 QString formattedType{}; 0045 QString city{}; 0046 FieldMetadata metadata{}; 0047 QString countryCode{}; 0048 QString postalCode{}; 0049 QString poBox{}; 0050 QString type{}; 0051 QString formattedValue{}; 0052 QString extendedAddress{}; 0053 QString region{}; 0054 QString streetAddress{}; 0055 QString country{}; 0056 }; 0057 0058 Address::Address() 0059 : d(new Private) 0060 { 0061 } 0062 0063 Address::Address(const Address &) = default; 0064 Address::Address(Address &&) noexcept = default; 0065 Address &Address::operator=(const Address &) = default; 0066 Address &Address::operator=(Address &&) noexcept = default; 0067 Address::~Address() = default; 0068 0069 bool Address::operator==(const Address &other) const 0070 { 0071 return *d == *other.d; 0072 } 0073 0074 bool Address::operator!=(const Address &other) const 0075 { 0076 return !(*this == other); 0077 } 0078 0079 QString Address::formattedType() const 0080 { 0081 return d->formattedType; 0082 } 0083 QString Address::city() const 0084 { 0085 return d->city; 0086 } 0087 0088 void Address::setCity(const QString &value) 0089 { 0090 d->city = value; 0091 } 0092 FieldMetadata Address::metadata() const 0093 { 0094 return d->metadata; 0095 } 0096 0097 void Address::setMetadata(const FieldMetadata &value) 0098 { 0099 d->metadata = value; 0100 } 0101 QString Address::countryCode() const 0102 { 0103 return d->countryCode; 0104 } 0105 0106 void Address::setCountryCode(const QString &value) 0107 { 0108 d->countryCode = value; 0109 } 0110 QString Address::postalCode() const 0111 { 0112 return d->postalCode; 0113 } 0114 0115 void Address::setPostalCode(const QString &value) 0116 { 0117 d->postalCode = value; 0118 } 0119 QString Address::poBox() const 0120 { 0121 return d->poBox; 0122 } 0123 0124 void Address::setPoBox(const QString &value) 0125 { 0126 d->poBox = value; 0127 } 0128 QString Address::type() const 0129 { 0130 return d->type; 0131 } 0132 0133 void Address::setType(const QString &value) 0134 { 0135 d->type = value; 0136 } 0137 QString Address::formattedValue() const 0138 { 0139 return d->formattedValue; 0140 } 0141 0142 void Address::setFormattedValue(const QString &value) 0143 { 0144 d->formattedValue = value; 0145 } 0146 QString Address::extendedAddress() const 0147 { 0148 return d->extendedAddress; 0149 } 0150 0151 void Address::setExtendedAddress(const QString &value) 0152 { 0153 d->extendedAddress = value; 0154 } 0155 QString Address::region() const 0156 { 0157 return d->region; 0158 } 0159 0160 void Address::setRegion(const QString &value) 0161 { 0162 d->region = value; 0163 } 0164 QString Address::streetAddress() const 0165 { 0166 return d->streetAddress; 0167 } 0168 0169 void Address::setStreetAddress(const QString &value) 0170 { 0171 d->streetAddress = value; 0172 } 0173 QString Address::country() const 0174 { 0175 return d->country; 0176 } 0177 0178 void Address::setCountry(const QString &value) 0179 { 0180 d->country = value; 0181 } 0182 0183 Address Address::fromJSON(const QJsonObject &obj) 0184 { 0185 Address address; 0186 0187 if(!obj.isEmpty()) { 0188 address.setMetadata(FieldMetadata::fromJSON(obj.value(QStringLiteral("metadata")).toObject())); 0189 address.setFormattedValue(obj.value(QStringLiteral("formattedValue")).toString()); 0190 address.setType(obj.value(QStringLiteral("type")).toString()); 0191 address.setPoBox(obj.value(QStringLiteral("poBox")).toString()); 0192 address.setStreetAddress(obj.value(QStringLiteral("streetAddress")).toString()); 0193 address.setExtendedAddress(obj.value(QStringLiteral("extendedAddress")).toString()); 0194 address.setCity(obj.value(QStringLiteral("city")).toString()); 0195 address.setRegion(obj.value(QStringLiteral("region")).toString()); 0196 address.setPostalCode(obj.value(QStringLiteral("postalCode")).toString()); 0197 address.setCountry(obj.value(QStringLiteral("country")).toString()); 0198 address.setCountryCode(obj.value(QStringLiteral("countryCode")).toString()); 0199 } 0200 0201 return address; 0202 } 0203 0204 QList<Address> Address::fromJSONArray(const QJsonArray &data) 0205 { 0206 QList<People::Address> addresses; 0207 0208 for(const auto &address : data) { 0209 if(address.isObject()) { 0210 const auto objectifiedAddress = address.toObject(); 0211 addresses.append(fromJSON(objectifiedAddress)); 0212 } 0213 } 0214 0215 return addresses; 0216 } 0217 0218 QJsonValue Address::toJSON() const 0219 { 0220 QJsonObject obj; 0221 0222 // Output only -> PeopleUtils::addValueToJsonObjectIfValid(obj, "formattedType", d->formattedType); 0223 PeopleUtils::addValueToJsonObjectIfValid(obj, "city", d->city); 0224 // Skip, field metadata is only useful for receiving -> PeopleUtils::addValueToJsonObjectIfValid(obj, "metadata", d->metadata.toJSON()); 0225 PeopleUtils::addValueToJsonObjectIfValid(obj, "countryCode", d->countryCode); 0226 PeopleUtils::addValueToJsonObjectIfValid(obj, "postalCode", d->postalCode); 0227 PeopleUtils::addValueToJsonObjectIfValid(obj, "poBox", d->poBox); 0228 PeopleUtils::addValueToJsonObjectIfValid(obj, "type", d->type); 0229 PeopleUtils::addValueToJsonObjectIfValid(obj, "formattedValue", d->formattedValue); 0230 PeopleUtils::addValueToJsonObjectIfValid(obj, "extendedAddress", d->extendedAddress); 0231 PeopleUtils::addValueToJsonObjectIfValid(obj, "region", d->region); 0232 PeopleUtils::addValueToJsonObjectIfValid(obj, "streetAddress", d->streetAddress); 0233 PeopleUtils::addValueToJsonObjectIfValid(obj, "country", d->country); 0234 return obj; 0235 } 0236 0237 } // namespace KGAPI2::People