1/*
2 * Copyright (c) 2021 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 FOUNDATION_EVENT_CESFWK_KITS_NATIVE_INCLUDE_MATCHING_SKILLS_H
17#define FOUNDATION_EVENT_CESFWK_KITS_NATIVE_INCLUDE_MATCHING_SKILLS_H
18
19#include "parcel.h"
20#include "want.h"
21
22namespace OHOS {
23namespace EventFwk {
24using Want = OHOS::AAFwk::Want;
25
26class MatchingSkills : public Parcelable {
27public:
28    MatchingSkills();
29
30    /**
31     * A constructor used to create a MatchingSkills object instance by using the parameters of an existing
32     * MatchingSkills object.
33     */
34    MatchingSkills(const MatchingSkills &matchingSkills);
35
36    ~MatchingSkills();
37
38    /**
39     * Obtains an entity.
40     *
41     * @param index Indicates the entity index.
42     * @return Returns entity.
43     */
44    std::string GetEntity(size_t index) const;
45
46    /**
47     * Adds an entity to this MatchingSkills object.
48     *
49     * @param entity Indicates the entity.
50     */
51    void AddEntity(const std::string &entity);
52
53    /**
54     * Checks whether the entity is in this MatchingSkills object.
55     *
56     * @param event Indicates specified entity in MatchingSkills object.
57     * @return Returns whether the entity is in MatchingSkills object or not.
58     */
59    bool HasEntity(const std::string &entity) const;
60
61    /**
62     * Removes entity.
63     *
64     * @param event Indicates specified entity in MatchingSkills object.
65     */
66    void RemoveEntity(const std::string &entity);
67
68    /**
69     * Gets entity count.
70     *
71     * @return Returns entity count.
72     */
73    size_t CountEntities() const;
74
75    /**
76     * Adds an event to this MatchingSkills object.
77     *
78     * @param event Indicates the event.
79     */
80    void AddEvent(const std::string &event);
81
82    /**
83     * Gets event count.
84     *
85     * @return Indicates the event count in MatchingSkills object.
86     */
87    size_t CountEvent() const;
88
89    /**
90     * Gets event.
91     *
92     * @param index Indicates the scheme index.
93     * @return Returns the event in MatchingSkills object.
94     */
95    std::string GetEvent(size_t index) const;
96
97    /**
98     * Gets events.
99     *
100     * @return Returns the events in MatchingSkills object.
101     */
102    std::vector<std::string> GetEvents() const;
103
104    /**
105     * Removes events.
106     *
107     * @return Indicates the event in MatchingSkills object.
108     */
109    void RemoveEvent(const std::string &event);
110
111    /**
112     * Checks whether the event is in this MatchingSkills object.
113     *
114     * @param event Indicates specified event in MatchingSkills object
115     * @return Returns whether the event in MatchingSkills object or not.
116     */
117    bool HasEvent(const std::string &event) const;
118
119    /**
120     * Obtains an Scheme.
121     *
122     * @param index Indicates the scheme index.
123     * @return Returns scheme.
124     */
125    std::string GetScheme(size_t index) const;
126
127    /**
128     * Adds scheme to this MatchingSkills object.
129     *
130     * @param scheme Indicates the scheme.
131     */
132    void AddScheme(const std::string &scheme);
133
134    /**
135     * Checks whether the scheme is in this MatchingSkills object.
136     *
137     * @param scheme Indicates specified scheme in MatchingSkills object.
138     * @return Returns whether the scheme in MatchingSkills object or not.
139     */
140    bool HasScheme(const std::string &scheme) const;
141
142    /**
143     * Removes entity.
144     *
145     * @param event Indicates the entity in MatchingSkills object.
146     */
147    void RemoveScheme(const std::string &scheme);
148
149    /**
150     * Gets scheme count.
151     *
152     * @return Returns scheme count.
153     */
154    size_t CountSchemes() const;
155
156    /**
157     * Matches want.
158     *
159     * @param want Indicates the want in MatchingSkills object.
160     * @return Returns the match want result.
161     */
162    bool Match(const Want &want) const;
163
164    /**
165     * Marshals this MatchingSkills object into a Parcel.
166     *
167     * @param parcel Indicates specified Parcel object.
168     * @return Returns the marshalling result.
169     */
170    virtual bool Marshalling(Parcel &parcel) const override;
171
172    /**
173     * Unmarshals this MatchingSkills object from a Parcel.
174     *
175     * @param parcel Indicates the parcel.
176     * @return Returns the MatchingSkills.
177     */
178    static MatchingSkills *Unmarshalling(Parcel &parcel);
179
180    bool WriteVectorInfo(Parcel &parcel, std::vector<std::u16string>vectorInfo) const;
181
182private:
183    /**
184     * Reads MatchingSkills object from a Parcel.
185     *
186     * @param parcel Indicates specified Parcel object.
187     * @return Returns read from parcel success or fail.
188     */
189    bool ReadFromParcel(Parcel &parcel);
190
191    /**
192     * Matches event.
193     *
194     * @param parcel Indicates the event in want.
195     * @return Returns match event success or fail.
196     */
197    bool MatchEvent(const std::string &event) const;
198
199    /**
200     * Matches entity.
201     *
202     * @param parcel Indicates the entity in want.
203     * @return Returns match entity success or fail.
204     */
205    bool MatchEntity(const std::vector<std::string> &entities) const;
206
207    /**
208     * Matches scheme.
209     *
210     * @param parcel Indicates the scheme in want.
211     * @return Returns match scheme success or fail.
212     */
213    bool MatchScheme(const std::string &scheme) const;
214
215private:
216    std::vector<std::string> entities_;
217    std::vector<std::string> events_;
218    std::vector<std::string> schemes_;
219    static constexpr int32_t VALUE_NULL = -1;
220    static constexpr int32_t VALUE_OBJECT = 1;
221};
222}  // namespace EventFwk
223}  // namespace OHOS
224
225#endif  // FOUNDATION_EVENT_CESFWK_KITS_NATIVE_INCLUDE_MATCHING_SKILLS_H