00001
00002
00003 #ifndef __ARC_DATASTATUS_H__
00004 #define __ARC_DATASTATUS_H__
00005
00006 #include <iostream>
00007 #include <string>
00008
00009 #include <arc/StringConv.h>
00010
00011 namespace Arc {
00012
00013 #define DataStatusRetryableBase (100)
00014
00016
00020 class DataStatus {
00021
00022 public:
00023
00025 enum DataStatusType {
00026
00028 Success = 0,
00029
00031 ReadAcquireError = 1,
00032 ReadAcquireErrorRetryable = DataStatusRetryableBase+ReadAcquireError,
00033
00035 WriteAcquireError = 2,
00036 WriteAcquireErrorRetryable = DataStatusRetryableBase+WriteAcquireError,
00037
00039 ReadResolveError = 3,
00040 ReadResolveErrorRetryable = DataStatusRetryableBase+ReadResolveError,
00041
00043 WriteResolveError = 4,
00044 WriteResolveErrorRetryable = DataStatusRetryableBase+WriteResolveError,
00045
00047 ReadStartError = 5,
00048 ReadStartErrorRetryable = DataStatusRetryableBase+ReadStartError,
00049
00051 WriteStartError = 6,
00052 WriteStartErrorRetryable = DataStatusRetryableBase+WriteStartError,
00053
00055 ReadError = 7,
00056 ReadErrorRetryable = DataStatusRetryableBase+ReadError,
00057
00059 WriteError = 8,
00060 WriteErrorRetryable = DataStatusRetryableBase+WriteError,
00061
00063 TransferError = 9,
00064 TransferErrorRetryable = DataStatusRetryableBase+TransferError,
00065
00067 ReadStopError = 10,
00068 ReadStopErrorRetryable = DataStatusRetryableBase+ReadStopError,
00069
00071 WriteStopError = 11,
00072 WriteStopErrorRetryable = DataStatusRetryableBase+WriteStopError,
00073
00075 PreRegisterError = 12,
00076 PreRegisterErrorRetryable = DataStatusRetryableBase+PreRegisterError,
00077
00079 PostRegisterError = 13,
00080 PostRegisterErrorRetryable = DataStatusRetryableBase+PostRegisterError,
00081
00083 UnregisterError = 14,
00084 UnregisterErrorRetryable = DataStatusRetryableBase+UnregisterError,
00085
00087 CacheError = 15,
00088 CacheErrorRetryable = DataStatusRetryableBase+CacheError,
00089
00091 CredentialsExpiredError = 16,
00092
00094 DeleteError = 17,
00095 DeleteErrorRetryable = DataStatusRetryableBase+DeleteError,
00096
00098 NoLocationError = 18,
00099
00101 LocationAlreadyExistsError = 19,
00102
00104 NotSupportedForDirectDataPointsError = 20,
00105
00107 UnimplementedError = 21,
00108
00110 IsReadingError = 22,
00111
00113 IsWritingError = 23,
00114
00116 CheckError = 24,
00117 CheckErrorRetryable = DataStatusRetryableBase+CheckError,
00118
00120 ListError = 25,
00121 ListNonDirError = 26,
00122 ListErrorRetryable = DataStatusRetryableBase+ListError,
00123
00125 StatError = 27,
00126 StatNotPresentError = 28,
00127 StatErrorRetryable = DataStatusRetryableBase+StatError,
00128
00130 NotInitializedError = 29,
00131
00133 SystemError = 30,
00134
00136 StageError = 31,
00137 StageErrorRetryable = DataStatusRetryableBase+StageError,
00138
00140 InconsistentMetadataError = 32,
00141
00143 ReadPrepareError = 32,
00144 ReadPrepareErrorRetryable = DataStatusRetryableBase+ReadPrepareError,
00145
00147 ReadPrepareWait = 33,
00148
00150 WritePrepareError = 34,
00151 WritePrepareErrorRetryable = DataStatusRetryableBase+WritePrepareError,
00152
00154 WritePrepareWait = 35,
00155
00157 ReadFinishError = 36,
00158 ReadFinishErrorRetryable = DataStatusRetryableBase+ReadFinishError,
00159
00161 WriteFinishError = 37,
00162 WriteFinishErrorRetryable = DataStatusRetryableBase+WriteFinishError,
00163
00165 CreateDirectoryError = 38,
00166 CreateDirectoryErrorRetryable = DataStatusRetryableBase+CreateDirectoryError,
00167
00169 SuccessCached = 39,
00170
00172 GenericError = 40,
00173 GenericErrorRetryable = DataStatusRetryableBase+GenericError,
00174
00176 UnknownError = 41
00177 };
00178
00179 DataStatus(const DataStatusType& status, std::string desc="")
00180 : status(status), desc(desc) {}
00181 DataStatus()
00182 : status(Success), desc("") {}
00183 ~DataStatus() {}
00184
00185 bool operator==(const DataStatusType& s) {
00186 return status == s;
00187 }
00188 bool operator==(const DataStatus& s) {
00189 return status == s.status;
00190 }
00191
00192 bool operator!=(const DataStatusType& s) {
00193 return status != s;
00194 }
00195 bool operator!=(const DataStatus& s) {
00196 return status != s.status;
00197 }
00198
00199 DataStatus operator=(const DataStatusType& s) {
00200 status = s;
00201 return *this;
00202 }
00203
00204 bool operator!() const {
00205 return (status != Success) && (status != SuccessCached);
00206 }
00207 operator bool() const {
00208 return (status == Success) || (status == SuccessCached);
00209 }
00210
00212 bool Passed() const {
00213 return ((status == Success) || (status == NotSupportedForDirectDataPointsError) ||
00214 (status == ReadPrepareWait) || (status == WritePrepareWait) ||
00215 (status == SuccessCached));
00216 }
00217
00219 bool Retryable() const {
00220 return status > 100;
00221 }
00222
00224 void SetDesc(const std::string& d) {
00225 desc = trim(d);
00226 }
00227
00229 std::string GetDesc() const {
00230 return desc;
00231 }
00232
00233 operator std::string(void) const;
00234
00235 private:
00236
00238 DataStatusType status;
00240 std::string desc;
00241
00242 };
00243
00244 inline std::ostream& operator<<(std::ostream& o, const DataStatus& d) {
00245 return (o << ((std::string)d));
00246 }
00247 }
00248
00249
00250 #endif // __ARC_DATASTATUS_H__