@Override
	public void applyReservePolicy(LibraryModel model, List<LibraryView> views,
			List<Item> toReserve, String borrowerID) {
		List<Item> availableItems = new LinkedList<Item>();
		List<Item> toRemove = new LinkedList<Item>();
		for (Item item : toReserve) {
			List<Reservation> reservations = getReservationsOfItem(model,
					item.getID());
			/*
			 * In case that there are less loans than copies add them to the
			 * available items to notify the user.
			 */
			if (reservations.size() < countOfFreeCopiesOfItem(model,
					item.getID())) {
				availableItems.add(item);
				toRemove.add(item);
			}
		}
		for (Item item : toRemove) {
			toReserve.remove(item);
		}
		if (availableItems.size() > 0) {
			String availableItemsString = "";
			// TODO last item without comma
			for (Item item : availableItems) {
				availableItemsString += item.getID() + " (" + item.getTitle()
						+ "), ";
			}
			availableItemsString = availableItemsString.substring(0,
					availableItemsString.length() - 2);
			viewsShowMessage(views, "Reserve Item",
					"The following items are currently available: "
							+ availableItemsString + availableItemsString);
		}

	}