• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 #define LOG_TAG "UnifiedMeta"
17 #include "unified_meta.h"
18 
19 #include "logger.h"
20 #include "unified_key.h"
21 #include "utd_client.h"
22 
23 namespace OHOS {
24 namespace UDMF {
25 static constexpr UtdType UTD_TYPES[] = {
26     { ENTITY, "ENTITY", "general.entity" },
27     { OBJECT, "OBJECT", "general.object" },
28     { COMPOSITE_OBJECT, "COMPOSITE_OBJECT", "general.composite-object" },
29     { TEXT, "TEXT", "general.text" },
30     { PLAIN_TEXT, "PLAIN_TEXT", "general.plain-text" },
31     { HTML, "HTML", "general.html" },
32     { HYPERLINK, "HYPERLINK", "general.hyperlink" },
33     { XML, "XML", "general.xml" },
34     { SOURCE_CODE, "SOURCE_CODE", "general.source-code" },
35     { SCRIPT, "SCRIPT", "general.script" },
36     { SHELL_SCRIPT, "SHELL_SCRIPT", "general.shell-script" },
37     { CSH_SCRIPT, "CSH_SCRIPT", "general.csh-script" },
38     { PERL_SCRIPT, "PERL_SCRIPT", "general.perl-script" },
39     { PHP_SCRIPT, "PHP_SCRIPT", "general.php-script" },
40     { PYTHON_SCRIPT, "PYTHON_SCRIPT", "general.python-script" },
41     { RUBY_SCRIPT, "RUBY_SCRIPT", "general.ruby-script" },
42     { TYPE_SCRIPT, "TYPE_SCRIPT", "general.type-script" },
43     { JAVA_SCRIPT, "JAVA_SCRIPT", "general.java-script" },
44     { C_HEADER, "C_HEADER", "general.c-header" },
45     { C_SOURCE, "C_SOURCE", "general.c-source" },
46     { C_PLUS_PLUS_HEADER, "C_PLUS_PLUS_HEADER", "general.c-plus-plus-header" },
47     { C_PLUS_PLUS_SOURCE, "C_PLUS_PLUS_SOURCE", "general.c-plus-plus-source" },
48     { JAVA_SOURCE, "JAVA_SOURCE", "general.java-source" },
49     { EBOOK, "EBOOK", "general.ebook" },
50     { EPUB, "EPUB", "general.epub" },
51     { AZW, "AZW", "com.amazon.azw" },
52     { AZW3, "AZW3", "com.amazon.azw3" },
53     { KFX, "KFX", "com.amazon.kfx" },
54     { MOBI, "MOBI", "com.amazon.mobi" },
55     { MEDIA, "MEDIA", "general.media" },
56     { IMAGE, "IMAGE", "general.image" },
57     { JPEG, "JPEG", "general.jpeg" },
58     { PNG, "PNG", "general.png" },
59     { RAW_IMAGE, "RAW_IMAGE", "general.raw-image" },
60     { TIFF, "TIFF", "general.tiff" },
61     { BMP, "BMP", "com.microsoft.bmp" },
62     { ICO, "ICO", "com.microsoft.ico" },
63     { PHOTOSHOP_IMAGE, "PHOTOSHOP_IMAGE", "com.adobe.photoshop-image" },
64     { AI_IMAGE, "AI_IMAGE", "com.adobe.illustrator.ai-image" },
65     { WORD_DOC, "WORD_DOC", "com.microsoft.word.doc" },
66     { EXCEL, "EXCEL", "com.microsoft.excel.xls" },
67     { PPT, "PPT", "com.microsoft.powerpoint.ppt" },
68     { PDF, "PDF", "com.adobe.pdf" },
69     { POSTSCRIPT, "POSTSCRIPT", "com.adobe.postscript" },
70     { ENCAPSULATED_POSTSCRIPT, "ENCAPSULATED_POSTSCRIPT", "com.adobe.encapsulated-postscript" },
71     { VIDEO, "VIDEO", "general.video" },
72     { AVI, "AVI", "general.avi" },
73     { MPEG, "MPEG", "general.mpeg" },
74     { MPEG4, "MPEG4", "general.mpeg-4" },
75     { VIDEO_3GPP, "VIDEO_3GPP", "general.3gpp" },
76     { VIDEO_3GPP2, "VIDEO_3GPP2", "general.3gpp2" },
77     { WINDOWS_MEDIA_WM, "WINDOWS_MEDIA_WM", "com.microsoft.windows-media-wm" },
78     { WINDOWS_MEDIA_WMV, "WINDOWS_MEDIA_WMV", "com.microsoft.windows-media-wmv" },
79     { WINDOWS_MEDIA_WMP, "WINDOWS_MEDIA_WMP", "com.microsoft.windows-media-wmp" },
80     { AUDIO, "AUDIO", "general.audio" },
81     { AAC, "AAC", "general.aac" },
82     { AIFF, "AIFF", "general.aiff" },
83     { ALAC, "ALAC", "general.alac" },
84     { FLAC, "FLAC", "general.flac" },
85     { MP3, "MP3", "general.mp3" },
86     { OGG, "OGG", "general.ogg" },
87     { PCM, "PCM", "general.pcm" },
88     { WINDOWS_MEDIA_WMA, "WINDOWS_MEDIA_WMA", "com.microsoft.windows-media-wma" },
89     { WAVEFORM_AUDIO, "WAVEFORM_AUDIO", "com.microsoft.waveform-audio" },
90     { WINDOWS_MEDIA_WMX, "WINDOWS_MEDIA_WMX", "com.microsoft.windows-media-wmx" },
91     { WINDOWS_MEDIA_WVX, "WINDOWS_MEDIA_WVX", "com.microsoft.windows-media-wvx" },
92     { WINDOWS_MEDIA_WAX, "WINDOWS_MEDIA_WAX", "com.microsoft.windows-media-wax" },
93     { FILE, "FILE", "general.file" },
94     { DIRECTORY, "DIRECTORY", "general.directory" },
95     { FOLDER, "FOLDER", "general.folder" },
96     { SYMLINK, "SYMLINK", "general.symlink" },
97     { ARCHIVE, "ARCHIVE", "general.archive" },
98     { BZ2_ARCHIVE, "BZ2_ARCHIVE", "general.bz2-archive" },
99     { DISK_IMAGE, "DISK_IMAGE", "general.disk-image" },
100     { TAR_ARCHIVE, "TAR_ARCHIVE", "general.tar-archive" },
101     { ZIP_ARCHIVE, "ZIP_ARCHIVE", "general.zip-archive" },
102     { JAVA_ARCHIVE, "JAVA_ARCHIVE", "com.sun.java-archive" },
103     { GNU_TAR_ARCHIVE, "GNU_TAR_ARCHIVE", "org.gnu.gnu-tar-archive" },
104     { GNU_ZIP_ARCHIVE, "GNU_ZIP_ARCHIVE", "org.gnu.gnu-zip-archive" },
105     { GNU_ZIP_TAR_ARCHIVE, "GNU_ZIP_TAR_ARCHIVE", "org.gnu.gnu-zip-tar-archive" },
106     { CALENDAR, "CALENDAR", "general.calendar" },
107     { CONTACT, "CONTACT", "general.contact" },
108     { DATABASE, "DATABASE", "general.database" },
109     { MESSAGE, "MESSAGE", "general.message" },
110     { VCARD, "VCARD", "general.vcard" },
111     { NAVIGATION, "NAVIGATION", "general.navigation" },
112     { LOCATION, "LOCATION", "general.location" },
113     { SYSTEM_DEFINED_RECORD, "SYSTEM_DEFINED_RECORD", "SystemDefinedType" },
114     { SYSTEM_DEFINED_FORM, "OPENHARMONY_FORM", "openharmony.form" },
115     { SYSTEM_DEFINED_APP_ITEM, "OPENHARMONY_APP_ITEM", "openharmony.app-item" },
116     { SYSTEM_DEFINED_PIXEL_MAP, "OPENHARMONY_PIXEL_MAP", "openharmony.pixel-map" },
117     { OPENHARMONY_ATOMIC_SERVICE, "OPENHARMONY_ATOMIC_SERVICE", "openharmony.atomic-service" },
118     { APPLICATION_DEFINED_RECORD, "APPLICATION_DEFINED_RECORD", "ApplicationDefinedType" },
119     { OPENHARMONY_PACKAGE, "OPENHARMONY_PACKAGE", "openharmony.package" },
120     { OPENHARMONY_HAP, "OPENHARMONY_HAP", "openharmony.hap" },
121     { SMIL, "SMIL", "com.real.smil" },
122     { MARKDOWN, "MARKDOWN", "general.markdown" },
123     { FAX, "FAX", "general.fax" },
124     { JFX_FAX, "JFX_FAX", "com.j2.jfx-fax" },
125     { EFX_FAX, "EFX_FAX", "com.js.efx-fax" },
126     { XBITMAP_IMAGE, "XBITMAP_IMAGE", "general.xbitmap-image" },
127     { TGA_IMAGE, "TGA_IMAGE", "com.truevision.tga-image" },
128     { SGI_IMAGE, "SGI_IMAGE", "com.sgi.sgi-image" },
129     { OPENEXR_IMAGE, "OPENEXR_IMAGE", "com.ilm.openexr-image" },
130     { FLASHPIX_IMAGE, "FLASHPIX_IMAGE", "com.kodak.flashpix.image" },
131     { REALMEDIA, "REALMEDIA", "com.real.realmedia" },
132     { AU_AUDIO, "AU_AUDIO", "general.au-audio" },
133     { AIFC_AUDIO, "AIFC_AUDIO", "general.aifc-audio" },
134     { SD2_AUDIO, "SD2_AUDIO", "com.digidesign.sd2-audio" },
135     { REALAUDIO, "REALAUDIO", "com.real.realaudio" },
136     { OPENXML, "OPENXML", "org.openxmlformats.openxml" },
137     { WORDPROCESSINGML_DOCUMENT, "WORDPROCESSINGML_DOCUMENT",
138       "org.openxmlformats.wordprocessingml.document" },
139     { SPREADSHEETML_SHEET, "SPREADSHEETML_SHEET", "org.openxmlformats.spreadsheetml.sheet" },
140     { PRESENTATIONML_PRESENTATION, "PRESENTATIONML_PRESENTATION",
141       "org.openxmlformats.presentationml.presentation" },
142     { OPENDOCUMENT, "OPENDOCUMENT", "org.oasis.opendocument" },
143     { OPENDOCUMENT_TEXT, "OPENDOCUMENT_TEXT", "org.oasis.opendocument.text" },
144     { OPENDOCUMENT_SPREADSHEET, "OPENDOCUMENT_SPREADSHEET", "org.oasis.opendocument.spreadsheet" },
145     { OPENDOCUMENT_PRESENTATION, "OPENDOCUMENT_PRESENTATION", "org.oasis.opendocument.presentation" },
146     { OPENDOCUMENT_GRAPHICS, "OPENDOCUMENT_GRAPHICS", "org.oasis.opendocument.graphics" },
147     { OPENDOCUMENT_FORMULA, "OPENDOCUMENT_FORMULA", "org.oasis.opendocument.formula" },
148     { STUFFIT_ARCHIVE, "STUFFIT_ARCHIVE", "com.allume.stuffit-archive" },
149     { VCS, "VCS", "general.vcs" },
150     { ICS, "ICS", "general.ics" },
151     { EXECUTABLE, "EXECUTABLE", "general.executable" },
152     { PORTABLE_EXECUTABLE, "PORTABLE_EXECUTABLE", "com.microsoft.portable-executable" },
153     { SUN_JAVA_CLASS, "SUN_JAVA_CLASS", "com.sun.java-class" },
154     { FONT, "FONT", "general.font" },
155     { TRUETYPE_FONT, "TRUETYPE_FONT", "general.truetype-font" },
156     { TRUETYPE_COLLECTION_FONT, "TRUETYPE_COLLECTION_FONT", "general.truetype-collection-font" },
157     { OPENTYPE_FONT, "OPENTYPE_FONT", "general.opentype-font" },
158     { POSTSCRIPT_FONT, "POSTSCRIPT_FONT", "com.adobe.postscript-font" },
159     { POSTSCRIPT_PFB_FONT, "POSTSCRIPT_PFB_FONT", "com.adobe.postscript-pfb-font" },
160     { POSTSCRIPT_PFA_FONT, "POSTSCRIPT_PFA_FONT", "com.adobe.postscript-pfa-font" },
161     { OPENHARMONY_HDOC, "OPENHARMONY_HDOC", "openharmony.hdoc" },
162     { OPENHARMONY_HINOTE, "OPENHARMONY_HINOTE", "openharmony.hinote" },
163     { OPENHARMONY_STYLED_STRING, "OPENHARMONY_STYLED_STRING", "openharmony.styled-string" },
164     { OPENHARMONY_WANT, "OPENHARMONY_WANT", "openharmony.want" },
165     { OFD, "OFD", "general.ofd" },
166     { OPG, "OPG", "general.opg" },
167     { TEX, "TEX", "general.tex" },
168     { CSS, "CSS", "general.css" },
169     { VOB, "VOB", "general.vob" },
170     { DIF_VIDEO, "DIF_VIDEO", "general.dif-video" },
171     { DV_VIDEO, "DV_VIDEO", "general.dv-video" },
172     { FLC_ANIMATION, "FLC_ANIMATION", "general.flc-animation" },
173     { MNG, "MNG", "general.mng" },
174     { MPEGURL_VIDEO, "MPEGURL_VIDEO", "general.mpegurl-video" },
175     { TS, "TS", "general.ts" },
176     { AMR, "AMR", "general.amr" },
177     { AMR_WB, "AMR_WB", "general.amr-wb" },
178     { GMS, "GSM", "general.gsm" },
179     { IMY, "IMY", "general.imy" },
180     { KAR, "KAR", "general.kar" },
181     { MPEGURL_AUDIO, "MPEGURL_AUDIO", "general.mpegurl-audio" },
182     { MPEG_4_AUDIO, "MPEG_4_AUDIO", "general.mpeg-4-audio" },
183     { MIDI_AUDIO, "MIDI_AUDIO", "general.midi-audio" },
184     { MP2, "MP2", "general.mp2" },
185     { MPEG_AUDIO, "MPEG_AUDIO", "general.mpeg-audio" },
186     { MXMF, "MXMF", "general.mxmf" },
187     { OTA, "OTA", "general.ota" },
188     { PLS, "PLS", "general.pls" },
189     { RTTTL, "RTTTL", "general.rtttl" },
190     { PSID, "PSID", "general.psid" },
191     { ULAW_AUDIO, "ULAW_AUDIO", "general.ulaw-audio" },
192     { XMF, "XMF", "general.xmf" },
193     { GIF, "GIF", "general.gif" },
194     { DJVU_IMAGE, "DJVU_IMAGE", "general.djvu-image" },
195     { JNG_IMAGE, "JNG_IMAGE", "general.jng-image" },
196     { PCX_IMAGE, "PCX_IMAGE", "general.pcx-image" },
197     { PBM_IMAGE, "PBM_IMAGE", "general.pbm-image" },
198     { PGM_IMAGE, "PGM_IMAGE", "general.pgm-image" },
199     { PNM_IMAGE, "PNM_IMAGE", "general.pnm-image" },
200     { PPM_IMAGE, "PPM_IMAGE", "general.ppm-image" },
201     { RGB_IMAGE, "RGB_IMAGE", "general.rgb-image" },
202     { SVG_IMAGE, "SVG_IMAGE", "general.svg-image" },
203     { WBMP_IMAGE, "WBMP_IMAGE", "general.wbmp-image" },
204     { XPIXMP_IMAGE, "XPIXMAP_IMAGE", "general.xpixmap-image" },
205     { XWINDOWDUMP_IMAGE, "XWINDOWDUMP_IMAGE", "general.xwindowdump-image" },
206     { HEIF, "HEIF", "general.heif" },
207     { HEIC, "HEIC", "general.heic" },
208     { VIRTUAL_CD, "VIRTUAL_CD", "general.virtual-cd" },
209     { BOO_SOURCE, "BOO_SOURCE", "general.boo-source" },
210     { D_SOURCE, "D_SOURCE", "general.d-source" },
211     { HTML_COMPONENT, "HTML_COMPONENT", "general.html-component" },
212     { PASCAL_SOURCE, "PASCAL_SOURCE", "general.pascal-source" },
213     { HASKELL_SCRIPT, "HASKELL_SCRIPT", "general.haskell-script" },
214     { LITERATE_HASKELL_SCRIPT, "LITERATE_HASKELL_SCRIPT", "general.literate-haskell-script" },
215     { TCL_SCRIPT, "TCL_SCRIPT", "general.tcl-script" },
216     { ASC_TEXT, "ASC_TEXT", "general.asc-text" },
217     { PORTABLE_OBJECT, "PORTABLE_OBJECT", "general.portable-object" },
218     { RICH_TEXT, "RICH_TEXT", "general.rich-text" },
219     { DELIMITED_VALUES_TEXT, "DELIMITED_VALUES_TEXT", "general.delimited-values-text" },
220     { COMMA_SEPARATED_VALUES_TEXT, "COMMA_SEPARATED_VALUES_TEXT", "general.comma-separated-values-text" },
221     { DIFF, "DIFF", "general.diff" },
222     { SETEXT, "SETEXT", "general.setext" },
223     { GCD, "GCD", "general.gcd" },
224     { TAB_SEPARATED_VALUES_TEXT, "TAB_SEPARATED_VALUES_TEXT", "general.tab-separated-values-text" },
225     { P7R, "P7R", "general.p7r" },
226     { PEM, "PEM", "general.pem" },
227     { CHESS_PGN, "CHESS_PGN", "general.chess-pgn" },
228     { LHA_ARCHIVE, "LHA_ARCHIVE", "general.lha-archive" },
229     { LZH_ARCHIVE, "LZH_ARCHIVE", "general.lzh-archive" },
230     { LZX_ARCHIVE, "LZX_ARCHIVE", "general.lzx-archive" },
231     { TAZ_ARCHIVE, "TAZ_ARCHIVE", "general.taz-archive" },
232     { SHAR_ARCHIVE, "SHAR_ARCHIVE", "general.shar-archive" },
233     { CPIO_ARCHIVE, "CPIO_ARCHIVE", "general.cpio-archive" },
234     { WEB_ARCHIVE, "WEB_ARCHIVE", "general.web-archive" },
235     { USTAR, "USTAR", "general.ustar" },
236     { MATHML, "MATHML", "general.mathml" },
237     { XHTML, "XHTML", "general.xhtml" },
238     { RSS, "RSS", "general.rss" },
239     { RDF, "RDF", "general.rdf" },
240     { IGES, "IGES", "general.iges" },
241     { CAD, "CAD", "general.cad" },
242     { OCTET_STREAM, "OCTET_STREAM", "general.octet-stream" },
243     { ISO, "ISO", "general.iso" },
244     { MESH_MODEL, "MESH_MODEL", "general.mesh-model" },
245     { CERTIFICATE, "CERTIFICATE", "general.certificate" },
246     { C_OBJECT, "C_OBJECT", "general.c-object" },
247     { DVI, "DVI", "general.dvi" },
248     { CER_CERTIFICATE, "CER_CERTIFICATE", "general.cer-certificate" },
249     { CRT_CERTIFICATE, "CRT_CERTIFICATE", "general.crt-certificate" },
250     { CRL_CERTIFICATE, "CRL_CERTIFICATE", "general.crl-certificate" },
251     { PRN, "PRN", "general.prn" },
252     { OPENDOCUMENT_CHART, "OPENDOCUMENT_CHART", "org.oasis-open.opendocument.chart" },
253     { OPENDOCUMENT_TEXT_MASTER, "OPENDOCUMENT_TEXT_MASTER", "org.oasis-open.opendocument.text-master" },
254     { OPENDOCUMENT_TEXT_WEB, "OPENDOCUMENT_TEXT_WEB", "org.oasis-open.opendocument.text-web" },
255     { OPENDOCUMENT_DATABASE, "OPENDOCUMENT_DATABASE", "org.oasis-open.opendocument.database" },
256     { OPENDOCUMENT_IMAGE, "OPENDOCUMENT_IMAGE", "org.oasis-open.opendocument.image" },
257     { OPENDOCUMENT_FORMULA_TEMPLATE, "OPENDOCUMENT_FORMULA_TEMPLATE",  "org.oasis-open.opendocument.formula-template" },
258     { OPENDOCUMENT_CHART_TEMPLATE, "OPENDOCUMENT_CHART_TEMPLATE", "org.oasis-open.opendocument.chart-template" },
259     { OPENDOCUMENT_PRESENTATION_TEMPLATE, "OPENDOCUMENT_PRESENTATION_TEMPLATE",
260       "org.oasis-open.opendocument.presentation-template" },
261     { OPENDOCUMENT_IMAGE_TEMPLATE, "OPENDOCUMENT_IMAGE_TEMPLATE", "org.oasis-open.opendocument.image-template" },
262     { OPENDOCUMENT_GRAPHICS_TEMPLATE, "OPENDOCUMENT_GRAPHICS_TEMPLATE",
263       "org.oasis-open.opendocument.graphics-template" },
264     { OPENDOCUMENT_SPREADSHEET_TEMPLATE, "OPENDOCUMENT_SPREADSHEET_TEMPLATE",
265       "org.oasis-open.opendocument.spreadsheet-template" },
266     { OPENDOCUMENT_TEXT_TEMPLATE, "OPENDOCUMENT_TEXT_TEMPLATE", "org.oasis-open.opendocument.text-template" },
267     { WORD_DOT, "WORD_DOT", "com.microsoft.word.dot" },
268     { POWERPOINT_PPS, "POWERPOINT_PPS", "com.microsoft.powerpoint.pps" },
269     { POWERPOINT_POT, "POWERPOINT_POT", "com.microsoft.powerpoint.pot" },
270     { EXCEL_XLT, "EXCEL_XLT", "com.microsoft.excel.xlt" },
271     { VISIO_VSD, "VISIO_VSD", "com.microsoft.visio.vsd" },
272     { DRAWINGML_VISIO, "DRAWINGML_VISIO", "org.openxmlformats.drawingml.visio" },
273     { DRAWINGML_TEMPLATE, "DRAWINGML_TEMPLATE", "org.openxmlformats.drawingml.template" },
274     { DRAWINGML_VISIO_MACROENABLED, "DRAWINGML_VISIO_MACROENABLED", "org.openxmlformats.drawingml.visio.macroenabled" },
275     { DRAWINGML_TEMPLATE_MACROENABLED, "DRAWINGML_TEMPLATE_MACROENABLED",
276       "org.openxmlformats.drawingml.template.macroenabled" },
277     { WORDPROCESSINGML_TEMPLATE, "WORDPROCESSINGML_TEMPLATE", "org.openxmlformats.wordprocessingml.template" },
278     { PRESENTATIONML_TEMPLATE, "PRESENTATIONML_TEMPLATE", "org.openxmlformats.presentationml.template" },
279     { PRESENTATIONML_SLIDESHOW, "PRESENTATIONML_SLIDESHOW", "org.openxmlformats.presentationml.slideshow" },
280     { SPREADSHEETML_TEMPLATE, "SPREADSHEETML_TEMPLATE", "org.openxmlformats.spreadsheetml.template" },
281     { WORDPROCESSINGML_DOCUMENT_MACROENABLED, "WORDPROCESSINGML_DOCUMENT_MACROENABLED",
282       "org.openxmlformats.wordprocessingml.document.macroenabled" },
283     { WORDPROCESSINGML_TEMPLATE_MACROENABLED, "WORDPROCESSINGML_TEMPLATE_MACROENABLED",
284       "org.openxmlformats.wordprocessingml.template.macroenabled" },
285     { SPREADSHEETML_TEMPLATE_MACROENABLED, "SPREADSHEETML_TEMPLATE_MACROENABLED",
286       "org.openxmlformats.spreadsheetml.template.macroenabled" },
287     { SPREADSHEETML_ADDIN_MACROENABLED, "SPREADSHEETML_ADDIN_MACROENABLED",
288       "org.openxmlformats.spreadsheetml.addin.macroenabled" },
289     { SPREADSHEETML_BINARY_MACROENABLED, "SPREADSHEETML_BINARY_MACROENABLED",
290       "org.openxmlformats.spreadsheetml.binary.macroenabled" },
291     { SPREADSHEETML_SHEET_MACROENABLED, "SPREADSHEETML_SHEET_MACROENABLED",
292       "org.openxmlformats.spreadsheetml.sheet.macroenabled" },
293     { PRESENTATIONALML_ADDIN_MACROENABLED, "PRESENTATIONALML_ADDIN_MACROENABLED",
294       "org.openxmlformats.presentationml.addin.macroenabled" },
295     { PRESENTATIONALML_PRESENTATION_MACROENABLED, "PRESENTATIONALML_PRESENTATION_MACROENABLED",
296       "org.openxmlformats.presentationml.presentation.macroenabled" },
297     { PRESENTATIONALML_SLIDESHOW_MACROENABLED, "PRESENTATIONALML_SLIDESHOW_MACROENABLED",
298       "org.openxmlformats.presentationml.slideshow.macroenabled" },
299     { PRESENTATIONALML_TEMPLATE_MACROENABLED, "PRESENTATIONALML_TEMPLATE_MACROENABLED",
300       "org.openxmlformats.presentationml.template.macroenabled" },
301     { OPENOFFICE, "OPENOFFICE", "org.openoffice" },
302     { OPENOFFICE_CALC, "OPENOFFICE_CALC", "org.openoffice.calc" },
303     { OPENOFFICE_DRAW, "OPENOFFICE_DRAW", "org.openoffice.draw" },
304     { OPENOFFICE_WRITER_GLOBAL, "OPENOFFICE_WRITER_GLOBAL", "org.openoffice.writer-global" },
305     { OPENOFFICE_IMPRESS, "OPENOFFICE_IMPRESS", "org.openoffice.impress" },
306     { OPENOFFICE_MATH, "OPENOFFICE_MATH", "org.openoffice.math" },
307     { OPENOFFICE_WRITER, "OPENOFFICE_WRITER", "org.openoffice.writer" },
308     { OPENOFFICE_CALC_TEMPLATE, "OPENOFFICE_CALC_TEMPLATE", "org.openoffice.calc.template" },
309     { OPENOFFICE_DRAW_TEMPLATE, "OPENOFFICE_DRAW_TEMPLATE", "org.openoffice.draw.template" },
310     { OPENOFFICE_IMPRESS_TEMPLATE, "OPENOFFICE_IMPRESS_TEMPLATE", "org.openoffice.impress.template" },
311     { OPENOFFICE_WRITER_TEMPLATE, "OPENOFFICE_WRITER_TEMPLATE", "org.openoffice.writer.template" },
312     { STAROFFICE, "STAROFFICE", "com.staroffice" },
313     { STAROFFICE_DRAW, "STAROFFICE_DRAW", "com.staroffice.draw" },
314     { STAROFFICE_CALC, "STAROFFICE_CALC", "com.staroffice.calc" },
315     { STAROFFICE_IMPRESS, "STAROFFICE_IMPRESS", "com.staroffice.impress" },
316     { STAROFFICE_WRITER, "STAROFFICE_WRITER", "com.staroffice.writer" },
317     { STAROFFICE_CHART, "STAROFFICE_CHART", "com.staroffice.chart" },
318     { STAROFFICE_MAIL, "STAROFFICE_MAIL", "com.staroffice.mail" },
319     { STAROFFICE_WRITER_GLOBAL, "STAROFFICE_WRITER_GLOBAL", "com.staroffice.writer-global" },
320     { STAROFFICE_MATH, "STAROFFICE_MATH", "com.staroffice.math" },
321     { STAROFFICE_TEMPLATE, "STAROFFICE_TEMPLATE", "com.staroffice.template" },
322     { TUG_BIB, "TUG_BIB", "org.tug.bib" },
323     { TUG_CLS, "TUG_CLS", "org.tug.cls" },
324     { TUG_STY, "TUG_STY", "org.tug.sty" },
325     { TUG_TEX, "TUG_TEX", "org.tug.tex" },
326     { LATEX, "LATEX", "org.latex-project.latex" },
327     { ADVANCED_SYSTEMS_FORMAT, "ADVANCED_SYSTEMS_FORMAT", "com.microsoft.advanced-systems-format" },
328     { ADVANCED_STREAM_REDIRECTOR, "ADVANCED_STREAM_REDIRECTOR", "com.microsoft.advanced-stream-redirector" },
329     { MATROSKA_VIDEO, "MATROSKA_VIDEO", "org.matroska.mkv" },
330     { MATROSKA_AUDIO, "MATROSKA_AUDIO", "org.matroska.mka" },
331     { SGI_MOVIE, "SGI_MOVIE", "com.sgi.movie" },
332     { APPLE_M4V, "APPLE_M4V", "com.apple.m4v" },
333     { WEBM, "WEBM", "org.webmproject.webm" },
334     { QUICKTIME_MOVIE, "QUICKTIME_MOVIE", "com.apple.quicktime-movie" },
335     { CORELDRAW_CDR, "CORELDRAW_CDR", "com.coreldraw.cdr" },
336     { CORELDRAW_CDT, "CORELDRAW_CDT", "com.coreldraw.cdt" },
337     { CORELDRAW_CPT, "CORELDRAW_CPT", "com.coreldraw.cpt" },
338     { CORELDRAW_PAT, "CORELDRAW_PAT", "com.coreldraw.pat" },
339     { MICROSOFT_CUR, "MICROSOFT_CUR", "com.microsoft.cur" },
340     { SUN_RASTER, "SUN_RASTER", "com.sun.raster" },
341     { GOOGLE_WEBP, "GOOGLE_WEBP", "com.google.webp" },
342     { KOAN_AUDIO, "KOAN_AUDIO", "com.sseyo.koan-audio" },
343     { QT_MOC, "QT_MOC", "io.qt.moc" },
344     { GHOSTSCRIPT_FONT, "GHOSTSCRIPT_FONT", "com.ghostscript.font" },
345     { X_PCF_FONT, "X_PCF_FONT", "org.x.pcf-font" },
346     { WINDOWS_MEDIA_WMD, "WINDOWS_MEDIA_WMD", "com.microsoft.windows-media-wmd" },
347     { WINDOWS_MEDIA_WMZ, "WINDOWS_MEDIA_WMZ", "com.microsoft.windows-media-wmz" },
348     { WINDOWS_INSTALLER, "WINDOWS_INSTALLER", "com.microsoft.windows-installer" },
349     { PUBLISHER_PUB, "PUBLISHER_PUB", "com.microsoft.publisher.pub" },
350     { WINDOWS_MEDIA_PLAYLIST, "WINDOWS_MEDIA_PLAYLIST", "com.microsoft.windows-media-playlist" },
351     { ACCESS_MDB, "ACCESS_MDB", "com.microsoft.access.mdb" },
352     { STEREOLITHOGRAPHY, "STEREOLITHOGRAPHY", "com.3dsystems.stereolithography" },
353     { APPLE_MEDIA_PLAYLIST, "APPLE_MEDIA_PLAYLIST", "com.apple.media.playlist" },
354     { ABISOURCE_WORD, "ABISOURCE_WORD", "com.abisource.word" },
355     { ADOBE_FRAMEMAKER, "ADOBE_FRAMEMAKER", "com.adobe.framemaker" },
356     { WOLFRAM_CDF, "WOLFRAM_CDF", "com.wolfram.cdf" },
357     { CINDERELLA_CDY, "CINDERELLA_CDY", "de.cinderella.cdy" },
358     { ADOBE_DCR, "ADOBE_DCR", "com.adobe.dcr" },
359     { ADOBE_DIR, "ADOBE_DIR", "com.adobe.dir" },
360     { ADOBE_DXR, "ADOBE_DXR", "com.adobe.dxr" },
361     { GNUMERIC_SPREADSHEET, "GNUMERIC_SPREADSHEET", "org.gnumeric.spreadsheet" },
362     { HDFGROUP_HDF, "HDFGROUP_HDF", "org.hdfgroup.hdf" },
363     { BINHEX_ARCHIVE, "BINHEX_ARCHIVE", "com.apple.binhex-archive" },
364     { MICROSOFT_HTA, "MICROSOFT_HTA", "com.microsoft.hta" },
365     { INTERNET_INS, "INTERNET_INS", "com.microsoft.internet.ins" },
366     { INTERNET_ISP, "INTERNET_ISP", "com.microsoft.internet.isp" },
367     { TROFF, "TROFF", "org.troff" },
368     { ADOBE_MIF, "ADOBE_MIF", "com.adobe.framemaker.mif" },
369     { FREEMIND, "FREEMIND", "io.sourceforge.freemind" },
370     { YAMAHA_SMAF, "YAMAHA_SMAF", "com.yamaha.smaf" },
371     { MATHEMATICA_NOTEBOOK, "MATHEMATICA_NOTEBOOK", "com.wolfram.mathematica.notebook" },
372     { XIPH_OGG, "XIPH_OGG", "org.xiph.ogg" },
373     { PROXY_AUTOCONFIG, "PROXY_AUTOCONFIG", "com.netscape.proxy-autoconfig" },
374     { PKCS_12, "PKCS_12", "com.rsa.pkcs-12" },
375     { PGP_SIGNATURE, "PGP_SIGNATURE", "org.openpgp.signature" },
376     { QUICKTIME_LINK, "QUICKTIME_LINK", "com.apple.quicktime-link" },
377     { RAR_ARCHIVE, "RAR_ARCHIVE", "com.rarlab.rar-archive" },
378     { SEVEN_ZIP_ARCHIVE, "SEVEN_ZIP_ARCHIVE", "org.7-zip.7-zip-archive" },
379     { RED_BEAN_SGF, "RED_BEAN_SGF", "com.red-bean.sgf" },
380     { SIT_ARCHIVE, "SIT_ARCHIVE", "com.stuffit.sit-archive" },
381     { FUTURESPLASH, "FUTURESPLASH", "com.adobe.futuresplash" },
382     { FLASH, "FLASH", "com.adobe.flash" },
383     { TEXINFO, "TEXINFO", "org.gnu.texinfo" },
384     { TORRENT, "TORRENT", "org.bittorrent.torrent" },
385     { DOOM, "DOOM", "com.idsoftware.doom" },
386     { APPLE_WEBARCHIVE, "APPLE_WEBARCHIVE", "com.apple.webarchive" },
387     { ANDROID_WEBARCHIVE, "ANDROID_WEBARCHIVE", "com.android.webarchive" },
388     { GIMP_XCF, "GIMP_XCF", "org.gimp.xcf" },
389     { EDRWMAX, "EDRWMAX", "com.edrawsoft.edrawmax" },
390     { EDRWMIND, "EDRWMIND", "com.edrawsoft.edrawmind" },
391     { CNKI_CAJ, "CNKI_CAJ", "net.cnki.caj" },
392     { DBASE_DBF, "DBASE_DBF", "com.dbase.dbf" },
393     { AUTODESK_DWG, "AUTODESK_DWG", "com.autodesk.dwg" },
394     { AUTODESK_DXF, "AUTODESK_DXF", "com.autodesk.dxf" },
395     { AUTODESK_DWS, "AUTODESK_DWS", "com.autodesk.dws" },
396     { AUTODESK_DWT, "AUTODESK_DWT", "com.autodesk.dwt" },
397     { AUTODESK_DWF, "AUTODESK_DWF", "com.autodesk.dwf" },
398     { AUTODESK_DWFX, "AUTODESK_DWFX", "com.autodesk.dwfx" },
399     { AUTODESK_SHP, "AUTODESK_SHP", "com.autodesk.shp" },
400     { AUTODESK_SHX, "AUTODESK_SHX", "com.autodesk.shx" },
401     { AUTODESK_SLIDE_LIB, "AUTODESK_SLIDE_LIB", "com.autodesk.slide-library" },
402     { AUTODESK_LINE, "AUTODESK_LINE", "com.autodesk.line" },
403     { AUTODESK_PLOTTER, "AUTODESK_PLOTTER", "com.autodesk.plotter" },
404     { HP_GRAPHICS_LANG, "HP_GRAPHICS_LANG", "com.hp.graphics-language" },
405     { MICROSOFT_METAFILE, "MICROSOFT_METAFILE", "com.microsoft.metafile" },
406     { ACIS_SAT, "ACIS_SAT", "com.spatial.acis.sat" },
407     { AVIF_IMAGE, "AVIF_IMAGE", "org.aomedia.avif-image" },
408     { MICROSOFT_DDS, "MICROSOFT_DDS", "com.microsoft.dds" },
409     { IFF_ILBM, "IFF_ILBM", "com.ea.iff-ilbm" },
410     { CR2_RAW_IMAGE, "CR2_RAW_IMAGE", "com.canon.cr2-raw-image" },
411     { CR3_RAW_IMAGE, "CR3_RAW_IMAGE", "com.canon.cr3-raw-image" },
412     { CRW_RAW_IMAGE, "CRW_RAW_IMAGE", "com.canon.crw-raw-image" },
413     { DNG_RAW_IMAGE, "DNG_RAW_IMAGE", "com.adobe.dng-raw-image" },
414     { ARW_RAW_IMAGE, "ARW_RAW_IMAGE", "com.sony.arw-raw-image" },
415     { NEF_RAW_IMAGE, "NEF_RAW_IMAGE", "com.nikon.nef-raw-image" },
416     { MINDMANAGER_MMAP, "MINDMANAGER_MMAP", "com.mindjet.mindmanager.mmap" },
417     { MICROSOFT_EMAIL, "MICROSOFT_EMAIL", "com.microsoft.email" },
418     { MICROSOFT_MESSAGE, "MICROSOFT_MESSAGE", "com.microsoft.message" },
419     { MICROSOFT_PST, "MICROSOFT_PST", "com.microsoft.pst" },
420     { KINGSOFT_OFFICE, "KINGSOFT_OFFICE", "com.kingsoft.office	general.zip-archive" },
421     { KINGSOFT_WRITER_WPS, "KINGSOFT_WRITER_WPS", "com.kingsoft.office.writer.wps" },
422     { KINGSOFT_WRITER_WPT, "KINGSOFT_WRITER_WPT", "com.kingsoft.office.writer.wpt" },
423     { KINGSOFT_PRESENTATION_DPS, "KINGSOFT_PRESENTATION_DPS", "com.kingsoft.office.presentation.dps" },
424     { KINGSOFT_PRESENTATION_TEMPLATE, "KINGSOFT_PRESENTATION_TEMPLATE", "com.kingsoft.office.presentation.template" },
425     { KINGSOFT_SPREADSHEETS_ET, "KINGSOFT_SPREADSHEETS_ET", "com.kingsoft.office.spreadsheets.et" },
426     { KINGSOFT_SPREADSHEETS_TEMPLATE, "KINGSOFT_SPREADSHEETS_TEMPLATE", "com.kingsoft.office.spreadsheets.template" },
427     { MICROSOFT_INI, "MICROSOFT_INI", "com.microsoft.ini" },
428     { JSON, "JSON", "general.json" },
429     { YAML, "YAML", "general.yaml" },
430     { LOG, "LOG", "general.log" },
431     { URI, "URI", "general.uri" },
432     { FILE_URI, "FILE_URI", "general.file-uri" },
433     { TEXT_LST, "TEXT_LST", "general.text-lst" },
434     { ANDROID_APK, "ANDROID_APK", "com.android.apk" },
435     { BZ_ARCHIVE, "BZ_ARCHIVE", "general.bz-archive" },
436     { TBZ_ARCHIVE, "TBZ_ARCHIVE", "general.tar-bzip-archive" },
437     { TBZ2_ARCHIVE, "TBZ2_ARCHIVE", "general.tar-bzip2-archive" },
438     { XZ_ARCHIVE, "XZ_ARCHIVE", "org.tukaani.xz-archive" },
439     { TXZ_ARCHIVE, "TXZ_ARCHIVE", "org.tukaani.tar-xz-archive" },
440     { XAR_ARCHIVE, "XAR_ARCHIVE", "general.xar-archive" },
441     { CAB_ARCHIVE, "CAB_ARCHIVE", "com.microsoft.cab-archive" },
442     { RPM_ARCHIVE, "RPM_ARCHIVE", "redhat.rpm-archive" },
443     { TPZ_ARCHIVE, "TPZ_ARCHIVE", "org.godotengine.tpz-archive", },
444     { LZA_ARCHIVE, "LZA_ARCHIVE", "general.lza-archive" },
445     { ARJ_ARCHIVE, "ARJ_ARCHIVE", "general.arj-archive" },
446     { ZIPX_ARCHIVE, "ZIPX_ARCHIVE", "com.winzip.zipx" },
447     { LZMA_ARCHIVE, "LZMA_ARCHIVE", "general.lzma-archive" },
448     { LZMA86_ARCHIVE, "LZMA86_ARCHIVE", "general.lzma86-archive" },
449     { XPI_ARCHIVE, "XPI_ARCHIVE", "org.mozilla.xpinstall" },
450     { HFS_DISK_IMAGE, "HFS_DISK_IMAGE", "general.hfs-disk-image" },
451     { IMG_DISK_IMAGE, "IMG_DISK_IMAGE", "general.img-disk-image" },
452     { ISZ_DISK_IMAGE, "ISZ_DISK_IMAGE", "com.ezbsystems.zipped-iso" },
453     { WIM_DISK_IMAGE, "WIM_DISK_IMAGE", "com.microsoft.wim" },
454     { SWM_DISK_IMAGE, "SWM_DISK_IMAGE", "com.microsoft.swm" },
455     { KINGSOFT_SPREADSHEETS_ETX, "KINGSOFT_SPREADSHEETS_ETX", "com.kingsoft.office.spreadsheets.etx" },
456     { KINGSOFT_SPREADSHEETS_ETTX, "KINGSOFT_SPREADSHEETS_ETTX", "com.kingsoft.office.spreadsheets.ettx" },
457     { EXCEL_DIF, "EXCEL_DIF", "com.microsoft.excel.dif" },
458     { OPENHARMONY_APP, "OPENHARMONY_APP", "openharmony.app" },
459     { HMOS_WIFI, "HMOS_WIFI", "com.huawei.hmos.settings.wifi" },
460     { TEL, "TEL", "general.tel" },
461     { ETS, "ETS", "general.ets" },
462     { JSON5, "JSON5", "general.json5" },
463     { APE_AUDIO, "APE_AUDIO", "com.monkeysaudio.ape-audio" },
464     { OPUS_AUDIO, "OPUS_AUDIO", "org.xiph.opus-audio"},
465     { CONF, "CONF", "general.conf" },
466     { MICROSOFT_DOS_BATCH, "MICROSOFT_DOS_BATCH", "com.microsoft.dos-batch" },
467     { MICROSOFT_VBSCRIPT, "MICROSOFT_VBSCRIPT", "com.microsoft.vbscript" },
468     { ION, "ION", "general.ion" },
469     { MICROSOFT_REGISTRY, "MICROSOFT_REGISTRY", "com.microsoft.registry" },
470     { MICROSOFT_CATALOG, "MICROSOFT_CATALOG", "com.microsoft.catalog" },
471     { MICROSOFT_POWERSHELL_SCRIPT, "MICROSOFT_POWERSHELL_SCRIPT", "com.microsoft.powershell-script" },
472     { W3_WOFF, "W3_WOFF", "org.w3.woff" },
473     { SQLITE_DATABASE, "SQLITE_DATABASE", "org.sqlite.database" },
474     { MICROSOFT_SYS, "MICROSOFT_SYS", "com.microsoft.sys" },
475     { MICROSOFT_INF, "MICROSOFT_INF", "com.microsoft.inf" },
476     { MICROSOFT_PDB, "MICROSOFT_PDB", "com.microsoft.pdb" },
477     { MICROSOFT_TLB, "MICROSOFT_TLB", "com.microsoft.tlb" },
478     { MICROSOFT_SCCD, "MICROSOFT_SCCD", "com.microsoft.sccd" },
479     { ADOBE_F4V, "ADOBE_F4V", "com.adobe.f4v" },
480     { MP2T, "MP2T", "general.mp2t" },
481     { YOUTUBE_VIDEO, "YOUTUBE_VIDEO", "com.youtube.video" },
482     { WEBEX_VIDEO, "WEBEX_VIDEO", "com.cisco.webex-video" },
483     { MPEG2, "MPEG2", "general.mpeg-2" },
484     { MPEG1, "MPEG1", "general.mpeg-1" },
485     { REALMEDIA_VBR, "REALMEDIA_VBR", "com.real.realmedia-vbr" },
486     { REAL_REALVIDEO, "REAL_REALVIDEO", "com.real.realvideo" },
487     { DIVX_VIDEO, "DIVX_VIDEO", "general.divx-video" },
488     { CSIRO_ANNODEX, "CSIRO_ANNODEX", "org.csiro.annodex" },
489     { OGV, "OGV", "general.ogv" },
490     { LSF_VIDEO, "LSF_VIDEO", "com.microsoft.lsf-video" },
491     { H264_VIDEO, "H264_VIDEO", "general.h264-video" },
492     { JPEG2000, "JPEG2000", "general.jpeg-2000" },
493     { RAF_RAW_IMAGE, "RAF_RAW_IMAGE", "com.fujifilm.raf-raw-image" },
494     { NRW_RAW_IMAGE, "NRW_RAW_IMAGE", "com.nikon.nrw-raw-image" },
495     { RW2_RAW_IMAGE, "RW2_RAW_IMAGE", "com.panasonic.rw2-raw-image" },
496     { PEF_RAW_IMAGE, "PEF_RAW_IMAGE", "com.pentax.pef-raw-image" },
497     { SRW_RAW_IMAGE, "SRW_RAW_IMAGE", "com.sumsung.srw-raw-image" },
498     { ERF_RAW_IMAGE, "ERF_RAW_IMAGE", "com.epson.erf-raw-image" },
499     { ORF_RAW_IMAGE, "ORF_RAW_IMAGE", "com.olympus.orf-raw-image" },
500     { IEF_IMAGE, "IEF_IMAGE", "general.ief-image" },
501     { ART_IMAGE, "ART_IMAGE", "com.aol.art-image" },
502     { CONTENT_FORM, "CONTENT_FORM", "general.content-form" },
503     { M4P_AUDIO, "M4P_AUDIO", "com.apple.m4p-audio" },
504     { AC3_AUDIO, "AC3_AUDIO", "general.ac3-audio" },
505     { OPENHARMONY_HSP, "OPENHARMONY_HSP", "openharmony.hsp" },
506     { OPENHARMONY_HAR, "OPENHARMONY_HAR", "openharmony.har" },
507     { OPENHARMONY_GOPAINT, "OPENHARMONY_GOPAINT", "openharmony.gopaint" },
508     { OPENHARMONY_GOBRUSH, "OPENHARMONY_GOBRUSH", "openharmony.gobrush" },
509     { OPENHARMONY_GOBRUSHES, "OPENHARMONY_GOBRUSHES", "openharmony.gobrushes" },
510     { OPENHARMONY_GOCOLOR, "OPENHARMONY_GOCOLOR", "openharmony.gocolor" }
511 };
512 
513 static constexpr std::initializer_list<std::string_view> NOT_NEED_COUNT_VALUE_LIST = {
514     UNIFORM_DATA_TYPE, ARRAY_BUFFER_LENGTH, THUMB_DATA_LENGTH, APP_ICON_LENGTH, APPLICATION_DEFINED_RECORD_MARK,
515     FILE_TYPE
516 };
517 
518 static const std::set<std::string> FILE_SUB_TYPES = {
519     "general.image", "general.video", "general.audio", "general.folder" };
520 
521 namespace UtdUtils {
IsValidUtdId(const std::string & utdId)522 bool IsValidUtdId(const std::string &utdId)
523 {
524     for (const auto &item : UTD_TYPES) {
525         if (item.UtdId == utdId) {
526             return true;
527         }
528     }
529     return false;
530 }
531 
GetUtdEnumFromUtdId(const std::string & utdId)532 int32_t GetUtdEnumFromUtdId(const std::string &utdId)
533 {
534     for (const auto &item : UTD_TYPES) {
535         if (item.UtdId == utdId) {
536             return item.UtdEnum;
537         }
538     }
539     return UD_BUTT;
540 }
541 
GetUtdIdFromUtdEnum(int32_t utdType)542 std::string GetUtdIdFromUtdEnum(int32_t utdType)
543 {
544     for (const auto &item : UTD_TYPES) {
545         if (item.UtdEnum == utdType) {
546             return item.UtdId;
547         }
548     }
549     return "";
550 }
551 
GetUtdTypes()552 std::vector<UtdType> GetUtdTypes()
553 {
554     std::vector<UtdType> utdTypes(UTD_TYPES, UTD_TYPES + sizeof(UTD_TYPES) / sizeof(UtdType));
555     return utdTypes;
556 }
557 } // namespace UtdUtils
558 
IsValidType(int32_t value)559 bool UnifiedDataUtils::IsValidType(int32_t value)
560 {
561     return value >= ENTITY && value < UD_BUTT;
562 }
563 
IsValidIntention(int32_t value)564 bool UnifiedDataUtils::IsValidIntention(int32_t value)
565 {
566     return value > UD_INTENTION_BASE && value < UD_INTENTION_BUTT;
567 }
568 
569 static constexpr AppShareOption APP_SHARE_OPTIONS[] = {
570     { IN_APP, "IN_APP"},
571     { CROSS_APP, "CROSS_APP"},
572 };
573 
IsValid(int32_t shareOption)574 bool ShareOptionsUtil::IsValid(int32_t shareOption)
575 {
576     if (shareOption < 0 || shareOption >= SHARE_OPTIONS_BUTT) {
577         return false;
578     }
579     return true;
580 }
581 
GetEnumNum(const std::string & shareOption)582 int32_t ShareOptionsUtil::GetEnumNum(const std::string &shareOption)
583 {
584     for (const auto &item : APP_SHARE_OPTIONS) {
585         if (item.enumStr == shareOption) {
586             return item.enumNum;
587         }
588     }
589     return SHARE_OPTIONS_BUTT;
590 }
591 
GetEnumStr(int32_t shareOption)592 std::string ShareOptionsUtil::GetEnumStr(int32_t shareOption)
593 {
594     for (const auto &item : APP_SHARE_OPTIONS) {
595         if (item.enumNum == shareOption) {
596             return item.enumStr;
597         }
598     }
599     return "";
600 }
601 
GetVariantSize(UDVariant & variant)602 size_t UnifiedDataUtils::GetVariantSize(UDVariant &variant)
603 {
604     auto int32Value = std::get_if<int32_t>(&variant);
605     if (int32Value != nullptr) {
606         return sizeof(std::get<int32_t>(variant));
607     }
608     auto int64Value = std::get_if<int64_t>(&variant);
609     if (int64Value != nullptr) {
610         return sizeof(std::get<int64_t>(variant));
611     }
612     auto boolValue = std::get_if<bool>(&variant);
613     if (boolValue != nullptr) {
614         return sizeof(std::get<bool>(variant));
615     }
616     auto doubleValue = std::get_if<double>(&variant);
617     if (doubleValue != nullptr) {
618         return sizeof(std::get<double>(variant));
619     }
620     auto strValue = std::get_if<std::string>(&variant);
621     if (strValue != nullptr) {
622         return std::get<std::string>(variant).size();
623     }
624     auto vecValue = std::get_if<std::vector<uint8_t>>(&variant);
625     if (vecValue != nullptr) {
626         return std::get<std::vector<uint8_t>>(variant).size();
627     }
628     return 0;
629 }
630 
GetDetailsSize(UDDetails & details)631 size_t UnifiedDataUtils::GetDetailsSize(UDDetails &details)
632 {
633     size_t total = 0;
634     for (std::pair<std::string, UDVariant> prop : details) {
635         total += prop.first.size();
636         total += GetVariantSize(prop.second);
637     }
638     return total;
639 }
640 
IsPersist(const Intention & intention)641 bool UnifiedDataUtils::IsPersist(const Intention &intention)
642 {
643     return intention >= UD_INTENTION_DATA_HUB && intention < UD_INTENTION_BUTT;
644 }
645 
IsPersist(const std::string & intention)646 bool UnifiedDataUtils::IsPersist(const std::string &intention)
647 {
648     return IsPersist(GetIntentionByString(intention));
649 }
650 
GetIntentionByString(const std::string & intention)651 Intention UnifiedDataUtils::GetIntentionByString(const std::string &intention)
652 {
653     for (const auto &it : UD_INTENTION_MAP) {
654         if (it.second == intention) {
655             return static_cast<Intention>(it.first);
656         }
657     }
658     return UD_INTENTION_BUTT;
659 }
660 
IsValidOptions(UnifiedKey & key,const std::string & intention,const std::string & validIntention)661 bool UnifiedDataUtils::IsValidOptions(UnifiedKey &key, const std::string &intention,
662     const std::string &validIntention)
663 {
664     if (key.key.empty() && intention.empty()) {
665         return false;
666     }
667     bool isIntentionValid = intention.empty() || intention == validIntention;
668     if (!isIntentionValid) {
669         return false;
670     }
671     bool isValidKey = key.key.empty() || (key.IsValid() && key.intention == validIntention);
672     if (!isValidKey) {
673         return false;
674     }
675     return true;
676 }
677 
IsValidOptions(UnifiedKey & key,const std::string & intention)678 bool UnifiedDataUtils::IsValidOptions(UnifiedKey &key, const std::string &intention)
679 {
680     if (key.key.empty() && intention.empty()) {
681         return false;
682     }
683 
684     bool isIntentionValid = intention.empty() || IsPersist(intention);
685     if (!isIntentionValid) {
686         return false;
687     }
688 
689     bool isValidKey = key.key.empty() || (key.IsValid() && IsPersist(key.intention));
690     if (!isValidKey) {
691         return false;
692     }
693 
694     if (!key.key.empty() && !intention.empty()) {
695         return key.intention == intention;
696     }
697     return true;
698 }
699 
ConvertToObject(UDDetails & details)700 std::shared_ptr<Object> ObjectUtils::ConvertToObject(UDDetails &details)
701 {
702     Object object;
703     for (auto [key, value] : details) {
704         ConvertVariant(std::move(value), object.value_[key]);
705     }
706     return std::make_shared<Object>(object);
707 }
708 
ConvertToUDDetails(std::shared_ptr<Object> object)709 UDDetails ObjectUtils::ConvertToUDDetails(std::shared_ptr<Object> object)
710 {
711     UDDetails details;
712     if (object == nullptr) {
713         return details;
714     }
715     for (auto [key, value] : object->value_) {
716         if (!ConvertVariant(std::move(value), details[key])) {
717             LOG_ERROR(UnifiedRecord, "object convert to UDDetails failed, object key is %{public}s", key.c_str());
718         }
719     }
720     return details;
721 }
722 
GetValueSize(const ValueType & value,bool isCalValueType)723 int64_t ObjectUtils::GetValueSize(const ValueType &value, bool isCalValueType)
724 {
725     if (value.index() == 0) {
726         return 0;
727     }
728     if (std::holds_alternative<std::string>(value)) {
729         return std::get<std::string>(value).size();
730     }
731     if (std::holds_alternative<std::shared_ptr<Object>>(value)) {
732         return GetObjectValueSize(std::get<std::shared_ptr<Object>>(value), isCalValueType);
733     }
734     if (std::holds_alternative<std::vector<uint8_t>>(value)) {
735         return std::get<std::vector<uint8_t>>(value).size();
736     }
737     if (std::holds_alternative<std::shared_ptr<OHOS::Media::PixelMap>>(value)) {
738         auto pixelMap = std::get<std::shared_ptr<OHOS::Media::PixelMap>>(value);
739         return pixelMap->GetByteCount();
740     }
741     if (std::holds_alternative<std::shared_ptr<OHOS::AAFwk::Want>>(value)) {
742         auto want = std::get<std::shared_ptr<OHOS::AAFwk::Want>>(value);
743         Parcel parcel;
744         if (!want->Marshalling(parcel)) {
745             LOG_ERROR(UDMF_FRAMEWORK, "Marshalling want error when GetValueSize!");
746             return 0;
747         }
748         return parcel.GetDataSize();
749     }
750     return std::visit([] (const auto &val) { return sizeof(val); }, value);
751 }
752 
GetObjectValueSize(const std::shared_ptr<Object> object,bool isCalValueType)753 int64_t ObjectUtils::GetObjectValueSize(const std::shared_ptr<Object> object, bool isCalValueType)
754 {
755     if (object == nullptr) {
756         return 0;
757     }
758     int64_t size = 0;
759     for (auto [key, value] : object->value_) {
760         if (std::find(NOT_NEED_COUNT_VALUE_LIST.begin(), NOT_NEED_COUNT_VALUE_LIST.end(), key)
761             != NOT_NEED_COUNT_VALUE_LIST.end()) {
762             continue;
763         }
764         if (key == VALUE_TYPE && isCalValueType) {
765             size += GetValueSize(value, false);
766             continue;
767         }
768         if (key == DETAILS) {
769             if (!std::holds_alternative<std::shared_ptr<Object>>(value)) {
770                 LOG_ERROR(UDMF_FRAMEWORK, "Details is not correct!");
771                 continue;
772             }
773             size += GetAllObjectSize(std::get<std::shared_ptr<Object>>(value));
774             continue;
775         }
776         size += GetValueSize(value, false);
777     }
778     return size;
779 }
780 
781 
GetAllObjectSize(const std::shared_ptr<Object> object)782 int64_t ObjectUtils::GetAllObjectSize(const std::shared_ptr<Object> object)
783 {
784     if (object == nullptr) {
785         return 0;
786     }
787     int64_t size = 0;
788     for (auto [key, value] : object->value_) {
789         size += static_cast<int64_t>(key.size()) + GetValueSize(value, false);
790     }
791     return size;
792 }
793 
794 
ProcessFileUriType(UDType & utdType,ValueType & value)795 void ObjectUtils::ProcessFileUriType(UDType &utdType, ValueType &value)
796 {
797     auto fileUri = std::get<std::shared_ptr<Object>>(value);
798     std::string uniformDataType;
799     if (!fileUri->GetValue(UNIFORM_DATA_TYPE, uniformDataType) || uniformDataType != GENERAL_FILE_URI) {
800         LOG_INFO(UDMF_FRAMEWORK, "Attribute uniformDataType not equals to 'general.file-uri'!");
801         return;
802     }
803     utdType = FILE;
804     std::string fileType;
805     if (fileUri->GetValue(FILE_TYPE, fileType)) {
806         std::shared_ptr<TypeDescriptor> descriptor;
807         UtdClient::GetInstance().GetTypeDescriptor(fileType, descriptor);
808         if (descriptor == nullptr) {
809             return;
810         }
811         bool isFileType = false;
812         for (const auto &fileSub : FILE_SUB_TYPES) {
813             descriptor->BelongsTo(fileSub, isFileType);
814             if (isFileType) {
815                 utdType = static_cast<UDType>(UtdUtils::GetUtdEnumFromUtdId(fileSub));
816                 LOG_INFO(UDMF_FRAMEWORK, "Change type to %{public}s", fileSub.c_str());
817                 return;
818             }
819         }
820     }
821 }
822 } // namespace UDMF
823 } // namespace OHOS