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