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_DISTRIBUTEDWANT_WANT_H
17 #define OHOS_DISTRIBUTEDWANT_WANT_H
18 
19 #include <algorithm>
20 #include <string>
21 #include <vector>
22 #include "distributedWant/distributed_operation.h"
23 #include "distributedWant/distributed_want_params.h"
24 #include "element_name.h"
25 #include "nlohmann/json.hpp"
26 #include "parcel.h"
27 #include "uri.h"
28 #include "want.h"
29 
30 using DistributedOperation = OHOS::DistributedSchedule::DistributedOperation;
31 
32 namespace OHOS {
33 namespace DistributedSchedule {
34 class DistributedWant final : public Parcelable {
35 public:
36     /**
37      * Indicates the grant to perform read operations on the URI.
38      */
39     static constexpr unsigned int FLAG_AUTH_READ_URI_PERMISSION = 0x00000001;
40     /**
41      * Indicates the grant to perform write operations on the URI.
42      */
43     static constexpr unsigned int FLAG_AUTH_WRITE_URI_PERMISSION = 0x00000002;
44     /**
45      * Returns the result to the source ability.
46      */
47     static constexpr unsigned int FLAG_ABILITY_FORWARD_RESULT = 0x00000004;
48     /**
49      * Determines whether an ability on the local device can be migrated to a remote device.
50      */
51     static constexpr unsigned int FLAG_ABILITY_CONTINUATION = 0x00000008;
52     /**
53      * Specifies whether a component does not belong to OHOS.
54      */
55     static constexpr unsigned int FLAG_NOT_OHOS_COMPONENT = 0x00000010;
56     /**
57      * Specifies whether an ability is started.
58      */
59     static constexpr unsigned int FLAG_ABILITY_FORM_ENABLED = 0x00000020;
60     /**
61      * Indicates the grant for possible persisting on the URI.
62      */
63     static constexpr unsigned int FLAG_AUTH_PERSISTABLE_URI_PERMISSION = 0x00000040;
64     /**
65      * Returns the result to the source ability slice.
66      */
67     static constexpr unsigned int FLAG_AUTH_PREFIX_URI_PERMISSION = 0x00000080;
68     /**
69      * Supports multi-device startup in the distributed scheduling system.
70      */
71     static constexpr unsigned int FLAG_ABILITYSLICE_MULTI_DEVICE = 0x00000100;
72     /**
73      * Indicates that an ability using the Service template is started regardless of whether the host application has
74      * been started.
75      */
76     static constexpr unsigned int FLAG_START_FOREGROUND_ABILITY = 0x00000200;
77 
78     /**
79      * Indicates the continuation is reversible.
80      */
81     static constexpr unsigned int FLAG_ABILITY_CONTINUATION_REVERSIBLE = 0x00000400;
82 
83     /**
84      * Install the specified ability if it's not installed.
85      */
86     static constexpr unsigned int FLAG_INSTALL_ON_DEMAND = 0x00000800;
87     /**
88      * Returns the result to the source ability slice.
89      */
90     static constexpr unsigned int FLAG_ABILITYSLICE_FORWARD_RESULT = 0x04000000;
91     /**
92      * Install the specifiedi ability with background mode if it's not installed.
93      */
94     static constexpr unsigned int FLAG_INSTALL_WITH_BACKGROUND_MODE = 0x80000000;
95 
96     /**
97      * @description:  Default construcotr of DistributedWant class, which is used to initialzie flags and URI.
98      * @param None
99      * @return None
100      */
101     DistributedWant();
102 
103     /**
104      * @description: Default deconstructor of DistributedWant class
105      * @param None
106      * @return None
107      */
108     ~DistributedWant();
109 
110     /**
111      * @description: Copy construcotr of DistributedWant class, which is used to initialzie flags, URI, etc.
112      * @param want the source instance of DistributedWant.
113      * @return None
114      */
115     DistributedWant(const DistributedWant& want);
116     DistributedWant& operator=(const DistributedWant&);
117     DistributedWant(const AAFwk::Want& want);
118 
119     /**
120      * @description: Sets a flag in a DistributedWant.
121      * @param flags Indicates the flag to set.
122      * @return Returns this DistributedWant object containing the flag.
123      */
124     DistributedWant& SetFlags(unsigned int flags);
125 
126     /**
127      * @description: Obtains the description of flags in a DistributedWant.
128      * @return Returns the flag description in the DistributedWant.
129      */
130     unsigned int GetFlags() const;
131 
132     /**
133      * @description: Adds a flag to a DistributedWant.
134      * @param flags Indicates the flag to add.
135      * @return Returns the DistributedWant object with the added flag.
136      */
137     DistributedWant& AddFlags(unsigned int flags);
138 
139     /**
140      * @description: Removes the description of a flag from a DistributedWant.
141      * @param flags Indicates the flag to remove.
142      * @return Removes the description of a flag from a DistributedWant.
143      */
144     void RemoveFlags(unsigned int flag);
145 
146     /**
147      * @description: Sets the bundleName and abilityName attributes for this DistributedWant object.
148      * @param bundleName Indicates the bundleName to set for the operation attribute in the DistributedWant.
149      * @param abilityName Indicates the abilityName to set for the operation attribute in the DistributedWant.
150      * @return Returns this DistributedWant object that contains the specified bundleName and abilityName attributes.
151      */
152     DistributedWant& SetElementName(const std::string& bundleName, const std::string& abilityName);
153 
154     /**
155      * @description: Sets the bundleName and abilityName attributes for this DistributedWant object.
156      * @param deviceId Indicates the deviceId to set for the operation attribute in the DistributedWant.
157      * @param bundleName Indicates the bundleName to set for the operation attribute in the DistributedWant.
158      * @param abilityName Indicates the abilityName to set for the operation attribute in the DistributedWant.
159      * @return Returns this DistributedWant object that contains the specified bundleName and abilityName attributes.
160      */
161     DistributedWant& SetElementName(
162         const std::string& deviceId, const std::string& bundleName, const std::string& abilityName);
163 
164     /**
165      * @description: Sets an ElementName object in a DistributedWant.
166      * @param element Indicates the ElementName description.
167      * @return Returns this DistributedWant object containing the ElementName
168      */
169     DistributedWant& SetElement(const OHOS::AppExecFwk::ElementName& element);
170 
171     /**
172      * @description: Obtains the description of the ElementName object in a DistributedWant.
173      * @return Returns the ElementName description in the DistributedWant.
174      */
175     OHOS::AppExecFwk::ElementName GetElement() const;
176 
177     /**
178      * @description: Obtains the description of a URI in a DistributedWant.
179      * @return Returns the URI description in the DistributedWant.
180      */
181     OHOS::Uri GetUri() const;
182 
183     /**
184      * @description: Obtains the string representation of the URI in this DistributedWant.
185      * @return Returns the string of the URI.
186      */
187     std::string GetUriString() const;
188 
189     /**
190      * @description: Sets the description of a URI in a DistributedWant.
191      * @param uri Indicates the URI description.
192      * @return Returns this DistributedWant object containing the URI.
193      */
194     DistributedWant& SetUri(const std::string& uri);
195 
196     /**
197      * @description: Sets the description of a URI in a DistributedWant.
198      * @param uri Indicates the URI description.
199      * @return Returns this DistributedWant object containing the URI.
200      */
201     DistributedWant& SetUri(const OHOS::Uri& uri);
202 
203     /**
204      * @description: Sets the description of a URI and a type in this DistributedWant.
205      * @param uri Indicates the URI description.
206      * @param type Indicates the type description.
207      * @return Returns the DistributedWant object containing the URI and the type by setting.
208      */
209     DistributedWant& SetUriAndType(const OHOS::Uri& uri, const std::string& type);
210 
211     /**
212      * @description: Formats a specified URI.
213      * This method uses the Uri.getLowerCaseScheme() method to format a URI and then saves
214      * the formatted URI to this DistributedWant object.
215      * @param uri Indicates the string of URI to format.
216      * @return Returns this DistributedWant object that contains the formatted uri attribute.
217      */
218     DistributedWant& FormatUri(const std::string& uri);
219 
220     /**
221      * @description: Formats a specified URI.
222      * This method uses the Uri.getLowerCaseScheme() method to format a URI and then saves
223      * the formatted URI to this DistributedWant object.
224      * @param uri Indicates the URI to format.
225      * @return Returns this DistributedWant object that contains the formatted URI attribute.
226      */
227     DistributedWant& FormatUri(const OHOS::Uri& uri);
228 
229     /**
230      * @description: Obtains the description of an action in a DistributedWant.
231      * @return Returns a DistributedWant object that contains the action description.
232      */
233     std::string GetAction() const;
234 
235     /**
236      * @description: Sets the description of an action in a DistributedWant.
237      * @param action Indicates the action description to set.
238      * @return Returns a DistributedWant object that contains the action description.
239      */
240     DistributedWant& SetAction(const std::string& action);
241 
242     /**
243      * @description: Obtains the name of the specified bundle in a DistributedWant.
244      * @return Returns the specified bundle name in the DistributedWant.
245      */
246     std::string GetBundle() const;
247 
248     /**
249      * @description: Sets a bundle name in this DistributedWant.
250      * If a bundle name is specified in a DistributedWant, the DistributedWant will match only
251      * the abilities in the specified bundle. You cannot use this method and
252      * setPicker(ohos.aafwk.content.DistributedWant) on the same DistributedWant.
253      * @param bundleName Indicates the bundle name to set.
254      * @return Returns a DistributedWant object containing the specified bundle name.
255      */
256     DistributedWant& SetBundle(const std::string& bundleName);
257 
258     /**
259      * @description: Obtains the description of all entities in a DistributedWant
260      * @return Returns a set of entities
261      */
262     const std::vector<std::string>& GetEntities() const;
263 
264     /**
265      * @description: Adds the description of an entity to a DistributedWant
266      * @param entity Indicates the entity description to add
267      * @return {DistributedWant} Returns this DistributedWant object containing the entity.
268      */
269     DistributedWant& AddEntity(const std::string& entity);
270 
271     /**
272      * @description: Removes the description of an entity from a DistributedWant
273      * @param entity Indicates the entity description to remove.
274      * @return void
275      */
276     void RemoveEntity(const std::string& entity);
277 
278     /**
279      * @description: Checks whether a DistributedWant contains the given entity
280      * @param entity Indicates the entity to check
281      * @return Returns true if the given entity is contained; returns false otherwise
282      */
283     bool HasEntity(const std::string& key) const;
284 
285     /**
286      * @description: Obtains the number of entities in a DistributedWant
287      * @return Returns the entity quantity
288      */
289     int CountEntities();
290 
291     /**
292      * @description: Obtains the description of the URI scheme in this DistributedWant.
293      * @return Returns the URI scheme description in this DistributedWant.
294      */
295     const std::string GetScheme() const;
296 
297     /**
298      * @description: Obtains the description of the type in this DistributedWant
299      * @return Returns the type description in this DistributedWant
300      */
301     std::string GetType() const;
302 
303     /**
304      * @description: Sets the description of a type in this DistributedWant
305      * @param type Indicates the type description
306      * @return Returns this DistributedWant object containing the type
307      */
308     DistributedWant& SetType(const std::string& type);
309 
310     /**
311      * @description: clear the specific DistributedWant object.
312      * @param want Indicates the DistributedWant to clear
313      */
314     static void ClearWant(DistributedWant* want);
315 
316     /**
317      * @description: Obtains the description of the DistributedWantParams object in a DistributedWant
318      * @return Returns the DistributedWantParams description in the DistributedWant
319      */
320     const DistributedWantParams& GetParams() const;
321 
322     /**
323      * @description: Sets a DistributedWantParams object in a want.
324      * @param wantParams  Indicates the DistributedWantParams description.
325      * @return Returns this want object containing the DistributedWantParams.
326      */
327     DistributedWant& SetParams(const DistributedWantParams& wantParams);
328 
329     /**
330      * @description: Obtains a bool-type value matching the given key.
331      * @param key   Indicates the key of DistributedWantParams.
332      * @param defaultValue  Indicates the default bool-type value.
333      * @return Returns the bool-type value of the parameter matching the given key;
334      * returns the default value if the key does not exist.
335      */
336     bool GetBoolParam(const std::string& key, bool defaultValue) const;
337 
338     /**
339      * @description: Obtains a bool-type array matching the given key.
340      * @param key   Indicates the key of DistributedWantParams.
341      * @return Returns the bool-type array of the parameter matching the given key;
342      * returns null if the key does not exist.
343      */
344     std::vector<bool> GetBoolArrayParam(const std::string& key) const;
345 
346     /**
347      * @description: Sets a parameter value of the IRemoteObject type.
348      * @param key   Indicates the key matching the parameter.
349      * @param value Indicates the IRemoteObject value of the parameter.
350      * @return Returns this want object containing the parameter value.
351      */
352     DistributedWant& SetParam(const std::string& key, const sptr<IRemoteObject>& remoteObject);
353 
354     /**
355      * @description: Sets a parameter value of the boolean type.
356      * @param key   Indicates the key matching the parameter.
357      * @param value Indicates the boolean value of the parameter.
358      * @return Returns this DistributedWant object containing the parameter value.
359      */
360     DistributedWant& SetParam(const std::string& key, bool value);
361 
362     /**
363      * @description: Sets a parameter value of the boolean array type.
364      * @param key   Indicates the key matching the parameter.
365      * @param value Indicates the boolean array of the parameter.
366      * @return Returns this DistributedWant object containing the parameter value.
367      */
368     DistributedWant& SetParam(const std::string& key, const std::vector<bool>& value);
369 
370     /**
371      * @description: Obtains a byte-type value matching the given key.
372      * @param key   Indicates the key of DistributedWantParams.
373      * @param defaultValue  Indicates the default byte-type value.
374      * @return Returns the byte-type value of the parameter matching the given key;
375      * returns the default value if the key does not exist.
376      */
377     AAFwk::byte GetByteParam(const std::string& key, AAFwk::byte defaultValue) const;
378 
379     /**
380      * @description: Obtains a byte-type array matching the given key.
381      * @param key   Indicates the key of DistributedWantParams.
382      * @return Returns the byte-type array of the parameter matching the given key;
383      * returns null if the key does not exist.
384      */
385     std::vector<AAFwk::byte> GetByteArrayParam(const std::string& key) const;
386 
387     /**
388      * @description: Sets a parameter value of the byte type.
389      * @param key   Indicates the key matching the parameter.
390      * @param value Indicates the byte-type value of the parameter.
391      * @return Returns this DistributedWant object containing the parameter value.
392      */
393     DistributedWant& SetParam(const std::string& key, AAFwk::byte value);
394 
395     /**
396      * @description: Sets a parameter value of the byte array type.
397      * @param key   Indicates the key matching the parameter.
398      * @param value Indicates the byte array of the parameter.
399      * @return Returns this DistributedWant object containing the parameter value.
400      */
401     DistributedWant& SetParam(const std::string& key, const std::vector<AAFwk::byte>& value);
402 
403     /**
404      * @description: Obtains a char value matching the given key.
405      * @param key   Indicates the key of wnatParams.
406      * @param value Indicates the default char value.
407      * @return Returns the char value of the parameter matching the given key;
408      * returns the default value if the key does not exist.
409      */
410     AAFwk::zchar GetCharParam(const std::string& key, AAFwk::zchar defaultValue) const;
411 
412     /**
413      * @description: Obtains a char array matching the given key.
414      * @param key   Indicates the key of DistributedWantParams.
415      * @return Returns the char array of the parameter matching the given key;
416      * returns null if the key does not exist.
417      */
418     std::vector<AAFwk::zchar> GetCharArrayParam(const std::string& key) const;
419 
420     /**
421      * @description: Sets a parameter value of the char type.
422      * @param key   Indicates the key of DistributedWantParams.
423      * @param value Indicates the char value of the parameter.
424      * @return Returns this DistributedWant object containing the parameter value.
425      */
426     DistributedWant& SetParam(const std::string& key, AAFwk::zchar value);
427 
428     /**
429      * @description: Sets a parameter value of the char array type.
430      * @param key   Indicates the key of DistributedWantParams.
431      * @param value Indicates the char array of the parameter.
432      * @return Returns this DistributedWant object containing the parameter value.
433      */
434     DistributedWant& SetParam(const std::string& key, const std::vector<AAFwk::zchar>& value);
435 
436     /**
437      * @description: Obtains an int value matching the given key.
438      * @param key   Indicates the key of DistributedWantParams.
439      * @param value Indicates the default int value.
440      * @return Returns the int value of the parameter matching the given key;
441      * returns the default value if the key does not exist.
442      */
443     int GetIntParam(const std::string& key, int defaultValue) const;
444 
445     /**
446      * @description: Obtains an int array matching the given key.
447      * @param key   Indicates the key of DistributedWantParams.
448      * @return Returns the int array of the parameter matching the given key;
449      * returns null if the key does not exist.
450      */
451     std::vector<int> GetIntArrayParam(const std::string& key) const;
452 
453     /**
454      * @description: Sets a parameter value of the int type.
455      * @param key   Indicates the key matching the parameter.
456      * @param value Indicates the int value of the parameter.
457      * @return Returns this DistributedWant object containing the parameter value.
458      */
459     DistributedWant& SetParam(const std::string& key, int value);
460 
461     /**
462      * @description: Sets a parameter value of the int array type.
463      * @param key   Indicates the key matching the parameter.
464      * @param value Indicates the int array of the parameter.
465      * @return Returns this DistributedWant object containing the parameter value.
466      */
467     DistributedWant& SetParam(const std::string& key, const std::vector<int>& value);
468 
469     /**
470      * @description: Obtains a double value matching the given key.
471      * @param key   Indicates the key of DistributedWantParams.
472      * @param defaultValue  Indicates the default double value.
473      * @return Returns the double value of the parameter matching the given key;
474      * returns the default value if the key does not exist.
475      */
476     double GetDoubleParam(const std::string& key, double defaultValue) const;
477 
478     /**
479      * @description: Obtains a double array matching the given key.
480      * @param key   Indicates the key of DistributedWantParams.
481      * @return Returns the double array of the parameter matching the given key;
482      * returns null if the key does not exist.
483      */
484     std::vector<double> GetDoubleArrayParam(const std::string& key) const;
485 
486     /**
487      * @description: Sets a parameter value of the double type.
488      * @param key   Indicates the key matching the parameter.
489      * @param value Indicates the int value of the parameter.
490      * @return Returns this DistributedWant object containing the parameter value.
491      */
492     DistributedWant& SetParam(const std::string& key, double value);
493 
494     /**
495      * @description: Sets a parameter value of the double array type.
496      * @param key   Indicates the key matching the parameter.
497      * @param value Indicates the double array of the parameter.
498      * @return Returns this DistributedWant object containing the parameter value.
499      */
500     DistributedWant& SetParam(const std::string& key, const std::vector<double>& value);
501 
502     /**
503      * @description: Obtains a float value matching the given key.
504      * @param key   Indicates the key of wnatParams.
505      * @param value Indicates the default float value.
506      * @return Returns the float value of the parameter matching the given key;
507      * returns the default value if the key does not exist.
508      */
509     float GetFloatParam(const std::string& key, float defaultValue) const;
510 
511     /**
512      * @description: Obtains a float array matching the given key.
513      * @param key Indicates the key of DistributedWantParams.
514      * @return Obtains a float array matching the given key.
515      */
516     std::vector<float> GetFloatArrayParam(const std::string& key) const;
517 
518     /**
519      * @description: Sets a parameter value of the float type.
520      * @param key Indicates the key matching the parameter.
521      * @param value Indicates the byte-type value of the parameter.
522      * @return Returns this DistributedWant object containing the parameter value.
523      */
524     DistributedWant& SetParam(const std::string& key, float value);
525 
526     /**
527      * @description: Sets a parameter value of the float array type.
528      * @param key Indicates the key matching the parameter.
529      * @param value Indicates the byte-type value of the parameter.
530      * @return Returns this DistributedWant object containing the parameter value.
531      */
532     DistributedWant& SetParam(const std::string& key, const std::vector<float>& value);
533 
534     /**
535      * @description: Obtains a long value matching the given key.
536      * @param key Indicates the key of DistributedWantParams.
537      * @param value Indicates the default long value.
538      * @return Returns the long value of the parameter matching the given key;
539      * returns the default value if the key does not exist.
540      */
541     long GetLongParam(const std::string& key, long defaultValue) const;
542 
543     /**
544      * @description: Obtains a long array matching the given key.
545      * @param key Indicates the key of DistributedWantParams.
546      * @return Returns the long array of the parameter matching the given key;
547      * returns null if the key does not exist.
548      */
549     std::vector<long> GetLongArrayParam(const std::string& key) const;
550 
551     DistributedWant& SetParam(const std::string& key, long long value);
552 
553     /**
554      * @description: Sets a parameter value of the long type.
555      * @param key Indicates the key matching the parameter.
556      * @param value Indicates the byte-type value of the parameter.
557      * @return Returns this DistributedWant object containing the parameter value.
558      */
559     DistributedWant& SetParam(const std::string& key, long value);
560 
561     /**
562      * @description: Sets a parameter value of the long array type.
563      * @param key Indicates the key matching the parameter.
564      * @param value Indicates the byte-type value of the parameter.
565      * @return Returns this DistributedWant object containing the parameter value.
566      */
567     DistributedWant& SetParam(const std::string& key, const std::vector<long>& value);
568 
569     /**
570      * @description: a short value matching the given key.
571      * @param key Indicates the key of DistributedWantParams.
572      * @param defaultValue Indicates the default short value.
573      * @return Returns the short value of the parameter matching the given key;
574      * returns the default value if the key does not exist.
575      */
576     short GetShortParam(const std::string& key, short defaultValue) const;
577 
578     /**
579      * @description: Obtains a short array matching the given key.
580      * @param key Indicates the key of DistributedWantParams.
581      * @return Returns the short array of the parameter matching the given key;
582      * returns null if the key does not exist.
583      */
584     std::vector<short> GetShortArrayParam(const std::string& key) const;
585 
586     /**
587      * @description: Sets a parameter value of the short type.
588      * @param key Indicates the key matching the parameter.
589      * @param value Indicates the byte-type value of the parameter.
590      * @return Returns this DistributedWant object containing the parameter value.
591      */
592     DistributedWant& SetParam(const std::string& key, short value);
593 
594     /**
595      * @description: Sets a parameter value of the short array type.
596      * @param key Indicates the key matching the parameter.
597      * @param value Indicates the byte-type value of the parameter.
598      * @return Returns this DistributedWant object containing the parameter value.
599      */
600     DistributedWant& SetParam(const std::string& key, const std::vector<short>& value);
601 
602     /**
603      * @description: Obtains a string value matching the given key.
604      * @param key Indicates the key of DistributedWantParams.
605      * @return Returns the string value of the parameter matching the given key;
606      * returns null if the key does not exist.
607      */
608     std::string GetStringParam(const std::string& key) const;
609 
610     /**
611      * @description: Obtains a string array matching the given key.
612      * @param key Indicates the key of DistributedWantParams.
613      * @return Returns the string array of the parameter matching the given key;
614      * returns null if the key does not exist.
615      */
616     std::vector<std::string> GetStringArrayParam(const std::string& key) const;
617 
618     /**
619      * @description: Sets a parameter value of the string type.
620      * @param key Indicates the key matching the parameter.
621      * @param value Indicates the byte-type value of the parameter.
622      * @return Returns this DistributedWant object containing the parameter value.
623      */
624     DistributedWant& SetParam(const std::string& key, const std::string& value);
625 
626     /**
627      * @description: Sets a parameter value of the string array type.
628      * @param key Indicates the key matching the parameter.
629      * @param value Indicates the byte-type value of the parameter.
630      * @return Returns this DistributedWant object containing the parameter value.
631      */
632     DistributedWant& SetParam(const std::string& key, const std::vector<std::string>& value);
633 
634     /**
635      * @description: Checks whether a DistributedWant contains the parameter matching a given key.
636      * @param key Indicates the key.
637      * @return Returns true if the DistributedWant contains the parameter; returns false otherwise.
638      */
639     bool HasParameter(const std::string& key) const;
640 
641     /**
642      * @description: Replaces parameters in this Want object with those in the given DistributedWantParams object.
643      * @param wantParams Indicates the DistributedWantParams object containing the new parameters.
644      * @return Returns this Want object containing the new parameters.
645      */
646     DistributedWant* ReplaceParams(DistributedWantParams& wantParams);
647 
648     /**
649      * @description: Replaces parameters in this DistributedWant object with those in the given Want object.
650      * @param want Indicates the DistributedWant object containing the new parameters.
651      * @return Returns this DistributedWant object containing the new parameters.
652      */
653     DistributedWant* ReplaceParams(DistributedWant& want);
654 
655     /**
656      * @description: Removes the parameter matching the given key.
657      * @param key Indicates the key matching the parameter to be removed.
658      */
659     void RemoveParam(const std::string& key);
660 
661     /**
662      * @description: Gets the description of an operation in a DistributedWant.
663      * @return Returns the operation included in this DistributedWant.
664      */
665     DistributedOperation GetOperation() const;
666 
667     /**
668      * @description: Sets the description of an operation in a DistributedWant.
669      * @param operation Indicates the operation description.
670      */
671     void SetOperation(const DistributedOperation& operation);
672 
673     /**
674      * @description: Sets the description of an operation in a DistributedWant.
675      * @param want Indicates the DistributedWant object to compare.
676      * @return Returns true if the operation components of the two objects are equal; returns false otherwise.
677      */
678     bool OperationEquals(const DistributedWant& want);
679 
680     /**
681      * @description: Marshals a DistributedWant into a Parcel.
682      * Fields in the DistributedWant are marshalled separately. If any field fails to be marshalled, false is returned.
683      * @param parcel Indicates the Parcel object for marshalling.
684      * @return Returns true if the marshalling is successful; returns false otherwise.
685      */
686     virtual bool Marshalling(Parcel& parcel) const;
687 
688     /**
689      * @description: Unmarshals a DistributedWant from a Parcel.
690      * Fields in the DistributedWant are unmarshalled separately.
691      * If any field fails to be unmarshalled, false is returned.
692      * @param parcel Indicates the Parcel object for unmarshalling.
693      * @return Returns true if the unmarshalling is successful; returns false otherwise.
694      */
695     static DistributedWant* Unmarshalling(Parcel& parcel);
696 
697     std::string ToString() const;
698 
699     static DistributedWant* FromString(std::string& string);
700 
701     std::shared_ptr<AAFwk::Want> ToWant();
702 
703     /**
704     * @description: Sets a device id in a DistributedWant.
705     * @param deviceId Indicates the device id to set.
706     * @return Returns this DistributedWant object containing the flag.
707     */
708     DistributedWant& SetDeviceId(const std::string& deviceId);
709 public:
710     static const std::string ACTION_PLAY;
711     static const std::string ACTION_HOME;
712     static const std::string ENTITY_HOME;
713     static const std::string ENTITY_VIDEO;
714     static const std::string FLAG_HOME_INTENT_FROM_SYSTEM;
715     static const std::string ENTITY_MUSIC;
716     static const std::string ENTITY_EMAIL;
717     static const std::string ENTITY_CONTACTS;
718     static const std::string ENTITY_MAPS;
719     static const std::string ENTITY_BROWSER;
720     static const std::string ENTITY_CALENDAR;
721     static const std::string ENTITY_MESSAGING;
722     static const std::string ENTITY_FILES;
723     static const std::string ENTITY_GALLERY;
724     static unsigned int FLAG_ABILITY_NEW_MISSION;
725     static unsigned int FLAG_ABILITY_CLEAR_MISSION;
726     static constexpr int HEX_STRING_BUF_LEN = 36;
727     static constexpr int HEX_STRING_LEN = 10;
728     static const std::string PARAM_RESV_WINDOW_MODE;
729     static const std::string PARAM_RESV_DISPLAY_ID;
730     static const std::string PARAM_RESV_CALLER_TOKEN;
731     static const std::string PARAM_RESV_CALLER_UID;
732     static const std::string PARAM_RESV_CALLER_PID;
733 
734 private:
735     DistributedWantParams parameters_;
736     DistributedOperation operation_;
737 
738     static const std::string OCT_EQUALSTO;
739     static const std::string OCT_SEMICOLON;
740     static const std::string MIME_TYPE;
741     static const std::string WANT_HEADER;
742 
743     static constexpr int VALUE_NULL = -1;
744     static constexpr int VALUE_OBJECT = 1;
745 
746 private:
747     bool ReadFromParcel(Parcel& parcel);
748     OHOS::Uri GetLowerCaseScheme(const OHOS::Uri& uri);
749     nlohmann::json ToJson() const;
750     bool ReadFromJson(nlohmann::json& wantJson);
751     bool CanReadFromJson(nlohmann::json& wantJson);
752     bool MarshallingWriteEntities(Parcel& parcel) const;
753     bool MarshallingWriteElement(Parcel& parcel) const;
754     bool MarshallingWriteParameters(Parcel& parcel) const;
755     bool MarshallingWriteUri(Parcel& parcel) const;
756     bool ReadUriFromParcel(Parcel& parcel);
757     bool ReadEntitiesFromParcel(Parcel& parcel);
758     bool ReadElementFromParcel(Parcel& parcel);
759     bool ReadParametersFromParcel(Parcel& parcel);
760 };
761 } // namespace DistributedSchedule
762 } // namespace OHOS
763 #endif // OHOS_DISTRIBUTEDWANT_WANT_H
764