|
Teuchos - Trilinos Tools Package
Version of the Day
|
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 00043 00044 #include "Teuchos_StandardDependencies.hpp" 00045 #include "Teuchos_StandardParameterEntryValidators.hpp" 00046 #ifdef TEUCHOS_HAVE_QT 00047 #include <QDir> 00048 #endif 00049 00050 00051 namespace Teuchos{ 00052 00053 00054 VisualDependency::VisualDependency( 00055 RCP<const ParameterEntry> dependee, 00056 RCP<ParameterEntry> dependent, 00057 bool showIf): 00058 Dependency(dependee, dependent), 00059 dependentVisible_(false), 00060 showIf_(showIf) 00061 {} 00062 00063 VisualDependency::VisualDependency( 00064 RCP<const ParameterEntry> dependee, 00065 ParameterEntryList dependents, 00066 bool showIf): 00067 Dependency(dependee, dependents), 00068 dependentVisible_(false), 00069 showIf_(showIf) 00070 {} 00071 00072 VisualDependency::VisualDependency( 00073 ConstParameterEntryList dependees, 00074 RCP<ParameterEntry> dependent, 00075 bool showIf): 00076 Dependency(dependees, dependent), 00077 dependentVisible_(false), 00078 showIf_(showIf) 00079 {} 00080 00081 VisualDependency::VisualDependency( 00082 ConstParameterEntryList dependees, 00083 ParameterEntryList dependents, 00084 bool showIf): 00085 Dependency(dependees, dependents), 00086 dependentVisible_(false), 00087 showIf_(showIf) 00088 {} 00089 00090 bool VisualDependency::isDependentVisible() const{ 00091 return dependentVisible_; 00092 } 00093 00094 bool VisualDependency::getShowIf() const{ 00095 return showIf_; 00096 } 00097 00098 void VisualDependency::evaluate(){ 00099 if((getDependeeState() && showIf_) || (!getDependeeState() && !showIf_)){ 00100 dependentVisible_ = true; 00101 } 00102 else{ 00103 dependentVisible_ = false; 00104 } 00105 } 00106 00107 ValidatorDependency::ValidatorDependency( 00108 RCP<const ParameterEntry> dependee, 00109 RCP<ParameterEntry> dependent): 00110 Dependency(dependee, dependent){} 00111 00112 ValidatorDependency::ValidatorDependency( 00113 RCP<const ParameterEntry> dependee, 00114 ParameterEntryList dependents): 00115 Dependency(dependee, dependents){} 00116 00117 StringVisualDependency::StringVisualDependency( 00118 RCP<const ParameterEntry> dependee, 00119 RCP<ParameterEntry> dependent, 00120 std::string value, 00121 bool showIf): 00122 VisualDependency(dependee, dependent, showIf), 00123 values_(ValueList(1,value)) 00124 { 00125 validateDep(); 00126 } 00127 00128 StringVisualDependency::StringVisualDependency( 00129 RCP<const ParameterEntry> dependee, 00130 RCP<ParameterEntry> dependent, 00131 const ValueList& values, 00132 bool showIf): 00133 VisualDependency(dependee, dependent, showIf), 00134 values_(values) 00135 { 00136 validateDep(); 00137 } 00138 00139 StringVisualDependency::StringVisualDependency( 00140 RCP<const ParameterEntry> dependee, 00141 Dependency::ParameterEntryList dependents, 00142 const std::string& value, 00143 bool showIf): 00144 VisualDependency(dependee, dependents, showIf), 00145 values_(ValueList(1,value)) 00146 { 00147 validateDep(); 00148 } 00149 00150 StringVisualDependency::StringVisualDependency( 00151 RCP<const ParameterEntry> dependee, 00152 Dependency::ParameterEntryList dependents, 00153 const ValueList& values, 00154 bool showIf): 00155 VisualDependency(dependee, dependents, showIf), 00156 values_(values) 00157 { 00158 validateDep(); 00159 } 00160 00161 const StringVisualDependency::ValueList& 00162 StringVisualDependency::getValues() const 00163 { 00164 return values_; 00165 } 00166 00167 bool StringVisualDependency::getDependeeState() const{ 00168 return find(values_.begin(), values_.end(), 00169 getFirstDependeeValue<std::string>()) != values_.end(); 00170 } 00171 00172 std::string StringVisualDependency::getTypeAttributeValue() const{ 00173 return "StringVisualDependency"; 00174 } 00175 00176 void StringVisualDependency::validateDep() const{ 00177 TEUCHOS_TEST_FOR_EXCEPTION(!getFirstDependee()->isType<std::string>(), 00178 InvalidDependencyException, 00179 "Ay no! The dependee of a " 00180 "String Visual Dependency must be of type " 00181 << TypeNameTraits<std::string>::name() << std::endl << 00182 "Type encountered: " << getFirstDependee()->getAny().typeName() << 00183 std::endl << std::endl); 00184 } 00185 00186 RCP<StringVisualDependency> 00187 DummyObjectGetter<StringVisualDependency>::getDummyObject() 00188 { 00189 std::string blahString = "blah"; 00190 return rcp(new StringVisualDependency( 00191 rcp(new ParameterEntry(blahString)), 00192 DummyObjectGetter<ParameterEntry>::getDummyObject(), 00193 "i'm a dummy")); 00194 } 00195 00196 BoolVisualDependency::BoolVisualDependency( 00197 RCP<const ParameterEntry> dependee, 00198 RCP<ParameterEntry> dependent, 00199 bool showIf): 00200 VisualDependency(dependee, dependent, showIf) 00201 { 00202 validateDep(); 00203 } 00204 00205 BoolVisualDependency::BoolVisualDependency( 00206 RCP<const ParameterEntry> dependee, 00207 Dependency::ParameterEntryList dependents, 00208 bool showIf): 00209 VisualDependency(dependee, dependents, showIf) 00210 { 00211 validateDep(); 00212 } 00213 00214 bool BoolVisualDependency::getDependeeState() const{ 00215 return getFirstDependeeValue<bool>(); 00216 } 00217 00218 std::string BoolVisualDependency::getTypeAttributeValue() const{ 00219 return "BoolVisualDependency"; 00220 } 00221 00222 void BoolVisualDependency::validateDep() const{ 00223 TEUCHOS_TEST_FOR_EXCEPTION(!getFirstDependee()->isType<bool>(), 00224 InvalidDependencyException, 00225 "Ay no! The dependee of a " 00226 "Bool Visual Dependency must be of type " << 00227 TypeNameTraits<bool>::name() << std::endl << 00228 "Encountered type: " << getFirstDependee()->getAny().typeName() << 00229 std::endl << std::endl); 00230 } 00231 00232 RCP<BoolVisualDependency> 00233 DummyObjectGetter<BoolVisualDependency>::getDummyObject() 00234 { 00235 return rcp(new BoolVisualDependency( 00236 rcp(new ParameterEntry(true)), 00237 DummyObjectGetter<ParameterEntry>::getDummyObject())); 00238 } 00239 00240 ConditionVisualDependency::ConditionVisualDependency( 00241 RCP<const Condition> condition, 00242 RCP<ParameterEntry> dependent, 00243 bool showIf): 00244 VisualDependency(condition->getAllParameters(), dependent, showIf), 00245 condition_(condition) 00246 { 00247 validateDep(); 00248 } 00249 00250 ConditionVisualDependency::ConditionVisualDependency( 00251 RCP<const Condition> condition, 00252 Dependency::ParameterEntryList dependents, 00253 bool showIf): 00254 VisualDependency(condition->getAllParameters(), dependents, showIf), 00255 condition_(condition) 00256 { 00257 validateDep(); 00258 } 00259 00260 RCP<const Condition> ConditionVisualDependency::getCondition() const{ 00261 return condition_; 00262 } 00263 00264 bool ConditionVisualDependency::getDependeeState() const{ 00265 return condition_->isConditionTrue(); 00266 } 00267 00268 std::string ConditionVisualDependency::getTypeAttributeValue() const{ 00269 return "ConditionVisualDependency"; 00270 } 00271 00272 RCP<ConditionVisualDependency> 00273 DummyObjectGetter<ConditionVisualDependency>::getDummyObject() 00274 { 00275 return rcp(new ConditionVisualDependency( 00276 DummyObjectGetter<NotCondition>::getDummyObject(), 00277 DummyObjectGetter<ParameterEntry>::getDummyObject())); 00278 } 00279 00280 StringValidatorDependency::StringValidatorDependency( 00281 RCP<const ParameterEntry> dependee, 00282 RCP<ParameterEntry> dependent, 00283 ValueToValidatorMap valuesAndValidators, 00284 RCP<ParameterEntryValidator> defaultValidator): 00285 ValidatorDependency(dependee, dependent), 00286 valuesAndValidators_(valuesAndValidators), 00287 defaultValidator_(defaultValidator) 00288 { 00289 validateDep(); 00290 } 00291 00292 StringValidatorDependency::StringValidatorDependency( 00293 RCP<const ParameterEntry> dependee, 00294 Dependency::ParameterEntryList dependents, 00295 ValueToValidatorMap valuesAndValidators, 00296 RCP<ParameterEntryValidator> defaultValidator): 00297 ValidatorDependency(dependee, dependents), 00298 valuesAndValidators_(valuesAndValidators), 00299 defaultValidator_(defaultValidator) 00300 { 00301 validateDep(); 00302 } 00303 00304 const StringValidatorDependency::ValueToValidatorMap& 00305 StringValidatorDependency::getValuesAndValidators() const 00306 { 00307 return valuesAndValidators_; 00308 } 00309 00310 RCP<const ParameterEntryValidator> 00311 StringValidatorDependency::getDefaultValidator() const 00312 { 00313 return defaultValidator_; 00314 } 00315 00316 void StringValidatorDependency::evaluate(){ 00317 std::string currentDependeeValue = getFirstDependeeValue<std::string>(); 00318 for( 00319 ParameterEntryList::iterator it = getDependents().begin(); 00320 it != getDependents().end(); 00321 ++it) 00322 { 00323 if( 00324 valuesAndValidators_.find(currentDependeeValue) 00325 == 00326 valuesAndValidators_.end()) 00327 { 00328 (*it)->setValidator(defaultValidator_); 00329 } 00330 else{ 00331 (*it)->setValidator(valuesAndValidators_[currentDependeeValue]); 00332 } 00333 } 00334 } 00335 00336 std::string StringValidatorDependency::getTypeAttributeValue() const{ 00337 return "StringValidatorDependency"; 00338 } 00339 00340 void StringValidatorDependency::validateDep() const{ 00341 TEUCHOS_TEST_FOR_EXCEPTION(!getFirstDependee()->isType<std::string>(), 00342 InvalidDependencyException, 00343 "Ay no! The dependee of a " 00344 "String Validator Dependency must be of type " << 00345 TypeNameTraits<std::string>::name() << std::endl << 00346 "Type Encountered: " << getFirstDependee()->getAny().typeName() << 00347 std::endl << std::endl); 00348 00349 TEUCHOS_TEST_FOR_EXCEPTION( 00350 valuesAndValidators_.size() < 1, 00351 InvalidDependencyException, 00352 "The valuesAndValidatord map for a string validator dependency must " 00353 "have at least one entry!" << std::endl << std::endl); 00354 ValueToValidatorMap::const_iterator it = valuesAndValidators_.begin(); 00355 RCP<const ParameterEntryValidator> firstVali = (it->second); 00356 ++it; 00357 for(; it != valuesAndValidators_.end(); ++it){ 00358 TEUCHOS_TEST_FOR_EXCEPTION( typeid(*firstVali) != typeid(*(it->second)), 00359 InvalidDependencyException, 00360 "Ay no! All of the validators in a StringValidatorDependency " 00361 "must have the same type."); 00362 } 00363 } 00364 00365 00366 RCP<StringValidatorDependency > 00367 DummyObjectGetter<StringValidatorDependency>::getDummyObject() 00368 { 00369 std::string blahString = "blah"; 00370 StringValidatorDependency::ValueToValidatorMap dummyMap; 00371 dummyMap.insert(StringValidatorDependency::ValueToValidatorPair("blah", 00372 DummyObjectGetter<FileNameValidator>::getDummyObject())); 00373 return rcp(new StringValidatorDependency( 00374 rcp(new ParameterEntry(blahString)), 00375 DummyObjectGetter<ParameterEntry>::getDummyObject(), 00376 dummyMap)); 00377 } 00378 00379 BoolValidatorDependency::BoolValidatorDependency( 00380 RCP<const ParameterEntry> dependee, 00381 RCP<ParameterEntry> dependent, 00382 RCP<const ParameterEntryValidator> trueValidator, 00383 RCP<const ParameterEntryValidator> falseValidator): 00384 ValidatorDependency(dependee, dependent), 00385 trueValidator_(trueValidator), 00386 falseValidator_(falseValidator) 00387 { 00388 validateDep(); 00389 } 00390 00391 BoolValidatorDependency::BoolValidatorDependency( 00392 RCP<const ParameterEntry> dependee, 00393 Dependency::ParameterEntryList dependents, 00394 RCP<const ParameterEntryValidator> trueValidator, 00395 RCP<const ParameterEntryValidator> falseValidator): 00396 ValidatorDependency(dependee, dependents), 00397 trueValidator_(trueValidator), 00398 falseValidator_(falseValidator) 00399 { 00400 validateDep(); 00401 } 00402 00403 void BoolValidatorDependency::evaluate(){ 00404 bool dependeeValue = getFirstDependeeValue<bool>(); 00405 for( 00406 ParameterEntryList::iterator it = getDependents().begin(); 00407 it != getDependents().end(); 00408 ++it) 00409 { 00410 dependeeValue ? 00411 (*it)->setValidator(trueValidator_) 00412 : 00413 (*it)->setValidator(falseValidator_); 00414 } 00415 } 00416 00417 RCP<const ParameterEntryValidator> 00418 BoolValidatorDependency::getTrueValidator() const 00419 { 00420 return trueValidator_; 00421 } 00422 00423 RCP<const ParameterEntryValidator> 00424 BoolValidatorDependency::getFalseValidator() const 00425 { 00426 return falseValidator_; 00427 } 00428 00429 std::string BoolValidatorDependency::getTypeAttributeValue() const{ 00430 return "BoolValidatorDependency"; 00431 } 00432 00433 00434 void BoolValidatorDependency::validateDep() const{ 00435 00436 TEUCHOS_TEST_FOR_EXCEPTION(!getFirstDependee()->isType<bool>(), 00437 InvalidDependencyException, 00438 "Ay no! The dependee of a " 00439 "Bool Validator Dependency must be of type " << 00440 TypeNameTraits<bool>::name() << std::endl << 00441 "Encountered type: " << getFirstDependee()->getAny().typeName() << 00442 std::endl << std::endl); 00443 00444 if(!falseValidator_.is_null() && !trueValidator_.is_null()){ 00445 TEUCHOS_TEST_FOR_EXCEPTION(typeid(*falseValidator_) != typeid(*trueValidator_), 00446 InvalidDependencyException, 00447 "Ay no! The true and false validators of a Bool Validator Dependency " 00448 "must be the same type! " <<std::endl << std::endl); 00449 } 00450 00451 } 00452 00453 RCP<BoolValidatorDependency> 00454 DummyObjectGetter<BoolValidatorDependency>::getDummyObject() 00455 { 00456 return rcp(new BoolValidatorDependency( 00457 rcp(new ParameterEntry(true)), 00458 DummyObjectGetter<ParameterEntry>::getDummyObject(), 00459 null, null)); 00460 } 00461 00462 } 00463
1.7.6.1