/*
* Copyright 2014, The Sporting Exchange Limited
*
* Licensed 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.
*/
package com.betfair.cougar.core.api.exception;
import com.betfair.cougar.api.ResponseCode;
import com.betfair.cougar.api.security.CredentialFaultCode;
// todo: would love to rename this to FaultCode (and FaultCode to FaultOrigin), but that would break hessian enum serialisation.
// we really need to takeover hessian enum serialisation to allow us to change internal structures
// in fact we really need to stop entrusting our internals to hessian
public enum ServerFaultCode {
StartupError(ResponseCode.InternalError, 1),
FrameworkError(ResponseCode.InternalError, 2),
InvocationResultIncorrect(ResponseCode.InternalError, 3),
ServiceCheckedException(null, 4), // Response code defined by the checked exception
ServiceRuntimeException(ResponseCode.InternalError, 5),
/**
* @deprecated Replaced by either {@link ServerFaultCode.ClientDeserialisationFailure} or
* {@link ServerFaultCode.ServerDeserialisationFailure}
*/
SOAPDeserialisationFailure(ResponseCode.BadRequest, 6), // not used - kept for compatibility with old client/servers
/**
* @deprecated Replaced by either {@link ServerFaultCode.ClientDeserialisationFailure} or
* {@link ServerFaultCode.ServerDeserialisationFailure}
*/
XMLDeserialisationFailure(ResponseCode.BadRequest, 7), // not used - kept for compatibility with old client/servers
/**
* @deprecated Replaced by either {@link ServerFaultCode.ClientDeserialisationFailure} or
* {@link ServerFaultCode.ServerDeserialisationFailure}
*/
JSONDeserialisationFailure(ResponseCode.BadRequest, 8), // not used - kept for compatibility with old client/servers
/**
* @deprecated Replaced by either {@link ServerFaultCode.ClientDeserialisationFailure} or
* {@link ServerFaultCode.ServerDeserialisationFailure}
*/
ClassConversionFailure(ResponseCode.BadRequest, 9), // not used - kept for compatibility with old client/servers
InvalidInputMediaType(ResponseCode.UnsupportedMediaType, 10),
ContentTypeNotValid(ResponseCode.UnsupportedMediaType, 11),
MediaTypeParseFailure(ResponseCode.UnsupportedMediaType, 12),
AcceptTypeNotValid(ResponseCode.MediaTypeNotAcceptable, 13),
ResponseContentTypeNotValid(ResponseCode.InternalError, 14),
SecurityException(ResponseCode.Forbidden, 15),
MandatoryNotDefined(ResponseCode.BadRequest, 18),
Timeout(ResponseCode.Timeout,19),
/**
* @deprecated Replaced by either {@link ServerFaultCode.ClientDeserialisationFailure} or
* {@link ServerFaultCode.ServerDeserialisationFailure}
*/
BinDeserialisationFailure(ResponseCode.BadRequest, 20), // not used - kept for compatibility with old client/servers
NoSuchOperation(ResponseCode.NotFound, 21),
SubscriptionAlreadyActiveForEvent(ResponseCode.InternalError, 22),
NoSuchService(ResponseCode.NotFound, 23),
/**
* @deprecated Replaced by either {@link ServerFaultCode.ClientDeserialisationFailure} or
* {@link ServerFaultCode.ServerDeserialisationFailure}
*/
RescriptDeserialisationFailure(ResponseCode.BadRequest, 24), // not used - kept for compatibility with old client/servers
JMSTransportCommunicationFailure(ResponseCode.InternalError, 25),
RemoteCougarCommunicationFailure(ResponseCode.ServiceUnavailable, 26),
OutputChannelClosedCantWrite(ResponseCode.CantWriteToSocket, 27),
/**
* @deprecated Replaced by either {@link ServerFaultCode.ClientSerialisationFailure} or
* {@link ServerFaultCode.ServerSerialisationFailure}
*/
XMLSerialisationFailure(ResponseCode.InternalError, 28), // not used - kept for compatibility with old client/servers
/**
* @deprecated Replaced by either {@link ServerFaultCode.ClientSerialisationFailure} or
* {@link ServerFaultCode.ServerSerialisationFailure}
*/
JSONSerialisationFailure(ResponseCode.InternalError, 29), // not used - kept for compatibility with old client/servers
/**
* @deprecated Replaced by either {@link ServerFaultCode.ClientSerialisationFailure} or
* {@link ServerFaultCode.ServerSerialisationFailure}
*/
SOAPSerialisationFailure(ResponseCode.InternalError, 30), // not used - kept for compatibility with old client/servers
NoRequestsFound(ResponseCode.BadRequest, 31),
UnidentifiedCaller(ResponseCode.BadRequest, 33, CredentialFaultCode.UnidentifiedCaller),
UnknownCaller(ResponseCode.BadRequest, 34, CredentialFaultCode.UnknownCaller),
UnrecognisedCredentials(ResponseCode.BadRequest, 35, CredentialFaultCode.UnrecognisedCredentials),
InvalidCredentials(ResponseCode.BadRequest, 36, CredentialFaultCode.InvalidCredentials),
SubscriptionRequired(ResponseCode.Forbidden, 37, CredentialFaultCode.SubscriptionRequired),
OperationForbidden(ResponseCode.Forbidden, 38, CredentialFaultCode.OperationForbidden),
NoLocationSupplied(ResponseCode.BadRequest, 39, CredentialFaultCode.NoLocationSupplied),
BannedLocation(ResponseCode.Forbidden, 40, CredentialFaultCode.BannedLocation),
ClientSerialisationFailure(ResponseCode.BadRequest, 41),
ClientDeserialisationFailure(ResponseCode.BadResponse, 42),
ServerSerialisationFailure(ResponseCode.BadResponse, 43),
ServerDeserialisationFailure(ResponseCode.BadRequest, 44);
private final ResponseCode errorCode;
private final String errorString;
private final String toString;
private final CredentialFaultCode cfc;
public static final String COUGAR_EXCEPTION_PREFIX="DSC";
private ServerFaultCode(ResponseCode errorCode, int detailCode) {
this(errorCode, detailCode, null);
}
private ServerFaultCode(ResponseCode errorCode, int detailCode, CredentialFaultCode cfc) {
this.errorCode = errorCode;
errorString = COUGAR_EXCEPTION_PREFIX+"-"+String.format("%04d", detailCode);
toString = name() + "(" + errorString + ")";
this.cfc = cfc;
}
public String getDetail() {
return errorString;
}
public ResponseCode getResponseCode() {
return errorCode;
}
public CredentialFaultCode getCredentialFaultCode() {
return cfc;
}
public static ServerFaultCode getByDetailCode(String prefix) {
for (ServerFaultCode sfc : ServerFaultCode.values()) {
if (sfc.getDetail().equals(prefix)) {
return sfc;
}
}
return null;
}
public static ServerFaultCode getByCredentialFaultCode(CredentialFaultCode credentialFaultCode) {
for (ServerFaultCode sfc : ServerFaultCode.values()) {
CredentialFaultCode cfc = sfc.getCredentialFaultCode();
if (cfc != null && cfc.equals(credentialFaultCode)) {
return sfc;
}
}
return null;
}
@Override
public String toString() {
return toString;
}
}