xbdd.webapp.resource.presence.Presence.java Source code

Java tutorial

Introduction

Here is the source code for xbdd.webapp.resource.presence.Presence.java

Source

/**
 * Copyright (C) 2015 Orion Health (Orchestral Development Ltd)
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *         http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package xbdd.webapp.resource.presence;

import java.util.Calendar;
import java.util.Date;

import javax.inject.Inject;
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.BeanParam;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.core.Context;

import xbdd.webapp.factory.MongoDBAccessor;
import xbdd.webapp.util.Coordinates;
import xbdd.webapp.util.Field;

import com.mongodb.BasicDBList;
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;

@Path("/rest/presence")
public class Presence {

    private MongoDBAccessor client;

    @Inject
    public void setMongoClient(final MongoDBAccessor client) {
        this.client = client;
    }

    @POST
    @Path("/{product}/{major}.{minor}.{servicePack}/{build}/{featureId}")
    public DBObject addPresence(@BeanParam final Coordinates coordinates,
            @PathParam("featureId") final String featureId, @Context final HttpServletRequest req) {
        try {
            final DB db = this.client.getDB("bdd");
            final DBCollection collection = db.getCollection("presence");
            final BasicDBObject query = new BasicDBObject("coordinates",
                    coordinates.getObject(Field.PRODUCT, Field.VERSION, Field.BUILD).append("featureId", featureId))
                            .append("_id", coordinates.getProduct() + "/" + coordinates.getVersionString() + "/"
                                    + coordinates.getBuild() + "/" + featureId);
            final Date now = Calendar.getInstance().getTime();
            collection.update(query,
                    new BasicDBObject("$set",
                            new BasicDBObject("users." + req.getRemoteUser(), now).append("lastUpdated", now)),
                    true, false);
            final DBObject newPresence = collection.findOne(query);
            newPresence.put("currentUser", req.getRemoteUser());
            return newPresence;
        } catch (final Throwable th) {
            th.printStackTrace();
            return null;
        }
    }

    @GET
    @Path("/{product}/{major}.{minor}.{servicePack}/{build}/{featureId}")
    public DBObject getPresence(@BeanParam final Coordinates coordinates,
            @PathParam("featureId") final String featureId, @Context final HttpServletRequest req) {
        try {
            final DB db = this.client.getDB("bdd");
            final DBCollection collection = db.getCollection("presence");
            final BasicDBObject query = new BasicDBObject("coordinates",
                    coordinates.getObject(Field.PRODUCT, Field.VERSION, Field.BUILD).append("featureId", featureId))
                            .append("_id", coordinates.getProduct() + "/" + coordinates.getVersionString() + "/"
                                    + coordinates.getBuild() + "/" + featureId);
            final DBObject newPresence = collection.findOne(query);
            newPresence.put("currentUser", req.getRemoteUser());
            return newPresence;
        } catch (final Throwable th) {
            th.printStackTrace();
            return null;
        }
    }

    @GET
    @Path("/{product}/{major}.{minor}.{servicePack}/{build}")
    public DBObject getPresencesForBuild(@BeanParam final Coordinates coordinates) {
        try {
            final DB db = this.client.getDB("bdd");
            final DBCollection collection = db.getCollection("presence");
            final BasicDBObject query = coordinates.getQueryObject(Field.PRODUCT, Field.VERSION, Field.BUILD);
            final BasicDBList presencesForBuild = new BasicDBList();
            final DBCursor cursor = collection.find(query);
            while (cursor.hasNext()) {
                presencesForBuild.add(cursor.next());
            }
            return presencesForBuild;
        } catch (final Throwable th) {
            th.printStackTrace();
            return null;
        }
    }

    @DELETE
    @Path("/{product}/{major}.{minor}.{servicePack}/{build}/{featureId}")
    public DBObject deletePresence(@BeanParam final Coordinates coordinates,
            @PathParam("featureId") final String featureId, @Context final HttpServletRequest req) {
        try {
            final DB db = this.client.getDB("bdd");
            final DBCollection collection = db.getCollection("presence");
            final BasicDBObject query = new BasicDBObject("coordinates",
                    coordinates.getObject(Field.PRODUCT, Field.VERSION, Field.BUILD).append("featureId", featureId))
                            .append("_id", coordinates.getProduct() + "/" + coordinates.getVersionString() + "/"
                                    + coordinates.getBuild() + "/" + featureId);
            collection.update(query,
                    new BasicDBObject("$unset", new BasicDBObject("users." + req.getRemoteUser(), 1)), true, false);
            final DBObject newPresence = collection.findOne(query);
            newPresence.put("currentUser", req.getRemoteUser());
            return newPresence;
        } catch (final Throwable th) {
            th.printStackTrace();
            return null;
        }
    }
}