]> git.donarmstrong.com Git - flightcrew.git/blob - src/FlightCrew/Validators/Opf/ItemrefIdrefValid.cpp
update changelog, target experimental
[flightcrew.git] / src / FlightCrew / Validators / Opf / ItemrefIdrefValid.cpp
1 /************************************************************************\r
2 **\r
3 **  Copyright (C) 2010  Strahinja Markovic\r
4 **\r
5 **  This file is part of FlightCrew.\r
6 **\r
7 **  FlightCrew is free software: you can redistribute it and/or modify\r
8 **  it under the terms of the GNU Lesser General Public License as published\r
9 **  by the Free Software Foundation, either version 3 of the License, or\r
10 **  (at your option) any later version.\r
11 **\r
12 **  FlightCrew is distributed in the hope that it will be useful,\r
13 **  but WITHOUT ANY WARRANTY; without even the implied warranty of\r
14 **  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
15 **  GNU Lesser General Public License for more details.\r
16 **\r
17 **  You should have received a copy of the GNU Lesser General Public License\r
18 **  along with FlightCrew.  If not, see <http://www.gnu.org/licenses/>.\r
19 **\r
20 *************************************************************************/\r
21 \r
22 #include <stdafx.h>\r
23 #include "ItemrefIdrefValid.h"\r
24 #include <FromXercesStringConverter.h>\r
25 #include <XmlUtils.h>\r
26 \r
27 namespace FlightCrew\r
28 {\r
29 \r
30 std::vector< Result > ItemrefIdrefValid::ValidateXml(\r
31     const xc::DOMDocument &document,\r
32     const fs::path& )\r
33 {\r
34     std::vector< xc::DOMAttr* > idrefs = xe::GetAllAttributesFromElements( \r
35         QName( "itemref", OPF_XML_NAMESPACE ),\r
36         QName( "idref", "" ),\r
37         document );\r
38 \r
39     std::vector< xc::DOMAttr* > item_ids = xe::GetAllAttributesFromElements(\r
40         QName( "item", OPF_XML_NAMESPACE ),\r
41         QName( "id", "" ),\r
42         document );\r
43 \r
44     boost::unordered_set< std::string > item_id_set;\r
45 \r
46     foreach( xc::DOMAttr* item_id, item_ids )\r
47     {\r
48         item_id_set.insert( fromX( item_id->getValue() ) );\r
49     }\r
50 \r
51     std::vector< Result > results;\r
52 \r
53     foreach( xc::DOMAttr* idref, idrefs )\r
54     {\r
55         std::string idref_value = fromX( idref->getValue() );   \r
56 \r
57         if ( item_id_set.count( idref_value ) == 0 )\r
58         {\r
59             results.push_back( \r
60                 ResultWithNodeLocation( ERROR_OPF_IDREF_ID_DOES_NOT_EXIST, *idref )\r
61                 .AddMessageArgument( idref_value ) \r
62                 );    \r
63         }\r
64     }\r
65 \r
66     return results;\r
67 }\r
68 \r
69 } // namespace FlightCrew\r
70 \r