From 95b5c6b836ce8d3a126853712b47d295d45183b6 Mon Sep 17 00:00:00 2001
From: Ernesto Corbellini <ecorbellini@ekumenlabs.com>
Date: Wed, 20 Jan 2016 15:02:05 -0300
Subject: [PATCH] Added state translation to get a meaninful string.

---
 .../rosjava_actionlib/ClientStateMachine.java | 67 ++++++++++++++-----
 1 file changed, 49 insertions(+), 18 deletions(-)

diff --git a/src/rosjava_actionlib/rosjava_actionlib/src/main/java/com/github/ekumen/rosjava_actionlib/ClientStateMachine.java b/src/rosjava_actionlib/rosjava_actionlib/src/main/java/com/github/ekumen/rosjava_actionlib/ClientStateMachine.java
index ec025fe..e923224 100644
--- a/src/rosjava_actionlib/rosjava_actionlib/src/main/java/com/github/ekumen/rosjava_actionlib/ClientStateMachine.java
+++ b/src/rosjava_actionlib/rosjava_actionlib/src/main/java/com/github/ekumen/rosjava_actionlib/ClientStateMachine.java
@@ -20,6 +20,8 @@ import java.lang.Exception;
 import actionlib_msgs.GoalStatus;
 import java.util.Vector;
 import java.util.Iterator;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 
 
 /**
@@ -40,24 +42,58 @@ public class ClientStateMachine {
     public final static int PREEMPTING = 6;
     public final static int DONE = 7;
     public final static int LOST = 8;
+
+    public static String translateState(int state) {
+      String stateName;
+      switch (state) {
+        case INVALID_TRANSITION:
+          stateName = "INVALID_TRANSITION";
+          break;
+        case NO_TRANSITION:
+          stateName = "NO_TRANSITION";
+          break;
+        case WAITING_FOR_GOAL_ACK:
+          stateName = "WAITING_FOR_GOAL_ACK";
+          break;
+        case PENDING:
+          stateName = "PENDING";
+          break;
+        case ACTIVE:
+          stateName = "ACTIVE";
+          break;
+        case WAITING_FOR_RESULT:
+          stateName = "WAITING_FOR_RESULT";
+          break;
+        case WAITING_FOR_CANCEL_ACK:
+          stateName = "WAITING_FOR_CANCEL_ACK";
+          break;
+        case RECALLING:
+          stateName = "RECALLING";
+          break;
+        case PREEMPTING:
+          stateName = "PREEMPTING";
+          break;
+        case DONE:
+          stateName = "DONE";
+          break;
+        case LOST:
+          stateName = "LOST";
+          break;
+        default:
+          stateName = "UNKNOWN_STATE";
+          break;
+      }
+      return stateName;
+    }
   }
 
   int latestGoalStatus;
   int state;
   int nextState;
-
-
-  /**
-   * Constructor
-   */
-  public void ClientStateMachine()
-  {
-    // interface object for the callbacks?
-    // store arguments locally in the object
-    //this.goal = actionGoal;
-  }
+  private Log log = LogFactory.getLog(ActionClient.class);
 
   public synchronized void setState(int state) {
+    log.info("ClientStateMachine - State changed from " + this.state + " to " + state);
     this.state = state;
   }
 
@@ -89,9 +125,7 @@ public class ClientStateMachine {
       // Determine the next state
 
       //if (this.state
-
     }
-
   }
 
   /**
@@ -107,6 +141,8 @@ public class ClientStateMachine {
     nextStates = getTransition(goalStatus);
     iterStates = nextStates.iterator();
 
+    log.info("ClientStateMachine - State transition invoked.");
+
     while (iterStates.hasNext()) {
       this.state = iterStates.next();
     }
@@ -432,9 +468,4 @@ public class ClientStateMachine {
   public void markAsLost()
   {
   }
-
-  public void updateResult(int statusResult)
-  {
-  }
-
 }
-- 
GitLab