14d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Copyright 2016 PDFium Authors. All rights reserved.
24d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Use of this source code is governed by a BSD-style license that can be
34d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// found in the LICENSE file.
44d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
54d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
64d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
74d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fxfa/parser/cxfa_validate.h"
84d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
94d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fxfa/parser/xfa_object.h"
104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCXFA_Validate::CXFA_Validate(CXFA_Node* pNode) : CXFA_Data(pNode) {}
124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannint32_t CXFA_Validate::GetFormatTest() {
144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return m_pNode->GetEnum(XFA_ATTRIBUTE_FormatTest);
154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CXFA_Validate::SetTestValue(int32_t iType,
184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                 CFX_WideString& wsValue,
194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                 XFA_ATTRIBUTEENUM eName) {
204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  const XFA_ATTRIBUTEENUMINFO* pInfo =
214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      XFA_GetAttributeEnumByName(wsValue.AsStringC());
224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pInfo)
234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    eName = pInfo->eName;
244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  m_pNode->SetEnum((XFA_ATTRIBUTE)iType, eName, false);
264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CXFA_Validate::SetNullTest(CFX_WideString wsValue) {
304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return SetTestValue(XFA_ATTRIBUTE_NullTest, wsValue,
314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                      XFA_ATTRIBUTEENUM_Disabled);
324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannint32_t CXFA_Validate::GetNullTest() {
354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return m_pNode->GetEnum(XFA_ATTRIBUTE_NullTest);
364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannint32_t CXFA_Validate::GetScriptTest() {
394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return m_pNode->GetEnum(XFA_ATTRIBUTE_ScriptTest);
404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Validate::GetMessageText(CFX_WideString& wsMessage,
434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                   const CFX_WideString& wsMessageType) {
444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pNode = m_pNode->GetProperty(0, XFA_Element::Message, false);
454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pNode)
464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pItemNode = pNode->GetNodeItem(XFA_NODEITEM_FirstChild);
494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  for (; pItemNode;
504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann       pItemNode = pItemNode->GetNodeItem(XFA_NODEITEM_NextSibling)) {
514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (pItemNode->GetElementType() != XFA_Element::Text)
524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      continue;
534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFX_WideStringC wsName;
554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pItemNode->TryCData(XFA_ATTRIBUTE_Name, wsName);
564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (wsName.IsEmpty() || wsName == wsMessageType) {
574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pItemNode->TryContent(wsMessage);
584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return;
594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Validate::SetFormatMessageText(CFX_WideString wsMessage) {
644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  SetMessageText(wsMessage, L"formatTest");
654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Validate::GetFormatMessageText(CFX_WideString& wsMessage) {
684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  GetMessageText(wsMessage, L"formatTest");
694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Validate::SetNullMessageText(CFX_WideString wsMessage) {
724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  SetMessageText(wsMessage, L"nullTest");
734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Validate::GetNullMessageText(CFX_WideString& wsMessage) {
764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  GetMessageText(wsMessage, L"nullTest");
774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Validate::SetMessageText(CFX_WideString& wsMessage,
804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                   const CFX_WideString& wsMessageType) {
814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pNode = m_pNode->GetProperty(0, XFA_Element::Message, true);
824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pNode)
834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pItemNode = pNode->GetNodeItem(XFA_NODEITEM_FirstChild);
864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  for (; pItemNode;
874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann       pItemNode = pItemNode->GetNodeItem(XFA_NODEITEM_NextSibling)) {
884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (pItemNode->GetElementType() != XFA_Element::Text)
894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      continue;
904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFX_WideStringC wsName;
924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pItemNode->TryCData(XFA_ATTRIBUTE_Name, wsName);
934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (wsName.IsEmpty() || wsName == wsMessageType) {
944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pItemNode->SetContent(wsMessage, wsMessage, false);
954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return;
964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pTextNode = pNode->CreateSamePacketNode(XFA_Element::Text);
994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pNode->InsertChild(pTextNode);
1004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pTextNode->SetCData(XFA_ATTRIBUTE_Name, wsMessageType, false);
1014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pTextNode->SetContent(wsMessage, wsMessage, false);
1024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
1034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Validate::GetScriptMessageText(CFX_WideString& wsMessage) {
1054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  GetMessageText(wsMessage, L"scriptTest");
1064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
1074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Validate::SetScriptMessageText(CFX_WideString wsMessage) {
1094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  SetMessageText(wsMessage, L"scriptTest");
1104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
1114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_Validate::GetPicture(CFX_WideString& wsPicture) {
1134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (CXFA_Node* pNode = m_pNode->GetChild(0, XFA_Element::Picture))
1144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pNode->TryContent(wsPicture);
1154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
1164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCXFA_Script CXFA_Validate::GetScript() {
1184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return CXFA_Script(m_pNode->GetChild(0, XFA_Element::Script));
1194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
120