Go to the documentation of this file.00001 package com.github.rosjava.android_apps.map_nav;
00002
00003 import map_store.ListMaps;
00004 import map_store.ListMapsRequest;
00005 import map_store.ListMapsResponse;
00006 import map_store.PublishMap;
00007 import map_store.PublishMapRequest;
00008 import map_store.PublishMapResponse;
00009
00010 import org.ros.exception.RosRuntimeException;
00011 import org.ros.exception.ServiceNotFoundException;
00012 import org.ros.namespace.GraphName;
00013 import org.ros.namespace.NameResolver;
00014 import org.ros.node.AbstractNodeMain;
00015 import org.ros.node.ConnectedNode;
00016 import org.ros.node.service.ServiceClient;
00017 import org.ros.node.service.ServiceResponseListener;
00018
00019 public class MapManager extends AbstractNodeMain {
00020
00021 private ConnectedNode connectedNode;
00022 private String function;
00023 private ServiceResponseListener<ListMapsResponse> listServiceResponseListener;
00024 private ServiceResponseListener<PublishMapResponse> publishServiceResponseListener;
00025
00026 private String mapId;
00027 private NameResolver nameResolver;
00028 private boolean nameResolverSet = false;
00029
00030 public MapManager() {
00031 }
00032
00033 public void setMapId(String mapId) {
00034 this.mapId = mapId;
00035 }
00036
00037 public void setNameResolver(NameResolver newNameResolver) {
00038 nameResolver = newNameResolver;
00039 nameResolverSet = true;
00040 }
00041
00042 public void setFunction(String function) {
00043 this.function = function;
00044 }
00045
00046 public void setListService(
00047 ServiceResponseListener<ListMapsResponse> listServiceResponseListener) {
00048 this.listServiceResponseListener = listServiceResponseListener;
00049 }
00050
00051 public void setPublishService(
00052 ServiceResponseListener<PublishMapResponse> publishServiceResponseListener) {
00053 this.publishServiceResponseListener = publishServiceResponseListener;
00054 }
00055
00056 public void listMaps() {
00057 ServiceClient<ListMapsRequest, ListMapsResponse> listMapsClient;
00058 try
00059 {
00060 String srvName = "list_maps";
00061 if (nameResolverSet)
00062 {
00063 srvName = nameResolver.resolve(srvName).toString();
00064 }
00065 listMapsClient = connectedNode.newServiceClient(srvName, ListMaps._TYPE);
00066 } catch (ServiceNotFoundException e) {
00067 try {
00068 Thread.sleep(1000L);
00069 listMaps();
00070 return;
00071 } catch (Exception ex) {}
00072
00073 e.printStackTrace();
00074 throw new RosRuntimeException(e);
00075 }
00076 final ListMapsRequest request = listMapsClient.newMessage();
00077 listMapsClient.call(request, listServiceResponseListener);
00078 }
00079
00080 public void publishMap() {
00081 ServiceClient<PublishMapRequest, PublishMapResponse> publishMapClient;
00082
00083 try
00084 {
00085 String srvName = "publish_map";
00086 if (nameResolverSet)
00087 {
00088 srvName = nameResolver.resolve(srvName).toString();
00089 }
00090 publishMapClient = connectedNode.newServiceClient(srvName, PublishMap._TYPE);
00091 } catch (ServiceNotFoundException e) {
00092 try {
00093 Thread.sleep(1000L);
00094 listMaps();
00095 return;
00096 } catch (Exception ex) {}
00097 throw new RosRuntimeException(e);
00098 }
00099 final PublishMapRequest request = publishMapClient.newMessage();
00100 request.setMapId(mapId);
00101 publishMapClient.call(request, publishServiceResponseListener);
00102 }
00103
00104
00105
00106 @Override
00107 public GraphName getDefaultNodeName() {
00108 return null;
00109 }
00110
00111 public void onStart(final ConnectedNode connectedNode) {
00112 this.connectedNode = connectedNode;
00113 if (function.equals("list")) {
00114 listMaps();
00115 } else if (function.equals("publish")) {
00116 publishMap();
00117 }
00118 }
00119 }
00120