/*
* Software Name : ATK
*
* Copyright (C) 2007 - 2012 France Télécom
*
* 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.
*
* ------------------------------------------------------------------
* File Name : ErrorManager.java
*
* Created : 15/03/2010
* Author(s) : HENAFF Mari-Mai
*/
package com.orange.atk.error;
import java.util.ArrayList;
import java.util.List;
import org.apache.log4j.Logger;
import com.orange.atk.internationalization.ResourceManager;
public class ErrorManager {
private static ErrorManager instance=null;
private static List<StringBuffer> errorList = new ArrayList<StringBuffer>();
private static List<StringBuffer> classList = new ArrayList<StringBuffer>();
private ErrorFrame errorFrame = new ErrorFrame();
private List<ErrorListener> errorListeners = new ArrayList<ErrorListener>();
private static final String EXCEPTION_MESSAGE_PREFIX = ">> ";
private static final String WARNING_MESSAGE_PREFIX = ResourceManager.getInstance().getString("WARNING")+" ";
private static final String METHOD_FAILED = " "+ResourceManager.getInstance().getString("METHOD_FAILED");
public static ErrorManager getInstance(){
if(instance ==null) {
instance = new ErrorManager();
}
return instance;
}
//default constructor
private ErrorManager() {
}
public void addErrorListener(ErrorListener listener) {
errorListeners.add(listener);
}
public void clear() {
errorList.clear();
}
public int getErrorsNumber() {
return errorList.size();
}
public StringBuffer getLastError() {
int size = errorList.size();
if (errorList.size()>0) {
return(errorList.get(size-1));
}
return null;
}
public StringBuffer getAllErrors() {
StringBuffer allErrors = new StringBuffer();
for (int i=errorList.size()-1; i>=0; i--) {
allErrors.append("\n ");
if (!classList.get(i).toString().equals("")) allErrors.append(classList.get(i)+": ");
allErrors.append(errorList.get(i));
}
return allErrors;
}
public void addError(String className, String errorMessage, Exception e) {
if (e.getMessage()!=null) {
Logger.getLogger(className).error(e.getMessage());
addToErrorManager(new StringBuffer(""),new StringBuffer(EXCEPTION_MESSAGE_PREFIX+e.getMessage()));
}
else {
StackTraceElement[] stack = e.getStackTrace();
if (stack.length>0) addToErrorManager(new StringBuffer(""),new StringBuffer(stack[0].getClassName()+"."+stack[0].getMethodName()+"()"+METHOD_FAILED));
}
e.printStackTrace();
if (errorMessage!=null) addToErrorManager(new StringBuffer(className), new StringBuffer(errorMessage));
Logger.getLogger(className).error(errorMessage);
notifyError();
}
public void addError(String className, String errorMessage) {
if (errorMessage!=null) addToErrorManager(new StringBuffer(className),new StringBuffer(errorMessage));
Logger.getLogger(className).error(errorMessage);
notifyError();
}
public void addWarning(String className, String warningMessage, Exception e) {
if (e.getMessage()!=null) {
Logger.getLogger(className).error(e.getMessage());
addToErrorManager(new StringBuffer(""),new StringBuffer(EXCEPTION_MESSAGE_PREFIX+e.getMessage()));
}
else {
StackTraceElement[] stack = e.getStackTrace();
if (stack.length>0) addToErrorManager(new StringBuffer(""),new StringBuffer(stack[0].getClassName()+"."+stack[0].getMethodName()+"()"+METHOD_FAILED));
}
e.printStackTrace();
if (warningMessage!=null) addToErrorManager(new StringBuffer(className),new StringBuffer(WARNING_MESSAGE_PREFIX+warningMessage));
Logger.getLogger(className).warn(warningMessage);
notifyWarning();
}
public void addWarning(String className, String warningMessage) {
if (warningMessage!=null) addToErrorManager(new StringBuffer(className),new StringBuffer(warningMessage));
Logger.getLogger(className).warn(WARNING_MESSAGE_PREFIX+warningMessage);
notifyWarning();
}
private void addToErrorManager(StringBuffer className, StringBuffer message) {
classList.add(className);
errorList.add(message);
}
public void displayErrorFrame() {
errorFrame.display();
}
public void displayErrorFrame(String title) {
errorFrame.display(title);
}
private void notifyError() {
for (int i=0; i<errorListeners.size(); i++) {
errorListeners.get(i).errorOccured();
}
}
private void notifyWarning() {
for (int i=0; i<errorListeners.size(); i++) {
errorListeners.get(i).warningOccured();
}
}
}