media-rental-manager / MEDIA RENTAL MANAGER / src / mediaRentalManager / MediaRentalManager.java
MediaRentalManager.java
Raw
package mediaRentalManager;

import java.util.*;

public class MediaRentalManager implements MediaRentalManagerInt {
	
	
	
	private ArrayList<Customer> customers;
	private ArrayList<Media> media;

	public MediaRentalManager() {
		customers = new ArrayList<Customer>();
		media = new ArrayList<Media>();
	}
	
	public void addMovie(String title, int copiesAvailable, String rating) { //DO NOT TOUCH!
		media.add(new Movie(title, copiesAvailable, rating));
	}
	
	public String getAllMediaInfo() { //DO NOT TOUCH!!

		Collections.sort(media);

		String mediaInfo = "***** Media Information *****\n";

		for (Media media : media) {
			mediaInfo += media.toString() + "\n";
		}

		return mediaInfo;
	}

	public void addCustomer(String name, String address, String plan) { //DO NOT TOUCH!
		customers.add(new Customer(name, address, plan));
	}

	public void setLimitedPlanLimit(int value) { //DO NOT TOUCH!!
		Customer.setMediaLimit(value);
	}

	public String getAllCustomersInfo() { //DO NOT TOUCH!!
		Collections.sort(customers);

		String customerInformation = "***** Customers' Information *****\n";

		for (Customer customer : customers) {
			customerInformation += customer.toString() + "\n";
		}

		return customerInformation;
	}

	

	public boolean addToQueue(String customerName, String mediaTitle) { //DO NOT TOUCH!!
		for (Customer customer : customers) {
			if (customer.getName().equals(customerName)) {
				if (customer.getQueue().contains(mediaTitle)) {
					return false;
				} else {
					customer.addQueue(mediaTitle);
					return true;
				}
			}
		}
		return false;
	}
	
	private boolean availableCopies(String mediaTitle) {
		for (Media media : media) {
			if (media.getTitle().equals(mediaTitle)) {
				if (media.getNumberOfCopies() > 0) {
					return true;
				}
			}
		}
		return false;
	}

	public boolean removeFromQueue(String customerName, String mediaTitle) { //DO NOT TOUCH!!
		for (Customer customer : customers) {
			if (customer.getName().equals(customerName)) {
				if (!customer.getQueue().contains(mediaTitle)) {
					return false;
				} else {
					customer.removeItemFromQueue(mediaTitle);
					return true;
				}
			}
		}
		return false;
	}

	

	private void rentMedia(Customer customer, String mediaTitle) {
		customer.addRented(mediaTitle);
		for (Media media : media) {
			if (media.getTitle().equals(mediaTitle)) {
				media.remove1Copy();
			}
		}
	}
	
	public boolean returnMedia(String customerName, String mediaTitle) { //DONE
		for (Customer customer : customers) {
			if (customer.getName().equals(customerName)) {
				customer.removeRented(mediaTitle);
				Customer.setMediaLimit(customer.getMediaLimit() + 1);
				for (Media media : media) {
					if (media.getTitle().equals(mediaTitle)) {
						media.increaseby1Copy();
					}
				}
				return true;
			}
		}
		return false;
	}

	public String processRequests() { //DONE
		String thingsBeingSent = "";
		String limited = "LIMITED";
		String unlimited = "UNLIMITED";
		ArrayList<String> rentedOut = new ArrayList<String>();
		Collections.sort(customers);
		for (Customer customer : customers) {
			if (customer.getPlan().equals(unlimited)) {
				for (String i : customer.getQueue()) {
					if (availableCopies(i)) {
						rentedOut.add(i);
						rentMedia(customer, i);
						thingsBeingSent += "Sending " + i + " to " + customer.getName() + "\n";
					}
				}

			} else if (customer.getPlan().equals(limited)
					&& customer.getRented().size() <= customer.getMediaLimit()) {
				for (String j : customer.getQueue()) {
					if (customer.getRented().size() < customer.getMediaLimit()
							&& availableCopies(j)) {
						rentedOut.add(j);
						rentMedia(customer, j);
						thingsBeingSent += "Sending " + j + " to " + customer.getName() + "\n";
					}
				}
			}

			for (String k : rentedOut) {
				customer.removeItemFromQueue(k);
			}
			
//			for (int j = 0; j < rentedOut.size(); j++) {
//				customer.removeQueue(j);
//			}

			rentedOut.clear();

		}

		return thingsBeingSent;

	}

	public void addAlbum(String title, int copiesAvailable, String artist,
			String songs) { //DO NOT TOUCH!
		media.add(new Albums(title, copiesAvailable, artist, songs));
	}

	public ArrayList<String> searchMedia(String title, String rating,
			String artist, String songs) { //DONE
		Collections.sort(media);
		ArrayList<String> answer = new ArrayList<String>();
		if (title == null && rating == null && artist == null
				&& songs == null) {
			for (Media m : media) {
				answer.add(m.getTitle());
			}
			return answer;
		}

		for (Media media : media) {
			if (title != null) {
				if (media.getTitle().equals(title)) {
					answer.add(media.getTitle());
				}
			}
			if (media instanceof Movie) {
				if (rating != null) {
					if (((Movie) media).getMovieRating().equals(rating)) {
						answer.add(media.getTitle());
					}
				}
			}

			if (media instanceof Albums) {
				if (artist != null) {
					if (((Albums) media).getArtist().equals(artist)) {
						answer.add(media.getTitle());
					}
				}

				if (songs != null) {
					if (((Albums) media).getSong().contains(songs)) {
						answer.add(media.getTitle());
					}
				}
			}
		}

		return answer;
	}
}