Go to the documentation of this file.00001 package com.github.rosjava.android_apps.map_nav;
00002
00003 import android.content.Context;
00004
00005 import com.github.rosjava.android_remocons.common_tools.apps.AppRemappings;
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 import world_canvas_msgs.ListMaps;
00017 import world_canvas_msgs.ListMapsRequest;
00018 import world_canvas_msgs.ListMapsResponse;
00019 import world_canvas_msgs.PublishMap;
00020 import world_canvas_msgs.PublishMapRequest;
00021 import world_canvas_msgs.PublishMapResponse;
00022
00023 public class MapManager extends AbstractNodeMain {
00024
00025 private ConnectedNode connectedNode;
00026 private String function;
00027 private ServiceResponseListener<ListMapsResponse> listServiceResponseListener;
00028 private ServiceResponseListener<PublishMapResponse> publishServiceResponseListener;
00029
00030 private String mapId;
00031 private String listSrvName;
00032 private String pubSrvName;
00033 private NameResolver nameResolver;
00034 private boolean nameResolverSet = false;
00035
00036 public MapManager(final Context context, final AppRemappings remaps) {
00037
00038 listSrvName = remaps.get(context.getString(R.string.list_maps_srv));
00039 pubSrvName = remaps.get(context.getString(R.string.publish_map_srv));
00040 }
00041
00042 public void setMapId(String mapId) {
00043 this.mapId = mapId;
00044 }
00045
00046 public void setNameResolver(NameResolver newNameResolver) {
00047 nameResolver = newNameResolver;
00048 nameResolverSet = true;
00049 }
00050
00051 public void setFunction(String function) {
00052 this.function = function;
00053 }
00054
00055 public void setListService(
00056 ServiceResponseListener<ListMapsResponse> listServiceResponseListener) {
00057 this.listServiceResponseListener = listServiceResponseListener;
00058 }
00059
00060 public void setPublishService(
00061 ServiceResponseListener<PublishMapResponse> publishServiceResponseListener) {
00062 this.publishServiceResponseListener = publishServiceResponseListener;
00063 }
00064
00065 public void listMaps() {
00066 ServiceClient<ListMapsRequest, ListMapsResponse> listMapsClient;
00067 try
00068 {
00069 if (nameResolverSet)
00070 {
00071 listSrvName = nameResolver.resolve(listSrvName).toString();
00072 }
00073 listMapsClient = connectedNode.newServiceClient(listSrvName, ListMaps._TYPE);
00074 } catch (ServiceNotFoundException e) {
00075 try {
00076 Thread.sleep(1000L);
00077 listMaps();
00078 return;
00079 } catch (Exception ex) {}
00080
00081 e.printStackTrace();
00082 throw new RosRuntimeException(e);
00083 }
00084 final ListMapsRequest request = listMapsClient.newMessage();
00085 listMapsClient.call(request, listServiceResponseListener);
00086 }
00087
00088 public void publishMap() {
00089 ServiceClient<PublishMapRequest, PublishMapResponse> publishMapClient;
00090
00091 try
00092 {
00093 if (nameResolverSet)
00094 {
00095 pubSrvName = nameResolver.resolve(pubSrvName).toString();
00096 }
00097 publishMapClient = connectedNode.newServiceClient(pubSrvName, PublishMap._TYPE);
00098 } catch (ServiceNotFoundException e) {
00099 try {
00100 Thread.sleep(1000L);
00101 listMaps();
00102 return;
00103 } catch (Exception ex) {}
00104 throw new RosRuntimeException(e);
00105 }
00106 final PublishMapRequest request = publishMapClient.newMessage();
00107 request.setMapId(mapId);
00108 publishMapClient.call(request, publishServiceResponseListener);
00109 }
00110
00111
00112
00113 @Override
00114 public GraphName getDefaultNodeName() {
00115 return null;
00116 }
00117
00118 public void onStart(final ConnectedNode connectedNode) {
00119 this.connectedNode = connectedNode;
00120 if (function.equals("list")) {
00121 listMaps();
00122 } else if (function.equals("publish")) {
00123 publishMap();
00124 }
00125 }
00126 }
00127