Command.java :  » Remote » android-xbmcremote » org » xbmc » android » remote » business » Android Open Source

Android Open Source » Remote » android xbmcremote 
android xbmcremote » org » xbmc » android » remote » business » Command.java
package org.xbmc.android.remote.business;

import org.xbmc.api.business.DataResponse;
import org.xbmc.api.business.INotifiableManager;
import org.xbmc.httpapi.WifiStateException;

import android.util.Log;

/**
 * Class to asynchronous execute backend stuff and send the result back to the GUI.
 * Holds some extras to check how often this request failed and catch all to not have the backend crashing
 * and force closing the app.
 * @author till
 *
 */
public abstract class Command<T> implements Runnable {

  public int mRetryCount = 0;
  public long mStarted = 0;
  public final INotifiableManager mManager;
  public final DataResponse<T> mResponse;
  
  // TODO Disable this when not needed anymore
  public final StackTraceElement mCaller;
  
  public static final int MAX_RETRY = 5;
  
  public Command(DataResponse<T> response, INotifiableManager manager) {
    mManager = manager;
    mResponse = response;
    mStarted = System.currentTimeMillis();
    mCaller = new Throwable().fillInStackTrace().getStackTrace()[2];
  }
  
  public void run() {
    try {
      mRetryCount ++;
      Log.d("Command", "Running command counter: " + mRetryCount);
      if(mRetryCount > MAX_RETRY) return;
      doRun();
      Log.i(mCaller.getClassName(), "*** " + mCaller.getMethodName() + ": " + (System.currentTimeMillis() - mStarted) + "ms");

      mManager.onFinish(mResponse);
    } catch (WifiStateException e) {
      mManager.onWrongConnectionState(e.getState(), this);
    } catch (Exception e) {
      mManager.onError(e);
    }
  }
  
  public abstract void doRun() throws Exception;

}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.