/* * Created on Jun 30, 2004 */ package is.idega.idegaweb.marathon.business; import is.idega.block.family.business.FamilyLogic; import is.idega.block.family.business.NoParentFound; import is.idega.idegaweb.marathon.data.Charity; import is.idega.idegaweb.marathon.data.Distance; import is.idega.idegaweb.marathon.data.Participant; import is.idega.idegaweb.marathon.data.ParticipantHome; import is.idega.idegaweb.marathon.data.Run; import is.idega.idegaweb.marathon.data.Year; import is.idega.idegaweb.marathon.data.YearBMPBean; import is.idega.idegaweb.marathon.presentation.CreateYearForm; import is.idega.idegaweb.marathon.util.IWMarathonConstants; import is.idega.idegaweb.marathon.webservice.hlaupastyrkur.client.ContestantRequest; import is.idega.idegaweb.marathon.webservice.hlaupastyrkur.client.ContestantServiceLocator; import is.idega.idegaweb.marathon.webservice.hlaupastyrkur.client.IContestantService; import is.idega.idegaweb.marathon.webservice.hlaupastyrkur.client.Login; import is.idega.idegaweb.marathon.webservice.hlaupastyrkur.client.TeamMember; import is.idega.idegaweb.marathon.webservice.hlaupastyrkur.client.TeamRequest; import java.net.URL; import java.rmi.RemoteException; import java.sql.Date; import java.text.MessageFormat; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; import java.util.Locale; import java.util.Map; import javax.ejb.CreateException; import javax.ejb.EJBException; import javax.ejb.FinderException; import javax.transaction.UserTransaction; import com.idega.block.creditcard.business.CreditCardAuthorizationException; import com.idega.block.creditcard.business.CreditCardBusiness; import com.idega.block.creditcard.business.CreditCardClient; import com.idega.block.creditcard.data.CreditCardMerchant; import com.idega.block.creditcard.data.TPosMerchant; import com.idega.block.creditcard.data.TPosMerchantHome; import com.idega.business.IBOLookup; import com.idega.business.IBOLookupException; import com.idega.business.IBORuntimeException; import com.idega.business.IBOServiceBean; import com.idega.core.accesscontrol.business.LoginDBHandler; import com.idega.core.accesscontrol.data.LoginTable; import com.idega.core.contact.data.Email; import com.idega.core.location.data.Address; import com.idega.core.location.data.AddressHome; import com.idega.core.location.data.Country; import com.idega.core.location.data.CountryHome; import com.idega.core.location.data.PostalCode; import com.idega.core.location.data.PostalCodeHome; import com.idega.core.messaging.MessagingSettings; import com.idega.data.IDOAddRelationshipException; import com.idega.data.IDOCreateException; import com.idega.data.IDOException; import com.idega.data.IDOLookup; import com.idega.data.IDOLookupException; import com.idega.idegaweb.IWResourceBundle; import com.idega.presentation.IWContext; import com.idega.user.business.GroupBusiness; import com.idega.user.business.NoEmailFoundException; import com.idega.user.business.UserBusiness; import com.idega.user.data.Gender; import com.idega.user.data.Group; import com.idega.user.data.GroupHome; import com.idega.user.data.User; import com.idega.util.Age; import com.idega.util.IWTimestamp; import com.idega.util.LocaleUtil; import com.idega.util.text.Name; /** * Description: Business bean (service) for run... <br> * Copyright: Idega Software 2004 <br> * Company: Idega Software <br> * * @author birna */ public class RunBusinessBean extends IBOServiceBean implements RunBusiness { private static final String RUN_MIDNIGHT_RUN = "Midnight Run"; private static final String RUN_LAUGAVEGUR = "Laugavegur"; private static final String RUN_LAUGAVEGUR_PREREGISTRATION = "Laugavegur - Forskraning"; private static final String RUN_RVK_MARATHON = "Reykjavik Marathon"; private static final String RUN_LAZY_TOWN_RUN = "Lazy Town Run"; /** * Comment for <code>serialVersionUID</code> */ private static final long serialVersionUID = 3105168986587179336L; private final static String IW_BUNDLE_IDENTIFIER = IWMarathonConstants.IW_BUNDLE_IDENTIFIER; private static String DEFAULT_SMTP_MAILSERVER = "mail.idega.is"; private static String DEFAULT_MESSAGEBOX_FROM_ADDRESS = "marathon@marathon.is"; private static String DEFAULT_CC_ADDRESS = "marathon@marathon.is"; private AddressHome addressHome; private ParticipantHome participantHome; /** * saves information on the user - creates a new user if he doesn't exsist.. */ public User saveUser(String name, String ssn, IWTimestamp dateOfBirth, Gender gender, String address, String postal, String city, Country country) { User user = null; try { if (dateOfBirth == null) { dateOfBirth = getBirthDateFromSSN(ssn); } Name fullName = new Name(name); user = getUserBiz().createUser(fullName.getFirstName(), fullName.getMiddleName(), fullName.getLastName(), fullName.getName(), ssn, gender, dateOfBirth); user.store(); if (address != null && !address.equals("")) { AddressHome addressHome = (AddressHome) getIDOHome(Address.class); Address a = addressHome.create(); a.setStreetName(address); a.setCity(city); a.setCountry(country); a.setAddressType(getAddressHome().getAddressType2()); a.store(); PostalCodeHome postalHome = (PostalCodeHome) getIDOHome(PostalCode.class); Integer countryID = (Integer) country.getPrimaryKey(); PostalCode p = null; try { p = postalHome.findByPostalCodeAndCountryId(postal, countryID.intValue()); } catch (FinderException fe) { p = postalHome.create(); p.setCountry(country); p.setPostalCode(postal); p.setName(city); p.store(); } if (p != null) { a.setPostalCode(p); } a.store(); try { user.addAddress(a); } catch (IDOAddRelationshipException idoEx) { } } user.store(); } catch (RemoteException rme) { } catch (CreateException cre) { } return user; } public boolean isRegisteredInRun(int runID, int userID) { try { User user = getUserBiz().getUserHome().findByPrimaryKey( new Integer(userID)); return getUserBiz().isMemberOfGroup(runID, user); } catch (RemoteException re) { log(re); } catch (FinderException fe) { // User does not exist in database... } return false; } public boolean isRegisteredInRun(String year, Group run, User user) { try { Group runYear = null; String[] types = { IWMarathonConstants.GROUP_TYPE_RUN_YEAR }; Collection years = getGroupBiz().getChildGroups(run, types, true); Iterator iter = years.iterator(); while (iter.hasNext()) { Group yearGroup = (Group) iter.next(); if (yearGroup.getName().equals(year)) { runYear = yearGroup; break; } } if (runYear == null) { return false; } ((ParticipantHome) IDOLookup.getHome(Participant.class)) .findByUserAndRun(user, run, runYear, false); return true; } catch (FinderException fe) { return false; } catch (RemoteException ile) { throw new IBORuntimeException(ile); } } public boolean isRegisteredInRunPreviousYear(Group run, User user) { try { String year = ""; Group runYear = null; String[] types = { IWMarathonConstants.GROUP_TYPE_RUN_YEAR }; Collection years = getGroupBiz().getChildGroups(run, types, true); Iterator iter = years.iterator(); while (iter.hasNext()) { Group yearGroup = (Group) iter.next(); if (yearGroup.getName().equals(year)) { runYear = yearGroup; break; } } if (runYear == null) { return false; } ((ParticipantHome) IDOLookup.getHome(Participant.class)) .findByUserAndRun(user, run, runYear, false); return true; } catch (FinderException fe) { return false; } catch (RemoteException ile) { throw new IBORuntimeException(ile); } } public boolean doesGroupExist(Object distancePK, String groupName) { try { return ((ParticipantHome) IDOLookup.getHome(Participant.class)) .getCountByDistanceAndGroupName(distancePK, groupName) > 0; } catch (IDOException ie) { ie.printStackTrace(); return false; } catch (IDOLookupException ile) { throw new IBORuntimeException(ile); } } public boolean isRegisteredInRun(int runID, String personalID) { try { User user = getUserBiz().getUserHome().findByPersonalID(personalID); return getUserBiz().isMemberOfGroup(runID, user); } catch (RemoteException re) { log(re); } catch (FinderException fe) { // User does not exist in database... } return false; } /** * * @param pin * - a social security number - format ddmmyyxxxx or ddmmyyyy * @return IWTimstamp - the date of birth from the pin.. */ private IWTimestamp getBirthDateFromSSN(String pin) { // pin format = 14011973 if (pin.length() == 8) { int edd = Integer.parseInt(pin.substring(0, 2)); int emm = Integer.parseInt(pin.substring(2, 4)); int eyyyy = Integer.parseInt(pin.substring(4, 8)); IWTimestamp dob = new IWTimestamp(edd, emm, eyyyy); return dob; } // pin format = 140173xxxx ddmmyyxxxx else if (pin.length() == 10) { int dd = Integer.parseInt(pin.substring(0, 2)); int mm = Integer.parseInt(pin.substring(2, 4)); int yy = Integer.parseInt(pin.substring(4, 6)); int century = Integer.parseInt(pin.substring(9, 10)); int yyyy = 0; if (century == 9) { yyyy = yy + 1900; } else if (century == 0) { yyyy = yy + 2000; } IWTimestamp dob = new IWTimestamp(dd, mm, yyyy); return dob; } else { return null; } } public int getAgeFromPersonalID(String personalID) { if (personalID != null) { IWTimestamp dateOfBirth = getBirthDateFromSSN(personalID); if (dateOfBirth != null) { Age age = new Age(dateOfBirth.getDate()); return age.getYears(); } } return -1; } public Participant importParticipant(User user, Group run, Group year, Group distance) throws CreateException { try { Group ageGenderGroup = getAgeGroup(user, run, distance); ageGenderGroup.addGroup(user); ParticipantHome runHome = (ParticipantHome) getIDOHome(Participant.class); Participant participant = runHome.create(); participant.setUser(user); participant.setRunTypeGroup(run); participant.setRunDistanceGroup(distance); participant.setRunYearGroup(year); participant.setRunGroupGroup(ageGenderGroup); participant.store(); return participant; } catch (RemoteException re) { throw new IBORuntimeException(re); } } public Participant storeParticipantRegistration(Runner runner, Locale locale, String runPrefix) throws IDOCreateException { Participant participant = null; UserTransaction trans = getSessionContext().getUserTransaction(); try { trans.begin(); User user = runner.getUser(); String personalId = null; if (user == null) { personalId = runner.getPersonalID(); if (personalId == null || "".equals(personalId.trim())) { IWTimestamp dob = new IWTimestamp(runner.getDateOfBirth()); personalId = dob.getDateString("yyyy-MM-dd"); } user = saveUser(runner.getName(), personalId, new IWTimestamp( runner.getDateOfBirth()), runner.getGender(), runner.getAddress(), runner.getPostalCode(), runner.getCity(), runner.getCountry()); } else { personalId = user.getPersonalID(); } Group ageGenderGroup = getAgeGroup(user, runner.getRun(), runner.getDistance()); ageGenderGroup.addGroup(user); Group yearGroup = (Group) runner.getDistance().getParentNode(); Group run = runner.getRun(); Group distance = runner.getDistance(); Run selectedRun = null; try { selectedRun = ConverterUtility.getInstance().convertGroupToRun( run); } catch (FinderException e) { // Run not found } try { ParticipantHome runHome = (ParticipantHome) getIDOHome(Participant.class); participant = runHome.create(); participant.setUser(user); participant.setRunTypeGroup(run); participant.setRunDistanceGroup(distance); participant.setRunYearGroup(yearGroup); participant.setRunGroupGroup(ageGenderGroup); // participant.setShirtSize(runner.getShirtSize()); participant.setUserNationality(runner.getNationality() .getName()); if (runner.getDistance() != null) { participant .setParticipantNumber(getNextAvailableParticipantNumber(runner .getDistance())); } // participant.setAllowsEmails(runner.getAllowsEmails()); participant.setQuestion1Hour(runner.getQuestion1Hour()); participant.setQuestion1Minute(runner.getQuestion1Minute()); participant.setQuestion1Year(runner.getQuestion1Year()); participant.setQuestion1NeverRan(runner.getQuestion1NeverRan()); // participant.setQuestion2Hour(runner.getQuestion2Hour()); // participant.setQuestion2Minute(runner.getQuestion2Minute()); participant.setQuestion3Hour(runner.getQuestion3Hour()); participant.setQuestion3Minute(runner.getQuestion3Minute()); participant.setQuestion3Year(runner.getQuestion3Year()); participant.setQuestion3NeverRan(runner.getQuestion3NeverRan()); participant.store(); getUserBiz().updateUserHomePhone(user, runner.getHomePhone()); getUserBiz().updateUserMobilePhone(user, runner.getMobilePhone()); getUserBiz().updateUserMail(user, runner.getEmail()); if (runner.getEmail() != null) { IWResourceBundle iwrb = getIWApplicationContext() .getIWMainApplication() .getBundle(IWMarathonConstants.IW_BUNDLE_IDENTIFIER) .getResourceBundle(locale); String distanceString = iwrb.getLocalizedString( distance.getName(), distance.getName()); Object[] args = { user.getName(), iwrb.getLocalizedString(run.getName(), run.getName()) + " " + yearGroup.getName() }; String subject = iwrb.getLocalizedString(runPrefix + "registration_received_subject_mail", "Your registration has been received."); String body = MessageFormat.format(iwrb.getLocalizedString( runPrefix + "registration_received_body_mail", "Your registration has been received."), args); sendMessage(runner.getEmail(), subject, body); } } catch (CreateException ce) { ce.printStackTrace(); } catch (RemoteException re) { throw new IBORuntimeException(re); } trans.commit(); } catch (Exception ex) { try { trans.rollback(); } catch (javax.transaction.SystemException e) { throw new IDOCreateException(e.getMessage()); } ex.printStackTrace(); throw new IDOCreateException(ex); } return participant; } public void storeParticipantConfirmationPayment(Collection participans, String email, String hiddenCardNumber, double amount, IWTimestamp date, Locale locale, boolean disableSendPaymentConfirmation, String runPrefix) throws IDOCreateException { Collection participants = new ArrayList(); UserTransaction trans = getSessionContext().getUserTransaction(); try { trans.begin(); Iterator iter = participans.iterator(); while (iter.hasNext()) { Participant participant = (Participant) iter.next(); User user = participant.getUser(); participant.setHasPayedConfirmation(true); participant.store(); Email participantEmail = null; try { participantEmail = this.getUserBiz() .getUsersMainEmail(user); } catch (NoEmailFoundException nefe) { } catch (RemoteException e) { } if (participantEmail != null) { IWResourceBundle iwrb = getIWApplicationContext() .getIWMainApplication() .getBundle(IWMarathonConstants.IW_BUNDLE_IDENTIFIER) .getResourceBundle(locale); Object[] args = { user.getName(), iwrb.getLocalizedString(participant .getRunTypeGroup().getName(), participant .getRunTypeGroup().getName()) + " " + participant.getRunYearGroup().getName(), iwrb.getLocalizedString( "shirt_size." + participant.getShirtSize(), participant.getShirtSize()) }; String subject = iwrb.getLocalizedString(runPrefix + "confirmation_payment_subject_mail", "Your registration has been received."); String body = MessageFormat.format(iwrb.getLocalizedString( runPrefix + "confirmation_payment_body_mail", "Your registration has been received."), args); sendMessage(participantEmail.getEmailAddress(), subject, body); } } if (email != null && !disableSendPaymentConfirmation && amount > 0) { IWResourceBundle iwrb = getIWApplicationContext() .getIWMainApplication() .getBundle(IWMarathonConstants.IW_BUNDLE_IDENTIFIER) .getResourceBundle(locale); Object[] args = { hiddenCardNumber, String.valueOf(amount), date.getLocaleDateAndTime(locale, IWTimestamp.SHORT, IWTimestamp.SHORT) }; String subject = iwrb.getLocalizedString(runPrefix + "receipt_subject_mail", "Your receipt for registration"); String body = MessageFormat.format(iwrb.getLocalizedString( runPrefix + "receipt_body_mail", "Your registration has been received."), args); sendMessage(email, subject, body); } trans.commit(); } catch (Exception ex) { try { trans.rollback(); } catch (javax.transaction.SystemException e) { throw new IDOCreateException(e.getMessage()); } ex.printStackTrace(); throw new IDOCreateException(ex); } } public void markParticipantAsPaid(Collection participans, String email, String hiddenCardNumber, double amount, IWTimestamp date, Locale locale, boolean disableSendPaymentConfirmation, String runPrefix) throws IDOCreateException { Collection participants = new ArrayList(); UserTransaction trans = getSessionContext().getUserTransaction(); try { trans.begin(); Iterator iter = participans.iterator(); while (iter.hasNext()) { Participant participant = (Participant) iter.next(); User user = participant.getUser(); participant.setHasPayedFee(true); participant.store(); Email participantEmail = null; try { participantEmail = this.getUserBiz() .getUsersMainEmail(user); } catch (NoEmailFoundException nefe) { } catch (RemoteException e) { } if (participantEmail != null) { IWResourceBundle iwrb = getIWApplicationContext() .getIWMainApplication() .getBundle(IWMarathonConstants.IW_BUNDLE_IDENTIFIER) .getResourceBundle(locale); Object[] args = { user.getName(), iwrb.getLocalizedString(participant .getRunTypeGroup().getName(), participant .getRunTypeGroup().getName()) + " " + participant.getRunYearGroup().getName(), iwrb.getLocalizedString( "shirt_size." + participant.getShirtSize(), participant.getShirtSize()) }; String subject = iwrb.getLocalizedString(runPrefix + "confirmation_payment_subject_mail", "Your registration has been received."); String body = MessageFormat.format(iwrb.getLocalizedString( runPrefix + "confirmation_payment_body_mail", "Your registration has been received."), args); sendMessage(participantEmail.getEmailAddress(), subject, body); } } if (email != null && !disableSendPaymentConfirmation && amount > 0) { IWResourceBundle iwrb = getIWApplicationContext() .getIWMainApplication() .getBundle(IWMarathonConstants.IW_BUNDLE_IDENTIFIER) .getResourceBundle(locale); Object[] args = { hiddenCardNumber, String.valueOf(amount), date.getLocaleDateAndTime(locale, IWTimestamp.SHORT, IWTimestamp.SHORT) }; String subject = iwrb.getLocalizedString(runPrefix + "receipt_subject_mail", "Your receipt for registration"); String body = MessageFormat.format(iwrb.getLocalizedString( runPrefix + "receipt_body_mail", "Your registration has been received."), args); sendMessage(email, subject, body); } trans.commit(); } catch (Exception ex) { try { trans.rollback(); } catch (javax.transaction.SystemException e) { throw new IDOCreateException(e.getMessage()); } ex.printStackTrace(); throw new IDOCreateException(ex); } } public Collection saveParticipants(Collection runners, String email, String hiddenCardNumber, double amount, IWTimestamp date, Locale locale, boolean disableSendPaymentConfirmation, String runPrefix, boolean sendCharityRegistration, String authorizationNumber) throws IDOCreateException { Collection participants = new ArrayList(); List hlaupastyrkur = new ArrayList(); UserTransaction trans = getSessionContext().getUserTransaction(); try { trans.begin(); Iterator iter = runners.iterator(); Group run = null; Group distance = null; Run selectedRun = null; Year selectedYear = null; while (iter.hasNext()) { Runner runner = (Runner) iter.next(); User user = runner.getUser(); String personalId = null; if (user == null) { personalId = runner.getPersonalID(); user = saveUser(runner.getName(), personalId, new IWTimestamp(runner.getDateOfBirth()), runner.getGender(), runner.getAddress(), runner.getPostalCode(), runner.getCity(), runner.getCountry()); } else { personalId = user.getPersonalID(); } String userNameString = ""; String passwordString = ""; if (getUserBiz().hasUserLogin(user)) { try { LoginTable login = LoginDBHandler.getUserLogin(user); userNameString = login.getUserLogin(); passwordString = LoginDBHandler .getGeneratedPasswordForUser(); LoginDBHandler.changePassword(login, passwordString); } catch (Exception e) { System.out .println("Error re-generating password for user: " + user.getName()); e.printStackTrace(); } } else { try { LoginTable login = getUserBiz().generateUserLogin(user); userNameString = login.getUserLogin(); passwordString = login.getUnencryptedUserPassword(); } catch (Exception e) { System.out.println("Error creating login for user: " + user.getName()); e.printStackTrace(); } } Group ageGenderGroup = getAgeGroup(user, runner.getRun(), runner.getDistance()); ageGenderGroup.addGroup(user); Group yearGroup = (Group) runner.getDistance().getParentNode(); run = runner.getRun(); distance = runner.getDistance(); selectedRun = null; try { selectedRun = ConverterUtility.getInstance() .convertGroupToRun(run); selectedYear = ConverterUtility.getInstance() .convertGroupToYear(yearGroup); } catch (FinderException e) { // Run not found } if (sendCharityRegistration) { if (!selectedYear.isCharityEnabled()) { sendCharityRegistration = false; if (runPrefix.equals("rm_reg.")) { runPrefix = "lt_reg."; } } } try { HlaupastyrkurHolder holder = null; ParticipantHome runHome = (ParticipantHome) getIDOHome(Participant.class); Participant participant = runHome.create(); participant.setUser(user); participant.setRunTypeGroup(run); participant.setRunDistanceGroup(distance); participant.setRunYearGroup(yearGroup); participant.setRunGroupGroup(ageGenderGroup); if (runner.isParticipateInCharity()) { Charity charity = runner.getCharity(); if (charity != null) { participant.setCharityId(charity .getOrganizationalID()); } if (sendCharityRegistration && charity != null) { holder = new HlaupastyrkurHolder(); holder.setRunner(runner); holder.setLogin(userNameString); holder.setPassword(passwordString); } } if (runner.getCategory() != null) { participant.setCategoryId(((Integer) runner .getCategory().getPrimaryKey()).intValue()); } if (runner.getAmount() > 0) { participant.setPayedAmount(String.valueOf(runner .getAmount())); } participant.setShirtSize(runner.getShirtSize()); participant.setUserNationality(runner.getNationality() .getName()); if (runner.getDistance() != null) { participant .setParticipantNumber(getNextAvailableParticipantNumber(runner .getDistance())); } if (runner.getPaymentGroup() != null) { participant.setPaymentGroup(runner.getPaymentGroup()); } participant.setQuestion1Hour(runner.getQuestion1Hour()); participant.setQuestion1Minute(runner.getQuestion1Minute()); participant.setQuestion1Year(runner.getQuestion1Year()); participant.setQuestion1NeverRan(runner .getQuestion1NeverRan()); participant.setQuestion2Hour(runner.getQuestion2Hour()); participant.setQuestion2Minute(runner.getQuestion2Minute()); participant.setQuestion3Hour(runner.getQuestion3Hour()); participant.setQuestion3Minute(runner.getQuestion3Minute()); participant.setQuestion3Year(runner.getQuestion3Year()); participant.setQuestion3NeverRan(runner .getQuestion3NeverRan()); if (runner.getRelayLeg() != null & !"".equals(runner.getRelayLeg())) { participant.setRelayLeg(runner.getRelayLeg()); if (runner.getPartner1SSN() != null & !"".equals(runner.getPartner1SSN())) { participant.setRelayPartner1SSN(runner .getPartner1SSN()); participant.setRelayPartner1Name(runner .getPartner1Name()); participant.setRelayPartner1Email(runner .getPartner1Email()); participant.setRelayPartner1ShirtSize(runner .getPartner1ShirtSize()); participant.setRelayPartner1Leg(runner .getPartner1Leg()); if (holder != null) { TeamMember member = new TeamMember( runner.getPartner1SSN(), Boolean.TRUE); holder.addToTeam(member); } if (runner.getPartner2SSN() != null & !"".equals(runner.getPartner2SSN())) { participant.setRelayPartner2SSN(runner .getPartner2SSN()); participant.setRelayPartner2Name(runner .getPartner2Name()); participant.setRelayPartner2Email(runner .getPartner2Email()); participant.setRelayPartner2ShirtSize(runner .getPartner2ShirtSize()); participant.setRelayPartner2Leg(runner .getPartner2Leg()); if (holder != null) { TeamMember member = new TeamMember( runner.getPartner2SSN(), Boolean.TRUE); holder.addToTeam(member); } if (runner.getPartner3SSN() != null & !"".equals(runner.getPartner3SSN())) { participant.setRelayPartner3SSN(runner .getPartner3SSN()); participant.setRelayPartner3Name(runner .getPartner3Name()); participant.setRelayPartner3Email(runner .getPartner3Email()); participant .setRelayPartner3ShirtSize(runner .getPartner3ShirtSize()); participant.setRelayPartner3Leg(runner .getPartner3Leg()); if (holder != null) { TeamMember member = new TeamMember( runner.getPartner3SSN(), Boolean.TRUE); holder.addToTeam(member); } } } } } if (holder != null) { hlaupastyrkur.add(holder); } participant.store(); participants.add(participant); getUserBiz().updateUserHomePhone(user, runner.getHomePhone()); getUserBiz().updateUserMobilePhone(user, runner.getMobilePhone()); getUserBiz().updateUserMail(user, runner.getEmail()); if (runner.getEmail() != null) { IWResourceBundle iwrb = getIWApplicationContext() .getIWMainApplication() .getBundle( IWMarathonConstants.IW_BUNDLE_IDENTIFIER) .getResourceBundle(locale); String distanceString = iwrb.getLocalizedString( distance.getName(), distance.getName()); String informationPageString = ""; String greeting = ""; String runHomePageString = ""; String receiptInfo = ""; if (selectedRun != null) { runHomePageString = selectedRun.getRunHomePage(); if (locale.equals(LocaleUtil.getIcelandicLocale())) { informationPageString = selectedRun .getRunInformationPage(); greeting = selectedRun .getRunRegistrationReceiptGreeting(); receiptInfo = selectedRun .getRunRegistrationReceiptInfo(); } else { informationPageString = selectedRun .getEnglishRunInformationPage(); greeting = selectedRun .getRunRegistrationReceiptGreetingEnglish(); receiptInfo = selectedRun .getRunRegistrationReceiptInfoEnglish(); } if (informationPageString == null) { informationPageString = " "; } if (greeting == null) { greeting = " "; } if (receiptInfo == null) { receiptInfo = " "; } } Object[] args = { user.getName(), iwrb.getLocalizedString(run.getName(), run.getName()) + " " + yearGroup.getName(), distanceString, iwrb.getLocalizedString( "shirt_size." + runner.getShirtSize(), runner.getShirtSize()), String.valueOf(participant .getParticipantNumber()), runHomePageString, informationPageString, userNameString, passwordString, greeting, receiptInfo }; String subject = iwrb.getLocalizedString(runPrefix + "registration_received_subject_mail", "Your registration has been received."); String body = MessageFormat .format(iwrb.getLocalizedString(runPrefix + "registration_received_body_mail", "Your registration has been received."), args); sendMessage(runner.getEmail(), subject, body); } // sendSponsorEmail(runner,locale); } catch (CreateException ce) { ce.printStackTrace(); } catch (RemoteException re) { throw new IBORuntimeException(re); } } if (email != null && !disableSendPaymentConfirmation && amount > 0) { IWResourceBundle iwrb = getIWApplicationContext() .getIWMainApplication() .getBundle(IWMarathonConstants.IW_BUNDLE_IDENTIFIER) .getResourceBundle(locale); String runName = ""; String runHomePage = ""; if (selectedRun != null) { runName = iwrb.getLocalizedString(selectedRun.getName(), selectedRun.getName()); runHomePage = selectedRun.getRunHomePage(); } Object[] args = { hiddenCardNumber, String.valueOf(amount), date.getLocaleDateAndTime(locale, IWTimestamp.SHORT, IWTimestamp.SHORT), runName, runHomePage }; String subject = iwrb.getLocalizedString(runPrefix + "receipt_subject_mail", "Your receipt for registration"); String body = MessageFormat.format(iwrb.getLocalizedString( runPrefix + "receipt_body_mail", "Your registration has been received."), args); sendMessage(email, subject, body); } trans.commit(); if (!hlaupastyrkur.isEmpty()) { String passwd = getIWApplicationContext() .getIWMainApplication().getSettings() .getProperty("hlaupastyrkur_passwd", ""); String userID = getIWApplicationContext() .getIWMainApplication().getSettings() .getProperty("hlaupastyrkur_userid", ""); ContestantServiceLocator locator = new ContestantServiceLocator(); IContestantService port = locator .getBasicHttpBinding_IContestantService(new URL( "http://www.hlaupastyrkur.is/services/contestantservice.svc")); Iterator it = hlaupastyrkur.iterator(); while (it.hasNext()) { HlaupastyrkurHolder holder = (HlaupastyrkurHolder) it .next(); Runner runner = holder.getRunner(); String userNameString = holder.getLogin(); String passwordString = holder.getPassword(); Charity charity = runner.getCharity(); try { String name = null; if (runner.getName() != null) { name = runner.getName(); } else if (runner.getUser() != null) { name = runner.getUser().getName(); } if (holder.isTeam()) { TeamRequest request2 = new TeamRequest(runner .getDistance().getName(), new Login(passwd, userID), charity.getOrganizationalID(), name, passwordString, userNameString, holder.getMembers(), name); port.registerTeam(request2); } else { ContestantRequest request = new ContestantRequest( runner.getDistance().getName(), new Login( passwd, userID), charity.getOrganizationalID(), name, passwordString, userNameString, runner.getPersonalID(), Boolean.TRUE); port.registerContestant(request); } } catch (Exception e) { e.printStackTrace(); } } } } catch (Exception ex) { try { trans.rollback(); } catch (javax.transaction.SystemException e) { throw new IDOCreateException(e.getMessage()); } ex.printStackTrace(); throw new IDOCreateException(ex); } return participants; } /* * private void sendSponsorEmail(Runner runner,Locale locale) { * * if(runner.isMaySponsorContactRunner()){ try{ User user = * runner.getUser(); if(user!=null){ String name = * runner.getUser().getName(); String personalId = runner.getPersonalID(); * String sAddress = ""; Collection addresses = * runner.getUser().getAddresses(); if(addresses.size()>0){ for (Iterator * iter = addresses.iterator(); iter.hasNext();) { Address address = * (Address) iter.next(); * sAddress=address.getName()+" "+address.getPostalAddress(); } * * } String phone = runner.getHomePhone(); String mobilePhone = * runner.getMobilePhone(); String runnerEmail = runner.getEmail(); String * sponsorEmail = * getIWApplicationContext().getIWMainApplication().getSettings * ().getProperty("MARATHON_SPONSOR_EMAIL"); * * IWResourceBundle iwrb = * getIWApplicationContext().getIWMainApplication().getBundle * (IWMarathonConstants.IW_BUNDLE_IDENTIFIER).getResourceBundle(locale); * Object[] args = { name, personalId, sAddress, phone, * mobilePhone,runnerEmail }; String subject = * iwrb.getLocalizedString("sponsor_mail_subject", * "Request for invitation to be a customer from marathon.is"); String body * = MessageFormat.format(iwrb.getLocalizedString("sponsor_mail_body", * "Name: {0}\nPersonal ID: {1}\nAddress: {2}\nPhone: {3}\nMobile Phone: {4}\nE-mail: {5}" * ), args); sendMessage(sponsorEmail, subject, body); } else{ * logWarning("User is null in sendSponsorEmail for runner: " * +runner.getName()+", "+runner.getEmail()); } } catch(Exception e){ * e.printStackTrace(); } } * * } */ public synchronized int getNextAvailableParticipantNumber(Distance distance) { int number = distance.getNextAvailableParticipantNumber(); int minNumber = distance.getMinimumParticipantNumberForDistance(); int maxNumber = distance.getMaximumParticipantNumberForDistance(); if (minNumber == -1) { minNumber = 1; } if (number == -1) { number = minNumber; } if (maxNumber != -1 && number > maxNumber) { return minNumber; } try { ParticipantHome runHome = (ParticipantHome) getIDOHome(Participant.class); while (number <= (maxNumber == -1 ? 999999 : maxNumber)) { if (runHome.getCountByDistanceAndNumber( distance.getPrimaryKey(), number) == 0) { distance.setNextAvailableParticipantNumber(number + 1); distance.store(); return number; } number++; } } catch (RemoteException re) { throw new IBORuntimeException(re); } catch (IDOException ie) { ie.printStackTrace(); } return minNumber; } public void addParticipantsToGroup(String[] participants, String groupName) { try { ParticipantHome runHome = (ParticipantHome) getIDOHome(Participant.class); for (int i = 0; i < participants.length; i++) { try { Participant participant = runHome .findByPrimaryKey(new Integer(participants[i])); participant.setRunGroupName(groupName); participant.store(); } catch (FinderException fe) { fe.printStackTrace(); } } } catch (RemoteException re) { throw new IBORuntimeException(re); } } public boolean isCrewLabelAlreadyExistsForRun(int runId, int yearId, String crewLabel) { try { ParticipantHome runHome = (ParticipantHome) getIDOHome(Participant.class); return runHome.findCrewLabelAlreadyExistsForRun(runId, yearId, crewLabel); } catch (RemoteException re) { throw new IBORuntimeException(re); } catch (FinderException re) { throw new IBORuntimeException(re); } } private Group getAgeGroup(User user, Run run, Distance distance) { return getAgeGroup(user, (Group) run, distance); } public Group getAgeGroup(User user, Group run, Group distance) { Year year = null; try { year = ConverterUtility.getInstance().convertGroupToYear( (Group) distance.getParentNode()); } catch (FinderException fe) { fe.printStackTrace(); } IWTimestamp runDate = new IWTimestamp(); runDate.setYear(Integer.parseInt(year.getName())); if (year != null && year.getRunDate() != null) { runDate = new IWTimestamp(year.getRunDate()); } IWTimestamp dateOfBirth = new IWTimestamp(user.getDateOfBirth()); dateOfBirth.setDay(1); dateOfBirth.setMonth(1); Age age = new Age(dateOfBirth.getDate()); String[] groupType = { IWMarathonConstants.GROUP_TYPE_RUN_GROUP }; try { Collection groups = getGroupBiz().getChildGroupsRecursive(distance, groupType, true); Iterator groupsIter = groups.iterator(); while (groupsIter.hasNext()) { Group group = (Group) groupsIter.next(); if (group.getName().equals( getGroupName(age.getYears(runDate.getDate()), run, user.getGenderID(), distance))) { return group; } } } catch (RemoteException re) { throw new IBORuntimeException(re); } return null; } public void finishPayment(String properties, String currency) throws CreditCardAuthorizationException { try { CreditCardClient client = getCreditCardBusiness() .getCreditCardClient(getCreditCardMerchant(currency)); client.finishTransaction(properties); } catch (CreditCardAuthorizationException ccae) { throw ccae; } catch (Exception e) { e.printStackTrace(System.err); throw new CreditCardAuthorizationException( "Online payment failed. Unknown error."); } } /** * @deprecated use authorizePayment with expiresDate parameter */ public String authorizePayment(String nameOnCard, String cardNumber, String monthExpires, String yearExpires, String ccVerifyNumber, double amount, String currency, String referenceNumber) throws CreditCardAuthorizationException { try { CreditCardClient client = getCreditCardBusiness() .getCreditCardClient(getCreditCardMerchant(currency)); return client.creditcardAuthorization(nameOnCard, cardNumber, monthExpires, yearExpires, ccVerifyNumber, amount, currency, referenceNumber); } catch (CreditCardAuthorizationException ccae) { throw ccae; } catch (Exception e) { e.printStackTrace(System.err); throw new CreditCardAuthorizationException( "Online payment failed. Unknown error."); } } public String getAuthorizationNumberFromProperties( String creditCardProperties, String currency) { try { CreditCardClient client = getCreditCardBusiness() .getCreditCardClient(getCreditCardMerchant(currency)); return client.getAuthorizationNumber(creditCardProperties); } catch (Exception e) { } return null; } /** * * @param nameOnCard * @param cardNumber * @param expiresDate * - only year and month are relevant * @param ccVerifyNumber * @param amount * @param currency * @param referenceNumber * @return * @throws CreditCardAuthorizationException */ public String authorizePayment(String nameOnCard, String cardNumber, java.util.Date expiresDate, String ccVerifyNumber, double amount, String currency, String referenceNumber) throws CreditCardAuthorizationException { IWTimestamp expirationDate = new IWTimestamp(expiresDate); String yearPostfix = String.valueOf(expirationDate.getYear() % 100); String monthPostfix = String.valueOf(expirationDate.getMonth()); if (yearPostfix.length() != 2) yearPostfix = "0" + yearPostfix; if (monthPostfix.length() != 2) monthPostfix = "0" + monthPostfix; try { CreditCardClient client = getCreditCardBusiness() .getCreditCardClient(getCreditCardMerchant(currency)); return client.creditcardAuthorization(nameOnCard, cardNumber, monthPostfix, yearPostfix, ccVerifyNumber, amount, currency, referenceNumber); } catch (CreditCardAuthorizationException ccae) { throw ccae; } catch (Exception e) { e.printStackTrace(System.err); throw new CreditCardAuthorizationException( "Online payment failed. Unknown error."); } } public float getPriceForRunner(Runner runner, Locale locale) { Age age = null; if (runner.getUser() != null) { age = new Age(runner.getUser().getDateOfBirth()); } else { age = new Age(runner.getDateOfBirth()); } boolean isChild = age.getYears() <= 16; float runnerPrice = isChild ? runner.getDistance().getChildrenPrice( locale) : runner.getDistance().getPrice(locale); return runnerPrice; } public int getNumberOfSiblings(Collection children) throws RemoteException { int numberOfSiblings = 0; Iterator iter = children.iterator(); HashMap childCounter = new HashMap(); int counter = 0; // Making sure I check all the children, since not all may be siblings while (iter.hasNext()) { Runner child = (Runner) iter.next(); try { User user = child.getUser(); if (user != null) { Collection uPats = getFamilyLogic().getParentsFor(user); Iterator piter = uPats.iterator(); while (piter.hasNext()) { User pat = (User) piter.next(); if (!childCounter.containsKey(pat)) { childCounter.put(pat, new Integer(1)); } else { childCounter.put( pat, new Integer(((Integer) childCounter .get(pat)).intValue() + 1)); } } } } catch (NoParentFound e) { } ++counter; } Collection values = childCounter.values(); if (values != null && !values.isEmpty()) { Iterator viter = values.iterator(); Integer val = (Integer) viter.next(); numberOfSiblings = val.intValue(); while (viter.hasNext()) { val = (Integer) viter.next(); numberOfSiblings = Math.max(numberOfSiblings, val.intValue()); } } return numberOfSiblings; } public int getNumberOfChildren(Collection runners) { int numberOfChildren = 0; Iterator iter = runners.iterator(); while (iter.hasNext()) { Runner runner = (Runner) iter.next(); Age age = null; if (runner.getUser() != null) { age = new Age(runner.getUser().getDateOfBirth()); } else { age = new Age(runner.getDateOfBirth()); } if (age.getYears() <= 16) { if (runner.getDistance().isFamilyDiscount()) { numberOfChildren++; } } } return numberOfChildren; } private FamilyLogic getFamilyLogic() { try { return (FamilyLogic) getServiceInstance(FamilyLogic.class); } catch (IBOLookupException ile) { throw new IBORuntimeException(ile); } } public CharityBusiness getCharityBusiness() { try { return (CharityBusiness) getServiceInstance(CharityBusiness.class); } catch (IBOLookupException ile) { throw new IBORuntimeException(ile); } } public Collection getCreditCardImages(String currency) { try { return getCreditCardBusiness().getCreditCardTypeImages( getCreditCardBusiness().getCreditCardClient( getCreditCardMerchant(currency))); } catch (FinderException fe) { fe.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } return new ArrayList(); } private CreditCardMerchant getCreditCardMerchant(String currency) throws FinderException { String merchantPK = getIWApplicationContext() .getIWMainApplication() .getBundle(IWMarathonConstants.IW_BUNDLE_IDENTIFIER) .getProperty( IWMarathonConstants.PROPERTY_MERCHANT_PK + "_" + currency); if (merchantPK != null) { try { // return ((KortathjonustanMerchantHome) IDOLookup // .getHome(KortathjonustanMerchant.class)) // .findByPrimaryKey(new Integer(merchantPK)); return ((TPosMerchantHome) IDOLookup .getHome(TPosMerchant.class)) .findByPrimaryKey(new Integer(merchantPK)); } catch (IDOLookupException ile) { throw new IBORuntimeException(ile); } } return null; } public void savePayment(int userID, int distanceID, String payMethod, String amount) { try { ParticipantHome runHome = (ParticipantHome) getIDOHome(Participant.class); Participant run = runHome.findByUserIDandDistanceID(userID, distanceID); if (run != null) { run.setPayMethod(payMethod); run.setPayedAmount(amount); run.store(); } } catch (RemoteException e) { e.printStackTrace(); } catch (FinderException e) { e.printStackTrace(); } } public void updateRunForParticipant(Participant participant, int bibNumber, String runTime, String chipTime, String splitTime1, String splitTime2) { if (runTime != null) { runTime = runTime.trim(); if (!runTime.equals("")) { participant.setRunTime(convertTimeToInt(runTime)); } } if (chipTime != null) { chipTime = chipTime.trim(); if (!chipTime.equals("")) { participant.setChipTime(convertTimeToInt(chipTime)); } } if (splitTime1 != null) { splitTime1 = splitTime1.trim(); if (!splitTime1.equals("")) { participant.setSplitTime1(convertTimeToInt(splitTime1)); } } if (splitTime2 != null) { splitTime2 = splitTime2.trim(); if (!splitTime2.equals("")) { participant.setSplitTime2(convertTimeToInt(splitTime2)); } } participant.setParticipantNumber(bibNumber); participant.store(); } private int convertTimeToInt(String time) { if (time == null || time.equals("-1")) { return -1; } int index = time.lastIndexOf(":"); if (index == -1) { return Integer.parseInt(time); } int hours = 0; int minutes = 0; int seconds = Integer.parseInt(time.substring(index + 1)); time = time.substring(0, index); if (time.indexOf(":") != -1) { hours = Integer.parseInt(time.substring(0, time.indexOf(":"))); minutes = Integer.parseInt(time.substring(time.indexOf(":") + 1)); } else { minutes = Integer.parseInt(time); } seconds += hours * 60 * 60; seconds += minutes * 60; return seconds; } public Participant getRunObjByUserIDandYearID(int userID, int yearID) { try { ParticipantHome runHome = (ParticipantHome) getIDOHome(Participant.class); return runHome.findByUserIDandYearID(userID, yearID); } catch (RemoteException e) { log(e); } catch (FinderException e) { log(e); } return null; } public Participant getRunObjByUserIDandDistanceID(int userID, int distanceID) { try { ParticipantHome runHome = (ParticipantHome) getIDOHome(Participant.class); return runHome.findByUserIDandDistanceID(userID, distanceID); } catch (RemoteException e) { log(e); } catch (FinderException e) { log(e); } return null; } public Participant getParticipantByDistanceAndParticipantNumber( Object distancePK, int participantNumber) throws FinderException { try { ParticipantHome runHome = (ParticipantHome) getIDOHome(Participant.class); return runHome.findByDistanceAndParticipantNumber(distancePK, participantNumber); } catch (RemoteException e) { throw new IBORuntimeException(e); } } public Collection getParticipantsByYearAndTeamName(Object yearPK, String teamName) throws FinderException { try { ParticipantHome runHome = (ParticipantHome) getIDOHome(Participant.class); return runHome.findByYearAndTeamName(yearPK, teamName); } catch (RemoteException e) { throw new IBORuntimeException(e); } } public Collection getParticipantsByYearAndCrewInOrCrewInvitationParticipantId( Object yearPK, Integer crewParticipantId) throws FinderException { try { ParticipantHome runHome = (ParticipantHome) getIDOHome(Participant.class); return runHome.findByYearAndCrewInOrCrewInvitationParticipantId( yearPK, crewParticipantId); } catch (RemoteException e) { throw new IBORuntimeException(e); } } public Collection getParticipantsByUser(User user) throws FinderException { try { ParticipantHome runHome = (ParticipantHome) getIDOHome(Participant.class); return runHome.findByUserID(((Integer) user.getPrimaryKey()) .intValue()); } catch (RemoteException e) { throw new IBORuntimeException(e); } } /** * * @param yearPK * @param searchQuery * @return - participants, where search query matches either participant * user full name, or personal id, or participant number * @throws FinderException */ public Collection getParticipantsBySearchQuery(Object yearPK, String searchQuery) throws FinderException { try { ParticipantHome participantHome = (ParticipantHome) getIDOHome(Participant.class); return participantHome .findByYearAndFullNameOrPersonalIdOrParticipantNumberOrParentGroup( yearPK, searchQuery); } catch (RemoteException e) { throw new IBORuntimeException(e); } } public Participant getParticipantByRunAndYear(User user, Group run, Group year, boolean showDeleted) throws FinderException { try { ParticipantHome runHome = (ParticipantHome) getIDOHome(Participant.class); return runHome.findByUserAndRun(user, run, year, showDeleted); } catch (RemoteException e) { throw new IBORuntimeException(e); } } public Participant getParticipantPartnerByRunAndYear(String personalID, Group run, Group year, int partnerNumber) throws FinderException { try { ParticipantHome runHome = (ParticipantHome) getIDOHome(Participant.class); return runHome.findByPartnerAndRun(personalID, run, year, partnerNumber); } catch (RemoteException e) { throw new IBORuntimeException(e); } } public Group getRunGroupByGroupId(Integer groupId) { try { GroupHome groupHome = (GroupHome) getIDOHome(Group.class); return groupHome.findByPrimaryKey(groupId); } catch (RemoteException e) { log(e); } catch (FinderException e) { log(e); } return null; } public Participant getRunObjByUserAndGroup(int userID, int groupID) { Participant run = null; int yearGroupID = -1; int distanceGroupID = -1; int runGroupID = -1; Group group = null; Collection parentGroups = null; try { group = getGroupBiz().getGroupByGroupID(groupID); if (group != null) { parentGroups = getGroupBiz().getParentGroupsRecursive(group); } } catch (IBOLookupException e) { e.printStackTrace(); } catch (RemoteException e) { e.printStackTrace(); } catch (FinderException e) { e.printStackTrace(); } if (parentGroups != null && !parentGroups.isEmpty()) { Iterator groupIter = parentGroups.iterator(); while (groupIter.hasNext()) { Group parentGroup = (Group) groupIter.next(); if (parentGroup.getGroupType().equals( IWMarathonConstants.GROUP_TYPE_RUN)) { runGroupID = Integer.parseInt(parentGroup.getPrimaryKey() .toString()); } else if (parentGroup.getGroupType().equals( IWMarathonConstants.GROUP_TYPE_RUN_YEAR)) { yearGroupID = Integer.parseInt(parentGroup.getPrimaryKey() .toString()); } else if (parentGroup.getGroupType().equals( IWMarathonConstants.GROUP_TYPE_RUN_DISTANCE)) { distanceGroupID = Integer.parseInt(parentGroup .getPrimaryKey().toString()); } } } try { ParticipantHome runHome = (ParticipantHome) getIDOHome(Participant.class); if (runGroupID != -1 && yearGroupID != -1 && distanceGroupID != -1) { Collection runObjs = runHome.findByUserAndParentGroup(userID, runGroupID, 2004, distanceGroupID); if (runObjs != null && !runObjs.isEmpty()) { Iterator runIt = runObjs.iterator(); while (runIt.hasNext()) { Participant runObj = (Participant) runIt.next(); run = runObj; } } } } catch (RemoteException e1) { e1.printStackTrace(); } catch (FinderException e1) { e1.printStackTrace(); } return run; } public Collection getRunnersByDistance(Group distance, Group runGroup) { try { ParticipantHome runHome = (ParticipantHome) getIDOHome(Participant.class); return runHome.findAllByDistanceAndGroup(distance, runGroup); } catch (RemoteException e) { log(e); } catch (FinderException e) { log(e); } return new ArrayList(); } public void setParticipantNumber(Participant participant, String run) { participant .setParticipantNumber(getNextAvailableParticipantNumber(participant .getRunDistanceGroup())); participant.store(); } public void sendMessage(String email, String subject, String body) { boolean sendEmail = true; String sSendEmail = this.getIWMainApplication() .getBundle(IW_BUNDLE_IDENTIFIER) .getProperty(IWMarathonConstants.PROPERTY_SEND_EMAILS); if ("no".equalsIgnoreCase(sSendEmail)) { sendEmail = false; } if (sendEmail) { String mailServer = DEFAULT_SMTP_MAILSERVER; String fromAddress = DEFAULT_MESSAGEBOX_FROM_ADDRESS; String cc = DEFAULT_CC_ADDRESS; try { MessagingSettings messagingSetting = getIWApplicationContext() .getIWMainApplication().getMessagingSettings(); mailServer = messagingSetting.getSMTPMailServer(); fromAddress = messagingSetting.getFromMailAddress(); cc = getIWApplicationContext().getIWMainApplication() .getSettings() .getProperty("messagebox_cc_receiver_address", ""); } catch (Exception e) { System.err .println("MessageBusinessBean: Error getting mail property from bundle"); e.printStackTrace(); } try { com.idega.util.SendMail.send(fromAddress, email.trim(), cc, "", mailServer, subject, body); } catch (javax.mail.MessagingException me) { System.err .println("MessagingException when sending mail to address: " + email + " Message was: " + me.getMessage()); } catch (Exception e) { System.err.println("Exception when sending mail to address: " + email + " Message was: " + e.getMessage()); } } } /** * @param age * @param nameOfGroup * @return */ private String getGroupName(int age, Group group, int genderID, Group distance) { String runName = group.getName(); String nameOfGroup = ""; if (runName.equals(RUN_RVK_MARATHON) || runName.equals("Test hlaup") /* || runName.equals(RUN_ROLLER_SKATE) */) { if (distance.getName().equals(IWMarathonConstants.DISTANCE_1_5)) { if (genderID == 2) { nameOfGroup = IWMarathonConstants.FEMALE_11; } else { nameOfGroup = IWMarathonConstants.MALE_11; } } else { if (age <= 14) { if (genderID == 2) { nameOfGroup = IWMarathonConstants.FEMALE_14; } else { nameOfGroup = IWMarathonConstants.MALE_14; } } else if (age > 14 && age <= 17) { if (genderID == 2) { nameOfGroup = IWMarathonConstants.FEMALE_15_17; } else { nameOfGroup = IWMarathonConstants.MALE_15_17; } } else if (age > 17 && age <= 39) { if (genderID == 2) { nameOfGroup = IWMarathonConstants.FEMALE_18_39; } else { nameOfGroup = IWMarathonConstants.MALE_18_39; } } else if (age > 39 && age <= 49) { if (genderID == 2) { nameOfGroup = IWMarathonConstants.FEMALE_40_49; } else { nameOfGroup = IWMarathonConstants.MALE_40_49; } } else if (age > 49 && age <= 59) { if (genderID == 2) { nameOfGroup = IWMarathonConstants.FEMALE_50_59; } else { nameOfGroup = IWMarathonConstants.MALE_50_59; } } else if (age > 59) { if (genderID == 2) { nameOfGroup = IWMarathonConstants.FEMALE_60; } else { nameOfGroup = IWMarathonConstants.MALE_60; } } } } if (runName.equals(RUN_LAZY_TOWN_RUN)) { if (distance.getName().equals(IWMarathonConstants.DISTANCE_1)) { if (age >= 0 && age <= 1) { nameOfGroup = IWMarathonConstants.AGE_1; } else if (age > 1 && age <= 2) { nameOfGroup = IWMarathonConstants.AGE_2; } else if (age > 2 && age <= 3) { nameOfGroup = IWMarathonConstants.AGE_3; } else if (age > 3 && age <= 4) { nameOfGroup = IWMarathonConstants.AGE_4; } else if (age > 4 && age <= 5) { nameOfGroup = IWMarathonConstants.AGE_5; } else if (age > 5 && age <= 6) { nameOfGroup = IWMarathonConstants.AGE_6; } else if (age > 6 && age <= 7) { nameOfGroup = IWMarathonConstants.AGE_7; } else if (age > 7 && age <= 8) { nameOfGroup = IWMarathonConstants.AGE_8; } else if (age > 8 && age <= 9) { nameOfGroup = IWMarathonConstants.AGE_9; } else if (age > 9 && age <= 10) { nameOfGroup = IWMarathonConstants.AGE_10; } } } else if (runName.equals(RUN_MIDNIGHT_RUN)) { if (age <= 18) { if (genderID == 2) { nameOfGroup = IWMarathonConstants.FEMALE_18; } else { nameOfGroup = IWMarathonConstants.MALE_18; } } else if (age > 18 && age <= 39) { if (genderID == 2) { nameOfGroup = IWMarathonConstants.FEMALE_19_39; } else { nameOfGroup = IWMarathonConstants.MALE_19_39; } } else if (age > 39 && age <= 49) { if (genderID == 2) { nameOfGroup = IWMarathonConstants.FEMALE_40_49; } else { nameOfGroup = IWMarathonConstants.MALE_40_49; } } else if (age > 49) { if (genderID == 2) { nameOfGroup = IWMarathonConstants.FEMALE_50; } else { nameOfGroup = IWMarathonConstants.MALE_50; } } } else if (runName.equals(RUN_LAUGAVEGUR) || runName.equals(RUN_LAUGAVEGUR_PREREGISTRATION)) { if (age > 17 && age <= 29) { if (genderID == 2) { nameOfGroup = IWMarathonConstants.FEMALE_18_29; } else { nameOfGroup = IWMarathonConstants.MALE_18_29; } } else if (age > 29 && age <= 39) { if (genderID == 2) { nameOfGroup = IWMarathonConstants.FEMALE_30_39; } else { nameOfGroup = IWMarathonConstants.MALE_30_39; } } else if (age > 39 && age <= 49) { if (genderID == 2) { nameOfGroup = IWMarathonConstants.FEMALE_40_49; } else { nameOfGroup = IWMarathonConstants.MALE_40_49; } } else if (age > 49 && age <= 59) { if (genderID == 2) { nameOfGroup = IWMarathonConstants.FEMALE_50_59; } else { nameOfGroup = IWMarathonConstants.MALE_50_59; } } else if (age > 59) { if (genderID == 2) { nameOfGroup = IWMarathonConstants.FEMALE_60; } else { nameOfGroup = IWMarathonConstants.MALE_60; } } } return nameOfGroup; } public String[] getDistancesForRun(Group run) { String runName = run.getName(); String[] disForMarathon = { IWMarathonConstants.DISTANCE_42, IWMarathonConstants.DISTANCE_21, IWMarathonConstants.DISTANCE_10, IWMarathonConstants.DISTANCE_3, IWMarathonConstants.DISTANCE_CHARITY_42 }; /* * String[] disForOsloMarathon = { IWMarathonConstants.DISTANCE_42, * IWMarathonConstants.DISTANCE_21, IWMarathonConstants.DISTANCE_3 }; */ String[] disForLaugavegur = { IWMarathonConstants.DISTANCE_55 }; String[] disForMidnight = { IWMarathonConstants.DISTANCE_10, IWMarathonConstants.DISTANCE_5, IWMarathonConstants.DISTANCE_3 }; /* * String[] disForRollerSkate = { IWMarathonConstants.DISTANCE_10, * IWMarathonConstants.DISTANCE_5 }; */ String[] disForLazyTown = { IWMarathonConstants.DISTANCE_1 }; /* String[] disForLazyTownOslo = { IWMarathonConstants.DISTANCE_0_5 }; */ if (runName.equals(RUN_RVK_MARATHON)) { return disForMarathon; } /* * else if (runName.equals(RUN_OSLO_MARATHON)) { return * disForOsloMarathon; } */else if (runName.equals(RUN_LAZY_TOWN_RUN)) { return disForLazyTown; } /* * else if (runName.equals(RUN_LAZY_TOWN_MINIMARATON_OSLO)) { return * disForLazyTownOslo; } */else if (runName.equals(RUN_MIDNIGHT_RUN)) { return disForMidnight; } else if (runName.equals(RUN_LAUGAVEGUR) || runName.equals(RUN_LAUGAVEGUR_PREREGISTRATION)) { return disForLaugavegur; } /* * else if (runName.equals(RUN_ROLLER_SKATE)) { return * disForRollerSkate; } */ return null; } public void createNewGroupYear(IWContext iwc, String runID) { String year = iwc.getParameter("year"); String[] priceISK = iwc.getParameterValues("price_isk"); String[] priceEUR = iwc.getParameterValues("price_eur"); String[] useChips = iwc.getParameterValues("use_chip"); String[] childrenPriceISK = iwc .getParameterValues("price_children_isk"); String[] childrenPriceEUR = iwc .getParameterValues("price_children_eur"); String[] familyDiscount = iwc.getParameterValues("family_discount"); String[] allowsGroups = iwc.getParameterValues("allows_groups"); String[] numberOfSplits = iwc.getParameterValues("number_of_splits"); String[] offersTransport = iwc.getParameterValues("offers_transport"); String sCharityEnabled = iwc .getParameter(CreateYearForm.PARAMETER_CHARITY_ENABLED); boolean charityEnabled = false; if (sCharityEnabled != null) { if (sCharityEnabled.equalsIgnoreCase("Y")) { charityEnabled = true; } } String sPledgedBySponsor = iwc .getParameter(CreateYearForm.PARAMETER_PLEDGED_BY_SPONSOR); int pledgedBySponsor = -1; try { pledgedBySponsor = Integer.parseInt(sPledgedBySponsor); } catch (Exception e) { } String sPledgedBySponsorGroup = iwc .getParameter(CreateYearForm.PARAMETER_PLEDGED_BY_SPONSOR_GROUP); int pledgedBySponsorGroup = -1; try { pledgedBySponsorGroup = Integer.parseInt(sPledgedBySponsorGroup); } catch (Exception e) { } Group run = null; try { if (runID != null && !runID.equals("")) { int id = Integer.parseInt(runID); run = getGroupBiz().getGroupByGroupID(id); } } catch (Exception e) { e.printStackTrace(); } String runName = run.getName(); Group group = null; try { group = getGroupBiz().createGroupUnder(year, null, run); group.setGroupType(IWMarathonConstants.GROUP_TYPE_RUN_YEAR); group.setMetaData(YearBMPBean.METADATA_ENABLE_CHARITY, new Boolean( charityEnabled).toString()); if (pledgedBySponsor != -1) { group.setMetaData( YearBMPBean.METADATA_PLEDGED_PER_KILOMETER_BY_SPONSOR, sPledgedBySponsor); } if (pledgedBySponsorGroup != -1) { group.setMetaData( YearBMPBean.METADATA_PLEDGED_PER_KILOMETER_BY_SPONSOR_GROUP, sPledgedBySponsorGroup); } group.store(); } catch (IBOLookupException e) { e.printStackTrace(); } catch (RemoteException e) { e.printStackTrace(); } catch (CreateException e) { e.printStackTrace(); } String[] grForMarathon = { IWMarathonConstants.FEMALE_14, IWMarathonConstants.FEMALE_15_17, IWMarathonConstants.FEMALE_18_39, IWMarathonConstants.FEMALE_40_49, IWMarathonConstants.FEMALE_50_59, IWMarathonConstants.FEMALE_60, IWMarathonConstants.MALE_14, IWMarathonConstants.MALE_15_17, IWMarathonConstants.MALE_18_39, IWMarathonConstants.MALE_40_49, IWMarathonConstants.MALE_50_59, IWMarathonConstants.MALE_60 }; String[] grForLazyTown = { IWMarathonConstants.AGE_1, IWMarathonConstants.AGE_2, IWMarathonConstants.AGE_3, IWMarathonConstants.AGE_4, IWMarathonConstants.AGE_5, IWMarathonConstants.AGE_6, IWMarathonConstants.AGE_6, IWMarathonConstants.AGE_8, IWMarathonConstants.AGE_9, IWMarathonConstants.AGE_10 }; String[] grForLaugavegur = { IWMarathonConstants.FEMALE_18_29, IWMarathonConstants.FEMALE_30_39, IWMarathonConstants.FEMALE_40_49, IWMarathonConstants.FEMALE_50_59, IWMarathonConstants.FEMALE_60, IWMarathonConstants.MALE_18_29, IWMarathonConstants.MALE_30_39, IWMarathonConstants.MALE_40_49, IWMarathonConstants.MALE_50_59, IWMarathonConstants.MALE_60 }; String[] grForMidnight = { IWMarathonConstants.FEMALE_18, IWMarathonConstants.FEMALE_19_39, IWMarathonConstants.FEMALE_40_49, IWMarathonConstants.FEMALE_50, IWMarathonConstants.MALE_18, IWMarathonConstants.MALE_19_39, IWMarathonConstants.MALE_40_49, IWMarathonConstants.MALE_50 }; // TODO: remove this hack - set metadata on the groups containing the // specific run... if (runName.equals(RUN_RVK_MARATHON)) { generateSubGroups(iwc, group, getDistancesForRun(run), grForMarathon, priceISK, priceEUR, useChips, childrenPriceISK, childrenPriceEUR, familyDiscount, allowsGroups, numberOfSplits, offersTransport); } else if (runName.equals(RUN_LAZY_TOWN_RUN)) { generateSubGroups(iwc, group, getDistancesForRun(run), grForLazyTown, priceISK, priceEUR, useChips, childrenPriceISK, childrenPriceEUR, familyDiscount, allowsGroups, numberOfSplits, offersTransport); } else if (runName.equals(RUN_MIDNIGHT_RUN)) { generateSubGroups(iwc, group, getDistancesForRun(run), grForMidnight, priceISK, priceEUR, useChips, childrenPriceISK, childrenPriceEUR, familyDiscount, allowsGroups, numberOfSplits, offersTransport); } else if (runName.equals(RUN_LAUGAVEGUR) || runName.equals(RUN_LAUGAVEGUR_PREREGISTRATION)) { generateSubGroups(iwc, group, getDistancesForRun(run), grForLaugavegur, priceISK, priceEUR, useChips, childrenPriceISK, childrenPriceEUR, familyDiscount, allowsGroups, numberOfSplits, offersTransport); } } /** * @param iwc * @param group * @param disForMarathon * @param grForMarathon */ private void generateSubGroups(IWContext iwc, Group group, String[] dis, String[] gr, String[] priceISK, String[] priceEUR, String[] useChips, String[] childrenPriceISK, String[] childrenPriceEUR, String[] familyDiscount, String[] allowsGroups, String[] numberOfSplits, String[] offersTransport) { for (int i = 0; i < dis.length; i++) { Group distance = null; try { distance = getGroupBiz().createGroupUnder(dis[i], null, group); distance.setGroupType(IWMarathonConstants.GROUP_TYPE_RUN_DISTANCE); distance.store(); try { Distance distanceGroup = ConverterUtility.getInstance() .convertGroupToDistance(distance); distanceGroup.setUseChip("Y".equals(useChips[i])); if (priceISK[i] != null && priceISK[i].length() > 0) { distanceGroup.setPriceInISK(Float .parseFloat(priceISK[i])); } else { distanceGroup.setPriceInISK(0); } if (priceEUR[i] != null && priceEUR[i].length() > 0) { distanceGroup.setPriceInEUR(Float .parseFloat(priceEUR[i])); } else { distanceGroup.setPriceInEUR(0); } if (childrenPriceISK[i] != null && childrenPriceISK[i].length() > 0) { distanceGroup.setChildrenPriceInISK(Float .parseFloat(childrenPriceISK[i])); } else { distanceGroup.setChildrenPriceInISK(0); } if (childrenPriceEUR[i] != null && childrenPriceEUR[i].length() > 0) { distanceGroup.setChildrenPriceInEUR(Float .parseFloat(childrenPriceEUR[i])); } else { distanceGroup.setChildrenPriceInEUR(0); } distanceGroup.setFamilyDiscount("Y" .equals(familyDiscount[i])); distanceGroup.setAllowsGroups("Y".equals(allowsGroups[i])); distanceGroup.setNumberOfSplits(new Integer( numberOfSplits[i]).intValue()); // distanceGroup.setTransportOffered("Y".equals(offersTransport[i])); distanceGroup.store(); } catch (FinderException fe) { fe.printStackTrace(); } for (int j = 0; j < gr.length; j++) { Group g = null; try { g = getGroupBiz().createGroupUnder(gr[j], null, distance); g.setGroupType(IWMarathonConstants.GROUP_TYPE_RUN_GROUP); g.store(); } catch (Exception e) { } } } catch (IBOLookupException e1) { e1.printStackTrace(); } catch (RemoteException e1) { e1.printStackTrace(); } catch (CreateException e1) { e1.printStackTrace(); } } } /** * gets all the run type groups of the type * "iwma_run_marathon","iwma_run_laugavegur" and "iwma_run_midnight" * * @return a Collection of the run types */ public Collection getRuns() { Collection runs = null; String[] type = { IWMarathonConstants.GROUP_TYPE_RUN }; try { runs = getGroupBiz().getGroups(type, true); } catch (Exception e) { } return runs; } public Collection getRunsForUser(User user) { Collection groups = null; Collection runs = new ArrayList(); String[] typeRun = { IWMarathonConstants.GROUP_TYPE_RUN }; String[] typeGroup = { IWMarathonConstants.GROUP_TYPE_RUN_GROUP }; try { groups = getUserBiz().getUserGroups(user, typeGroup, true); } catch (IBOLookupException e) { e.printStackTrace(); } catch (RemoteException e) { e.printStackTrace(); } if (groups != null) { Iterator groupsIter = groups.iterator(); while (groupsIter.hasNext()) { Group group = (Group) groupsIter.next(); Collection r = null; try { r = getGroupBiz().getParentGroupsRecursive(group, typeRun, true); } catch (IBOLookupException e1) { e1.printStackTrace(); } catch (EJBException e1) { e1.printStackTrace(); } catch (RemoteException e1) { e1.printStackTrace(); } if (r != null) { Iterator rIter = r.iterator(); while (rIter.hasNext()) { Group run = (Group) rIter.next(); if (run != null) { runs.add(run); } } } } } return runs; } public Collection getRunGroupOfTypeForUser(User user, String type) { Collection typeGroups = null; Collection runs = new ArrayList(); String[] typeRun = { type }; String[] typeGroup = { IWMarathonConstants.GROUP_TYPE_RUN_GROUP }; try { typeGroups = getUserBiz().getUserGroups(user, typeGroup, true); } catch (IBOLookupException e) { e.printStackTrace(); } catch (RemoteException e) { e.printStackTrace(); } if (typeGroups != null) { Iterator groupsIter = typeGroups.iterator(); while (groupsIter.hasNext()) { Group group = (Group) groupsIter.next(); Collection r = null; try { r = getGroupBiz().getParentGroupsRecursive(group, typeRun, true); } catch (IBOLookupException e1) { e1.printStackTrace(); } catch (EJBException e1) { e1.printStackTrace(); } catch (RemoteException e1) { e1.printStackTrace(); } if (r != null) { Iterator rIter = r.iterator(); while (rIter.hasNext()) { Group run = (Group) rIter.next(); if (run != null) { runs.add(run); } } } } } return runs; } public Group getRunGroupOfTypeForGroup(Group group, String type) { String[] types = { type }; Collection r = null; Group run = null; try { r = getGroupBiz().getParentGroupsRecursive(group, types, true); } catch (RemoteException e1) { e1.printStackTrace(); } if (r != null) { Iterator rIter = r.iterator(); if (rIter.hasNext()) { run = (Group) rIter.next(); } } return run; } /** * gets all the "gender/age" groups for the user e.g. "female_14", * "male_14", "female_14_17", "male_14_17", "female_18_39", "male_18_39" ... * * @return a Collection of the "iwma_run_group" types */ public Collection getRunGroupsForUser(User user) { Collection groups = null; String[] typeGroup = { IWMarathonConstants.GROUP_TYPE_RUN_GROUP }; try { groups = getUserBiz().getUserGroups(user, typeGroup, true); } catch (IBOLookupException e) { e.printStackTrace(); } catch (RemoteException e) { e.printStackTrace(); } return groups; } /** * Gets all the years that exist for a specific run. The years are groups * with the group type "iwma_year" * * @param run * - the supergroup of the years * @return Collection of the years for the specific run */ public Collection getYears(Group run) { return getYears(run, null); } public Collection getYears(Group run, String yearFilter) { Collection years = null; Collection type = new ArrayList(); type.add(IWMarathonConstants.GROUP_TYPE_RUN_YEAR); try { years = getGroupBiz().getChildGroupsResultFiltered(run, yearFilter, type, true); } catch (Exception e) { e.printStackTrace(); } return years; } /** * Gets all the years that exist for a specific run. The years are groups * with the group type "iwma_year". This method returns a Map instead of a * Collection. This is for example used to display the years in a secondary * dropdown menu when displaying two connected dropdowns. * * @param Group * run - the supergroup of the years * @return Map of the years for the specific run */ public Map getYearsMap(Group run) { return getYearsMap(run, null); } public Map getYearsMap(Group run, String groupNameFilter) { Map yearsMap = new LinkedHashMap(); Iterator yearsIter = run.getChildrenIterator(); while (yearsIter.hasNext()) { Group year = (Group) yearsIter.next(); try { yearsMap.put(year.getName(), ConverterUtility.getInstance() .convertGroupToYear(year)); } catch (FinderException fe) { fe.printStackTrace(); } } return yearsMap; } /** * Gets a Collection of distances for a specific run and year. Distances are * groups with the group type "iwma_distance". * * @param Group * run - the supersupergroup of the specific run * @param year * - the year of the run * @return Collection of all distances for a specific run on a specific year */ public List getDistancesMap(Group run, String year) { List distances = null; Collection type = new ArrayList(); type.add(IWMarathonConstants.GROUP_TYPE_RUN_DISTANCE); if (run != null) { Collection years = getYears(run, year); if (years != null) { Iterator yearsIter = years.iterator(); while (yearsIter.hasNext()) { Group y = (Group) yearsIter.next(); if (y.getName().equals(year)) { try { distances = new ArrayList(getGroupBiz() .getChildGroupsRecursiveResultFiltered(y, type, true)); } catch (Exception e) { distances = null; } } } if (distances != null && distances.size() > 1) { Collections.sort(distances, new RunDistanceComparator()); } } } return distances; } public Group getDistanceByUserID(int userID) { Group dis = null; Collection groups = null; String[] type = { IWMarathonConstants.GROUP_TYPE_RUN_DISTANCE }; try { groups = getUserBiz().getUserGroups(getUserBiz().getUser(userID), type, true); } catch (IBOLookupException e) { e.printStackTrace(); } catch (RemoteException e) { e.printStackTrace(); } if (groups != null) { Iterator i = groups.iterator(); while (i.hasNext()) { Group g = (Group) i.next(); dis = g;/* * Group g = (Group) i.next(); Collection parentGr = * null; try { parentGr = * getGroupBiz().getParentGroups(g); } catch * (IBOLookupException e1) { e1.printStackTrace(); } * catch (RemoteException e1) { e1.printStackTrace(); } * if(parentGr != null) { Iterator j = * parentGr.iterator(); while(j.hasNext()) { Group pg = * (Group) j.next(); * if(pg.getName().equals(RUN_RVK_MARATHON)) { dis = g; * } } } */ } } return dis; } public Distance getDistanceByID(int ID) { Group dis = null; try { dis = getGroupBiz().getGroupByGroupID(ID); return ConverterUtility.getInstance().convertGroupToDistance(dis); } catch (IBOLookupException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (RemoteException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (FinderException e) { e.printStackTrace(); } return null; } /** * * @param user * @return an int representing the age of the user */ public int getUserAge(User user) { Date dob = user.getDateOfBirth(); IWTimestamp t = new IWTimestamp(dob); int birthYear = t.getYear(); IWTimestamp time = IWTimestamp.RightNow(); int year = time.getYear(); return year - birthYear; } /** * Gets all countries. This method is for example used when displaying a * dropdown menu of all countries * * @return Colleciton of all countries */ public Collection getCountries() { return getCountries(null); } /** * Gets all countries. This method is for example used when displaying a * dropdown menu of all countries * * @return Colleciton of all countries */ public Collection getCountries(String[] presetCountries) { List countries = null; try { CountryHome countryHome = (CountryHome) getIDOHome(Country.class); countries = new ArrayList(countryHome.findAll()); if (presetCountries != null) { // iterate reverse through the array to get the correct order: for (int i = presetCountries.length - 1; i > -1; i--) { String presetCountry = presetCountries[i]; List tempList = new ArrayList(countries); for (Iterator iter = tempList.iterator(); iter.hasNext();) { Country country = (Country) iter.next(); String countryIsoAbbr = country.getIsoAbbreviation(); if (countryIsoAbbr != null && countryIsoAbbr .equalsIgnoreCase(presetCountry)) { countries.remove(country); countries.add(0, country); } } } } } catch (Exception e) { e.printStackTrace(); } return countries; } private GroupBusiness getGroupBiz() throws IBOLookupException { GroupBusiness business = (GroupBusiness) IBOLookup.getServiceInstance( getIWApplicationContext(), GroupBusiness.class); return business; } private CreditCardBusiness getCreditCardBusiness() { try { return (CreditCardBusiness) IBOLookup.getServiceInstance( getIWApplicationContext(), CreditCardBusiness.class); } catch (IBOLookupException ile) { throw new IBORuntimeException(ile); } } public UserBusiness getUserBiz() throws IBOLookupException { UserBusiness business = (UserBusiness) IBOLookup.getServiceInstance( getIWApplicationContext(), UserBusiness.class); return business; } public Country getCountryByNationality(Object nationality) { Country country = null; try { CountryHome home = (CountryHome) getIDOHome(Country.class); try { int countryPK = Integer.parseInt(nationality.toString()); country = home.findByPrimaryKey(new Integer(countryPK)); } catch (NumberFormatException nfe) { country = home.findByIsoAbbreviation(nationality.toString()); } } catch (FinderException fe) { // log(fe); } catch (RemoteException re) { // log(re); } return country; } public AddressHome getAddressHome() { if (this.addressHome == null) { try { this.addressHome = (AddressHome) IDOLookup .getHome(Address.class); } catch (RemoteException rme) { throw new RuntimeException(rme.getMessage()); } } return this.addressHome; } public Participant getParticipantByPrimaryKey(int participantID) { Participant participant = null; try { ParticipantHome runHome = (ParticipantHome) getIDOHome(Participant.class); participant = runHome.findByPrimaryKey(new Integer(participantID)); } catch (RemoteException e1) { } catch (FinderException e1) { } return participant; } private String localizeForRun(String key, String value, Runner runner, IWResourceBundle iwrb) { if (runner.getRun() != null) { String runKey = key + "_runid_" + runner.getRun().getId(); String localizedString = iwrb.getLocalizedString(runKey); if (localizedString == null) { localizedString = iwrb.getLocalizedString(key, value); } return localizedString; } else { return iwrb.getLocalizedString(key, value); } } public ParticipantHome getParticipantHome() { if (this.participantHome == null) { try { this.participantHome = (ParticipantHome) IDOLookup .getHome(Participant.class); } catch (RemoteException rme) { throw new RuntimeException(rme.getMessage()); } } return this.participantHome; } public List getDisallowedDistancesPKs(User user, List distances) { int age = new Age(user.getDateOfBirth()).getYears(); List disallowed = new ArrayList(); for (Iterator iterator = distances.iterator(); iterator.hasNext();) { Distance distance = (Distance) iterator.next(); if ((distance.getMinimumAgeForDistance() > 0 && age < distance .getMinimumAgeForDistance()) || (distance.getMaximumAgeForDistance() > 0 && age > distance .getMaximumAgeForDistance())) disallowed.add(distance.getPrimaryKey().toString()); } return disallowed; } public Collection getConfirmedParticipants() { try { return getParticipantHome().findAllPaidConfirmation(); } catch (FinderException e) { } return null; } }