123b3eb3cSopenharmony_ci/*
223b3eb3cSopenharmony_ci * Copyright (c) 2021 Huawei Device Co., Ltd.
323b3eb3cSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
423b3eb3cSopenharmony_ci * you may not use this file except in compliance with the License.
523b3eb3cSopenharmony_ci * You may obtain a copy of the License at
623b3eb3cSopenharmony_ci *
723b3eb3cSopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
823b3eb3cSopenharmony_ci *
923b3eb3cSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
1023b3eb3cSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
1123b3eb3cSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1223b3eb3cSopenharmony_ci * See the License for the specific language governing permissions and
1323b3eb3cSopenharmony_ci * limitations under the License.
1423b3eb3cSopenharmony_ci */
1523b3eb3cSopenharmony_ci
1623b3eb3cSopenharmony_ci#include "adapter/ohos/entrance/pa_container.h"
1723b3eb3cSopenharmony_ci
1823b3eb3cSopenharmony_ci#include "adapter/ohos/entrance/file_asset_provider_impl.h"
1923b3eb3cSopenharmony_ci#include "adapter/ohos/entrance/hap_asset_provider_impl.h"
2023b3eb3cSopenharmony_ci#include "adapter/ohos/entrance/pa_engine/engine/common/js_backend_engine_loader.h"
2123b3eb3cSopenharmony_ci#include "adapter/ohos/entrance/pa_engine/pa_backend.h"
2223b3eb3cSopenharmony_ci#include "base/log/ace_trace.h"
2323b3eb3cSopenharmony_ci#include "base/log/event_report.h"
2423b3eb3cSopenharmony_ci#include "base/log/log.h"
2523b3eb3cSopenharmony_ci#include "base/subwindow/subwindow_manager.h"
2623b3eb3cSopenharmony_ci#include "base/utils/system_properties.h"
2723b3eb3cSopenharmony_ci#include "base/utils/utils.h"
2823b3eb3cSopenharmony_ci#include "core/common/ace_engine.h"
2923b3eb3cSopenharmony_ci#include "core/common/asset_manager_impl.h"
3023b3eb3cSopenharmony_ci#include "core/common/platform_window.h"
3123b3eb3cSopenharmony_ci
3223b3eb3cSopenharmony_cinamespace OHOS::Ace::Platform {
3323b3eb3cSopenharmony_cinamespace {
3423b3eb3cSopenharmony_ci
3523b3eb3cSopenharmony_ciconstexpr char ARK_PA_ENGINE_SHARED_LIB[] = "libace_engine_pa_ark.z.so";
3623b3eb3cSopenharmony_ci
3723b3eb3cSopenharmony_ciconst char* GetPaEngineSharedLibrary()
3823b3eb3cSopenharmony_ci{
3923b3eb3cSopenharmony_ci    return ARK_PA_ENGINE_SHARED_LIB;
4023b3eb3cSopenharmony_ci}
4123b3eb3cSopenharmony_ci
4223b3eb3cSopenharmony_ci} // namespace
4323b3eb3cSopenharmony_ci
4423b3eb3cSopenharmony_ciPaContainer::PaContainer(int32_t instanceId, void* paAbility, const PaContainerOptions& options,
4523b3eb3cSopenharmony_ci    std::unique_ptr<PlatformEventCallback> callback)
4623b3eb3cSopenharmony_ci    : instanceId_(instanceId), paAbility_(paAbility)
4723b3eb3cSopenharmony_ci{
4823b3eb3cSopenharmony_ci    ACE_DCHECK(callback);
4923b3eb3cSopenharmony_ci    type_ = options.type;
5023b3eb3cSopenharmony_ci    hapPath_ = options.hapPath;
5123b3eb3cSopenharmony_ci    workerPath_ =  options.workerPath;
5223b3eb3cSopenharmony_ci    InitializeBackend(options.language);
5323b3eb3cSopenharmony_ci    platformEventCallback_ = std::move(callback);
5423b3eb3cSopenharmony_ci}
5523b3eb3cSopenharmony_ci
5623b3eb3cSopenharmony_civoid PaContainer::InitializeBackend(SrcLanguage language)
5723b3eb3cSopenharmony_ci{
5823b3eb3cSopenharmony_ci    // create backend
5923b3eb3cSopenharmony_ci    backend_ = Backend::Create();
6023b3eb3cSopenharmony_ci    auto paBackend = AceType::DynamicCast<PaBackend>(backend_);
6123b3eb3cSopenharmony_ci    CHECK_NULL_VOID(paBackend);
6223b3eb3cSopenharmony_ci
6323b3eb3cSopenharmony_ci    // set JS engine, init in JS thread
6423b3eb3cSopenharmony_ci    auto& loader = JsBackendEngineLoader::Get(GetPaEngineSharedLibrary());
6523b3eb3cSopenharmony_ci    auto jsEngine = loader.CreateJsBackendEngine(instanceId_);
6623b3eb3cSopenharmony_ci    jsEngine->AddExtraNativeObject("ability", paAbility_);
6723b3eb3cSopenharmony_ci    jsEngine->SetNeedDebugBreakPoint(AceApplicationInfo::GetInstance().IsNeedDebugBreakPoint());
6823b3eb3cSopenharmony_ci    jsEngine->SetDebugVersion(AceApplicationInfo::GetInstance().IsDebugVersion());
6923b3eb3cSopenharmony_ci    jsEngine->SetHapPath(hapPath_);
7023b3eb3cSopenharmony_ci    jsEngine->SetWorkerPath(workerPath_);
7123b3eb3cSopenharmony_ci    paBackend->SetJsEngine(jsEngine);
7223b3eb3cSopenharmony_ci
7323b3eb3cSopenharmony_ci    ACE_DCHECK(backend_);
7423b3eb3cSopenharmony_ci    backend_->Initialize(type_, language);
7523b3eb3cSopenharmony_ci}
7623b3eb3cSopenharmony_ci
7723b3eb3cSopenharmony_ciRefPtr<PaContainer> PaContainer::GetContainer(int32_t instanceId)
7823b3eb3cSopenharmony_ci{
7923b3eb3cSopenharmony_ci    auto container = AceEngine::Get().GetContainer(instanceId);
8023b3eb3cSopenharmony_ci    return AceType::DynamicCast<PaContainer>(container);
8123b3eb3cSopenharmony_ci}
8223b3eb3cSopenharmony_ci
8323b3eb3cSopenharmony_civoid PaContainer::CreateContainer(int32_t instanceId, void* paAbility, const PaContainerOptions& options,
8423b3eb3cSopenharmony_ci    std::unique_ptr<PlatformEventCallback> callback)
8523b3eb3cSopenharmony_ci{
8623b3eb3cSopenharmony_ci    auto aceContainer = AceType::MakeRefPtr<PaContainer>(instanceId, paAbility, options, std::move(callback));
8723b3eb3cSopenharmony_ci    AceEngine::Get().AddContainer(instanceId, aceContainer);
8823b3eb3cSopenharmony_ci
8923b3eb3cSopenharmony_ci    auto back = aceContainer->GetBackend();
9023b3eb3cSopenharmony_ci    CHECK_NULL_VOID(back);
9123b3eb3cSopenharmony_ci    back->UpdateState(Backend::State::ON_CREATE);
9223b3eb3cSopenharmony_ci}
9323b3eb3cSopenharmony_ci
9423b3eb3cSopenharmony_cibool PaContainer::RunPa(int32_t instanceId, const std::string& content, const OHOS::AAFwk::Want& want)
9523b3eb3cSopenharmony_ci{
9623b3eb3cSopenharmony_ci    LOGI("PA: PaContainer RunPa start");
9723b3eb3cSopenharmony_ci    auto container = AceEngine::Get().GetContainer(instanceId);
9823b3eb3cSopenharmony_ci    CHECK_NULL_RETURN(container, false);
9923b3eb3cSopenharmony_ci    ContainerScope scope(instanceId);
10023b3eb3cSopenharmony_ci    auto aceContainer = AceType::DynamicCast<PaContainer>(container);
10123b3eb3cSopenharmony_ci    CHECK_NULL_RETURN(aceContainer, false);
10223b3eb3cSopenharmony_ci    auto paBackend = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend());
10323b3eb3cSopenharmony_ci    CHECK_NULL_RETURN(paBackend, false);
10423b3eb3cSopenharmony_ci    paBackend->RunPa(content, want);
10523b3eb3cSopenharmony_ci    return true;
10623b3eb3cSopenharmony_ci}
10723b3eb3cSopenharmony_ci
10823b3eb3cSopenharmony_cibool PaContainer::OnCreate(int32_t instanceId, const OHOS::AAFwk::Want& want)
10923b3eb3cSopenharmony_ci{
11023b3eb3cSopenharmony_ci    LOGI("PA: PaContainer OnCreate start");
11123b3eb3cSopenharmony_ci    auto container = AceEngine::Get().GetContainer(instanceId);
11223b3eb3cSopenharmony_ci    CHECK_NULL_RETURN(container, false);
11323b3eb3cSopenharmony_ci    auto aceContainer = AceType::DynamicCast<PaContainer>(container);
11423b3eb3cSopenharmony_ci    CHECK_NULL_RETURN(aceContainer, false);
11523b3eb3cSopenharmony_ci    auto paBackend = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend());
11623b3eb3cSopenharmony_ci    CHECK_NULL_RETURN(paBackend, false);
11723b3eb3cSopenharmony_ci    paBackend->OnCreate(want);
11823b3eb3cSopenharmony_ci    return true;
11923b3eb3cSopenharmony_ci}
12023b3eb3cSopenharmony_ci
12123b3eb3cSopenharmony_cibool PaContainer::OnDelete(int32_t instanceId, int64_t formId)
12223b3eb3cSopenharmony_ci{
12323b3eb3cSopenharmony_ci    LOGI("PA: PaContainer OnDelete start");
12423b3eb3cSopenharmony_ci    auto container = AceEngine::Get().GetContainer(instanceId);
12523b3eb3cSopenharmony_ci    CHECK_NULL_RETURN(container, false);
12623b3eb3cSopenharmony_ci    auto aceContainer = AceType::DynamicCast<PaContainer>(container);
12723b3eb3cSopenharmony_ci    CHECK_NULL_RETURN(aceContainer, false);
12823b3eb3cSopenharmony_ci    auto paBackend = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend());
12923b3eb3cSopenharmony_ci    CHECK_NULL_RETURN(paBackend, false);
13023b3eb3cSopenharmony_ci    paBackend->OnDelete(formId);
13123b3eb3cSopenharmony_ci    return true;
13223b3eb3cSopenharmony_ci}
13323b3eb3cSopenharmony_ci
13423b3eb3cSopenharmony_cibool PaContainer::OnTriggerEvent(int32_t instanceId, int64_t formId, const std::string& message)
13523b3eb3cSopenharmony_ci{
13623b3eb3cSopenharmony_ci    LOGI("PA: PaContainer OnTriggerEvent start");
13723b3eb3cSopenharmony_ci    auto container = AceEngine::Get().GetContainer(instanceId);
13823b3eb3cSopenharmony_ci    CHECK_NULL_RETURN(container, false);
13923b3eb3cSopenharmony_ci    auto aceContainer = AceType::DynamicCast<PaContainer>(container);
14023b3eb3cSopenharmony_ci    CHECK_NULL_RETURN(aceContainer, false);
14123b3eb3cSopenharmony_ci    auto paBackend = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend());
14223b3eb3cSopenharmony_ci    CHECK_NULL_RETURN(paBackend, false);
14323b3eb3cSopenharmony_ci    paBackend->OnTriggerEvent(formId, message);
14423b3eb3cSopenharmony_ci    return true;
14523b3eb3cSopenharmony_ci}
14623b3eb3cSopenharmony_ci
14723b3eb3cSopenharmony_ciint32_t PaContainer::OnAcquireFormState(int32_t instanceId, const OHOS::AAFwk::Want& want)
14823b3eb3cSopenharmony_ci{
14923b3eb3cSopenharmony_ci    LOGI("PA: PaContainer OnAcquireFormState start");
15023b3eb3cSopenharmony_ci    auto container = AceEngine::Get().GetContainer(instanceId);
15123b3eb3cSopenharmony_ci    CHECK_NULL_RETURN(container, -1);
15223b3eb3cSopenharmony_ci    auto aceContainer = AceType::DynamicCast<PaContainer>(container);
15323b3eb3cSopenharmony_ci    CHECK_NULL_RETURN(aceContainer, -1);
15423b3eb3cSopenharmony_ci    auto paBackend = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend());
15523b3eb3cSopenharmony_ci    CHECK_NULL_RETURN(paBackend, -1);
15623b3eb3cSopenharmony_ci    int32_t formState = paBackend->OnAcquireFormState(want);
15723b3eb3cSopenharmony_ci    return formState;
15823b3eb3cSopenharmony_ci}
15923b3eb3cSopenharmony_ci
16023b3eb3cSopenharmony_cibool PaContainer::OnUpdate(int32_t instanceId, int64_t formId)
16123b3eb3cSopenharmony_ci{
16223b3eb3cSopenharmony_ci    LOGI("PA: PaContainer OnUpdate start");
16323b3eb3cSopenharmony_ci    auto container = AceEngine::Get().GetContainer(instanceId);
16423b3eb3cSopenharmony_ci    CHECK_NULL_RETURN(container, false);
16523b3eb3cSopenharmony_ci    auto aceContainer = AceType::DynamicCast<PaContainer>(container);
16623b3eb3cSopenharmony_ci    CHECK_NULL_RETURN(aceContainer, false);
16723b3eb3cSopenharmony_ci    auto paBackend = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend());
16823b3eb3cSopenharmony_ci    CHECK_NULL_RETURN(paBackend, false);
16923b3eb3cSopenharmony_ci    paBackend->OnUpdate(formId);
17023b3eb3cSopenharmony_ci    return true;
17123b3eb3cSopenharmony_ci}
17223b3eb3cSopenharmony_ci
17323b3eb3cSopenharmony_cibool PaContainer::OnCastTemptoNormal(int32_t instanceId, int64_t formId)
17423b3eb3cSopenharmony_ci{
17523b3eb3cSopenharmony_ci    LOGI("PA: PaContainer OnCastTemptoNormal start");
17623b3eb3cSopenharmony_ci    auto container = AceEngine::Get().GetContainer(instanceId);
17723b3eb3cSopenharmony_ci    CHECK_NULL_RETURN(container, false);
17823b3eb3cSopenharmony_ci    auto aceContainer = AceType::DynamicCast<PaContainer>(container);
17923b3eb3cSopenharmony_ci    CHECK_NULL_RETURN(aceContainer, false);
18023b3eb3cSopenharmony_ci    auto paBackend = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend());
18123b3eb3cSopenharmony_ci    CHECK_NULL_RETURN(paBackend, false);
18223b3eb3cSopenharmony_ci    paBackend->OnCastTemptoNormal(formId);
18323b3eb3cSopenharmony_ci    return true;
18423b3eb3cSopenharmony_ci}
18523b3eb3cSopenharmony_ci
18623b3eb3cSopenharmony_cibool PaContainer::OnVisibilityChanged(int32_t instanceId, const std::map<int64_t, int32_t>& formEventsMap)
18723b3eb3cSopenharmony_ci{
18823b3eb3cSopenharmony_ci    LOGI("PA: PaContainer OnVisibilityChanged start");
18923b3eb3cSopenharmony_ci    auto container = AceEngine::Get().GetContainer(instanceId);
19023b3eb3cSopenharmony_ci    CHECK_NULL_RETURN(container, false);
19123b3eb3cSopenharmony_ci    auto aceContainer = AceType::DynamicCast<PaContainer>(container);
19223b3eb3cSopenharmony_ci    CHECK_NULL_RETURN(aceContainer, false);
19323b3eb3cSopenharmony_ci    auto paBackend = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend());
19423b3eb3cSopenharmony_ci    CHECK_NULL_RETURN(paBackend, false);
19523b3eb3cSopenharmony_ci    paBackend->OnVisibilityChanged(formEventsMap);
19623b3eb3cSopenharmony_ci    return true;
19723b3eb3cSopenharmony_ci}
19823b3eb3cSopenharmony_ci
19923b3eb3cSopenharmony_ciAppExecFwk::FormProviderData PaContainer::GetFormData(int32_t instanceId)
20023b3eb3cSopenharmony_ci{
20123b3eb3cSopenharmony_ci    LOGI("PA: PaContainer GetFormData start");
20223b3eb3cSopenharmony_ci    auto container = AceEngine::Get().GetContainer(instanceId);
20323b3eb3cSopenharmony_ci    CHECK_NULL_RETURN(container, AppExecFwk::FormProviderData());
20423b3eb3cSopenharmony_ci    auto aceContainer = AceType::DynamicCast<PaContainer>(container);
20523b3eb3cSopenharmony_ci    CHECK_NULL_RETURN(aceContainer, AppExecFwk::FormProviderData());
20623b3eb3cSopenharmony_ci    auto paBackend = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend());
20723b3eb3cSopenharmony_ci    CHECK_NULL_RETURN(paBackend, AppExecFwk::FormProviderData());
20823b3eb3cSopenharmony_ci    return paBackend->GetFormData();
20923b3eb3cSopenharmony_ci}
21023b3eb3cSopenharmony_ci
21123b3eb3cSopenharmony_civoid PaContainer::Destroy()
21223b3eb3cSopenharmony_ci{
21323b3eb3cSopenharmony_ci    RefPtr<Backend> backend;
21423b3eb3cSopenharmony_ci    backend_.Swap(backend);
21523b3eb3cSopenharmony_ci    CHECK_NULL_VOID(backend);
21623b3eb3cSopenharmony_ci    backend->UpdateState(Backend::State::ON_DESTROY);
21723b3eb3cSopenharmony_ci}
21823b3eb3cSopenharmony_ci
21923b3eb3cSopenharmony_civoid PaContainer::DestroyContainer(int32_t instanceId)
22023b3eb3cSopenharmony_ci{
22123b3eb3cSopenharmony_ci    LOGI("DestroyContainer with id %{private}d", instanceId);
22223b3eb3cSopenharmony_ci    SubwindowManager::GetInstance()->CloseDialog(instanceId);
22323b3eb3cSopenharmony_ci    auto container = AceEngine::Get().GetContainer(instanceId);
22423b3eb3cSopenharmony_ci    CHECK_NULL_VOID(container);
22523b3eb3cSopenharmony_ci    auto aceContainer = AceType::DynamicCast<PaContainer>(container);
22623b3eb3cSopenharmony_ci    CHECK_NULL_VOID(aceContainer);
22723b3eb3cSopenharmony_ci    aceContainer->Destroy();
22823b3eb3cSopenharmony_ci}
22923b3eb3cSopenharmony_ci
23023b3eb3cSopenharmony_civoid PaContainer::AddAssetPath(int32_t instanceId, const std::string& packagePath, const std::string& hapPath,
23123b3eb3cSopenharmony_ci    const std::vector<std::string>& paths)
23223b3eb3cSopenharmony_ci{
23323b3eb3cSopenharmony_ci    auto container = AceType::DynamicCast<PaContainer>(AceEngine::Get().GetContainer(instanceId));
23423b3eb3cSopenharmony_ci    CHECK_NULL_VOID(container);
23523b3eb3cSopenharmony_ci    RefPtr<AssetManagerImpl> assetManagerImpl;
23623b3eb3cSopenharmony_ci    if (container->assetManager_) {
23723b3eb3cSopenharmony_ci        assetManagerImpl = AceType::DynamicCast<AssetManagerImpl>(container->assetManager_);
23823b3eb3cSopenharmony_ci    } else {
23923b3eb3cSopenharmony_ci        assetManagerImpl = Referenced::MakeRefPtr<AssetManagerImpl>();
24023b3eb3cSopenharmony_ci        container->assetManager_ = assetManagerImpl;
24123b3eb3cSopenharmony_ci        AceType::DynamicCast<PaBackend>(container->GetBackend())->SetAssetManager(assetManagerImpl);
24223b3eb3cSopenharmony_ci    }
24323b3eb3cSopenharmony_ci    CHECK_NULL_VOID(assetManagerImpl);
24423b3eb3cSopenharmony_ci    if (!hapPath.empty()) {
24523b3eb3cSopenharmony_ci        auto assetProvider = AceType::MakeRefPtr<HapAssetProviderImpl>();
24623b3eb3cSopenharmony_ci        if (assetProvider->Initialize(hapPath, paths)) {
24723b3eb3cSopenharmony_ci            LOGI("Push AssetProvider to queue.");
24823b3eb3cSopenharmony_ci            assetManagerImpl->PushBack(std::move(assetProvider));
24923b3eb3cSopenharmony_ci        }
25023b3eb3cSopenharmony_ci    }
25123b3eb3cSopenharmony_ci    if (!packagePath.empty()) {
25223b3eb3cSopenharmony_ci        auto assetProvider = AceType::MakeRefPtr<FileAssetProviderImpl>();
25323b3eb3cSopenharmony_ci        if (assetProvider->Initialize(packagePath, paths)) {
25423b3eb3cSopenharmony_ci            LOGI("Push AssetProvider to queue.");
25523b3eb3cSopenharmony_ci            assetManagerImpl->PushBack(std::move(assetProvider));
25623b3eb3cSopenharmony_ci        }
25723b3eb3cSopenharmony_ci    }
25823b3eb3cSopenharmony_ci}
25923b3eb3cSopenharmony_ci
26023b3eb3cSopenharmony_civoid PaContainer::AddLibPath(int32_t instanceId, const std::vector<std::string>& libPath)
26123b3eb3cSopenharmony_ci{
26223b3eb3cSopenharmony_ci    auto container = AceType::DynamicCast<PaContainer>(AceEngine::Get().GetContainer(instanceId));
26323b3eb3cSopenharmony_ci    CHECK_NULL_VOID(container);
26423b3eb3cSopenharmony_ci    RefPtr<AssetManager> assetManagerImpl;
26523b3eb3cSopenharmony_ci    if (container->assetManager_) {
26623b3eb3cSopenharmony_ci        assetManagerImpl = AceType::DynamicCast<AssetManagerImpl>(container->assetManager_);
26723b3eb3cSopenharmony_ci    } else {
26823b3eb3cSopenharmony_ci        assetManagerImpl = Referenced::MakeRefPtr<AssetManagerImpl>();
26923b3eb3cSopenharmony_ci        container->assetManager_ = assetManagerImpl;
27023b3eb3cSopenharmony_ci        AceType::DynamicCast<PaBackend>(container->GetBackend())->SetAssetManager(assetManagerImpl);
27123b3eb3cSopenharmony_ci    }
27223b3eb3cSopenharmony_ci    CHECK_NULL_VOID(assetManagerImpl);
27323b3eb3cSopenharmony_ci    assetManagerImpl->SetLibPath("default", libPath);
27423b3eb3cSopenharmony_ci}
27523b3eb3cSopenharmony_ci
27623b3eb3cSopenharmony_ciint32_t PaContainer::Insert(int32_t instanceId, const Uri& uri, const OHOS::NativeRdb::ValuesBucket& value)
27723b3eb3cSopenharmony_ci{
27823b3eb3cSopenharmony_ci    LOGI("Insert with id %{public}d", instanceId);
27923b3eb3cSopenharmony_ci    int32_t ret = 0;
28023b3eb3cSopenharmony_ci    auto container = AceEngine::Get().GetContainer(instanceId);
28123b3eb3cSopenharmony_ci    CHECK_NULL_RETURN(container, ret);
28223b3eb3cSopenharmony_ci    auto aceContainer = AceType::DynamicCast<PaContainer>(container);
28323b3eb3cSopenharmony_ci    auto back = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend());
28423b3eb3cSopenharmony_ci    CHECK_NULL_RETURN(back, ret);
28523b3eb3cSopenharmony_ci    ret = back->Insert(uri, value);
28623b3eb3cSopenharmony_ci    return ret;
28723b3eb3cSopenharmony_ci}
28823b3eb3cSopenharmony_ci
28923b3eb3cSopenharmony_cistd::shared_ptr<OHOS::NativeRdb::AbsSharedResultSet> PaContainer::Query(int32_t instanceId, const Uri& uri,
29023b3eb3cSopenharmony_ci    const std::vector<std::string>& columns, const OHOS::NativeRdb::DataAbilityPredicates& predicates)
29123b3eb3cSopenharmony_ci{
29223b3eb3cSopenharmony_ci    LOGI("Query with id %{public}d", instanceId);
29323b3eb3cSopenharmony_ci    std::shared_ptr<OHOS::NativeRdb::AbsSharedResultSet> ret;
29423b3eb3cSopenharmony_ci    auto container = AceEngine::Get().GetContainer(instanceId);
29523b3eb3cSopenharmony_ci    CHECK_NULL_RETURN(container, ret);
29623b3eb3cSopenharmony_ci    auto aceContainer = AceType::DynamicCast<PaContainer>(container);
29723b3eb3cSopenharmony_ci    auto back = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend());
29823b3eb3cSopenharmony_ci    CHECK_NULL_RETURN(back, ret);
29923b3eb3cSopenharmony_ci    ret = back->Query(uri, columns, predicates);
30023b3eb3cSopenharmony_ci    return ret;
30123b3eb3cSopenharmony_ci}
30223b3eb3cSopenharmony_ci
30323b3eb3cSopenharmony_ciint32_t PaContainer::Update(int32_t instanceId, const Uri& uri, const OHOS::NativeRdb::ValuesBucket& value,
30423b3eb3cSopenharmony_ci    const OHOS::NativeRdb::DataAbilityPredicates& predicates)
30523b3eb3cSopenharmony_ci{
30623b3eb3cSopenharmony_ci    LOGI("Update with id %{public}d", instanceId);
30723b3eb3cSopenharmony_ci    int32_t ret = 0;
30823b3eb3cSopenharmony_ci    auto container = AceEngine::Get().GetContainer(instanceId);
30923b3eb3cSopenharmony_ci    CHECK_NULL_RETURN(container, ret);
31023b3eb3cSopenharmony_ci    auto aceContainer = AceType::DynamicCast<PaContainer>(container);
31123b3eb3cSopenharmony_ci    auto back = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend());
31223b3eb3cSopenharmony_ci    CHECK_NULL_RETURN(back, ret);
31323b3eb3cSopenharmony_ci    ret = back->Update(uri, value, predicates);
31423b3eb3cSopenharmony_ci    return ret;
31523b3eb3cSopenharmony_ci}
31623b3eb3cSopenharmony_ci
31723b3eb3cSopenharmony_ciint32_t PaContainer::Delete(
31823b3eb3cSopenharmony_ci    int32_t instanceId, const Uri& uri, const OHOS::NativeRdb::DataAbilityPredicates& predicates)
31923b3eb3cSopenharmony_ci{
32023b3eb3cSopenharmony_ci    LOGI("Delete with id %{public}d", instanceId);
32123b3eb3cSopenharmony_ci    int32_t ret = 0;
32223b3eb3cSopenharmony_ci    auto container = AceEngine::Get().GetContainer(instanceId);
32323b3eb3cSopenharmony_ci    CHECK_NULL_RETURN(container, ret);
32423b3eb3cSopenharmony_ci    auto aceContainer = AceType::DynamicCast<PaContainer>(container);
32523b3eb3cSopenharmony_ci    auto back = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend());
32623b3eb3cSopenharmony_ci    CHECK_NULL_RETURN(back, ret);
32723b3eb3cSopenharmony_ci    ret = back->Delete(uri, predicates);
32823b3eb3cSopenharmony_ci    return ret;
32923b3eb3cSopenharmony_ci}
33023b3eb3cSopenharmony_ci
33123b3eb3cSopenharmony_ciint32_t PaContainer::BatchInsert(
33223b3eb3cSopenharmony_ci    int32_t instanceId, const Uri& uri, const std::vector<OHOS::NativeRdb::ValuesBucket>& values)
33323b3eb3cSopenharmony_ci{
33423b3eb3cSopenharmony_ci    LOGI("BatchInsert with id %{public}d", instanceId);
33523b3eb3cSopenharmony_ci    int32_t ret = 0;
33623b3eb3cSopenharmony_ci    auto container = AceEngine::Get().GetContainer(instanceId);
33723b3eb3cSopenharmony_ci    CHECK_NULL_RETURN(container, ret);
33823b3eb3cSopenharmony_ci    auto aceContainer = AceType::DynamicCast<PaContainer>(container);
33923b3eb3cSopenharmony_ci    auto back = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend());
34023b3eb3cSopenharmony_ci    CHECK_NULL_RETURN(back, ret);
34123b3eb3cSopenharmony_ci    ret = back->BatchInsert(uri, values);
34223b3eb3cSopenharmony_ci    return ret;
34323b3eb3cSopenharmony_ci}
34423b3eb3cSopenharmony_ci
34523b3eb3cSopenharmony_cistd::string PaContainer::GetType(int32_t instanceId, const Uri& uri)
34623b3eb3cSopenharmony_ci{
34723b3eb3cSopenharmony_ci    LOGI("GetType with id %{public}d", instanceId);
34823b3eb3cSopenharmony_ci    std::string ret;
34923b3eb3cSopenharmony_ci    auto container = AceEngine::Get().GetContainer(instanceId);
35023b3eb3cSopenharmony_ci    CHECK_NULL_RETURN(container, ret);
35123b3eb3cSopenharmony_ci    auto aceContainer = AceType::DynamicCast<PaContainer>(container);
35223b3eb3cSopenharmony_ci    auto back = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend());
35323b3eb3cSopenharmony_ci    CHECK_NULL_RETURN(back, ret);
35423b3eb3cSopenharmony_ci    ret = back->GetType(uri);
35523b3eb3cSopenharmony_ci    return ret;
35623b3eb3cSopenharmony_ci}
35723b3eb3cSopenharmony_ci
35823b3eb3cSopenharmony_cistd::vector<std::string> PaContainer::GetFileTypes(
35923b3eb3cSopenharmony_ci    int32_t instanceId, const Uri& uri, const std::string& mimeTypeFilter)
36023b3eb3cSopenharmony_ci{
36123b3eb3cSopenharmony_ci    LOGI("GetFileTypes with id %{public}d", instanceId);
36223b3eb3cSopenharmony_ci    std::vector<std::string> ret;
36323b3eb3cSopenharmony_ci    auto container = AceEngine::Get().GetContainer(instanceId);
36423b3eb3cSopenharmony_ci    CHECK_NULL_RETURN(container, ret);
36523b3eb3cSopenharmony_ci    auto aceContainer = AceType::DynamicCast<PaContainer>(container);
36623b3eb3cSopenharmony_ci    auto back = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend());
36723b3eb3cSopenharmony_ci    CHECK_NULL_RETURN(back, ret);
36823b3eb3cSopenharmony_ci    ret = back->GetFileTypes(uri, mimeTypeFilter);
36923b3eb3cSopenharmony_ci    return ret;
37023b3eb3cSopenharmony_ci}
37123b3eb3cSopenharmony_ci
37223b3eb3cSopenharmony_ciint32_t PaContainer::OpenFile(int32_t instanceId, const Uri& uri, const std::string& mode)
37323b3eb3cSopenharmony_ci{
37423b3eb3cSopenharmony_ci    LOGI("OpenFile with id %{public}d", instanceId);
37523b3eb3cSopenharmony_ci    int32_t ret = 0;
37623b3eb3cSopenharmony_ci    auto container = AceEngine::Get().GetContainer(instanceId);
37723b3eb3cSopenharmony_ci    CHECK_NULL_RETURN(container, ret);
37823b3eb3cSopenharmony_ci    auto aceContainer = AceType::DynamicCast<PaContainer>(container);
37923b3eb3cSopenharmony_ci    auto back = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend());
38023b3eb3cSopenharmony_ci    CHECK_NULL_RETURN(back, ret);
38123b3eb3cSopenharmony_ci    ret = back->OpenFile(uri, mode);
38223b3eb3cSopenharmony_ci    return ret;
38323b3eb3cSopenharmony_ci}
38423b3eb3cSopenharmony_ci
38523b3eb3cSopenharmony_ciint32_t PaContainer::OpenRawFile(int32_t instanceId, const Uri& uri, const std::string& mode)
38623b3eb3cSopenharmony_ci{
38723b3eb3cSopenharmony_ci    LOGI("OpenRawFile with id %{public}d", instanceId);
38823b3eb3cSopenharmony_ci    int32_t ret = 0;
38923b3eb3cSopenharmony_ci    auto container = AceEngine::Get().GetContainer(instanceId);
39023b3eb3cSopenharmony_ci    CHECK_NULL_RETURN(container, ret);
39123b3eb3cSopenharmony_ci    auto aceContainer = AceType::DynamicCast<PaContainer>(container);
39223b3eb3cSopenharmony_ci    auto back = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend());
39323b3eb3cSopenharmony_ci    CHECK_NULL_RETURN(back, ret);
39423b3eb3cSopenharmony_ci    ret = back->OpenRawFile(uri, mode);
39523b3eb3cSopenharmony_ci    return ret;
39623b3eb3cSopenharmony_ci}
39723b3eb3cSopenharmony_ci
39823b3eb3cSopenharmony_ciUri PaContainer::NormalizeUri(int32_t instanceId, const Uri& uri)
39923b3eb3cSopenharmony_ci{
40023b3eb3cSopenharmony_ci    LOGI("NormalizeUri with id %{public}d", instanceId);
40123b3eb3cSopenharmony_ci    Uri ret("");
40223b3eb3cSopenharmony_ci    auto container = AceEngine::Get().GetContainer(instanceId);
40323b3eb3cSopenharmony_ci    CHECK_NULL_RETURN(container, ret);
40423b3eb3cSopenharmony_ci    auto aceContainer = AceType::DynamicCast<PaContainer>(container);
40523b3eb3cSopenharmony_ci    auto back = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend());
40623b3eb3cSopenharmony_ci    CHECK_NULL_RETURN(back, ret);
40723b3eb3cSopenharmony_ci    ret = back->NormalizeUri(uri);
40823b3eb3cSopenharmony_ci    return ret;
40923b3eb3cSopenharmony_ci}
41023b3eb3cSopenharmony_ci
41123b3eb3cSopenharmony_ciUri PaContainer::DenormalizeUri(int32_t instanceId, const Uri& uri)
41223b3eb3cSopenharmony_ci{
41323b3eb3cSopenharmony_ci    LOGI("DenormalizeUri with id %{public}d", instanceId);
41423b3eb3cSopenharmony_ci    Uri ret("");
41523b3eb3cSopenharmony_ci    auto container = AceEngine::Get().GetContainer(instanceId);
41623b3eb3cSopenharmony_ci    CHECK_NULL_RETURN(container, ret);
41723b3eb3cSopenharmony_ci    auto aceContainer = AceType::DynamicCast<PaContainer>(container);
41823b3eb3cSopenharmony_ci    auto back = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend());
41923b3eb3cSopenharmony_ci    CHECK_NULL_RETURN(back, ret);
42023b3eb3cSopenharmony_ci    ret = back->DenormalizeUri(uri);
42123b3eb3cSopenharmony_ci    return ret;
42223b3eb3cSopenharmony_ci}
42323b3eb3cSopenharmony_ci
42423b3eb3cSopenharmony_cisptr<IRemoteObject> PaContainer::OnConnect(int32_t instanceId, const OHOS::AAFwk::Want& want)
42523b3eb3cSopenharmony_ci{
42623b3eb3cSopenharmony_ci    LOGI("OnConnect with id %{private}d", instanceId);
42723b3eb3cSopenharmony_ci    auto container = AceEngine::Get().GetContainer(instanceId);
42823b3eb3cSopenharmony_ci    CHECK_NULL_RETURN(container, nullptr);
42923b3eb3cSopenharmony_ci    auto aceContainer = AceType::DynamicCast<PaContainer>(container);
43023b3eb3cSopenharmony_ci    auto back = aceContainer->GetBackend();
43123b3eb3cSopenharmony_ci    CHECK_NULL_RETURN(back, nullptr);
43223b3eb3cSopenharmony_ci    auto paBackend = AceType::DynamicCast<PaBackend>(back);
43323b3eb3cSopenharmony_ci    CHECK_NULL_RETURN(paBackend, nullptr);
43423b3eb3cSopenharmony_ci    return paBackend->OnConnect(want);
43523b3eb3cSopenharmony_ci    return nullptr;
43623b3eb3cSopenharmony_ci}
43723b3eb3cSopenharmony_ci
43823b3eb3cSopenharmony_civoid PaContainer::OnDisConnect(int32_t instanceId, const OHOS::AAFwk::Want& want)
43923b3eb3cSopenharmony_ci{
44023b3eb3cSopenharmony_ci    LOGI("OnDisConnect with id %{private}d", instanceId);
44123b3eb3cSopenharmony_ci    auto container = AceEngine::Get().GetContainer(instanceId);
44223b3eb3cSopenharmony_ci    CHECK_NULL_VOID(container);
44323b3eb3cSopenharmony_ci    auto aceContainer = AceType::DynamicCast<PaContainer>(container);
44423b3eb3cSopenharmony_ci    auto back = aceContainer->GetBackend();
44523b3eb3cSopenharmony_ci    CHECK_NULL_VOID(back);
44623b3eb3cSopenharmony_ci    auto paBackend = AceType::DynamicCast<PaBackend>(back);
44723b3eb3cSopenharmony_ci    CHECK_NULL_VOID(paBackend);
44823b3eb3cSopenharmony_ci    paBackend->OnDisConnect(want);
44923b3eb3cSopenharmony_ci}
45023b3eb3cSopenharmony_ci
45123b3eb3cSopenharmony_civoid PaContainer::OnCommand(const OHOS::AAFwk::Want &want, int startId, int32_t instanceId)
45223b3eb3cSopenharmony_ci{
45323b3eb3cSopenharmony_ci    LOGI("OnCommand with id %{private}d", instanceId);
45423b3eb3cSopenharmony_ci    auto container = AceEngine::Get().GetContainer(instanceId);
45523b3eb3cSopenharmony_ci    CHECK_NULL_VOID(container);
45623b3eb3cSopenharmony_ci    auto aceContainer = AceType::DynamicCast<PaContainer>(container);
45723b3eb3cSopenharmony_ci    auto back = aceContainer->GetBackend();
45823b3eb3cSopenharmony_ci    CHECK_NULL_VOID(back);
45923b3eb3cSopenharmony_ci    auto paBackend = AceType::DynamicCast<PaBackend>(back);
46023b3eb3cSopenharmony_ci    CHECK_NULL_VOID(paBackend);
46123b3eb3cSopenharmony_ci    paBackend->OnCommand(want, startId);
46223b3eb3cSopenharmony_ci}
46323b3eb3cSopenharmony_ci
46423b3eb3cSopenharmony_cibool PaContainer::OnShare(int32_t instanceId, int64_t formId, OHOS::AAFwk::WantParams &wantParams)
46523b3eb3cSopenharmony_ci{
46623b3eb3cSopenharmony_ci    auto container = AceEngine::Get().GetContainer(instanceId);
46723b3eb3cSopenharmony_ci    CHECK_NULL_RETURN(container, false);
46823b3eb3cSopenharmony_ci    auto aceContainer = AceType::DynamicCast<PaContainer>(container);
46923b3eb3cSopenharmony_ci    CHECK_NULL_RETURN(aceContainer, false);
47023b3eb3cSopenharmony_ci    auto paBackend = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend());
47123b3eb3cSopenharmony_ci    CHECK_NULL_RETURN(paBackend, false);
47223b3eb3cSopenharmony_ci    return paBackend->OnShare(formId, wantParams);
47323b3eb3cSopenharmony_ci}
47423b3eb3cSopenharmony_ci
47523b3eb3cSopenharmony_cistd::shared_ptr<AppExecFwk::PacMap> PaContainer::Call(int32_t instanceId, const Uri& uri,
47623b3eb3cSopenharmony_ci    const std::string& method, const std::string& arg, const AppExecFwk::PacMap& pacMap)
47723b3eb3cSopenharmony_ci{
47823b3eb3cSopenharmony_ci    std::shared_ptr<AppExecFwk::PacMap> ret = nullptr;
47923b3eb3cSopenharmony_ci    auto container = AceEngine::Get().GetContainer(instanceId);
48023b3eb3cSopenharmony_ci    CHECK_NULL_RETURN(container, ret);
48123b3eb3cSopenharmony_ci    auto aceContainer = AceType::DynamicCast<PaContainer>(container);
48223b3eb3cSopenharmony_ci    auto back = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend());
48323b3eb3cSopenharmony_ci    CHECK_NULL_RETURN(back, ret);
48423b3eb3cSopenharmony_ci    ret = back->Call(uri, method, arg, pacMap);
48523b3eb3cSopenharmony_ci    return ret;
48623b3eb3cSopenharmony_ci}
48723b3eb3cSopenharmony_ci} // namespace OHOS::Ace::Platform
488