/*
* Copyright 2005-2010 Ignis Software Tools Ltd. All rights reserved.
*/
package jsystem.framework.analyzer;
import jsystem.framework.IgnoreMethod;
import jsystem.framework.report.ListenerstManager;
import jsystem.framework.report.Reporter;
/**
* Any system object implement an Analyzer as well. The Analyzer work in 2
* steps: In the first the object to analyze is set by using
* setTestAgainsObject. it's the system object task to do it. Then the analyze
* or the silenceAnalyze method are called.
*
* @author Guy Arieli
*/
public class AnalyzerImpl implements Analyzer {
private Object testAgainstObject;
private Reporter report = ListenerstManager.getInstance();
private boolean throwException = true;
public void analyze(AnalyzerParameter parameter) throws AnalyzerException {
analyze(parameter, false);
}
public void analyze(AnalyzerParameter parameter, boolean silent) throws AnalyzerException {
analyze(parameter, silent, throwException);
}
public void analyze(AnalyzerParameter parameter, boolean silent, boolean throwException) throws AnalyzerException {
analyze(parameter, silent, throwException, false);
}
public void analyze(AnalyzerParameter parameter, String successMessage, String failMessage) throws AnalyzerException {
analyze(parameter, false, successMessage, failMessage);
}
public void analyze(AnalyzerParameter parameter, boolean silent, String successMessage, String failMessage) throws AnalyzerException {
analyze(parameter, silent, throwException, successMessage, failMessage);
}
public void analyze(AnalyzerParameter parameter, boolean silent, boolean throwException, String successMessage, String failMessage) throws AnalyzerException {
analyze(parameter, silent, throwException, false, successMessage, failMessage);
}
public void analyze(AnalyzerParameter parameter, boolean silent, boolean throwException, boolean showAsWarning) throws AnalyzerException {
analyze(parameter, silent, throwException, showAsWarning, null, null);
}
public void analyze(AnalyzerParameter parameter, boolean silent, boolean throwException, boolean showAsWarning, String successMessage, String failMessage) throws AnalyzerException {
parameter.setTitle(null);
parameter.setMessage(null);
parameter.setStatus(false);
parameter.setAnalyzer(this);
String title = null;
try {
if (testAgainstObject != null) {
Class<?> c = parameter.getTestAgainstType();
if (c != null && !(c.isAssignableFrom(testAgainstObject.getClass()))) {
parameter.setTitle("Use of wrong analyzer");
parameter.setMessage("The analyzer that you used requires input in " + c.getName()
+ " type, but the object to analyze is of " + testAgainstObject.getClass().getName()
+ " type.");
parameter.setStatus(false);
} else {
parameter.setTestAgainst(testAgainstObject);
parameter.analyze();
}
} else { // if the test against is null
parameter.setTitle("The object to analyze is null");
parameter
.setMessage("The object to analyze is null, please check that you run the analyze method on the right object");
parameter.setStatus(false);
}
if (!silent || (silent && (!parameter.getStatus()))) {
int status = Reporter.PASS;
title = (successMessage != null) ? successMessage : parameter.getTitle();
if (!parameter.getStatus()){
title = (failMessage != null) ? failMessage : parameter.getTitle();
if (showAsWarning) {
status = Reporter.WARNING;
} else {
status = Reporter.FAIL;
}
}
report.report(title, parameter.getMessage(), status);
}
} catch (Throwable t) {
if (!silent) {
report.report("Analyze proccess failed", t);
}
}
if (!parameter.getStatus()) {
if (throwException) {
throw new AnalyzerException(title);
}
}
}
public boolean isAnalyzeSuccess(AnalyzerParameter parameter) {
parameter.setTitle(null);
parameter.setMessage(null);
parameter.setStatus(false);
parameter.setAnalyzer(this);
try {
if (testAgainstObject != null) {
Class<?> c = parameter.getTestAgainstType();
if (c != null && !(c.isAssignableFrom(testAgainstObject.getClass()))) {
parameter.setTitle("Use of wrong analyzer");
parameter.setMessage("The analyzer that you used requires input in " + c.getName()
+ " type, but the object to analyze is of " + testAgainstObject.getClass().getName()
+ " type.");
parameter.setStatus(false);
report.report(parameter.getTitle(), parameter.getMessage(), parameter.getStatus());
return false;
} else {
parameter.setTestAgainst(testAgainstObject);
parameter.analyze();
}
} else { // if the test against is null
parameter.setTitle("The object to analyze is null");
parameter
.setMessage("The object to analyze is null, please check that you run the analyze method on the right object");
parameter.setStatus(false);
report.report(parameter.getTitle(), parameter.getMessage(), parameter.getStatus());
return false;
}
} catch (Throwable t) {
report.report("Analyze proccess failed", t);
return false;
}
return parameter.getStatus();
}
/**
* @deprecated please use {@link #testAgainstObject}
*/
public void setTestAgainsObject(Object o) {
this.testAgainstObject = o;
}
public void setTestAgainstObject(Object o) {
this.testAgainstObject = o;
}
/**
* @deprecated please use {@link #getTestAgainstObject()}
*/
public Object getTestAgainsObject() {
return testAgainstObject;
}
public Object getTestAgainstObject() {
return testAgainstObject;
}
@IgnoreMethod
public boolean isThrowException() {
return throwException;
}
@IgnoreMethod
public void setThrowException(boolean throwException) {
this.throwException = throwException;
}
}