/** @see se.idega.idegaweb.commune.school.report.business.ReportModel#buildRowHeaders() */
  protected Header[] buildRowHeaders() {
    Header[] headers = null;

    try {
      ReportBusiness rb = getReportBusiness();
      Collection areas = rb.getElementarySchoolAreas();
      headers = new Header[areas.size() + 1];
      Iterator areaIter = areas.iterator();
      int headerIndex = 0;
      while (areaIter.hasNext()) {
        SchoolArea area = (SchoolArea) areaIter.next();
        Collection schools = getReportBusiness().getElementarySchools(area);
        headers[headerIndex] =
            new Header(
                area.getName(), Header.HEADERTYPE_ROW_NONLOCALIZED_HEADER, schools.size() + 1);
        Iterator schoolIter = schools.iterator();
        int childIndex = 0;
        while (schoolIter.hasNext()) {
          School school = (School) schoolIter.next();
          Header child = new Header(school.getName(), Header.HEADERTYPE_ROW_NONLOCALIZED_NORMAL);
          headers[headerIndex].setChild(childIndex, child);
          childIndex++;
        }
        Header header = new Header(KEY_SUM, Header.HEADERTYPE_ROW_SUM);
        headers[headerIndex].setChild(childIndex, header);
        headerIndex++;
      }
      Header header = new Header(KEY_TOTAL, Header.HEADERTYPE_ROW_TOTAL);
      headers[headerIndex] = header;
    } catch (RemoteException e) {
      log(e.getMessage());
    }

    return headers;
  }
 /** Returns the number of student placements for the specified school and school year. */
 protected int getPrivateSchoolOCCPlacementCount(int schoolId, String schoolYearName)
     throws RemoteException {
   PreparedQuery query = null;
   if (!schoolYearName.equals("0")) {
     ReportBusiness rb = getReportBusiness();
     query = getQuery(QUERY_PRIVATE);
     if (query == null) {
       query = new PreparedQuery(getConnection());
       query.setSelectCountDistinctUsers();
       query.setPlacements(rb.getSchoolSeasonId());
       query.setNotNackaCitizens();
       query.setSchoolType(); // parameter 1
       query.setSchoolYearName(); // parameter 2
       query.setSchool(); // parameter 3
       query.prepare();
       setQuery(QUERY_PRIVATE, query);
     }
     if (schoolYearName.equals("F")) {
       query.setInt(1, rb.getPreSchoolClassTypeId());
     } else {
       query.setInt(1, rb.getElementarySchoolTypeId());
     }
     query.setString(2, schoolYearName);
     query.setInt(3, schoolId);
   } else { // 6 years old students
     query = getQuery(QUERY_PRIVATE_6_YEAR_STUDENTS);
     if (query == null) {
       query = new PreparedQuery(getConnection());
       query.setSelectCountDistinctUsers();
       query.setPlacements(getReportBusiness().getSchoolSeasonId());
       query.setNotNackaCitizens();
       query.setOnlyStudentsBorn(getReportBusiness().getSchoolSeasonStartYear() - 6);
       query.setSchoolYearName("1");
       query.setSchoolTypeElementarySchool();
       query.setSchool(); // parameter 1
       query.prepare();
       setQuery(QUERY_PRIVATE_6_YEAR_STUDENTS, query);
     }
     query.setInt(1, schoolId);
   }
   return query.execute();
 }
  /** @see se.idega.idegaweb.commune.school.report.business.ReportModel#buildCells() */
  protected void buildCells() {
    for (int column = 0; column < getColumnSize(); column++) {
      int row = 0;
      int columnMethod = 0;
      Object columnParameter = null;
      switch (column) {
        case 0:
          columnMethod = COLUMN_METHOD_SCHOOL_YEAR;
          columnParameter = "F";
          break;
        case 1:
          columnMethod = COLUMN_METHOD_SCHOOL_YEAR;
          columnParameter = "1";
          break;
        case 2:
          columnMethod = COLUMN_METHOD_SCHOOL_YEAR;
          columnParameter = "2";
          break;
        case 3:
          columnMethod = COLUMN_METHOD_SCHOOL_YEAR;
          columnParameter = "3";
          break;
        case 4:
          columnMethod = COLUMN_METHOD_SUM_1_3;
          columnParameter = null;
          break;
        case 5:
          columnMethod = COLUMN_METHOD_SCHOOL_YEAR;
          columnParameter = "4";
          break;
        case 6:
          columnMethod = COLUMN_METHOD_SCHOOL_YEAR;
          columnParameter = "5";
          break;
        case 7:
          columnMethod = COLUMN_METHOD_SCHOOL_YEAR;
          columnParameter = "6";
          break;
        case 8:
          columnMethod = COLUMN_METHOD_SUM_4_6;
          columnParameter = null;
          break;
        case 9:
          columnMethod = COLUMN_METHOD_SCHOOL_YEAR;
          columnParameter = "7";
          break;
        case 10:
          columnMethod = COLUMN_METHOD_SCHOOL_YEAR;
          columnParameter = "8";
          break;
        case 11:
          columnMethod = COLUMN_METHOD_SCHOOL_YEAR;
          columnParameter = "9";
          break;
        case 12:
          columnMethod = COLUMN_METHOD_SUM_7_9;
          columnParameter = null;
          break;
        case 13:
          columnMethod = COLUMN_METHOD_TOTAL_1_9;
          columnParameter = null;
          break;
        case 14:
          columnMethod = COLUMN_METHOD_TOTAL_F_9;
          columnParameter = null;
          break;
        case 15:
          columnMethod = COLUMN_METHOD_SCHOOL_YEAR;
          columnParameter = "0";
          break;
      }

      try {
        ReportBusiness rb = getReportBusiness();
        Collection areas = rb.getElementarySchoolAreas();
        Iterator areaIter = areas.iterator();
        while (areaIter.hasNext()) {
          SchoolArea area = (SchoolArea) areaIter.next();
          Collection schools = getReportBusiness().getElementarySchools(area);
          Iterator schoolIter = schools.iterator();
          while (schoolIter.hasNext()) {
            School school = (School) schoolIter.next();
            Object rowParameter = school.getPrimaryKey();
            Cell cell =
                new Cell(
                    this,
                    row,
                    column,
                    ROW_METHOD_SCHOOL,
                    columnMethod,
                    rowParameter,
                    columnParameter,
                    Cell.CELLTYPE_NORMAL);
            setCell(row, column, cell);
            row++;
          }
          Cell cell =
              new Cell(
                  this,
                  row,
                  column,
                  ROW_METHOD_SUM,
                  columnMethod,
                  null,
                  columnParameter,
                  Cell.CELLTYPE_SUM);
          setCell(row, column, cell);
          row++;
        }
        Cell cell =
            new Cell(
                this,
                row,
                column,
                ROW_METHOD_TOTAL,
                columnMethod,
                null,
                columnParameter,
                Cell.CELLTYPE_TOTAL);
        setCell(row, column, cell);
      } catch (RemoteException e) {
        log(e.getMessage());
      }
    }
  }