1 /*
2  * Copyright (C) 2023 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef OHOS_VCARD_CONSRACT_H
17 #define OHOS_VCARD_CONSRACT_H
18 #include <memory>
19 #include <mutex>
20 #include <type_traits>
21 #include <vector>
22 
23 #include "vcard_anniversary_data.h"
24 #include "vcard_birthday_data.h"
25 #include "vcard_constant.h"
26 #include "vcard_contact_data.h"
27 #include "vcard_email_data.h"
28 #include "vcard_event_data.h"
29 #include "vcard_im_data.h"
30 #include "vcard_name_data.h"
31 #include "vcard_nickname_data.h"
32 #include "vcard_note_data.h"
33 #include "vcard_organization_data.h"
34 #include "vcard_phone_data.h"
35 #include "vcard_photo_data.h"
36 #include "vcard_postal_data.h"
37 #include "vcard_raw_data.h"
38 #include "vcard_rdb_helper.h"
39 #include "vcard_relation_data.h"
40 #include "vcard_sip_data.h"
41 #include "vcard_website_data.h"
42 
43 namespace OHOS {
44 namespace Telephony {
45 class VCardContact {
46 public:
VCardContact()47     VCardContact()
48     {
49         vCardType_ = VERSION_21;
50         nameData_ = std::make_shared<VCardNameData>();
51         birthday_ = std::make_shared<VCardBirthdayData>();
52         anniversary_ = std::make_shared<VCardAnniversaryData>();
53     };
~VCardContact()54     ~VCardContact() {}
55     void AddRawData(std::shared_ptr<VCardRawData> rawData, int32_t &errorCode);
56     int32_t BuildContactData(int32_t rawId, std::vector<DataShare::DataShareValuesBucket> &contactDataValues);
57     int32_t BuildContact(std::shared_ptr<DataShare::DataShareResultSet> resultSet);
58     void Init();
59     std::shared_ptr<VCardNameData> GetNameData();
60     std::vector<std::shared_ptr<VCardNameData>> GetNames();
61     std::vector<std::shared_ptr<VCardRelationData>> GetRelations();
62     std::vector<std::shared_ptr<VCardImData>> GetIms();
63     std::vector<std::shared_ptr<VCardSipData>> GetSips();
64     std::vector<std::shared_ptr<VCardPhoneData>> GetPhones();
65     std::vector<std::shared_ptr<VCardOrganizationData>> GetOrganizations();
66     std::vector<std::shared_ptr<VCardWebsiteData>> GetWebsites();
67     std::vector<std::shared_ptr<VCardPhotoData>> GetPhotos();
68     std::vector<std::shared_ptr<VCardEmailData>> GetEmails();
69     std::vector<std::shared_ptr<VCardNicknameData>> GetNicknames();
70     std::vector<std::shared_ptr<VCardPostalData>> GetPostalDatas();
71     std::vector<std::shared_ptr<VCardEventData>> GetEventDatas();
72     std::vector<std::shared_ptr<VCardNoteData>> GetNotes();
73     std::shared_ptr<VCardBirthdayData> GetBirthdays();
74 
75 private:
76     void BuildValuesBucket(int32_t rawId, std::vector<DataShare::DataShareValuesBucket> &contactDataValues,
77         std::shared_ptr<VCardContactData> contactData);
78     template<typename T>
79     void BuildValuesBuckets(int32_t rawId, std::vector<DataShare::DataShareValuesBucket> &contactDataValues,
80         std::vector<std::shared_ptr<T>> &contactDatas);
81     template<typename T>
82     void BuildData(
83         std::shared_ptr<DataShare::DataShareResultSet> resultSet, std::vector<std::shared_ptr<T>> &contactDatas);
84     int32_t BuildOneData(std::shared_ptr<DataShare::DataShareResultSet> resultSet);
85     int32_t BuildOtherData(int32_t typeId, std::shared_ptr<DataShare::DataShareResultSet> resultSet);
86     void AddDatas(std::string name, std::string rawValue, std::string byte, std::vector<std::string> values,
87         std::string propValue, std::vector<std::string> groups,
88         std::map<std::string, std::vector<std::string>> parasMap);
89     void HandleName(std::vector<std::string> values, std::map<std::string, std::vector<std::string>> parasMap);
90     void HandleSortAsName(std::map<std::string, std::vector<std::string>> parasMap);
91     void HandleNickName(std::string nickName);
92     void HandlePhoneticNameFromSound(std::vector<std::string> elems);
93     void AddPostal(int32_t type, std::vector<std::string> propValueList, std::string label, bool isPrimary);
94     void AddEmail(int32_t type, std::string data, std::string label, std::string displayname, bool isPrimary);
95     void HandleOrgValue(int32_t type, std::vector<std::string> orgList,
96         std::map<std::string, std::vector<std::string>> paramMap, bool isPrimary);
97     std::string BuildSinglePhoneticNameFromSortAsParam(std::map<std::string, std::vector<std::string>> paramMap);
98     void AddNewOrganization(std::string organizationName, std::string departmentName, std::string company,
99         std::string titleName, std::string phoneticName, int32_t type, bool isPrimary);
100     void HandleTitleValue(std::string title);
101     void AddPhotoBytes(std::string formatName, std::string photoBytes, bool isPrimary);
102     void HandleSipCase(std::string propValue, std::vector<std::string> typeCollection);
103     void AddPhone(int32_t type, std::string data, std::string label, bool isPrimary);
104     void AddSip(std::string sipData, int32_t type, std::string label, bool isPrimary);
105     void AddNote(const std::string note);
106     void AddIms(std::string name, std::string rawValue, std::string propValue, std::vector<std::string> values,
107         std::map<std::string, std::vector<std::string>> parasMap);
108     void AddNameData(std::string name, std::string rawValue, std::vector<std::string> values,
109         std::map<std::string, std::vector<std::string>> parasMap, std::string propValue);
110     void AddCustom(
111         std::string rawValue, std::map<std::string, std::vector<std::string>> parasMap, std::string propValue);
112     void SetSip(std::string rawValue, std::map<std::string, std::vector<std::string>> parasMap, std::string propValue);
113     void AddSipData(
114         std::string rawValue, std::map<std::string, std::vector<std::string>> parasMap, std::string propValue);
115     void AddPhonesData(std::string rawValue, std::string propValue, std::vector<std::string> values,
116         std::map<std::string, std::vector<std::string>> parasMap);
117     void AddOrganizationsData(std::string rawValue, std::string propValue, std::vector<std::string> values,
118         std::map<std::string, std::vector<std::string>> parasMap);
119     void AddEmailsData(std::string rawValue, std::string propValue, std::vector<std::string> values,
120         std::map<std::string, std::vector<std::string>> parasMap);
121     void AddPostalDatas(std::string rawValue, std::string propValue, std::vector<std::string> values,
122         std::map<std::string, std::vector<std::string>> parasMap);
123     void AddSoundDatas(std::string rawValue, std::string propValue, std::vector<std::string> values,
124         std::map<std::string, std::vector<std::string>> parasMap);
125     void AddPhotoDatas(std::string byte, std::string rawValue, std::string propValue, std::vector<std::string> values,
126         std::map<std::string, std::vector<std::string>> parasMap);
127     void AddSkypePstnNumDatas(std::string propValue, std::map<std::string, std::vector<std::string>> parasMap);
128     void AddWebSiteDatas(std::string rawValue, std::string propValue, std::vector<std::string> values,
129         std::map<std::string, std::vector<std::string>> parasMap);
130     void AddBirthdayDatas(std::string rawValue);
131     void AddAnniversaryDatas(std::string propValue);
132     void AddImppDatas(std::string propValue, std::map<std::string, std::vector<std::string>> parasMap);
133     void HandlePhoneCase(std::string phoneNumber, std::string rawValue, std::string propValue,
134         std::vector<std::string> values, std::map<std::string, std::vector<std::string>> parasMap);
135     void AddOtherDatas(std::string name, std::string rawValue, std::string byte, std::vector<std::string> values,
136         std::string propValue, std::vector<std::string> groups,
137         std::map<std::string, std::vector<std::string>> parasMap);
138     std::vector<std::string> GetValueListFromParasMap(
139         std::string rawValue, std::string propValue, std::map<std::string, std::vector<std::string>> parasMap);
140     void CheckNameExist();
141     std::string ConvertHarmonyEvents(std::string type, std::string value);
142 
143 private:
144     const int32_t SORT_NAME_MAX_VALUE_SIZE = 3;
145     const int32_t N_MAX_VALUE_SIZE = 5;
146     const int32_t N_SUFFIX_VALUE_INDEX = 4;
147     const int32_t N_PREFIX_VALUE_INDEX = 3;
148     const int32_t N_MIDDLE_VALUE_INDEX = 2;
149     const int32_t N_GIVEN_VALUE_INDEX = 1;
150     const int32_t N_FAMILY_VALUE_INDEX = 0;
151     const int32_t PHONETIC_FAMILY_VALUE_INDEX = 0;
152     const int32_t PHONETIC_GIVEN_VALUE_INDEX = 1;
153     const int32_t PHONETIC_MIDDLE_VALUE_INDEX = 2;
154     const int32_t PHONE_NAME_SOUND_MAX_VALUE_SIZE = 3;
155     std::string vCardType_;
156     std::shared_ptr<VCardNameData> nameData_;
157     std::shared_ptr<VCardBirthdayData> birthday_;
158     std::shared_ptr<VCardAnniversaryData> anniversary_;
159     std::vector<std::shared_ptr<VCardNameData>> names_;
160     std::vector<std::shared_ptr<VCardPhoneData>> phones_;
161     std::vector<std::shared_ptr<VCardRelationData>> relations_;
162     std::vector<std::shared_ptr<VCardEmailData>> emails_;
163     std::vector<std::shared_ptr<VCardPostalData>> postals_;
164     std::vector<std::shared_ptr<VCardOrganizationData>> organizations_;
165     std::vector<std::shared_ptr<VCardImData>> ims_;
166     std::vector<std::shared_ptr<VCardPhotoData>> photos_;
167     std::vector<std::shared_ptr<VCardWebsiteData>> websites_;
168     std::vector<std::shared_ptr<VCardSipData>> sips_;
169     std::vector<std::shared_ptr<VCardNicknameData>> nicknames_;
170     std::vector<std::shared_ptr<VCardNoteData>> notes_;
171     std::vector<std::shared_ptr<VCardEventData>> events_;
172 };
173 } // namespace Telephony
174 } // namespace OHOS
175 #endif // OHOS_OHOS_VCARD_CONSRACT_H
176