/*
|
* Copyright 2011-17 Fraunhofer ISE, energy & meteo Systems GmbH and other contributors
|
*
|
* 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 org.openmuc.openiec61850;
|
|
public final class ServiceError extends Exception {
|
|
public static final int NO_ERROR = 0;
|
public static final int INSTANCE_NOT_AVAILABLE = 1;
|
public static final int INSTANCE_IN_USE = 2;
|
public static final int ACCESS_VIOLATION = 3;
|
public static final int ACCESS_NOT_ALLOWED_IN_CURRENT_STATE = 4;
|
public static final int PARAMETER_VALUE_INAPPROPRIATE = 5;
|
public static final int PARAMETER_VALUE_INCONSISTENT = 6;
|
public static final int CLASS_NOT_SUPPORTED = 7;
|
public static final int INSTANCE_LOCKED_BY_OTHER_CLIENT = 8;
|
public static final int CONTROL_MUST_BE_SELECTED = 9;
|
public static final int TYPE_CONFLICT = 10;
|
public static final int FAILED_DUE_TO_COMMUNICATIONS_CONSTRAINT = 11;
|
public static final int FAILED_DUE_TO_SERVER_CONSTRAINT = 12;
|
public static final int APPLICATION_UNREACHABLE = 13;
|
public static final int CONNECTION_LOST = 14;
|
public static final int MEMORY_UNAVAILABLE = 15;
|
public static final int PROCESSOR_RESOURCE_UNAVAILABLE = 16;
|
public static final int FATAL = 20;
|
// added to handle data access errors mentioned in iec61850-8-1
|
// public static final int DATA_ACCESS_ERROR = 21;
|
// added to report timeouts
|
public static final int TIMEOUT = 22;
|
public static final int UNKNOWN = 23;
|
|
private static final long serialVersionUID = 4290107163231828564L;
|
|
private static String getErrorName(int code) {
|
switch (code) {
|
case NO_ERROR:
|
return "NO_ERROR";
|
case INSTANCE_NOT_AVAILABLE:
|
return "INSTANCE_NOT_AVAILABLE";
|
case INSTANCE_IN_USE:
|
return "INSTANCE_IN_USE";
|
case ACCESS_VIOLATION:
|
return "ACCESS_VIOLATION";
|
case ACCESS_NOT_ALLOWED_IN_CURRENT_STATE:
|
return "ACCESS_NOT_ALLOWED_IN_CURRENT_STATE";
|
case PARAMETER_VALUE_INAPPROPRIATE:
|
return "PARAMETER_VALUE_INAPPROPRIATE";
|
case PARAMETER_VALUE_INCONSISTENT:
|
return "PARAMETER_VALUE_INCONSISTENT";
|
case CLASS_NOT_SUPPORTED:
|
return "CLASS_NOT_SUPPORTED";
|
case INSTANCE_LOCKED_BY_OTHER_CLIENT:
|
return "INSTANCE_LOCKED_BY_OTHER_CLIENT";
|
case CONTROL_MUST_BE_SELECTED:
|
return "CONTROL_MUST_BE_SELECTED";
|
case TYPE_CONFLICT:
|
return "TYPE_CONFLICT";
|
case FAILED_DUE_TO_COMMUNICATIONS_CONSTRAINT:
|
return "FAILED_DUE_TO_COMMUNICATIONS_CONSTRAINT";
|
case FAILED_DUE_TO_SERVER_CONSTRAINT:
|
return "FAILED_DUE_TO_SERVER_CONSTRAINT";
|
case APPLICATION_UNREACHABLE:
|
return "APPLICATION_UNREACHABLE";
|
case CONNECTION_LOST:
|
return "CONNECTION_LOST";
|
case MEMORY_UNAVAILABLE:
|
return "MEMORY_UNAVAILABLE";
|
case PROCESSOR_RESOURCE_UNAVAILABLE:
|
return "PROCESSOR_RESOURCE_UNAVAILABLE";
|
case FATAL:
|
return "FATAL";
|
case TIMEOUT:
|
return "TIMEOUT_ERROR";
|
case UNKNOWN:
|
return "UNKNOWN";
|
default:
|
return "Unknown ServiceError code";
|
}
|
}
|
|
private final int errorCode;
|
|
public ServiceError(int errorCode) {
|
super("Error code=" + errorCode);
|
this.errorCode = errorCode;
|
}
|
|
public ServiceError(int errorCode, String s) {
|
super(s);
|
this.errorCode = errorCode;
|
}
|
|
public ServiceError(int errorCode, Throwable cause) {
|
super(cause);
|
this.errorCode = errorCode;
|
}
|
|
public ServiceError(int errorCode, String s, Throwable cause) {
|
super(s, cause);
|
this.errorCode = errorCode;
|
}
|
|
public int getErrorCode() {
|
return errorCode;
|
}
|
|
@Override
|
public String toString() {
|
String message = getLocalizedMessage();
|
String result = getClass().getName() + ": " + getErrorName(errorCode) + "(" + errorCode + ")";
|
if (message != null) {
|
result += ": " + message;
|
}
|
return result;
|
}
|
}
|