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   
00054   using Teuchos::inoutArg;
00055 
00056   Teuchos::GlobalMPISession mpiSession(&argc,&argv);
00057 
00058   std::cout << std::endl << Teuchos::Teuchos_Version() << std::endl;
00059 
00060   bool success = true;
00061 
00062   try {
00063 
00064     std::string    xmlInFileName = "";
00065     std::string    extraXmlFile = "";
00066     std::string    xmlOutFileName = "paramList.out";
00067 
00068     Teuchos::CommandLineProcessor  clp(false); // Don't throw exceptions
00069     clp.setOption("xml-in-file",&xmlInFileName,"The XML file to read into a parameter list");
00070     clp.setOption("extra-xml-file",&extraXmlFile,"File with extra XML text that will modify the initial XML read in");
00071     clp.setOption("xml-out-file",&xmlOutFileName,"The XML file to write the final parameter list to");
00072     clp.setDocString(
00073       "This example program shows how to read in a parameter list from an"
00074       " XML file (given by --xml-in-file=xmlInFileName) and then modify it"
00075       " given some XML specified on the command-line (given by --extra-xml=extrXmlStr)."
00076       " The final parameter list is then written back to an XML file."
00077       " (given by --xml-out-file=xmlOutFileName)."
00078       );
00079     Teuchos::CommandLineProcessor::EParseCommandLineReturn
00080       parse_return = clp.parse(argc,argv);
00081     if( parse_return != Teuchos::CommandLineProcessor::PARSE_SUCCESSFUL ) {
00082       std::cout << "\nEnd Result: TEST FAILED" << std::endl;
00083       return parse_return;
00084     }
00085 
00086     Teuchos::ParameterList paramList;
00087 
00088     if(xmlInFileName.length()) {
00089       std::cout << "\nReading a parameter list from the XML file \""<<xmlInFileName<<"\" ...\n";
00090       Teuchos::updateParametersFromXmlFile(xmlInFileName, inoutArg(paramList));
00091       std::cout << "\nParameter list read from the XML file \""<<xmlInFileName<<"\":\n\n";
00092       paramList.print(std::cout,2,true,true);
00093     }
00094     
00095     std::string line("");
00096     if(extraXmlFile.length()) {
00097       std::ifstream myfile(extraXmlFile.c_str());
00098       if (myfile.is_open())
00099       {
00100         getline (myfile,line);
00101         std::cout << line << "\n";
00102         myfile.close();
00103       }
00104       std::cout << "\nUpdating the parameter list given the extra XML std::string:\n\n"<<line<<"\n";
00105       Teuchos::updateParametersFromXmlString(line, inoutArg(paramList));
00106       std::cout << "\nParameter list after ammending extra XML std::string:\n\n";
00107       paramList.print(std::cout,2,true,true);
00108     }
00109 
00110     std::cout << "\nWriting the final parameter list back to the XML file \""<<xmlOutFileName<<"\" ... \n";
00111     Teuchos::writeParameterListToXmlFile(paramList,xmlOutFileName);
00112 
00113   }
00114   TEUCHOS_STANDARD_CATCH_STATEMENTS(true,std::cerr,success);
00115 
00116   if(success)
00117     std::cout << "\nEnd Result: TEST PASSED" << std::endl;
00118   else
00119     std::cout << "\nEnd Result: TEST FAILED" << std::endl;
00120 
00121   return ( success ? 0 : 1 );
00122 
00123 }
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines