Author: fdesbois Date: 2010-01-20 12:00:12 +0000 (Wed, 20 Jan 2010) New Revision: 248 Modified: trunk/changelog.txt trunk/pom.xml trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/ImportHelper.java trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/BoatFilterImpl.java trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/SamplingFilterImpl.java trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/entity/SampleRowImpl.java trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/ServiceContactImpl.java trunk/suiviobsmer-business/src/main/xmi/suiviobsmer.zargo trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/entity/SampleRowImplTest.java trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/impl/ServiceSamplingImplTest.java trunk/suiviobsmer-ui/pom.xml trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/components/Layout.java trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/Boats.java trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/SamplingPlan.java trunk/suiviobsmer-ui/src/main/webapp/SamplingPlan.tml Log: - Evol #2024 : Suppress constraint on showing sampleRows for user (not only terminated or with one gap month) - Ano #2027 : A bad format does'nt throw exception for date in Contacts import - Use last topia and mavenpom versions Modified: trunk/changelog.txt =================================================================== --- trunk/changelog.txt 2010-01-20 10:36:56 UTC (rev 247) +++ trunk/changelog.txt 2010-01-20 12:00:12 UTC (rev 248) @@ -4,6 +4,12 @@ 0.1.1 ----- +- [fdesbois] Evol #2024 : Suppression contrainte de terminaison sur la liaison entre un navire et une ligne du plan. +- [fdesbois] Evol #2020 : Ouvrir les liens en bas de page dans une nouvelle fenêtre + ajout lien sur DPMA +- [fdesbois] Evol #1993 : Automatiser la gestion des index avec Hibernate +- [fdesbois] Evol #1991 : Optimiser Tapestry pour le requêtage par page sur la liste des navires +- [fdesbois] Ano #2027 : Un mauvais format de date dans l'import des Contacts ne bloque pas la saisie +- [fdesbois] Ano #2025 : Il reste des champs "NA" non gérés dans l'import des Calendrier d'activité - [fdesbois] Evol #1975 : Amélioration de l'affichage (marges) + dynamisme sur la liste déroulante des métiers (codes lignes du plan) - [fdesbois] Evol #1972 : Envoi d'un email pour la modification du password de l'utilisateur - [fdesbois] Ano #2015 : Un utilisateur inactif ne doit pas pouvoir se connecter à l'application @@ -11,6 +17,7 @@ - [fdesbois] Evol #1945 : Mise à jour du pied de page : ajout d'un lien vers Ifremer SIH (en plus de celui vers le site d'Ifremer) - [fdesbois] Ano #2010 : L'icône d'ajout d'une news est présente pour un utilisateur - [fdesbois] Ano #2014 : La data de saisie des données n'est pas supprimé lors du passage à un état refusé +- [fdesbois] Ano #2021 : Le champs CONT_ALLEGRO n'est pas pris en compte lors de l'import des contacts. - [fdesbois] Ano #2009 : Les icônes de validation apparaissent lors de la modification d'une ligne de contact 0.1.0 Modified: trunk/pom.xml =================================================================== --- trunk/pom.xml 2010-01-20 10:36:56 UTC (rev 247) +++ trunk/pom.xml 2010-01-20 12:00:12 UTC (rev 248) @@ -207,7 +207,7 @@ <!-- libraries version --> <nuitonutils.version>1.1.3</nuitonutils.version> - <topia.version>2.3.0-beta-5-SNAPSHOT</topia.version> + <topia.version>2.3.0-beta-5</topia.version> <eugene.version>2.0.0-beta-3</eugene.version> <tapestry.version>5.1.0.5</tapestry.version> @@ -311,13 +311,6 @@ </releases> </repository> - <repository> - <id>m2-release-repository.orientimport.kenai.com</id> - <name>Orient Import Oy Maven Release Repository</name> - <url>http://kenai.com/svn/t5-easy-fckeditor~maven-release-repository</url> - <layout>default</layout> - </repository> - </repositories> <pluginRepositories> Modified: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/ImportHelper.java =================================================================== --- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/ImportHelper.java 2010-01-20 10:36:56 UTC (rev 247) +++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/ImportHelper.java 2010-01-20 12:00:12 UTC (rev 248) @@ -347,7 +347,7 @@ public static Date parseContactCreateDate(String code, String createDate) throws ParseException { Calendar time = new GregorianCalendar(Locale.FRENCH); - if (!StringUtils.isEmpty(code)) { + if (StringUtils.isNotEmpty(code)) { DateFormat timeFormat = new SimpleDateFormat(CONTACT_TIME_PATTERN, Locale.FRENCH); time = new GregorianCalendar(Locale.FRENCH); time.setTime(timeFormat.parse(code)); @@ -356,7 +356,7 @@ } Calendar result = new GregorianCalendar(Locale.FRENCH); - if (!StringUtils.isEmpty(createDate)) { + if (StringUtils.isNotEmpty(createDate)) { DateFormat dateFormat = getContactDateFormat(); result.setTime(dateFormat.parse(createDate)); result.set(Calendar.HOUR_OF_DAY, time.get(Calendar.HOUR_OF_DAY)); @@ -414,7 +414,7 @@ */ public static int readInt(CsvReader reader, ImportHeader header) throws IOException { String str = read(reader, header); - if (str == null) { + if (StringUtils.isEmpty(str)) { return -1; } return Integer.parseInt(str); @@ -472,9 +472,14 @@ throws IOException, ParseException { DateFormat dateFormat = new SimpleDateFormat(header.datePattern()); String str = read(reader, header); - if (str == null) { + if (StringUtils.isEmpty(str)) { return null; } + // Parsing problem with Pattern dd/MM/yyyy which is valid for dd/MM/yy date + // The length is tested to avoid accepting wrong dates + if (str.length() != header.datePattern().length()) { + throw new ParseException("Date error : " + str, str.length()); + } return dateFormat.parse(str); } Modified: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/BoatFilterImpl.java =================================================================== --- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/BoatFilterImpl.java 2010-01-20 10:36:56 UTC (rev 247) +++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/BoatFilterImpl.java 2010-01-20 12:00:12 UTC (rev 248) @@ -44,13 +44,13 @@ // Limit query = prepareQueryForLimit(query); - - if (!StringUtils.isEmpty(getBoatName())) { - query.add(boat + ".name", Op.LIKE, getBoatName() + "%"); + + if (StringUtils.isNotEmpty(getBoatName())) { + query.add(boat + ".name", Op.LIKE, getBoatName().trim() + "%"); } - if (!StringUtils.isEmpty(getBoatDistrictCode())) { - query.add(boat + ".districtCode", getBoatDistrictCode()); + if (StringUtils.isNotEmpty(getBoatDistrictCode())) { + query.add(boat + ".districtCode", getBoatDistrictCode().trim()); } if (getBoatImmatriculation() != null) { @@ -61,6 +61,6 @@ @Override public boolean isBoatFiltered() { - return !StringUtils.isEmpty(getBoatName()) || !StringUtils.isEmpty(getBoatDistrictCode()) || getBoatImmatriculation() != null; + return StringUtils.isNotEmpty(getBoatName()) || StringUtils.isNotEmpty(getBoatDistrictCode()) || getBoatImmatriculation() != null; } } Modified: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/SamplingFilterImpl.java =================================================================== --- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/SamplingFilterImpl.java 2010-01-20 10:36:56 UTC (rev 247) +++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/SamplingFilterImpl.java 2010-01-20 12:00:12 UTC (rev 248) @@ -24,7 +24,9 @@ import fr.ifremer.suiviobsmer.SuiviObsmerContext; import fr.ifremer.suiviobsmer.entity.FishingZone; import fr.ifremer.suiviobsmer.entity.SampleRow; +import java.util.Calendar; import java.util.Date; +import java.util.GregorianCalendar; import org.apache.commons.lang.StringUtils; import org.nuiton.topia.framework.TopiaQuery; import org.nuiton.topia.framework.TopiaQuery.Op; @@ -64,10 +66,13 @@ add(main + "." + SampleRow.PERIOD_END, Op.GT, getPeriod().getFromDate()); } - if (getUnfinishedRowsOnly()) { + if (getNbMonthFinishedFromToday() != null) { // Only rows which are not finished will be kept - Date current = SuiviObsmerContext.getCurrentDate(); - query.add(main + "." + SampleRow.PERIOD_END, Op.GE, current); + //Date current = SuiviObsmerContext.getCurrentDate(); + Calendar calendar = new GregorianCalendar(); + calendar.setTime(SuiviObsmerContext.getCurrentDate()); + calendar.add(Calendar.MONTH, getNbMonthFinishedFromToday()); + query.add(main + "." + SampleRow.PERIOD_END, Op.GE, calendar.getTime()); } return query; Modified: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/entity/SampleRowImpl.java =================================================================== --- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/entity/SampleRowImpl.java 2010-01-20 10:36:56 UTC (rev 247) +++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/entity/SampleRowImpl.java 2010-01-20 12:00:12 UTC (rev 248) @@ -207,9 +207,11 @@ } @Override - public boolean isFinished() { - Date current = SuiviObsmerContext.getCurrentDate(); - return current.after(getPeriodEnd()); + public boolean isFinished(int nbMonths) { + Calendar calendar = new GregorianCalendar(); + calendar.setTime(SuiviObsmerContext.getCurrentDate()); + calendar.add(Calendar.MONTH, nbMonths); + return calendar.getTime().after(getPeriodEnd()); } /** 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-20 10:36:56 UTC (rev 247) +++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/ServiceContactImpl.java 2010-01-20 12:00:12 UTC (rev 248) @@ -372,8 +372,8 @@ // Create new elligible boat not active in a global way elligible = elligibleDAO.create( ElligibleBoat.BOAT, boat, ElligibleBoat.SAMPLE_ROW, row); - if (log.isDebugEnabled()) { - log.debug("Create elligibleBoat for : " + boat.getImmatriculation() + " - " + row.getCode()); + if (log.isTraceEnabled()) { + log.trace("Create elligibleBoat for : " + boat.getImmatriculation() + " - " + row.getCode()); } } elligible.setCompanyActive(Boolean.TRUE); @@ -405,8 +405,8 @@ String contactCode = ImportHelper.read(reader, CONTACT.CONT_CODE); Date createDate = ImportHelper.parseContactCreateDate(contactCode, createDateString); - if (log.isDebugEnabled()) { - log.debug("Ligne " + currRow + " : Create date : " + createDate); + if (log.isTraceEnabled()) { + log.trace("Ligne " + currRow + " : Create date : " + createDate); } if (!StringUtils.isEmpty(contactCode) && !StringUtils.isEmpty(createDateString)) { @@ -428,15 +428,22 @@ Contact.BOAT, boat); } - String tideBeginString = ImportHelper.read(reader, CONTACT.CONT_DEBUT_MAREE); - String tideEndString = ImportHelper.read(reader, CONTACT.CONT_FIN_MAREE); - String nbObservantsString = ImportHelper.read(reader, CONTACT.CONT_NB_OBSERV); - String dataInputString = ImportHelper.read(reader, CONTACT.CONT_ALLEGRO); +// String tideBeginString = ImportHelper.read(reader, CONTACT.CONT_DEBUT_MAREE); +// String tideEndString = ImportHelper.read(reader, CONTACT.CONT_FIN_MAREE); +// String nbObservantsString = ImportHelper.read(reader, CONTACT.CONT_NB_OBSERV); +// String dataInputString = ImportHelper.read(reader, CONTACT.CONT_ALLEGRO); - Date tideBegin = !StringUtils.isEmpty(tideBeginString) ? dateFormat.parse(tideBeginString) : null; - Date tideEnd = !StringUtils.isEmpty(tideEndString) ? dateFormat.parse(tideEndString) : null; - Date dataInput = !StringUtils.isEmpty(dataInputString) ? dateFormat.parse(dataInputString) : null; - int nbObservants = !StringUtils.isEmpty(nbObservantsString) ? Integer.parseInt(nbObservantsString) : 0; +// Date tideBegin = !StringUtils.isEmpty(tideBeginString) ? dateFormat.parse(tideBeginString) : null; +// Date tideEnd = !StringUtils.isEmpty(tideEndString) ? dateFormat.parse(tideEndString) : null; +// Date dataInput = !StringUtils.isEmpty(dataInputString) ? dateFormat.parse(dataInputString) : null; +// int nbObservants = !StringUtils.isEmpty(nbObservantsString) ? Integer.parseInt(nbObservantsString) : 0; + Date tideBegin = ImportHelper.readDate(reader, CONTACT.CONT_DEBUT_MAREE); + Date tideEnd = ImportHelper.readDate(reader, CONTACT.CONT_FIN_MAREE); + Date dataInput = ImportHelper.readDate(reader, CONTACT.CONT_ALLEGRO); + int nbObservants = ImportHelper.readInt(reader, CONTACT.CONT_NB_OBSERV); + if (nbObservants == -1) { + nbObservants = 0; + } boolean mammalsCapture = ImportHelper.parseContactMammals(reader, CONTACT.CONT_MAM_CAPT); boolean mammalsObsv = Modified: trunk/suiviobsmer-business/src/main/xmi/suiviobsmer.zargo =================================================================== (Binary files differ) Modified: trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/entity/SampleRowImplTest.java =================================================================== --- trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/entity/SampleRowImplTest.java 2010-01-20 10:36:56 UTC (rev 247) +++ trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/entity/SampleRowImplTest.java 2010-01-20 12:00:12 UTC (rev 248) @@ -172,4 +172,19 @@ // result put to 5 : 12 - 7 (diff) assertEquals(5, result.getRealTidesValue()); } + + @Test + public void testIsFinished() throws Exception { + log.info("isFinished()"); + + SampleRow row = new SampleRowImpl(); + + Calendar calendar = new GregorianCalendar(2009, 8, 23); + row.setPeriodEnd(calendar.getTime()); + + // with a gap of one month, the row is not considered as finished + assertFalse(row.isFinished(-1)); + + + } } Modified: trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/impl/ServiceSamplingImplTest.java =================================================================== --- trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/impl/ServiceSamplingImplTest.java 2010-01-20 10:36:56 UTC (rev 247) +++ trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/impl/ServiceSamplingImplTest.java 2010-01-20 12:00:12 UTC (rev 248) @@ -340,7 +340,7 @@ // User admin = new UserImpl(); // admin.setAdmin(true); // filter.setCompany() - filter.setUnfinishedRowsOnly(true); + filter.setNbMonthFinishedFromToday(0); List<SampleRow> results = service.getSampleRowsByFilter(filter); // total in file : 11, 1 refused, 1 finished assertEquals(9, results.size()); Modified: trunk/suiviobsmer-ui/pom.xml =================================================================== --- trunk/suiviobsmer-ui/pom.xml 2010-01-20 10:36:56 UTC (rev 247) +++ trunk/suiviobsmer-ui/pom.xml 2010-01-20 12:00:12 UTC (rev 248) @@ -120,6 +120,17 @@ </plugin> </plugins> </build> + + <repositories> + + <repository> + <id>m2-release-repository.orientimport.kenai.com</id> + <name>Orient Import Oy Maven Release Repository</name> + <url>http://kenai.com/svn/t5-easy-fckeditor~maven-release-repository</url> + <layout>default</layout> + </repository> + + </repositories> <scm> <url>http://labs.libre-entreprise.org/scm/viewvc.php/trunk/suiviobsmer-ui/?root=suiviobsmer</url> Modified: trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/components/Layout.java =================================================================== --- trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/components/Layout.java 2010-01-20 10:36:56 UTC (rev 247) +++ trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/components/Layout.java 2010-01-20 12:00:12 UTC (rev 248) @@ -173,7 +173,10 @@ @Log Object onSuccessFromConnexionForm() throws SuiviObsmerException { try { - currentUser = serviceUser.connect(login, password); + // FIXME-FD20100120 Problem with NPE in Topia --> see Ano #243 on nuiton.org + if (login != null && password != null) { + currentUser = serviceUser.connect(login, password); + } } catch (SuiviObsmerBusinessException eee) { if (eee.getType().equals(Type.BAD_CONNECTION)) { connexionFeedback.addError(eee.getMessage()); Modified: trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/Boats.java =================================================================== --- trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/Boats.java 2010-01-20 10:36:56 UTC (rev 247) +++ trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/Boats.java 2010-01-20 12:00:12 UTC (rev 248) @@ -321,7 +321,8 @@ } // FIXME-FD20100118 Refactor filter system using AbstractFilteredPage SamplingFilter filter = new SamplingFilterImpl(); - filter.setUnfinishedRowsOnly(true); + // Used to test if the rows are finished with a gap of 1 month (today - 1 month) + filter.setNbMonthFinishedFromToday(-1); if (!user.getAdmin()) { filter.setCompany(user.getCompany()); } @@ -467,9 +468,9 @@ public boolean canCreateNewContactFromList() throws SuiviObsmerException { if (!user.getAdmin() && isSampleRowExists()) { - if (getSampleRow().isFinished()) { - return false; - } +// if (getSampleRow().isFinished()) { +// return false; +// } return boat.canCreateContact(user.getCompany()); } return false; @@ -603,10 +604,10 @@ public boolean canCreateNewContactFromElligibleBoat() throws SuiviObsmerException { if (!user.getAdmin() && !isElligibleBoatCompanyActiveFalse()) { - SampleRow row = elligibleBoat.getSampleRow(); - if (row.isFinished()) { - return false; - } +// SampleRow row = elligibleBoat.getSampleRow(); +// if (row.isFinished()) { +// return false; +// } Boat boat = getBoatInfos().getBoat(); return boat.canCreateContact(user.getCompany()); } Modified: trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/SamplingPlan.java =================================================================== --- trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/SamplingPlan.java 2010-01-20 10:36:56 UTC (rev 247) +++ trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/SamplingPlan.java 2010-01-20 12:00:12 UTC (rev 248) @@ -351,5 +351,10 @@ row = getData().get(rowIndex); serviceSampling.deleteSampleRow(row); } + + public boolean canAccessBoats() { + // Test if the row isFinished with a gap of 1 month (today - 1 month) + return !row.isFinished(-1); + } } Modified: trunk/suiviobsmer-ui/src/main/webapp/SamplingPlan.tml =================================================================== --- trunk/suiviobsmer-ui/src/main/webapp/SamplingPlan.tml 2010-01-20 10:36:56 UTC (rev 247) +++ trunk/suiviobsmer-ui/src/main/webapp/SamplingPlan.tml 2010-01-20 12:00:12 UTC (rev 248) @@ -143,14 +143,14 @@ <td class="width60 aright bright">${row.nbObservants}</td> <!-- Actions --> <td class="${actionsClass} bright"> - <t:unless t:test="row.isFinished()"> + <t:if t:test="canAccessBoats()"> <a t:type="pagelink" t:page="boats" t:context="row.topiaId"> <img src="${asset:context:}/img/boat.png" alt="Navire" title="Voir les navires éligibles pour cette ligne"/> </a> <p:else> <img src="${asset:context:}/img/boat-unavailable-22px.png" alt="Navire impossible" title="Accès aux navires impossible, ligne terminée"/> </p:else> - </t:unless> + </t:if> <t:if t:test="user.admin"> <a t:type="pagelink" t:page="sampleRowForm" t:context="row.topiaId"> <img src="${asset:context:}/img/edit.png" alt="Modifier" title="Modifier la ligne"/>