Line data Source code
1 : /****************************************************************************/
2 : // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3 : // Copyright (C) 2001-2024 German Aerospace Center (DLR) and others.
4 : // This program and the accompanying materials are made available under the
5 : // terms of the Eclipse Public License 2.0 which is available at
6 : // https://www.eclipse.org/legal/epl-2.0/
7 : // This Source Code may also be made available under the following Secondary
8 : // Licenses when the conditions for such availability set forth in the Eclipse
9 : // Public License 2.0 are satisfied: GNU General Public License, version 2
10 : // or later which is available at
11 : // https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
12 : // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
13 : /****************************************************************************/
14 : /// @file NITypeLoader.cpp
15 : /// @author Daniel Krajzewicz
16 : /// @author Jakob Erdmann
17 : /// @author Sascha Krieg
18 : /// @author Michael Behrisch
19 : /// @author Robert Hilbrich
20 : /// @date Tue, 20 Nov 2001
21 : ///
22 : // Perfoms network import
23 : /****************************************************************************/
24 : #include <config.h>
25 :
26 : #include <string>
27 : #include <utils/common/UtilExceptions.h>
28 : #include <utils/common/MsgHandler.h>
29 : #include <utils/options/OptionsCont.h>
30 : #include <utils/options/Option.h>
31 : #include <utils/common/FileHelpers.h>
32 : #include <utils/common/StringUtils.h>
33 : #include <utils/common/ToString.h>
34 : #include <utils/common/StringUtils.h>
35 : #include <utils/xml/SUMOSAXHandler.h>
36 : #include <utils/xml/SUMOSAXReader.h>
37 : #include <utils/xml/XMLSubSys.h>
38 : #include "NITypeLoader.h"
39 :
40 :
41 : bool
42 14780 : NITypeLoader::load(SUMOSAXHandler& handler, const std::vector<std::string>& files,
43 : const std::string& type, const bool stringParse) {
44 : // build parser
45 14780 : std::string exceptMsg = "";
46 14780 : std::string fileName = "";
47 : // start the parsing
48 : bool ok = true;
49 : bool raise = false;
50 : try {
51 17456 : for (std::vector<std::string>::const_iterator file = files.begin(); file != files.end(); ++file) {
52 : fileName = *file;
53 2681 : if (stringParse) {
54 : fileName = "built in type map";
55 0 : handler.setFileName(fileName);
56 0 : SUMOSAXReader* reader = XMLSubSys::getSAXReader(handler);
57 0 : reader->parseString(*file);
58 0 : delete reader;
59 0 : continue;
60 0 : }
61 5362 : if (!FileHelpers::isReadable(fileName)) {
62 15 : WRITE_ERRORF(TL("Could not open %-file '%'."), type, fileName);
63 : return false;
64 : }
65 8028 : PROGRESS_BEGIN_MESSAGE("Parsing " + type + " from '" + fileName + "'");
66 2676 : ok &= XMLSubSys::runParser(handler, fileName);
67 2676 : PROGRESS_DONE_MESSAGE();
68 : }
69 0 : } catch (const XERCES_CPP_NAMESPACE::XMLException& toCatch) {
70 0 : exceptMsg = StringUtils::transcode(toCatch.getMessage()) + "\n ";
71 : raise = true;
72 0 : } catch (const ProcessError& toCatch) {
73 0 : exceptMsg = std::string(toCatch.what()) + "\n ";
74 : raise = true;
75 0 : } catch (...) {
76 : raise = true;
77 0 : }
78 : if (raise) {
79 0 : throw ProcessError(exceptMsg + "The " + type + " could not be loaded from '" + fileName + "'.");
80 : }
81 : return ok;
82 : }
83 :
84 :
85 : /****************************************************************************/
|