From 9f847c9e755137599c8ed29dc3a14d6e661360b6 Mon Sep 17 00:00:00 2001 From: Quentin Rouland Date: Thu, 1 Dec 2016 10:12:17 +0100 Subject: [PATCH] add mongo controller --- .../controller/MongoDBController.java | 117 ++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 src/main/java/com/camillepradel/movierecommender/controller/MongoDBController.java diff --git a/src/main/java/com/camillepradel/movierecommender/controller/MongoDBController.java b/src/main/java/com/camillepradel/movierecommender/controller/MongoDBController.java new file mode 100644 index 0000000..9879beb --- /dev/null +++ b/src/main/java/com/camillepradel/movierecommender/controller/MongoDBController.java @@ -0,0 +1,117 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.camillepradel.movierecommender.controller; + +import com.camillepradel.movierecommender.model.Genre; +import com.camillepradel.movierecommender.model.Movie; +import com.camillepradel.movierecommender.model.Rating; +import com.mongodb.BasicDBObject; +import com.mongodb.client.MongoCollection; +import com.mongodb.client.MongoCursor; +import com.mongodb.client.MongoDatabase; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import org.bson.Document; + +/** + * + * @author sidya + */ +public class MongoDBController { + public static ListgetMoviesMongoDBByUser(Integer user_id){ + ArrayList listMovies= new ArrayList(); + MongoCursor cursor; + + MongoDatabase db = MongoDBConnector.getInstance().getConnexion(); + MongoCollection movies = db.getCollection("movies"); + if(user_id != null) + { + MongoCollection users = db.getCollection("users"); + BasicDBObject whereQuery = new BasicDBObject(); + whereQuery.put("_id", user_id); + + cursor = users.find(whereQuery).iterator(); + Document user; + try { + user = cursor.next(); + } catch(Exception e) + { + return new ArrayList(); + } + ArrayList user_movies; + user_movies = (ArrayList) user.get("movies"); + BasicDBObject inQuery = new BasicDBObject(); + List list = new ArrayList(); + for(Document movie : user_movies) + list.add(movie.getInteger("movieid")); + + inQuery.put("_id", new BasicDBObject("$in", list)); + cursor = movies.find(inQuery).iterator(); + } + else + { + cursor = movies.find().iterator(); + } + + while (cursor.hasNext()) { + Document movie = cursor.next(); + String[] genres; + genres = movie.getString("genres").split("\\|"); + ArrayList listGenres = new ArrayList(); + for(String genre : genres){ + listGenres.add(new Genre(1,genre)); + } + + listMovies.add(new Movie(movie.getInteger("_id"), movie.getString("title"), listGenres)); + } + return listMovies; + } + + public static ListgetRatingMongoDBByUser(Integer user_id){ + ArrayList listRating= new ArrayList(); + MongoCursor cursor; + + MongoDatabase db = MongoDBConnector.getInstance().getConnexion(); + MongoCollection users = db.getCollection("users"); + MongoCollection movies = db.getCollection("movies"); + + BasicDBObject whereQuery = new BasicDBObject(); + whereQuery.put("_id", user_id); + + cursor = users.find(whereQuery).iterator(); + Document user; + try { + user = cursor.next(); + } catch(Exception e) + { + return new ArrayList(); + } + + ArrayList user_movies = (ArrayList) user.get("movies"); + BasicDBObject inQuery = new BasicDBObject(); + HashMap list = new HashMap(); + for(Document movie : user_movies) + list.put(movie.getInteger("movieid"),movie.getInteger("rating")); + + inQuery.put("_id", new BasicDBObject("$in", list.keySet())); + cursor = movies.find(inQuery).iterator(); + + while (cursor.hasNext()) { + Document movie = cursor.next(); + String[] genres; + genres = movie.getString("genres").split("\\|"); + ArrayList listGenres = new ArrayList(); + for(String genre : genres){ + listGenres.add(new Genre(1,genre)); + } + + listRating.add(new Rating(new Movie(movie.getInteger("_id"), movie.getString("title"), + listGenres),user_id, list.get(movie.getInteger("_id")))); + } + return listRating; + } +}