1 /*
2  * Copyright (c) 2021-2022 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_FORM_FWK_FORM_DB_INFO_H
17 #define OHOS_FORM_FWK_FORM_DB_INFO_H
18 
19 #include <string>
20 
21 #include "form_record.h"
22 #include "nlohmann/json.hpp"
23 #include "form_constants.h"
24 
25 namespace OHOS {
26 namespace AppExecFwk {
27 struct FormDBInfo {
28     int64_t formId = -1;
29     int32_t userId = 0;
30     int32_t providerUserId = -1;
31     std::string formName;
32     std::string bundleName;
33     std::string moduleName;
34     std::string abilityName;
35     std::vector<int> formUserUids;
36     Constants::FormLocation formLocation;
37     bool isThemeForm = false;
38     bool enableForm = true;
39     /**
40      * @brief Constructors
41      *
42      */
43     FormDBInfo() = default;
44 
45     /**
46      * @brief Constructors
47      *
48      */
FormDBInfoFormDBInfo49     FormDBInfo(const int64_t formIdTmp, const FormRecord &formRecord)
50     {
51         formId = formIdTmp;
52         userId = formRecord.userId;
53         providerUserId = formRecord.providerUserId;
54         formName = formRecord.formName;
55         bundleName = formRecord.bundleName;
56         moduleName = formRecord.moduleName;
57         abilityName = formRecord.abilityName;
58         formUserUids = formRecord.formUserUids;
59         formLocation = formRecord.formLocation;
60         isThemeForm = formRecord.isThemeForm;
61         enableForm = formRecord.enableForm;
62     }
ContainsFormDBInfo63     bool Contains(const int uId) const
64     {
65         return std::find(formUserUids.begin(), formUserUids.end(), uId) != formUserUids.end();
66     }
RemoveFormDBInfo67     void Remove(const int uId)
68     {
69         auto itUId = std::find(formUserUids.begin(), formUserUids.end(), uId);
70         if (itUId != formUserUids.end()) {
71             formUserUids.erase(itUId);
72         }
73     }
74     /**
75      * @brief overloaded == for Indicates the formDBInfo by formId
76      * @return Returns true if the data equal; returns false otherwise.
77      */
78     bool operator== (const FormDBInfo &formDBInfo) const
79     {
80         return (this->formId == formDBInfo.formId);
81     }
82     /**
83      * @brief Compare two data
84      * @return Returns true if the data equal; returns false otherwise.
85      */
CompareFormDBInfo86     bool Compare(const FormDBInfo &formDBInfo) const
87     {
88         if (formId != formDBInfo.formId) {
89             return false;
90         }
91         if (userId != formDBInfo.userId) {
92             return false;
93         }
94         if (providerUserId != formDBInfo.providerUserId) {
95             return false;
96         }
97         if (formName != formDBInfo.formName) {
98             return false;
99         }
100         if (bundleName != formDBInfo.bundleName) {
101             return false;
102         }
103         if (moduleName != formDBInfo.moduleName) {
104             return false;
105         }
106         if (abilityName != formDBInfo.abilityName) {
107             return false;
108         }
109         if (formUserUids != formDBInfo.formUserUids) {
110             return false;
111         }
112         if (formLocation != formDBInfo.formLocation) {
113             return false;
114         }
115         if (isThemeForm != formDBInfo.isThemeForm) {
116             return false;
117         }
118         if (enableForm != formDBInfo.enableForm) {
119             return false;
120         }
121 
122         return true;
123     }
124 };
125 
126 class InnerFormInfo {
127 public:
128     /**
129      * @brief Constructors
130      */
InnerFormInfo()131     InnerFormInfo()
132     {
133         formDBInfo_.formId = -1;
134     }
135     /**
136      * @brief Constructors
137      *
138      */
InnerFormInfo(const FormDBInfo & formDBInfo)139     InnerFormInfo(const FormDBInfo &formDBInfo)
140     {
141         formDBInfo_.formId = formDBInfo.formId;
142         formDBInfo_.userId = formDBInfo.userId;
143         formDBInfo_.providerUserId = formDBInfo.providerUserId;
144         formDBInfo_.formName = formDBInfo.formName;
145         formDBInfo_.bundleName = formDBInfo.bundleName;
146         formDBInfo_.moduleName = formDBInfo.moduleName;
147         formDBInfo_.abilityName = formDBInfo.abilityName;
148         formDBInfo_.formUserUids = formDBInfo.formUserUids;
149         formDBInfo_.formLocation = formDBInfo.formLocation;
150         formDBInfo_.isThemeForm = formDBInfo.isThemeForm;
151         formDBInfo_.enableForm = formDBInfo.enableForm;
152     }
153     /**
154      * @brief Constructors
155      *
156      */
InnerFormInfo(const InnerFormInfo & innerFormInfo)157     InnerFormInfo(const InnerFormInfo &innerFormInfo)
158     {
159         formDBInfo_.formId = innerFormInfo.formDBInfo_.formId;
160         formDBInfo_.userId = innerFormInfo.formDBInfo_.userId;
161         formDBInfo_.providerUserId = innerFormInfo.formDBInfo_.providerUserId;
162         formDBInfo_.formName = innerFormInfo.formDBInfo_.formName;
163         formDBInfo_.bundleName = innerFormInfo.formDBInfo_.bundleName;
164         formDBInfo_.moduleName = innerFormInfo.formDBInfo_.moduleName;
165         formDBInfo_.abilityName = innerFormInfo.formDBInfo_.abilityName;
166         formDBInfo_.formUserUids = innerFormInfo.formDBInfo_.formUserUids;
167         formDBInfo_.formLocation = innerFormInfo.formDBInfo_.formLocation;
168         formDBInfo_.isThemeForm = innerFormInfo.formDBInfo_.isThemeForm;
169         formDBInfo_.enableForm = innerFormInfo.formDBInfo_.enableForm;
170     }
171      /**
172      * @brief Constructors
173      *
174      */
InnerFormInfo(const int64_t formId,const FormRecord & formRecord)175     InnerFormInfo(const int64_t formId, const FormRecord &formRecord)
176     {
177         formDBInfo_.formId = formId;
178         formDBInfo_.userId = formRecord.userId;
179         formDBInfo_.providerUserId = formRecord.providerUserId;
180         formDBInfo_.formName = formRecord.formName;
181         formDBInfo_.bundleName = formRecord.bundleName;
182         formDBInfo_.moduleName = formRecord.moduleName;
183         formDBInfo_.abilityName = formRecord.abilityName;
184         formDBInfo_.formUserUids = formRecord.formUserUids;
185         formDBInfo_.formLocation = formRecord.formLocation;
186         formDBInfo_.isThemeForm = formRecord.isThemeForm;
187         formDBInfo_.enableForm = formRecord.enableForm;
188     }
ToString()189     std::string ToString() const
190     {
191         nlohmann::json obj;
192         obj["formId"] = formDBInfo_.formId;
193         obj["userId"] = formDBInfo_.userId;
194         obj["providerUserId"] = formDBInfo_.providerUserId;
195         obj["formName"] = formDBInfo_.formName;
196         obj["bundleName"] = formDBInfo_.bundleName;
197         obj["moduleName"] = formDBInfo_.moduleName;
198         obj["abilityName"] = formDBInfo_.abilityName;
199         obj["formUserUids"] = formDBInfo_.formUserUids;
200         obj["formLocation"] = formDBInfo_.formLocation;
201         obj["isThemeForm"] = formDBInfo_.isThemeForm;
202         obj["enableForm"] = formDBInfo_.enableForm;
203         return obj.dump();
204     }
205     /**
206      * @brief Destructor
207      *
208      */
~InnerFormInfo()209     virtual ~InnerFormInfo() {};
210     /**
211      * @brief overloaded == for Indicates the formInfo by formId
212      * @return Returns true if the data equal; returns false otherwise.
213      */
214     bool operator== (const InnerFormInfo &innerFormInfo) const
215     {
216         return (this->formDBInfo_.formId == innerFormInfo.formDBInfo_.formId);
217     }
218 
219     /**
220      * @brief Transform the InnerFormInfo object to json.
221      * @param jsonObject Indicates the obtained json object.
222      */
223     void ToJson(nlohmann::json &jsonObject) const;
224 
225     /**
226      * @brief Transform the json object to InnerFormInfo object.
227      * @param jsonObject Indicates the obtained json object.
228      * @return Returns true on success, false on failure.
229      */
230     bool FromJson(const nlohmann::json &jsonObject);
231 
232     /**
233      * @brief Get application form id.
234      * @return Returns the form id.
235      */
GetFormId()236     int64_t GetFormId() const
237     {
238         return formDBInfo_.formId;
239     }
240 
241     /**
242      * @brief Set application form id.
243      * @param formId Indicates the form id to be set.
244      */
SetFormId(const int64_t formId)245     void SetFormId(const int64_t formId)
246     {
247         formDBInfo_.formId = formId;
248     }
249 
250    /**
251      * @brief Get application user id.
252      * @return Returns the user id.
253      */
GetUserId()254     int64_t GetUserId() const
255     {
256         return formDBInfo_.userId;
257     }
258 
259     /**
260      * @brief Set application user id.
261      * @param userId Indicates the user id to be set.
262      */
SetUserId(const int64_t userId)263     void SetUserId(const int64_t userId)
264     {
265         formDBInfo_.userId = userId;
266     }
267 
268     /**
269      * @brief Get application form name.
270      * @return Returns the form name.
271      */
GetModuleName()272     std::string GetModuleName() const
273     {
274         return formDBInfo_.moduleName;
275     }
276 
277     /**
278      * @brief Set application form name.
279      * @param formName Indicates the form name to be set.
280      */
SetModuleName(const std::string & moduleName)281     void SetModuleName(const std::string &moduleName)
282     {
283         formDBInfo_.moduleName = moduleName;
284     }
285 
286     /**
287      * @brief Get application bundle name.
288      * @return Returns the bundle name.
289      */
GetBundleName()290     std::string GetBundleName() const
291     {
292         return formDBInfo_.bundleName;
293     }
294 
295     /**
296      * @brief Set application bundle name.
297      * @param bundleName Indicates the bundle name to be set.
298      */
SetBundleName(const std::string & bundleName)299     void SetBundleName(const std::string &bundleName)
300     {
301         formDBInfo_.bundleName = bundleName;
302     }
303 
304     /**
305      * @brief Get application ability name.
306      * @return Returns the ability name.
307      */
GetAbilityName()308     std::string GetAbilityName() const
309     {
310         return formDBInfo_.abilityName;
311     }
312 
313     /**
314      * @brief Set application ability name.
315      * @param abilityName Indicates the ability name to be set.
316      */
SetAbilityName(const std::string & abilityName)317     void SetAbilityName(const std::string &abilityName)
318     {
319         formDBInfo_.abilityName = abilityName;
320     }
321 
322     /**
323      * @brief Get application formName.
324      * @return Returns the formName.
325      */
GetFormName()326     std::string GetFormName() const
327     {
328         return formDBInfo_.formName;
329     }
330 
331     /**
332      * @brief Set application formName.
333      * @param formName Indicates the formName to be set.
334      */
SetFormName(std::string formName)335     void SetFormName(std::string formName)
336     {
337         formDBInfo_.formName = formName;
338     }
339 
340     /**
341      * @brief Get application user uids.
342      * @return Returns the user uids.
343      */
GetUserUids()344     std::vector<int> GetUserUids() const
345     {
346         return formDBInfo_.formUserUids;
347     }
348 
349     /**
350      * @brief Set application user uids.
351      * @param userId Indicates the user uids to be set.
352      */
SetUserUids(const std::vector<int> & formUserUids)353     void SetUserUids(const std::vector<int> &formUserUids)
354     {
355         formDBInfo_.formUserUids.insert(formDBInfo_.formUserUids.end(), formUserUids.begin(), formUserUids.end());
356     }
357 
358     /**
359      * @brief Set application formRecord
360      * @param formRecord Indicates the formRecord to be set.
361      */
SetFormDBInfo(const FormDBInfo & formDBInfo)362     void SetFormDBInfo(const FormDBInfo &formDBInfo)
363     {
364         formDBInfo_ = formDBInfo;
365     }
366 
367     /**
368      * @brief Get application formRecord.
369      * @return Returns the formRecord
370      */
GetFormDBInfo()371     FormDBInfo GetFormDBInfo() const
372     {
373         return formDBInfo_;
374     }
375 
376     /**
377      * @brief Set whether it belongs to theme form.
378      * @param isThemeForm is theme form or not.
379      */
SetIsThemeForm(bool isThemeForm)380     void SetIsThemeForm(bool isThemeForm)
381     {
382         formDBInfo_.isThemeForm = isThemeForm;
383     }
384 
385     /**
386      * @brief Set whether it belongs to theme form.
387      * @param isThemeForm is theme form or not.
388      */
GetIsThemeForm()389     bool GetIsThemeForm() const
390     {
391         return formDBInfo_.isThemeForm;
392     }
393 
IsEnableForm()394     bool IsEnableForm() const
395     {
396         return formDBInfo_.enableForm;
397     }
398 
SetEnableForm(bool enableForm)399     void SetEnableForm(bool enableForm)
400     {
401         formDBInfo_.enableForm = enableForm;
402     }
403 
404     void AddUserUid(const int callingUid);
405     bool DeleteUserUid(const int callingUid);
406 
407 private:
408     FormDBInfo formDBInfo_;
409 };
410 }  // namespace AppExecFwk
411 }  // namespace OHOS
412 #endif  // OHOS_FORM_FWK_FORM_DB_INFO_H
413