Author: bleny Date: 2011-01-18 15:21:27 +0000 (Tue, 18 Jan 2011) New Revision: 922 Log: add terrestrial location import ; add locations in sampleRows and contacts Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/PostgresMigrationCallback.java trunk/wao-business/src/main/java/fr/ifremer/wao/entity/ContactImpl.java trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceContactImpl.java trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceReferentialImpl.java trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceSamplingImpl.java trunk/wao-business/src/main/resources/i18n/wao-business_en_GB.properties trunk/wao-business/src/main/resources/i18n/wao-business_fr_FR.properties trunk/wao-business/src/main/xmi/wao.zargo trunk/wao-business/src/test/java/fr/ifremer/wao/entity/BoatImplTest.java trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceBoatImplTest.java trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceContactInternalTest.java trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Boats.java trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/ContactForm.java trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/SampleRowForm.java trunk/wao-ui/src/main/resources/i18n/wao-ui_en_GB.properties trunk/wao-ui/src/main/resources/i18n/wao-ui_fr_FR.properties trunk/wao-ui/src/main/webapp/ContactForm.tml trunk/wao-ui/src/main/webapp/SampleRowForm.tml Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/PostgresMigrationCallback.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/PostgresMigrationCallback.java 2011-01-17 13:13:47 UTC (rev 921) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/PostgresMigrationCallback.java 2011-01-18 15:21:27 UTC (rev 922) @@ -734,9 +734,9 @@ "coastFAOCode CHARACTER VARYING(255)," + "coastFAOName CHARACTER VARYING(255))"); - queries.add("ALTER TABLE SampleRow ADD terrestrialLocation CHARACTER VARYING(255) NOT NULL;"); + queries.add("ALTER TABLE SampleRow ADD terrestrialLocation CHARACTER VARYING(255);"); queries.add("ALTER TABLE SampleRow ADD CONSTRAINT TerrestrialLocation_fkey FOREIGN KEY (terrestrialLocation) REFERENCES TerrestrialLocation(topiaId);"); - queries.add("ALTER TABLE Contact ADD terrestrialLocation CHARACTER VARYING(255) NOT NULL;"); + queries.add("ALTER TABLE Contact ADD terrestrialLocation CHARACTER VARYING(255);"); queries.add("ALTER TABLE Contact ADD CONSTRAINT TerrestrialLocation_fkey FOREIGN KEY (terrestrialLocation) REFERENCES TerrestrialLocation(topiaId);"); } } Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/entity/ContactImpl.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/entity/ContactImpl.java 2011-01-17 13:13:47 UTC (rev 921) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/entity/ContactImpl.java 2011-01-18 15:21:27 UTC (rev 922) @@ -124,4 +124,10 @@ public void setSamplingStrategy(SamplingStrategy samplingStrategy) { setSamplingStrategyOrdinal(samplingStrategy.ordinal()); } + + @Override + public void setSampleRow(SampleRow sampleRow) { + super.setSampleRow(sampleRow); + setObsProgram(sampleRow.getObsProgram()); + } } Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceContactImpl.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceContactImpl.java 2011-01-17 13:13:47 UTC (rev 921) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceContactImpl.java 2011-01-18 15:21:27 UTC (rev 922) @@ -138,6 +138,13 @@ contact.sizeSecondaryObservers(); contact.getSampleRow().sizeSampleMonth(); contact.getBoat().getName(); + + if (contact.getObsProgram() == ObsProgram.OBSVENTE) { + // load + contact.getSampleRow().getTerrestrialLocation(); + contact.getTerrestrialLocation(); + } + return contact; } @@ -202,8 +209,10 @@ } @Override - public Contact executeGetNewContact(ObsProgram obsProgram, WaoUser user, SampleRow row, Boat boat) throws WaoBusinessException { + public Contact executeGetNewContact(WaoUser user, SampleRow row, Boat boat) throws WaoBusinessException { + ObsProgram obsProgram = row.getObsProgram(); + if (obsProgram.equals(ObsProgram.OBSMER)) { if (boat == null) { throw new NullPointerException("boat can not be null for program " + obsProgram); Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceReferentialImpl.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceReferentialImpl.java 2011-01-17 13:13:47 UTC (rev 921) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceReferentialImpl.java 2011-01-18 15:21:27 UTC (rev 922) @@ -31,6 +31,7 @@ import fr.ifremer.wao.WaoException; import fr.ifremer.wao.WaoQueryBuilder; import fr.ifremer.wao.WaoQueryHelper; +import fr.ifremer.wao.bean.ContactFilter; import fr.ifremer.wao.bean.SamplingFilter; import fr.ifremer.wao.entity.FishingGearDCF; import fr.ifremer.wao.entity.FishingGearDCFDAO; @@ -48,7 +49,6 @@ import fr.ifremer.wao.io.csv2.Import; import fr.ifremer.wao.io.csv2.ImportModel; import fr.ifremer.wao.io.csv2.TerrestrialLocationImportModel; -import org.apache.commons.io.IOUtils; import org.apache.commons.lang.StringUtils; import org.nuiton.topia.TopiaContext; import org.nuiton.topia.TopiaException; @@ -58,13 +58,13 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; -import java.util.ArrayList; import java.util.Arrays; +import java.util.HashMap; import java.util.Iterator; import java.util.List; +import java.util.Map; /** * ServiceReferentialImpl @@ -297,12 +297,14 @@ TerrestrialLocation location = dao.findByDistrictCode(districtCode); TerrestrialLocation district = new TerrestrialLocationImpl(); - Binder locationBinder = BinderFactory.newBinder(TerrestrialLocation.class); + Binder<TerrestrialLocation, TerrestrialLocation> locationBinder = + BinderFactory.newBinder(TerrestrialLocation.class); locationBinder.copyExcluding(location, district, TerrestrialLocation.PROPERTY_NAME, TerrestrialLocation.PROPERTY_CODE, TerrestrialLocation.PROPERTY_PORT_CODE, TerrestrialLocation.PROPERTY_PORT_NAME, TerrestrialLocation.PROPERTY_LOCATION_TYPE_ORDINAL, TerrestrialLocation.TOPIA_ID, TerrestrialLocation.TOPIA_CREATE_DATE, TerrestrialLocation.TOPIA_VERSION); + district.setLocationType(null); dao.create(district); } @@ -321,4 +323,30 @@ } } + + @Override + protected List<TerrestrialLocation> executeGetAllTerrestrialDistricts(TopiaContext transaction, SamplingFilter filter) throws Exception { + TerrestrialLocationDAO dao = WaoDAOHelper.getTerrestrialLocationDAO(transaction); + List<TerrestrialLocation> result = dao.findAllByLocationTypeOrdinal(null); + return result; + } + + @Override + protected List<TerrestrialLocation> executeGetAllTerrestrialLocations(TopiaContext transaction, + ContactFilter filter, String districtCode) throws Exception { + TerrestrialLocationDAO dao = WaoDAOHelper.getTerrestrialLocationDAO(transaction); + Map<String, Object> properties = new HashMap<String, Object>(); + properties.put(TerrestrialLocation.PROPERTY_DISTRICT_CODE, districtCode); + List<TerrestrialLocation> result = dao.findAllByProperties(properties); + + TerrestrialLocation removeDistrict = null; + for (TerrestrialLocation locationResult : result) { + if (locationResult.getLocationType() == null) { + removeDistrict = locationResult; + } + } + result.remove(removeDistrict); + + return result; + } } Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceSamplingImpl.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceSamplingImpl.java 2011-01-17 13:13:47 UTC (rev 921) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceSamplingImpl.java 2011-01-18 15:21:27 UTC (rev 922) @@ -552,6 +552,11 @@ result.sizeSampleMonth(); result.sizeElligibleBoat(); + if (result.getObsProgram() == ObsProgram.OBSVENTE) { + // load specific field + result.getTerrestrialLocation(); + } + return result; } Modified: trunk/wao-business/src/main/resources/i18n/wao-business_en_GB.properties =================================================================== --- trunk/wao-business/src/main/resources/i18n/wao-business_en_GB.properties 2011-01-17 13:13:47 UTC (rev 921) +++ trunk/wao-business/src/main/resources/i18n/wao-business_en_GB.properties 2011-01-18 15:21:27 UTC (rev 922) @@ -136,6 +136,8 @@ wao.error.serviceNews.getNewNews= wao.error.serviceNews.getNews= wao.error.serviceNews.saveNews= +wao.error.serviceReferential.getAllTerrestrialDistricts= +wao.error.serviceReferential.getAllTerrestrialLocations= wao.error.serviceReferential.getCodesDCF5Contains= wao.error.serviceReferential.getFacades= wao.error.serviceReferential.getFishingZones= Modified: trunk/wao-business/src/main/resources/i18n/wao-business_fr_FR.properties =================================================================== --- trunk/wao-business/src/main/resources/i18n/wao-business_fr_FR.properties 2011-01-17 13:13:47 UTC (rev 921) +++ trunk/wao-business/src/main/resources/i18n/wao-business_fr_FR.properties 2011-01-18 15:21:27 UTC (rev 922) @@ -156,6 +156,8 @@ wao.error.serviceNews.getNewNews= wao.error.serviceNews.getNews=Impossible de r\u00E9cup\u00E9rer l'ensemble des news wao.error.serviceNews.saveNews=Impossible d'enregistrer la news ayant pour titre '%1$s' +wao.error.serviceReferential.getAllTerrestrialDistricts= +wao.error.serviceReferential.getAllTerrestrialLocations= wao.error.serviceReferential.getCodesDCF5Contains= wao.error.serviceReferential.getFacades=Impossible de charger la liste des facades wao.error.serviceReferential.getFishingZones=Impossible de charger la liste des secteurs de p\u00EAche Modified: trunk/wao-business/src/main/xmi/wao.zargo =================================================================== (Binary files differ) Modified: trunk/wao-business/src/test/java/fr/ifremer/wao/entity/BoatImplTest.java =================================================================== --- trunk/wao-business/src/test/java/fr/ifremer/wao/entity/BoatImplTest.java 2011-01-17 13:13:47 UTC (rev 921) +++ trunk/wao-business/src/test/java/fr/ifremer/wao/entity/BoatImplTest.java 2011-01-18 15:21:27 UTC (rev 922) @@ -132,7 +132,7 @@ serviceSampling.createUpdateSampleRow(row, boats, new SampleRowLogImpl()); ServiceContact serviceContact = manager.getServiceContact(); - Contact contact1 = serviceContact.getNewContact(ObsProgram.OBSMER, user, row, boat); + Contact contact1 = serviceContact.getNewContact(user, row, boat); contact1.setContactState(ContactState.CONTACT_START); serviceContact.saveContact(contact1, false); @@ -232,7 +232,7 @@ ServiceContact serviceContact = manager.getServiceContact(); // First contact : OK - Contact contact1 = serviceContact.getNewContact(ObsProgram.OBSMER, user, row, boat); + Contact contact1 = serviceContact.getNewContact(user, row, boat); contact1.setContactState(ContactState.BOARDING_DONE); Date begin = DateUtil.createDate(3, 5, 2010); contact1.setObservationBeginDate(begin); @@ -245,7 +245,7 @@ int result = boat.getNbBoarding(fromDate); Assert.assertEquals(1, result); - Contact contact2 = serviceContact.getNewContact(ObsProgram.OBSMER, user, row, boat); + Contact contact2 = serviceContact.getNewContact(user, row, boat); // Second contact with ValidationProgram = FALSE contact2.setContactState(ContactState.BOARDING_DONE); begin = DateUtil.createDate(3, 8, 2010); @@ -257,7 +257,7 @@ result = boat.getNbBoarding(fromDate); Assert.assertEquals(1, result); - Contact contact3 = serviceContact.getNewContact(ObsProgram.OBSMER, user, row, boat); + Contact contact3 = serviceContact.getNewContact(user, row, boat); // Third contact with tideBeginDate < fromDate contact3.setContactState(ContactState.BOARDING_DONE); begin = DateUtil.createDate(3, 3, 2010); @@ -268,7 +268,7 @@ result = boat.getNbBoarding(fromDate); Assert.assertEquals(1, result); - Contact contact4 = serviceContact.getNewContact(ObsProgram.OBSMER, user2, row2, boat); + Contact contact4 = serviceContact.getNewContact(user2, row2, boat); // Fourth contact : OK with an other company contact4.setContactState(ContactState.BOARDING_DONE); begin = DateUtil.createDate(3, 5, 2010); Modified: trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceBoatImplTest.java =================================================================== --- trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceBoatImplTest.java 2011-01-17 13:13:47 UTC (rev 921) +++ trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceBoatImplTest.java 2011-01-18 15:21:27 UTC (rev 922) @@ -297,7 +297,7 @@ transaction.closeContext(); ServiceContact serviceContact = manager.getServiceContact(); - Contact contact1 = serviceContact.getNewContact(ObsProgram.OBSMER, user, row, boat); + Contact contact1 = serviceContact.getNewContact(user, row, boat); contact1.setContactState(ContactState.CONTACT_START); serviceContact.saveContact(contact1, false); Modified: trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceContactInternalTest.java =================================================================== --- trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceContactInternalTest.java 2011-01-17 13:13:47 UTC (rev 921) +++ trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceContactInternalTest.java 2011-01-18 15:21:27 UTC (rev 922) @@ -32,6 +32,7 @@ import fr.ifremer.wao.bean.SamplingStrategy; import fr.ifremer.wao.entity.Boat; import fr.ifremer.wao.entity.BoatDAO; +import fr.ifremer.wao.entity.BoatImpl; import fr.ifremer.wao.entity.Company; import fr.ifremer.wao.entity.CompanyDAO; import fr.ifremer.wao.entity.Contact; @@ -175,7 +176,7 @@ if (needBoat) { BoatDAO boatDAO = WaoDAOHelper.getBoatDAO(transaction); - boat = boatDAO.create(Boat.PROPERTY_IMMATRICULATION, 175846); + boat = boatDAO.create(Boat.PROPERTY_IMMATRICULATION, 175846, Boat.PROPERTY_ACTIVE, true); when(contact.getBoat()).thenReturn(boat); } @@ -675,8 +676,15 @@ /** PREPARE DATA **/ prepareData(true, true); +// TopiaContext transaction = manager.getContext().beginTransaction(); +// ContactDAO dao = WaoDAOHelper.getContactDAO(transaction); +// List<Contact> allContact = dao.findAll(); +// for (Contact contact : allContact) { +// dao.delete(contact); +// } + // Don't use a mock in this case - Contact newContact = service.getNewContact(ObsProgram.OBSVENTE, observer, sampleRow, boat); + Contact newContact = service.getNewContact(observer, sampleRow, boat); newContact.setTopiaCreateDate(DateUtil.createDate(2, 3, 2010)); /** EXEC METHOD **/ Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Boats.java =================================================================== --- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Boats.java 2011-01-17 13:13:47 UTC (rev 921) +++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Boats.java 2011-01-18 15:21:27 UTC (rev 922) @@ -851,10 +851,7 @@ // Get boat from list boat = getBoats().get(boatImmatriculation); //contacts.createNewContact(boat, sampleRow); - Contact newContact = serviceContact.getNewContact(user.getProfile().getObsProgram(), - user.getUser(), - sampleRow, - boat); + Contact newContact = serviceContact.getNewContact(user.getUser(), sampleRow, boat); contacts.setContactSelectedId(newContact.getTopiaId()); return contacts; } @@ -863,10 +860,7 @@ // Get sampleRow from elligibleBoat list ElligibleBoat elligible = getCompanyBoatInfos().getElligibleBoat(sampleRowCode); sampleRow = elligible.getSampleRow(); - Contact newContact = serviceContact.getNewContact(user.getProfile().getObsProgram(), - user.getUser(), - sampleRow, - getBoatSelected()); + Contact newContact = serviceContact.getNewContact(user.getUser(), sampleRow, getBoatSelected()); // contacts.createNewContact(getBoatSelected(), sampleRow); contacts.setContactSelectedId(newContact.getTopiaId()); return contacts; Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/ContactForm.java =================================================================== --- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/ContactForm.java 2011-01-17 13:13:47 UTC (rev 921) +++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/ContactForm.java 2011-01-18 15:21:27 UTC (rev 922) @@ -3,15 +3,19 @@ import fr.ifremer.wao.WaoBusinessException; import fr.ifremer.wao.WaoException; import fr.ifremer.wao.bean.ConnectedUser; +import fr.ifremer.wao.bean.ContactFilterImpl; import fr.ifremer.wao.bean.ContactState; import fr.ifremer.wao.bean.DataReliability; import fr.ifremer.wao.bean.ObsProgram; +import fr.ifremer.wao.bean.SamplingFilterImpl; import fr.ifremer.wao.bean.UserRole; import fr.ifremer.wao.bean.ValidationResult; import fr.ifremer.wao.entity.Contact; import fr.ifremer.wao.entity.SampleRow; +import fr.ifremer.wao.entity.TerrestrialLocation; import fr.ifremer.wao.entity.WaoUser; import fr.ifremer.wao.service.ServiceContact; +import fr.ifremer.wao.service.ServiceReferential; import fr.ifremer.wao.service.ServiceUser; import fr.ifremer.wao.ui.components.Layout; import fr.ifremer.wao.ui.data.GenericSelectModel; @@ -21,7 +25,9 @@ import org.apache.commons.lang.StringUtils; import org.apache.tapestry5.Block; import org.apache.tapestry5.EventContext; +import org.apache.tapestry5.OptionModel; import org.apache.tapestry5.RenderSupport; +import org.apache.tapestry5.SelectModel; import org.apache.tapestry5.annotations.Component; import org.apache.tapestry5.annotations.Environmental; import org.apache.tapestry5.annotations.Import; @@ -32,6 +38,8 @@ import org.apache.tapestry5.annotations.SessionState; import org.apache.tapestry5.corelib.components.Form; import org.apache.tapestry5.corelib.components.Zone; +import org.apache.tapestry5.internal.OptionModelImpl; +import org.apache.tapestry5.internal.SelectModelImpl; import org.apache.tapestry5.ioc.Messages; import org.apache.tapestry5.ioc.annotations.Inject; import org.apache.tapestry5.ioc.services.PropertyAccess; @@ -44,7 +52,9 @@ import java.util.Date; import java.util.List; +import static org.nuiton.i18n.I18n.n_; + /** * In this page, user will be able to edit a contact. Fields depends on right * level and validations. @@ -160,6 +170,9 @@ contact = serviceContact.getContact(contactId); mainObserverId = contact.getMainObserver().getTopiaId(); + if (contact.getTerrestrialLocation() != null) { + terrestrialLocationId = contact.getTerrestrialLocation().getTopiaId(); + } if (oldContact == contact) { throw new IllegalStateException("il faut deux instances différentes"); } @@ -290,7 +303,25 @@ return connectedUser.getProfile().getObsProgram() == ObsProgram.OBSVENTE; } + @Inject + private ServiceReferential serviceReferential; + private GenericSelectModel<TerrestrialLocation> terrestrialLocationSelectModel; + + @Property + private String terrestrialLocationId; + + public GenericSelectModel<TerrestrialLocation> getTerrestrialLocationSelectModel() { + if (terrestrialLocationSelectModel == null) { + List<TerrestrialLocation> locations = + serviceReferential.getAllTerrestrialLocations(new ContactFilterImpl(), + contact.getSampleRow().getTerrestrialLocation().getDistrictCode()); + terrestrialLocationSelectModel = new GenericSelectModel<TerrestrialLocation>(locations, TerrestrialLocation.class, + TerrestrialLocation.PROPERTY_NAME, TerrestrialLocation.TOPIA_ID, propertyAccess); + } + return terrestrialLocationSelectModel; + } + /************************ ADMIN FIELDS ************************************/ @@ -323,147 +354,6 @@ saveContact = true; } -// @Log -// void onValidateFormFromContactForm() { -// -// contactForm.clearErrors(); -// -// if ( ! saveContact) { -// return; -// } -// -// if (mainObserverId != null) { -// WaoUser mainObserver = getObserverSelectModel().findObject(mainObserverId); -// contact.setMainObserver(mainObserver); -// if (logger.isDebugEnabled()) { -// logger.debug("main observer is " + mainObserver); -// } -// } -// -// contact.setSecondaryObservers(getSecondaryObservers()); -// -// if (contact.getMainObserver() == null) { -// contactForm.recordError("Il faut au moins un observateur référant"); -// } -// -// if (contact.getSecondaryObservers().contains(contact.getMainObserver())) { -// contactForm.recordError("L'utilisateur référant ne doit pas se trouver aussi parmi les observateurs secondaires"); -// } -// -// // Validation for saving contact depends on contactState (only edition -// // form) -// ContactState contactState = contact.getContactState(); -// if (logger.isDebugEnabled()) { -// logger.debug("For state : " + contactState); -// } -// -// Date begin = contact.getObservationBeginDate(); -// Date end = contact.getObservationEndDate(); -// Date input = contact.getDataInputDate(); -// SampleRow row = contact.getSampleRow(); -// -// if (logger.isDebugEnabled()) { -// logger.debug(String.format("begin = %s, end = %s, input = %s", begin, end, input)); -// } -// -// if (begin != null && !row.isValid(begin)) { -// contactForm.recordError( -// "La date de début de la marée doit correspondre à un " + -// "mois valide (non vide) de la ligne " + row.getCode()); -// } -// -// if (begin != null && end != null && end.before(begin)) { -// contactForm.recordError("La date de fin de la marée" + -// " ne peut pas être antérieure à celle de début"); -// } -// -// Date current = manager.getCurrentDate(); -// -// if (end != null && end.after(current)) { -// contactForm.recordError("La date de fin de la marée" + -// " ne peut pas être postérieure à la date du jour"); -// } -// -// if (end != null && input != null && end.after(input)) { -// contactForm.recordError("La date de saisie des" + -// " données ne peut pas être antérieure à la date de" + -// " fin de la marée"); -// } -// -// if (input != null && input.after(current)) { -// contactForm.recordError("La date de saisie des" + -// " données ne peut pas être postérieure à la date" + -// " du jour"); -// } -// -// // Non abouti, Refus ou Refus Définitif -// if (contactState.isUnfinishedState()) { -// String newComment = contact.getComment(); -// -// boolean commentDefined = StringUtils.isNotEmpty(newComment); -// boolean commentChanged = commentDefined && -// !newComment.equals(oldContact.getComment()); -// -// // Ano #2540 : NPE on oldState, extract boolean for -// // previous unfinishedState case -// boolean previousUnfinishedState = commentDefined && -// oldContact.getContactState() != null && oldContact.getContactState().isUnfinishedState(); -// -// // Ano #2440 : no restriction if previous state is unfinished -// if (previousUnfinishedState || commentChanged) { -// -// // RAZ des champs -// contact.setObservationBeginDate(null); -// contact.setObservationEndDate(null); -// contact.setNbObservants(0); -// contact.setMammalsCapture(false); -// contact.setMammalsObservation(false); -// contact.setDataInputDate(null); -// -// } else { -// contactForm.recordError("Vous devez ajouter" + -// " un commentaire pour l'état" + -// " '" + contactState.libelle() + "'"); -// } -// // Embarquement Réalisé -// } else if (contactState.equals(ContactState.BOARDING_DONE)) { -// -// if (begin == null) { -// contactForm.recordError("La date de début de" + -// " marée est obligatoire pour l'état" + -// " '" + contactState.libelle() + "'"); -// } -// if (end == null) { -// contactForm.recordError("La date de fin de" + -// " marée est obligatoire pour l'état" + -// " '" + contactState.libelle() + "'"); -// } -// if (contact.getNbObservants() == 0) { -// contactForm.recordError("Il ne peut y" + -// " avoir aucun observateur pour l'état" + -// " '" + contactState.libelle() + "'"); -// } -// -// if (logger.isDebugEnabled()) { -// logger.debug("ValidationProgram = " + contact.isValidationProgram()); -// } -// -// if (BooleanUtils.isTrue(contact.isValidationProgram())) { -// -// // it's an admin validation, data-reliability field must be filled -// if (logger.isDebugEnabled()) { -// logger.debug("field data reliability is " + -// contact.getDataReliability()); -// } -// -// if (contact.getDataReliability() == null || -// contact.getDataReliability() == DataReliability.UNKNOWN) { -// contactForm.recordError("Il faut préciser la qualité des données avant de valider"); -// } -// } -// } -// } - @Log void onValidateFormFromContactForm() { contactForm.clearErrors(); @@ -473,12 +363,17 @@ contact.setMainObserver(mainObserver); } contact.setSecondaryObservers(getSecondaryObservers()); + if (terrestrialLocationId != null) { + TerrestrialLocation terrestrialLocation = getTerrestrialLocationSelectModel().findObject(terrestrialLocationId); + contact.setTerrestrialLocation(terrestrialLocation); + } ValidationResult validationResult = serviceContact.validateContact(contact); if ( ! validationResult.isSuccess()) { contactForm.recordError(validationResult.getMessage()); } } + @Log Object onFailureFromContactForm() { // refresh zone to show errors Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/SampleRowForm.java =================================================================== --- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/SampleRowForm.java 2011-01-17 13:13:47 UTC (rev 921) +++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/SampleRowForm.java 2011-01-18 15:21:27 UTC (rev 922) @@ -43,6 +43,7 @@ import fr.ifremer.wao.entity.SampleRow; import fr.ifremer.wao.entity.SampleRowLog; import fr.ifremer.wao.entity.TargetSpeciesDCF; +import fr.ifremer.wao.entity.TerrestrialLocation; import fr.ifremer.wao.service.ServiceBoat; import fr.ifremer.wao.service.ServiceReferential; import fr.ifremer.wao.service.ServiceSampling; @@ -66,11 +67,14 @@ import org.apache.tapestry5.annotations.SessionState; import org.apache.tapestry5.beaneditor.BeanModel; import org.apache.tapestry5.corelib.components.Form; +import org.apache.tapestry5.internal.OptionGroupModelImpl; import org.apache.tapestry5.internal.OptionModelImpl; import org.apache.tapestry5.internal.SelectModelImpl; +import org.apache.tapestry5.ioc.Messages; import org.apache.tapestry5.ioc.annotations.Inject; import org.apache.tapestry5.ioc.services.PropertyAccess; import org.apache.tapestry5.services.BeanModelSource; +import org.chenillekit.tapestry.core.internal.GenericSelectionModel; import org.nuiton.topia.persistence.TopiaEntity; import org.nuiton.util.PeriodDates; import org.nuiton.util.StringUtil; @@ -84,6 +88,8 @@ import java.util.LinkedList; import java.util.List; +import static org.nuiton.i18n.I18n.n_; + /** * SampleRowForm * @@ -110,6 +116,9 @@ @Inject private ServiceBoat serviceBoat; + @Inject + private Messages messages; + @SessionState @Property private ConnectedUser user; @@ -164,8 +173,16 @@ } immatriculations = getSampleRow().getMainElligibleBoatsAsString(); + + if (getSampleRow().getTerrestrialLocation() != null) { + terrestrialLocationId = getSampleRow().getTerrestrialLocation().getTopiaId(); + } } + public boolean showObsVente() { + return user.getProfile().getObsProgram() == ObsProgram.OBSVENTE; + } + /*************************** PROFESSION ***********************************/ /** Select model which contains all professions **/ @@ -328,6 +345,22 @@ edited = true; } + /*************************** TERRESTRIAL LOCATION *************************/ + + private GenericSelectModel<TerrestrialLocation> terrestrialLocationSelectModel; + + @Property + private String terrestrialLocationId; + + public GenericSelectModel<TerrestrialLocation> getTerrestrialLocationSelectModel() { + if (terrestrialLocationSelectModel == null) { + List<TerrestrialLocation> locations = serviceReferential.getAllTerrestrialDistricts(new SamplingFilterImpl()); + terrestrialLocationSelectModel = new GenericSelectModel<TerrestrialLocation>(locations, TerrestrialLocation.class, + TerrestrialLocation.PROPERTY_DISTRICT_NAME, TerrestrialLocation.TOPIA_ID, propertyAccess); + } + return terrestrialLocationSelectModel; + } + /*************************** PROGRAM & MONTHS *****************************/ @Inject @@ -596,6 +629,12 @@ @Log void onValidateFormFromSampleRowForm() throws WaoException { sampleRowForm.clearErrors(); + + if (StringUtils.isNotEmpty(terrestrialLocationId)) { + getSampleRow().setTerrestrialLocation( + getTerrestrialLocationSelectModel().findObject(terrestrialLocationId)); + } + try { // Only for save or periodChanged (refreshMonth) if (!cancel && !edited) { Modified: trunk/wao-ui/src/main/resources/i18n/wao-ui_en_GB.properties =================================================================== --- trunk/wao-ui/src/main/resources/i18n/wao-ui_en_GB.properties 2011-01-17 13:13:47 UTC (rev 921) +++ trunk/wao-ui/src/main/resources/i18n/wao-ui_en_GB.properties 2011-01-18 15:21:27 UTC (rev 922) @@ -78,9 +78,10 @@ wao.ui.field.Contact.mainObserver=Main observer wao.ui.field.Contact.mammalsCapture=Accidental capture wao.ui.field.Contact.mammalsObservation=Exceptional observation -wao.ui.field.Contact.nbObservants=Observants number +wao.ui.field.Contact.nbObservants=Observers number wao.ui.field.Contact.samplingStrategy=Sampling strategy followed wao.ui.field.Contact.secondaryObservers=Observers +wao.ui.field.Contact.terrestrialLocation=Place wao.ui.field.Contact.validationCompany=Company validation wao.ui.field.Contact.validationProgram=Program validation wao.ui.field.FishingZone.facadeName=Facade @@ -92,6 +93,7 @@ wao.ui.field.SampleRow.professionCode=Profession code wao.ui.field.SampleRow.programName=Program wao.ui.field.SampleRow.samplingStrategy=Sampling strategy +wao.ui.field.SampleRow.terrestrialLocation=Maritime district wao.ui.field.User.firstName=Fisrt name wao.ui.field.User.lastName=Last name wao.ui.field.User.login=Login @@ -175,6 +177,8 @@ wao.ui.misc.observer=Observer wao.ui.misc.observers=Observers wao.ui.misc.onDate=on +wao.ui.misc.or=or +wao.ui.misc.other=Other wao.ui.misc.refused=Refused wao.ui.misc.since=since wao.ui.misc.total=Total Modified: trunk/wao-ui/src/main/resources/i18n/wao-ui_fr_FR.properties =================================================================== --- trunk/wao-ui/src/main/resources/i18n/wao-ui_fr_FR.properties 2011-01-17 13:13:47 UTC (rev 921) +++ trunk/wao-ui/src/main/resources/i18n/wao-ui_fr_FR.properties 2011-01-18 15:21:27 UTC (rev 922) @@ -81,6 +81,7 @@ wao.ui.field.Contact.nbObservants=Nombre d'observateurs wao.ui.field.Contact.samplingStrategy=Strat\u00E9gie d'\u00E9chantillonnage suivie wao.ui.field.Contact.secondaryObservers=Observateurs +wao.ui.field.Contact.terrestrialLocation=Lieu wao.ui.field.Contact.validationCompany=Validation soci\u00E9t\u00E9 wao.ui.field.Contact.validationProgram=Validation programme wao.ui.field.FishingZone.facadeName=Fa\u00E7ade @@ -92,6 +93,7 @@ wao.ui.field.SampleRow.professionCode=Code m\u00E9tier wao.ui.field.SampleRow.programName=Programme wao.ui.field.SampleRow.samplingStrategy=Strat\u00E9gie d'\u00E9chantillonnage +wao.ui.field.SampleRow.terrestrialLocation=Quartier maritime wao.ui.field.User.firstName=Pr\u00E9nom wao.ui.field.User.lastName=Nom wao.ui.field.User.login=Identifiant @@ -175,6 +177,8 @@ wao.ui.misc.observer=Observateur wao.ui.misc.observers=Observateurs wao.ui.misc.onDate=le +wao.ui.misc.or=ou +wao.ui.misc.other=Autre wao.ui.misc.refused=R\u00E9fus\u00E9 wao.ui.misc.since=depuis le wao.ui.misc.total=Total Modified: trunk/wao-ui/src/main/webapp/ContactForm.tml =================================================================== --- trunk/wao-ui/src/main/webapp/ContactForm.tml 2011-01-17 13:13:47 UTC (rev 921) +++ trunk/wao-ui/src/main/webapp/ContactForm.tml 2011-01-18 15:21:27 UTC (rev 922) @@ -140,6 +140,10 @@ </div> <t:if test="showObsVente()"> <div> + <label for="terrestrialLocation">${message:wao.ui.field.SampleRow.terrestrialLocation}</label> + ${contact.terrestrialLocation.name} (${getLabelForEnum(contact.terrestrialLocation.locationType)}) + </div> + <div> <label>${message:wao.ui.field.Contact.samplingStrategy}</label> ${contact.samplingStrategy} </div> @@ -211,6 +215,16 @@ </div> <t:if test="showObsVente()"> <div> + <label for="terrestrialLocation"> + ${message:wao.ui.field.Contact.terrestrialLocation} + </label> + <input t:id="terrestrialLocation" + t:type="select" + t:model="terrestrialLocationSelectModel" + t:value="terrestrialLocationId" + t:validate="required" /> + </div> + <div> <label for="actualSamplingStrategy">${message:wao.ui.field.Contact.samplingStrategy}</label> <input t:type="select" t:id="actualSamplingStrategy" t:value="contact.samplingStrategy" t:validate="required" /> </div> Modified: trunk/wao-ui/src/main/webapp/SampleRowForm.tml =================================================================== --- trunk/wao-ui/src/main/webapp/SampleRowForm.tml 2011-01-17 13:13:47 UTC (rev 921) +++ trunk/wao-ui/src/main/webapp/SampleRowForm.tml 2011-01-18 15:21:27 UTC (rev 922) @@ -78,6 +78,10 @@ ${fishingZone.code} </li> </ul> + <p> + <label for="terrestrialLocation">${message:wao.ui.field.SampleRow.terrestrialLocation}</label> + ${sampleRow.terrestrialLocation} + </p> <p:else> <!-- EDITION --> <div class="select"> @@ -96,6 +100,18 @@ ${fishingZone.code} </div> </div> + <t:if t:test="showObsVente()"> + <div class="select"> + <label for="terrestrialLocation"> + ${message:wao.ui.field.SampleRow.terrestrialLocation} : + </label> + <input t:id="terrestrialLocation" + t:type="select" + t:model="terrestrialLocationSelectModel" + t:value="terrestrialLocationId" + t:validate="required" /> + </div> + </t:if> </p:else> </t:if> <div class="t-beaneditor-row"> @@ -116,11 +132,11 @@ <p:else> <!-- EDITION PROGRAM --> <div class="select"> - <t:label t:for="program"/>* : + <t:label t:for="program" />* : <input t:type="select" t:id="program" t:model="programSelectModel" value="programId" /> <!--<input t:type="submit" class="ico search" t:id="searchProgram" value="Search" title="Afficher les détails du programme"/>--> - ou <input t:type="textfield" t:id="programName" value="programName" /> + ${message:wao.ui.misc.or} <input t:type="textfield" t:id="programName" value="programName" /> </div> </p:else> </t:if>