void StringToIntegralValidatorXMLConverter<IntegralType>::convertValidator( const RCP<const ParameterEntryValidator> validator, XMLObject& xmlObj, const ValidatortoIDMap& /*validatorIDsMap*/) const { RCP<const StringToIntegralParameterEntryValidator<IntegralType> > castedValidator = rcp_dynamic_cast< const StringToIntegralParameterEntryValidator<IntegralType> >( validator, true); RCP<const Array<std::string> > stringValues = castedValidator->validStringValues(); RCP<const Array<std::string> > stringDocValues = castedValidator->getStringDocs(); bool hasStringDocs = !(stringDocValues.is_null()) && (stringDocValues->size() != 0); for (int i =0; i<stringValues->size(); ++i) { XMLObject stringTag(getStringTagName()); stringTag.addAttribute(getStringValueAttributeName(), (*stringValues)[i]); stringTag.addAttribute(getIntegralValueAttributeName(), castedValidator->getIntegralValue((*stringValues)[i])); if (hasStringDocs) { stringTag.addAttribute( getStringDocAttributeName(), (*stringDocValues)[i]); } xmlObj.addChild(stringTag); } xmlObj.addAttribute(getDefaultParameterAttributeName(), castedValidator->getDefaultParameterName()); xmlObj.addAttribute(getIntegralValueAttributeName(), TypeNameTraits<IntegralType>::name()); }
RCP<ParameterEntryValidator> StringToIntegralValidatorXMLConverter<IntegralType>::convertXML( const XMLObject& xmlObj, const IDtoValidatorMap& /*validatorIDsMap*/) const { Array<std::string> strings; Array<std::string> stringDocs; Array<IntegralType> integralValues; for (int i=0; i<xmlObj.numChildren(); ++i) { XMLObject currentChild = xmlObj.getChild(i); TEUCHOS_TEST_FOR_EXCEPTION(currentChild.getTag() != getStringTagName(), BadTagException, "Error converting xmlObject to " "StringToIntegralParameterEntryValidator." << std::endl << "Unrecognized tag: " << currentChild.getTag()); strings.append(currentChild.getRequired(getStringValueAttributeName())); if (currentChild.hasAttribute(getIntegralValueAttributeName())) { integralValues.append( currentChild.getRequired<IntegralType>( getIntegralValueAttributeName())); } if (currentChild.hasAttribute(getStringDocAttributeName())) { stringDocs.append( currentChild.getRequired<std::string>(getStringDocAttributeName())); } } std::string defaultParameterName = xmlObj.getRequired(getDefaultParameterAttributeName()); // The "caseSensitive" attribute is not required. It is true by default. const bool caseSensitive = xmlObj.getWithDefault<bool> (getCaseSensitiveAttributeName (), true); typedef StringToIntegralParameterEntryValidator<IntegralType> ret_type; if (stringDocs.size() != 0 && integralValues.size() != 0) { return rcp (new ret_type (strings, stringDocs, integralValues (), defaultParameterName, caseSensitive)); } else if (integralValues.size() != 0) { return rcp (new ret_type (strings, integralValues(), defaultParameterName, caseSensitive)); } else { return rcp (new ret_type (strings, defaultParameterName, caseSensitive)); } }