package com.tevinjeffrey.rutgersct.rutgersapi.utils;
import com.tevinjeffrey.rutgersct.rutgersapi.model.Course;
import com.tevinjeffrey.rutgersct.rutgersapi.model.Request;
import java.util.LinkedHashMap;
import java.util.Map;
public class UrlUtils {
private final static String FIRST_LEVEL = "Undergraduate";
private final static String SECOND_LEVEL = "Graduate";
private final static String FIRST_LEVEL_ID = "U";
private final static String SECOND_LEVEL_ID = "G";
private final static String FIRST_LOCATION = "New Brunswick";
private final static String SECOND_LOCATION = "Newark";
private final static String THIRD_LOCATION = "Camden";
private final static String FIRST_LOCATION_ID = "NB";
private final static String SECOND_LOCATION_ID = "NK";
private final static String THIRD_LOCATION_ID = "CM";
public UrlUtils() {
}
private static String parseSemester(SemesterUtils.Semester semester) {
return semester.getSeason().getCode() + semester.getYear();
}
private static String getSemester(Request request) {
return parseSemester(request.getSemester());
}
private static String parseLocations(Iterable<String> loc) {
StringBuilder location = new StringBuilder();
for (String s : loc) {
switch (s) {
case FIRST_LOCATION:
append(location, FIRST_LOCATION_ID);
break;
case SECOND_LOCATION:
append(location, SECOND_LOCATION_ID);
break;
case THIRD_LOCATION:
append(location, THIRD_LOCATION_ID);
break;
default:
append(location, FIRST_LOCATION_ID);
append(location, SECOND_LOCATION_ID);
append(location, THIRD_LOCATION_ID);
break;
}
}
return location.toString();
}
private static String getLocations(Request request) {
return parseLocations(request.getLocations());
}
private static String parseLevels(Iterable<String> lvls) {
StringBuilder level = new StringBuilder();
for (String s : lvls) {
switch (s) {
case FIRST_LEVEL:
append(level, FIRST_LEVEL_ID);
break;
case SECOND_LEVEL:
append(level, SECOND_LEVEL_ID);
break;
default:
append(level, FIRST_LEVEL_ID);
append(level, SECOND_LEVEL_ID);
break;
}
}
return level.toString();
}
private static String getLevels(Request request) {
return parseLevels(request.getLevels());
}
private static void appendComma(StringBuilder sb) {
sb.append(",");
}
private static void append(StringBuilder sb, String loc) {
if (sb.length() != 0)
appendComma(sb);
sb.append(loc);
}
public static String buildParamUrl(Request request) {
return "subject=" + request.getSubject()
+ "&" + "semester="
+ getSemester(request)
+ "&" + "campus="
+ getLocations(request)
+ "&" + "level="
+ getLevels(request);
}
public static Map<String, String> buildSubjectQuery(Request request) {
//The order of the parameters matter when send the request >:(
Map<String, String> query = new LinkedHashMap<>(3);
query.put("semester", getSemester(request));
query.put("campus", getLocations(request));
query.put("level", getLevels(request));
return query;
}
public static Map<String, String> buildCourseQuery(Request request) {
//The order of the parameters matter when send the request >:(
Map<String, String> query = new LinkedHashMap<>(4);
query.put("subject", request.getSubject());
query.put("semester", getSemester(request));
query.put("campus", getLocations(request));
query.put("level", getLevels(request));
return query;
}
public static String getAbbreviatedLocationName(String s) {
switch (s) {
case FIRST_LOCATION:
return FIRST_LOCATION_ID;
case SECOND_LOCATION:
return SECOND_LOCATION_ID;
case THIRD_LOCATION:
return THIRD_LOCATION_ID;
default:
return null;
}
}
private static String createSearchUrl(String query, Course.Section s) {
return s.getToStringInstructors("+OR+") + query;
}
public static String getGoogleUrl(Course.Section s) {
String query = "+rutgers";
return createSearchUrl(query, s);
}
}