Line data Source code
1 : /******************************************************************************* 2 : * ALMA - Atacama Large Millimiter Array 3 : * (c) Instituto de Estructura de la Materia, 2009 4 : * 5 : * This library is free software; you can redistribute it and/or 6 : * modify it under the terms of the GNU Lesser General Public 7 : * License as published by the Free Software Foundation; either 8 : * version 2.1 of the License, or (at your option) any later version. 9 : * 10 : * This library is distributed in the hope that it will be useful, 11 : * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 : * Lesser General Public License for more details. 14 : * 15 : * You should have received a copy of the GNU Lesser General Public 16 : * License along with this library; if not, write to the Free Software 17 : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 18 : * 19 : * "@(#) $Id: ATMError.cpp Exp $" 20 : * 21 : * who when what 22 : * -------- -------- ---------------------------------------------- 23 : * pardo 24/03/09 created 24 : */ 25 : 26 : #include "ATMError.h" 27 : 28 : #include <stdio.h> 29 : #include <iostream> 30 : 31 : 32 : 33 : ATM_NAMESPACE_BEGIN 34 : 35 : ErrorLevel Error::acceptableErrorLevel = SERIOUS; // default level to stop a process 36 : ErrorLevel Error::errlev_ = NOERROR; 37 : std::string Error::errorMessage_ = ""; 38 : 39 0 : Error::Error() 40 : { 41 0 : } 42 : 43 0 : Error::Error(ErrorLevel errlev) 44 : { 45 0 : acceptableErrorLevel = errlev; 46 0 : } 47 : 48 0 : Error::Error(ErrorLevel errlev, const std::string &message) 49 : { 50 0 : errlev_ = errlev; 51 0 : errorMessage_ = message; 52 0 : printMessage(message); 53 0 : if(errlev >= acceptableErrorLevel) throw Error(); 54 0 : } 55 : 56 0 : Error::Error(ErrorLevel errlev, char *fmt, ...) 57 : { 58 0 : errlev_ = errlev; 59 : char buffer[1024]; 60 : va_list args; 61 0 : va_start(args, fmt); 62 0 : vsprintf(buffer, fmt, args); 63 0 : errorMessage_ = buffer; 64 0 : printMessage(errorMessage_); 65 0 : if(errlev >= acceptableErrorLevel) 66 : { 67 0 : va_end(args); 68 0 : throw Error(); 69 : } 70 0 : } 71 : 72 0 : Error::~Error() 73 : { 74 0 : } 75 : 76 0 : void Error::notify(ErrorLevel errlev, const std::string &message) 77 : { 78 0 : errlev_ = errlev; 79 0 : errorMessage_ = message; 80 0 : printMessage(message); 81 : //if(errlev>=acceptableErrorLevel)exit(-1); 82 0 : if(errlev >= acceptableErrorLevel) throw Error(); 83 0 : } 84 : 85 0 : void Error::notify(const std::string &message) 86 : { 87 0 : errorMessage_ = message; 88 0 : std::cout << message << std::endl; 89 0 : } 90 : 91 0 : void Error::setAcceptableLevel(ErrorLevel errlev) 92 : { 93 0 : acceptableErrorLevel = errlev; 94 0 : } 95 : 96 0 : ErrorLevel Error::getLevel() 97 : { 98 0 : return errlev_; 99 : } 100 : 101 0 : std::string Error::getLevelToString() 102 : { 103 0 : if(errlev_ == MINOR) return "MINOR"; 104 0 : if(errlev_ == WARNING) return "WARNING"; 105 0 : if(errlev_ == SERIOUS) return "SERIOUS"; 106 0 : if(errlev_ == FATAL) return "FATAL"; 107 0 : return ""; 108 : } 109 : 110 0 : std::string Error::getErrorMessage() 111 : { 112 0 : std::string errorMessage = errorMessage_; 113 0 : clearMessage(); 114 0 : return errorMessage; 115 : } 116 : 117 0 : void Error::clearMessage() 118 : { 119 0 : errorMessage_ = ""; 120 0 : clearErrLev(); 121 : 122 0 : } 123 : 124 0 : void Error::clearErrLev() 125 : { 126 0 : errlev_ = NOERROR; 127 0 : } 128 : 129 0 : ErrorLevel Error::getAcceptableLevel() 130 : { 131 0 : return acceptableErrorLevel; 132 : } 133 : 134 0 : std::string Error::getAcceptableLevelToString() 135 : { 136 0 : if(acceptableErrorLevel == MINOR) return "MINOR"; 137 0 : if(acceptableErrorLevel == WARNING) return "WARNING"; 138 0 : if(acceptableErrorLevel == SERIOUS) return "SERIOUS"; 139 0 : if(acceptableErrorLevel == FATAL) return "FATAL"; 140 0 : return "NOERROR"; 141 : } 142 : 143 0 : void Error::printMessage(const std::string &message) 144 : { 145 0 : switch(errlev_) { 146 0 : case FATAL: 147 0 : std::cout << "FATAL ERROR: " + message << std::endl; 148 0 : break; 149 0 : case SERIOUS: 150 0 : std::cout << "SERIOUS ERROR: " + message << std::endl; 151 0 : break; 152 0 : case MINOR: 153 0 : std::cout << "MINOR ERROR: " + message << std::endl; 154 0 : break; 155 0 : case WARNING: 156 0 : std::cout << "WARNING ERROR: " + message << std::endl; 157 0 : break; 158 0 : default: 159 0 : std::cout << "ERROR: " + message << std::endl; 160 : } 161 0 : } 162 : 163 : ATM_NAMESPACE_END