Author: fdesbois Date: 2010-01-06 08:58:16 +0000 (Wed, 06 Jan 2010) New Revision: 165 Added: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/ContactFilterImpl.java trunk/suiviobsmer-business/src/test/resources/import/contacts.csv Modified: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/entity/ContactDAOImpl.java trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/ActivityCalendarImport.java trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/ServiceBoatImpl.java trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/ServiceContactImpl.java trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/ServiceReferentialImpl.java trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/ServiceSamplingImpl.java trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/mock/ServiceContactMock.java trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/mock/ServiceReferentialMock.java trunk/suiviobsmer-business/src/main/xmi/suiviobsmer.zargo trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/impl/ServiceReferentialImplTest.java trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/Contacts.java trunk/suiviobsmer-ui/src/main/webapp/Contacts.tml Log: - Add Contacts filters - Add methods to get facades and sectors Added: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/ContactFilterImpl.java =================================================================== --- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/ContactFilterImpl.java (rev 0) +++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/ContactFilterImpl.java 2010-01-06 08:58:16 UTC (rev 165) @@ -0,0 +1,17 @@ + +package fr.ifremer.suiviobsmer.bean; + +/** + * ContactFilterImpl + * + * Created: 5 janv. 2010 + * + * @author fdesbois + * @version $Revision$ + * + * Mise a jour: $Date$ + * par : $Author$ + */ +public class ContactFilterImpl extends ContactFilter { + +} Property changes on: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/ContactFilterImpl.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL" Modified: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/entity/ContactDAOImpl.java =================================================================== --- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/entity/ContactDAOImpl.java 2010-01-05 16:39:31 UTC (rev 164) +++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/entity/ContactDAOImpl.java 2010-01-06 08:58:16 UTC (rev 165) @@ -35,7 +35,7 @@ addParam("company", company); TopiaQuery<E> subquery = createQuery("C2"). - addSelect("MAX(C2.topiaCreateDate)"). + setSelect("MAX(C2.topiaCreateDate)"). add("C2.boat = C1.boat"). add("C2.user.company = :company"); Modified: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/ActivityCalendarImport.java =================================================================== --- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/ActivityCalendarImport.java 2010-01-05 16:39:31 UTC (rev 164) +++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/ActivityCalendarImport.java 2010-01-06 08:58:16 UTC (rev 165) @@ -363,16 +363,17 @@ if (log.isDebugEnabled()) { log.debug("commit : " + (tic2 - tic1)); } - if (log.isInfoEnabled()) { - log.info("RUNNING... Import calendrier d'activité ligne " + currRow); - Runtime runtime = Runtime.getRuntime(); - long mem = runtime.totalMemory() - runtime.freeMemory(); - long memMega = mem / 1024 / 1024; - log.info("Memory : " + memMega + " Mo"); - long tic = System.currentTimeMillis(); - log.info("Time : " + DurationFormatUtils.formatDurationHMS(tic - firstTic)); - firstTic = System.currentTimeMillis(); - } + firstTic = ImportHelper.logTimeAndMemory(log, firstTic, "calendrier d'activité ligne " + currRow); +// if (log.isInfoEnabled()) { +// log.info("RUNNING... Import calendrier d'activité ligne " + currRow); +// Runtime runtime = Runtime.getRuntime(); +// long mem = runtime.totalMemory() - runtime.freeMemory(); +// long memMega = mem / 1024 / 1024; +// log.info("Memory : " + memMega + " Mo"); +// long tic = System.currentTimeMillis(); +// log.info("Time : " + DurationFormatUtils.formatDurationHMS(tic - firstTic)); +// firstTic = System.currentTimeMillis(); +// } } } @@ -381,6 +382,16 @@ long stopTime = System.currentTimeMillis(); + Runtime runtime = Runtime.getRuntime(); + + long mem = (runtime.totalMemory() - runtime.freeMemory()) / 1048576; + log.info("Memory before gc : " + mem + " Mo"); + + System.gc(); + + mem = (runtime.totalMemory() - runtime.freeMemory()) / 1048576; + log.info("Memory after gc : " + mem + " Mo"); + String execTime = DurationFormatUtils.formatDurationHMS(stopTime - startTime); info("Nombre de ligne ajouté : " + result, -1); Modified: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/ServiceBoatImpl.java =================================================================== --- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/ServiceBoatImpl.java 2010-01-05 16:39:31 UTC (rev 164) +++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/ServiceBoatImpl.java 2010-01-06 08:58:16 UTC (rev 165) @@ -109,7 +109,7 @@ // Add join for ElligibleBoat if (sampleRowFiltered) { String elligibleBoatClassName = ElligibleBoat.class.getName(); - query.addSelect("B").addFrom(elligibleBoatClassName + " E").add("E.boat = B"); + query.setSelect("B").addFrom(elligibleBoatClassName + " E").add("E.boat = B"); } // SampleRowCode if (sampleRowCodeFiltered) { @@ -498,7 +498,7 @@ add("A.boat", boat); TopiaQuery<ActivityCalendar> subquery = dao.createQuery("B"). - addSelect("MAX(B.year)"). + setSelect("MAX(B.year)"). add("B.boat = A.boat"). addGroup("B.boat"); Modified: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/ServiceContactImpl.java =================================================================== --- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/ServiceContactImpl.java 2010-01-05 16:39:31 UTC (rev 164) +++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/ServiceContactImpl.java 2010-01-06 08:58:16 UTC (rev 165) @@ -32,8 +32,10 @@ import fr.ifremer.suiviobsmer.SuiviObsmerContext; import fr.ifremer.suiviobsmer.bean.ContactState; import java.io.InputStream; +import org.nuiton.topia.TopiaException; import org.nuiton.topia.framework.TopiaQuery; import fr.ifremer.suiviobsmer.bean.states.ContactStateEnum; +import fr.ifremer.suiviobsmer.bean.ContactFilter; import fr.ifremer.suiviobsmer.entity.Boat; import fr.ifremer.suiviobsmer.entity.BoatDAO; import fr.ifremer.suiviobsmer.entity.Company; @@ -43,6 +45,7 @@ import fr.ifremer.suiviobsmer.entity.ContactImpl; import fr.ifremer.suiviobsmer.entity.ElligibleBoat; import fr.ifremer.suiviobsmer.entity.FishingZone; +import fr.ifremer.suiviobsmer.entity.FishingZoneDAO; import fr.ifremer.suiviobsmer.entity.Profession; import fr.ifremer.suiviobsmer.entity.Program; import fr.ifremer.suiviobsmer.entity.SampleRow; @@ -55,6 +58,7 @@ import java.nio.charset.Charset; import java.text.DateFormat; import java.text.ParseException; +import java.util.ArrayList; import java.util.Collection; import java.util.Date; import java.util.HashMap; @@ -88,19 +92,66 @@ } @Override - public Map<String, Contact> getContactsByFilter(Company company) throws SuiviObsmerException { + public Map<String, Contact> getContactsByFilter(ContactFilter filter) throws SuiviObsmerException { Map<String, Contact> results = new HashMap<String, Contact>(); TopiaContext transaction = null; try { transaction = rootContext.beginTransaction(); ContactDAO dao = SuiviObsmerModelDAOHelper.getContactDAO(transaction); - TopiaQuery<Contact> query = dao.createQuery().addOrderDesc(TopiaEntity.TOPIA_CREATE_DATE); - if (company != null) { - query.add("user.company", company); + TopiaQuery<Contact> query = dao.createQuery("C").addOrderDesc("C." + TopiaEntity.TOPIA_CREATE_DATE); + + if (filter.getSampleRow() != null) { + query.add("C." + Contact.SAMPLE_ROW, filter.getSampleRow()); + } else if (!StringUtils.isEmpty(filter.getSectorName())) { + query.addFrom(FishingZone.class.getName() + " F"); + query.add("F.sectorName", filter.getSectorName()).add("C.sampleRow IN elements(F.sampleRow)"); + } else if (!StringUtils.isEmpty(filter.getFacadeName())) { + query.addFrom(FishingZone.class.getName() + " F"); + query.add("F.facadeName", filter.getFacadeName()).add("C.sampleRow IN elements(F.sampleRow)"); } + if (!StringUtils.isEmpty(filter.getBoatDistrictCode())) { + query.add("C.boat.districtCode", filter.getBoatDistrictCode()); + } + + if (filter.getBoatImmatriculation() != null) { + query.add("C.boat.immatriculation", filter.getBoatImmatriculation()); + } + + if (filter.getObserver() != null) { + query.add(Contact.USER, filter.getObserver()); + } else if (filter.getCompany() != null) { + query.add("C.user.company", filter.getCompany()); + } + + if (filter.getMammalsObservation() && filter.getMammalsCapture()) { + query.add("C.mammalsObservation = :mammals OR C.mammalsCapture = :mammals").addParam("mammals", Boolean.TRUE); + } else if (filter.getMammalsObservation()) { + query.add("C." + Contact.MAMMALS_OBSERVATION, Boolean.TRUE); + } else if (filter.getMammalsCapture()) { + query.add("C." + Contact.MAMMALS_CAPTURE, Boolean.TRUE); + } + + List<Object> programValidValues = new ArrayList<Object>(); + if (filter.getProgramAccepted()) { + programValidValues.add(Boolean.TRUE); + } + if (filter.getProgramRefused()) { + programValidValues.add(Boolean.FALSE); + } + query.add("C." + Contact.VALIDATION_PROGRAM, programValidValues, filter.getProgramUndefined()); + + List<Object> companyValidValues = new ArrayList<Object>(); + if (filter.getCompanyAccepted()) { + companyValidValues.add(Boolean.TRUE); + } + if (filter.getCompanyRefused()) { + companyValidValues.add(Boolean.FALSE); + } + query.add("C." + Contact.VALIDATION_COMPANY, companyValidValues, filter.getCompanyUndefined()); + query.addLoad("user.company", "sampleRow.program", "sampleRow.profession", "sampleRow.company"); if (log.isInfoEnabled()) { @@ -348,7 +399,7 @@ int boatImmatriculation = Integer.parseInt(reader.get(BOAT.NAVS_COD.name())); // The boat must be elligible for the row - TopiaQuery<Boat> boatQuery = boatDAO.createQuery("B").addSelect("B"). + TopiaQuery<Boat> boatQuery = boatDAO.createQuery("B").setSelect("B"). addFrom(ElligibleBoat.class.getName() + " E"). add("E.sampleRow", row).add("E.boat = B"). add(Boat.IMMATRICULATION, boatImmatriculation); Modified: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/ServiceReferentialImpl.java =================================================================== --- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/ServiceReferentialImpl.java 2010-01-05 16:39:31 UTC (rev 164) +++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/ServiceReferentialImpl.java 2010-01-06 08:58:16 UTC (rev 165) @@ -26,7 +26,6 @@ import fr.ifremer.suiviobsmer.SuiviObsmerException; import fr.ifremer.suiviobsmer.SuiviObsmerModelDAOHelper; import fr.ifremer.suiviobsmer.SuiviObsmerContext; -import fr.ifremer.suiviobsmer.dto.Facade; import fr.ifremer.suiviobsmer.entity.FishingZone; import fr.ifremer.suiviobsmer.entity.FishingZoneDAO; import fr.ifremer.suiviobsmer.entity.Profession; @@ -39,7 +38,9 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import org.apache.commons.lang.StringUtils; import org.nuiton.topia.TopiaContext; +import org.nuiton.topia.framework.TopiaQuery; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -65,11 +66,46 @@ } @Override - public List<Facade> getFacades() throws SuiviObsmerException { - throw new UnsupportedOperationException("Not supported yet."); + public List<String> getFacades() throws SuiviObsmerException { + TopiaContext transaction = null; + List<String> results = new ArrayList<String>(); + try { + transaction = rootContext.beginTransaction(); + + FishingZoneDAO dao = SuiviObsmerModelDAOHelper.getFishingZoneDAO(transaction); + results = (List<String>)dao.createQuery().setSelect("DISTINCT " + FishingZone.FACADE_NAME).execute(); + + transaction.closeContext(); + } catch (Exception eee) { + SuiviObsmerContext.serviceException(transaction, "Impossible de charger la liste des facades", eee); + } + return results; } @Override + public List<String> getSectors(String facadeName) throws SuiviObsmerException { + TopiaContext transaction = null; + List<String> results = new ArrayList<String>(); + try { + transaction = rootContext.beginTransaction(); + + FishingZoneDAO dao = SuiviObsmerModelDAOHelper.getFishingZoneDAO(transaction); + TopiaQuery<FishingZone> query = dao.createQuery(); + + if (!StringUtils.isEmpty(facadeName)) { + query.add(FishingZone.FACADE_NAME, facadeName); + } + + results = (List<String>)query.setSelect("DISTINCT " + FishingZone.SECTOR_NAME).execute(); + + transaction.closeContext(); + } catch (Exception eee) { + SuiviObsmerContext.serviceException(transaction, "Impossible de charger la liste des secteurs de pêche", eee); + } + return results; + } + + @Override public List<Profession> getProfessions() throws SuiviObsmerException { TopiaContext transaction = null; List<Profession> results = new ArrayList<Profession>(); Modified: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/ServiceSamplingImpl.java =================================================================== --- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/ServiceSamplingImpl.java 2010-01-05 16:39:31 UTC (rev 164) +++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/ServiceSamplingImpl.java 2010-01-06 08:58:16 UTC (rev 165) @@ -52,6 +52,7 @@ import org.nuiton.topia.framework.TopiaQuery.Op; import org.nuiton.topia.persistence.TopiaEntity; import org.nuiton.topia.persistence.util.EntityLoador; +import org.nuiton.util.DateUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -179,28 +180,29 @@ transaction = rootContext.beginTransaction(); FishingZoneDAO zoneDAO = SuiviObsmerModelDAOHelper.getFishingZoneDAO(transaction); - List<FishingZone> list = zoneDAO.findAllWithOrder( FishingZone.FACADE_NAME, FishingZone.SECTOR_NAME, FishingZone.DISTRICT_CODE); - -// TopiaQuery query = new TopiaQuery(SampleRow.class.getName() + " S").addSelect("S"); -// query.addFrom(SampleRowZone.class.getName() + " Z").add("Z.sampleRow = S"); -// query.addFrom(FishingZone.class.getName() + " F").add("Z.fishingZone = F"); +// SampleRowDAO dao = SuiviObsmerModelDAOHelper.getSampleRowDAO(transaction); // +// TopiaQuery<SampleRow> query = dao.createQuery("S").addDistinct(). +// addFrom(FishingZone.class.getName() + " F").add("S IN elements(F.sampleRow)"); +// // if (company != null) { -// query.add("S.company = :company").addParam("company", company); +// query.add("S.company", company); // } // // // Prepare period dates // periodBegin = DateUtils.setFirstDayOfMonth(periodBegin); // periodEnd = DateUtils.setLastDayOfMonth(periodEnd); -// query.add("S.program.periodBegin < :end AND S.program.periodEnd > :begin"). -// addParam("begin", periodBegin).addParam("end", periodEnd); +// query.add("S.program.periodBegin", Op.LT, periodEnd).add("S.program.periodEnd", Op.GT, periodBegin); // -// query.addOrder("facadeName, sectorName, districtCode"); +// query.addOrder("F.facadeName, F.sectorName, F.districtCode"); +// +// query.addLoad(SampleRow.PROFESSION, SampleRow.PROGRAM, SampleRow.COMPANY); +// results = query.executeToEntityList(); for (FishingZone zone : list) { @@ -248,7 +250,7 @@ query.add(SampleRow.COMPANY, user.getCompany()); } - results = query.addLoad("program", "profession").executeToEntityList(); + results = query.addLoad(SampleRow.PROFESSION, SampleRow.PROGRAM).executeToEntityList(); // SampleRowDAO dao = SuiviObsmerModelDAOHelper.getSampleRowDAO(transaction); // @@ -298,7 +300,7 @@ SampleRowDAO dao = SuiviObsmerModelDAOHelper.getSampleRowDAO(transaction); result = dao.createQuery().add(TopiaEntity.TOPIA_ID, sampleRowId). - addLoad("company", "program", "profession"). + addLoad(SampleRow.PROFESSION, SampleRow.PROGRAM, SampleRow.COMPANY). executeToEntity(); // result = dao.findByTopiaId(sampleRowId); Modified: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/mock/ServiceContactMock.java =================================================================== --- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/mock/ServiceContactMock.java 2010-01-05 16:39:31 UTC (rev 164) +++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/mock/ServiceContactMock.java 2010-01-06 08:58:16 UTC (rev 165) @@ -22,8 +22,8 @@ package fr.ifremer.suiviobsmer.mock; import fr.ifremer.suiviobsmer.SuiviObsmerException; +import fr.ifremer.suiviobsmer.bean.ContactFilter; import fr.ifremer.suiviobsmer.entity.Boat; -import fr.ifremer.suiviobsmer.entity.Company; import fr.ifremer.suiviobsmer.entity.Contact; import fr.ifremer.suiviobsmer.entity.ContactImpl; import fr.ifremer.suiviobsmer.entity.SampleRow; @@ -56,7 +56,7 @@ } @Override - public Map<String, Contact> getContactsByFilter(Company company) throws SuiviObsmerException { + public Map<String, Contact> getContactsByFilter(ContactFilter filter) throws SuiviObsmerException { Map<String, Contact> results = new HashMap<String, Contact>(); for (Contact contact : contacts) { results.put(contact.getTopiaId(), contact); Modified: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/mock/ServiceReferentialMock.java =================================================================== --- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/mock/ServiceReferentialMock.java 2010-01-05 16:39:31 UTC (rev 164) +++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/mock/ServiceReferentialMock.java 2010-01-06 08:58:16 UTC (rev 165) @@ -77,41 +77,42 @@ } @Override - public List<Facade> getFacades() throws SuiviObsmerException { + public List<String> getFacades() throws SuiviObsmerException { List<Facade> facades = new ArrayList<Facade>(); - Facade nord = new Facade(); - nord.setName("Manche - mer du nord"); - facades.add(nord); - - Facade atlantique = new Facade(); - atlantique.setName("Atlantique"); - facades.add(atlantique); - - List<Sector> nordSectors = new ArrayList<Sector>(); - nord.setSector(nordSectors); - Sector sector1 = new Sector(); - sector1.setNum(1); - sector1.setName("Secteur du Havre à Dunkerque centré sur Boulogne"); - //sector1.setCompanyName("Océanic Développement"); - nordSectors.add(sector1); - - Sector sector2 = new Sector(); - sector2.setNum(2); - sector2.setName("Secteur Cherbourg Honfleur centré sur Port-en-Bessin"); - //sector2.setCompanyName("COFREPECHE"); - nordSectors.add(sector2); - - List<Sector> atlantiqueSectors = new ArrayList<Sector>(); - atlantique.setSector(atlantiqueSectors); - - Sector sector3 = new Sector(); - sector3.setNum(3); - sector3.setName("Secteur Mer Celtique et Ouest Irlande centré Pays bigouden"); - //sector3.setCompanyName("COFREPECHE"); - atlantiqueSectors.add(sector3); - - return facades; +// Facade nord = new Facade(); +// nord.setName("Manche - mer du nord"); +// facades.add(nord); +// +// Facade atlantique = new Facade(); +// atlantique.setName("Atlantique"); +// facades.add(atlantique); +// +// List<Sector> nordSectors = new ArrayList<Sector>(); +// nord.setSector(nordSectors); +// Sector sector1 = new Sector(); +// sector1.setNum(1); +// sector1.setName("Secteur du Havre à Dunkerque centré sur Boulogne"); +// //sector1.setCompanyName("Océanic Développement"); +// nordSectors.add(sector1); +// +// Sector sector2 = new Sector(); +// sector2.setNum(2); +// sector2.setName("Secteur Cherbourg Honfleur centré sur Port-en-Bessin"); +// //sector2.setCompanyName("COFREPECHE"); +// nordSectors.add(sector2); +// +// List<Sector> atlantiqueSectors = new ArrayList<Sector>(); +// atlantique.setSector(atlantiqueSectors); +// +// Sector sector3 = new Sector(); +// sector3.setNum(3); +// sector3.setName("Secteur Mer Celtique et Ouest Irlande centré Pays bigouden"); +// //sector3.setCompanyName("COFREPECHE"); +// atlantiqueSectors.add(sector3); +// +// return facades; + return new ArrayList<String>(); } @Override @@ -161,4 +162,9 @@ throw new UnsupportedOperationException("Not supported yet."); } + @Override + public List<String> getSectors(String facadeName) throws SuiviObsmerException { + throw new UnsupportedOperationException("Not supported yet."); + } + } Modified: trunk/suiviobsmer-business/src/main/xmi/suiviobsmer.zargo =================================================================== (Binary files differ) Modified: trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/impl/ServiceReferentialImplTest.java =================================================================== --- trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/impl/ServiceReferentialImplTest.java 2010-01-05 16:39:31 UTC (rev 164) +++ trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/impl/ServiceReferentialImplTest.java 2010-01-06 08:58:16 UTC (rev 165) @@ -74,11 +74,41 @@ /** * Test of getFacades method, of class ServiceReferentialImpl. */ - //@Test + @Test public void testGetFacades() throws Exception { log.info("getFacades"); + + InputStream input = getClass().getResourceAsStream("/import/zonesPeche.csv"); + service.importFishingZoneCsv(input); + + List<String> facades = service.getFacades(); + assertEquals(3, facades.size()); + assertTrue(facades.contains("Atlantique")); + assertTrue(facades.contains("Mer du Nord")); + assertTrue(facades.contains("Méditerranée")); } + @Test + public void testGetSectors() throws Exception { + log.info("getSectors"); + + InputStream input = getClass().getResourceAsStream("/import/zonesPeche.csv"); + service.importFishingZoneCsv(input); + + List<String> sectors = service.getSectors(null); + assertEquals(5, sectors.size()); + assertTrue(sectors.contains("Manche")); + assertTrue(sectors.contains("Mer du Nord")); + assertTrue(sectors.contains("Manche Ouest")); + assertTrue(sectors.contains("Golfe de Gascogne")); + assertTrue(sectors.contains("Méditerranée")); + + sectors = service.getSectors("Atlantique"); + assertEquals(2, sectors.size()); + assertTrue(sectors.contains("Manche Ouest")); + assertTrue(sectors.contains("Golfe de Gascogne")); + } + /** * Test of getProfessions method, of class ServiceReferentialImpl. */ Modified: trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/Contacts.java =================================================================== --- trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/Contacts.java 2010-01-05 16:39:31 UTC (rev 164) +++ trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/Contacts.java 2010-01-06 08:58:16 UTC (rev 165) @@ -24,15 +24,17 @@ import fr.ifremer.suiviobsmer.SuiviObsmerBusinessException; import fr.ifremer.suiviobsmer.SuiviObsmerContext; import fr.ifremer.suiviobsmer.SuiviObsmerException; +import fr.ifremer.suiviobsmer.bean.ContactFilter; +import fr.ifremer.suiviobsmer.bean.ContactFilterImpl; import fr.ifremer.suiviobsmer.bean.ContactState; import fr.ifremer.suiviobsmer.entity.Boat; -import fr.ifremer.suiviobsmer.entity.Company; import fr.ifremer.suiviobsmer.entity.Contact; import fr.ifremer.suiviobsmer.entity.Program; import fr.ifremer.suiviobsmer.entity.SampleRow; import fr.ifremer.suiviobsmer.entity.User; import fr.ifremer.suiviobsmer.services.ServiceBoat; import fr.ifremer.suiviobsmer.services.ServiceContact; +import fr.ifremer.suiviobsmer.services.ServiceReferential; import fr.ifremer.suiviobsmer.services.ServiceSampling; import fr.ifremer.suiviobsmer.ui.base.BusinessUtils; import fr.ifremer.suiviobsmer.ui.base.GenericSelectModel; @@ -43,6 +45,7 @@ import java.io.InputStream; import java.text.DateFormat; import java.text.SimpleDateFormat; +import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; @@ -50,6 +53,8 @@ import org.apache.commons.lang.StringUtils; import org.apache.tapestry5.ComponentResources; import org.apache.tapestry5.Field; +import org.apache.tapestry5.OptionModel; +import org.apache.tapestry5.SelectModel; import org.apache.tapestry5.StreamResponse; import org.apache.tapestry5.annotations.IncludeStylesheet; import org.apache.tapestry5.annotations.InjectComponent; @@ -59,6 +64,8 @@ import org.apache.tapestry5.annotations.SessionState; import org.apache.tapestry5.beaneditor.BeanModel; import org.apache.tapestry5.corelib.components.Form; +import org.apache.tapestry5.internal.OptionModelImpl; +import org.apache.tapestry5.internal.SelectModelImpl; import org.apache.tapestry5.ioc.annotations.Inject; import org.apache.tapestry5.ioc.services.PropertyAccess; import org.apache.tapestry5.services.BeanModelSource; @@ -114,6 +121,88 @@ contactsForm.clearErrors(); } + /**************************** CONTACT FILTERS *****************************/ + + @Persist + private ContactFilter contactFilter; + + @Persist + private GenericSelectModel<SampleRow> sampleRowSelectModel; + + @Property + private String sampleRowId; + + @Inject + private ServiceReferential serviceReferential; + + @Persist + private SelectModel facadeSelectModel; + + @Persist + private SelectModel sectorSelectModel; + + private boolean reset; + + public ContactFilter getContactFilter() throws SuiviObsmerException { + if (contactFilter == null) { + contactFilter = new ContactFilterImpl(); + if (!user.getAdmin()) { + contactFilter.setCompany(user.getCompany()); + } + } + return contactFilter; + } + + public SelectModel getFacadeSelectModel() throws SuiviObsmerException { + if (facadeSelectModel == null) { + if (log.isInfoEnabled()) { + log.info("BUSINESS REQUEST [getFacades]"); + } + List<OptionModel> options = new ArrayList<OptionModel>(); + for (String facadeName : serviceReferential.getFacades()) { + options.add(new OptionModelImpl(facadeName,facadeName)); + } + facadeSelectModel = new SelectModelImpl(null, options); + } + return facadeSelectModel; + } + + public SelectModel getSectorSelectModel() throws SuiviObsmerException { + if (sectorSelectModel == null) { + if (log.isInfoEnabled()) { + log.info("BUSINESS REQUEST [getSectors]"); + } + List<OptionModel> options = new ArrayList<OptionModel>(); + for (String sectorName : serviceReferential.getSectors(getContactFilter().getFacadeName())) { + options.add(new OptionModelImpl(sectorName,sectorName)); + } + sectorSelectModel = new SelectModelImpl(null, options); + } + return sectorSelectModel; + } + + public GenericSelectModel<SampleRow> getSampleRowSelectModel() throws SuiviObsmerException { + if (sampleRowSelectModel == null) { + if (log.isInfoEnabled()) { + log.info("BUSINESS REQUEST [getSampleRowsForUser]"); + } + List<SampleRow> sampleRows = serviceSampling.getSampleRowsForUser(user); + sampleRowSelectModel = new GenericSelectModel<SampleRow>(sampleRows, SampleRow.class, + "code", "topiaId", propertyAccess); + } + return sampleRowSelectModel; + } + + void onSelectedFromReset() { + reset = true; + } + + void onSuccessFromFiltersForm() { + if (reset) { + contactFilter = null; + } + } + /**************************** CONTACT IMPORT/EXPORT ***********************/ @Property @@ -195,8 +284,7 @@ if (log.isInfoEnabled()) { log.info("BUSINESS REQUEST [getContactsByFilter]"); } - Company company = !user.getAdmin() ? user.getCompany() : null; - contacts = serviceContact.getContactsByFilter(company); + contacts = serviceContact.getContactsByFilter(getContactFilter()); } return contacts; } Modified: trunk/suiviobsmer-ui/src/main/webapp/Contacts.tml =================================================================== --- trunk/suiviobsmer-ui/src/main/webapp/Contacts.tml 2010-01-05 16:39:31 UTC (rev 164) +++ trunk/suiviobsmer-ui/src/main/webapp/Contacts.tml 2010-01-06 08:58:16 UTC (rev 165) @@ -3,6 +3,76 @@ xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd" xmlns:p="tapestry:parameter"> <!--t:include="creationDate, lastState, boatName, boatImmatriculation, boatDistrictCode, beginTideDate, endTideDate, nbObservants, mammals, editDate, comment, validation"--> +<div t:type="zone" class="so-filters" t:id="filtersZone" t:update="show" id="so-contacts-filters"> + <fieldset> + <legend>Filtres de recherche</legend> + <!--<div class="aright"> + <t:if t:test="filtersHidden"> + <a t:type="actionlink" t:id="showFilters" t:zone="so-contacts-filters"> + <img src="${asset:context:}/img/downarrow.png" title="Afficher les filtres"/> + </a> + <p:else> + <a t:type="actionlink" t:id="hideFilters" t:zone="so-boats-filters"> + <img src="${asset:context:}/img/uparrow.png" title="Cacher les filtres"/> + </a> + </p:else> + </t:if> + </div>--> + <!--<t:feedback t:id="filterFeedback" /> + <div class="so-filters-form ${hiddenClass}">--> + <form t:type="form" t:id="filtersForm"> + <t:errors /> + <div class="t-beaneditor"> + <t:beaneditor t:id="filtersEditor" t:object="contactFilter" + t:include="facadeName, sectorName, state" t:add="boat, sampleRow, observer, mammals, validation" + t:reorder="boat, facadeName, sectorName, sampleRow, observer"> + <p:boat> + <t:label t:for="boat" /> + <span> immatriculation </span> + <input t:type="textfield" t:id="boat" class="width50" t:value="contactFilter.boatImmatriculation" /> + <span> code quartier </span> + <input t:type="textfield" t:id="boatDistrictCode" class="width50" t:value="contactFilter.boatDistrictCode" /> + </p:boat> + <p:facadeName> + <t:label t:for="facadeName" /> + <select t:type="select" t:id="facadeName" t:model="facadeSelectModel" value="contactFilter.facadeName" /> + </p:facadeName> + <p:sectorName> + <t:label t:for="sectorName" /> + <select t:type="select" t:id="sectorName" t:model="sectorSelectModel" value="contactFilter.sectorName" /> + </p:sectorName> + <p:sampleRow> + <t:label t:for="sampleRow" /> + <select t:type="select" t:id="sampleRow" t:model="sampleRowSelectModel" value="sampleRowId" /> + </p:sampleRow> + <p:observer> + N/A + </p:observer> + <p:state> + N/A + </p:state> + <p:mammals> + N/A + </p:mammals> + <p:validation> + <t:label t:for="validation" /> + <input t:type="checkbox" t:id="validation" value="contactFilter.companyAccepted" /> + <img src="${asset:context:}/img/true-22px.png" title="Accepté par la société" /> + <input t:type="checkbox" value="contactFilter.companyRefused" /> + <img src="${asset:context:}/img/false-22px.png" title="Refusé par la société" /> + <input t:type="checkbox" value="contactFilter.companyUndefined" /> + <img src="${asset:context:}/img/help-22px.png" title="Non validé par la société" /> + </p:validation> + </t:beaneditor> + <div class="t-beaneditor-row aright"> + <input t:type="submit" class="ico search-32px" t:id="search" value="Search" /> + <input t:type="submit" class="ico undo" t:id="reset" value="Reset" /> + </div> + </div> + </form> + <!--</div>--> + </fieldset> +</div> <form t:type="form" t:id="importContacts"> <t:errors /> <t:label for="contactsCsvFile" /> :