blob: 908c13b7ce17975e1d55bb0690b1ac6c66d47c55 [file] [log] [blame]
Georges-Henri Baron326a31d2012-06-28 12:05:09 +02001/*
David Wagnerb76c9d62014-02-05 18:30:24 +01002 * Copyright (c) 2011-2014, Intel Corporation
3 * All rights reserved.
Georges-Henri Baron326a31d2012-06-28 12:05:09 +02004 *
David Wagnerb76c9d62014-02-05 18:30:24 +01005 * Redistribution and use in source and binary forms, with or without modification,
6 * are permitted provided that the following conditions are met:
Georges-Henri Baron326a31d2012-06-28 12:05:09 +02007 *
David Wagnerb76c9d62014-02-05 18:30:24 +01008 * 1. Redistributions of source code must retain the above copyright notice, this
9 * list of conditions and the following disclaimer.
Georges-Henri Baron326a31d2012-06-28 12:05:09 +020010 *
David Wagnerb76c9d62014-02-05 18:30:24 +010011 * 2. Redistributions in binary form must reproduce the above copyright notice,
12 * this list of conditions and the following disclaimer in the documentation and/or
13 * other materials provided with the distribution.
14 *
15 * 3. Neither the name of the copyright holder nor the names of its contributors
16 * may be used to endorse or promote products derived from this software without
17 * specific prior written permission.
18 *
19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
20 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
21 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
23 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
24 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
25 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
26 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Georges-Henri Baron326a31d2012-06-28 12:05:09 +020029 */
30
31#include "XmlFileDocSource.h"
32#include <libxml/parser.h>
Guillaume Denneulin3ba083e2014-01-31 15:09:42 +010033#include <libxml/xinclude.h>
Georges-Henri Baron326a31d2012-06-28 12:05:09 +020034
35#define base CXmlDocSource
36
Georges-Henri Baroncec86c12012-09-04 17:30:28 +020037CXmlFileDocSource::CXmlFileDocSource(const string& strXmlInstanceFile,
38 const string& strXmlSchemaFile,
39 const string& strRootElementType,
40 const string& strRootElementName,
Mattijs Korpershoek31418912014-04-08 14:05:21 +020041 const string& strNameAttrituteName,
42 bool bValidateWithSchema) :
Guillaume Denneulin3ba083e2014-01-31 15:09:42 +010043 base(readFile(strXmlInstanceFile),
Georges-Henri Baroncec86c12012-09-04 17:30:28 +020044 strXmlSchemaFile,
45 strRootElementType,
46 strRootElementName,
Mattijs Korpershoek31418912014-04-08 14:05:21 +020047 strNameAttrituteName,
48 bValidateWithSchema),
Georges-Henri Baroncec86c12012-09-04 17:30:28 +020049 _strXmlInstanceFile(strXmlInstanceFile)
Georges-Henri Baron326a31d2012-06-28 12:05:09 +020050{
51}
52
Georges-Henri Baroncec86c12012-09-04 17:30:28 +020053CXmlFileDocSource::CXmlFileDocSource(const string& strXmlInstanceFile,
54 const string& strXmlSchemaFile,
Mattijs Korpershoek31418912014-04-08 14:05:21 +020055 const string& strRootElementType,
56 bool bValidateWithSchema) :
Guillaume Denneulin3ba083e2014-01-31 15:09:42 +010057 base(readFile(strXmlInstanceFile),
Georges-Henri Baroncec86c12012-09-04 17:30:28 +020058 strXmlSchemaFile,
Mattijs Korpershoek31418912014-04-08 14:05:21 +020059 strRootElementType,
60 bValidateWithSchema),
Georges-Henri Baroncec86c12012-09-04 17:30:28 +020061 _strXmlInstanceFile(strXmlInstanceFile)
Georges-Henri Baron326a31d2012-06-28 12:05:09 +020062{
63}
64
Frédéric Boisnarda409daa2012-10-18 18:20:03 +020065bool CXmlFileDocSource::isParsable(CXmlSerializingContext& serializingContext) const
66{
67 // Check that the doc has been created
68 if (!_pDoc) {
69
70 serializingContext.setError("Could not parse file " + _strXmlInstanceFile);
71
72 return false;
73 }
74
75 return true;
76}
77
Georges-Henri Baroncec86c12012-09-04 17:30:28 +020078bool CXmlFileDocSource::populate(CXmlSerializingContext& serializingContext)
Georges-Henri Baron326a31d2012-06-28 12:05:09 +020079{
Guillaume Denneulin3ba083e2014-01-31 15:09:42 +010080 if (!validate(serializingContext)) {
Georges-Henri Baron326a31d2012-06-28 12:05:09 +020081
Georges-Henri Baroncec86c12012-09-04 17:30:28 +020082 // Add the file's name in the error message
83 serializingContext.appendLineToError("File : " + _strXmlInstanceFile);
84
Georges-Henri Baron326a31d2012-06-28 12:05:09 +020085 return false;
86 }
87
Georges-Henri Baron326a31d2012-06-28 12:05:09 +020088 return true;
Georges-Henri Baron326a31d2012-06-28 12:05:09 +020089}
Guillaume Denneulin3ba083e2014-01-31 15:09:42 +010090
91_xmlDoc* CXmlFileDocSource::readFile(const string& strFileName)
92{
93 // Read xml file
94 xmlDocPtr pDoc = xmlReadFile(strFileName.c_str(), NULL, 0);
95
96 if (!pDoc) {
97
98 return NULL;
99 }
100 // Process file inclusion
101 // WARNING: this symbol is available if libxml2 has been compiled with LIBXML_XINCLUDE_ENABLED
102 if (xmlXIncludeProcess(pDoc) < 0) {
103
104 xmlFreeDoc(pDoc);
105 return NULL;
106 }
107
108 return pDoc;
109}