114cf0368Sopenharmony_ci/*
214cf0368Sopenharmony_ci * Copyright (c) 2023 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#define LOG_TAG "PlainTextNapi"
1614cf0368Sopenharmony_ci#include "plain_text_napi.h"
1714cf0368Sopenharmony_ci
1814cf0368Sopenharmony_ci#include "plain_text.h"
1914cf0368Sopenharmony_ci#include "text_napi.h"
2014cf0368Sopenharmony_ci#include "unified_record_napi.h"
2114cf0368Sopenharmony_ci
2214cf0368Sopenharmony_cinamespace OHOS {
2314cf0368Sopenharmony_cinamespace UDMF {
2414cf0368Sopenharmony_cinapi_value PlainTextNapi::Constructor(napi_env env)
2514cf0368Sopenharmony_ci{
2614cf0368Sopenharmony_ci    LOG_DEBUG(UDMF_KITS_NAPI, "PlainTextNapi");
2714cf0368Sopenharmony_ci    napi_property_descriptor properties[] = {
2814cf0368Sopenharmony_ci        /* PlainText extends UnifiedRecord */
2914cf0368Sopenharmony_ci        DECLARE_NAPI_FUNCTION("getType", UnifiedRecordNapi::GetType),
3014cf0368Sopenharmony_ci        DECLARE_NAPI_FUNCTION("getValue", UnifiedRecordNapi::GetValue),
3114cf0368Sopenharmony_ci        /* PlainText extends Text */
3214cf0368Sopenharmony_ci        DECLARE_NAPI_GETTER_SETTER("details", TextNapi::GetDetails, TextNapi::SetDetails),
3314cf0368Sopenharmony_ci        /* PlainText properties */
3414cf0368Sopenharmony_ci        DECLARE_NAPI_GETTER_SETTER("textContent", GetContent, SetContent),
3514cf0368Sopenharmony_ci        DECLARE_NAPI_GETTER_SETTER("abstract", GetAbstract, SetAbstract),
3614cf0368Sopenharmony_ci    };
3714cf0368Sopenharmony_ci    size_t count = sizeof(properties) / sizeof(properties[0]);
3814cf0368Sopenharmony_ci    return NapiDataUtils::DefineClass(env, "PlainText", properties, count, PlainTextNapi::New);
3914cf0368Sopenharmony_ci}
4014cf0368Sopenharmony_ci
4114cf0368Sopenharmony_cinapi_value PlainTextNapi::New(napi_env env, napi_callback_info info)
4214cf0368Sopenharmony_ci{
4314cf0368Sopenharmony_ci    LOG_DEBUG(UDMF_KITS_NAPI, "PlainTextNapi");
4414cf0368Sopenharmony_ci    auto ctxt = std::make_shared<ContextBase>();
4514cf0368Sopenharmony_ci    ctxt->GetCbInfoSync(env, info);
4614cf0368Sopenharmony_ci    ASSERT_ERR(ctxt->env, ctxt->status == napi_ok, Status::E_ERROR, ctxt->error);
4714cf0368Sopenharmony_ci
4814cf0368Sopenharmony_ci    auto *plainText = new (std::nothrow) PlainTextNapi();
4914cf0368Sopenharmony_ci    ASSERT_ERR(ctxt->env, plainText != nullptr, Status::E_ERROR, "no memory for plain text!");
5014cf0368Sopenharmony_ci    plainText->value_ = std::make_shared<PlainText>();
5114cf0368Sopenharmony_ci    ASSERT_CALL(env, napi_wrap(env, ctxt->self, plainText, Destructor, nullptr, nullptr), plainText);
5214cf0368Sopenharmony_ci    return ctxt->self;
5314cf0368Sopenharmony_ci}
5414cf0368Sopenharmony_ci
5514cf0368Sopenharmony_civoid PlainTextNapi::NewInstance(napi_env env, std::shared_ptr<UnifiedRecord> in, napi_value &out)
5614cf0368Sopenharmony_ci{
5714cf0368Sopenharmony_ci    LOG_DEBUG(UDMF_KITS_NAPI, "PlainTextNapi");
5814cf0368Sopenharmony_ci    ASSERT_CALL_VOID(env, napi_new_instance(env, Constructor(env), 0, nullptr, &out));
5914cf0368Sopenharmony_ci    auto *plainText = new (std::nothrow) PlainTextNapi();
6014cf0368Sopenharmony_ci    ASSERT_ERR_VOID(env, plainText != nullptr, Status::E_ERROR, "no memory for plain text!");
6114cf0368Sopenharmony_ci    plainText->value_ = std::static_pointer_cast<PlainText>(in);
6214cf0368Sopenharmony_ci    ASSERT_CALL_DELETE(env, napi_wrap(env, out, plainText, Destructor, nullptr, nullptr), plainText);
6314cf0368Sopenharmony_ci}
6414cf0368Sopenharmony_ci
6514cf0368Sopenharmony_civoid PlainTextNapi::Destructor(napi_env env, void *data, void *hint)
6614cf0368Sopenharmony_ci{
6714cf0368Sopenharmony_ci    LOG_DEBUG(UDMF_KITS_NAPI, "PlainTextNapi finalize.");
6814cf0368Sopenharmony_ci    auto *plainText = static_cast<PlainTextNapi *>(data);
6914cf0368Sopenharmony_ci    ASSERT_VOID(plainText != nullptr, "finalize null!");
7014cf0368Sopenharmony_ci    delete plainText;
7114cf0368Sopenharmony_ci}
7214cf0368Sopenharmony_ci
7314cf0368Sopenharmony_ciPlainTextNapi *PlainTextNapi::GetPlainText(napi_env env, napi_callback_info info, std::shared_ptr<ContextBase> ctxt)
7414cf0368Sopenharmony_ci{
7514cf0368Sopenharmony_ci    LOG_DEBUG(UDMF_KITS_NAPI, "PlainTextNapi");
7614cf0368Sopenharmony_ci    ctxt->GetCbInfoSync(env, info);
7714cf0368Sopenharmony_ci    ASSERT_ERR(ctxt->env, ctxt->status == napi_ok, Status::E_ERROR, ctxt->error);
7814cf0368Sopenharmony_ci    return static_cast<PlainTextNapi *>(ctxt->native);
7914cf0368Sopenharmony_ci}
8014cf0368Sopenharmony_ci
8114cf0368Sopenharmony_cinapi_value PlainTextNapi::GetContent(napi_env env, napi_callback_info info)
8214cf0368Sopenharmony_ci{
8314cf0368Sopenharmony_ci    LOG_DEBUG(UDMF_KITS_NAPI, "PlainTextNapi");
8414cf0368Sopenharmony_ci    auto ctxt = std::make_shared<ContextBase>();
8514cf0368Sopenharmony_ci    auto plainText = GetPlainText(env, info, ctxt);
8614cf0368Sopenharmony_ci    ASSERT_ERR(ctxt->env, (plainText != nullptr && plainText->value_ != nullptr), Status::E_ERROR,
8714cf0368Sopenharmony_ci        "invalid object!");
8814cf0368Sopenharmony_ci    ctxt->status = NapiDataUtils::SetValue(env, plainText->value_->GetContent(), ctxt->output);
8914cf0368Sopenharmony_ci    ASSERT_ERR(ctxt->env, ctxt->status == napi_ok, Status::E_ERROR, "set text content failed!");
9014cf0368Sopenharmony_ci    return ctxt->output;
9114cf0368Sopenharmony_ci}
9214cf0368Sopenharmony_ci
9314cf0368Sopenharmony_cinapi_value PlainTextNapi::SetContent(napi_env env, napi_callback_info info)
9414cf0368Sopenharmony_ci{
9514cf0368Sopenharmony_ci    LOG_DEBUG(UDMF_KITS_NAPI, "PlainTextNapi");
9614cf0368Sopenharmony_ci    auto ctxt = std::make_shared<ContextBase>();
9714cf0368Sopenharmony_ci    std::string content;
9814cf0368Sopenharmony_ci    auto input = [env, ctxt, &content](size_t argc, napi_value *argv) {
9914cf0368Sopenharmony_ci        ASSERT_BUSINESS_ERR(ctxt, argc >= 1,
10014cf0368Sopenharmony_ci            Status::E_INVALID_PARAMETERS, "Parameter error: Mandatory parameters are left unspecified");
10114cf0368Sopenharmony_ci        ctxt->status = NapiDataUtils::GetValue(env, argv[0], content);
10214cf0368Sopenharmony_ci        ASSERT_BUSINESS_ERR(ctxt, ctxt->status == napi_ok,
10314cf0368Sopenharmony_ci            Status::E_INVALID_PARAMETERS, "Parameter error: parameter content type must be string");
10414cf0368Sopenharmony_ci    };
10514cf0368Sopenharmony_ci    ctxt->GetCbInfoSync(env, info, input);
10614cf0368Sopenharmony_ci    ASSERT_ERR(ctxt->env, ctxt->status == napi_ok, Status::E_ERROR, ctxt->error);
10714cf0368Sopenharmony_ci    auto plainText = static_cast<PlainTextNapi *>(ctxt->native);
10814cf0368Sopenharmony_ci    ASSERT_ERR(ctxt->env, (plainText != nullptr && plainText->value_ != nullptr), Status::E_ERROR,
10914cf0368Sopenharmony_ci        "invalid object!");
11014cf0368Sopenharmony_ci    plainText->value_->SetContent(content);
11114cf0368Sopenharmony_ci    return nullptr;
11214cf0368Sopenharmony_ci}
11314cf0368Sopenharmony_ci
11414cf0368Sopenharmony_cinapi_value PlainTextNapi::GetAbstract(napi_env env, napi_callback_info info)
11514cf0368Sopenharmony_ci{
11614cf0368Sopenharmony_ci    LOG_DEBUG(UDMF_KITS_NAPI, "PlainTextNapi");
11714cf0368Sopenharmony_ci    auto ctxt = std::make_shared<ContextBase>();
11814cf0368Sopenharmony_ci    auto plainText = GetPlainText(env, info, ctxt);
11914cf0368Sopenharmony_ci    ASSERT_ERR(ctxt->env, (plainText != nullptr && plainText->value_ != nullptr), Status::E_ERROR,
12014cf0368Sopenharmony_ci        "invalid object!");
12114cf0368Sopenharmony_ci    ctxt->status = NapiDataUtils::SetValue(env, plainText->value_->GetAbstract(), ctxt->output);
12214cf0368Sopenharmony_ci    ASSERT_ERR(ctxt->env, ctxt->status == napi_ok, Status::E_ERROR, "set abstract failed!");
12314cf0368Sopenharmony_ci    return ctxt->output;
12414cf0368Sopenharmony_ci}
12514cf0368Sopenharmony_ci
12614cf0368Sopenharmony_cinapi_value PlainTextNapi::SetAbstract(napi_env env, napi_callback_info info)
12714cf0368Sopenharmony_ci{
12814cf0368Sopenharmony_ci    LOG_DEBUG(UDMF_KITS_NAPI, "PlainTextNapi");
12914cf0368Sopenharmony_ci    auto ctxt = std::make_shared<ContextBase>();
13014cf0368Sopenharmony_ci    std::string abstract;
13114cf0368Sopenharmony_ci    auto input = [env, ctxt, &abstract](size_t argc, napi_value *argv) {
13214cf0368Sopenharmony_ci        ASSERT_BUSINESS_ERR(ctxt, argc >= 1,
13314cf0368Sopenharmony_ci            Status::E_INVALID_PARAMETERS, "Parameter error: Mandatory parameters are left unspecified");
13414cf0368Sopenharmony_ci        ctxt->status = NapiDataUtils::GetValue(env, argv[0], abstract);
13514cf0368Sopenharmony_ci        ASSERT_BUSINESS_ERR(ctxt, ctxt->status == napi_ok,
13614cf0368Sopenharmony_ci            Status::E_INVALID_PARAMETERS, "Parameter error: parameter abstract type must be string");
13714cf0368Sopenharmony_ci    };
13814cf0368Sopenharmony_ci    ctxt->GetCbInfoSync(env, info, input);
13914cf0368Sopenharmony_ci    ASSERT_ERR(ctxt->env, ctxt->status == napi_ok, Status::E_ERROR, ctxt->error);
14014cf0368Sopenharmony_ci    auto plainText = static_cast<PlainTextNapi *>(ctxt->native);
14114cf0368Sopenharmony_ci    ASSERT_ERR(ctxt->env, (plainText != nullptr && plainText->value_ != nullptr), Status::E_ERROR,
14214cf0368Sopenharmony_ci        "invalid object!");
14314cf0368Sopenharmony_ci    plainText->value_->SetAbstract(abstract);
14414cf0368Sopenharmony_ci    return nullptr;
14514cf0368Sopenharmony_ci}
14614cf0368Sopenharmony_ci} // namespace UDMF
14714cf0368Sopenharmony_ci} // namespace OHOS