/*******************************************************************************
* Copyright (c) 2011, 2016 Eurotech and/or its affiliates
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Eurotech
* Jens Reimann <jreimann@redhat.com> - Provide internal error message
*******************************************************************************/
package org.eclipse.kura.web.shared;
import java.util.MissingResourceException;
/**
* Superclass for GWT errors
* <p>
* The GwtKuraException class is the superclass of all GWT errors and exceptions
* in the Kura project. It extends the JDK Exception class by requesting its
* invokers to provide an error code when building its instances. The code is
* one value of KuraErrorCode enum; the code is used to document the possible
* error conditions generated by the platform as well as to identify the
* localized exception messages to be reported. Exceptions messages are stored
* in the KuraExceptionMessagesBundle Properties Bundle and they are keyed on
* the exception code.
* </p>
*
* @author mcarrer
*
*/
public class GwtKuraException extends Exception {
private static final long serialVersionUID = 1L;
protected GwtKuraErrorCode m_errorCode;
protected String[] m_arguments;
@SuppressWarnings("unused")
private GwtKuraException() {
super();
}
public GwtKuraException(String message) {
super(message);
}
@SuppressWarnings("unused")
private GwtKuraException(String message, Throwable cause) {
super(message, cause);
}
@SuppressWarnings("unused")
private GwtKuraException(Throwable t) {
super(t);
}
/**
* Builds a new GwtKuraException instance based on the supplied
* GwtKuraErrorCode, an optional Throwable cause.
*
* @param code
* @param t
* @param arguments
*/
public GwtKuraException(GwtKuraErrorCode errorCode) {
this.m_errorCode = errorCode;
}
/**
* Builds a new GwtKuraException instance based on the supplied
* GwtKuraErrorCode, an optional Throwable cause.
*
* @param code
* @param t
* @param arguments
*/
public GwtKuraException(GwtKuraErrorCode errorCode, Throwable cause) {
super(cause);
this.m_errorCode = errorCode;
}
public GwtKuraException(GwtKuraErrorCode errorCode, Throwable cause, String... arguments) {
super(cause);
this.m_errorCode = errorCode;
this.m_arguments = arguments;
}
/**
* Factory method to build an GwtKuraException with the
* GwtKuraErrorCode.INTERNAL_ERROR code providing a cause and a message.
*
* @param cause
* @param message
* @return
*/
public static GwtKuraException internalError(Throwable cause, String message) {
return new GwtKuraException(GwtKuraErrorCode.INTERNAL_ERROR, cause, message);
}
/**
* Factory method to build an GwtKuraException with the
* GwtKuraErrorCode.INTERNAL_ERROR code providing only a message.
*
* @param cause
* @param message
* @return
*/
public static GwtKuraException internalError(String message) {
return new GwtKuraException(GwtKuraErrorCode.INTERNAL_ERROR, null);
}
public GwtKuraErrorCode getCode() {
return this.m_errorCode;
}
@Override
public String getMessage() {
return getLocalizedMessage();
}
@Override
public String getLocalizedMessage() {
if (GwtKuraErrorCode.INTERNAL_ERROR.equals(this.m_errorCode) && this.m_arguments != null
&& this.m_arguments.length == 1) {
return this.m_arguments[0];
}
String msg = this.m_errorCode.toString();
try {
// ValidationMessages MSGS = GWT.create(ValidationMessages.class);
// String msgPattern = MSGS.getString(m_errorCode.name());
// if (msgPattern != null) {
// msg = format(msgPattern, (Object[]) m_arguments);
// }
} catch (MissingResourceException e) {
// ignore
}
return msg;
}
public String[] getArguments() {
return this.m_arguments;
}
@SuppressWarnings("unused")
private String format(String s, Object[] arguments) {
if (arguments == null) {
return s;
}
// A very simple implementation of format
int i = 0;
while (i < arguments.length) {
String delimiter = "{" + i + "}";
while (s.contains(delimiter)) {
s = s.replace(delimiter, String.valueOf(arguments[i]));
}
i++;
}
return s;
}
}