/*
* $Id: NackaCCHourIntervalReportModel.java,v 1.5 2005/01/20 12:47:12 anders Exp $
*
* Copyright (C) 2003 Agura IT. All Rights Reserved.
*
* This software is the proprietary information of Agura IT AB.
* Use is subject to license terms.
*
*/
package se.idega.idegaweb.commune.school.report.business;
import java.rmi.RemoteException;
/**
* Report model for total number of child care placements per child care hour interval.
* <p>
* Last modified: $Date: 2005/01/20 12:47:12 $ by $Author: anders $
*
* @author Anders Lindman
* @version $Revision: 1.5 $
*/
public class NackaCCHourIntervalReportModel extends ReportModel {
private final static int ROW_SIZE = 7;
private final static int COLUMN_SIZE = 6;
private final static int ROW_METHOD_SUM_HOURS = 1;
private final static int ROW_METHOD_TOTAL_PRE_SCHOOL_OPERATION = 2;
private final static int ROW_METHOD_TOTAL_AFTER_SCHOOL_OPERATION = 3;
private final static int ROW_METHOD_TOTAL = 4;
/*private final static int COLUMN_METHOD_HOURS_1_15 = 101;
private final static int COLUMN_METHOD_HOURS_16_25 = 102;
private final static int COLUMN_METHOD_HOURS_26_35 = 103;
private final static int COLUMN_METHOD_HOURS_36_ = 104;
*/
private final static int COLUMN_METHOD_HOURS_1_15 = 101;
private final static int COLUMN_METHOD_HOURS_16_24 = 102;
private final static int COLUMN_METHOD_HOURS_25_29 = 103;
private final static int COLUMN_METHOD_HOURS_30_34 = 104;
private final static int COLUMN_METHOD_HOURS_35_39 = 105;
private final static int COLUMN_METHOD_HOURS_40_ = 106;
private final static String QUERY_HOUR_INTERVAL_PLACEMENTS = "hour_interval_placements";
private final static String QUERY_HOUR_INTERVAL_PLACEMENTS2 = "hour_interval_placements2";
private final static String KEY_REPORT_TITLE = KP + "title_nacka_child_care_hour_interval_placements";
private final static int SCHOOL_TYPE_PRE_SCHOOL = 1;
private final static int SCHOOL_TYPE_FAMILY_DAYCARE = 2;
private final static int SCHOOL_TYPE_AFTER_SCHOOL = 3;
private final static int SCHOOL_TYPE_FAMILY_AFTER_SCHOOL = 4;
/**
* Constructs this report model.
* @param reportBusiness the report business instance for calculating cell values
*/
public NackaCCHourIntervalReportModel(ReportBusiness reportBusiness) {
super(reportBusiness);
}
/**
* @see se.idega.idegaweb.commune.school.report.business.ReportModel#initReportSize()
*/
protected void initReportSize() {
setReportSize(ROW_SIZE, COLUMN_SIZE);
}
/**
* @see se.idega.idegaweb.commune.school.report.business.ReportModel#buildRowHeaders()
*/
protected Header[] buildRowHeaders() {
Header[] headers = new Header[9];
headers[0] = new Header(KEY_PRE_SCHOOL, Header.HEADERTYPE_ROW_HEADER);
headers[1] = new Header(KEY_FAMILY_DAYCARE, Header.HEADERTYPE_ROW_HEADER);
headers[2] = new Header(KEY_TOTAL_PRE_SCHOOL_OPERATION, Header.HEADERTYPE_ROW_HEADER);
headers[3] = new Header(null, Header.HEADERTYPE_ROW_SPACER);
headers[4] = new Header(KEY_AFTER_SCHOOL, Header.HEADERTYPE_ROW_HEADER);
headers[5] = new Header(KEY_FAMILY_AFTER_SCHOOL, Header.HEADERTYPE_ROW_HEADER);
headers[6] = new Header(KEY_TOTAL_AFTER_SCHOOL_OPERATION, Header.HEADERTYPE_ROW_HEADER);
headers[7] = new Header(null, Header.HEADERTYPE_ROW_SPACER);
headers[8] = new Header(KEY_TOTAL, Header.HEADERTYPE_ROW_HEADER);
return headers;
}
/**
* @see se.idega.idegaweb.commune.school.report.business.ReportModel#buildColumnHeaders()
*/
protected Header[] buildColumnHeaders() {
Header[] headers = new Header[1];
Header h = new Header(KEY_CHILD_CARE_HOURS, Header.HEADERTYPE_COLUMN_HEADER, 6);
Header child0 = new Header("1-15", Header.HEADERTYPE_COLUMN_NONLOCALIZED_HEADER);
Header child1 = new Header("16-24", Header.HEADERTYPE_COLUMN_NONLOCALIZED_HEADER);
Header child2 = new Header("25-29", Header.HEADERTYPE_COLUMN_NONLOCALIZED_HEADER);
Header child3 = new Header("30-34", Header.HEADERTYPE_COLUMN_NONLOCALIZED_HEADER);
Header child4 = new Header("35-39", Header.HEADERTYPE_COLUMN_NONLOCALIZED_HEADER);
Header child5 = new Header(KEY_GTEQ_40, Header.HEADERTYPE_COLUMN_HEADER);
h.setChild(0, child0);
h.setChild(1, child1);
h.setChild(2, child2);
h.setChild(3, child3);
h.setChild(4, child4);
h.setChild(5, child5);
headers[0] = h;
return headers;
}
/**
* @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;
switch (column) {
case 0:
columnMethod = COLUMN_METHOD_HOURS_1_15;
break;
case 1:
columnMethod = COLUMN_METHOD_HOURS_16_24;
break;
case 2:
columnMethod = COLUMN_METHOD_HOURS_25_29;
break;
case 3:
columnMethod = COLUMN_METHOD_HOURS_30_34;
break;
case 4:
columnMethod = COLUMN_METHOD_HOURS_35_39;
break;
case 5:
columnMethod = COLUMN_METHOD_HOURS_40_;
break;
}
Object columnParameter = null;
Object rowParameter = null;
Cell cell = new Cell(this, row, column, ROW_METHOD_SUM_HOURS,
columnMethod, new Integer(SCHOOL_TYPE_PRE_SCHOOL), columnParameter, Cell.CELLTYPE_NORMAL);
setCell(row++, column, cell);
cell = new Cell(this, row, column, ROW_METHOD_SUM_HOURS,
columnMethod, new Integer(SCHOOL_TYPE_FAMILY_DAYCARE), columnParameter, Cell.CELLTYPE_NORMAL);
setCell(row++, column, cell);
cell = new Cell(this, row, column, ROW_METHOD_TOTAL_PRE_SCHOOL_OPERATION,
columnMethod, rowParameter, columnParameter, Cell.CELLTYPE_NORMAL);
setCell(row++, column, cell);
cell = new Cell(this, row, column, ROW_METHOD_SUM_HOURS,
columnMethod, new Integer(SCHOOL_TYPE_AFTER_SCHOOL), columnParameter, Cell.CELLTYPE_NORMAL);
setCell(row++, column, cell);
cell = new Cell(this, row, column, ROW_METHOD_SUM_HOURS,
columnMethod, new Integer(SCHOOL_TYPE_FAMILY_AFTER_SCHOOL), columnParameter, Cell.CELLTYPE_NORMAL);
setCell(row++, column, cell);
cell = new Cell(this, row, column, ROW_METHOD_TOTAL_AFTER_SCHOOL_OPERATION,
columnMethod, rowParameter, columnParameter, Cell.CELLTYPE_NORMAL);
setCell(row++, column, cell);
cell = new Cell(this, row, column, ROW_METHOD_TOTAL,
columnMethod, rowParameter, columnParameter, Cell.CELLTYPE_NORMAL);
setCell(row++, column, cell);
}
}
/**
* @see se.idega.idegaweb.commune.school.report.business.ReportModel#calculate()
*/
protected float calculate(Cell cell) throws RemoteException {
float value = 0f;
int column = cell.getColumn();
switch (cell.getRowMethod()) {
case ROW_METHOD_SUM_HOURS:
int schoolType = ((Integer) cell.getRowParameter()).intValue();
switch (cell.getColumnMethod()) {
case COLUMN_METHOD_HOURS_1_15:
value = getChildCareHoursPlacementCount(1, 15, schoolType);
break;
case COLUMN_METHOD_HOURS_16_24:
value = getChildCareHoursPlacementCount(16, 24, schoolType);
break;
case COLUMN_METHOD_HOURS_25_29:
value = getChildCareHoursPlacementCount(25, 29, schoolType);
break;
case COLUMN_METHOD_HOURS_30_34:
value = getChildCareHoursPlacementCount(30, 34, schoolType);
break;
case COLUMN_METHOD_HOURS_35_39:
value = getChildCareHoursPlacementCount(35, 39, schoolType);
break;
case COLUMN_METHOD_HOURS_40_:
value = getChildCareHoursPlacementCount(40, 168, schoolType);
break;
}
break;
case ROW_METHOD_TOTAL_PRE_SCHOOL_OPERATION:
value = getCell(0, column).getFloatValue() + getCell(1, column).getFloatValue();
break;
case ROW_METHOD_TOTAL_AFTER_SCHOOL_OPERATION:
value = getCell(3, column).getFloatValue() + getCell(4, column).getFloatValue();
break;
case ROW_METHOD_TOTAL:
value = getCell(2, column).getFloatValue() + getCell(5, column).getFloatValue();
break;
}
return value;
}
/**
* @see se.idega.idegaweb.commune.school.report.business.ReportModel#getReportTitleLocalizationKey()
*/
public String getReportTitleLocalizationKey() {
return KEY_REPORT_TITLE;
}
/**
* Returns the number of total child placements for the specified hours per week interval.
*/
protected int getChildCareHoursPlacementCount(int fromHours, int toHours, int schoolType)
throws RemoteException {
ReportBusiness rb = getReportBusiness();
int schoolType1 = 0;
int schoolType2 = 0;
int schoolType3 = 0;
int schoolType4 = 0;
switch (schoolType) {
case SCHOOL_TYPE_PRE_SCHOOL:
schoolType1 = rb.getPreSchoolTypeId();
schoolType2 = rb.getGeneralPreSchoolTypeId();
schoolType3 = schoolType2;
schoolType4 = schoolType2;
break;
case SCHOOL_TYPE_FAMILY_DAYCARE:
schoolType1 = rb.getFamilyDayCareSchoolTypeId();
schoolType2 = rb.getGeneralFamilyDaycareSchoolTypeId();
schoolType3 = schoolType2;
schoolType4 = schoolType2;
break;
case SCHOOL_TYPE_AFTER_SCHOOL:
schoolType1 = rb.getAfterSchool6TypeId();
schoolType2 = rb.getAfterSchool7_9TypeId();
schoolType3 = schoolType2;
schoolType4 = schoolType2;
break;
case SCHOOL_TYPE_FAMILY_AFTER_SCHOOL:
schoolType1 = rb.getFamilyAfterSchool6TypeId();
schoolType2 = rb.getFamilyAfterSchool7_9TypeId();
schoolType3 = schoolType2;
schoolType4 = schoolType2;
break;
}
PreparedQuery query = null;
PreparedQuery query2 = null;
query = getQuery(QUERY_HOUR_INTERVAL_PLACEMENTS);
query2 = getQuery(QUERY_HOUR_INTERVAL_PLACEMENTS2);
if (query == null) {
query = new PreparedQuery(getConnection());
query.setSelectCount();
query.setChildCarePlacementsCareTime();
query.setChildCareWeekHoursCareTime(); // parameter 1-2
query.setFourSchoolTypes(); // parameter 3-6
query.prepare();
setQuery(QUERY_HOUR_INTERVAL_PLACEMENTS, query);
query2 = new PreparedQuery(getConnection());
query2.setSelectCount();
query2.setChildCarePlacementsCareTimeString();
query2.setChildCareWeekHoursCareTimeString(); // parameter 1-2
query2.setFourSchoolTypes(); // parameter 3-6
query2.prepare();
setQuery(QUERY_HOUR_INTERVAL_PLACEMENTS2, query2);
}
query.setInt(1, fromHours);
query.setInt(2, toHours);
query.setInt(3, schoolType1);
query.setInt(4, schoolType2);
query.setInt(5, schoolType3);
query.setInt(6, schoolType4);
query2.setInt(1, fromHours);
query2.setInt(2, toHours);
query2.setInt(3, schoolType1);
query2.setInt(4, schoolType2);
query2.setInt(5, schoolType3);
query2.setInt(6, schoolType4);
return query.execute() + query2.execute();
}
}