Teuchos Package Browser (Single Doxygen Collection) Version of the Day
XmlToParameterList.cpp
Go to the documentation of this file.
00001 // @HEADER
00002 // ***********************************************************************
00003 //
00004 //                    Teuchos: Common Tools Package
00005 //                 Copyright (2004) Sandia Corporation
00006 //
00007 // Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
00008 // license for use of this work by or on behalf of the U.S. Government.
00009 //
00010 // Redistribution and use in source and binary forms, with or without
00011 // modification, are permitted provided that the following conditions are
00012 // met:
00013 //
00014 // 1. Redistributions of source code must retain the above copyright
00015 // notice, this list of conditions and the following disclaimer.
00016 //
00017 // 2. Redistributions in binary form must reproduce the above copyright
00018 // notice, this list of conditions and the following disclaimer in the
00019 // documentation and/or other materials provided with the distribution.
00020 //
00021 // 3. Neither the name of the Corporation nor the names of the
00022 // contributors may be used to endorse or promote products derived from
00023 // this software without specific prior written permission.
00024 //
00025 // THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
00026 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00027 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
00028 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
00029 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
00030 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
00031 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
00032 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
00033 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
00034 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
00035 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00036 //
00037 // Questions? Contact Michael A. Heroux (maherou@sandia.gov)
00038 //
00039 // ***********************************************************************
00040 // @HEADER
00041 
00042 #include "Teuchos_Version.hpp"
00043 #include "Teuchos_GlobalMPISession.hpp"
00044 #include "Teuchos_CommandLineProcessor.hpp"
00045 #include "Teuchos_StandardCatchMacros.hpp"
00046 #include "Teuchos_ParameterList.hpp"
00047 #include "Teuchos_XMLParameterListHelpers.hpp"
00048 
00049 #include <fstream>
00050 
00051 int main( int argc, char* argv[] )
00052 {
00053   Teuchos::GlobalMPISession mpiSession(&argc,&argv);
00054 
00055   std::cout << std::endl << Teuchos::Teuchos_Version() << std::endl;
00056 
00057   bool success = true;
00058 
00059   try {
00060 
00061     std::string    xmlInFileName = "";
00062     std::string    extraXmlFile = "";
00063     std::string    xmlOutFileName = "paramList.out";
00064 
00065     Teuchos::CommandLineProcessor  clp(false); // Don't throw exceptions
00066     clp.setOption("xml-in-file",&xmlInFileName,"The XML file to read into a parameter list");
00067     clp.setOption("extra-xml-file",&extraXmlFile,"File with extra XML text that will modify the initial XML read in");
00068     clp.setOption("xml-out-file",&xmlOutFileName,"The XML file to write the final parameter list to");
00069     clp.setDocString(
00070       "This example program shows how to read in a parameter list from an"
00071       " XML file (given by --xml-in-file=xmlInFileName) and then modify it"
00072       " given some XML specified on the command-line (given by --extra-xml=extrXmlStr)."
00073       " The final parameter list is then written back to an XML file."
00074       " (given by --xml-out-file=xmlOutFileName)."
00075       );
00076     Teuchos::CommandLineProcessor::EParseCommandLineReturn
00077       parse_return = clp.parse(argc,argv);
00078     if( parse_return != Teuchos::CommandLineProcessor::PARSE_SUCCESSFUL ) {
00079       std::cout << "\nEnd Result: TEST FAILED" << std::endl;
00080       return parse_return;
00081     }
00082 
00083     Teuchos::ParameterList paramList;
00084 
00085     if(xmlInFileName.length()) {
00086       std::cout << "\nReading a parameter list from the XML file \""<<xmlInFileName<<"\" ...\n";
00087       Teuchos::updateParametersFromXmlFile(xmlInFileName,&paramList);
00088       std::cout << "\nParameter list read from the XML file \""<<xmlInFileName<<"\":\n\n";
00089       paramList.print(std::cout,2,true,true);
00090     }
00091     
00092     std::string line("");
00093     if(extraXmlFile.length()) {
00094       std::ifstream myfile(extraXmlFile.c_str());
00095       if (myfile.is_open())
00096       {
00097         getline (myfile,line);
00098         std::cout << line << "\n";
00099         myfile.close();
00100       }
00101       std::cout << "\nUpdating the parameter list given the extra XML std::string:\n\n"<<line<<"\n";
00102       Teuchos::updateParametersFromXmlString(line,&paramList);
00103       std::cout << "\nParameter list after ammending extra XML std::string:\n\n";
00104       paramList.print(std::cout,2,true,true);
00105     }
00106 
00107     std::cout << "\nWriting the final parameter list back to the XML file \""<<xmlOutFileName<<"\" ... \n";
00108     Teuchos::writeParameterListToXmlFile(paramList,xmlOutFileName);
00109 
00110   }
00111   TEUCHOS_STANDARD_CATCH_STATEMENTS(true,std::cerr,success);
00112 
00113   if(success)
00114     std::cout << "\nEnd Result: TEST PASSED" << std::endl;
00115   else
00116     std::cout << "\nEnd Result: TEST FAILED" << std::endl;
00117 
00118   return ( success ? 0 : 1 );
00119 
00120 }
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines