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