• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2023-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 UNIFIED_META_H
17 #define UNIFIED_META_H
18 
19 #include <array>
20 #include <cstdint>
21 #include <map>
22 #include <memory>
23 #include <string>
24 #include <unordered_map>
25 #include <variant>
26 #include <vector>
27 
28 #include "string_ex.h"
29 
30 namespace OHOS {
31 namespace UDMF {
32 enum UDType : int32_t {
33     ENTITY = 0,
34     OBJECT,
35     COMPOSITE_OBJECT,
36     TEXT,
37     PLAIN_TEXT,
38     HTML,
39     HYPERLINK,
40     XML,
41     SOURCE_CODE,
42     SCRIPT,
43     SHELL_SCRIPT,
44     CSH_SCRIPT,
45     PERL_SCRIPT,
46     PHP_SCRIPT,
47     PYTHON_SCRIPT,
48     RUBY_SCRIPT,
49     TYPE_SCRIPT,
50     JAVA_SCRIPT,
51     C_HEADER,
52     C_SOURCE,
53     C_PLUS_PLUS_HEADER,
54     C_PLUS_PLUS_SOURCE,
55     JAVA_SOURCE,
56     EBOOK,
57     EPUB,
58     AZW,
59     AZW3,
60     KFX,
61     MOBI,
62     MEDIA,
63     IMAGE,
64     JPEG,
65     PNG,
66     RAW_IMAGE,
67     TIFF,
68     BMP,
69     ICO,
70     PHOTOSHOP_IMAGE,
71     AI_IMAGE,
72     WORD_DOC,
73     EXCEL,
74     PPT,
75     PDF,
76     POSTSCRIPT,
77     ENCAPSULATED_POSTSCRIPT,
78     VIDEO,
79     AVI,
80     MPEG,
81     MPEG4,
82     VIDEO_3GPP,
83     VIDEO_3GPP2,
84     WINDOWS_MEDIA_WM,
85     WINDOWS_MEDIA_WMV,
86     WINDOWS_MEDIA_WMP,
87     AUDIO,
88     AAC,
89     AIFF,
90     ALAC,
91     FLAC,
92     MP3,
93     OGG,
94     PCM,
95     WINDOWS_MEDIA_WMA,
96     WAVEFORM_AUDIO,
97     WINDOWS_MEDIA_WMX,
98     WINDOWS_MEDIA_WVX,
99     WINDOWS_MEDIA_WAX,
100     FILE,
101     DIRECTORY,
102     FOLDER,
103     SYMLINK,
104     ARCHIVE,
105     BZ2_ARCHIVE,
106     DISK_IMAGE,
107     TAR_ARCHIVE,
108     ZIP_ARCHIVE,
109     JAVA_ARCHIVE,
110     GNU_TAR_ARCHIVE,
111     GNU_ZIP_ARCHIVE,
112     GNU_ZIP_TAR_ARCHIVE,
113     CALENDAR,
114     CONTACT,
115     DATABASE,
116     MESSAGE,
117     VCARD,
118     NAVIGATION,
119     LOCATION,
120     SYSTEM_DEFINED_FORM,
121     SYSTEM_DEFINED_RECORD,
122     SYSTEM_DEFINED_APP_ITEM,
123     SYSTEM_DEFINED_PIXEL_MAP,
124     OPENHARMONY_ATOMIC_SERVICE,
125     APPLICATION_DEFINED_RECORD,
126     OPENHARMONY_PACKAGE,
127     OPENHARMONY_HAP,
128     UD_BUTT
129 };
130 
131 static const std::unordered_map<int32_t, std::string> UD_TYPE_MAP {
132     { ENTITY, "general.entity" },
133     { OBJECT, "general.object" },
134     { COMPOSITE_OBJECT, "general.composite-object" },
135     { TEXT, "general.text" },
136     { PLAIN_TEXT, "general.plain-text" },
137     { HTML, "general.html" },
138     { HYPERLINK, "general.hyperlink" },
139     { XML, "general.xml" },
140     { SOURCE_CODE, "general.source-code" },
141     { SCRIPT, "general.script" },
142     { SHELL_SCRIPT, "general.shell-script" },
143     { CSH_SCRIPT, "general.csh-script" },
144     { PERL_SCRIPT, "general.perl-script" },
145     { PHP_SCRIPT, "general.php-script" },
146     { PYTHON_SCRIPT, "general.python-script" },
147     { RUBY_SCRIPT, "general.ruby-script" },
148     { TYPE_SCRIPT, "general.type-script" },
149     { JAVA_SCRIPT, "general.java-script" },
150     { C_HEADER, "general.c-header" },
151     { C_SOURCE, "general.c-source" },
152     { C_PLUS_PLUS_HEADER, "general.c-plus-plus-header" },
153     { C_PLUS_PLUS_SOURCE, "general.c-plus-plus-source" },
154     { JAVA_SOURCE, "general.java-source" },
155     { EBOOK, "general.ebook" },
156     { EPUB, "general.epub" },
157     { AZW, "com.amazon.azw" },
158     { AZW3, "com.amazon.azw3" },
159     { KFX, "com.amazon.kfx" },
160     { MOBI, "com.amazon.mobi" },
161     { MEDIA, "general.media" },
162     { IMAGE, "general.image" },
163     { JPEG, "general.jpeg" },
164     { PNG, "general.png" },
165     { RAW_IMAGE, "general.raw-image" },
166     { TIFF, "general.tiff" },
167     { BMP, "com.microsoft.bmp" },
168     { ICO, "com.microsoft.ico" },
169     { PHOTOSHOP_IMAGE, "com.adobe.photoshop-image" },
170     { AI_IMAGE, "com.adobe.illustrator.ai-image" },
171     { WORD_DOC, "com.microsoft.word.doc" },
172     { EXCEL, "com.microsoft.excel.xls" },
173     { PPT, "com.microsoft.powerpoint.ppt" },
174     { PDF, "com.adobe.pdf" },
175     { POSTSCRIPT, "com.adobe.postscript" },
176     { ENCAPSULATED_POSTSCRIPT, "com.adobe.encapsulated-postscript" },
177     { VIDEO, "general.video" },
178     { AVI, "general.avi" },
179     { MPEG, "general.mpeg" },
180     { MPEG4, "general.mpeg-4" },
181     { VIDEO_3GPP, "general.3gpp" },
182     { VIDEO_3GPP2, "general.3gpp2" },
183     { WINDOWS_MEDIA_WM, "com.microsoft.windows-media-wm" },
184     { WINDOWS_MEDIA_WMV, "com.microsoft.windows-media-wmv" },
185     { WINDOWS_MEDIA_WMP, "com.microsoft.windows-media-wmp" },
186     { AUDIO, "general.audio" },
187     { AAC, "general.aac" },
188     { AIFF, "general.aiff" },
189     { ALAC, "general.alac" },
190     { FLAC, "general.flac" },
191     { MP3, "general.mp3" },
192     { OGG, "general.ogg" },
193     { PCM, "general.pcm" },
194     { WINDOWS_MEDIA_WMA, "com.microsoft.windows-media-wma" },
195     { WAVEFORM_AUDIO, "com.microsoft.waveform-audio" },
196     { WINDOWS_MEDIA_WMX, "com.microsoft.windows-media-wmx" },
197     { WINDOWS_MEDIA_WVX, "com.microsoft.windows-media-wvx" },
198     { WINDOWS_MEDIA_WAX, "com.microsoft.windows-media-wax" },
199     { FILE, "general.file" },
200     { DIRECTORY, "general.directory" },
201     { FOLDER, "general.folder" },
202     { SYMLINK, "general.symlink" },
203     { ARCHIVE, "general.archive" },
204     { BZ2_ARCHIVE, "general.bz2-archive" },
205     { DISK_IMAGE, "general.disk-image" },
206     { TAR_ARCHIVE, "general.tar-archive" },
207     { ZIP_ARCHIVE, "general.zip-archive" },
208     { JAVA_ARCHIVE, "com.sun.java-archive" },
209     { GNU_TAR_ARCHIVE, "org.gnu.gnu-tar-archive" },
210     { GNU_ZIP_ARCHIVE, "org.gnu.gnu-zip-archive" },
211     { GNU_ZIP_TAR_ARCHIVE, "org.gnu.gnu-zip-tar-archive" },
212     { CALENDAR, "general.calendar" },
213     { CONTACT, "general.contact" },
214     { DATABASE, "general.database" },
215     { MESSAGE, "general.message" },
216     { VCARD, "general.vcard" },
217     { NAVIGATION, "general.navigation" },
218     { LOCATION, "general.location" },
219     { SYSTEM_DEFINED_RECORD, "SystemDefinedType" },
220     { SYSTEM_DEFINED_FORM, "openharmony.form" },
221     { SYSTEM_DEFINED_APP_ITEM, "openharmony.app-item" },
222     { SYSTEM_DEFINED_PIXEL_MAP, "openharmony.pixel-map" },
223     { OPENHARMONY_ATOMIC_SERVICE, "openharmony.atomic-service" },
224     { APPLICATION_DEFINED_RECORD, "ApplicationDefinedType" },
225     { OPENHARMONY_PACKAGE, "openharmony.package" },
226     { OPENHARMONY_HAP, "openharmony.hap" },
227     { UD_BUTT, "INVALID"}
228 };
229 
230 static const std::unordered_map<int32_t, std::string> JS_UD_TYPE_NAME_MAP {
231     { ENTITY, "ENTITY" },
232     { OBJECT, "OBJECT" },
233     { COMPOSITE_OBJECT, "COMPOSITE_OBJECT" },
234     { TEXT, "TEXT" },
235     { PLAIN_TEXT, "PLAIN_TEXT" },
236     { HTML, "HTML" },
237     { HYPERLINK, "HYPERLINK" },
238     { XML, "XML" },
239     { SOURCE_CODE, "SOURCE_CODE" },
240     { SCRIPT, "SCRIPT" },
241     { SHELL_SCRIPT, "SHELL_SCRIPT" },
242     { CSH_SCRIPT, "CSH_SCRIPT" },
243     { PERL_SCRIPT, "PERL_SCRIPT" },
244     { PHP_SCRIPT, "PHP_SCRIPT" },
245     { PYTHON_SCRIPT, "PYTHON_SCRIPT" },
246     { RUBY_SCRIPT, "RUBY_SCRIPT" },
247     { TYPE_SCRIPT, "TYPE_SCRIPT" },
248     { JAVA_SCRIPT, "JAVA_SCRIPT" },
249     { C_HEADER, "C_HEADER" },
250     { C_SOURCE, "C_SOURCE" },
251     { C_PLUS_PLUS_HEADER, "C_PLUS_PLUS_HEADER" },
252     { C_PLUS_PLUS_SOURCE, "C_PLUS_PLUS_SOURCE" },
253     { JAVA_SOURCE, "JAVA_SOURCE" },
254     { EBOOK, "EBOOK" },
255     { EPUB, "EPUB" },
256     { AZW, "AZW" },
257     { AZW3, "AZW3" },
258     { KFX, "KFX" },
259     { MOBI, "MOBI" },
260     { MEDIA, "MEDIA" },
261     { IMAGE, "IMAGE" },
262     { JPEG, "JPEG" },
263     { PNG, "PNG" },
264     { RAW_IMAGE, "RAW_IMAGE" },
265     { TIFF, "TIFF" },
266     { BMP, "BMP" },
267     { ICO, "ICO" },
268     { PHOTOSHOP_IMAGE, "PHOTOSHOP_IMAGE" },
269     { AI_IMAGE, "AI_IMAGE" },
270     { WORD_DOC, "WORD_DOC" },
271     { EXCEL, "EXCEL" },
272     { PPT, "PPT" },
273     { PDF, "PDF" },
274     { POSTSCRIPT, "POSTSCRIPT" },
275     { ENCAPSULATED_POSTSCRIPT, "ENCAPSULATED_POSTSCRIPT" },
276     { VIDEO, "VIDEO" },
277     { AVI, "AVI" },
278     { MPEG, "MPEG" },
279     { MPEG4, "MPEG4" },
280     { VIDEO_3GPP, "VIDEO_3GPP" },
281     { VIDEO_3GPP2, "VIDEO_3GPP2" },
282     { WINDOWS_MEDIA_WM, "WINDOWS_MEDIA_WM" },
283     { WINDOWS_MEDIA_WMV, "WINDOWS_MEDIA_WMV" },
284     { WINDOWS_MEDIA_WMP, "WINDOWS_MEDIA_WMP" },
285     { AUDIO, "AUDIO" },
286     { AAC, "AAC" },
287     { AIFF, "AIFF" },
288     { ALAC, "ALAC" },
289     { FLAC, "FLAC" },
290     { MP3, "MP3" },
291     { OGG, "OGG" },
292     { PCM, "PCM" },
293     { WINDOWS_MEDIA_WMA, "WINDOWS_MEDIA_WMA" },
294     { WAVEFORM_AUDIO, "WAVEFORM_AUDIO" },
295     { WINDOWS_MEDIA_WMX, "WINDOWS_MEDIA_WMX" },
296     { WINDOWS_MEDIA_WVX, "WINDOWS_MEDIA_WVX" },
297     { WINDOWS_MEDIA_WAX, "WINDOWS_MEDIA_WAX" },
298     { FILE, "FILE" },
299     { DIRECTORY, "DIRECTORY" },
300     { FOLDER, "FOLDER" },
301     { SYMLINK, "SYMLINK" },
302     { ARCHIVE, "ARCHIVE" },
303     { BZ2_ARCHIVE, "BZ2_ARCHIVE" },
304     { DISK_IMAGE, "DISK_IMAGE" },
305     { TAR_ARCHIVE, "TAR_ARCHIVE" },
306     { ZIP_ARCHIVE, "ZIP_ARCHIVE" },
307     { JAVA_ARCHIVE, "JAVA_ARCHIVE" },
308     { GNU_TAR_ARCHIVE, "GNU_TAR_ARCHIVE" },
309     { GNU_ZIP_ARCHIVE, "GNU_ZIP_ARCHIVE" },
310     { GNU_ZIP_TAR_ARCHIVE, "GNU_ZIP_TAR_ARCHIVE" },
311     { CALENDAR, "CALENDAR" },
312     { CONTACT, "CONTACT" },
313     { DATABASE, "DATABASE" },
314     { MESSAGE, "MESSAGE" },
315     { VCARD, "VCARD" },
316     { NAVIGATION, "NAVIGATION" },
317     { LOCATION, "LOCATION" },
318     { SYSTEM_DEFINED_RECORD, "SYSTEM_DEFINED_RECORD" },
319     { SYSTEM_DEFINED_FORM, "OPENHARMONY_FORM" },
320     { SYSTEM_DEFINED_APP_ITEM, "OPENHARMONY_APP_ITEM" },
321     { SYSTEM_DEFINED_PIXEL_MAP, "OPENHARMONY_PIXEL_MAP" },
322     { OPENHARMONY_ATOMIC_SERVICE, "OPENHARMONY_ATOMIC_SERVICE" },
323     { APPLICATION_DEFINED_RECORD, "APPLICATION_DEFINED_RECORD" },
324     { OPENHARMONY_PACKAGE, "OPENHARMONY_PACKAGE" },
325     { OPENHARMONY_HAP, "OPENHARMONY_HAP" }
326 };
327 
328 /*
329  * UnifiedData variant definitions.
330  */
331 using UDVariant = std::variant<int32_t, int64_t, bool, double, std::string, std::vector<uint8_t>>;
332 using UDDetails = std::map<std::string, UDVariant>;
333 /*
334  * UnifiedData Intention.
335  */
336 enum Intention : int32_t {
337     UD_INTENTION_BASE = 0,
338     UD_INTENTION_DRAG,
339     UD_INTENTION_DATA_HUB,
340     UD_INTENTION_BUTT,
341 };
342 
343 static const std::unordered_map<int32_t, std::string> UD_INTENTION_MAP {
344     { UD_INTENTION_DRAG, "drag" },
345     { UD_INTENTION_DATA_HUB, "DataHub" },
346 };
347 
348 static const std::unordered_map<int32_t, std::string> JS_UD_INTENTION_NAME_MAP {
349     { UD_INTENTION_DATA_HUB, "DATA_HUB" },
350 };
351 
352 class UnifiedDataUtils {
353 public:
354     static bool IsValidType(int32_t value);
355     static bool IsValidIntention(int32_t value);
356     static size_t GetVariantSize(UDVariant &variant);
357     static size_t GetDetailsSize(UDDetails &details);
358     static bool IsPersist(const Intention &intention);
359     static bool IsPersist(const std::string &intention);
360     static Intention GetIntentionByString(const std::string &intention);
361     static bool IsValidOptions(const std::string &key, std::string &intention);
362 };
363 } // namespace UDMF
364 } // namespace OHOS
365 #endif // UNIFIED_META_H