@Override
 public boolean anyClassThisSchoolYear(SchoolYear schoolYear) {
   return ClassSchedule.count(
           ClassSchedule.class, "semester = ?", new String[] {schoolYear.toString()})
       > 0;
 }
  public void sync() throws SyncFailedException {
    try {
      String html = classesPage.getHtml();
      classesPage.checkDataAvailable(html);

      int pos = SyncDataHelper.getIndexAndGoToEnd("Letivo:", html);
      int endPos = SyncDataHelper.getIndexOf("<", html, pos);

      actualSchoolYear = new SchoolYear(html.substring(pos, endPos).trim());
      if (actualSchoolYear.isBefore(SchoolYear.getCurrent())) {
        throw new UnavailableDataException(
            "Você não tem aulas no semestre corrente",
            classesPage.getUrl(),
            classesPage.getPageName());
      }

      pos = SyncDataHelper.getIndexAndGoToEnd("table id=\"horarios\"", html);
      endPos = SyncDataHelper.getIndexOf("</table>", html);

      html = html.substring(pos, endPos);

      List<ClassScheduleDataHolder> dataHolderList = new ArrayList<>();

      endPos = 0;
      do {
        ClassScheduleDataHolder dataHolder = new ClassScheduleDataHolder();

        // Id
        pos = SyncDataHelper.getIndexAndGoToEnd("data-id=\"", html, endPos);
        endPos = SyncDataHelper.getIndexOf("\"", html, pos);
        dataHolder.id = html.substring(pos, endPos);
        UnisantaApplication.Log_i("ID: " + dataHolder.id);

        // Dia da semana
        pos = SyncDataHelper.getIndexAndGoToEnd("strong>", html, endPos);
        endPos = SyncDataHelper.getIndexOf("<", html, pos);
        dataHolder.weekDay = html.substring(pos, endPos);
        UnisantaApplication.Log_i(
            "Dia da semana encontrado: "
                + dataHolder.weekDay
                + " | na posição "
                + pos
                + " até "
                + endPos);

        // Horário
        pos = SyncDataHelper.getIndexAndGoToEnd("<td class=\"colunaDuracaHorario", html, endPos);
        pos = SyncDataHelper.getIndexOf(">", html, pos);
        endPos = SyncDataHelper.getIndexOf("<", html, pos);

        String horario = html.substring(pos, endPos);
        int aux = horario.indexOf("-");
        dataHolder.startTime = horario.substring(1, aux).trim();
        dataHolder.endTime = horario.substring(aux + 1, horario.length()).trim();
        UnisantaApplication.Log_i(
            "A aula começa às: " + dataHolder.startTime + " e acaba às " + dataHolder.endTime);

        // Matéria
        pos = SyncDataHelper.getIndexAndGoToEnd("alinhamentoEsquerda", html, endPos);
        pos = SyncDataHelper.getIndexOf(">", html, pos) + 3;
        endPos = SyncDataHelper.getIndexOf("<", html, pos);

        dataHolder.subjectName =
            SyncDataHelper.fixSpecialCharacters(html.substring(pos, endPos).trim());
        dataHolder.isDP = dataHolder.subjectName.contains("- DP");
        UnisantaApplication.Log_i("Matéria encontrada: " + dataHolder.subjectName);

        // Professor
        pos = SyncDataHelper.getIndexAndGoToEnd("alinhamentoEsquerda", html, endPos);
        pos = SyncDataHelper.getIndexOf(">", html, pos) + 1;
        endPos = SyncDataHelper.getIndexOf("<", html, pos);

        dataHolder.teacherName = SyncDataHelper.fixSpecialCharacters(html.substring(pos, endPos));
        UnisantaApplication.Log_i("Professor encontrado: " + dataHolder.teacherName);

        // Sala
        pos = SyncDataHelper.getIndexAndGoToEnd("colunaSalaHorario", html, endPos);
        pos = SyncDataHelper.getIndexOf(">", html, pos) + 1;
        endPos = SyncDataHelper.getIndexOf("<", html, pos);
        dataHolder.classroom = html.substring(pos, endPos);
        UnisantaApplication.Log_i("Sala de aula encontrada: " + dataHolder.classroom);

        dataHolderList.add(dataHolder);
      } while (html.indexOf("<tr", endPos) > -1);

      saveClasses(dataHolderList);

    } catch (StringNotFoundException e) {
      throw new MissingTagException(classesPage.getUrl(), classesPage.getPageName(), e.getString());
    } catch (UnavailableDataException e) {
      throw e;
    } catch (Exception e) {
      throw new SyncFailedException(e, classesPage.getUrl(), classesPage.getPageName());
    }
  }
 @Override
 public List<ClassSchedule> findBySchoolYear(SchoolYear schoolYear) {
   return Lists.newArrayList(
       ClassSchedule.find(ClassSchedule.class, "semester = ?", schoolYear.toString()));
 }