@@ -0,0 +1,3518 @@
+// Copyright 2019 Google LLC%0A//%0A// Licensed under the Apache License, Version 2.0 (the %22License%22);%0A// you may not use this file except in compliance with the License.%0A// You may obtain a copy of the License at%0A//%0A//     https://www.apache.org/licenses/LICENSE-2.0%0A//%0A// Unless required by applicable law or agreed to in writing, software%0A// distributed under the License is distributed on an %22AS IS%22 BASIS,%0A// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.%0A// See the License for the specific language governing permissions and%0A// limitations under the License.%0A %0Apackage com.google.speech.tools.voxetta;%0A %0Aimport com.google.appengine.api.blobstore.BlobInfo;%0Aimport com.google.appengine.api.blobstore.BlobInfoFactory;%0Aimport com.google.appengine.api.blobstore.BlobKey;%0Aimport com.google.appengine.api.blobstore.BlobstoreService;%0Aimport com.google.appengine.api.blobstore.BlobstoreServiceFactory;%0Aimport com.google.appengine.api.datastore.DatastoreService;%0Aimport com.google.appengine.api.datastore.DatastoreServiceFactory;%0Aimport com.google.appengine.api.datastore.Entity;%0Aimport java.io.IOException;%0Aimport java.io.PrintWriter;%0Aimport java.net.MalformedURLException;%0Aimport java.net.URL;%0Aimport java.util.List;%0Aimport java.util.Map;%0Aimport javax.servlet.annotation.WebServlet;%0Aimport javax.servlet.http.HttpServlet;%0Aimport javax.servlet.http.HttpServletRequest;%0Aimport javax.servlet.http.HttpServletResponse;%0A %0A/** Servlet that handles Utterance Entities. */%0A@WebServlet(%22/upload-utterance%22)%0Apublic class UtteranceUploadServlet extends HttpServlet %7B%0A %0A  private DatastoreService datastoreService = DatastoreServiceFactory.getDatastoreService();%0A  private BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();%0A %0A  @Override%0A  public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException %7B%0A %0A    // Get the URL of the audio file that has been uploaded to Blobstore%0A    String audioKey = getUploadedFileKey(request, %22audio%22);%0A    %0A    Entity utteranceEntity = new Entity(%22Utterance%22);%0A    utteranceEntity.setProperty(%22audioKey%22, audioKey);%0A    utteranceEntity.setProperty(%22userId%22, %22FILLER%22);%0A    utteranceEntity.setProperty(%22promptId%22, %22FILLER%22);%0A    utteranceEntity.setProperty(%22device%22, %22FILLER%22);%0A    utteranceEntity.setProperty(%22age%22, 100);%0A    utteranceEntity.setProperty(%22gender%22, %22FILLER%22);%0A    %0A    // Store the Utterance Entity in Datastore %0A    datastoreService.put(utteranceEntity);%0A %0A    // Redirect back to the main recording page%0A    response.sendRedirect(%22/index.html%22);%0A  %7D%0A %0A  // Returns the BlobKey of an uploaded file, or null if a file was not uploaded%0A  private String getUploadedFileKey(HttpServletRequest request, String formInputElementName) %7B%0A    Map%3CString, List%3CBlobKey%3E%3E blobs = blobstoreService.getUploads(request);%0A    List%3CBlobKey%3E blobKeys = blobs.get(formInputElementName);%0A%0A    // Return null if an audio file was not uploaded%0A    if (blobKeys == null %7C%7C blobKeys.isEmpty()) %7B%0A      return null; %0A    %7D%0A %0A    // Return the BlobKey of the uploaded file%0A    return blobKeys.get(0).getKeyString();%0A  %7D%0A%0A  /** %0A  * Allow the servlet's Datastore service to be set for mocking purposes%0A  */%0A  public void setDatastoreService(DatastoreService inputService) %7B%0A      datastoreService = inputService; %0A  %7D%0A%0A  /** %0A  * Allow the servlet's Blobstore service to be set for mocking purposes%0A  */%0A  public void setBlobstoreService(BlobstoreService inputService) %7B%0A      blobstoreService = inputService; %0A  %7D%0A%7D%0A

add servlet that uploads utterance data into Datastore