package com.idega.block.school.data; import java.util.Collection; import javax.ejb.FinderException; import com.idega.data.GenericEntity; import com.idega.data.IDOFinderException; import com.idega.data.IDOQuery; import com.idega.data.IDORelationshipException; import com.idega.data.query.MatchCriteria; import com.idega.data.query.SelectQuery; import com.idega.data.query.Table; /** * <p> * Title: * </p> * <p> * Description: * </p> * <p> * Copyright: Copyright (c) 2002 * </p> * <p> * Company: * </p> * * @author <br> * <a href="mailto:aron@idega.is">Aron Birkir </a> <br> * @version 1.0 */ public class SchoolYearBMPBean extends GenericEntity implements SchoolYear { public final static String SCHOOLYEAR = "SCH_SCHOOL_YEAR"; public final static String NAME = "YEAR_NAME"; public final static String INFO = "YEAR_INFO"; public final static String LOCALIZED_KEY = "localized_key"; public final static String AGE = "YEAR_AGE"; public final static String SCHOOL_TYPE = "SCHOOL_TYPE"; public final static String SCHOOL_CATEGORY = "SCHOOL_CATEGORY"; public final static String IS_SELECTABLE = "is_selectable"; public void initializeAttributes() { addAttribute(getIDColumnName()); addAttribute(NAME, "Name", true, true, String.class); addAttribute(INFO, "Info", true, true, String.class); addAttribute(AGE, "Age", true, true, Integer.class); addAttribute(LOCALIZED_KEY, "Localized key", true, true, String.class); addAttribute(IS_SELECTABLE, "Is selectable", true, true, Boolean.class); setNullable(NAME, false); setUnique(NAME, true); this.addManyToOneRelationship(SCHOOL_TYPE, SchoolType.class); this.addManyToOneRelationship(SCHOOL_CATEGORY, SchoolCategory.class); } public String getEntityName() { return SCHOOLYEAR; } public String getName() { return getSchoolYearName(); } public void setSchoolYearName(String name) { this.setColumn(NAME, name); } public String getSchoolYearName() { return getStringColumnValue(NAME); } public void setSchoolYearInfo(String info) { this.setColumn(INFO, info); } public String getSchoolYearInfo() { return getStringColumnValue(INFO); } public void setSchoolYearAge(int age) { this.setColumn(AGE, age); } public int getSchoolYearAge() { return getIntColumnValue(AGE); } public int getSchoolTypeId() { int schoolTypeId = getIntColumnValue(SCHOOL_TYPE); /*if (schoolTypeId < 1) { System.out.println("SchoolYearBMPBean : SchoolTypeId = " + schoolTypeId + " ... trying to find a new one"); String name = this.getSchoolYearName(); if (name != null) { if (name.equalsIgnoreCase("f")) { System.out.println("... NEEDS backwards compatability ..."); } else { System.out.println("... NEEDS backwards compatability ..."); } } else { System.out.println("... SchoolYear has name = NULL (pk=" + getPrimaryKey().toString() + ")"); } }*/ return schoolTypeId; } public SchoolType getSchoolType() { return (SchoolType) getColumnValue(SCHOOL_TYPE); } public void setSchoolTypeId(int id) { setColumn(SCHOOL_TYPE, id); } public Object getSchoolCategoryPK() { return getColumnValue(SCHOOL_CATEGORY); } public SchoolCategory getSchoolCategory() { return (SchoolCategory) getColumnValue(SCHOOL_CATEGORY); } public void setSchoolCategory(Object schoolCategory) { setColumn(SCHOOL_CATEGORY, schoolCategory); } public boolean isSelectable() { return getBooleanColumnValue(IS_SELECTABLE, true); } public void setIsSelectable(boolean isSelectable) { setColumn(IS_SELECTABLE, isSelectable); } public String getLocalizedKey() { return getStringColumnValue(LOCALIZED_KEY); } public void setLocalizedKey(String localizedKey) { setColumn(LOCALIZED_KEY, localizedKey); } /** * Gets the previous schoolYear from the age of this schoolYear-1 * * @return @throws * FinderException If no SchoolYear is found */ public SchoolYear getPreviousSchoolYearFromAge() throws FinderException { return ((SchoolYearHome) this.getEJBLocalHome()).findPreviousSchoolYearFromAge(this); } public Collection getSchoolYears(SchoolType schoolType) throws FinderException { return this.idoFindAllIDsByColumnBySQL(SCHOOL_TYPE, schoolType.getPrimaryKey().toString()); } public Collection ejbFindAllSchoolYears() throws javax.ejb.FinderException { IDOQuery sql = idoQuery(); sql.appendSelectAllFrom(getEntityName()).appendOrderBy(NAME); return super.idoFindPKsBySQL(sql.toString()); } public Collection ejbFindAllSchoolYearBySchoolType(int schoolTypeId) throws FinderException { IDOQuery sql = idoQuery(); sql.appendSelectAllFrom(getEntityName()); sql.appendWhereEquals(SCHOOL_TYPE, schoolTypeId); sql.appendOrderBy(getIDColumnName()); return super.idoFindPKsByQuery(sql); } public Collection ejbFindAllSchoolYearBySchoolCategory(SchoolCategory schoolCategory) throws FinderException { IDOQuery sql = idoQuery(); sql.appendSelectAllFrom(getEntityName()); sql.appendWhereEquals(SCHOOL_CATEGORY, schoolCategory); sql.appendOrderBy(getIDColumnName()); return super.idoFindPKsByQuery(sql); } public Collection ejbFindAllSchoolYearsBySchoolCategory(SchoolCategory schoolCategory, boolean showSelectable) throws FinderException { IDOQuery sql = idoQuery(); sql.appendSelectAllFrom(getEntityName()); sql.appendWhereEquals(SCHOOL_CATEGORY, schoolCategory); if (showSelectable) { sql.appendAnd().appendLeftParenthesis().append(IS_SELECTABLE).appendEqualSign().append(showSelectable); sql.appendOr().append(IS_SELECTABLE).appendIsNull().appendRightParenthesis(); } else { sql.appendAndEquals(IS_SELECTABLE, showSelectable); } sql.appendOrderBy(getIDColumnName()); return super.idoFindPKsByQuery(sql); } public Collection ejbFindAllBySchoolAndSchoolCategory(School school, SchoolCategory schoolCategory, boolean showSelectable) throws FinderException { IDOQuery sql = idoQuery(); sql.appendSelectAllFrom(getEntityName()).append(" y, sch_school_sch_school_year sy"); sql.appendWhereEquals(SCHOOL_CATEGORY, schoolCategory); if (showSelectable) { sql.appendAnd().appendLeftParenthesis().append(IS_SELECTABLE).appendEqualSign().append(showSelectable); sql.appendOr().append(IS_SELECTABLE).appendIsNull().appendRightParenthesis(); } else { sql.appendAndEquals(IS_SELECTABLE, showSelectable); } sql.appendAndEquals("y." + getIDColumnName(), "sy." + getIDColumnName()); sql.appendAndEquals("sy.sch_school_id", school); sql.appendOrderBy("y." + getIDColumnName()); return super.idoFindPKsByQuery(sql); } /** * @deprecated */ public Collection ejbFindAllByAge(int age) throws javax.ejb.FinderException { return super.idoFindPKsBySQL("select * from " + getEntityName() + " where " + AGE + " like '" + age + "' order by " + getIDColumnName()); } public Collection ejbFindAllByAge(SchoolType schoolType, int age) throws javax.ejb.FinderException { return super.idoFindPKsBySQL("select * from " + getEntityName() + " where " + AGE + " like '" + age + "' AND " + SCHOOL_TYPE + " = '" + schoolType.getPrimaryKey().toString() + "'"); } public Object ejbFindByAge(SchoolCategory category, int age) throws FinderException { Table table = new Table(this); Table types = new Table(SchoolType.class); SelectQuery query = new SelectQuery(table); query.addColumn(table, getIDColumnName(), true); try { query.addJoin(table, types); } catch (IDORelationshipException ire) { throw new FinderException(ire.getMessage()); } query.addCriteria(new MatchCriteria(table, AGE, MatchCriteria.EQUALS, age)); query.addCriteria(new MatchCriteria(types, "school_category", MatchCriteria.EQUALS, category)); return idoFindOnePKByQuery(query); } public Collection ejbFindAllByIDs(String[] schoolYearIDs) throws FinderException { IDOQuery query = idoQuery(); query.appendSelectAllFrom(this).appendWhere().append(getIDColumnName()).appendInArray(schoolYearIDs); query.appendOrderBy(AGE); return idoFindPKsByQuery(query); } /** * @deprecated */ public Integer ejbFindByYearName(String name) throws javax.ejb.FinderException { return (Integer) super.idoFindOnePKBySQL("select * from " + getEntityName() + " where " + NAME + " like '" + name + "'"); } public Integer ejbFindByYearName(SchoolType schoolType, String name) throws javax.ejb.FinderException { return (Integer) super.idoFindOnePKBySQL("select * from " + getEntityName() + " where " + NAME + " like '" + name + "' AND " + SCHOOL_TYPE + " = '" + schoolType.getPrimaryKey().toString() + "'"); } public Integer ejbFindByYearName(SchoolCategory schoolCategory, String name) throws javax.ejb.FinderException { return (Integer) super.idoFindOnePKBySQL("select * from " + getEntityName() + " where " + NAME + " like '" + name + "' AND " + SCHOOL_CATEGORY + " = '" + schoolCategory.getPrimaryKey().toString() + "'"); } public Collection ejbFindBySchoolCategory(String schoolCategory) throws javax.ejb.FinderException { IDOQuery query = idoQuery(); query.appendSelect().append("y.*").appendFrom().append(getEntityName()).append(" y, sch_school_type t "); query.appendWhereEquals("y." + SCHOOL_TYPE, "t.sch_school_type_id").appendAndEqualsQuoted("t.school_category", schoolCategory); return idoFindPKsByQuery(query); } /** * Finds the year (the first found) from the schoolYearAge of year-1. <br> * Tries to first find the hear by the same SchoolType as parameter year , if * no are found it finds by all schoolTypes. <br> * * @param year * the year to find previous year for * @return @throws * FinderException */ public Integer ejbFindPreviousSchoolYearFromAge(SchoolYear year) throws FinderException { int previousYearAge = year.getSchoolYearAge() - 1; Collection coll = this.ejbFindAllByAge(year.getSchoolType(), previousYearAge); if (coll.isEmpty()) { coll = this.ejbFindAllByAge(previousYearAge); } if (!coll.isEmpty()) { return (Integer) coll.iterator().next(); } else { throw new IDOFinderException("SchoolYear: No Previous SchoolYears found"); } } }