diff --git a/hw1/Ex5/pom.xml b/hw1/Ex5/pom.xml
new file mode 100644
index 0000000..afb6d4a
--- /dev/null
+++ b/hw1/Ex5/pom.xml
@@ -0,0 +1,36 @@
+
+
+4.0.0
+
+ch.usi.inf.pf3.hw1
+ex5
+1.0-SNAPSHOT
+jar
+
+
+ ${artifactId}
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+
+ 1.8
+
+
+
+ org.apache.maven.plugins
+ maven-jar-plugin
+
+
+
+ reentrantrwlock.Main
+
+
+
+
+
+
+
diff --git a/hw1/Ex5/src/reentrantrwlock/CreatorSimulation.java b/hw1/Ex5/src/main/java/reentrantrwlock/CreatorSimulation.java
similarity index 100%
rename from hw1/Ex5/src/reentrantrwlock/CreatorSimulation.java
rename to hw1/Ex5/src/main/java/reentrantrwlock/CreatorSimulation.java
diff --git a/hw1/Ex5/src/reentrantrwlock/Main.java b/hw1/Ex5/src/main/java/reentrantrwlock/Main.java
similarity index 95%
rename from hw1/Ex5/src/reentrantrwlock/Main.java
rename to hw1/Ex5/src/main/java/reentrantrwlock/Main.java
index 4939841..585b61a 100644
--- a/hw1/Ex5/src/reentrantrwlock/Main.java
+++ b/hw1/Ex5/src/main/java/reentrantrwlock/Main.java
@@ -5,7 +5,7 @@ import java.util.Random;
import java.util.ArrayList;
public class Main {
- // Initial number of movies in the catalog
+ // Initial number of movies in the catalog
private static final int INITIAL_SIZE = 500;
// Maximum duration of a movie in the catalog
private static final int MAX_DURATION = 3000;
@@ -21,7 +21,7 @@ public class Main {
MovieCatalog myCatalog = new MovieCatalog();
// Populating the catalog with a initial set of movies
List movies = new ArrayList<>(INITIAL_SIZE);
- Random generator = new Random();
+ Random generator = new Random();
for (int i = 0; i < INITIAL_SIZE; i++) {
movies.add(
new Movie("Movie" + i, generator.nextInt(MAX_DURATION)));
@@ -31,6 +31,7 @@ public class Main {
creator.start();
creator.join();
System.out.println("The movie catalog has been created.");
+
// Starting the threads simulating the movie watchers
for (int i = 0; i < NUM_WATCHERS; i++) {
new Thread(new WatcherSimulation(myCatalog), "Watcher" + i).start();
diff --git a/hw1/Ex5/src/reentrantrwlock/Movie.java b/hw1/Ex5/src/main/java/reentrantrwlock/Movie.java
similarity index 100%
rename from hw1/Ex5/src/reentrantrwlock/Movie.java
rename to hw1/Ex5/src/main/java/reentrantrwlock/Movie.java
diff --git a/hw1/Ex5/src/reentrantrwlock/MovieCatalog.java b/hw1/Ex5/src/main/java/reentrantrwlock/MovieCatalog.java
similarity index 66%
rename from hw1/Ex5/src/reentrantrwlock/MovieCatalog.java
rename to hw1/Ex5/src/main/java/reentrantrwlock/MovieCatalog.java
index 60eb234..52fd513 100644
--- a/hw1/Ex5/src/reentrantrwlock/MovieCatalog.java
+++ b/hw1/Ex5/src/main/java/reentrantrwlock/MovieCatalog.java
@@ -7,6 +7,7 @@ import java.util.TreeMap;
import java.util.ArrayList;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
+import java.util.Iterator;
public class MovieCatalog {
@@ -27,7 +28,11 @@ public class MovieCatalog {
* @return the size of this catalog
*/
public int getSize() {
- // TODO: Implement method getSize
+ int length;
+ rLock.lock();
+ length = movies.size();
+ rLock.unlock();
+ return length;
}
/**
@@ -37,15 +42,23 @@ public class MovieCatalog {
* null if the movie is not in the catalog
*/
public Movie getMovie(String title) {
- //TODO: Implement method getMovie
+ Movie m;
+ rLock.lock();
+ m = movies.get(title);
+ rLock.unlock();
+ return m;
}
/**
* Returns the list of all movie titles in this catalog
- * @return a list of the movie titles in this catalog
+ * @return a list of the movie titles in this catalog
*/
public List getTitles() {
- //TODO: Implement method getTitles
+ List titles;
+ rLock.lock();
+ titles = new ArrayList<>(movies.keySet());
+ rLock.unlock();
+ return titles;
}
/**
@@ -53,7 +66,16 @@ public class MovieCatalog {
* @return a randomly selected movie from this catalog
*/
public Movie getRandomMovie() {
- // TODO: Implement method getRandomMovie
+ Movie m;
+ rLock.lock();
+ final int r = generator.nextInt(movies.size()) - 1;
+ final Iterator it = movies.values().iterator();
+ for (int i = 0; i < r; i++) {
+ it.next();
+ }
+ m = it.next();
+ rLock.unlock();
+ return m;
}
/**
@@ -61,6 +83,8 @@ public class MovieCatalog {
* @param the movie to be added to the catalog
*/
public void addMovie(Movie movie) {
- //TODO: Implement method addMovie
+ wLock.lock();
+ movies.put(movie.getTitle(), movie);
+ wLock.unlock();
}
}
diff --git a/hw1/Ex5/src/reentrantrwlock/PublisherSimulation.java b/hw1/Ex5/src/main/java/reentrantrwlock/PublisherSimulation.java
similarity index 100%
rename from hw1/Ex5/src/reentrantrwlock/PublisherSimulation.java
rename to hw1/Ex5/src/main/java/reentrantrwlock/PublisherSimulation.java
diff --git a/hw1/Ex5/src/reentrantrwlock/ReaderSimulation.java b/hw1/Ex5/src/main/java/reentrantrwlock/ReaderSimulation.java
similarity index 100%
rename from hw1/Ex5/src/reentrantrwlock/ReaderSimulation.java
rename to hw1/Ex5/src/main/java/reentrantrwlock/ReaderSimulation.java
diff --git a/hw1/Ex5/src/reentrantrwlock/WatcherSimulation.java b/hw1/Ex5/src/main/java/reentrantrwlock/WatcherSimulation.java
similarity index 100%
rename from hw1/Ex5/src/reentrantrwlock/WatcherSimulation.java
rename to hw1/Ex5/src/main/java/reentrantrwlock/WatcherSimulation.java