Panzer  Version of the Day
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Panzer_CommaSeparatedEntryValidator.cpp
Go to the documentation of this file.
1 // @HEADER
2 // ***********************************************************************
3 //
4 // Panzer: A partial differential equation assembly
5 // engine for strongly coupled complex multiphysics systems
6 // Copyright (2011) Sandia Corporation
7 //
8 // Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
9 // the U.S. Government retains certain rights in this software.
10 //
11 // Redistribution and use in source and binary forms, with or without
12 // modification, are permitted provided that the following conditions are
13 // met:
14 //
15 // 1. Redistributions of source code must retain the above copyright
16 // notice, this list of conditions and the following disclaimer.
17 //
18 // 2. Redistributions in binary form must reproduce the above copyright
19 // notice, this list of conditions and the following disclaimer in the
20 // documentation and/or other materials provided with the distribution.
21 //
22 // 3. Neither the name of the Corporation nor the names of the
23 // contributors may be used to endorse or promote products derived from
24 // this software without specific prior written permission.
25 //
26 // THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
27 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
28 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
29 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
30 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
31 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
32 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
33 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
34 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
35 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
36 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
37 //
38 // Questions? Contact Roger P. Pawlowski (rppawlo@sandia.gov) and
39 // Eric C. Cyr (eccyr@sandia.gov)
40 // ***********************************************************************
41 // @HEADER
42 
45 #include "Teuchos_StrUtils.hpp"
46 
47 namespace panzer {
48 
50 split(const std::string & str,
51  const std::string & delim,
52  std::vector<std::string> & output)
53 {
54  output.clear();
55 
56  // typedef boost::tokenizer<boost::char_separator<char> >
57  // tokenizer;
58 
59  // boost::char_separator<char> sep(delim.c_str());
60  // tokenizer tokens(str, sep);
61  // for(tokenizer::iterator tok_iter = tokens.begin();
62  // tok_iter != tokens.end(); ++tok_iter) {
63  // // extract token, remove spaces
64  // std::string s = *tok_iter;
65  // boost::trim(s);
66  // if(s.length()!=0)
67  // output.push_back(s);
68  // }
69 
70  panzer::StringTokenizer(output, str, delim, true);
71 }
72 
73 void
76  const std::string & paramName,
77  const std::string & sublistName) const
78 {
79  const std::string &entryName = entry.getAny(false).typeName();
80  Teuchos::any anyValue = entry.getAny(true);
81 
82  // type passed, validate value
83  TEUCHOS_TEST_FOR_EXCEPTION(!(anyValue.type() == typeid(std::string) ),
85  "Sorry but it looks like the \"" << paramName << "\"" <<
86  " parameter in the \"" << sublistName <<
87  "\" sublist does not exist." << std::endl << std::endl <<
88  "Error: The value that you entered was the wrong type." << std::endl <<
89  "Parameter: " << paramName << std::endl <<
90  "Type specified: " << entryName << std::endl <<
91  "Type accepted: " << typeid(std::string).name() <<
92  std::endl << std::endl);
93 
94  const std::string & value = Teuchos::any_cast<std::string>(anyValue);
95 
96  std::vector<std::string> tokens;
97  split(value,",",tokens);
98 
99  if(!allowEmpty_) {
100  const std::string errorStr = "The value for \"string-list\" type parameter in sublist \""+sublistName+"\" named \""+paramName+"\" "
101  "is incorrectly formatted. The expected format is\n"
102  " \"<string>[, <string>]*\" "
103  "your value is \""+value+"\"";
104 
105  // verify that their is a response type and an evaluation type
106  TEUCHOS_TEST_FOR_EXCEPTION(tokens.size()==0,
108  }
109 }
110 
111 
113  std::string const &docString, std::ostream &out) const
114 {
115  Teuchos::StrUtils::printLines(out,"# ",docString);
116  out << "# Validator Used: " << std::endl;
117  out << "# CommaSeparatedEntry Validator" << std::endl;
118 }
119 
120 }
void printDoc(const std::string &docString, std::ostream &out) const
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
static std::ostream & printLines(std::ostream &os, const std::string &linePrefix, const std::string &lines)
void validate(const Teuchos::ParameterEntry &entry, const std::string &paramName, const std::string &sublistName) const
any & getAny(bool activeQry=true)
std::string typeName() const
void StringTokenizer(std::vector< std::string > &tokens, const std::string &str, const std::string delimiters, bool trim)
Tokenize a string, put tokens in a vector.
const std::type_info & type() const
static void split(const std::string &str, const std::string &delim, std::vector< std::string > &tokens)
Utility function for tokenizing.