blob: c90224cbcb71ec6a49eb01697c105cd0d00a693d [file] [log] [blame]
/**
* @file Exception.h
* Exception class declaration
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef __EXCEPTION_H__
#define __EXCEPTION_H__
#include <sstream>
#include <exception>
#include <stdexcept>
#include <errno.h>
#include <string.h>
namespace org {
namespace apache {
namespace nifi {
namespace minifi {
// ExceptionType
enum ExceptionType {
FILE_OPERATION_EXCEPTION = 0,
FLOW_EXCEPTION,
PROCESSOR_EXCEPTION,
PROCESS_SESSION_EXCEPTION,
PROCESS_SCHEDULE_EXCEPTION,
SITE2SITE_EXCEPTION,
GENERAL_EXCEPTION,
REGEX_EXCEPTION,
MAX_EXCEPTION
};
// Exception String
static const char *ExceptionStr[MAX_EXCEPTION] = { "File Operation", "Flow File Operation", "Processor Operation", "Process Session Operation", "Process Schedule Operation", "Site2Site Protocol",
"General Operation", "Regex Operation" };
// Exception Type to String
inline const char *ExceptionTypeToString(ExceptionType type) {
if (type < MAX_EXCEPTION)
return ExceptionStr[type];
else
return NULL;
}
// Exception Class
class Exception : public std::exception {
public:
// Constructor
/*!
* Create a new exception
*/
Exception(ExceptionType type, std::string errorMsg)
: _type(type),
_errorMsg(std::move(errorMsg)) {
}
// Destructor
virtual ~Exception() noexcept {
}
virtual const char * what() const noexcept {
_whatStr = ExceptionTypeToString(_type);
_whatStr += ":" + _errorMsg;
return _whatStr.c_str();
}
private:
// Exception type
ExceptionType _type;
// Exception detailed information
std::string _errorMsg;
// Hold the what result
mutable std::string _whatStr;
};
} /* namespace minifi */
} /* namespace nifi */
} /* namespace apache */
} /* namespace org */
#endif