Skip to content

Commit

Permalink
Provider changes for field day
Browse files Browse the repository at this point in the history
Added firestore backend.  Rejiggered how mobile device & and
vehicle in manifest link up.   Mobile device now only
takes in a 'code name'.   That code name is the name
of the vehicle in the manifest.

Multiple manifests uploads are supported.

Change-Id: Ie9b8bf14afb4546c8009a34090cf13b83d21c2e5
  • Loading branch information
greghutch committed Oct 20, 2022
1 parent 583f3f0 commit cf98de1
Show file tree
Hide file tree
Showing 15 changed files with 220 additions and 251 deletions.
2 changes: 1 addition & 1 deletion android_driverapp_samples/app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@

<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="AIzaSyBzrZvnYrnNFmthWSe32gnOqYVMedyEIIc"/>
android:value="*****UPDATE_WITH_ANDROID_API_KEY*****"/>

<!-- https://issuetracker.google.com/issues/79478779 -->
<uses-library android:name="org.apache.http.legacy" android:required="false"/>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,15 +66,15 @@ public void saveProviderId(String providerId) {
}

public String getProviderId() {
return sharedPreferences.getString(PROVIDER_ID_KEY, "lmfs-field-day");
return sharedPreferences.getString(PROVIDER_ID_KEY, "<your project id>");
}

public void saveBackendUrl(String backendUrl) {
sharedPreferences.edit().putString(BACKEND_URL_KEY, backendUrl).apply();
}

public String getBackendUrl() {
return sharedPreferences.getString(BACKEND_URL_KEY, "http://lmfs-field-day.uc.r.appspot.com");
return sharedPreferences.getString(BACKEND_URL_KEY, "http://<your app engine path.appspot.com>");
}

