42#ifndef Teuchos_OBJECT_BUILDER_H
43#define Teuchos_OBJECT_BUILDER_H
46#include "Teuchos_ParameterListAcceptor.hpp"
47#include "Teuchos_AbstractFactoryStd.hpp"
48#include "Teuchos_StandardParameterEntryValidators.hpp"
88template<
class ObjectType>
165 std::string object_name_;
166 std::string objectType_name_;
170 std::string defaultObject_name_;
175 void initializeDefaults_();
183template<
class ObjectType>
191template<
class ObjectType>
192RCP<ObjectBuilder<ObjectType> >
193objectBuilder(
const std::string& objectName,
const std::string& objectTypeName)
195 RCP<ObjectBuilder<ObjectType> > ob =
rcp(
new ObjectBuilder<ObjectType>() );
196 ob->setObjectName(objectName);
197 ob->setObjectTypeName(objectTypeName);
207template<
class ObjectType>
210 this->initializeDefaults_();
214template<
class ObjectType>
220template<
class ObjectType>
230 validParamList_ = null;
232 this->getValidParameters();
237template<
class ObjectType>
242 this->getValidParameters();
249 pl = parameterList();
250 pl->setParameters(*this->getValidParameters());
252 return objectValidator_->getStringValue(*
pl, objectType_name_, defaultObject_name_);
256template<
class ObjectType>
262 paramList->validateParameters(*this->getValidParameters());
268template<
class ObjectType>
276template<
class ObjectType>
283 paramList_->validateParameters(*this->getValidParameters());
291template<
class ObjectType>
299template<
class ObjectType>
303 if(!validParamList_.get()) {
306 objectValidator_ =
rcp(
308 validObjectNames_, objectType_name_
311 objectValidator_->validateString(defaultObject_name_,objectType_name_);
313 objectType_name_, defaultObject_name_,
314 (std::string(
"Determines the type of " + object_name_ +
" object that will be built.\n")
315 +
"The parameters for each " + objectType_name_ +
" are specified in this sublist"
321 &
sname = validObjectNames_[
i+1];
323 object = objectArray_[
i]->create();
325 *
object->getValidParameters()).disableRecursiveValidation();
329 return validParamList_;
332template<
class ObjectType>
338 if (
is_null(validParamList_)) {
339 this->getValidParameters();
345 validParamList_ = null;
348template<
class ObjectType>
354 if (
is_null(validParamList_)) {
355 this->getValidParameters();
360 : this->getObjectName() );
364 s_idx = objectValidator_->getIntegralValue(
sname, objectType_name_);
367 object = objectArray_[
s_idx-1]->create();
369 (std::string(
"Error! ObjectBuilder attempted to create an object of type ")
370 + validObjectNames_[
s_idx] +
" and it came back as a null RCP!").
c_str()
376 pl = parameterList();
377 pl->setParameters(this->getValidParameters()->sublist(
sname));
382 paramList_->validateParameters(*this->getValidParameters());
384 pl = sublist(paramList_,
sname);
387 object->setParameterList(
pl);
393template<
class ObjectType>
400 validParamList_ = null;
404template<
class ObjectType>
411 validParamList_ = null;
415template<
class ObjectType>
419 object_name_ =
"Object";
420 objectType_name_ =
"Object Type";
422 defaultObject_name_ =
"None";
423 validObjectNames_.resize(0);
424 validObjectNames_.push_back(defaultObject_name_);
Templated Parameter List class.
Generic parameterlist driven bulider class.
RCP< const ParameterList > getValidParameters() const
RCP< ObjectType > create(const std::string &objectName="") const
RCP< const ParameterList > getParameterList() const
void setObjectFactory(const RCP< const AbstractFactory< ObjectType > > &objectFactory, const std::string &objectFactoryName)
Set a new Object factory object.
void setObjectTypeName(const std::string &objectTypeName)
Set the name of the parameterlist selector, e.g. "Object Type".
RCP< ParameterList > getNonconstParameterList()
void setObjectName(const std::string &objectName)
Set the name of the object this will be a builder for, e.g. "Object".
void setDefaultObject(const std::string &defaultObject_name)
Set the name of the desired object to be created when the parameter list does not specify which objec...
std::string getObjectName() const
Get the name of the Object that will be created on the next call to this->create().
RCP< ParameterList > unsetParameterList()
void setParameterList(const RCP< ParameterList > ¶mList)
Interface for objects that can accept a ParameterList.
Smart reference counting pointer class for automatic garbage collection.
RCP(ENull null_arg=null)
Initialize RCP<T> to NULL.
RCP< T > rcp(const boost::shared_ptr< T > &sptr)
Conversion function that takes in a boost::shared_ptr object and spits out a Teuchos::RCP object.
bool is_null() const
Returns true if the underlying pointer is null.
#define TEUCHOS_TEST_FOR_EXCEPT(throw_exception_test)
This macro is designed to be a short version of TEUCHOS_TEST_FOR_EXCEPTION() that is easier to call.
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
Macro for throwing an exception with breakpointing to ease debugging.
The Teuchos namespace contains all of the classes, structs and enums used by Teuchos,...
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
Deprecated.