/* * Created on 8.8.2003 * * To change the template for this generated file go to * Window>Preferences>Java>Code Generation>Code and Comments */ package se.idega.idegaweb.commune.business; import is.idega.block.family.business.FamilyLogic; import is.idega.block.family.business.NoCustodianFound; import java.rmi.RemoteException; import java.sql.Date; import java.sql.Timestamp; import java.text.DateFormat; import java.util.Collection; import java.util.Iterator; import java.util.Locale; import javax.ejb.CreateException; import javax.ejb.EJBException; import javax.ejb.FinderException; import se.idega.idegaweb.commune.user.data.Citizen; import se.idega.idegaweb.commune.user.data.CitizenHome; import com.idega.block.datareport.util.ReportableCollection; import com.idega.block.datareport.util.ReportableData; import com.idega.block.datareport.util.ReportableField; import com.idega.business.IBOLookup; import com.idega.business.IBOSessionBean; import com.idega.core.location.data.Address; import com.idega.core.location.data.PostalCode; import com.idega.data.IDOEntityDefinition; import com.idega.data.IDOLookup; import com.idega.idegaweb.IWBundle; import com.idega.idegaweb.IWResourceBundle; import com.idega.user.business.UserStatusBusiness; import com.idega.user.data.Group; import com.idega.user.data.GroupRelation; import com.idega.user.data.GroupRelationHome; import com.idega.user.data.User; import com.idega.user.data.UserHome; import com.idega.user.data.UserStatus; import com.idega.util.IWTimestamp; /** * Title: CommuneReportBusinessBean * Description: * Copyright: Copyright (c) 2003 * Company: idega Software * @author 2003 - idega team - <br><a href="mailto:gummi@idega.is">Gudmundur Agust Saemundsson</a><br> * @version 1.0 */ public class CommuneReportBusinessBean extends IBOSessionBean implements CommuneReportBusiness{ private CommuneUserBusiness _communeUserService = null; private FamilyLogic _familyLogic = null; private IWBundle _iwb = null; private IWResourceBundle _iwrb = null; private final static String IW_BUNDLE_IDENTIFIER = "se.idega.idegaweb.commune"; private final long millisecondsInOneDay = 8640000; /** * */ public CommuneReportBusinessBean() { super(); } private void initializeCommuneUserBusinessIfNeeded() throws RemoteException{ if(_communeUserService==null){ _communeUserService = (CommuneUserBusiness)IBOLookup.getServiceInstance(this.getIWApplicationContext(),CommuneUserBusiness.class); } } private void initializeMemberFamilyLogicIfNeeded() throws RemoteException{ if(_familyLogic==null){ _familyLogic = (FamilyLogic)IBOLookup.getServiceInstance(this.getIWApplicationContext(),FamilyLogic.class); } } private void initializeBundlesIfNeeded(){ if(_iwb==null){ _iwb = this.getIWApplicationContext().getIWMainApplication().getBundle(IW_BUNDLE_IDENTIFIER); } _iwrb = _iwb.getResourceBundle(this.getUserContext().getCurrentLocale()); } public ReportableCollection getChildAndItsParentsRegisteredInCommune(Date firstRegistrationDateInPeriode, Date lastRegistrationDateInPeriode, Date firstBirthDateInPeriode, Date lastBirthDateInPeriode) throws RemoteException, CreateException, FinderException{ Timestamp timestampFRDIP = new Timestamp(firstRegistrationDateInPeriode.getTime()); final long millisecondsInOneDay = 8640000; Timestamp timestampLRDIP = new Timestamp(lastRegistrationDateInPeriode.getTime()+millisecondsInOneDay-1); return getChildAndItsParentsRegisteredInCommune(firstBirthDateInPeriode, lastBirthDateInPeriode, timestampFRDIP, timestampLRDIP); } public ReportableCollection getCitizensRelatedToChildCareOrSchoolAndHaveChangedStatusInSelectedPeriod(Date firstDateOfContitionInPeriode, Date lastDateOfConditionInPeriode, Date firstBirthDateInPeriode, Date lastBirthDateInPeriode) throws RemoteException, CreateException, FinderException{ ReportableCollection rColl = getCitizensRelatedToSchoolAndHaveChangedStatusInSelectedPeriod(firstBirthDateInPeriode,lastBirthDateInPeriode,firstDateOfContitionInPeriode,lastDateOfConditionInPeriode); return rColl; } public ReportableCollection getChildAndItsParentsRegisteredInCommune(Date firstBirthDateInPeriode, Date lastBirthDateInPeriode, Timestamp firstRegistrationDateInPeriode, Timestamp lastRegistrationDateInPeriode) throws RemoteException, CreateException, FinderException{ initializeMemberFamilyLogicIfNeeded(); initializeCommuneUserBusinessIfNeeded(); initializeBundlesIfNeeded(); ReportableCollection reportData = new ReportableCollection(); //find the main nacka group Group communeGroup = _communeUserService.getRootCitizenGroup(); //((GroupHome)IDOLookup.getHome(Group.class)).findByPrimaryKey(new Integer(3)); //find all childs by conditions String[] status = new String[1]; status[0] = GroupRelation.STATUS_ACTIVE; Collection childs = ((UserHome)IDOLookup.getHome(User.class)).findByDateOfBirthAndGroupRelationInitiationTimeAndStatus(firstBirthDateInPeriode,lastBirthDateInPeriode,communeGroup,firstRegistrationDateInPeriode,lastRegistrationDateInPeriode,status); GroupRelationHome gRelationHome = ((GroupRelationHome)IDOLookup.getHome(GroupRelation.class)); //initializing fields IDOEntityDefinition userDef = IDOLookup.getEntityDefinitionForClass(User.class); IDOEntityDefinition grRelDef = IDOLookup.getEntityDefinitionForClass(GroupRelation.class); IDOEntityDefinition addrDef = IDOLookup.getEntityDefinitionForClass(Address.class); Locale currentLocale = this.getUserContext().getCurrentLocale(); DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.SHORT,currentLocale); DateFormat dateTimeFormat = DateFormat.getDateTimeInstance(DateFormat.SHORT,DateFormat.SHORT,currentLocale); //Child - Fields ReportableField childPersonalID = new ReportableField(userDef.findFieldByUniqueName(User.FIELD_PERSONAL_ID)); childPersonalID.setCustomMadeFieldName("child_ssn"); childPersonalID.setLocalizedName( _iwrb.getLocalizedString("CommuneReportBusiness.child_ssn","Personal ID"),currentLocale); reportData.addField(childPersonalID); ReportableField childLastName = new ReportableField(userDef.findFieldByUniqueName(User.FIELD_LAST_NAME)); childLastName.setCustomMadeFieldName("child_last_name"); childLastName.setLocalizedName(_iwrb.getLocalizedString("CommuneReportBusiness.child_last_name","LastName"),currentLocale); reportData.addField(childLastName); ReportableField childFirstName = new ReportableField(userDef.findFieldByUniqueName(User.FIELD_FIRST_NAME)); childFirstName.setCustomMadeFieldName("child_first_name"); childFirstName.setLocalizedName(_iwrb.getLocalizedString("CommuneReportBusiness.child_first_name","FirstName"),currentLocale); reportData.addField(childFirstName); ReportableField childAddress = new ReportableField(addrDef.findFieldByUniqueName(Address.FIELD_STREET_NAME)); childAddress.setValueClass(String.class); childAddress.setCustomMadeFieldName("child_address"); childAddress.setLocalizedName(_iwrb.getLocalizedString("CommuneReportBusiness.child_address","Address"),currentLocale); reportData.addField(childAddress); ReportableField childGroupInvitationDate = new ReportableField(grRelDef.findFieldByUniqueName(GroupRelation.FIELD_INITIATION_DATE)); childGroupInvitationDate.setValueClass(String.class); childGroupInvitationDate.setCustomMadeFieldName("child_gr_initiation_date"); childGroupInvitationDate.setLocalizedName(_iwrb.getLocalizedString("CommuneReportBusiness.child_gr_initiation_date","Invitiation date"),currentLocale); reportData.addField(childGroupInvitationDate); //Parent1 - Fields ReportableField parent1PersonalID = new ReportableField(userDef.findFieldByUniqueName(User.FIELD_PERSONAL_ID)); parent1PersonalID.setCustomMadeFieldName("parent1_ssn"); parent1PersonalID.setLocalizedName(_iwrb.getLocalizedString("CommuneReportBusiness.parent1_ssn","Parent1 Personal ID"),currentLocale); reportData.addField(parent1PersonalID); ReportableField parent1LastName = new ReportableField(userDef.findFieldByUniqueName(User.FIELD_LAST_NAME)); parent1LastName.setCustomMadeFieldName("parent1_last_name"); parent1LastName.setLocalizedName(_iwrb.getLocalizedString("CommuneReportBusiness.parent1_last_name","Parent1 LastName"),currentLocale); reportData.addField(parent1LastName); ReportableField parent1FirstName = new ReportableField(userDef.findFieldByUniqueName(User.FIELD_FIRST_NAME)); parent1FirstName.setCustomMadeFieldName("parent1_first_name"); parent1FirstName.setLocalizedName(_iwrb.getLocalizedString("CommuneReportBusiness.parent1_first_name","Parent1 FirstName"),currentLocale); reportData.addField(parent1FirstName); ReportableField parent1Address = new ReportableField(addrDef.findFieldByUniqueName(Address.FIELD_STREET_NAME)); parent1Address.setValueClass(String.class); parent1Address.setCustomMadeFieldName("parent1_address"); parent1Address.setLocalizedName(_iwrb.getLocalizedString("CommuneReportBusiness.parent1_address","Parent1 Address"),currentLocale); reportData.addField(parent1Address); ReportableField parent1GroupInvitationDate = new ReportableField(grRelDef.findFieldByUniqueName(GroupRelation.FIELD_INITIATION_DATE)); parent1GroupInvitationDate.setValueClass(String.class); parent1GroupInvitationDate.setCustomMadeFieldName("parent1_gr_initiation_date"); parent1GroupInvitationDate.setLocalizedName(_iwrb.getLocalizedString("CommuneReportBusiness.parent1_gr_initiation_date","Parent1 Invitiation date"),currentLocale); reportData.addField(parent1GroupInvitationDate); //Parent2 - Fields ReportableField parent2PersonalID = new ReportableField(userDef.findFieldByUniqueName(User.FIELD_PERSONAL_ID)); parent2PersonalID.setCustomMadeFieldName("parent2_ssn"); parent2PersonalID.setLocalizedName(_iwrb.getLocalizedString("CommuneReportBusiness.parent2_ssn","Parent2 Personal ID"),currentLocale); reportData.addField(parent2PersonalID); ReportableField parent2LastName = new ReportableField(userDef.findFieldByUniqueName(User.FIELD_LAST_NAME)); parent2LastName.setCustomMadeFieldName("parent2_last_name"); parent2LastName.setLocalizedName(_iwrb.getLocalizedString("CommuneReportBusiness.parent2_last_name","Parent2 LastName"),currentLocale); reportData.addField(parent2LastName); ReportableField parent2FirstName = new ReportableField(userDef.findFieldByUniqueName(User.FIELD_FIRST_NAME)); parent2FirstName.setCustomMadeFieldName("parent2_first_name"); parent2FirstName.setLocalizedName(_iwrb.getLocalizedString("CommuneReportBusiness.parent2_first_name","Parent2 FirstName"),currentLocale); reportData.addField(parent2FirstName); ReportableField parent2Address = new ReportableField(addrDef.findFieldByUniqueName(Address.FIELD_STREET_NAME)); parent2Address.setValueClass(String.class); parent2Address.setCustomMadeFieldName("parent2_address"); parent2Address.setLocalizedName(_iwrb.getLocalizedString("CommuneReportBusiness.parent2_address","Parent2 Address"),currentLocale); reportData.addField(parent2Address); ReportableField parent2GroupInvitationDate = new ReportableField(grRelDef.findFieldByUniqueName(GroupRelation.FIELD_INITIATION_DATE)); parent2GroupInvitationDate.setValueClass(String.class); parent2GroupInvitationDate.setCustomMadeFieldName("parent2_gr_initiation_date"); parent2GroupInvitationDate.setLocalizedName(_iwrb.getLocalizedString("CommuneReportBusiness.parent2_gr_initiation_date","Parent2 Invitiation date"),currentLocale); reportData.addField(parent2GroupInvitationDate); //Creating report data and adding to collection Iterator iter = childs.iterator(); while (iter.hasNext()) { User child = (User)iter.next(); ReportableData data = new ReportableData(); //ChildData data.addData(childPersonalID,child.getPersonalID()); data.addData(childLastName,child.getLastName()); data.addData(childFirstName,child.getFirstName()); reportData.add(data); Address childAddressEntiy = _communeUserService.getUsersMainAddress(child); String childAddressString = this.getAddressString(childAddressEntiy,_iwrb); if(childAddressString != null){ data.addData(childAddress,childAddressString); } Collection coll = gRelationHome.findGroupsRelationshipsContainingGroupsAndStatus(communeGroup,child,GroupRelation.STATUS_ACTIVE); Iterator iterator = coll.iterator(); if(iterator.hasNext()){ GroupRelation rel = (GroupRelation)iterator.next(); Timestamp time = rel.getInitiationDate(); if(time != null){ data.addData(childGroupInvitationDate,dateFormat.format(time)); } else { data.addData(childGroupInvitationDate,"No time specified"); } } try { //Parent data Collection parents = _familyLogic.getCustodiansFor(child); Iterator pIter = parents.iterator(); //parent1 if (pIter.hasNext()) { User parent = (User)pIter.next(); ReportableData pData = new ReportableData(); data.addData(parent1PersonalID,parent.getPersonalID()); data.addData(parent1LastName,parent.getLastName()); data.addData(parent1FirstName,parent.getFirstName()); reportData.add(pData); Address parent1AddressEntiy = _communeUserService.getUsersMainAddress(child); String parent1AddressString = this.getAddressString(parent1AddressEntiy,_iwrb); if(parent1AddressString!=null) { data.addData(parent1Address,parent1AddressString); } Collection pColl = gRelationHome.findGroupsRelationshipsContainingGroupsAndStatus(communeGroup,parent,GroupRelation.STATUS_ACTIVE); Iterator pIterator = pColl.iterator(); if(pIterator.hasNext()){ GroupRelation rel = (GroupRelation)pIterator.next(); Timestamp time = rel.getInitiationDate(); if(time != null){ data.addData(parent1GroupInvitationDate,dateFormat.format(time)); } else { data.addData(parent1GroupInvitationDate,_iwrb.getLocalizedString("CommuneReportBusiness.no_time_specified","No time specified")); } } } //Parent2 if (pIter.hasNext()) { User parent = (User)pIter.next(); ReportableData pData = new ReportableData(); data.addData(parent2PersonalID,parent.getPersonalID()); data.addData(parent2LastName,parent.getLastName()); data.addData(parent2FirstName,parent.getFirstName()); reportData.add(pData); Address parent2AddressEntiy = _communeUserService.getUsersMainAddress(child); String parent2AddressString = this.getAddressString(parent2AddressEntiy,_iwrb); if(parent2AddressString!=null) { data.addData(parent2Address,parent2AddressString); } Collection pColl = gRelationHome.findGroupsRelationshipsContainingGroupsAndStatus(communeGroup,parent,GroupRelation.STATUS_ACTIVE); Iterator pIterator = pColl.iterator(); if(pIterator.hasNext()){ GroupRelation rel = (GroupRelation)pIterator.next(); Timestamp time = rel.getInitiationDate(); if(time != null){ data.addData(parent2GroupInvitationDate,dateFormat.format(time)); } else { data.addData(parent2GroupInvitationDate,_iwrb.getLocalizedString("CommuneReportBusiness.no_time_specified","No time specified")); } } } } catch (NoCustodianFound e) { //System.out.println("["+this.getClass()+"]: "+e.getMessage()); //e.printStackTrace(); } } reportData.addExtraHeaderParameter("label_current_date",_iwrb.getLocalizedString("CommuneReportBusiness.label_current_date","Current date"),"current_date",dateTimeFormat.format(IWTimestamp.getTimestampRightNow())); return reportData; } public ReportableCollection getCitizensRelatedToSchoolAndHaveChangedStatusInSelectedPeriod(Date firstBirthDateInPeriode, Date lastBirthDateInPeriode, Date firstDateOfContitionInPeriode, Date lastDateOfConditionInPeriode) throws RemoteException, CreateException, FinderException{ ReportableCollection reportData = new ReportableCollection(); //get all users related to school or child care, that is if user is registered to school or child care or has child that is Collection registeredCitizens = ((CitizenHome)IDOLookup.getHome(Citizen.class)).findAllCitizensRegisteredToSchool(firstBirthDateInPeriode, lastBirthDateInPeriode,IWTimestamp.RightNow().getDate()); return filterOutCitizensAndAddToReportDataSource(reportData,registeredCitizens,firstDateOfContitionInPeriode, lastDateOfConditionInPeriode); } private ReportableCollection filterOutCitizensAndAddToReportDataSource(ReportableCollection reportData, Collection citizenCollection,Date firstDateOfContitionInPeriode, Date lastDateOfConditionInPeriode) throws RemoteException, CreateException, FinderException{ initializeMemberFamilyLogicIfNeeded(); initializeCommuneUserBusinessIfNeeded(); initializeBundlesIfNeeded(); //find the main nacka group Group communeGroup = _communeUserService.getRootCitizenGroup(); //((GroupHome)IDOLookup.getHome(Group.class)).findByPrimaryKey(new Integer(3)); GroupRelationHome gRelationHome = ((GroupRelationHome)IDOLookup.getHome(GroupRelation.class)); //initializing fields IDOEntityDefinition userDef = IDOLookup.getEntityDefinitionForClass(User.class); IDOEntityDefinition grRelDef = IDOLookup.getEntityDefinitionForClass(GroupRelation.class); IDOEntityDefinition addrDef = IDOLookup.getEntityDefinitionForClass(Address.class); Locale currentLocale = this.getUserContext().getCurrentLocale(); DateFormat dataFormat = DateFormat.getDateInstance(DateFormat.SHORT,currentLocale); DateFormat dateTimeFormat = DateFormat.getDateTimeInstance(DateFormat.SHORT,DateFormat.SHORT,currentLocale); //Child - Fields ReportableField childPersonalID = new ReportableField(userDef.findFieldByUniqueName(User.FIELD_PERSONAL_ID)); childPersonalID.setCustomMadeFieldName("child_ssn"); childPersonalID.setLocalizedName( _iwrb.getLocalizedString("CommuneReportBusiness.child_ssn","Personal ID"),currentLocale); reportData.addField(childPersonalID); ReportableField childLastName = new ReportableField(userDef.findFieldByUniqueName(User.FIELD_LAST_NAME)); childLastName.setCustomMadeFieldName("child_last_name"); childLastName.setLocalizedName(_iwrb.getLocalizedString("CommuneReportBusiness.child_last_name","LastName"),currentLocale); reportData.addField(childLastName); ReportableField childFirstName = new ReportableField(userDef.findFieldByUniqueName(User.FIELD_FIRST_NAME)); childFirstName.setCustomMadeFieldName("child_first_name"); childFirstName.setLocalizedName(_iwrb.getLocalizedString("CommuneReportBusiness.child_first_name","FirstName"),currentLocale); reportData.addField(childFirstName); ReportableField childAddress = new ReportableField(addrDef.findFieldByUniqueName(Address.FIELD_STREET_NAME)); childAddress.setValueClass(String.class); childAddress.setCustomMadeFieldName("child_address"); childAddress.setLocalizedName(_iwrb.getLocalizedString("CommuneReportBusiness.child_address","Address"),currentLocale); reportData.addField(childAddress); ReportableField childGroupInvitationDate = new ReportableField(grRelDef.findFieldByUniqueName(GroupRelation.FIELD_INITIATION_DATE)); childGroupInvitationDate.setValueClass(String.class); childGroupInvitationDate.setCustomMadeFieldName("child_gr_initiation_date"); childGroupInvitationDate.setLocalizedName(_iwrb.getLocalizedString("CommuneReportBusiness.child_gr_initiation_date","Invitiation date"),currentLocale); reportData.addField(childGroupInvitationDate); //reason ReportableField reasonField = new ReportableField("reason",String.class); reasonField.setLocalizedName(_iwrb.getLocalizedString("CommuneReportBusiness.reason","Reason"),currentLocale); reportData.addField(reasonField); //date of action ReportableField actionDateField = new ReportableField("actionDate",String.class); actionDateField.setLocalizedName(_iwrb.getLocalizedString("CommuneReportBusiness.reg_date","Registration date"),currentLocale); reportData.addField(actionDateField); //Parent1 - Fields ReportableField parent1PersonalID = new ReportableField(userDef.findFieldByUniqueName(User.FIELD_PERSONAL_ID)); parent1PersonalID.setCustomMadeFieldName("parent1_ssn"); parent1PersonalID.setLocalizedName(_iwrb.getLocalizedString("CommuneReportBusiness.parent1_ssn","Parent1 Personal ID"),currentLocale); reportData.addField(parent1PersonalID); ReportableField parent1LastName = new ReportableField(userDef.findFieldByUniqueName(User.FIELD_LAST_NAME)); parent1LastName.setCustomMadeFieldName("parent1_last_name"); parent1LastName.setLocalizedName(_iwrb.getLocalizedString("CommuneReportBusiness.parent1_last_name","Parent1 LastName"),currentLocale); reportData.addField(parent1LastName); ReportableField parent1FirstName = new ReportableField(userDef.findFieldByUniqueName(User.FIELD_FIRST_NAME)); parent1FirstName.setCustomMadeFieldName("parent1_first_name"); parent1FirstName.setLocalizedName(_iwrb.getLocalizedString("CommuneReportBusiness.parent1_first_name","Parent1 FirstName"),currentLocale); reportData.addField(parent1FirstName); ReportableField parent1Address = new ReportableField(addrDef.findFieldByUniqueName(Address.FIELD_STREET_NAME)); parent1Address.setValueClass(String.class); parent1Address.setCustomMadeFieldName("parent1_address"); parent1Address.setLocalizedName(_iwrb.getLocalizedString("CommuneReportBusiness.parent1_address","Parent1 Address"),currentLocale); reportData.addField(parent1Address); ReportableField parent1GroupInvitationDate = new ReportableField(grRelDef.findFieldByUniqueName(GroupRelation.FIELD_INITIATION_DATE)); parent1GroupInvitationDate.setValueClass(String.class); parent1GroupInvitationDate.setCustomMadeFieldName("parent1_gr_initiation_date"); parent1GroupInvitationDate.setLocalizedName(_iwrb.getLocalizedString("CommuneReportBusiness.parent1_gr_initiation_date","Parent1 Invitiation date"),currentLocale); reportData.addField(parent1GroupInvitationDate); //Parent2 - Fields ReportableField parent2PersonalID = new ReportableField(userDef.findFieldByUniqueName(User.FIELD_PERSONAL_ID)); parent2PersonalID.setCustomMadeFieldName("parent2_ssn"); parent2PersonalID.setLocalizedName(_iwrb.getLocalizedString("CommuneReportBusiness.parent2_ssn","Parent2 Personal ID"),currentLocale); reportData.addField(parent2PersonalID); ReportableField parent2LastName = new ReportableField(userDef.findFieldByUniqueName(User.FIELD_LAST_NAME)); parent2LastName.setCustomMadeFieldName("parent2_last_name"); parent2LastName.setLocalizedName(_iwrb.getLocalizedString("CommuneReportBusiness.parent2_last_name","Parent2 LastName"),currentLocale); reportData.addField(parent2LastName); ReportableField parent2FirstName = new ReportableField(userDef.findFieldByUniqueName(User.FIELD_FIRST_NAME)); parent2FirstName.setCustomMadeFieldName("parent2_first_name"); parent2FirstName.setLocalizedName(_iwrb.getLocalizedString("CommuneReportBusiness.parent2_first_name","Parent2 FirstName"),currentLocale); reportData.addField(parent2FirstName); ReportableField parent2Address = new ReportableField(addrDef.findFieldByUniqueName(Address.FIELD_STREET_NAME)); parent2Address.setValueClass(String.class); parent2Address.setCustomMadeFieldName("parent2_address"); parent2Address.setLocalizedName(_iwrb.getLocalizedString("CommuneReportBusiness.parent2_address","Parent2 Address"),currentLocale); reportData.addField(parent2Address); ReportableField parent2GroupInvitationDate = new ReportableField(grRelDef.findFieldByUniqueName(GroupRelation.FIELD_INITIATION_DATE)); parent2GroupInvitationDate.setValueClass(String.class); parent2GroupInvitationDate.setCustomMadeFieldName("parent2_gr_initiation_date"); parent2GroupInvitationDate.setLocalizedName(_iwrb.getLocalizedString("CommuneReportBusiness.parent2_gr_initiation_date","Parent2 Invitiation date"),currentLocale); reportData.addField(parent2GroupInvitationDate); //Creating report data and adding to collection Iterator iter = citizenCollection.iterator(); String reasonPrifixChild = _iwrb.getLocalizedString("CommuneReportBusiness.child","Child "); String reasonPrifixParent1 = _iwrb.getLocalizedString("CommuneReportBusiness.parent1","Parent1 "); String reasonPrifixparent2 = _iwrb.getLocalizedString("CommuneReportBusiness.parent2","Parent2 "); while (iter.hasNext()) { boolean addToList = false; User child = (User)iter.next(); Collection parents = null; try{ parents = _familyLogic.getCustodiansFor(child); } catch (NoCustodianFound e) { //System.out.println("["+this.getClass()+"]: "+e.getMessage()); //e.printStackTrace(); } catch (EJBException e){ System.out.println("["+this.getClass()+"]: "+e.getMessage()); System.out.println("["+this.getClass()+"]: user:"+child); e.printStackTrace(); } Object[][] childConditions = getFulFilledConditionsForReportAndTheirOccurrenceTime(child, firstDateOfContitionInPeriode, lastDateOfConditionInPeriode,reasonPrifixChild); Object[][] parent1Conditions = null; Object[][] parent2Conditions = null; if(parents!= null){ Iterator parConditionIter = parents.iterator(); if(parConditionIter.hasNext()){ User parent1 = (User)parConditionIter.next(); if(parent1 !=null){ parent1Conditions = getFulFilledConditionsForReportAndTheirOccurrenceTime(parent1,firstDateOfContitionInPeriode, lastDateOfConditionInPeriode,reasonPrifixParent1); } } if(parConditionIter.hasNext()){ User parent2 = (User)parConditionIter.next(); if(parent2 !=null){ parent2Conditions = getFulFilledConditionsForReportAndTheirOccurrenceTime(parent2, firstDateOfContitionInPeriode, lastDateOfConditionInPeriode,reasonPrifixparent2); } } } // add fulfilled conditions to string and mark to put in report (that is set addToList=true) boolean firstFulfilledCondition = true; String reasonString = ""; String actionDateString = ""; if(childConditions != null){ addToList=true; for (int i = 0; i < childConditions.length; i++) { if(!firstFulfilledCondition){ reasonString += " / "; actionDateString += " / "; } else { firstFulfilledCondition=false; } reasonString += (String)childConditions[i][0]; //Reason if(childConditions[i][1] instanceof java.util.Date){ actionDateString += dataFormat.format((java.util.Date)childConditions[i][1]); //Time } else { actionDateString += childConditions[i][1].toString(); } } } if(parent1Conditions != null){ addToList=true; for (int i = 0; i < parent1Conditions.length; i++) { if(!firstFulfilledCondition){ reasonString += " / "; actionDateString += " / "; } else { firstFulfilledCondition=false; } reasonString += (String)parent1Conditions[i][0]; //Reason if(parent1Conditions[i][1] instanceof java.util.Date){ actionDateString += dataFormat.format((java.util.Date)parent1Conditions[i][1]); //Time } else { actionDateString += parent1Conditions[i][1].toString(); } } } if(parent2Conditions != null){ addToList=true; for (int i = 0; i < parent2Conditions.length; i++) { if(!firstFulfilledCondition){ reasonString += " / "; actionDateString += " / "; } else { firstFulfilledCondition=false; } reasonString += (String)parent2Conditions[i][0]; //Reason if(parent2Conditions[i][1] instanceof java.util.Date){ actionDateString += dataFormat.format((java.util.Date)parent2Conditions[i][1]); //Time } else { actionDateString += parent2Conditions[i][1].toString(); } } } // add to report if(addToList){ ReportableData data = new ReportableData(); data.addData(reasonField,reasonString); data.addData(actionDateField,actionDateString); //ChildData data.addData(childPersonalID,child.getPersonalID()); data.addData(childLastName,child.getLastName()); data.addData(childFirstName,child.getFirstName()); reportData.add(data); Address childAddressEntiy = _communeUserService.getUsersMainAddress(child); String childAddressString = this.getAddressString(childAddressEntiy,_iwrb); if(childAddressString != null){ data.addData(childAddress,childAddressString); } Collection coll = gRelationHome.findGroupsRelationshipsContainingGroupsAndStatus(communeGroup,child,GroupRelation.STATUS_ACTIVE); Iterator iterator = coll.iterator(); if(iterator.hasNext()){ GroupRelation rel = (GroupRelation)iterator.next(); Timestamp time = rel.getInitiationDate(); if(time != null){ data.addData(childGroupInvitationDate,dataFormat.format(time)); } else { data.addData(childGroupInvitationDate,"No time specified"); } } if(parents != null){ //Parent data //Collection parents = _familyLogic.getCustodiansFor(child); Iterator pIter = parents.iterator(); //parent1 if (pIter.hasNext()) { User parent = (User)pIter.next(); ReportableData pData = new ReportableData(); data.addData(parent1PersonalID,parent.getPersonalID()); data.addData(parent1LastName,parent.getLastName()); data.addData(parent1FirstName,parent.getFirstName()); reportData.add(pData); Address parent1AddressEntiy = _communeUserService.getUsersMainAddress(child); String parent1AddressString = this.getAddressString(parent1AddressEntiy,_iwrb); if(parent1AddressString!=null) { data.addData(parent1Address,parent1AddressString); } Collection pColl = gRelationHome.findGroupsRelationshipsContainingGroupsAndStatus(communeGroup,parent,GroupRelation.STATUS_ACTIVE); Iterator pIterator = pColl.iterator(); if(pIterator.hasNext()){ GroupRelation rel = (GroupRelation)pIterator.next(); Timestamp time = rel.getInitiationDate(); if(time != null){ data.addData(parent1GroupInvitationDate,dataFormat.format(time)); } else { data.addData(parent1GroupInvitationDate,_iwrb.getLocalizedString("CommuneReportBusiness.no_time_specified","No time specified")); } } } //Parent2 if (pIter.hasNext()) { User parent = (User)pIter.next(); ReportableData pData = new ReportableData(); data.addData(parent2PersonalID,parent.getPersonalID()); data.addData(parent2LastName,parent.getLastName()); data.addData(parent2FirstName,parent.getFirstName()); reportData.add(pData); Address parent2AddressEntiy = _communeUserService.getUsersMainAddress(child); String parent2AddressString = this.getAddressString(parent2AddressEntiy,_iwrb); if(parent2AddressString!=null) { data.addData(parent2Address,parent2AddressString); } Collection pColl = gRelationHome.findGroupsRelationshipsContainingGroupsAndStatus(communeGroup,parent,GroupRelation.STATUS_ACTIVE); Iterator pIterator = pColl.iterator(); if(pIterator.hasNext()){ GroupRelation rel = (GroupRelation)pIterator.next(); Timestamp time = rel.getInitiationDate(); if(time != null){ data.addData(parent2GroupInvitationDate,dataFormat.format(time)); } else { data.addData(parent2GroupInvitationDate,_iwrb.getLocalizedString("CommuneReportBusiness.no_time_specified","No time specified")); } } } } } } reportData.addExtraHeaderParameter("label_current_date",_iwrb.getLocalizedString("CommuneReportBusiness.label_current_date","Current date"),"current_date",dateTimeFormat.format(IWTimestamp.getTimestampRightNow())); return reportData; } /** * @param usr * @return Returns array of Objects that is Object[x][2], null if no conditions are fulfilled * Object[x][0] = condition Key (String), Object[x][1]=date of occurrance (java.util.Date or it's subclasses) */ private Object[][] getFulFilledConditionsForReportAndTheirOccurrenceTime(User usr,Date firstDateOfContitionInPeriode, Date lastDateOfConditionInPeriode, String resonPrifix) throws RemoteException, CreateException, FinderException{ initializeBundlesIfNeeded(); // initializeContitionStrings(); java.util.Date deceased = hasDeceasedInTimePeriode(usr, firstDateOfContitionInPeriode, lastDateOfConditionInPeriode); boolean livesNotInCommune = livesNotInCommune(usr, firstDateOfContitionInPeriode, lastDateOfConditionInPeriode); java.util.Date hasMoved = hasMovedFromCommune(usr, firstDateOfContitionInPeriode, lastDateOfConditionInPeriode); java.util.Date hiddenAddress = hasChangedAddressToProtected(usr, firstDateOfContitionInPeriode, lastDateOfConditionInPeriode); int arraySize = 0; if(deceased != null){ arraySize++; } if(livesNotInCommune){ arraySize++; } if(hasMoved != null){ arraySize++; } if(hiddenAddress != null){ arraySize++; } Object[][] toReturn = null; if(arraySize>0){ toReturn = new Object[arraySize][2]; } int index = 0; if(deceased != null){ toReturn[index][0] = resonPrifix +" "+_iwrb.getLocalizedString("CommuneReportBusiness.is_deceased","is deceased"); toReturn[index][1] = deceased; index++; } if(livesNotInCommune){ toReturn[index][0] = resonPrifix +" "+_iwrb.getLocalizedString("CommuneReportBusiness.does_not_live_in_the_commune","does not live in the commune"); toReturn[index][1] = "-"; index++; } if(hasMoved != null){ toReturn[index][0] = resonPrifix +" "+_iwrb.getLocalizedString("CommuneReportBusiness.has_moved","has moved"); toReturn[index][1] = hasMoved; index++; } if(hiddenAddress != null){ toReturn[index][0] = resonPrifix +" "+_iwrb.getLocalizedString("CommuneReportBusiness.hidden_address","has protected address"); toReturn[index][1] = hiddenAddress; index++; } return toReturn; } // /** // * // */ // private void initializeContitionStrings() { // // TODO Auto-generated method stub // // } /** * @param usr * @param firstDateOfContitionInPeriode * @param lastDateOfConditionInPeriode * @return Returns time of the event or null if condition is not fulfilled */ private java.util.Date hasChangedAddressToProtected(User usr, Date firstDateOfContitionInPeriode, Date lastDateOfConditionInPeriode) throws RemoteException, CreateException, FinderException { //Collection protectedUserColl = getProtectedUsersCollection(firstDateOfContitionInPeriode, lastDateOfConditionInPeriode); GroupRelationHome gRelationHome = ((GroupRelationHome)IDOLookup.getHome(GroupRelation.class)); initializeCommuneUserBusinessIfNeeded(); Group protectedUserGroup = _communeUserService.getRootProtectedCitizenGroup(); Collection relToProtectedGroup = gRelationHome.findGroupsRelationshipsContainingGroupsAndStatus(protectedUserGroup,usr,GroupRelation.STATUS_ACTIVE); if(relToProtectedGroup != null){ long first = firstDateOfContitionInPeriode.getTime(); long last = lastDateOfConditionInPeriode.getTime()+millisecondsInOneDay-1; Iterator iter = relToProtectedGroup.iterator(); while (iter.hasNext()) { GroupRelation element = (GroupRelation)iter.next(); java.util.Date date = element.getInitiationDate(); long current = date.getTime(); if(first <= current && current <= last){ return date; } } } return null; } /** * @param usr * @param firstDateOfContitionInPeriode * @param lastDateOfConditionInPeriode * @return Returns time of the event or null if condition is not fulfilled */ private java.util.Date hasMovedFromCommune(User usr, Date firstDateOfContitionInPeriode, Date lastDateOfConditionInPeriode) throws RemoteException, CreateException, FinderException { Group rootCitizenGroup = _communeUserService.getRootCitizenGroup(); Timestamp timestampFDOCIP = new Timestamp(firstDateOfContitionInPeriode.getTime()); final long millisecondsInOneDay = 8640000; Timestamp timestampLDOCIP = new Timestamp(lastDateOfConditionInPeriode.getTime()+millisecondsInOneDay-1); String[] status = new String[1]; status[0] = GroupRelation.STATUS_ACTIVE; try { Collection childs = ((GroupRelationHome)IDOLookup.getHome(GroupRelation.class)).findAllGroupsRelationshipsTerminatedWithinSpecifiedTimePeriod(rootCitizenGroup,usr,timestampFDOCIP,timestampLDOCIP,status); if(!childs.isEmpty()){ Iterator iter = childs.iterator(); if(iter.hasNext()){ return ((GroupRelation)iter.next()).getTerminationDate(); }else { return null; } } else { return null; } } catch (FinderException e) { e.printStackTrace(); return null; } } /** * @param usr * @param firstDateOfContitionInPeriode * @param lastDateOfConditionInPeriode * @return Returns true if user lives in nacka the whole time periode */ private boolean livesNotInCommune(User usr, Date firstDateOfContitionInPeriode, Date lastDateOfConditionInPeriode) throws RemoteException, CreateException, FinderException { // TODO Auto-generated method stub Group rootSpecialCitizenGroup = _communeUserService.getRootOtherCommuneCitizensGroup(); Timestamp timestampFDOCIP = new Timestamp(firstDateOfContitionInPeriode.getTime()); final long millisecondsInOneDay = 8640000; Timestamp timestampLDOCIP = new Timestamp(lastDateOfConditionInPeriode.getTime()+millisecondsInOneDay-1); String[] status = new String[1]; status[0] = GroupRelation.STATUS_ACTIVE; Collection childs; try { childs = ((GroupRelationHome)IDOLookup.getHome(GroupRelation.class)).findAllGroupsRelationshipsValidWithinSpecifiedTimePeriod(rootSpecialCitizenGroup, usr, timestampFDOCIP, timestampLDOCIP, status); } catch (FinderException e) { e.printStackTrace(); return false; } return !childs.isEmpty(); } /** * @param usr * @param firstDateOfContitionInPeriode * @param lastDateOfConditionInPeriode * @return Returns time of the event or null if condition is not fulfilled */ private java.util.Date hasDeceasedInTimePeriode(User usr, Date firstDateOfConditionInPeriod, Date lastDateOfConditionInPeriod) { try { UserStatus status = getUserStatusService().getDeceasedUserStatus((Integer)usr.getPrimaryKey()); if (status == null) return null; Timestamp deceasedDate = status.getDateFrom(); if (firstDateOfConditionInPeriod.getTime() <= deceasedDate.getTime() && deceasedDate.getTime() <= lastDateOfConditionInPeriod.getTime()) return deceasedDate; } catch (RemoteException e) { e.printStackTrace(); } catch (EJBException e) { e.printStackTrace(); } return null; } private UserStatusBusiness getUserStatusService() throws RemoteException { return (UserStatusBusiness)getServiceInstance(UserStatusBusiness.class); } private String getAddressString(Address addressEntiy, IWResourceBundle iwrb ){ if(addressEntiy!=null){ String stName = addressEntiy.getStreetName(); String number = addressEntiy.getStreetNumber(); String postalCode = iwrb.getLocalizedString("CommuneReportBusiness.not_available","N/A"); PostalCode pCodeObj = addressEntiy.getPostalCode(); String city = addressEntiy.getCity(); if(pCodeObj!=null){ postalCode = pCodeObj.getPostalCode(); } else if(city == null){ String childAddressString = stName+((number==null)?"":(" "+number)); return childAddressString; } String childAddressString = stName+((number==null)?"":(" "+number)); return childAddressString+", "+postalCode+" "+city; } return ""; } }