public void saveClientId(String clientId) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -255,7 +255,7 @@ private void onArrive() {
public void onDestroy() {
super.onDestroy();
googleMap.clear();
vehicleReporter.disableLocationTracking();
//vehicleReporter.disableLocationTracking();
DeliveryDriverApi.clearInstance();
navigator.stopGuidance();
navigator.getSimulator().unsetUserLocation();
Expand Down
8 changes: 0 additions & 8 deletions android_driverapp_samples/local.properties

This file was deleted.

5 changes: 3 additions & 2 deletions backend/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -84,9 +84,10 @@ dependencies {
testImplementation 'com.google.appengine:appengine-tools-sdk:+'
}

// XXX these fail with stateful backend changes
// Always run unit tests
appengineDeploy.dependsOn test
appengineStage.dependsOn test
//appengineDeploy.dependsOn test
//appengineStage.dependsOn test

appengine { // App Engine tasks configuration
// The run section is only used if you're using App Engine Standard
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,7 @@ public void serveUpload(InputStream fileContent, HttpServletResponse response)
// At this point, the backend config has been read into memory. Loop through its
// contents and invoke the corresponding Fleet Engine APIs.
for (BackendConfig.Manifest m : backendConfig.manifests) {
m.expectedClientId = m.vehicle.vehicleId;
m.vehicle.vehicleId = BackendConfigUtils.getTimestampedId(m.vehicle.vehicleId);

for (BackendConfig.Task t : m.tasks) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ public void doGet(HttpServletRequest request, HttpServletResponse response) thro
return;
}
String vehicleId = request.getPathInfo().substring(1);
DeliveryVehicle vehicle = servletState.getDeliveryVehicleById(vehicleId);
DeliveryVehicle vehicle = servletState.getDeliveryVehicleById(deliveryService, vehicleId);
if (vehicle != null) {
ServletUtils.writeProtoJson(responseWriter, vehicle);
} else {
Expand All @@ -81,6 +81,8 @@ public void doGet(HttpServletRequest request, HttpServletResponse response) thro

@Override
public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
DeliveryServiceGrpc.DeliveryServiceBlockingStub deliveryService =
grpcServiceProvider.getAuthenticatedDeliveryService();
if (request.getPathInfo() == null) {
logger.log(
Level.WARNING,
Expand All @@ -90,7 +92,7 @@ public void doPost(HttpServletRequest request, HttpServletResponse response) thr
}
String vehicleId = request.getPathInfo().substring(1);

DeliveryVehicle vehicle = servletState.getDeliveryVehicleById(vehicleId);
DeliveryVehicle vehicle = servletState.getDeliveryVehicleById(deliveryService, vehicleId);
if (vehicle == null) {
logger.log(
Level.WARNING,
Expand Down Expand Up @@ -160,13 +162,9 @@ public void doPut(HttpServletRequest request, HttpServletResponse response) thro
response.setCharacterEncoding("UTF-8");
PrintWriter responseWriter = response.getWriter();

// As above, we're using the IP address to identify the client.
String clientIdentifier = request.getRemoteAddr();

String vehicleId = request.getPathInfo().substring(1);
DeliveryVehicle vehicle =
servletState.getDeliveryVehicleById(
servletState.getDeliveryVehicleMapByClient(clientIdentifier));
servletState.getDeliveryVehicleById(deliveryService, vehicleId);

if (vehicle == null) {
logger.log(Level.WARNING, "The client is not assigned to any vehicle");
Expand Down
74 changes: 25 additions & 49 deletions backend/src/main/java/com/example/backend/ManifestServlet.java
Original file line number Diff line number Diff line change
Expand Up @@ -72,9 +72,10 @@ public void doGet(HttpServletRequest request, HttpServletResponse response) thro
return;
}
String vehicleId = request.getPathInfo().substring(1);
BackendConfig.Manifest manifest = servletState.getManifest(vehicleId);
String manifest = servletState.getManifestDS(vehicleId);
if (manifest != null) {
responseWriter.print(BackendConfigGsonProvider.get().toJson(manifest));
//responseWriter.print(BackendConfigGsonProvider.get().toJson(manifest));
responseWriter.print(manifest);
responseWriter.flush();
} else {
logger.log(
Expand Down Expand Up @@ -108,6 +109,8 @@ public void doGet(HttpServletRequest request, HttpServletResponse response) thro
*/
@Override
public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
DeliveryServiceGrpc.DeliveryServiceBlockingStub authenticatedDeliveryService =
grpcServiceProvider.getAuthenticatedDeliveryService();
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
PrintWriter responseWriter = response.getWriter();
Expand Down Expand Up @@ -167,20 +170,18 @@ public void doPost(HttpServletRequest request, HttpServletResponse response) thr
}
logger.log(Level.INFO, String.format("clientId is %s", clientId));
try {
vehicle = assignVehicleToClient(clientId, vehicleId);
String assignedVehicleId = assignVehicleToClient(clientId, vehicleId);
String manifestJSON = servletState.getManifestDS(assignedVehicleId);
responseWriter.print(manifestJSON);
} catch (ManifestException e) {
logger.log(Level.WARNING, e.getLogMessage());
ServletUtils.setErrorResponse(response, e.getErrorMessage(), e.getErrorCode());
return;
}
BackendConfig.Manifest manifest =
servletState.getManifest(ServletState.getId(vehicle.getName()));
responseWriter.print(BackendConfigGsonProvider.get().toJson(manifest));
return;
}

// Otherwise, a vehicleId is required.
vehicle = servletState.getDeliveryVehicleById(vehicleId);
vehicle = servletState.getDeliveryVehicleById(authenticatedDeliveryService, vehicleId);
if (vehicle == null) {
logger.log(
Level.WARNING,
Expand Down Expand Up @@ -241,57 +242,28 @@ public void doPost(HttpServletRequest request, HttpServletResponse response) thr
* @return The assigned vehicle.
* @throws ManifestException if the vehicle could not be assigned to the client.
*/
private DeliveryVehicle assignVehicleToClient(String clientId, String vehicleId)
private String assignVehicleToClient(String clientId, String vehicleId)
throws ManifestException {
// Assignment does not require a vehicleId; but if a vehicleId is supplied, attempt to use it.
String existingVehicleId = servletState.getDeliveryVehicleMapByClient(clientId);
DeliveryVehicle vehicle;
String assignedVehicleId = vehicleId;

if (existingVehicleId != null) {
// If the client is already assigned another vehicle...
if (!vehicleId.equals("") && !vehicleId.equals(existingVehicleId)) {
throw new ManifestException(
"The client attempted to re-request another vehicle",
"You cannot request different vehicles.",
403);
}

vehicle = servletState.getDeliveryVehicleById(existingVehicleId);
if (vehicle == null) {
if (vehicleId.equals("")) {
assignedVehicleId = servletState.lookupAndAssignVehicle(clientId);
if (assignedVehicleId == null) {
throw new ManifestException(
"The client\'s assigned vehicle doesn't exist.",
"The requested vehicle doesn't exist.",
404);
}
} else if (vehicleId.equals("")) {
// If vehicleId is null, assign the next available vehicle
vehicle = servletState.getAnyAvailableDeliveryVehicle();
if (vehicle == null) {
throw new ManifestException(
"The client requested a vehicle for assignment, but none were available.",
"The client requested a vehicle matching " + clientId + " for assignment, but none were available.",
"There are no available vehicles for assignment.",
404);
}
return assignedVehicleId;
} else {
// If vehicleId is not null, attempt to assign that vehicle
vehicle = servletState.getDeliveryVehicleById(vehicleId);
if (vehicle == null) {
if (!servletState.isDeliveryVehicleAssigned(vehicleId)) {
throw new ManifestException(
"The client attempted to request a non-existent vehicle",
"The requested vehicle doesn't exist.",
404);
}
if (servletState.isDeliveryVehicleAssigned(vehicleId)) {
throw new ManifestException(
"The client attempted to request a vehicle that is currently assigned",
"The requested vehicle is currently assigned.",
"The client attempted to request a non-existent/assigned vehicle", "Invalid vehicleID",
403);
}
return vehicleId;
}

// We have a vehicle available for assignment, or is already assigned to the same vehicle.
servletState.addClientToDeliveryVehicleMap(clientId, vehicle);
return vehicle;
}

/**
Expand All @@ -304,6 +276,8 @@ private DeliveryVehicle assignVehicleToClient(String clientId, String vehicleId)
*/
private DeliveryVehicle updateVehicleStopState(DeliveryVehicle vehicle, String stopStateName)
throws ManifestException {
String vehicleId = ServletState.getId(vehicle.getName());
BackendConfig.Manifest manifest = servletState.getManifest(vehicleId);
VehicleStop.State state;
switch (stopStateName) {
case "STATE_UNSPECIFIED":
Expand Down Expand Up @@ -337,14 +311,14 @@ private DeliveryVehicle updateVehicleStopState(DeliveryVehicle vehicle, String s
grpcServiceProvider.getAuthenticatedDeliveryService();
DeliveryVehicle responseVehicle = authenticatedDeliveryService.updateDeliveryVehicle(updateReq);
servletState.addDeliveryVehicle(responseVehicle);
String vehicleId = ServletState.getId(vehicle.getName());
BackendConfig.StopState backendConfigStopState = BackendConfig.StopState.of(stopStateName);
logger.log(
Level.INFO,
String.format(
"updating manifest with vehicle ID %s and stop state %s",
vehicleId, backendConfigStopState.getValue()));
servletState.getManifest(vehicleId).currentStopState = backendConfigStopState;
manifest.currentStopState = backendConfigStopState;
servletState.updateManifest(manifest);

return responseVehicle;
}
Expand Down Expand Up @@ -397,6 +371,8 @@ private DeliveryVehicle updateVehicleStopList(DeliveryVehicle vehicle, List<Stri
servletState.addDeliveryVehicle(responseVehicle);

manifest.remainingStopIdList = stopIds.toArray(new String[0]);
servletState.updateManifest(manifest);

return responseVehicle;
}

Expand Down
Loading

0 comments on commit cf98de1

Please sign in to comment.