Android Open Source - interdroid-swan Queued Expression






From Project

Back to project page interdroid-swan.

License

The source code is released under:

Copyright (c) 2008-2011 Vrije Universiteit, The Netherlands All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the follo...

If you think the Android project interdroid-swan listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package interdroid.swan.engine;
//from  w w  w .  jav  a 2 s.c  om
import interdroid.swan.swansong.Expression;
import interdroid.swan.swansong.Result;
import interdroid.swan.swansong.TimestampedValue;
import interdroid.swan.swansong.TriStateExpression;
import interdroid.swan.swansong.ValueExpression;
import android.content.Intent;
import android.os.Bundle;

public class QueuedExpression implements Comparable<QueuedExpression> {

  private Expression mExpression;
  private String mId;
  private Result mCurrentResult;
  private Intent mOnTrue;
  private Intent mOnFalse;
  private Intent mOnUndefined;
  private Intent mOnNewValues;

  private long mStartTime;
  private int mEvaluations; // number of evaluations
  private long mTotalEvaluationTime; // total time spent on evaluations so far
  private long mMinEvaluationTime = Long.MAX_VALUE;
  private long mMaxEvaluationTime = Long.MIN_VALUE;
  private long mTotalEvaluationDelay; // total delay
  private long mNumEvaluationsDelay; // number of evaluations with delay

  public QueuedExpression(String id, Expression expression, Intent onTrue,
      Intent onFalse, Intent onUndefined, Intent onNewValues) {
    mId = id;
    mExpression = expression;
    mStartTime = System.currentTimeMillis();
    mOnTrue = onTrue;
    mOnFalse = onFalse;
    mOnUndefined = onUndefined;
    mOnNewValues = onNewValues;
  }

  public int compareTo(QueuedExpression another) {
    return mCurrentResult.compareTo(another.mCurrentResult);
  };

  public Expression getExpression() {
    return mExpression;
  }

  public String getId() {
    return mId;
  }

  /**
   * update the current result and return whether this update caused a change
   * 
   * @param result
   * @return
   */
  public boolean update(Result result) {
    if (mExpression instanceof TriStateExpression && mCurrentResult != null
        && mCurrentResult.getTriState() == result.getTriState()) {
      mCurrentResult = result;
      return false;
    } else if (mExpression instanceof ValueExpression
        && mCurrentResult != null
        && !hasChanged(mCurrentResult.getValues(), result.getValues())) {
      mCurrentResult = result;
      return false;
    }
    mCurrentResult = result;
    return true;
  }

  private boolean hasChanged(TimestampedValue[] a, TimestampedValue[] b) {
    if (a == null || b == null) {
      return true;
    }
    if (a.length != b.length) {
      return true;
    }
    for (int i = 0; i < a.length; i++) {
      if (!a[i].equals(b[i])) {
        return true;
      }
    }
    return false;
  }

  public long getDeferUntil() {
    if (mCurrentResult != null) {
      return mCurrentResult.getDeferUntil();
    } else {
      // we don't have a current result yet, so we can't defer
      return 0;
    }
  }

  public boolean isDeferUntilGuaranteed() {
    if (mCurrentResult != null) {
      return mCurrentResult.isDeferUntilGuaranteed();
    } else {
      // we don't have a current result yet, so we can't defer
      return false;
    }
  }

  public String toString() {
    String id = mId;
    if (mId.contains(Expression.SEPARATOR)) {
      id = "<remote> " + mId.split(Expression.SEPARATOR, 2)[1];
    }
    return id;
  }

  public void evaluated(long currentEvalutionTime, long evalDelay) {
    mEvaluations += 1;
    mTotalEvaluationTime += currentEvalutionTime;
    mMinEvaluationTime = Math.min(mMinEvaluationTime, currentEvalutionTime);
    mMaxEvaluationTime = Math.max(mMaxEvaluationTime, currentEvalutionTime);
    if (evalDelay != 0) {
      mTotalEvaluationDelay += evalDelay;
      mNumEvaluationsDelay += 1;
    }
  }

  public Bundle toBundle() {
    Bundle bundle = new Bundle();
    bundle.putLong("start-time", mStartTime);
    bundle.putString("name", mId);
    bundle.putString("result", mCurrentResult == null ? "n.a."
        : mCurrentResult.toString());
    bundle.putDouble(
        "evaluation-rate",
        (mEvaluations / ((System.currentTimeMillis() - mStartTime) / 1000.0)));
    bundle.putLong("min-evaluation-time", mMinEvaluationTime);
    bundle.putLong("max-evaluation-time", mMaxEvaluationTime);
    bundle.putLong("avg-evaluation-time",
        (mTotalEvaluationTime / Math.max(mEvaluations, 1)));
    bundle.putFloat("evaluation-percentage",
        ((mTotalEvaluationTime * 100) / (float) (System
            .currentTimeMillis() - mStartTime)));
    bundle.putLong("avg-evaluation-delay",
        (mTotalEvaluationDelay / Math.max(mNumEvaluationsDelay, 1)));
    return bundle;
  }

  public Intent getIntent(Result result) {
    if (mExpression instanceof TriStateExpression) {
      switch (result.getTriState()) {
      case TRUE:
        return mOnTrue;
      case FALSE:
        return mOnFalse;
      case UNDEFINED:
        return mOnUndefined;
      }
    }
    return mOnNewValues;
  }

