114cf0368Sopenharmony_ci/* 214cf0368Sopenharmony_ci * Copyright (c) 2024 Huawei Device Co., Ltd. 314cf0368Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 414cf0368Sopenharmony_ci * you may not use this file except in compliance with the License. 514cf0368Sopenharmony_ci * You may obtain a copy of the License at 614cf0368Sopenharmony_ci * 714cf0368Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 814cf0368Sopenharmony_ci * 914cf0368Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 1014cf0368Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 1114cf0368Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1214cf0368Sopenharmony_ci * See the License for the specific language governing permissions and 1314cf0368Sopenharmony_ci * limitations under the License. 1414cf0368Sopenharmony_ci */ 1514cf0368Sopenharmony_ci 1614cf0368Sopenharmony_ci#include "udmf_conversion.h" 1714cf0368Sopenharmony_ci#include "unified_data.h" 1814cf0368Sopenharmony_ci#include "application_defined_record.h" 1914cf0368Sopenharmony_ci#include "audio.h" 2014cf0368Sopenharmony_ci#include "file.h" 2114cf0368Sopenharmony_ci#include "folder.h" 2214cf0368Sopenharmony_ci#include "html.h" 2314cf0368Sopenharmony_ci#include "image.h" 2414cf0368Sopenharmony_ci#include "link.h" 2514cf0368Sopenharmony_ci#include "plain_text.h" 2614cf0368Sopenharmony_ci#include "system_defined_appitem.h" 2714cf0368Sopenharmony_ci#include "system_defined_form.h" 2814cf0368Sopenharmony_ci#include "system_defined_pixelmap.h" 2914cf0368Sopenharmony_ci#include "system_defined_record.h" 3014cf0368Sopenharmony_ci#include "text.h" 3114cf0368Sopenharmony_ci#include "unified_record.h" 3214cf0368Sopenharmony_ci#include "video.h" 3314cf0368Sopenharmony_ci#include <memory> 3414cf0368Sopenharmony_ci#include <utility> 3514cf0368Sopenharmony_ci 3614cf0368Sopenharmony_cinamespace OHOS::UDMF { 3714cf0368Sopenharmony_ci 3814cf0368Sopenharmony_civoid UdmfConversion::SetValueWhenNotUds(std::shared_ptr<UnifiedRecord> record) 3914cf0368Sopenharmony_ci{ 4014cf0368Sopenharmony_ci if (!std::holds_alternative<std::shared_ptr<Object>>(record->GetValue())) { 4114cf0368Sopenharmony_ci return; 4214cf0368Sopenharmony_ci } 4314cf0368Sopenharmony_ci auto object = std::get<std::shared_ptr<Object>>(record->GetValue()); 4414cf0368Sopenharmony_ci auto it = object->value_.find(VALUE_TYPE); 4514cf0368Sopenharmony_ci if (it == object->value_.end()) { 4614cf0368Sopenharmony_ci return; 4714cf0368Sopenharmony_ci } 4814cf0368Sopenharmony_ci if (std::holds_alternative<std::shared_ptr<Object>>(it->second)) { 4914cf0368Sopenharmony_ci return; 5014cf0368Sopenharmony_ci } 5114cf0368Sopenharmony_ci record->SetValue(it->second); 5214cf0368Sopenharmony_ci} 5314cf0368Sopenharmony_ci 5414cf0368Sopenharmony_civoid UdmfConversion::ConvertRecordToSubclass(std::shared_ptr<UnifiedRecord> &record) 5514cf0368Sopenharmony_ci{ 5614cf0368Sopenharmony_ci auto type = record->GetType(); 5714cf0368Sopenharmony_ci auto value = record->GetOriginValue(); 5814cf0368Sopenharmony_ci auto uid = record->GetUid(); 5914cf0368Sopenharmony_ci switch (type) { 6014cf0368Sopenharmony_ci case UDType::TEXT: { 6114cf0368Sopenharmony_ci record = std::make_shared<Text>(type, value); 6214cf0368Sopenharmony_ci break; 6314cf0368Sopenharmony_ci } 6414cf0368Sopenharmony_ci case UDType::PLAIN_TEXT: { 6514cf0368Sopenharmony_ci record = std::make_shared<PlainText>(type, value); 6614cf0368Sopenharmony_ci break; 6714cf0368Sopenharmony_ci } 6814cf0368Sopenharmony_ci case UDType::HTML: { 6914cf0368Sopenharmony_ci record = std::make_shared<Html>(type, value); 7014cf0368Sopenharmony_ci break; 7114cf0368Sopenharmony_ci } 7214cf0368Sopenharmony_ci case UDType::HYPERLINK: { 7314cf0368Sopenharmony_ci record = std::make_shared<Link>(type, value); 7414cf0368Sopenharmony_ci break; 7514cf0368Sopenharmony_ci } 7614cf0368Sopenharmony_ci case UDType::FILE: { 7714cf0368Sopenharmony_ci record = std::make_shared<File>(type, value); 7814cf0368Sopenharmony_ci break; 7914cf0368Sopenharmony_ci } 8014cf0368Sopenharmony_ci case UDType::IMAGE: { 8114cf0368Sopenharmony_ci record = std::make_shared<Image>(type, value); 8214cf0368Sopenharmony_ci break; 8314cf0368Sopenharmony_ci } 8414cf0368Sopenharmony_ci case UDType::VIDEO: { 8514cf0368Sopenharmony_ci record = std::make_shared<Video>(type, value); 8614cf0368Sopenharmony_ci break; 8714cf0368Sopenharmony_ci } 8814cf0368Sopenharmony_ci case UDType::AUDIO: { 8914cf0368Sopenharmony_ci record = std::make_shared<Audio>(type, value); 9014cf0368Sopenharmony_ci break; 9114cf0368Sopenharmony_ci } 9214cf0368Sopenharmony_ci case UDType::FOLDER: { 9314cf0368Sopenharmony_ci record = std::make_shared<Folder>(type, value); 9414cf0368Sopenharmony_ci break; 9514cf0368Sopenharmony_ci } 9614cf0368Sopenharmony_ci case UDType::SYSTEM_DEFINED_RECORD: { 9714cf0368Sopenharmony_ci record = std::make_shared<SystemDefinedRecord>(type, value); 9814cf0368Sopenharmony_ci break; 9914cf0368Sopenharmony_ci } 10014cf0368Sopenharmony_ci case UDType::SYSTEM_DEFINED_FORM: { 10114cf0368Sopenharmony_ci record = std::make_shared<SystemDefinedForm>(type, value); 10214cf0368Sopenharmony_ci break; 10314cf0368Sopenharmony_ci } 10414cf0368Sopenharmony_ci case UDType::SYSTEM_DEFINED_APP_ITEM: { 10514cf0368Sopenharmony_ci record = std::make_shared<SystemDefinedAppItem>(type, value); 10614cf0368Sopenharmony_ci break; 10714cf0368Sopenharmony_ci } 10814cf0368Sopenharmony_ci case UDType::SYSTEM_DEFINED_PIXEL_MAP: { 10914cf0368Sopenharmony_ci record = std::make_shared<SystemDefinedPixelMap>(type, value); 11014cf0368Sopenharmony_ci break; 11114cf0368Sopenharmony_ci } 11214cf0368Sopenharmony_ci case UDType::APPLICATION_DEFINED_RECORD: { 11314cf0368Sopenharmony_ci record = std::make_shared<ApplicationDefinedRecord>(type, value); 11414cf0368Sopenharmony_ci break; 11514cf0368Sopenharmony_ci } 11614cf0368Sopenharmony_ci default: { 11714cf0368Sopenharmony_ci record = std::make_shared<UnifiedRecord>(type, value); 11814cf0368Sopenharmony_ci } 11914cf0368Sopenharmony_ci } 12014cf0368Sopenharmony_ci record->SetUid(uid); 12114cf0368Sopenharmony_ci SetValueWhenNotUds(record); 12214cf0368Sopenharmony_ci} 12314cf0368Sopenharmony_ci 12414cf0368Sopenharmony_civoid UdmfConversion::ConvertRecordToSubclass(UnifiedData &data) 12514cf0368Sopenharmony_ci{ 12614cf0368Sopenharmony_ci std::vector<std::shared_ptr<UnifiedRecord>> records; 12714cf0368Sopenharmony_ci for (auto &record : data.GetRecords()) { 12814cf0368Sopenharmony_ci ConvertRecordToSubclass(record); 12914cf0368Sopenharmony_ci records.push_back(std::move(record)); 13014cf0368Sopenharmony_ci } 13114cf0368Sopenharmony_ci data.SetRecords(records); 13214cf0368Sopenharmony_ci} 13314cf0368Sopenharmony_ci 13414cf0368Sopenharmony_civoid UdmfConversion::ConvertRecordToSubclass(std::vector<UnifiedData> &datas) 13514cf0368Sopenharmony_ci{ 13614cf0368Sopenharmony_ci for (auto &data : datas) { 13714cf0368Sopenharmony_ci ConvertRecordToSubclass(data); 13814cf0368Sopenharmony_ci } 13914cf0368Sopenharmony_ci} 14014cf0368Sopenharmony_ci 14114cf0368Sopenharmony_civoid UdmfConversion::InitValueObject(UnifiedData &data) 14214cf0368Sopenharmony_ci{ 14314cf0368Sopenharmony_ci for (auto &record : data.GetRecords()) { 14414cf0368Sopenharmony_ci record->InitObject(); 14514cf0368Sopenharmony_ci } 14614cf0368Sopenharmony_ci} 14714cf0368Sopenharmony_ci 14814cf0368Sopenharmony_civoid UdmfConversion::InitValueObject(std::vector<UnifiedData> &datas) 14914cf0368Sopenharmony_ci{ 15014cf0368Sopenharmony_ci for (auto &data : datas) { 15114cf0368Sopenharmony_ci InitValueObject(data); 15214cf0368Sopenharmony_ci } 15314cf0368Sopenharmony_ci} 15414cf0368Sopenharmony_ci} 155