/*
* Copyright (c) 2010-2016, Sikuli.org, sikulix.com
* Released under the MIT License.
*
*/
package org.sikuli.script;
import org.sikuli.basics.Debug;
/**
* implements the SikuliX FindFailed exception class
* and defines constants and settings for the feature FindFailedResponse
*/
public class FindFailed extends SikuliException {
/**
* default FindFailedResponse is ABORT
*/
public static FindFailedResponse defaultFindFailedResponse = FindFailedResponse.ABORT;
/**
* FindFailedResponse PROMPT: should display a prompt dialog with the failing image
* having the options retry, skip and abort
*/
public static final FindFailedResponse PROMPT = FindFailedResponse.PROMPT;
/**
* FindFailedResponse RETRY: should retry the find op on FindFailed
*/
public static final FindFailedResponse RETRY = FindFailedResponse.RETRY;
/**
* FindFailedResponse SKIP: should silently continue on FindFailed
*/
public static final FindFailedResponse SKIP = FindFailedResponse.SKIP;
/**
* FindFailedResponse ABORT: should abort the SikuliX application
*/
public static final FindFailedResponse ABORT = FindFailedResponse.ABORT;
/**
* FindFailedResponse HANDLE: should call a given handler on FindFailed
*/
public static final FindFailedResponse HANDLE = FindFailedResponse.HANDLE;
private static Object ffHandler = null;
private static Object imHandler = null;
private static Object defaultHandler = null;
/**
* the exception
* @param message to be shown
*/
public FindFailed(String message) {
super(message);
_name = "FindFailed";
}
public static String createdefault(Region reg, Image img) {
String msg = "";
if (img.isText()) {
msg = String.format("%s as text", img.getName());
} else if (img.getSize().width < 0 && img.getSize().height < 0) {
msg = String.format("%s not loaded", img.getName());
} else {
msg = String.format("%s in %s", img, reg);
}
return msg;
}
public static FindFailedResponse getResponse() {
return defaultFindFailedResponse;
}
public static FindFailedResponse setResponse(FindFailedResponse response) {
defaultFindFailedResponse = response;
return defaultFindFailedResponse;
}
public static FindFailedResponse setHandler(Object observer) {
if (observer != null && (observer.getClass().getName().contains("org.python")
|| observer.getClass().getName().contains("org.jruby"))) {
observer = new ObserverCallBack(observer, ObserveEvent.Type.FINDFAILED);
} else {
((ObserverCallBack) observer).setType(ObserveEvent.Type.FINDFAILED);
}
ffHandler = observer;
Debug.log(3, "Setting Default FindFailedHandler");
return defaultFindFailedResponse;
}
protected void setFindFailedHandler(Object handler) {
ffHandler = setHandler(handler, ObserveEvent.Type.FINDFAILED);
}
public void setImageMissingHandler(Object handler) {
imHandler = setHandler(handler, ObserveEvent.Type.MISSING);
}
private Object setHandler(Object handler, ObserveEvent.Type type) {
defaultFindFailedResponse = HANDLE;
if (handler != null && (handler.getClass().getName().contains("org.python")
|| handler.getClass().getName().contains("org.jruby"))) {
handler = new ObserverCallBack(handler, type);
} else {
((ObserverCallBack) handler).setType(type);
}
return handler;
}
public static Object getFindFailedHandler() {
return ffHandler;
}
public static Object getImageMissingHandler() {
return imHandler;
}
public static FindFailedResponse reset() {
defaultFindFailedResponse = ABORT;
ffHandler = null;
imHandler = null;
return defaultFindFailedResponse;
}
}