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 #include "vcard_group_data.h"
43 
44 namespace OHOS {
45 namespace Telephony {
46 class VCardContact {
47 public:
VCardContact()48     VCardContact()
49     {
50         vCardType_ = VERSION_21;
51         nameData_ = std::make_shared<VCardNameData>();
52         birthday_ = std::make_shared<VCardBirthdayData>();
53         anniversary_ = std::make_shared<VCardAnniversaryData>();
54     };
~VCardContact()55     ~VCardContact() {}
56     void AddRawData(std::shared_ptr<VCardRawData> rawData, int32_t &errorCode);
57     int32_t BuildContactData(int32_t rawId, std::vector<DataShare::DataShareValuesBucket> &contactDataValues);
58     int32_t BuildContact(std::shared_ptr<DataShare::DataShareResultSet> resultSet);
59     void Init();
60     std::shared_ptr<VCardNameData> GetNameData();
61     std::vector<std::shared_ptr<VCardNameData>> GetNames();
62     std::vector<std::shared_ptr<VCardRelationData>> GetRelations();
63     std::vector<std::shared_ptr<VCardImData>> GetIms();
64     std::vector<std::shared_ptr<VCardSipData>> GetSips();
65     std::vector<std::shared_ptr<VCardPhoneData>> GetPhones();
66     std::vector<std::shared_ptr<VCardOrganizationData>> GetOrganizations();
67     std::vector<std::shared_ptr<VCardWebsiteData>> GetWebsites();
68     std::vector<std::shared_ptr<VCardPhotoData>> GetPhotos();
69     std::vector<std::shared_ptr<VCardEmailData>> GetEmails();
70     std::vector<std::shared_ptr<VCardNicknameData>> GetNicknames();
71     std::vector<std::shared_ptr<VCardPostalData>> GetPostalDatas();
72     std::vector<std::shared_ptr<VCardEventData>> GetEventDatas();
73     std::vector<std::shared_ptr<VCardNoteData>> GetNotes();
74     std::shared_ptr<VCardBirthdayData> GetBirthdays();
75     std::vector<std::shared_ptr<VCardGroupData>> GetGroups();
76 
77 private:
78     void BuildValuesBucket(int32_t rawId, std::vector<DataShare::DataShareValuesBucket> &contactDataValues,
79         std::shared_ptr<VCardContactData> contactData);
80     template<typename T>
81     void BuildValuesBuckets(int32_t rawId, std::vector<DataShare::DataShareValuesBucket> &contactDataValues,
82         std::vector<std::shared_ptr<T>> &contactDatas);
83     template<typename T>
84     void BuildData(
85         std::shared_ptr<DataShare::DataShareResultSet> resultSet, std::vector<std::shared_ptr<T>> &contactDatas);
86     int32_t BuildOneData(std::shared_ptr<DataShare::DataShareResultSet> resultSet);
87     int32_t BuildOtherData(int32_t typeId, std::shared_ptr<DataShare::DataShareResultSet> resultSet);
88     void AddDatas(std::string name, std::string rawValue, std::string byte, std::vector<std::string> values,
89         std::string propValue, std::vector<std::string> groups,
90         std::map<std::string, std::vector<std::string>> parasMap);
91     void HandleName(std::vector<std::string> values, std::map<std::string, std::vector<std::string>> parasMap);
92     void HandleSortAsName(std::map<std::string, std::vector<std::string>> parasMap);
93     void HandleNickName(std::string nickName);
94     void HandlePhoneticNameFromSound(std::vector<std::string> elems);
95     void AddPostal(int32_t type, std::vector<std::string> propValueList, std::string label, bool isPrimary);
96     void AddEmail(int32_t type, std::string data, std::string label, std::string displayname, bool isPrimary);
97     void HandleOrgValue(int32_t type, std::vector<std::string> orgList,
98         std::map<std::string, std::vector<std::string>> paramMap, bool isPrimary);
99     std::string BuildSinglePhoneticNameFromSortAsParam(std::map<std::string, std::vector<std::string>> paramMap);
100     void AddNewOrganization(std::string organizationName, std::string departmentName, std::string company,
101         std::string titleName, std::string phoneticName, int32_t type, bool isPrimary);
102     void HandleTitleValue(std::string title);
103     void AddPhotoBytes(std::string formatName, std::string photoBytes, bool isPrimary);
104     void HandleSipCase(std::string propValue, std::vector<std::string> typeCollection);
105     void AddPhone(int32_t type, std::string data, std::string label, bool isPrimary);
106     void AddSip(std::string sipData, int32_t type, std::string label, bool isPrimary);
107     void AddNote(const std::string note);
108     void AddIms(std::string name, std::string rawValue, std::string propValue, std::vector<std::string> values,
109         std::map<std::string, std::vector<std::string>> parasMap);
110     void AddNameData(std::string name, std::string rawValue, std::vector<std::string> values,
111         std::map<std::string, std::vector<std::string>> parasMap, std::string propValue);
112     void AddCustom(
113         std::string rawValue, std::map<std::string, std::vector<std::string>> parasMap, std::string propValue);
114     void SetSip(std::string rawValue, std::map<std::string, std::vector<std::string>> parasMap, std::string propValue);
115     void AddSipData(
116         std::string rawValue, std::map<std::string, std::vector<std::string>> parasMap, std::string propValue);
117     void AddPhonesData(std::string rawValue, std::string propValue, std::vector<std::string> values,
118         std::map<std::string, std::vector<std::string>> parasMap);
119     void AddOrganizationsData(std::string rawValue, std::string propValue, std::vector<std::string> values,
120         std::map<std::string, std::vector<std::string>> parasMap);
121     void AddEmailsData(std::string rawValue, std::string propValue, std::vector<std::string> values,
122         std::map<std::string, std::vector<std::string>> parasMap);
123     void AddPostalDatas(std::string rawValue, std::string propValue, std::vector<std::string> values,
124         std::map<std::string, std::vector<std::string>> parasMap);
125     void AddSoundDatas(std::string rawValue, std::string propValue, std::vector<std::string> values,
126         std::map<std::string, std::vector<std::string>> parasMap);
127     void AddPhotoDatas(std::string byte, std::string rawValue, std::string propValue, std::vector<std::string> values,
128         std::map<std::string, std::vector<std::string>> parasMap);
129     void AddSkypePstnNumDatas(std::string propValue, std::map<std::string, std::vector<std::string>> parasMap);
130     void AddWebSiteDatas(std::string rawValue, std::string propValue, std::vector<std::string> values,
131         std::map<std::string, std::vector<std::string>> parasMap);
132     void AddBirthdayDatas(std::string rawValue);
133     void AddAnniversaryDatas(std::string propValue);
134     void AddImppDatas(std::string propValue, std::map<std::string, std::vector<std::string>> parasMap);
135     void HandlePhoneCase(std::string phoneNumber, std::string rawValue, std::string propValue,
136         std::vector<std::string> values, std::map<std::string, std::vector<std::string>> parasMap);
137     void AddOtherDatas(std::string name, std::string rawValue, std::string byte, std::vector<std::string> values,
138         std::string propValue, std::vector<std::string> groups,
139         std::map<std::string, std::vector<std::string>> parasMap);
140     std::vector<std::string> GetValueListFromParasMap(
141         std::string rawValue, std::string propValue, std::map<std::string, std::vector<std::string>> parasMap);
142     void CheckNameExist();
143     std::string ConvertHarmonyEvents(std::string type, std::string value);
144     void AddGroups(std::string rawValue);
145     void AddRemainDatas(std::string name, std::string rawValue, std::vector<std::string> values,
146         std::string propValue, std::map<std::string, std::vector<std::string>> parasMap);
147 
148 private:
149     const int32_t SORT_NAME_MAX_VALUE_SIZE = 3;
150     const int32_t N_MAX_VALUE_SIZE = 5;
151     const int32_t N_SUFFIX_VALUE_INDEX = 4;
152     const int32_t N_PREFIX_VALUE_INDEX = 3;
153     const int32_t N_MIDDLE_VALUE_INDEX = 2;
154     const int32_t N_GIVEN_VALUE_INDEX = 1;
155     const int32_t N_FAMILY_VALUE_INDEX = 0;
156     const int32_t PHONETIC_FAMILY_VALUE_INDEX = 0;
157     const int32_t PHONETIC_GIVEN_VALUE_INDEX = 1;
158     const int32_t PHONETIC_MIDDLE_VALUE_INDEX = 2;
159     const int32_t PHONE_NAME_SOUND_MAX_VALUE_SIZE = 3;
160     std::string vCardType_;
161     std::shared_ptr<VCardNameData> nameData_;
162     std::shared_ptr<VCardBirthdayData> birthday_;
163     std::shared_ptr<VCardAnniversaryData> anniversary_;
164     std::vector<std::shared_ptr<VCardNameData>> names_;
165     std::vector<std::shared_ptr<VCardPhoneData>> phones_;
166     std::vector<std::shared_ptr<VCardRelationData>> relations_;
167     std::vector<std::shared_ptr<VCardEmailData>> emails_;
168     std::vector<std::shared_ptr<VCardPostalData>> postals_;
169     std::vector<std::shared_ptr<VCardOrganizationData>> organizations_;
170     std::vector<std::shared_ptr<VCardImData>> ims_;
171     std::vector<std::shared_ptr<VCardPhotoData>> photos_;
172     std::vector<std::shared_ptr<VCardWebsiteData>> websites_;
173     std::vector<std::shared_ptr<VCardSipData>> sips_;
174     std::vector<std::shared_ptr<VCardNicknameData>> nicknames_;
175     std::vector<std::shared_ptr<VCardNoteData>> notes_;
176     std::vector<std::shared_ptr<VCardEventData>> events_;
177     std::vector<std::shared_ptr<VCardGroupData>> groups_;
178 };
179 } // namespace Telephony
180 } // namespace OHOS
181 #endif // OHOS_OHOS_VCARD_CONSRACT_H
182