Go to the documentation of this file.00001 package com.github.rosjava.android_apps.map_manager;
00002
00003 import map_store.DeleteMap;
00004 import map_store.DeleteMapRequest;
00005 import map_store.DeleteMapResponse;
00006 import map_store.ListMaps;
00007 import map_store.ListMapsRequest;
00008 import map_store.ListMapsResponse;
00009 import map_store.PublishMap;
00010 import map_store.PublishMapRequest;
00011 import map_store.PublishMapResponse;
00012 import map_store.RenameMap;
00013 import map_store.RenameMapRequest;
00014 import map_store.RenameMapResponse;
00015
00016 import org.ros.exception.RosRuntimeException;
00017 import org.ros.exception.ServiceNotFoundException;
00018 import org.ros.namespace.GraphName;
00019 import org.ros.namespace.NameResolver;
00020 import org.ros.node.AbstractNodeMain;
00021 import org.ros.node.ConnectedNode;
00022 import org.ros.node.service.ServiceClient;
00023 import org.ros.node.service.ServiceResponseListener;
00024
00025
00026 public class MapManager extends AbstractNodeMain {
00027
00028 private ConnectedNode connectedNode;
00029 private String function;
00030 private ServiceResponseListener<ListMapsResponse> listServiceResponseListener;
00031 private ServiceResponseListener<PublishMapResponse> publishServiceResponseListener;
00032 private ServiceResponseListener<DeleteMapResponse> deleteServiceResponseListener;
00033 private ServiceResponseListener<RenameMapResponse> renameServiceResponseListener;
00034 private String mapId;
00035 private String mapName;
00036 private NameResolver nameResolver;
00037 private boolean nameResolverSet = false;
00038
00039 public MapManager() {
00040 }
00041
00042 public void setMapId(String mapId) {
00043 this.mapId = mapId;
00044 }
00045
00046 public void setMapName(String mapName) {
00047 this.mapName = mapName;
00048 }
00049
00050 public void setFunction(String function) {
00051 this.function = function;
00052 }
00053
00054 public void setListService(
00055 ServiceResponseListener<ListMapsResponse> listServiceResponseListener) {
00056 this.listServiceResponseListener = listServiceResponseListener;
00057 }
00058
00059 public void setPublishService(
00060 ServiceResponseListener<PublishMapResponse> publishServiceResponseListener) {
00061 this.publishServiceResponseListener = publishServiceResponseListener;
00062 }
00063
00064 public void setDeleteService(
00065 ServiceResponseListener<DeleteMapResponse> deleteServiceResponseListener) {
00066 this.deleteServiceResponseListener = deleteServiceResponseListener;
00067 }
00068
00069 public void setRenameService(
00070 ServiceResponseListener<RenameMapResponse> renameServiceResponseListener) {
00071 this.renameServiceResponseListener = renameServiceResponseListener;
00072 }
00073
00074 public void setNameResolver(NameResolver newNameResolver) {
00075 nameResolver = newNameResolver;
00076 nameResolverSet = true;
00077 }
00078
00079 public void listMaps() {
00080 ServiceClient<ListMapsRequest, ListMapsResponse> listMapsClient;
00081 try {
00082 String srvName = "list_maps";
00083 if (nameResolverSet)
00084 {
00085 srvName = nameResolver.resolve(srvName).toString();
00086 }
00087 listMapsClient = connectedNode.newServiceClient(srvName, ListMaps._TYPE);
00088 } catch (ServiceNotFoundException e) {
00089 try {
00090 Thread.sleep(1000L);
00091 listMaps();
00092 return;
00093 } catch (Exception ex) {}
00094
00095 e.printStackTrace();
00096 throw new RosRuntimeException(e);
00097 }
00098 final ListMapsRequest request = listMapsClient.newMessage();
00099 listMapsClient.call(request, listServiceResponseListener);
00100 }
00101
00102 public void publishMap() {
00103 ServiceClient<PublishMapRequest, PublishMapResponse> publishMapClient;
00104
00105 try {
00106 String srvName = "publish_map";
00107 if (nameResolverSet)
00108 {
00109 srvName = nameResolver.resolve(srvName).toString();
00110 }
00111 publishMapClient = connectedNode.newServiceClient(srvName, PublishMap._TYPE);
00112 } catch (ServiceNotFoundException e) {
00113 try {
00114 Thread.sleep(1000L);
00115 listMaps();
00116 return;
00117 } catch (Exception ex) {}
00118 throw new RosRuntimeException(e);
00119 }
00120 final PublishMapRequest request = publishMapClient.newMessage();
00121 request.setMapId(mapId);
00122 publishMapClient.call(request, publishServiceResponseListener);
00123 }
00124
00125 public void deleteMap() {
00126 ServiceClient<DeleteMapRequest, DeleteMapResponse> deleteMapClient;
00127
00128 try {
00129 String srvName = "delete_map";
00130 if (nameResolverSet)
00131 {
00132 srvName = nameResolver.resolve(srvName).toString();
00133 }
00134 deleteMapClient = connectedNode.newServiceClient(srvName, DeleteMap._TYPE);
00135 } catch (ServiceNotFoundException e) {
00136 throw new RosRuntimeException(e);
00137 }
00138 final DeleteMapRequest request = deleteMapClient.newMessage();
00139 request.setMapId(mapId);
00140 deleteMapClient.call(request, deleteServiceResponseListener);
00141 }
00142
00143 public void renameMap() {
00144 ServiceClient<RenameMapRequest, RenameMapResponse> renameMapClient;
00145
00146 try {
00147 String srvName = "rename_map";
00148 if (nameResolverSet)
00149 {
00150 srvName = nameResolver.resolve(srvName).toString();
00151 }
00152 renameMapClient = connectedNode.newServiceClient(srvName, RenameMap._TYPE);
00153 } catch (ServiceNotFoundException e) {
00154 throw new RosRuntimeException(e);
00155 }
00156 final RenameMapRequest request = renameMapClient.newMessage();
00157 request.setMapId(mapId);
00158 request.setNewName(mapName);
00159 renameMapClient.call(request, renameServiceResponseListener);
00160 }
00161
00162 @Override
00163 public GraphName getDefaultNodeName() {
00164 return null;
00165 }
00166
00167 public void onStart(final ConnectedNode connectedNode) {
00168 this.connectedNode = connectedNode;
00169 if (function.equals("list")) {
00170 listMaps();
00171 } else if (function.equals("publish")) {
00172 publishMap();
00173 } else if (function.equals("delete")) {
00174 deleteMap();
00175 } else if (function.equals("rename")) {
00176 renameMap();
00177 }
00178 }
00179 }