CoursePage.java

package edu.ucsb.cs156.courses.documents;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.ArrayList;
import java.util.List;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;

@Data
@NoArgsConstructor
@Slf4j
public class CoursePage {
  private int pageNumber;
  private int pageSize;
  private int total;
  private List<Course> classes;

  /**
   * Create a CoursePage object from json representation
   *
   * @param json String of json returned by API endpoint {@code /classes/search}
   * @return a new CoursePage object
   * @see <a href=
   *     "https://developer.ucsb.edu/content/academic-curriculums">https://developer.ucsb.edu/content/academic-curriculums</a>
   */
  public static CoursePage fromJSON(String json) {
    try {
      ObjectMapper objectMapper = new ObjectMapper();
      objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

      CoursePage coursePage = objectMapper.readValue(json, CoursePage.class);
      return coursePage;
    } catch (JsonProcessingException jpe) {
      log.error("JsonProcessingException:" + jpe);
      return null;
    }
  }

  /**
   * Create a List of ConvertedSections from json representation
   *
   * @return a list of converted sections
   */
  public List<ConvertedSection> convertedSections() {

    List<ConvertedSection> result = new ArrayList<ConvertedSection>();

    for (Course c : this.getClasses()) {
      for (Section section : c.getClassSections()) {
        int lectureNum = Integer.parseInt(section.getSection()) / 100;
        CourseInfo courseInfo =
            CourseInfo.builder()
                .quarter(c.getQuarter())
                .courseId(c.getCourseId() + "-" + Integer.toString(lectureNum))
                .title(c.getTitle())
                .description(c.getDescription())
                .build();
        ConvertedSection cs =
            ConvertedSection.builder().courseInfo(courseInfo).section(section).build();
        result.add(cs);
      }
    }
    return result;
  }
}