public static Disc recommendDiscForHole(Bag bag, Hole hole) {
		LOGGER.log(Level.INFO, "Populating criteria for hole '" + hole.getHoleNumber() + "' to recommend a disc.");
		
		Map<String, Object> criteria = new HashMap<String, Object>();
		int distance = hole.getDistance();
		
		if (distance < PUTT_MAX_DIST) { criteria.put("discType", DiscType.PUTTAPPROACH); }
		else if (distance < MID_MAX_DIST) { criteria.put("discType", DiscType.MIDRANGE); }
		else if (distance < FAIR_MAX_DIST) { criteria.put("discType", DiscType.FAIRWAYDRIVER); }
		else { criteria.put("discType", DiscType.DISTANCEDRIVER); }
		
		switch(hole.getHoleType()) {
			case STRAIGHT:
				criteria.put("stability", Stability.STABLE);
				break;
			case SLIGHT_LEFT:
			// TODO  Use turn/fade ratings based on hard vs slight curves
			case HARD_LEFT:
				criteria.put("stability", Stability.OVERSTABLE);
				break;
			case SLIGHT_RIGHT:
			case HARD_RIGHT:
				criteria.put("stability", Stability.UNDERSTABLE);
				break;
		}

		LOGGER.log(Level.INFO, "Criteria for disc for hole '" + hole.getHoleNumber() + "': " + criteria.toString());
		return getDiscByCriteria(criteria);
	}