blob: 0f677da831a44e7e06efc9c32fa7b2d9a737a6d0 [file] [log] [blame]
// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package io.v.positioning;
import com.google.appengine.api.datastore.DatastoreService;
import com.google.appengine.api.datastore.DatastoreServiceFactory;
import com.google.appengine.api.datastore.Entity;
import com.google.appengine.api.datastore.FetchOptions;
import com.google.appengine.api.datastore.Query;
import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.IOException;
import java.util.List;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet that is deployed on GAE,handles GET and POST requests from android
* Proximity app to save/retrieve bluetooth properties of nearby devices to/from Datastore.
*/
public class BluetoothProximityServlet extends HttpServlet {
/**
* Processes a GET request for the nearby bluetooth records
*
* @param req The servlet request that includes <b>"androidId"</b> parameter
* @param resp The servlet response with the number of nearby devices
*/
@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
resp.setContentType("text/plain");
DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
Query.Filter propertyFilter = new Query.FilterPredicate("androidId", Query.FilterOperator.EQUAL, req.getParameter("androidId"));
Query q = new Query("bluetooth").setFilter(propertyFilter);
List<Entity> list = datastore.prepare(q).asList(FetchOptions.Builder.withDefaults());
// for now, send the count.
resp.getWriter().println("Number of nearby devices: " + list.size());
}
/**
* Processes a POST request to save nearby devices scanned using Bluetooth
*
* @param req The servlet request that includes JSONObject with properties to be saved
* @param resp The servlet response informing a user if the request was successful or not
*/
@Override
public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
resp.setContentType("text/plain");
BufferedReader br = req.getReader();
try {
JSONObject jo = new JSONObject(br.readLine());
DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
Entity entity = new Entity("bluetooth");
entity.setProperty("androidId", jo.get("androidId"));
entity.setProperty("myMacAddress", jo.get("myMacAddress"));
entity.setProperty("remoteName", jo.get("remoteName"));
entity.setProperty("remoteAddress", jo.get("remoteAddress"));
entity.setProperty("remoteRssi", jo.get("remoteRssi"));
entity.setProperty("deviceTime", jo.get("deviceTime"));
entity.setProperty("serverTime", System.currentTimeMillis());
datastore.put(entity);
resp.getWriter().println("New bluetooth device added.");
} catch (Exception e) {
resp.getWriter().println("Recording failed. " + e);
}
}
}