Teuchos - Trilinos Tools Package  Version of the Day
Teuchos_XMLParameterListWriter.cpp
1 // @HEADER
2 // ***********************************************************************
3 //
4 // Teuchos: Common Tools Package
5 // Copyright (2004) Sandia Corporation
6 //
7 // Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
8 // license for use of this work by or on behalf of the U.S. Government.
9 //
10 // Redistribution and use in source and binary forms, with or without
11 // modification, are permitted provided that the following conditions are
12 // met:
13 //
14 // 1. Redistributions of source code must retain the above copyright
15 // notice, this list of conditions and the following disclaimer.
16 //
17 // 2. Redistributions in binary form must reproduce the above copyright
18 // notice, this list of conditions and the following disclaimer in the
19 // documentation and/or other materials provided with the distribution.
20 //
21 // 3. Neither the name of the Corporation nor the names of the
22 // contributors may be used to endorse or promote products derived from
23 // this software without specific prior written permission.
24 //
25 // THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
26 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
27 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
28 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
29 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
30 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
31 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
32 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
33 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
34 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
35 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36 //
37 // Questions? Contact Michael A. Heroux (maherou@sandia.gov)
38 //
39 // ***********************************************************************
40 // @HEADER
41 
43 #include "Teuchos_ParameterEntryXMLConverterDB.hpp"
47 
48 
49 namespace Teuchos{
50 
51 
53 {;}
54 
55 
58  const ParameterList& p,
59  RCP<const DependencySheet> depSheet) const
60 {
61  EntryIDsMap entryIDsMap;
62  ValidatortoIDMap validatorIDsMap;
63  ParameterEntry::ParameterEntryID peIDCounter = 0;
64 
65  //We build an initial map full of validators that are located in the
66  //parameter list. That way we can convert the parameter entries.
67  buildInitialValidatorMap(p, validatorIDsMap);
68 
69  XMLObject toReturn =
70  convertParameterList(p, peIDCounter, entryIDsMap, validatorIDsMap);
71  toReturn.addAttribute(getNameAttributeName(), p.name());
72 
73  if(!depSheet.is_null()){
74  XMLObject deps =
75  convertDependencies(depSheet, entryIDsMap, validatorIDsMap);
76  toReturn.addChild(deps);
77  }
78 
79  //Validators must be done after depencneies because dependencies might add
80  //entries to the validator map. KLN 09/20/2010
81  XMLObject validators = convertValidators(p, validatorIDsMap);
82  toReturn.addChild(validators);
83 
84  return toReturn;
85 }
86 
87 void XMLParameterListWriter::buildInitialValidatorMap(
88  const ParameterList& p,
89  ValidatortoIDMap& validatorIDsMap) const
90 {
91  for (ParameterList::ConstIterator i=p.begin(); i!=p.end(); ++i) {
92  const ParameterEntry& entry = p.entry(i);
93  if(entry.isList()){
94  buildInitialValidatorMap(
95  getValue<ParameterList>(entry),
96  validatorIDsMap);
97  }
98  else if(nonnull(entry.validator())){
99  validatorIDsMap.insert(entry.validator());
100  }
101  }
102 }
103 
104 
105 XMLObject XMLParameterListWriter::convertValidators(
106  const ParameterList& p, ValidatortoIDMap& validatorIDsMap) const
107 {
108  XMLObject validators(getValidatorsTagName());
109  for(
110  ValidatortoIDMap::const_iterator it = validatorIDsMap.begin();
111  it != validatorIDsMap.end();
112  ++it)
113  {
114  validators.addChild(
115  ValidatorXMLConverterDB::convertValidator(it->first, validatorIDsMap));
116  }
117  return validators;
118 }
119 
120 
121 XMLObject XMLParameterListWriter::convertParameterList(
122  const ParameterList& p,
124  EntryIDsMap& entryIDsMap,
125  const ValidatortoIDMap& validatorIDsMap) const
126 {
127  XMLObject rtn(getParameterListTagName());
128 
129  for (ParameterList::ConstIterator i=p.begin(); i!=p.end(); ++i){
130  RCP<const ParameterEntry> entry = p.getEntryRCP(i->first);
131  if(entry->isList()){
132  XMLObject newPL = convertParameterList(
133  getValue<ParameterList>(entry),
134  idCounter,
135  entryIDsMap,
136  validatorIDsMap);
137  newPL.addAttribute(
138  getNameAttributeName(), p.name(i));
139  newPL.addAttribute(
141  entryIDsMap.insert(EntryIDsMap::value_type(entry, idCounter));
142  rtn.addChild(newPL);
143  ++idCounter;
144  }
145  else{
147  entry, p.name(i), idCounter, validatorIDsMap));
148  entryIDsMap.insert(EntryIDsMap::value_type(entry, idCounter));
149  ++idCounter;
150  }
151  }
152  return rtn;
153 }
154 
155 XMLObject
156 XMLParameterListWriter::convertDependencies(
157  RCP<const DependencySheet> depSheet,
158  const EntryIDsMap& entryIDsMap,
159  ValidatortoIDMap& validatorIDsMap) const
160 {
161  XMLObject toReturn(getDependenciesTagName());
162  toReturn.addAttribute(
164  depSheet->getName()
165  );
166 
167  for(
168  DependencySheet::DepSet::const_iterator it = depSheet->depBegin();
169  it != depSheet->depEnd();
170  ++it)
171  {
173  *it, entryIDsMap, validatorIDsMap));
174  }
175  return toReturn;
176 }
177 
178 
179 } // namespace Teuchos
180 
Teuchos::XMLParameterListWriter::toXML
XMLObject toXML(const ParameterList &p, RCP< const DependencySheet > depSheet=null) const
Definition: Teuchos_XMLParameterListWriter.cpp:57
Teuchos::ParameterEntry::ParameterEntryID
unsigned int ParameterEntryID
Definition: Teuchos_ParameterEntry.hpp:75
Teuchos::FilteredIterator
C++ Standard Library compatable filtered iterator.
Definition: Teuchos_FilteredIterator.hpp:60
Teuchos::XMLObject::addAttribute
void addAttribute(const std::string &name, T value)
Lookup whether or not Doubles are allowed.
Definition: Teuchos_XMLObject.hpp:193
Teuchos::XMLObject
Representation of an XML data tree. XMLObject is a ref-counted handle to a XMLObjectImplem object,...
Definition: Teuchos_XMLObject.hpp:62
Teuchos::ValidatortoIDMap::const_iterator
ValidatorMap::const_iterator const_iterator
Definition: Teuchos_ValidatorMaps.hpp:118
Teuchos::XMLParameterListWriter::getValidatorsTagName
static const std::string & getValidatorsTagName()
Definition: Teuchos_XMLParameterListWriter.hpp:101
Teuchos::ParameterEntry::validator
RCP< const ParameterEntryValidator > validator() const
Return the (optional) validator object.
Definition: Teuchos_ParameterEntry.hpp:402
Teuchos::XMLParameterListWriter::getNameAttributeName
static const std::string & getNameAttributeName()
Definition: Teuchos_XMLParameterListWriter.hpp:95
Teuchos::ParameterList::end
ConstIterator end() const
An iterator pointing beyond the last entry.
Definition: Teuchos_ParameterList.hpp:1092
Teuchos_XMLParameterListExceptions.hpp
A collection of Exceptions that can be potentially thrown when converting a ParameterList to and from...
Teuchos::ParameterEntry::isList
bool isList() const
Return whether or not the value itself is a list.
Definition: Teuchos_ParameterEntry.cpp:115
Teuchos_DependencyXMLConverterDB.hpp
A database for DependencyXMLConverters.
Teuchos::XMLParameterListWriter::getParameterListTagName
static const std::string & getParameterListTagName()
Definition: Teuchos_XMLParameterListWriter.hpp:89
Teuchos::XMLParameterListWriter::XMLParameterListWriter
XMLParameterListWriter()
Definition: Teuchos_XMLParameterListWriter.cpp:52
Teuchos::RCP
Smart reference counting pointer class for automatic garbage collection.
Definition: Teuchos_RCPDecl.hpp:429
Teuchos::ValidatortoIDMap
A class for mapping validators to integers.
Definition: Teuchos_ValidatorMaps.hpp:104
Teuchos::XMLParameterListWriter::EntryIDsMap
std::map< RCP< const ParameterEntry >, ParameterEntry::ParameterEntryID, RCPConstComp > EntryIDsMap
Definition: Teuchos_XMLParameterListWriter.hpp:73
Teuchos::DependencyXMLConverterDB::convertDependency
static XMLObject convertDependency(RCP< const Dependency > dependency, const XMLParameterListWriter::EntryIDsMap &entryIDsMap, ValidatortoIDMap &validatorIDsMap)
Given a dependency converts the dependency to XML.
Definition: Teuchos_DependencyXMLConverterDB.cpp:103
Teuchos::ValidatortoIDMap::insert
void insert(RCP< const ParameterEntryValidator > toInsert)
inserts an IDValidatorPair into the map.
Definition: Teuchos_ValidatorMaps.cpp:74
Teuchos::XMLObject::addChild
void addChild(const XMLObject &child)
Add a child node to the node.
Definition: Teuchos_XMLObject.cpp:255
Teuchos_XMLParameterListWriter.hpp
Writes a ParameterList to an XML object.
Teuchos::ParameterList::ConstIterator
params_t::ConstIterator ConstIterator
Parameter container const iterator typedef.
Definition: Teuchos_ParameterList.hpp:146
Teuchos::RCP::is_null
bool is_null() const
Returns true if the underlying pointer is null.
Definition: Teuchos_RCP.hpp:336
Teuchos::ValidatorXMLConverterDB::convertValidator
static XMLObject convertValidator(RCP< const ParameterEntryValidator > validator, const ValidatortoIDMap &validatorIDsMap, bool assignedID=true)
Given a validator converts the validator to XML.
Definition: Teuchos_ValidatorXMLConverterDB.cpp:92
Teuchos::FilteredIterator::begin
IteratorType begin() const
Definition: Teuchos_FilteredIterator.hpp:165
Teuchos::ParameterEntryXMLConverter::getIdAttributeName
static const std::string & getIdAttributeName()
Definition: Teuchos_ParameterEntryXMLConverter.hpp:120
Teuchos::ParameterEntryXMLConverterDB::convertEntry
static XMLObject convertEntry(RCP< const ParameterEntry > entry, const std::string &name, const ParameterEntry::ParameterEntryID &id, const ValidatortoIDMap &validatorIDsMap)
Converts the given ParameterEntry to XML.
Definition: Teuchos_ParameterEntryXMLConverterDB.hpp:111
Teuchos::ParameterList::name
const std::string & name() const
The name of this ParameterList.
Definition: Teuchos_ParameterList.hpp:1056
Teuchos::XMLParameterListWriter::getDependenciesTagName
static const std::string & getDependenciesTagName()
Definition: Teuchos_XMLParameterListWriter.hpp:107
Teuchos::nonnull
bool nonnull(const std::shared_ptr< T > &p)
Returns true if p.get()!=NULL.
Definition: Teuchos_RCPStdSharedPtrConversionsDecl.hpp:159
Teuchos::ParameterList
A list of parameters of arbitrary type.
Definition: Teuchos_ParameterList.hpp:132
Teuchos::DependencySheet::getNameAttributeName
static const std::string & getNameAttributeName()
When serializing to XML, this string should be used as the name of the name attribute.
Definition: Teuchos_DependencySheet.hpp:234
Teuchos
The Teuchos namespace contains all of the classes, structs and enums used by Teuchos,...
Teuchos::ParameterEntry
This object is held as the "value" in the Teuchos::ParameterList std::map.
Definition: Teuchos_ParameterEntry.hpp:67
Teuchos::ParameterList::entry
const ParameterEntry & entry(ConstIterator i) const
Access to ParameterEntry (i.e., returns i->second)
Definition: Teuchos_ParameterList.hpp:1104
Teuchos::ParameterList::begin
ConstIterator begin() const
An iterator pointing to the first entry.
Definition: Teuchos_ParameterList.hpp:1086
Teuchos_ValidatorXMLConverterDB.hpp
A database for ValidatorXMLConverters.