From e22cc28ee7dc78281d1e21b42313f111430669a3 Mon Sep 17 00:00:00 2001
From: Ernesto Corbellini <ecorbellini@ekumenlabs.com>
Date: Tue, 15 Dec 2015 12:38:22 -0300
Subject: [PATCH] Added goal ID generator class.

---
 .../rosjava_actionlib/GoalIDGenerator.java    | 82 +++++++++++++++++++
 1 file changed, 82 insertions(+)
 create mode 100644 src/rosjava_actionlib/rosjava_actionlib/src/main/java/com/github/ekumen/rosjava_actionlib/GoalIDGenerator.java

diff --git a/src/rosjava_actionlib/rosjava_actionlib/src/main/java/com/github/ekumen/rosjava_actionlib/GoalIDGenerator.java b/src/rosjava_actionlib/rosjava_actionlib/src/main/java/com/github/ekumen/rosjava_actionlib/GoalIDGenerator.java
new file mode 100644
index 0000000..35654c6
--- /dev/null
+++ b/src/rosjava_actionlib/rosjava_actionlib/src/main/java/com/github/ekumen/rosjava_actionlib/GoalIDGenerator.java
@@ -0,0 +1,82 @@
+/*
+ * Copyright (C) 2011 Alexander Perzylo, Technische Universität München
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package com.github.ekumen.rosjava_actionlib;
+
+import org.ros.message.Time;
+import actionlib_msgs.GoalID;
+import org.ros.node.ConnectedNode;
+import org.ros.node.NodeConfiguration;
+import org.ros.message.MessageFactory;
+
+import java.util.concurrent.atomic.AtomicLong;
+
+/**
+ * The GoalIDGenerator may be used to create unique GoalIDs.
+ *
+ * <p>
+ * The node's nodeName will be used and the time on the node.
+ *
+ * @author Alexander C. Perzylo, perzylo@cs.tum.edu
+ */
+public class GoalIDGenerator {
+  /**
+   * A global ID which provide a count for each goal id.
+   */
+  private static AtomicLong goalCount = new AtomicLong(0);
+
+  /**
+   * Unique nodeName to prepend to the goal id. This will generally be a fully
+   * qualified node nodeName.
+   */
+  private ConnectedNode node;
+
+  /**
+   * Constructor to create a GoalIDGenerator using a unique nodeName to prepend to
+   * the goal id. This will generally be a fully qualified node nodeName.
+   *
+   * @param node
+   *          The node used to generate IDs. The node's full nodeName should be
+   *          unique in the system.
+   */
+  public GoalIDGenerator(ConnectedNode node) {
+    this.node = node;
+  }
+
+  /**
+   * Creates a GoalID object with an unique id and a timestamp of the current
+   * time.
+   *
+   * @return GoalID object
+   */
+  public String generateID(ConnectedNode node, GoalID goal) {
+    String id;
+    Time t = node.getCurrentTime();
+    //NodeConfiguration nc = NodeConfiguration.newPrivate();
+    //MessageFactory mf = nc.getTopicMessageFactory();
+    //GoalID id = mf.newFromType(GoalID._TYPE);
+
+    //StringBuilder sb = new StringBuilder(node.getName().toString());
+    //sb.append("-").append(goalCount.incrementAndGet()).append("-").append(t.secs).append(".").append(t.nsecs);
+    id = node.getName().toString() + "-" + goalCount.incrementAndGet()
+      + "-" + t.secs + "." + t.nsecs;
+
+    goal.setId(id);
+    goal.setStamp(t);
+
+    return id;
+  }
+}
-- 
GitLab