/* * 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; } }