1// Copyright 2016 PDFium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6
7#include "xfa/fxfa/parser/xfa_object.h"
8
9#include "core/fxcrt/fx_ext.h"
10#include "fxjs/cfxjse_value.h"
11#include "xfa/fxfa/app/xfa_ffnotify.h"
12#include "xfa/fxfa/parser/cxfa_document.h"
13
14CXFA_Object::CXFA_Object(CXFA_Document* pDocument,
15                         XFA_ObjectType objectType,
16                         XFA_Element elementType,
17                         const CFX_WideStringC& elementName)
18    : m_pDocument(pDocument),
19      m_objectType(objectType),
20      m_elementType(elementType),
21      m_elementNameHash(FX_HashCode_GetW(elementName, false)),
22      m_elementName(elementName) {}
23
24CXFA_Object::~CXFA_Object() {}
25
26CFX_WideStringC CXFA_Object::GetClassName() const {
27  return m_elementName;
28}
29
30uint32_t CXFA_Object::GetClassHashCode() const {
31  return m_elementNameHash;
32}
33
34XFA_Element CXFA_Object::GetElementType() const {
35  return m_elementType;
36}
37
38void CXFA_Object::Script_ObjectClass_ClassName(CFXJSE_Value* pValue,
39                                               bool bSetting,
40                                               XFA_ATTRIBUTE eAttribute) {
41  if (bSetting) {
42    ThrowInvalidPropertyException();
43    return;
44  }
45  pValue->SetString(FX_UTF8Encode(GetClassName()).AsStringC());
46}
47
48void CXFA_Object::ThrowInvalidPropertyException() const {
49  ThrowException(L"Invalid property set operation.");
50}
51
52void CXFA_Object::ThrowIndexOutOfBoundsException() const {
53  ThrowException(L"Index value is out of bounds.");
54}
55
56void CXFA_Object::ThrowParamCountMismatchException(
57    const CFX_WideString& method) const {
58  ThrowException(L"Incorrect number of parameters calling method '%s'.",
59                 method.c_str());
60}
61
62void CXFA_Object::ThrowArgumentMismatchException() const {
63  ThrowException(L"Argument mismatch in property or function argument.");
64}
65
66void CXFA_Object::ThrowException(const FX_WCHAR* str, ...) const {
67  CFX_WideString wsMessage;
68  va_list arg_ptr;
69  va_start(arg_ptr, str);
70  wsMessage.FormatV(str, arg_ptr);
71  va_end(arg_ptr);
72  FXJSE_ThrowMessage(wsMessage.UTF8Encode().AsStringC());
73}
74