All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.sikuli.script.Observing Maven / Gradle / Ivy

/*
 * Copyright 2010-2014, Sikuli.org, sikulix.com
 * Released under the MIT License.
 *
 * modified RaiMan
 */
package org.sikuli.script;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.sikuli.basics.Debug;

/**
 * This class globally collects
 * all running observations and tracks the created events.
*/ public class Observing { private static final String me = "Observing: "; private static final int lvl = 3; private static void log(int level, String message, Object... args) { Debug.logx(level, me + message, args); } private Observing() { } private static final Map observers = Collections.synchronizedMap(new HashMap()); private static final Map events = Collections.synchronizedMap(new HashMap()); private static final List runningObservers = Collections.synchronizedList(new ArrayList()); private static long lastName = 0; private static boolean shouldStopOnFirstEvent = false; /** * tell the next starting observer, to stop on the first event */ public static void setStopOnFirstEvent() { shouldStopOnFirstEvent = true; } protected static boolean getStopOnFirstEvent() { boolean val = shouldStopOnFirstEvent; shouldStopOnFirstEvent = false; return val; } protected static void addRunningObserver(Region r) { if (shouldStopOnFirstEvent) { shouldStopOnFirstEvent = false; r.getObserver().setStopOnFirstEvent(); } runningObservers.add(r); log(lvl,"add observer: now running %d observer(s)", runningObservers.size()); } protected static void removeRunningObserver(Region r) { runningObservers.remove(r); log(lvl, "remove observer: now running %d observer(s)", runningObservers.size()); } protected static synchronized String add(Region reg, ObserverCallBack obs, ObserveEvent.Type type, Object target) { String name; long now = new Date().getTime(); while (now <= lastName) { now++; } lastName = now; name = "" + now; observers.put(name, reg); reg.getObserver().addObserver(target, (ObserverCallBack) obs, name, type); return name; } /** * set the observer with the given name inactive (not checked while observing) * @param name */ public void setInactive(String name) { setActive(name, false); } /** * set the observer with the given name active (checked while observing) * @param name */ public void setActive(String name) { setActive(name, true); } protected static void setActive(String name, boolean state) { if (observers.containsKey(name)) { observers.get(name).getObserver().setActive(name, state); } } /** * remove the observer from the list, a region observer will be stopped
* events for that observer are removed as well * * @param name name of observer */ public static void remove(String name) { if (observers.containsKey(name)) { observers.get(name).stopObserver(); observers.remove(name); events.remove(name); } } /** * stop and remove all observers registered for this region from the list
* events for those observers are removed as well * @param reg */ public static void remove(Region reg) { for (String name : reg.getObserver().getNames()) { remove(name); } } /** * stop and remove all observers and their registered events * */ public static void cleanUp() { String[] names; synchronized (observers) { names = new String[observers.size()]; int i = 0; for (String name : observers.keySet()) { Region reg = observers.get(name); if (reg.isObserving()) { reg.stopObserver(); } events.remove(name); names[i++] = name; } } runningObservers.clear(); for (String name : names) { observers.remove(name); } log(lvl + 1, "as requested: removed all observers"); } /** * are their any happened events * * @return true if yes */ public static boolean hasEvents() { return events.size() > 0; } /** * are their any happened events for this region? * * @param reg * @return true if yes */ public static boolean hasEvents(Region reg) { for (String name : reg.getObserver().getNames()) { if (events.containsKey(name)) { return true; } } return false; } /** * are their any happened events for the observer having this name? * * @param name * @return true if yes */ public static boolean hasEvent(String name) { return events.containsKey(name); } protected static void addEvent(ObserveEvent evt) { events.put(evt.getName(), evt); } /** * return the events for that region
* events are removed from the list * * @param reg * @return the array of events or size 0 array if none */ public static ObserveEvent[] getEvents(Region reg) { List evts = new ArrayList(); ObserveEvent evt; for (String name : reg.getObserver().getNames()) { evt = events.get(name); if (evt != null) { evts.add(evt); } events.remove(name); } return evts.toArray(new ObserveEvent[0]); } /** * return all events (they are preserved)
* * @return the array of events or size 0 array if none */ public static ObserveEvent[] getEvents() { List evts = new ArrayList(); ObserveEvent evt; synchronized (events) { for (String name : events.keySet()) { evt = events.get(name); if (evt == null) { evts.add(evt); } } } return evts.toArray(new ObserveEvent[0]); } /** * retrieves and removes the requested event * @param name of event * @return the event or null */ public static ObserveEvent getEvent(String name) { return events.remove(name); } /** * the event list is purged */ public static void clearEvents() { events.clear(); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy