package se.idega.idegaweb.commune.accounting.update.business;
import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Vector;
import javax.ejb.FinderException;
import se.idega.idegaweb.commune.care.data.ChildCareContract;
import se.idega.idegaweb.commune.care.data.ChildCareContractHome;
import com.idega.block.school.data.School;
import com.idega.block.school.data.SchoolCategory;
import com.idega.block.school.data.SchoolCategoryHome;
import com.idega.block.school.data.SchoolClass;
import com.idega.block.school.data.SchoolClassHome;
import com.idega.block.school.data.SchoolClassMember;
import com.idega.block.school.data.SchoolClassMemberHome;
import com.idega.block.school.data.SchoolHome;
import com.idega.block.school.data.SchoolSeason;
import com.idega.block.school.data.SchoolSeasonHome;
import com.idega.block.school.data.SchoolType;
import com.idega.block.school.data.SchoolTypeHome;
import com.idega.block.school.data.SchoolYear;
import com.idega.business.IBOServiceBean;
import com.idega.data.IDOLookup;
import com.idega.data.IDORelationshipException;
import com.idega.user.data.User;
/**
* Sets the relation between the SchoolClass and SchoolType tables if possible
* loggs all other realtionships so that they can be set manually
* @author Joakim
*
*/
public class SchoolClassSchoolTypeBusinessBean extends IBOServiceBean
implements SchoolClassSchoolTypeBusiness {
List ret;
/**
* Sets the relation between the SchoolClass and SchoolType tables if possible
* loggs all other realtionships so that they can be set manually
*/
public List setClassTypeRelation(){
//ret = new ArrayList();
try {
Iterator classIter = getSchoolClassHome().findAll().iterator();
while (classIter.hasNext()) {
try{
SchoolClass schoolClass = (SchoolClass) classIter.next();
School provider = schoolClass.getSchool();
try {
Vector schoolTypes = (Vector)provider.getSchoolTypes();
int schoolTypeId=-1;
if(schoolTypes.size()==0){
SchoolYear year = null;//schoolClass.getSchoolYear();
if(year!=null){
schoolTypeId = year.getSchoolTypeId();
}
if(schoolTypeId==-1){
addMessage("Could not find any schooltype for Class="+schoolClass.getName()+" School="+provider.getName()+
" PK="+schoolClass.getPrimaryKey());
}
} else if(schoolTypes.size()>1){
SchoolYear year = null;//schoolClass.getSchoolYear();
if(year!=null){
schoolTypeId = year.getSchoolTypeId();
}
if(schoolTypeId==-1){
String str = "Several schooltypes for Class="+schoolClass.getName()+" School="+provider.getName();
for(int i=0; i<schoolTypes.size();i++){
str += "\n<br>\t - SchoolType="+((SchoolType)schoolTypes.get(i)).getName()+" PK="+schoolClass.getPrimaryKey();
}
addMessage(str);
}
} else {
schoolTypeId=(((Integer)((SchoolType)schoolTypes.get(0)).getPrimaryKey()).intValue());
}
if(schoolTypeId!=-1){
//Set the relation
schoolClass.setSchoolTypeId(schoolTypeId);
schoolClass.store();
}
} catch (IDORelationshipException e1) {
addMessage("Erro getting schooltype from school "+provider.getName()+" PK="+provider.getPrimaryKey());
e1.printStackTrace();
}
}catch(Exception e){
addMessage("Exception created! Relationship could not be set!");
e.printStackTrace();
}
}
} catch (RemoteException e) {
addMessage("RemoteException created, halting execution. Relations not set!");
e.printStackTrace();
} catch (FinderException e) {
addMessage("FinderException created, halting execution. Relations not set!");
e.printStackTrace();
}
return getLinesList();
}
/**
* Dumps message to console and adds it to the ret list
* @param s
*/
private void addMessage(String s){
getLinesList().add(s);
System.out.println(s);
}
private List getLinesList(){
if(ret==null){
ret = new ArrayList();
}
return ret;
}
protected SchoolHome getSchoolHome() throws RemoteException
{
return (SchoolHome) IDOLookup.getHome(School.class);
}
protected SchoolTypeHome getSchoolTypeHome() throws RemoteException
{
return (SchoolTypeHome) IDOLookup.getHome(SchoolType.class);
}
protected SchoolCategoryHome getSchoolCategoryHome() throws RemoteException
{
return (SchoolCategoryHome) IDOLookup.getHome(SchoolCategory.class);
}
protected SchoolClassHome getSchoolClassHome() throws RemoteException
{
return (SchoolClassHome) IDOLookup.getHome(SchoolClass.class);
}
protected SchoolClassMemberHome getSchoolClassMemberHome() throws RemoteException
{
return (SchoolClassMemberHome) IDOLookup.getHome(SchoolClassMember.class);
}
protected SchoolSeasonHome getSchoolSeasonHome() throws RemoteException
{
return (SchoolSeasonHome) IDOLookup.getHome(SchoolSeason.class);
}
protected ChildCareContractHome getChildcareContractHome() throws RemoteException
{
return (ChildCareContractHome) IDOLookup.getHome(ChildCareContract.class);
}
/**
* Sets the relation between the Contract and SchoolPlacement if possible
* loggs all other realtionships so that they can be set manually
*/
public List setContractPlacementRelation(){
//ret = new ArrayList();
try {
SchoolCategory category = this.getSchoolCategoryHome().findChildcareCategory();
Collection childcareSchoolTypes = this.getSchoolTypeHome().findAllByCategory(category.getCategory());
Iterator contractIter = getChildcareContractHome().findAll().iterator();
while (contractIter.hasNext()) {
try{
ChildCareContract contract = (ChildCareContract) contractIter.next();
User child = contract.getChild();
int childId= ((Integer)child.getPrimaryKey()).intValue();
Collection members = getSchoolClassMemberHome().findByStudentAndTypes(childId,childcareSchoolTypes);
if(members.size()==1){
SchoolClassMember mem = (SchoolClassMember)members.iterator().next();
if(mem!=null){
contract.setSchoolClassMember(mem);
contract.store();
}
}
else if(members.size()>1){
String str = "Found more than one placements for child with name="+child.getName()+" personalId="+child.getPersonalID()+
" PK="+child.getPrimaryKey();
Iterator iter = members.iterator();
while(iter.hasNext()){
SchoolClassMember mem = (SchoolClassMember)iter.next();
str += "\n<br>\t - SchoolClassMemberId="+mem.getPrimaryKey();
}
addMessage(str);
}
else{
addMessage("Could not find any placements for child with name="+child.getName()+" personalId="+child.getPersonalID()+
" PK="+child.getPrimaryKey()+", ChildCareContractId="+contract.getPrimaryKey());
}
}catch(Exception e){
addMessage("Exception created! Relationship could not be set!");
e.printStackTrace();
}
}
} catch (RemoteException e) {
addMessage("RemoteException created, halting execution. Relations not set!");
e.printStackTrace();
} catch (FinderException e) {
addMessage("FinderException created, halting execution. Relations not set!");
e.printStackTrace();
}
return getLinesList();
}
public List setSchoolClassSchoolTypeAndContractPlacementRelations(){
addMessage("---------------------------------------------------------------------------------------------");
addMessage("SchoolClassSchoolTypeBusinessBean: Setting SchoolClass and SchoolType relations:");
addMessage("---------------------------------------------------------------------------------------------");
this.setClassTypeRelation();
addMessage("---------------------------------------------------------------------------------------------");
addMessage("SchoolClassSchoolTypeBusinessBean: Setting Contract and SchoolClassMember relations:");
addMessage("---------------------------------------------------------------------------------------------"); this.setContractPlacementRelation();
this.setContractPlacementRelation();
addMessage("---------------------------------------------------------------------------------------------");
addMessage("SchoolClassSchoolTypeBusinessBean: Done");
addMessage("---------------------------------------------------------------------------------------------");
return getLinesList();
}
}