Search in sources :

Example 1 with Status

use of com.google.samples.apps.iosched.server.userdata.db.ReservedSession.Status in project iosched by google.

the class SyncReservationsQueueWorker method doGet.

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    ServletContext context = getServletContext();
    String serviceAccountKey = context.getInitParameter("accountKey");
    LOG.info("accountKey: " + serviceAccountKey);
    InputStream serviceAccount = context.getResourceAsStream(serviceAccountKey);
    LOG.info("serviceAccount: " + serviceAccount);
    String accessToken = firebaseWrapper.getAccessToken(serviceAccount);
    if (accessToken == null) {
        LOG.severe("Unable to get access token");
        return;
    }
    // Get all existing reservations from RTDB.
    JsonArray firebaseReservations = getFirebaseReservations(accessToken);
    // For each user update reservations in datastore with reservations from RTDB.
    for (int i = 0; firebaseReservations != null && i < firebaseReservations.size(); i++) {
        JsonObject jReservation = firebaseReservations.get(i).getAsJsonObject();
        String userId = jReservation.get("userId").getAsString();
        try {
            // Deserialize reservations from RTDB.
            Map<String, ReservedSession> reservedSessions = new HashMap<>();
            if (jReservation.has(RESERVATIONS_KEY)) {
                JsonArray jUserReservations = jReservation.get(RESERVATIONS_KEY).getAsJsonArray();
                for (int j = 0; j < jUserReservations.size(); j++) {
                    JsonObject jUserReservation = jUserReservations.get(j).getAsJsonObject();
                    String sessionId = jUserReservation.get("sessionId").getAsString();
                    Status status = mapToDatastoreStatus(jUserReservation.get("status").getAsString());
                    ReservedSession reservedSession = new ReservedSession(sessionId, status, System.currentTimeMillis());
                    reservedSessions.put(sessionId, reservedSession);
                }
            }
            // Update reservations in datastore with those from RTDB.
            UserData userData = ofy().load().type(UserData.class).id(userId).safe();
            for (String sessionId : userData.reservedSessions.keySet()) {
                if (reservedSessions.containsKey(sessionId)) {
                    userData.reservedSessions.put(sessionId, reservedSessions.get(sessionId));
                    reservedSessions.remove(sessionId);
                } else {
                    // Mark DELETED if reservation does not exist in RTDB.
                    userData.reservedSessions.get(sessionId).status = Status.DELETED;
                    userData.reservedSessions.get(sessionId).timestampUTC = System.currentTimeMillis();
                }
            }
            // Add reservations from RTDB that do not exist in datastore.
            for (ReservedSession reservedSession : reservedSessions.values()) {
                userData.reservedSessions.put(reservedSession.sessionID, reservedSession);
            }
            ofy().save().entity(userData).now();
        } catch (NotFoundException e) {
            LOG.severe(e.getMessage());
        }
    }
}
Also used : JsonArray(com.google.gson.JsonArray) Status(com.google.samples.apps.iosched.server.userdata.db.ReservedSession.Status) ReservedSession(com.google.samples.apps.iosched.server.userdata.db.ReservedSession) HashMap(java.util.HashMap) UserData(com.google.samples.apps.iosched.server.userdata.db.UserData) InputStream(java.io.InputStream) ServletContext(javax.servlet.ServletContext) JsonObject(com.google.gson.JsonObject) NotFoundException(com.googlecode.objectify.NotFoundException)

Aggregations

JsonArray (com.google.gson.JsonArray)1 JsonObject (com.google.gson.JsonObject)1 ReservedSession (com.google.samples.apps.iosched.server.userdata.db.ReservedSession)1 Status (com.google.samples.apps.iosched.server.userdata.db.ReservedSession.Status)1 UserData (com.google.samples.apps.iosched.server.userdata.db.UserData)1 NotFoundException (com.googlecode.objectify.NotFoundException)1 InputStream (java.io.InputStream)1 HashMap (java.util.HashMap)1 ServletContext (javax.servlet.ServletContext)1