public Boolean canBook(String userType, Integer reservationLength, Integer bookingLength, Integer totalItems) {
        // No constraints: ok
        if(constraints == null){return true;}
        
        // Check against user type
        if(constraints.containsKey("userType") && !userType.equalsIgnoreCase(constraints.get("userType"))){
            return false;
        }
        
        // Check against reservation length
        if(constraints.containsKey("reservationLength") && reservationLength>Integer.parseInt(constraints.get("reservationLength"))){
            return false;
        }
        
        // Check against booking length
        if(constraints.containsKey("bookingLength") && bookingLength>Integer.parseInt(constraints.get("bookingLength"))){
            return false;
        }
        
        // Check against item limit
        if(constraints.containsKey("totalItems") && totalItems>Integer.parseInt(constraints.get("totalItems"))){
            return false;
        }
        
        // booking okay
        return true;
    }