114cf0368Sopenharmony_ci
214cf0368Sopenharmony_ci/*
314cf0368Sopenharmony_ci * Copyright (c) 2024 Huawei Device Co., Ltd.
414cf0368Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
514cf0368Sopenharmony_ci * you may not use this file except in compliance with the License.
614cf0368Sopenharmony_ci * You may obtain a copy of the License at
714cf0368Sopenharmony_ci *
814cf0368Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0
914cf0368Sopenharmony_ci *
1014cf0368Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
1114cf0368Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
1214cf0368Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1314cf0368Sopenharmony_ci * See the License for the specific language governing permissions and
1414cf0368Sopenharmony_ci * limitations under the License.
1514cf0368Sopenharmony_ci */
1614cf0368Sopenharmony_ci
1714cf0368Sopenharmony_ci#include "unified_data_ffi.h"
1814cf0368Sopenharmony_ci#include "unified_data_impl.h"
1914cf0368Sopenharmony_ci#include "unified_record_impl.h"
2014cf0368Sopenharmony_ci#include "cj_common_ffi.h"
2114cf0368Sopenharmony_ci
2214cf0368Sopenharmony_ciusing namespace OHOS::FFI;
2314cf0368Sopenharmony_ciusing namespace OHOS::UDMF;
2414cf0368Sopenharmony_ci
2514cf0368Sopenharmony_cinamespace OHOS {
2614cf0368Sopenharmony_cinamespace UDMF {
2714cf0368Sopenharmony_ciextern "C" {
2814cf0368Sopenharmony_ci
2914cf0368Sopenharmony_ci    int64_t FfiUDMFUnifiedDataConstructor()
3014cf0368Sopenharmony_ci    {
3114cf0368Sopenharmony_ci        auto nativeCJUnifiedData = FFIData::Create<CUnifiedData>();
3214cf0368Sopenharmony_ci        if (nativeCJUnifiedData == nullptr) {
3314cf0368Sopenharmony_ci            return -1;
3414cf0368Sopenharmony_ci        }
3514cf0368Sopenharmony_ci        return nativeCJUnifiedData->GetID();
3614cf0368Sopenharmony_ci    }
3714cf0368Sopenharmony_ci
3814cf0368Sopenharmony_ci    int64_t FfiUDMFUnifiedDataConstructorWithRecord(int64_t unifiedRecordId)
3914cf0368Sopenharmony_ci    {
4014cf0368Sopenharmony_ci        auto record = FFIData::GetData<CUnifiedRecord>(unifiedRecordId);
4114cf0368Sopenharmony_ci        if (record == nullptr) {
4214cf0368Sopenharmony_ci            return -1;
4314cf0368Sopenharmony_ci        }
4414cf0368Sopenharmony_ci
4514cf0368Sopenharmony_ci        auto nativeCJUnifiedData = FFIData::Create<CUnifiedData>(record);
4614cf0368Sopenharmony_ci        if (nativeCJUnifiedData == nullptr) {
4714cf0368Sopenharmony_ci            return -1;
4814cf0368Sopenharmony_ci        }
4914cf0368Sopenharmony_ci        return nativeCJUnifiedData->GetID();
5014cf0368Sopenharmony_ci    }
5114cf0368Sopenharmony_ci
5214cf0368Sopenharmony_ci    void FfiUDMFUnifiedDataAddRecord(int64_t unifiedDataId, int64_t unifiedRecordId)
5314cf0368Sopenharmony_ci    {
5414cf0368Sopenharmony_ci        auto record = FFIData::GetData<CUnifiedRecord>(unifiedRecordId);
5514cf0368Sopenharmony_ci        if (record == nullptr) {
5614cf0368Sopenharmony_ci            return;
5714cf0368Sopenharmony_ci        }
5814cf0368Sopenharmony_ci
5914cf0368Sopenharmony_ci        auto data = FFIData::GetData<CUnifiedData>(unifiedDataId);
6014cf0368Sopenharmony_ci        if (data == nullptr) {
6114cf0368Sopenharmony_ci            return;
6214cf0368Sopenharmony_ci        }
6314cf0368Sopenharmony_ci
6414cf0368Sopenharmony_ci        data->AddRecord(record);
6514cf0368Sopenharmony_ci    }
6614cf0368Sopenharmony_ci
6714cf0368Sopenharmony_ci    CArrUnifiedRecord FfiUDMFUnifiedDataGetRecords(int64_t unifiedDataId)
6814cf0368Sopenharmony_ci    {
6914cf0368Sopenharmony_ci        auto data = FFIData::GetData<CUnifiedData>(unifiedDataId);
7014cf0368Sopenharmony_ci        if (data == nullptr) {
7114cf0368Sopenharmony_ci            return CArrUnifiedRecord{};
7214cf0368Sopenharmony_ci        }
7314cf0368Sopenharmony_ci
7414cf0368Sopenharmony_ci        return data->GetRecords();
7514cf0368Sopenharmony_ci    }
7614cf0368Sopenharmony_ci
7714cf0368Sopenharmony_ci    bool FfiUDMFUnifiedDataHasType(int64_t unifiedDataId, const char *type)
7814cf0368Sopenharmony_ci    {
7914cf0368Sopenharmony_ci        auto data = FFIData::GetData<CUnifiedData>(unifiedDataId);
8014cf0368Sopenharmony_ci        if (data == nullptr) {
8114cf0368Sopenharmony_ci            return false;
8214cf0368Sopenharmony_ci        }
8314cf0368Sopenharmony_ci
8414cf0368Sopenharmony_ci        return data->HasType(type);
8514cf0368Sopenharmony_ci    }
8614cf0368Sopenharmony_ci
8714cf0368Sopenharmony_ci    CArrString FfiUDMFUnifiedDataGetTypes(int64_t unifiedDataId)
8814cf0368Sopenharmony_ci    {
8914cf0368Sopenharmony_ci        auto data = FFIData::GetData<CUnifiedData>(unifiedDataId);
9014cf0368Sopenharmony_ci        if (data == nullptr) {
9114cf0368Sopenharmony_ci            return CArrString{};
9214cf0368Sopenharmony_ci        }
9314cf0368Sopenharmony_ci
9414cf0368Sopenharmony_ci        return data->GetTypes();
9514cf0368Sopenharmony_ci    }
9614cf0368Sopenharmony_ci}
9714cf0368Sopenharmony_ci}
9814cf0368Sopenharmony_ci}
99