Go to the documentation of this file.00001 package com.github.rosjava.android_apps.make_a_map;
00002
00003 import map_store.SaveMap;
00004 import map_store.SaveMapRequest;
00005 import map_store.SaveMapResponse;
00006
00007 import org.ros.exception.RosRuntimeException;
00008 import org.ros.exception.ServiceNotFoundException;
00009 import org.ros.namespace.GraphName;
00010 import org.ros.namespace.NameResolver;
00011 import org.ros.node.AbstractNodeMain;
00012 import org.ros.node.ConnectedNode;
00013 import org.ros.node.service.ServiceClient;
00014 import org.ros.node.service.ServiceResponseListener;
00015
00016 public class MapManager extends AbstractNodeMain {
00017
00018 private ConnectedNode connectedNode;
00019 private ServiceResponseListener<SaveMapResponse> saveServiceResponseListener;
00020
00021 private String mapName;
00022 private NameResolver nameResolver;
00023 private boolean nameResolverSet = false;
00024
00025 public MapManager() {
00026 mapName = "";
00027 }
00028
00029 public void setMapName(String name) {
00030 mapName = name;
00031 }
00032
00033 public void setNameResolver(NameResolver newNameResolver) {
00034 nameResolver = newNameResolver;
00035 nameResolverSet = true;
00036 }
00037
00038 public void setSaveService(
00039 ServiceResponseListener<SaveMapResponse> saveServiceResponseListener) {
00040 this.saveServiceResponseListener = saveServiceResponseListener;
00041 }
00042
00043 public void saveMap() {
00044 ServiceClient<SaveMapRequest, SaveMapResponse> saveMapClient;
00045 if (connectedNode != null) {
00046 try
00047 {
00048 String srvName = "save_map";
00049 if (nameResolverSet)
00050 {
00051 srvName = nameResolver.resolve(srvName).toString();
00052 }
00053 saveMapClient = connectedNode.newServiceClient(srvName, SaveMap._TYPE);
00054 } catch (ServiceNotFoundException e) {
00055 try {
00056 Thread.sleep(1000L);
00057 return;
00058 } catch (Exception ex) {
00059 }
00060 throw new RosRuntimeException(e);
00061 }
00062 final SaveMapRequest request = saveMapClient.newMessage();
00063 request.setMapName(mapName);
00064 saveMapClient.call(request, saveServiceResponseListener);
00065 }
00066 }
00067
00068 @Override
00069 public GraphName getDefaultNodeName() {
00070 return null;
00071 }
00072
00073 public void onStart(final ConnectedNode connectedNode) {
00074 this.connectedNode = connectedNode;
00075 saveMap();
00076 }
00077 }