  public Intent getOnTrue() {
    return mOnTrue;
  }

  public Intent getOnFalse() {
    return mOnFalse;
  }

  public Intent getOnUndefined() {
    return mOnUndefined;
  }

  public Intent getOnNewValues() {
    return mOnNewValues;
  }

}




Java Source Code List

interdroid.swan.ExpressionListener.java
interdroid.swan.ExpressionManager.java
interdroid.swan.SensorConfigurationException.java
interdroid.swan.SensorInfo.java
interdroid.swan.SwanException.java
interdroid.swan.TriStateExpressionListener.java
interdroid.swan.ValueExpressionListener.java
interdroid.swan.crossdevice.Converter.java
interdroid.swan.crossdevice.CrossDeviceReceiver.java
interdroid.swan.crossdevice.Pusher.java
interdroid.swan.crossdevice.Registry.java
interdroid.swan.crossdevice.SwanGCMConstants.java
interdroid.swan.crossdevice.SwanLakeActivity.java
interdroid.swan.engine.EvaluationEngineReceiver.java
interdroid.swan.engine.EvaluationEngineService.java
interdroid.swan.engine.EvaluationManager.java
interdroid.swan.engine.ExpressionViewerActivity.java
interdroid.swan.engine.QueuedExpression.java
interdroid.swan.engine.SensorSetupFailedException.java
interdroid.swan.engine.SensorViewerActivity.java
interdroid.swan.engine.TextProgressBar.java
interdroid.swan.sensors.AbstractConfigurationActivity.java
interdroid.swan.sensors.AbstractCuckooSensor.java
interdroid.swan.sensors.AbstractMemorySensor.java
interdroid.swan.sensors.AbstractSensorBase.java
interdroid.swan.sensors.AbstractVdbSensor.java
interdroid.swan.sensors.MonitorThread.java
interdroid.swan.sensors.SensorInterface.java
interdroid.swan.sensors.TimeSensor.java
interdroid.swan.sensors.impl.BatterySensor.java
interdroid.swan.sensors.impl.BluetoothSensor.java
interdroid.swan.sensors.impl.CalendarSensor.java
interdroid.swan.sensors.impl.CallSensor.java
interdroid.swan.sensors.impl.GyroscopeSensor.java
interdroid.swan.sensors.impl.IntentSensor.java
interdroid.swan.sensors.impl.LightSensor.java
interdroid.swan.sensors.impl.LocationSensor.java
interdroid.swan.sensors.impl.LogCatSensor.java
interdroid.swan.sensors.impl.MagnetometerSensor.java
interdroid.swan.sensors.impl.MovementSensor.java
interdroid.swan.sensors.impl.PolarHeartRate.java
interdroid.swan.sensors.impl.PressureSensor.java
interdroid.swan.sensors.impl.ProximitySensor.java
interdroid.swan.sensors.impl.ScreenSensor.java
interdroid.swan.sensors.impl.SignalStrengthSensor.java
interdroid.swan.sensors.impl.SmartLocationSensor.java
interdroid.swan.sensors.impl.SoundSensor.java
interdroid.swan.sensors.impl.TemperatureSensor.java
interdroid.swan.sensors.impl.TwitterSensor.java
interdroid.swan.sensors.impl.WifiSensor.java
interdroid.swan.sensors.impl.package-info.java
interdroid.swan.swansong.BinaryLogicOperator.java
interdroid.swan.swansong.ComparatorResult.java
interdroid.swan.swansong.Comparator.java
interdroid.swan.swansong.ComparisonExpression.java
interdroid.swan.swansong.ConstantValueExpression.java
interdroid.swan.swansong.ExpressionFactory.java
interdroid.swan.swansong.ExpressionParseException.java
interdroid.swan.swansong.Expression.java
interdroid.swan.swansong.HistoryReductionMode.java
interdroid.swan.swansong.LogicExpression.java
interdroid.swan.swansong.LogicOperator.java
interdroid.swan.swansong.MathOperator.java
interdroid.swan.swansong.MathValueExpression.java
interdroid.swan.swansong.ParseableEnum.java
interdroid.swan.swansong.Parseable.java
interdroid.swan.swansong.Result.java
interdroid.swan.swansong.SensorValueExpression.java
interdroid.swan.swansong.TimestampedValue.java
interdroid.swan.swansong.TriStateExpression.java
interdroid.swan.swansong.TriState.java
interdroid.swan.swansong.UnaryLogicOperator.java
interdroid.swan.swansong.ValueExpression.java
interdroid.swan.ui.EnterConstantDialog.java
interdroid.swan.ui.ExpressionBuilderActivity.java
interdroid.swan.ui.LaunchService.java
interdroid.swan.ui.MergeExpressionDialog.java
interdroid.swan.ui.NewExpressionDialog.java
interdroid.swan.ui.NewMathExpressionDialog.java
interdroid.swan.ui.SelectComparatorDialog.java
interdroid.swan.ui.SelectExpressionDialog.java
interdroid.swan.ui.SelectOperatorDialog.java
interdroid.swan.ui.SelectSensorDialog.java
interdroid.swan.ui.SelectTypedValueDialog.java
interdroid.swan.ui.package-info.java
interdroid.swan.util.SeekBarPreference.java
interdroid.swan.util.TimePreference.java