package com.dsht.kernetweaker.cmdprocessor; import android.os.Parcel; import android.os.Parcelable; import android.util.Log; import java.util.Arrays; /** * Created with IntelliJ IDEA. * User: jbird * Date: 1/22/13 * Time: 5:19 AM */ public class Executable implements Parcelable { private String TAG = getClass().getSimpleName(); private boolean DEBUG = false; private final String[] mCommandsArray; private final long mStartTime; private Status mStatus; private long mFinishTime = -1; public enum Status { Queried, // Executable default status Staged, // beginning execution Finished // done. } public Executable(String... commands) { this.mCommandsArray = commands; this.mStartTime = System.nanoTime(); this.mStatus = Status.Queried; } public Executable(Parcel parcel) { this.mCommandsArray = parcel.createStringArray(); this.mStartTime = parcel.readLong(); this.mStatus = Status.valueOf(parcel.readString()); this.mFinishTime = parcel.readLong(); } public long getStartTime() { return mStartTime; } public String[] getCommandsArray() { // if the status is not finished we // now consider the script Staged if (getStatus() != Status.Finished) { setStatus(Status.Staged); } return mCommandsArray; } public Status getStatus() { return mStatus; } public Executable toggleDebug(boolean debug) { this.DEBUG = debug; return this; } public Executable setStatus(Status status) { this.mStatus = status; return this; } public long getFinishTime() { return mFinishTime; } public Executable setFinishTime(long finishTime) { mFinishTime = finishTime; if (DEBUG) { Log.d(TAG, "Executable completed execution in " + (mFinishTime - mStartTime) + " ms"); } if (Status.Staged == mStatus) { setStatus(Status.Finished); } return this; } // parcel implementation @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel parcel, int i) { parcel.writeStringArray(mCommandsArray); parcel.writeLong(mStartTime); parcel.writeString(mStatus.toString()); parcel.writeLong(mFinishTime); } public static final Executable.Creator<Executable> CREATOR = new Executable.Creator<Executable>() { public Executable createFromParcel(Parcel in) { return new Executable(in); } public Executable[] newArray(int size) { return new Executable[size]; } }; @Override public String toString() { return "Executable{" + "TAG='" + TAG + '\'' + ", mCommandsArray=" + (mCommandsArray == null ? null : Arrays.asList(mCommandsArray)) + ", mStartTime=" + mStartTime + ", mStatus=" + mStatus + ", mFinishTime=" + mFinishTime + '}'; } @Override public boolean equals(Object o) { if (this == o) return true; if (!(o instanceof Executable)) return false; Executable that = (Executable) o; if (mFinishTime != that.mFinishTime) return false; if (mStartTime != that.mStartTime) return false; if (!TAG.equals(that.TAG)) return false; if (!Arrays.equals(mCommandsArray, that.mCommandsArray)) return false; if (mStatus != that.mStatus) return false; return true; } @Override public int hashCode() { int result = TAG.hashCode(); result = 31 * result + Arrays.hashCode(mCommandsArray); result = 31 * result + (int) (mStartTime ^ (mStartTime >>> 32)); result = 31 * result + mStatus.hashCode(); result = 31 * result + (int) (mFinishTime ^ (mFinishTime >>> 32)); return result; } }