package se.idega.idegaweb.commune.account.citizen.presentation; import com.idega.business.IBOLookup; import com.idega.core.accesscontrol.business.UserHasLoginException; import com.idega.core.accesscontrol.data.LoginTable; import com.idega.core.accesscontrol.data.LoginTableHome; import com.idega.core.location.business.CommuneBusiness; import com.idega.core.location.data.Commune; import com.idega.data.IDOLookup; import com.idega.idegaweb.IWApplicationContext; import com.idega.idegaweb.IWBundle; import com.idega.idegaweb.IWResourceBundle; import com.idega.presentation.ExceptionWrapper; import com.idega.presentation.IWContext; import com.idega.presentation.Table; import com.idega.presentation.text.Link; import com.idega.presentation.text.Text; import com.idega.presentation.ui.DropdownMenu; import com.idega.presentation.ui.Form; import com.idega.presentation.ui.HiddenInput; import com.idega.presentation.ui.RadioButton; import com.idega.presentation.ui.SubmitButton; import com.idega.presentation.ui.TextInput; import com.idega.user.data.Group; import com.idega.user.data.User; import java.rmi.RemoteException; import java.util.ArrayList; import java.util.Arrays; import java.util.Calendar; import java.util.Collection; import java.util.Collections; import java.util.Date; import java.util.Enumeration; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import javax.ejb.CreateException; import javax.ejb.FinderException; import se.idega.block.pki.business.NBSLoggedOnInfo; import se.idega.block.pki.business.NBSLoginBusinessBean; import se.idega.block.pki.presentation.NBSLogin; import se.idega.idegaweb.commune.account.citizen.business.CitizenAccountBusiness; import se.idega.idegaweb.commune.account.citizen.data.CitizenAccount; import se.idega.idegaweb.commune.business.CommuneUserBusiness; import se.idega.idegaweb.commune.presentation.CommuneBlock; import se.idega.util.PIDChecker; /** * CitizenAccountApplication is an IdegaWeb block that inputs and handles * applications for citizen accounts. It is based on session ejb classes in * {@link se.idega.idegaweb.commune.account.citizen.business} and entity ejb * classes in {@link se.idega.idegaweb.commune.account.citizen.business.data}. * <p> * Last modified: $Date: 2005/04/21 12:29:55 $ by $Author: malin $ * * @author <a href="mail:palli@idega.is">Pall Helgason</a> * @author <a href="http://www.staffannoteberg.com">Staffan N�teberg</a> * @version $Revision: 1.81 $ */ public class CitizenAccountApplication extends CommuneBlock { private final static int ACTION_VIEW_FORM = 0; private final static int ACTION_SUBMIT_SIMPLE_FORM = 1; private final static int ACTION_SUBMIT_UNKNOWN_CITIZEN_FORM_1 = 2; private final static int ACTION_SUBMIT_UNKNOWN_CITIZEN_FORM_2 = 3; final static String APPLICATION_REASON_DEFAULT = "Orsak till ans�kan om medborgarkonto"; final static String APPLICATION_REASON_KEY = "caa_application_reason"; final static String KOMVUX_APPLICATION_INFO_DEFAULT = "You have choosen to apply for komvux"; final static String KOMVUX_APPLICATION_INFO_KEY = "caa_komvux_appli_info"; final static String CHILDREN_COUNT_DEFAULT = "Antal barn i familjen"; final static String CHILDREN_COUNT_KEY = "caa_children_count"; final static String CHILDREN_COUNT_INFO_DEFAULT = "For komvux, enter 0"; final static String CHILDREN_COUNT_INFO_KEY = "caa_children_count_info"; private final static String CHILDREN_DEFAULT = "Barn i familjen"; private final static String CHILDREN_KEY = "caa_children"; private final static String CITY_DEFAULT = "Postort"; private final static String CITY_KEY = "caa_city"; final static String CIVIL_STATUS_DEFAULT = "Civilst�nd"; final static String CIVIL_STATUS_KEY = "caa_civil_status"; final static String COHABITANT_DEFAULT = "Sammanboende"; final static String COHABITANT_KEY = "caa_cohabitant"; final static String CURRENT_KOMMUN_DEFAULT = "Nuvarande kommun"; final static String CURRENT_KOMMUN_KEY = "caa_current_kommun"; final static String DETACHED_HOUSE_DEFAULT = "Villa"; final static String DETACHED_HOUSE_KEY = "caa_detached_house"; final static String EMAIL_DEFAULT = "E-post"; final static String EMAIL_KEY = "caa_email"; private final static String FIRST_NAME_DEFAULT = "F�rnamn"; private final static String FIRST_NAME_KEY = "caa_first_name"; private final static String HAS_COHABITANT_DEFAULT = "�r du sammanboende?"; private final static String HAS_COHABITANT_KEY = "caa_has_cohabitant"; final static String HOUSING_TYPE_KEY = "caa_housing_type"; final static String LANDLORD_DEFAULT = "Hyresv�rd (endast hyreskontrakt)"; final static String LANDLORD_KEY = "caa_landlord"; final static String LANDLORD_NAME_DEFAULT = "Namn"; final static String LANDLORD_NAME_KEY = "caa_landlord_name"; final static String LANDLORD_PHONE_DEFAULT = "Telefon"; final static String LANDLORD_PHONE_KEY = "caa_landlord_phone"; final static String LANDLORD_ADDRESS_DEFAULT = "Adress"; final static String LANDLORD_ADDRESS_KEY = "caa_landlord_address"; private final static String LAST_NAME_DEFAULT = "Efternamn"; private final static String LAST_NAME_KEY = "caa_last_name"; final static String MOVING_IN_ADDRESS_DEFAULT = "Inflyttningsadress"; final static String MOVING_IN_ADDRESS_KEY = "caa_moving_in_address"; final static String MOVING_IN_DATE_DEFAULT = "Inflyttningsdatum"; final static String MOVING_IN_DATE_KEY = "caa_moving_in_date"; final static String MOVING_TO_NACKA_DEFAULT = "Jag flyttar till Nacka kommun"; final static String NO_DEFAULT = "Nej"; final static String NO_KEY = "caa_no"; final static String PHONE_HOME_DEFAULT = "Telefon (hem)"; final static String PHONE_HOME_KEY = "caa_phone_home"; final static String PHONE_WORK_DEFAULT = "Telefon (arbete/mobil)"; final static String PHONE_WORK_KEY = "caa_phone_work"; final static String PROPERTY_TYPE_DEFAULT = "Fastighetsbeteckning (endast villa)"; final static String PROPERTY_TYPE_KEY = "caa_property_type"; private final static String PUT_CHILDREN_IN_NACKA_SCHOOL_DEFAULT = "Jag vill ha plats f�r mitt barn i en skola i Nacka kommun"; private final static String PUT_CHILDREN_IN_NACKA_CHILDCARE_DEFAULT = "Jag vill ha plats f�r mitt barn i barnomsorgen i Nacka kommun"; private final static String MAKE_KOMVUX_APPLICATION_DEFAULT = "I want to apply for Komvux"; final static String SSN_DEFAULT = "Personnummer"; final static String SSN_KEY = "caa_ssn"; private final static String CAREOF_DEFAULT = "c/o"; private final static String CAREOF_KEY = "caa_careof"; private final static String STREET_DEFAULT = "Gatuadress"; private final static String STREET_KEY = "caa_street"; final static String TENANCY_AGREEMENT_DEFAULT = "Hyreskontrakt"; final static String TENANCY_AGREEMENT_KEY = "caa_tenancy_agreement"; private final static String TEXT_APPLICATION_SUBMITTED_DEFAULT = "Ans�kan �r skickad."; private final static String TEXT_APPLICATION_SUBMITTED_KEY = "caa_app_submitted"; private final static String UNKNOWN_CITIZEN_DEFAULT = "Du finns inte registrerad som medborgare i kommunen. Du har �nd�" + " m�jlighet att registrera dig f�r ett anv�ndarkonto om du har" + " planerat att flytta till kommunen eller vill att ditt barn ska g� i" + " skolan i kommunen. F�lj instruktionerna nedan."; private final static String UNKNOWN_CITIZEN_KEY = "caa_unknown_citizen"; private final static String GOTO_FORGOT_PASSWORD_DEFAULT = "Klicka p� l�nken \"Jag har gl�mt mitt anv�ndarnamn eller l�senord\""; private final static String GOTO_FORGOT_PASSWORD_KEY = "caa_goto_forgot_password_key"; private final static String USER_ALLREADY_HAS_A_LOGIN_DEFAULT = "Du har redan ett konto"; private final static String USER_ALLREADY_HAS_A_LOGIN_KEY = "caa_user_allready_has_a_login"; final static String YES_DEFAULT = "Ja"; final static String YES_KEY = "caa_yes"; private final static String ONLY_ONE_PERSON_PER_SSN_KEY = "caa_only_one_person_per_ssn"; private final static String ONLY_ONE_PERSON_PER_SSN_DEFAULT = "Flera personer kan inte ha personnummer"; private final static String YOU_MUST_BE_18_KEY = "caa_youMustBe18"; private final static String YOU_MUST_BE_18_DEFAULT = "Du m�ste vara 18 �r gammal f�r att kunna ans�ka om medborgarkonto"; private final static String ZIP_CODE_DEFAULT = "Postnummer"; private final static String ZIP_CODE_KEY = "caa_zip_code"; private final static String NOT_LIVING_IN_SWEDEN_KEY = "caa_not_living_in_sweden"; private final static String MUST_SELECT_COMMUNE_KEY = "caa_must_select_commune"; private final static String MUST_SELECT_COMMUNE_DEFAULT = "You must select a commune"; private final static String SIMPLE_FORM_SUBMIT_KEY = "caa_simpleSubmit"; private final static String SIMPLE_FORM_SUBMIT_DEFAULT = "Skicka ans�kan"; private final static String UNKNOWN_CITIZEN_FORM_1_SUBMIT_KEY = "caa_unknownCitizenSubmit1"; private final static String UNKNOWN_CITIZEN_FORM_1_SUBMIT_DEAFULT = "Forts�tt"; private final static String UNKNOWN_CITIZEN_FORM_2_SUBMIT_KEY = "caa_unknownCitizenSubmit2"; private final static String UNKNOWN_CITIZEN_FORM_2_SUBMIT_DEAFULT = "Skicka ans�kan"; private final static String COLOR_RED = "#ff0000"; private final static String ERROR_FIELD_CAN_NOT_BE_EMPTY_DEFAULT = "F�ltet m�ste fyllas i"; private final static String ERROR_FIELD_CAN_NOT_BE_EMPTY_KEY = "caa_field_can_not_be_empty"; private final static String ERROR_FIELD_NUMERIC_DEFAULT = "Field must be numeric"; private final static String ERROR_FIELD_NUMERIC_KEY = "caa_field_numeric"; private final static String ERROR_NO_INSERT_DEFAULT = "Kunde inte lagra ans�kan."; private final static String ERROR_NO_INSERT_KEY = "caa_unable_to_insert"; private final static String ERROR_ALREADY_HAS_APPLICATION = "caa_already_has_application"; private final static String ERROR_ALREADY_HAS_APPLICATION_DEFAULT = "Citizen already has an account application that hasn't been handled."; private boolean sendUserToHomePage = true; private int _numberOfReasons = 3; public void main(final IWContext iwc) { setResourceBundle(getResourceBundle(iwc)); try { int action = parseAction(iwc); switch (action) { case ACTION_VIEW_FORM : viewSimpleApplicationForm(iwc); break; case ACTION_SUBMIT_SIMPLE_FORM : submitSimpleForm(iwc); break; case ACTION_SUBMIT_UNKNOWN_CITIZEN_FORM_1 : submitUnknownCitizenForm1(iwc); break; case ACTION_SUBMIT_UNKNOWN_CITIZEN_FORM_2 : submitUnknownCitizenForm2(iwc); break; } } catch (Exception e) { super.add(new ExceptionWrapper(e, this)); } } private void viewSimpleApplicationForm(final IWContext iwc) { final Form accountForm = new Form(); final Table table = createTable(); accountForm.add(table); addSimpleInputs(table, iwc); table.setHeight(table.getRows() + 1, 12); SubmitButton button = getSubmitButton(SIMPLE_FORM_SUBMIT_KEY + "_button", SIMPLE_FORM_SUBMIT_DEFAULT); table.add(button, 1, table.getRows() + 1); accountForm.setToDisableOnSubmit(button, true); accountForm.addParameter(SIMPLE_FORM_SUBMIT_KEY, Boolean.TRUE.toString()); add(accountForm); } private void submitSimpleForm(final IWContext iwc) { final Collection mandatoryParametersNames = Collections.singleton(SSN_KEY); final Collection stringParameterNames = Arrays.asList(new String[] { EMAIL_KEY, PHONE_HOME_KEY, PHONE_WORK_KEY }); final Collection ssnParameterNames = Collections.singleton(SSN_KEY); final Collection integerParameters = Collections.EMPTY_LIST; try { final Map parameters = parseParameters(getResourceBundle(), iwc, mandatoryParametersNames, stringParameterNames, ssnParameterNames, integerParameters); final String ssn = parameters.get(SSN_KEY).toString(); if (!isOver18(ssn)) { throw new ParseException(localize(YOU_MUST_BE_18_KEY, YOU_MUST_BE_18_DEFAULT)); } final String email = parameters.get(EMAIL_KEY).toString(); final String phoneHome = parameters.get(PHONE_HOME_KEY).toString(); final String phoneWork = parameters.get(PHONE_WORK_KEY).toString(); final CitizenAccountBusiness business = (CitizenAccountBusiness) IBOLookup.getServiceInstance(iwc, CitizenAccountBusiness.class); final User user = business.getUser(ssn); final Collection logins = new ArrayList (); try { logins.addAll (getLoginTableHome ().findLoginsForUser (user)); } catch (Exception e) { // no problem, no login found } if (user != null && !logins.isEmpty()) { throw new UserHasLoginException (); } if (business.hasAccountApplication(ssn)) { throw new Exception(localize(ERROR_ALREADY_HAS_APPLICATION, ERROR_ALREADY_HAS_APPLICATION_DEFAULT)); } if (user == null || !citizenLivesInNacka(iwc, user)) { // unknown or not-living-in-nacka user applies final Text text = new Text(localize(UNKNOWN_CITIZEN_KEY, UNKNOWN_CITIZEN_DEFAULT)); text.setFontColor(COLOR_RED); add(text); viewUnknownCitizenApplicationForm1(iwc); } else if (null == business.insertApplication(iwc,user, ssn, email, phoneHome, phoneWork)) { // known user applied, but couldn't be submitted throw new Exception(localize(ERROR_NO_INSERT_KEY, ERROR_NO_INSERT_DEFAULT)); } else { // known user applied and was submitted NBSLoginBusinessBean loginBusiness = NBSLoginBusinessBean.createNBSLoginBusiness(); NBSLoggedOnInfo info = loginBusiness.getBankIDLoggedOnInfo(iwc); if(info != null && sendUserToHomePage){ Group primaryGroup = user.getPrimaryGroup(); if (user.getHomePageID() != -1) iwc.forwardToIBPage(this.getParentPage(), user.getHomePage()); if (primaryGroup != null && primaryGroup.getHomePageID() != -1) iwc.forwardToIBPage(this.getParentPage(), primaryGroup.getHomePage()); } else if (getResponsePage() != null) { iwc.forwardToIBPage(getParentPage(), getResponsePage()); } else { add(new Text(localize(TEXT_APPLICATION_SUBMITTED_KEY, TEXT_APPLICATION_SUBMITTED_DEFAULT))); } } } catch (UserHasLoginException uhle) { final Text text = new Text(localize(USER_ALLREADY_HAS_A_LOGIN_KEY, USER_ALLREADY_HAS_A_LOGIN_DEFAULT) + ". " + localize(GOTO_FORGOT_PASSWORD_KEY, GOTO_FORGOT_PASSWORD_DEFAULT) + '.', true, false, false); text.setFontColor(COLOR_RED); add(text); add(Text.getBreak()); viewSimpleApplicationForm(iwc); } catch (final Exception e) { final Text text = new Text(e.getMessage(), true, false, false); text.setFontColor(COLOR_RED); add(text); add(Text.getBreak()); viewSimpleApplicationForm(iwc); } } /** * Set if the form should send the user to his home page after login. **/ public void setToSendUserToHomePage(boolean doSendToHomePage) { sendUserToHomePage = doSendToHomePage; } private boolean citizenLivesInNacka(final IWContext iwc, final User citizen) throws RemoteException, CreateException, FinderException { final int primary = citizen.getPrimaryGroupID(); final CommuneUserBusiness commune = (CommuneUserBusiness) IBOLookup.getServiceInstance(iwc, CommuneUserBusiness.class); final Group rootCitizenGroup = commune.getRootCitizenGroup(); return primary == ((Integer) rootCitizenGroup.getPrimaryKey()).intValue(); } private void viewUnknownCitizenApplicationForm1(final IWContext iwc) { final Table table = createTable(); addSimpleInputs(table, iwc); int row = table.getRows() + 1; table.add(getHeader(FIRST_NAME_KEY, FIRST_NAME_DEFAULT), 1, row); table.add(getSingleInput(iwc, FIRST_NAME_KEY, 40, true), 3, row++); table.add(getHeader(LAST_NAME_KEY, LAST_NAME_DEFAULT), 1, row); table.add(getSingleInput(iwc, LAST_NAME_KEY, 40, true), 3, row++); table.add(getHeader(CAREOF_KEY, CAREOF_DEFAULT), 1, row); table.add(getSingleInput(iwc, CAREOF_KEY, 40, false), 3, row++); table.add(getHeader(STREET_KEY, STREET_DEFAULT), 1, row); table.add(getSingleInput(iwc, STREET_KEY, 40, true), 3, row++); table.add(getHeader(ZIP_CODE_KEY, ZIP_CODE_DEFAULT), 1, row); table.add(getSingleInput(iwc, ZIP_CODE_KEY, 5, true), 3, row++); table.add(getHeader(CITY_KEY, CITY_DEFAULT), 1, row); table.add(getSingleInput(iwc, CITY_KEY, 40, true), 3, row++); table.add(getHeader(CIVIL_STATUS_KEY, CIVIL_STATUS_DEFAULT), 1, row); table.add(getSingleInput(iwc, CIVIL_STATUS_KEY, 20, true), 3, row++); table.setHeight(row++, 6); table.mergeCells(1, row, 4, row); table.add(getHeader(HAS_COHABITANT_KEY, HAS_COHABITANT_DEFAULT), 1, row++); table.mergeCells(1, row, 4, row); table.add(getRadioButton(HAS_COHABITANT_KEY, YES_KEY, YES_DEFAULT, false), 1, row++); table.mergeCells(1, row, 4, row); table.add(getRadioButton(HAS_COHABITANT_KEY, NO_KEY, NO_DEFAULT, true), 1, row++); table.setHeight(row++, 6); table.add(getHeader(CHILDREN_COUNT_KEY, CHILDREN_COUNT_DEFAULT), 1, row); table.add(getSingleInputNumeric(iwc, CHILDREN_COUNT_KEY, 2, true), 3, row); table.add(getLocalizedText(CHILDREN_COUNT_INFO_KEY, CHILDREN_COUNT_INFO_DEFAULT), 3, row++); table.setHeight(row++, 6); table.mergeCells(1, row, 3, row); table.add(getHeader(APPLICATION_REASON_KEY, APPLICATION_REASON_DEFAULT), 1, row++); table.mergeCells(1, row, 3, row); table.add(getRadioButton(APPLICATION_REASON_KEY, CitizenAccount.MOVING_TO_NACKA_KEY, MOVING_TO_NACKA_DEFAULT, true), 1, row++); table.mergeCells(1, row, 3, row); table.add(getRadioButton(APPLICATION_REASON_KEY, CitizenAccount.PUT_CHILDREN_IN_NACKA_SCHOOL_KEY, PUT_CHILDREN_IN_NACKA_SCHOOL_DEFAULT, false), 1, row++); if (_numberOfReasons >=3){ table.mergeCells(1, row, 3, row); table.add(getRadioButton(APPLICATION_REASON_KEY, CitizenAccount.PUT_CHILDREN_IN_NACKA_CHILDCARE_KEY, PUT_CHILDREN_IN_NACKA_CHILDCARE_DEFAULT, false), 1, row++); } if (_numberOfReasons >=4){ table.mergeCells(1, row, 3, row); table.add(getRadioButton(APPLICATION_REASON_KEY, CitizenAccount.MAKE_KOMVUX_APPLICATION_KEY, MAKE_KOMVUX_APPLICATION_DEFAULT, false), 1, row++); } table.setHeight(row++, 12); table.add(getSubmitButton(UNKNOWN_CITIZEN_FORM_1_SUBMIT_KEY, UNKNOWN_CITIZEN_FORM_1_SUBMIT_DEAFULT), 1, row); final Form accountForm = new Form(); accountForm.add(table); add(accountForm); } private void submitUnknownCitizenForm1 (final IWContext iwc) { try { if (!(iwc.isParameterSet (PHONE_HOME_KEY) || iwc.isParameterSet (PHONE_WORK_KEY))) { throw new ParseException (getResourceBundle(), PHONE_HOME_KEY); } viewUnknownCitizenApplicationForm2(iwc); } catch (final Exception e) { final Text text = new Text (e.getMessage(), true, false, false); text.setFontColor (COLOR_RED); add (text); add (Text.getBreak()); viewUnknownCitizenApplicationForm1 (iwc); } } private void viewUnknownCitizenApplicationForm2(final IWContext iwc) { final Form form = getUnknownCitizenForm2 (); final Table table = createTable(); int row = 1; if (getBooleanParameter(iwc, HAS_COHABITANT_KEY)) { row = addCohabitantInputs(iwc, table, row); } final int childrenCount = getIntParameter(iwc, CHILDREN_COUNT_KEY); if (childrenCount > 0) { row = addChildrenInputs(iwc, table, row, childrenCount); } final String applicationReason = iwc.getParameter(APPLICATION_REASON_KEY); if (applicationReason.equals(CitizenAccount.MOVING_TO_NACKA_KEY)) { row = addMovingToNackaInputs(iwc, table, row); } else if (applicationReason.equals(CitizenAccount.PUT_CHILDREN_IN_NACKA_SCHOOL_KEY)) { row = addPutChildrenInNackaSchoolInputs(iwc, table, row); } else if (applicationReason.equals(CitizenAccount.PUT_CHILDREN_IN_NACKA_CHILDCARE_KEY)) { row = addPutChildrenInNackaChildcareInputs(iwc, table, row); } else if (applicationReason.equals(CitizenAccount.MAKE_KOMVUX_APPLICATION_KEY)) { row = addKomvuxApplictionInputs(iwc, table, row); } table.setHeight(row++, 12); table.add(getSubmitButton(UNKNOWN_CITIZEN_FORM_2_SUBMIT_KEY, UNKNOWN_CITIZEN_FORM_2_SUBMIT_DEAFULT), 1, row); form.add(table); add(form); } private int addPutChildrenInNackaChildcareInputs(final IWContext iwc, final Table table, int row) { // applicant wants to put children in Nacka final Text putChildrenInNackaHeader = getLocalizedHeader(CitizenAccount.PUT_CHILDREN_IN_NACKA_CHILDCARE_KEY, PUT_CHILDREN_IN_NACKA_CHILDCARE_DEFAULT); table.setHeight(row++, 6); table.mergeCells(1, row, 3, row); table.add(putChildrenInNackaHeader, 1, row++); table.add(getHeader(CURRENT_KOMMUN_KEY, CURRENT_KOMMUN_DEFAULT), 1, row); DropdownMenu communes = getCommuneDropdownMenu(iwc, CURRENT_KOMMUN_KEY, null); table.add(communes, 3, row++); return row; } private int addKomvuxApplictionInputs(final IWContext iwc, final Table table, int row) { // applicant wants start komvux final Text komvuxApplicationHeader = getLocalizedHeader(CitizenAccount.MAKE_KOMVUX_APPLICATION_KEY, MAKE_KOMVUX_APPLICATION_DEFAULT); table.setHeight(row++, 6); table.mergeCells(1, row, 3, row); table.add(komvuxApplicationHeader, 1, row++); table.mergeCells(1, row, 3, row); table.add(getLocalizedText(KOMVUX_APPLICATION_INFO_KEY, KOMVUX_APPLICATION_INFO_DEFAULT), 1, row++); table.add(getHeader(CURRENT_KOMMUN_KEY, CURRENT_KOMMUN_DEFAULT), 1, row); DropdownMenu communes = getCommuneDropdownMenu(iwc, CURRENT_KOMMUN_KEY, null); table.add(communes, 3, row++); return row; } private int addPutChildrenInNackaSchoolInputs(final IWContext iwc, final Table table, int row) { // applicant wants to put children in Nacka final Text putChildrenInNackaHeader = getLocalizedHeader(CitizenAccount.PUT_CHILDREN_IN_NACKA_SCHOOL_KEY, PUT_CHILDREN_IN_NACKA_SCHOOL_DEFAULT); table.setHeight(row++, 6); table.mergeCells(1, row, 3, row); table.add(putChildrenInNackaHeader, 1, row++); table.add(getHeader(CURRENT_KOMMUN_KEY, CURRENT_KOMMUN_DEFAULT), 1, row); DropdownMenu communes = getCommuneDropdownMenu(iwc, CURRENT_KOMMUN_KEY, null); table.add(communes, 3, row++); return row; } private int addMovingToNackaInputs(final IWContext iwc, final Table table, int row) { // applicant is moving to Nacka final Text movingToNackaHeader = getLocalizedHeader(CitizenAccount.MOVING_TO_NACKA_KEY, MOVING_TO_NACKA_DEFAULT); table.setHeight(row++, 6); table.mergeCells(1, row, 3, row); table.add(movingToNackaHeader, 1, row++); table.add(getHeader(CURRENT_KOMMUN_KEY, CURRENT_KOMMUN_DEFAULT), 1, row); DropdownMenu communes = getCommuneDropdownMenu(iwc, CURRENT_KOMMUN_KEY, null); table.add(communes, 3, row++); table.add(getHeader(MOVING_IN_ADDRESS_KEY, MOVING_IN_ADDRESS_DEFAULT), 1, row); table.add(getSingleInput(iwc, MOVING_IN_ADDRESS_KEY, 40, true), 3, row++); table.add(getHeader(MOVING_IN_DATE_KEY, MOVING_IN_DATE_DEFAULT), 1, row); table.add(getSingleInput(iwc, MOVING_IN_DATE_KEY, 20, true), 3, row++); table.mergeCells(1, row, 3, row); table.add(getRadioButton(HOUSING_TYPE_KEY, TENANCY_AGREEMENT_KEY, TENANCY_AGREEMENT_DEFAULT, false), 1, row++); table.mergeCells(1, row, 3, row); table.add(getRadioButton(HOUSING_TYPE_KEY, DETACHED_HOUSE_KEY, DETACHED_HOUSE_DEFAULT, true), 1, row++); table.add(getHeader(PROPERTY_TYPE_KEY, PROPERTY_TYPE_DEFAULT), 1, row); table.add(getSingleInput(iwc, PROPERTY_TYPE_KEY, 20, false), 3, row++); final Text landlord = getLocalizedHeader(LANDLORD_KEY, LANDLORD_DEFAULT); table.setHeight(row++, 6); table.mergeCells(1, row, 3, row); table.add(landlord, 1, row++); table.add(getHeader(LANDLORD_NAME_KEY, LANDLORD_NAME_DEFAULT), 1, row); table.add(getSingleInput(iwc, LANDLORD_NAME_KEY, 20, false), 3, row++); table.add(getHeader(LANDLORD_PHONE_KEY, LANDLORD_PHONE_DEFAULT), 1, row); table.add(getSingleInput(iwc, LANDLORD_PHONE_KEY, 20, false), 3, row++); table.add(getHeader(LANDLORD_ADDRESS_KEY, LANDLORD_ADDRESS_DEFAULT), 1, row); table.add(getSingleInput(iwc, LANDLORD_ADDRESS_KEY, 20, false), 3, row++); return row; } private int addChildrenInputs(final IWContext iwc, final Table table, int row, final int childrenCount) { // applicant has children final Text childrenHeader = getLocalizedHeader(CHILDREN_KEY, CHILDREN_DEFAULT); table.setHeight(row++, 6); table.mergeCells(1, row, 3, row); table.add(childrenHeader, 1, row++); for (int i = 0; i < childrenCount; i++) { table.add(getHeader(FIRST_NAME_KEY, FIRST_NAME_DEFAULT), 1, row); table.add(getSingleInput(iwc, FIRST_NAME_KEY + CHILDREN_KEY + i, 40, true), 3, row++); table.add(getHeader(LAST_NAME_KEY, LAST_NAME_DEFAULT), 1, row); table.add(getSingleInput(iwc, LAST_NAME_KEY + CHILDREN_KEY + i, 40, true), 3, row++); table.add(getHeader(SSN_KEY, SSN_DEFAULT), 1, row); table.add(getSingleInput(iwc, SSN_KEY + CHILDREN_KEY + i, 12, true), 3, row++); } return row; } private int addCohabitantInputs(final IWContext iwc, final Table table, int row) { // applicant has cohabitant final Text cohabitantHeader = getLocalizedHeader(COHABITANT_KEY, COHABITANT_DEFAULT); table.mergeCells(1, row, 3, row); table.add(cohabitantHeader, 1, row++); table.add(getHeader(FIRST_NAME_KEY, FIRST_NAME_DEFAULT), 1, row); table.add(getSingleInput(iwc, FIRST_NAME_KEY + COHABITANT_KEY, 40, true), 3, row++); table.add(getHeader(LAST_NAME_KEY, LAST_NAME_DEFAULT), 1, row); table.add(getSingleInput(iwc, LAST_NAME_KEY + COHABITANT_KEY, 40, true), 3, row++); table.add(getHeader(SSN_KEY, SSN_DEFAULT), 1, row); table.add(getSingleInput(iwc, SSN_KEY + COHABITANT_KEY, 12, true), 3, row++); table.add(getHeader(CIVIL_STATUS_KEY, CIVIL_STATUS_DEFAULT), 1, row); table.add(getSingleInput(iwc, CIVIL_STATUS_KEY + COHABITANT_KEY, 20, true), 3, row++); table.add(getHeader(PHONE_WORK_KEY, PHONE_WORK_DEFAULT), 1, row); table.add(getSingleInput(iwc, PHONE_WORK_KEY + COHABITANT_KEY, 20, true), 3, row++); return row; } private Form getUnknownCitizenForm2() { final Form form = new Form(); form.maintainParameter(SSN_KEY); form.maintainParameter(EMAIL_KEY); form.maintainParameter(PHONE_WORK_KEY); form.maintainParameter(PHONE_HOME_KEY); form.maintainParameter(FIRST_NAME_KEY); form.maintainParameter(LAST_NAME_KEY); form.maintainParameter(CAREOF_KEY); form.maintainParameter(STREET_KEY); form.maintainParameter(ZIP_CODE_KEY); form.maintainParameter(CITY_KEY); form.maintainParameter(HAS_COHABITANT_KEY); form.maintainParameter(CHILDREN_COUNT_KEY); form.maintainParameter(APPLICATION_REASON_KEY); form.maintainParameter(CIVIL_STATUS_KEY); form.add(new HiddenInput(UNKNOWN_CITIZEN_FORM_2_SUBMIT_KEY, UNKNOWN_CITIZEN_FORM_2_SUBMIT_DEAFULT)); return form; } private void submitUnknownCitizenForm2(final IWContext iwc) { final Collection mandatoryParameterNames = new ArrayList(); final Collection stringParameterNames = new ArrayList(); final Collection ssnParameterNames = new ArrayList(); final Collection integerParameters = new ArrayList(); final boolean hasCohabitant = getBooleanParameter(iwc, HAS_COHABITANT_KEY); final int childrenCount = getIntParameter(iwc, CHILDREN_COUNT_KEY); final String applicationReason = iwc.getParameter(APPLICATION_REASON_KEY); final String houseType = iwc.getParameter(HOUSING_TYPE_KEY); setValidationStructureForUnknownCitizenForm2 (mandatoryParameterNames, stringParameterNames, ssnParameterNames, integerParameters, hasCohabitant, childrenCount, applicationReason, houseType); Integer applicationId = null; try { final Map parameters = parseParameters (getResourceBundle(), iwc, mandatoryParameterNames, stringParameterNames, ssnParameterNames, integerParameters); final String ssn = parameters.get(SSN_KEY).toString(); // applicant must be at least 18 years old if (!isOver18(ssn)) { throw new ParseException(localize(YOU_MUST_BE_18_KEY, YOU_MUST_BE_18_DEFAULT)); } // applicant should live outside nacka in order to do special application final CitizenAccountBusiness business = (CitizenAccountBusiness) IBOLookup.getServiceInstance(iwc, CitizenAccountBusiness.class); final User user = business.getUser(ssn); if (null != user && citizenLivesInNacka (iwc, user)) { viewSimpleApplicationForm(iwc); return; } // store application applicationId = insertApplication (iwc, hasCohabitant, childrenCount, applicationReason, parameters, ssn, business); // store info about cohabitant if (null != applicationId && hasCohabitant) { insertCohabitant(applicationId, parameters, business); } // store info about children if (null != applicationId && childrenCount > 0) { insertChildren(childrenCount, applicationId, parameters, business); } String currentCommune = parameters.get(CURRENT_KOMMUN_KEY).toString(); int communeId = 0; try { communeId = Integer.valueOf(currentCommune).intValue(); } catch (Exception e) {} if (null != applicationId && applicationReason.equals (CitizenAccount.MOVING_TO_NACKA_KEY)) { insertPutChildrenInNacka(applicationId, parameters, business, communeId); } else if (null != applicationId && (applicationReason.equals (CitizenAccount.PUT_CHILDREN_IN_NACKA_SCHOOL_KEY) || applicationReason.equals (CitizenAccount.PUT_CHILDREN_IN_NACKA_CHILDCARE_KEY) || applicationReason.equals (CitizenAccount.MAKE_KOMVUX_APPLICATION_KEY))) { if (communeId > 0) { business.insertPutChildren(applicationId, parameters.get (CURRENT_KOMMUN_KEY).toString()); } } } catch (final ParseException e) { final Text text = new Text(e.getMessage(), true, false, false); text.setFontColor(COLOR_RED); add(text); add(Text.getBreak()); viewUnknownCitizenApplicationForm2(iwc); return; } catch (final Exception e) { e.printStackTrace(); applicationId = null; } if (null == applicationId) { final String message = localize (ERROR_NO_INSERT_KEY, ERROR_NO_INSERT_DEFAULT); final Text text = new Text(message, true, false, false); text.setFontColor(COLOR_RED); add(text); add(Text.getBreak()); viewUnknownCitizenApplicationForm1(iwc); return; } if (null != getResponsePage()) iwc.forwardToIBPage(getParentPage(), getResponsePage()); else add(new Text(localize(TEXT_APPLICATION_SUBMITTED_KEY, TEXT_APPLICATION_SUBMITTED_DEFAULT))); } private Integer insertApplication(final IWContext iwc, final boolean hasCohabitant, final int childrenCount, final String applicationReason, final Map parameters, final String ssn, final CitizenAccountBusiness business) throws RemoteException { Integer applicationId; final String email = parameters.get(EMAIL_KEY).toString(); final String phoneHome = parameters.get(PHONE_HOME_KEY).toString(); final String phoneWork = parameters.get(PHONE_WORK_KEY).toString(); final String name = parameters.get(FIRST_NAME_KEY) + " " + parameters.get(LAST_NAME_KEY); final String careOf = (String) parameters.get(CAREOF_KEY); final String street = parameters.get(STREET_KEY).toString(); final String zipCode = parameters.get(ZIP_CODE_KEY).toString(); final String city = parameters.get(CITY_KEY).toString(); final String civilStatus = parameters.get(CIVIL_STATUS_KEY).toString(); applicationId = business.insertApplication(iwc,name, ssn, email, phoneHome, phoneWork, careOf, street, zipCode, city, civilStatus, hasCohabitant, childrenCount, applicationReason); return applicationId; } private void insertPutChildrenInNacka(Integer applicationId, final Map parameters, final CitizenAccountBusiness business, int communeId) throws RemoteException { final String movingInAddress = parameters.get(MOVING_IN_ADDRESS_KEY).toString(); final String movingInDate = parameters.get(MOVING_IN_DATE_KEY).toString(); final String housingType = parameters.get(HOUSING_TYPE_KEY).toString(); final String propertyType = parameters.get(PROPERTY_TYPE_KEY).toString(); final String landlordName = parameters.get(LANDLORD_NAME_KEY).toString(); final String landlordPhone = parameters.get(LANDLORD_PHONE_KEY).toString(); final String landlordAddress = parameters.get(LANDLORD_ADDRESS_KEY).toString(); business.insertMovingTo(applicationId, movingInAddress, movingInDate, housingType, propertyType, landlordName, landlordPhone, landlordAddress); if (communeId > 0) { business.insertPutChildren(applicationId, parameters.get(CURRENT_KOMMUN_KEY).toString()); } } private void insertChildren(final int childrenCount, Integer applicationId, final Map parameters, final CitizenAccountBusiness business) throws RemoteException { for (int i = 0; i < childrenCount; i++) { final String childrenFirstName = parameters.get(FIRST_NAME_KEY + CHILDREN_KEY + i).toString(); final String childrenLastName = parameters.get(LAST_NAME_KEY + CHILDREN_KEY + i).toString(); final String childrenSsn = parameters.get(SSN_KEY + CHILDREN_KEY + i).toString(); business.insertChildren(applicationId, childrenFirstName, childrenLastName, childrenSsn); } } private void insertCohabitant(Integer applicationId, final Map parameters, final CitizenAccountBusiness business) throws RemoteException { final String cohabitantFirstName = parameters.get(FIRST_NAME_KEY + COHABITANT_KEY).toString(); final String cohabitantLastName = parameters.get(LAST_NAME_KEY + COHABITANT_KEY).toString(); final String cohabitantSsn = parameters.get(SSN_KEY + COHABITANT_KEY).toString(); final String cohabitantCivilStatus = parameters.get(CIVIL_STATUS_KEY + COHABITANT_KEY).toString(); final String cohabitantPhoneWork = parameters.get(PHONE_WORK_KEY + COHABITANT_KEY).toString(); business.insertCohabitant(applicationId, cohabitantFirstName, cohabitantLastName, cohabitantSsn, cohabitantCivilStatus, cohabitantPhoneWork); } private void setValidationStructureForUnknownCitizenForm2(final Collection mandatoryParameterNames, final Collection stringParameterNames, final Collection ssnParameterNames, final Collection integerParameters, final boolean hasCohabitant, final int childrenCount, final String applicationReason, final String houseType) { mandatoryParameterNames.addAll(Arrays.asList(new String[] { SSN_KEY, FIRST_NAME_KEY, LAST_NAME_KEY, CIVIL_STATUS_KEY, STREET_KEY, ZIP_CODE_KEY, CITY_KEY, CHILDREN_COUNT_KEY })); stringParameterNames.addAll(Arrays.asList(new String[] { EMAIL_KEY, PHONE_HOME_KEY, PHONE_WORK_KEY, FIRST_NAME_KEY, LAST_NAME_KEY, CAREOF_KEY, STREET_KEY, ZIP_CODE_KEY, CITY_KEY, CIVIL_STATUS_KEY, HAS_COHABITANT_KEY, APPLICATION_REASON_KEY })); ssnParameterNames.add(SSN_KEY); integerParameters.addAll(Arrays.asList(new String[] { CHILDREN_COUNT_KEY })); if (hasCohabitant) { stringParameterNames.addAll(Arrays.asList(new String[] { FIRST_NAME_KEY + COHABITANT_KEY, LAST_NAME_KEY + COHABITANT_KEY, CIVIL_STATUS_KEY + COHABITANT_KEY, PHONE_WORK_KEY + COHABITANT_KEY })); ssnParameterNames.add(SSN_KEY + COHABITANT_KEY); mandatoryParameterNames.addAll(Arrays.asList(new String[] { FIRST_NAME_KEY + COHABITANT_KEY, LAST_NAME_KEY + COHABITANT_KEY, SSN_KEY + COHABITANT_KEY, CIVIL_STATUS_KEY + COHABITANT_KEY, PHONE_WORK_KEY + COHABITANT_KEY })); } for (int i = 0; i < childrenCount; i++) { stringParameterNames.addAll(Arrays.asList(new String[] { FIRST_NAME_KEY + CHILDREN_KEY + i, LAST_NAME_KEY + CHILDREN_KEY + i })); ssnParameterNames.add(SSN_KEY + CHILDREN_KEY + i); mandatoryParameterNames.addAll(Arrays.asList(new String[] { FIRST_NAME_KEY + CHILDREN_KEY + i, LAST_NAME_KEY + CHILDREN_KEY + i, SSN_KEY + CHILDREN_KEY + i })); } if (applicationReason.equals(CitizenAccount.MOVING_TO_NACKA_KEY)) { if (houseType.equals(DETACHED_HOUSE_KEY)){ mandatoryParameterNames.add(PROPERTY_TYPE_KEY); stringParameterNames.add(PROPERTY_TYPE_KEY); } stringParameterNames.addAll(Arrays.asList(new String[] { MOVING_IN_ADDRESS_KEY, MOVING_IN_DATE_KEY, HOUSING_TYPE_KEY, PROPERTY_TYPE_KEY, LANDLORD_NAME_KEY, LANDLORD_PHONE_KEY, LANDLORD_ADDRESS_KEY })); mandatoryParameterNames.addAll(Arrays.asList(new String[] { MOVING_IN_ADDRESS_KEY, MOVING_IN_DATE_KEY, HOUSING_TYPE_KEY })); mandatoryParameterNames.add(CURRENT_KOMMUN_KEY); stringParameterNames.add(CURRENT_KOMMUN_KEY); } else if (applicationReason.equals(CitizenAccount.PUT_CHILDREN_IN_NACKA_SCHOOL_KEY) || applicationReason.equals(CitizenAccount.PUT_CHILDREN_IN_NACKA_CHILDCARE_KEY) || applicationReason.equals(CitizenAccount.MAKE_KOMVUX_APPLICATION_KEY)) { mandatoryParameterNames.add(CURRENT_KOMMUN_KEY); stringParameterNames.add(CURRENT_KOMMUN_KEY); } } private Table createTable() { final Table table = new Table(); table.setCellspacing(getCellpadding()); table.setCellpadding(0); table.setWidth(2, "12"); table.setWidth(1, "180"); return table; } private void addSimpleInputs(final Table table, final IWContext iwc) { table.add(getHeader(SSN_KEY, SSN_DEFAULT), 1, 1); TextInput ssnInput = getSingleInput(iwc, SSN_KEY, 12, true); table.add(ssnInput, 3, 1); NBSLoginBusinessBean NBSLBusiness = NBSLoginBusinessBean.createNBSLoginBusiness(); String unlockAction = "nbs_unlock_action"; if(iwc.getParameter(unlockAction)!= null){ NBSLBusiness.logOutBankID(iwc); } NBSLoggedOnInfo info = NBSLBusiness.getBankIDLoggedOnInfo(iwc); if(info !=null){ String persID = info.getNBSPersonalID(); if(persID!= null){ ssnInput.setValue(persID); ssnInput.setDisabled(true); String unlockString = "Unlock input"; IWBundle iwb = this.getBundle(iwc); if(iwb != null){ IWResourceBundle iwrb = iwb.getResourceBundle(iwc); if(iwrb != null){ unlockString = iwrb.getLocalizedString("unlock", "Unlock input"); } } Link unlockLink = new Link(unlockString); Enumeration enumer = iwc.getParameterNames(); if(enumer != null){ while(enumer.hasMoreElements()){ String parameterName = (String)enumer.nextElement(); unlockLink.maintainParameter(parameterName,iwc); } } unlockLink.addParameter(NBSLogin.PRM_PERSONAL_ID,persID); unlockLink.addParameter(unlockAction,"true"); table.add(Text.getNonBrakingSpace(), 3, 1); table.add(unlockLink, 3, 1); //HiddenInput ssnHInput = new HiddenInput(SSN_KEY,persID); //table.add(ssnHInput, 3, 1); } } else { String ssn = iwc.getParameter(NBSLogin.PRM_PERSONAL_ID); if(ssn!=null){ ssnInput.setValue(ssn); } } table.add(getHeader(EMAIL_KEY, EMAIL_DEFAULT), 1, 2); TextInput email = getSingleInput(iwc, EMAIL_KEY, 40, 100, false); email.setAsEmail(localize("not_valid_email", "Not a valid e-mail")); table.add(email, 3, 2); table.add(getHeader(PHONE_HOME_KEY, PHONE_HOME_DEFAULT), 1, 3); table.add(getSingleInput(iwc, PHONE_HOME_KEY, 20, true), 3, 3); table.add(getHeader(PHONE_WORK_KEY, PHONE_WORK_DEFAULT), 1, 4); table.add(getSingleInput(iwc, PHONE_WORK_KEY, 20, false), 3, 4); } private Table getRadioButton(final String name, final String value, String defaultValue, boolean selected) { Table table = new Table(3, 1); table.setCellpadding(0); table.setCellspacing(0); table.setWidth(2, "3"); RadioButton button = getRadioButton(name, value); if (selected) button.setSelected(); table.add(button, 1, 1); table.add(getSmallText(localize(value, defaultValue)), 3, 1); return table; } private TextInput getSingleInputNumeric(IWContext iwc, final String paramId, final int maxLength, boolean notEmpty) { TextInput textInput = getSingleInput( iwc, paramId, -1, maxLength, notEmpty); String name = localize(paramId, paramId); if ((name == null || name.trim().length() == 0 || name.equals(paramId)) && paramId.lastIndexOf("caa_") > 1) { final int secondIndex = paramId.indexOf("caa_", 2); final String shortKey = paramId.substring(0, secondIndex); name = localize(shortKey, shortKey); } textInput.setAsIntegers(localize(ERROR_FIELD_NUMERIC_KEY, ERROR_FIELD_NUMERIC_DEFAULT) + ": " + name); return textInput; } private TextInput getSingleInput(IWContext iwc, final String paramId, final int maxLength, boolean notEmpty) { return getSingleInput( iwc, paramId, -1, maxLength, notEmpty); } private TextInput getSingleInput(IWContext iwc, final String paramId, int length, final int maxLength, boolean notEmpty) { if (length == -1) { length = maxLength; } TextInput textInput = (TextInput) getStyledInterface(new TextInput(paramId)); textInput.setLength (length); textInput.setMaxlength (maxLength); textInput.setSize (length); if (notEmpty) { final String fieldCanNotBeEmpty = localize(ERROR_FIELD_CAN_NOT_BE_EMPTY_KEY, ERROR_FIELD_CAN_NOT_BE_EMPTY_DEFAULT); String name = localize(paramId, paramId); if ((name == null || name.trim().length() == 0 || name.equals(paramId)) && paramId.lastIndexOf("caa_") > 1) { final int secondIndex = paramId.indexOf("caa_", 2); final String shortKey = paramId.substring(0, secondIndex); name = localize(shortKey, shortKey); } textInput.setAsNotEmpty(fieldCanNotBeEmpty + ": " + name); } String param = iwc.getParameter(paramId); if (param != null) { textInput.setContent(param); } return textInput; } private Text getHeader(final String paramId, final String defaultText) { return getSmallHeader(localize(paramId, defaultText)); } private SubmitButton getSubmitButton(final String submitId, final String defaultText) { return (SubmitButton) getButton(new SubmitButton(submitId, localize(submitId, defaultText))); } private static boolean getBooleanParameter(final IWContext iwc, final String key) { final String value = iwc.getParameter(key); return value != null && value.equals(YES_KEY); } private static int getIntParameter(final IWContext iwc, final String key) { final String value = iwc.getParameter(key); return (value == null || value.trim().length() == 0) ? 0 : Integer.parseInt(value.trim()); } private static String getSsn(final IWContext iwc, final String key) { String rawInput = iwc.getParameter(key); if (rawInput == null) { return null; } final StringBuffer digitOnlyInput = new StringBuffer(); for (int i = 0; i < rawInput.length(); i++) { char number = rawInput.charAt(i); if (Character.isDigit(number)) digitOnlyInput.append(number); else { if (Character.isLetter(number) && number == 'T') digitOnlyInput.append(number); if (Character.isLetter(number) && number == 'F') digitOnlyInput.append(number); } } rawInput = digitOnlyInput.toString(); final Calendar rightNow = Calendar.getInstance(); final int currentYear = rightNow.get(Calendar.YEAR); if (rawInput.length() == 10) { final int inputYear = new Integer(rawInput.substring(0, 2)).intValue(); final int century = inputYear + 2000 > currentYear ? 19 : 20; rawInput = century + rawInput; } final PIDChecker pidChecker = PIDChecker.getInstance(); boolean isTemporary = false; if (rawInput.indexOf("TF") != -1) isTemporary = true; if (rawInput.length() != 12 || !pidChecker.isValid(rawInput, isTemporary)) { return null; } final int year = new Integer(rawInput.substring(0, 4)).intValue(); final int month = new Integer(rawInput.substring(4, 6)).intValue(); final int day = new Integer(rawInput.substring(6, 8)).intValue(); if (year < 1880 || year > currentYear || month < 1 || month > 12 || day < 1 || day > 31) { return null; } return rawInput; } private static boolean isOver18(final String ssn) { if (ssn == null || ssn.length() != 12) { throw new IllegalArgumentException("'" + ssn + "' isn't a SSN"); } final int year = new Integer(ssn.substring(0, 4)).intValue(); final int month = new Integer(ssn.substring(4, 6)).intValue(); final int day = new Integer(ssn.substring(6, 8)).intValue(); final Date rightNow = Calendar.getInstance().getTime(); final Calendar birthday18 = Calendar.getInstance(); birthday18.set(year + 18, month - 1, day); return rightNow.after(birthday18.getTime()); } private static int parseAction(final IWContext iwc) { int action = ACTION_VIEW_FORM; if (iwc.isParameterSet(SIMPLE_FORM_SUBMIT_KEY)) { action = ACTION_SUBMIT_SIMPLE_FORM; } else if (iwc.isParameterSet(UNKNOWN_CITIZEN_FORM_1_SUBMIT_KEY)) { action = ACTION_SUBMIT_UNKNOWN_CITIZEN_FORM_1; } else if (iwc.isParameterSet(UNKNOWN_CITIZEN_FORM_2_SUBMIT_KEY)) { action = ACTION_SUBMIT_UNKNOWN_CITIZEN_FORM_2; } return action; } private static Map parseParameters(final IWResourceBundle bundle, final IWContext iwc, final Collection mandatoryParameterNames, final Collection stringParameterNames, final Collection ssnParameterNames, final Collection integerParameterNames) throws ParseException { final Map result = new HashMap(); for (Iterator i = stringParameterNames.iterator(); i.hasNext();) { final String key = i.next().toString(); final String value = iwc.getParameter(key); final int length = value == null ? 0 : value.trim().length(); if (length == 0) { if (mandatoryParameterNames.contains(key)) { throw new ParseException(bundle, key); } else { result.put(key, ""); } } else { result.put(key, value.trim()); } } for (Iterator i = ssnParameterNames.iterator(); i.hasNext();) { final String key = i.next().toString(); final String value = getSsn(iwc, key); if (value == null && mandatoryParameterNames.contains(key)) { throw new ParseException(bundle, key); } else if (value != null && result.containsValue (value)) { throw new ParseException (bundle.getLocalizedString (ONLY_ONE_PERSON_PER_SSN_KEY, ONLY_ONE_PERSON_PER_SSN_DEFAULT) + " " + value); } else { result.put(key, value == null ? "" : value); } } for (Iterator i = integerParameterNames.iterator(); i.hasNext();) { final String key = i.next().toString(); try { final String valueAsString = iwc.getParameter(key); if ((valueAsString == null || valueAsString.trim().length() == 0) && !mandatoryParameterNames.contains(key)) { result.put(key, new Integer(0)); } else { final Integer value = new Integer(valueAsString.trim()); result.put(key, value); } } catch (Exception e) { throw new ParseException(bundle, key); } } return result; } static private class ParseException extends Exception { private final String key; ParseException(final IWResourceBundle bundle, final String key) { super(createMessage(bundle, key)); this.key = key; } ParseException(final String message) { super(message); key = ""; } static String createMessage(final IWResourceBundle bundle, final String key) { String displayName = bundle.getLocalizedString(key); if ((displayName == null || displayName.trim().length() == 0) && key.lastIndexOf("caa_") > 1) { final int secondIndex = key.indexOf("caa_", 2); final String shortKey = key.substring(0, secondIndex); displayName = bundle.getLocalizedString(shortKey); } final String formatErrorString = bundle.getLocalizedString("caa_format_error", "Felaktigt inmatat v�rde"); return formatErrorString + ": " + displayName; } String getKey() { return key; } } private DropdownMenu getCommuneDropdownMenu(IWContext iwc, String parameter, String communeId) { DropdownMenu menu = (DropdownMenu) getStyledInterface(new DropdownMenu(parameter)); menu.addMenuElement(0, ""); menu.setAsNotEmpty(localize(MUST_SELECT_COMMUNE_KEY, MUST_SELECT_COMMUNE_DEFAULT), "0"); try { Collection c = getCommuneBusiness(iwc).getCommunes(); int defaultCommuneId = ((Integer) getCommuneBusiness(iwc).getDefaultCommune().getPrimaryKey()).intValue(); if (c != null) { Iterator iter = c.iterator(); while (iter.hasNext()) { Commune commune = (Commune) iter.next(); int id = ((Integer) commune.getPrimaryKey()).intValue(); if (id != defaultCommuneId) { menu.addMenuElement(id, commune.getCommuneName()); } } if (communeId != null) { menu.setSelectedElement(communeId); } menu.addMenuElement(-1, localize(NOT_LIVING_IN_SWEDEN_KEY, "Not living in Sweden")); } } catch (Exception e) { add(new ExceptionWrapper(e)); } return menu; } protected CommuneBusiness getCommuneBusiness(IWApplicationContext iwac) throws RemoteException { return (CommuneBusiness) IBOLookup.getServiceInstance(iwac, CommuneBusiness.class); } private static LoginTableHome getLoginTableHome () { try { return (LoginTableHome) IDOLookup.getHome (LoginTable.class); } catch (Exception e) { e.printStackTrace (); return null; } } public void setNumberOfReasons(int number) { _numberOfReasons = number; } }