From 3a7cc7382305e2d1f2793d9fea923f2428a87e64 Mon Sep 17 00:00:00 2001 From: dsinclair Date: Thu, 21 Jul 2016 12:04:34 -0700 Subject: Split xfa_document_serialize into class files This CL moves CXFA_DataImporter and CXFA_DataExporter into their own files and moves code to an anonymous namespace as necessary. Review-Url: https://codereview.chromium.org/2164663004 --- xfa/fxfa/parser/cxfa_dataimporter.cpp | 62 +++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 xfa/fxfa/parser/cxfa_dataimporter.cpp (limited to 'xfa/fxfa/parser/cxfa_dataimporter.cpp') diff --git a/xfa/fxfa/parser/cxfa_dataimporter.cpp b/xfa/fxfa/parser/cxfa_dataimporter.cpp new file mode 100644 index 0000000000..87848ddebb --- /dev/null +++ b/xfa/fxfa/parser/cxfa_dataimporter.cpp @@ -0,0 +1,62 @@ +// Copyright 2016 PDFium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com + +#include "xfa/fxfa/parser/cxfa_dataimporter.h" + +#include + +#include "core/fxcrt/include/fx_stream.h" +#include "xfa/fde/xml/fde_xml_imp.h" +#include "xfa/fxfa/include/fxfa.h" +#include "xfa/fxfa/include/fxfa_basic.h" +#include "xfa/fxfa/parser/cxfa_document.h" +#include "xfa/fxfa/parser/cxfa_simple_parser.h" +#include "xfa/fxfa/parser/xfa_object.h" + +CXFA_DataImporter::CXFA_DataImporter(CXFA_Document* pDocument) + : m_pDocument(pDocument) { + ASSERT(m_pDocument); +} + +FX_BOOL CXFA_DataImporter::ImportData(IFX_FileRead* pDataDocument) { + std::unique_ptr pDataDocumentParser( + new CXFA_SimpleParser(m_pDocument, false)); + if (pDataDocumentParser->StartParse(pDataDocument, XFA_XDPPACKET_Datasets) != + XFA_PARSESTATUS_Ready) { + return FALSE; + } + if (pDataDocumentParser->DoParse(nullptr) < XFA_PARSESTATUS_Done) + return FALSE; + + CXFA_Node* pImportDataRoot = pDataDocumentParser->GetRootNode(); + if (!pImportDataRoot) + return FALSE; + + CXFA_Node* pDataModel = + ToNode(m_pDocument->GetXFAObject(XFA_HASHCODE_Datasets)); + if (!pDataModel) + return FALSE; + + CXFA_Node* pDataNode = ToNode(m_pDocument->GetXFAObject(XFA_HASHCODE_Data)); + if (pDataNode) + pDataModel->RemoveChild(pDataNode); + + if (pImportDataRoot->GetElementType() == XFA_Element::DataModel) { + while (CXFA_Node* pChildNode = + pImportDataRoot->GetNodeItem(XFA_NODEITEM_FirstChild)) { + pImportDataRoot->RemoveChild(pChildNode); + pDataModel->InsertChild(pChildNode); + } + } else { + CFDE_XMLNode* pXMLNode = pImportDataRoot->GetXMLMappingNode(); + CFDE_XMLNode* pParentXMLNode = pXMLNode->GetNodeItem(CFDE_XMLNode::Parent); + if (pParentXMLNode) + pParentXMLNode->RemoveChildNode(pXMLNode); + pDataModel->InsertChild(pImportDataRoot); + } + m_pDocument->DoDataRemerge(FALSE); + return TRUE; +} -- cgit v1.2.3