Sfoglia il codice sorgente

fixed problems with parsing, added director example

Phil 7 anni fa
parent
commit
498da0dd41

+ 1 - 1
MovieDB/src/data/Actor.java

@@ -6,7 +6,7 @@ public class Actor {
 
 	private int id;
 	private String name;
-	private ArrayList<Movie> movies;
+	private ArrayList<Movie> movies = new ArrayList<>();
 	
 	public void addMovie(Movie m) {
 		movies.add(m);

+ 7 - 0
MovieDB/src/data/DataBase.java

@@ -99,6 +99,13 @@ public class DataBase {
 			return null;
 		}
 		
+		public Director getDirectorByName(String name) {
+			for(Director d : directors) {
+				if(d.getName().equals(name))
+					return d;
+			}
+			return null;
+		}
 		public void addDirector(Director d) {
 			directors.add(d);
 		}

+ 12 - 6
MovieDB/src/data/DataParser.java

@@ -29,21 +29,27 @@ public class DataParser {
 				switch(msg.substring(11)) {
 				case " \"movie_id\",\"movie_title\",\"movie_plot\",\"genre_name\",\"movie_released\",\"movie_imdbVotes\",\"movie_imdbRating\"":
 					readmode = mode.MOVIE;
+					System.out.println("mode movie set");
 					break;
-				case "\"actor_id\",\"actor_name\"":
+				case " \"actor_id\",\"actor_name\"":
 					readmode = mode.ACTOR;
+					System.out.println("mode actor set");
 					break;
-				case "\"director_id\",\"director_name\"":
+				case " \"director_id\",\"director_name\"":
 					readmode = mode.DIRECTOR;
+					System.out.println("mode director set");
 					break;
-				case "\"actor_id\",\"movie_id\"":
+				case " \"actor_id\",\"movie_id\"":
 					readmode = mode.ACTING;
+					System.out.println("mode scting set");
 					break;
-				case "\"director_id\",\"movie_id\"":
+				case " \"director_id\",\"movie_id\"":
 					readmode = mode.DIRECTING;
+					System.out.println("mode "+readmode+"set");
 					break;
-				case "\"user_name\",\"rating\",\"movie_id\"":
+				case " \"user_name\",\"rating\",\"movie_id\"":
 					readmode = mode.USER;
+					System.out.println("mode "+readmode+"set");
 					break;
 				default:
 					readmode = mode.NONE;
@@ -73,7 +79,7 @@ public class DataParser {
 				case DIRECTOR:
 					Director d = new Director();
 					d.setId(Integer.valueOf(data[0]));
-					d.setName(data[1]);
+					d.setName(data[1].trim());
 					db.addDirector(d);
 					break;
 				case ACTING:

+ 6 - 0
MovieDB/src/data/Movie.java

@@ -64,4 +64,10 @@ public class Movie {
 	public void setVotes(int votes) {
 		this.votes = votes;
 	}
+
+	public ArrayList<Director> getDirectors() {
+		return directors;
+	}
+	
+	
 }

+ 1 - 1
MovieDB/src/data/User.java

@@ -5,7 +5,7 @@ import java.util.HashMap;
 public class User {
 	
 	private String name;
-	private HashMap<Integer,Float> ratings;
+	private HashMap<Integer,Float> ratings = new HashMap<>();
 	
 	public User(String name) {
 		this.name = name;

+ 33 - 0
MovieDB/src/logic/Recomendations.java

@@ -6,6 +6,7 @@ import java.util.HashMap;
 
 import data.Actor;
 import data.DataBase;
+import data.Director;
 import data.Movie;
 import data.comperators.MovieComparatorRating;
 
@@ -21,6 +22,38 @@ public class Recomendations {
 			if(m.getActors().contains(a)) {
 				out.add(m);
 				if(out.size() >= limit)
+					Collections.sort(out, new MovieComparatorRating());
+					return out;
+			}
+		}
+		Collections.sort(out, new MovieComparatorRating());
+		return out;
+	}
+	
+	public ArrayList<Movie> withDirector(Director d , int limit){
+		if(limit > 200)
+			limit = 200;
+		ArrayList<Movie> out = new ArrayList<>();
+		for(Movie m : db.getMovies()) {
+			if(m.getDirectors().contains(d)) {
+				out.add(m);
+				if(out.size() >= limit)
+					Collections.sort(out, new MovieComparatorRating());
+					return out;
+			}
+		}
+		Collections.sort(out, new MovieComparatorRating());
+		return out;
+	}
+	public ArrayList<Movie> withGenre(String genre, int limit){
+		if(limit > 200)
+			limit = 200;
+		ArrayList<Movie> out = new ArrayList<>();
+		for(Movie m : db.getMovies()) {
+			if(m.getGenre().equals(genre)) {
+				out.add(m);
+				if(out.size() >= limit)
+					Collections.sort(out, new MovieComparatorRating());
 					return out;
 			}
 		}

+ 15 - 1
MovieDB/src/main/Main.java

@@ -1,5 +1,7 @@
 package main;
 
+import java.util.ArrayList;
+
 import data.DataBase;
 import data.DataParser;
 import data.Movie;
@@ -21,14 +23,20 @@ public class Main {
 				case "--test":
 					break;
 				case "--genre":
+					for(Movie m : rec.withGenre(s.substring(s.indexOf("=")+1).replaceAll("'", ""), 20)) {
+						System.out.println(m);
+					}
 					break;
 				case "--actor":
-					DataBase.getInstance().printMovies();
+					//DataBase.getInstance().printMovies();
 					for(Movie m : rec.withActor(DataBase.getInstance().getActorByName(s.substring(s.indexOf("=")+1).replaceAll("'", "")), 20)) {
 						System.out.println(m);
 					}
 					break;
 				case "--director":
+					for(Movie m : rec.withDirector((DataBase.getInstance().getDirectorByName(s.substring(s.indexOf("=")+1).replaceAll("'", ""))), 20)) {
+						System.out.println(m);
+					}
 					break;
 				case "--film":
 					break;
@@ -49,4 +57,10 @@ public class Main {
 		}
 	}
 	
+	private void printList(ArrayList<Object> list) {
+		for(Object o : list) {
+			System.out.println(o);
+		}
+	}
+	
 }