Skip to content
Snippets Groups Projects
Commit 347cc484 authored by Julian Cerruti's avatar Julian Cerruti
Browse files

Implement parameter server's searchParam

parent 04aef056
No related branches found
No related tags found
No related merge requests found
......@@ -187,8 +187,20 @@ public class ParameterServer {
}
}
public Object search(GraphName name) {
throw new UnsupportedOperationException();
public Object search(GraphName namespace, GraphName name) {
GraphName search = namespace;
GraphName result = search.join(name.toRelative());
if (has(result)) {
return result;
}
while (!search.isRoot()) {
search = search.getParent();
result = search.join(name.toRelative());
if (has(result)) {
return result;
}
}
return null;
}
@SuppressWarnings("unchecked")
......
......@@ -214,7 +214,15 @@ public class MasterXmlRpcEndpointImpl implements MasterXmlRpcEndpoint,
@Override
public List<Object> searchParam(String callerId, String key) {
throw new UnsupportedOperationException();
GraphName ns = GraphName.of(callerId);
GraphName searchKey = GraphName.of(key);
Object value = parameterServer.search(ns, searchKey);
if (value != null) {
return Response.newSuccess("Success", value.toString()).toList();
} else {
return Response.newError("Parameter \"" + key + "\" in namespace \"" + ns.toString() +
"\" not found in parameter server", null).toList();
}
}
@Override
......
......@@ -17,6 +17,7 @@
package org.ros.internal.node.server;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import java.util.Collection;
......@@ -128,4 +129,31 @@ public class ParameterServerTest {
assertTrue(names.contains(name2));
}
@Test
public void testSearchParam() {
GraphName ns = GraphName.of("/a/b/c/d/e/f");
GraphName name1 = GraphName.of("s_1");
GraphName name2 = GraphName.of("/s_1");
server.set(name2, 1);
Object result = server.search(ns, name1);
assertEquals(name2, result);
server.delete(name2);
name2 = GraphName.of("/a/b/s_1");
server.set(name2, 1);
result = server.search(ns, name1);
assertEquals(name2, result);
server.delete(name2);
name2 = GraphName.of("/a/b/c/d/e/f/s_1");
server.set(name2, 1);
result = server.search(ns, name1);
assertEquals(name2, result);
server.delete(name2);
name1 = GraphName.of("s_j");
result = server.search(ns, name1);
assertEquals(null, result);
}
}
......@@ -85,6 +85,13 @@ public class ParameterTreeIntegrationTest extends RosTest {
}
}
@Test
public void testSearchParameter() {
parameters.set("/node_name/p_i", "value");
GraphName res = parameters.search("p_i");
assertEquals("/node_name/p_i", res.toString());
}
@Test
public void testGetParameterWithDefault() {
assertTrue(parameters.getBoolean("bloop", true));
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment