/** * */ package net.agef.jobexchange.pages.administration; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import net.agef.jobexchange.annotation.InjectSelectionModel; import net.agef.jobexchange.application.DataProviderWorker; import net.agef.jobexchange.application.LocationWorker; import net.agef.jobexchange.application.LoginUserWorker; import net.agef.jobexchange.application.UserWorker; import net.agef.jobexchange.domain.Address; import net.agef.jobexchange.domain.Country; import net.agef.jobexchange.domain.DataProvider; import net.agef.jobexchange.domain.IndustrySector; import net.agef.jobexchange.domain.JobImpl; import net.agef.jobexchange.domain.LoginUser; import net.agef.jobexchange.domain.OrganisationRole; import net.agef.jobexchange.domain.OrganisationRoleData; import net.agef.jobexchange.domain.Territory; import net.agef.jobexchange.domain.User; import net.agef.jobexchange.exceptions.DataProviderNotFoundException; import net.agef.jobexchange.exceptions.LoginUserNotFoundException; import net.agef.jobexchange.exceptions.ObjectNotSavedException; import net.agef.jobexchange.exceptions.PassedAttributeIsNullException; import net.agef.jobexchange.integration.IndustrySectorDAO; import org.apache.tapestry5.annotations.Component; import org.apache.tapestry5.annotations.OnEvent; import org.apache.tapestry5.annotations.Persist; import org.apache.tapestry5.annotations.Property; import org.apache.tapestry5.beaneditor.BeanModel; import org.apache.tapestry5.corelib.components.BeanEditor; import org.apache.tapestry5.corelib.components.Form; import org.apache.tapestry5.ioc.Messages; import org.apache.tapestry5.ioc.annotations.Inject; import org.apache.tapestry5.json.JSONArray; import org.apache.tapestry5.json.JSONObject; import org.apache.tapestry5.services.BeanModelSource; import org.slf4j.Logger; /** * @author AGEF * */ @SuppressWarnings("unused") public class AddOrganisationPage { @Inject private Logger logger; @Inject private UserWorker uw; @Inject private LoginUserWorker luw; @Inject private LocationWorker lw; @Inject private DataProviderWorker dpw; @Inject private IndustrySectorDAO industrySectorDAO; @Inject private BeanModelSource beanModelSource; @Inject private Messages messages; @Component(id = "beanForm") @Property private Form form; @Component(id="beanEditor") @Property private BeanEditor beanEditor; @Component(id="beanEditorUser") @Property private BeanEditor beanEditorUser; @Component(id="beanEditorUserAddress") @Property private BeanEditor beanEditorUserAddress; @Persist("Flash") private LoginUser loginUser; @Persist("Flash") @Property private User orgUser; @Persist("Flash") @Property private Address orgUserAddress; @Persist("Flash") @Property private OrganisationRoleData orgRoleData; @InjectSelectionModel(labelField = "nameEnglish", idField = "id") private List<Territory> territoryList = new ArrayList<Territory>(); @InjectSelectionModel(labelField = "shortEnglishName", idField = "id") private List<Country> countryDummyList = new ArrayList<Country>(); @InjectSelectionModel(labelField = "sectorNameEnglish", idField = "id") private List<IndustrySector> orgIndustrySectorList = new ArrayList<IndustrySector>(); @Persist private List<Country> countryList; @Property @Persist("Flash") private Territory territoryItem; @Property private Country countryDummyItem; @Property @Persist private Country countryItem; @Property @Persist private IndustrySector orgIndustrySectorItem; @Property @Persist("Flash") private Boolean isModified; // = false @SuppressWarnings("unchecked") private final BeanModel orgDataModel; { orgDataModel = beanModelSource.createEditModel(OrganisationRoleData.class, messages); orgDataModel.exclude("humanRessourceDevelopment"); //orgDataModel.reorder("messageRecipient","messageSubject","messageText","attachmentLocation"); } @SuppressWarnings("unchecked") private final BeanModel orgUserModel; { orgUserModel = beanModelSource.createEditModel(User.class, messages); orgUserModel.exclude("dateOfBirth","eMailPrivate","citizenship1","citizenship2","currentAddress"); //orgDataModel.reorder("messageRecipient","messageSubject","messageText","attachmentLocation"); } @SuppressWarnings("unchecked") private final BeanModel orgUserAddressModel; { orgUserAddressModel = beanModelSource.createEditModel(Address.class, messages); orgUserAddressModel.add("orgUserTerritory",null); //orgUserAddressModel.exclude("dateOfBirth","eMailPrivate","citizenship1","citizenship2","currentAddress"); orgUserAddressModel.reorder("address1","address2","city","federalstate","zipCode","orgUserTerritory"); } /** * setup page properties before after activation */ public void onPrepare(){ this.territoryList = lw.getAllTerritories(); this.orgIndustrySectorList = industrySectorDAO.findAll(); this.countryList = new ArrayList<Country>(); } Object onActivate(User user){ this.isModified = true; logger.info("OnActivate - modify"); if(luw.isLoggedInUser()){ try { this.loginUser = luw.getLoggedInUser(); } catch (LoginUserNotFoundException e) { luw.logoutUser(); } } else luw.logoutUser(); this.orgUser = user; if(this.orgUser == null){ return ManageOrganisationsPage.class; } this.orgRoleData = (OrganisationRoleData) orgUser.getUserRoleData(); this.orgUserAddress = orgUser.getAddress1(); this.orgIndustrySectorItem = this.orgRoleData.getIndustrySector(); if(this.countryItem==null){ this.countryItem = orgUser.getAddress1().getCountry(); logger.info("Ersetze countryItm:"+this.countryItem+" durch: "+orgUser.getAddress1().getCountry() ); } if(this.countryItem!=null){ this.territoryItem = this.countryItem.getParentTerritory(); this.countryList = lw.getRelatedCountries(this.territoryItem); this.countryDummyList = this.countryList; this.countryDummyItem = this.countryItem; } return true; } void onActivate(){ logger.info("OnActivate - normal "); if(luw.isLoggedInUser()){ try { this.loginUser = luw.getLoggedInUser(); } catch (LoginUserNotFoundException e) { logger.error("AddOrgForm -- Login User Name could not be found in DB."); luw.logoutUser(); } } //this.orgUserAddress = new Address(this.orgUser); } Object onSuccess(){ logger.info("Bin im onSuccess .... "); DataProvider dataProvider; try { dataProvider = dpw.getDataProviderByName("GETJOBS"); } catch (DataProviderNotFoundException e1) { e1.printStackTrace(); form.recordError("Error while retrieving DataProvider."); return null; } this.orgUser.setRelatedLoginUser(this.loginUser); this.orgUser.setUserRole(new OrganisationRole(orgUser)); this.orgRoleData.setIndustrySector(orgIndustrySectorItem); this.orgUser.setUserRoleData(orgRoleData); this.orgUser.setDataProvider(dataProvider); this.orgUser.setAddress1(this.orgUserAddress); if(this.countryItem!=null){ logger.error("Schreibe Country : "+this.countryItem.getShortEnglishName()); this.orgUserAddress.setCountry(lw.getCountryById(this.countryItem.getId())); } else logger.info("UUUPSSSSS"); try { uw.addUser(orgUser); } catch (ObjectNotSavedException e) { e.printStackTrace(); form.recordError("Error while saving job offer."); return null; } catch (PassedAttributeIsNullException e) { e.printStackTrace(); form.recordError("Error while saving job offer, no Argument passed."); return null; } return OverviewPage.class; } public User onPassivate(){ if(isModified!= null && isModified){ return orgUser; } else return null; } void cleanupRender() { form.clearErrors(); // Clear the flash-persisted fields to prevent anomalies in onActivate when we hit refresh on page or browser button this.orgUser = null; this.orgRoleData = null; this.orgUserAddress = null; this.orgIndustrySectorItem = null; this.territoryItem = null; this.countryItem = null; } @OnEvent(component = "territorySelect", value = "change") JSONObject territoryElementChanged(String value) { JSONObject json = new JSONObject(); if(!value.equals("")){ this.territoryItem = lw.getTerritoryById(new Long(value)); logger.error("Territory : "+this.territoryItem.getNameEnglish()+"---- value: "+value ); this.countryList = lw.getRelatedCountries(territoryItem); String queryString = new String(); Iterator<Country> it = this.countryList.iterator(); int counter = 0; while(it.hasNext()){ Country tempCountry = it.next(); if (counter == 0) { queryString = "[['"+tempCountry.getId()+"', '"+tempCountry.getShortEnglishName()+"']"; } else queryString = queryString+", ['"+tempCountry.getId()+"', '"+tempCountry.getShortEnglishName()+"']"; //logger.error("QueryString : "+ queryString); counter++; } queryString = queryString+"]"; //logger.error("QueryStringGesamt : "+ queryString); json.put("result", new JSONArray(queryString)); } else json.put("result", new JSONArray("[]")); return json; } @OnEvent(component = "countrySelect", value = "change") void countryElementChanged(String value) { if(!value.equals("")){ this.countryItem = lw.getCountryById(new Long(value)); logger.error("Country : "+this.countryItem.getShortEnglishName()+"---- value: "+value ); } } /** * @return the orgDataModel */ @SuppressWarnings("unchecked") public BeanModel getOrgDataModel() { return orgDataModel; } /** * @return the orgUserModel */ @SuppressWarnings("unchecked") public BeanModel getOrgUserModel() { return orgUserModel; } /** * @return the orgUserModel */ @SuppressWarnings("unchecked") public BeanModel getOrgUserAddressModel() { return orgUserAddressModel; } }