[Suiviobsmer-commits] r351 - in trunk: suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/services suiviobsmer-business/src/main/xmi suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/services suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages suiviobsmer-ui/src/main/resources/fr/ifremer/suiviobsmer/ui/pages suiviobsmer-ui/src/main/webapp
Author: fdesbois Date: 2010-02-12 18:01:51 +0000 (Fri, 12 Feb 2010) New Revision: 351 Added: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/ContactAverageReactivityImpl.java Modified: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/services/ServiceBoatImpl.java trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/services/ServiceSamplingImpl.java trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/services/ServiceSynthesisImpl.java trunk/suiviobsmer-business/src/main/xmi/suiviobsmer.zargo trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/services/ServiceSynthesisImplTest.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/Synthesis.java trunk/suiviobsmer-ui/src/main/resources/fr/ifremer/suiviobsmer/ui/pages/Synthesis.properties trunk/suiviobsmer-ui/src/main/webapp/Synthesis.tml Log: Ano #2103 : Problem with inPlace and GridPage when changing page and return to it : the page is not saved. The inPlace is not used anymore neither the passivate/activate for boatSelectedImmatriculation put in @Persist("flash") to preserve it in BoatInfos. The page loading is necessary to keep page change for navigation and reset boatInfos data to avoid gridDataSource problem (search a boat which is not in the dataSource). Added: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/ContactAverageReactivityImpl.java =================================================================== --- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/ContactAverageReactivityImpl.java (rev 0) +++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/ContactAverageReactivityImpl.java 2010-02-12 18:01:51 UTC (rev 351) @@ -0,0 +1,32 @@ + +package fr.ifremer.suiviobsmer.bean; + +/** + * ContactAverageReactivityImpl + * + * Created: 12 févr. 2010 + * + * @author fdesbois + * @version $Revision$ + * + * Mise a jour: $Date$ + * par : $Author$ + */ +public class ContactAverageReactivityImpl extends ContactAverageReactivity { + + @Override + public void addValue(int nbDays) { + nbResults++; + if (nbDays < 0) { + // Not normal, problem with some existing data (maybe from import) + nbDays = 0; + } + totalDays += nbDays; + } + + @Override + public double getResult() { + return (double)totalDays / (double)nbResults; + } + +} Property changes on: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/ContactAverageReactivityImpl.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL" Modified: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/services/ServiceBoatImpl.java =================================================================== --- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/services/ServiceBoatImpl.java 2010-02-12 17:26:04 UTC (rev 350) +++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/services/ServiceBoatImpl.java 2010-02-12 18:01:51 UTC (rev 351) @@ -414,8 +414,8 @@ String activeStr = ImportHelper.read(reader, BOAT.NAVS_ACTIVE); boolean active = !activeStr.equals(BOAT.getBoatInactiveCode()); - if (log.isDebugEnabled()) { - log.debug("Active : " + active + " (" + activeStr + ")"); + if (log.isTraceEnabled()) { + log.trace("Active : " + active + " (" + activeStr + ")"); } // Find existing boat with immatriculation Modified: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/services/ServiceSamplingImpl.java =================================================================== --- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/services/ServiceSamplingImpl.java 2010-02-12 17:26:04 UTC (rev 350) +++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/services/ServiceSamplingImpl.java 2010-02-12 18:01:51 UTC (rev 351) @@ -810,9 +810,9 @@ List<String> districtList = new ArrayList<String>(Arrays.asList(districts.split(FISHING_ZONE.getDistrictCodeSeparator()))); - if (log.isDebugEnabled()) { - log.debug("FishingZone districts : " + districts); - log.debug("FishingZone nb zones : " + districtList.size()); + if (log.isTraceEnabled()) { + log.trace("FishingZone districts : " + districts); + log.trace("FishingZone nb zones : " + districtList.size()); } for (String districtCode : districtList) { FishingZone zone = dao.findByDistrictCode(districtCode.trim()); @@ -887,31 +887,7 @@ } month.setExpectedTidesValue(monthValue); } -// else if (monthValue != null) { -// // exception, outOfBounds month -// if (log.isErrorEnabled()) { -// log.error("Month out of bounds : value=" + monthValue + " _ monthDate=" + monthDate + -// " _ periode=" + sampleRow.getPeriodBegin() + " au " + sampleRow.getPeriodEnd()); -// } -// } } } -// protected static final int TAB_MONTH = 0; -// protected static final int TAB_YEAR = 1; - -// @Deprecated -// protected int[] getMonthAndYear(String str) throws ParseException { -// DateFormat dateFormat = new SimpleDateFormat("MM/yyyy"); -// int[] result = new int[2]; -// -// Date date = dateFormat.parse(str); -// Calendar calendar = new GregorianCalendar(); -// calendar.setTime(date); -// -// result[TAB_MONTH] = calendar.get(Calendar.MONTH) + 1; -// result[TAB_YEAR] = calendar.get(Calendar.YEAR); -// return result; -// } - } Modified: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/services/ServiceSynthesisImpl.java =================================================================== --- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/services/ServiceSynthesisImpl.java 2010-02-12 17:26:04 UTC (rev 350) +++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/services/ServiceSynthesisImpl.java 2010-02-12 18:01:51 UTC (rev 351) @@ -24,6 +24,8 @@ import fr.ifremer.suiviobsmer.SuiviObsmerContext; import fr.ifremer.suiviobsmer.SuiviObsmerException; import fr.ifremer.suiviobsmer.SuiviObsmerModelDAOHelper; +import fr.ifremer.suiviobsmer.bean.ContactAverageReactivityImpl; +import fr.ifremer.suiviobsmer.bean.ContactAverageReactivity; import fr.ifremer.suiviobsmer.bean.BoardingResult; import fr.ifremer.suiviobsmer.bean.BoardingResultImpl; import fr.ifremer.suiviobsmer.bean.ContactStateStatistics; @@ -49,10 +51,10 @@ import java.util.SortedMap; import java.util.TreeMap; import org.nuiton.topia.TopiaContext; -import org.nuiton.topia.framework.TopiaContextImplementor; import org.nuiton.topia.framework.TopiaQuery; import org.nuiton.topia.framework.TopiaQuery.Op; import org.nuiton.topia.persistence.TopiaEntity; +import org.nuiton.util.DateUtils; import org.nuiton.util.PeriodDates; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -416,11 +418,12 @@ } @Override - public Map<String, Double> getContactDataInputDateReactivity(Company company, PeriodDates period) throws SuiviObsmerException { + public Collection<ContactAverageReactivity> getContactDataInputDateReactivity(Company company, PeriodDates period) throws SuiviObsmerException { TopiaContext transaction = null; // Carefull with results, the company may not be present in the map : // only if there is no unfinished sampleRow or no contact done - Map<String, Double> results = new HashMap<String, Double>(); + + Map<String, ContactAverageReactivity> results = new HashMap<String, ContactAverageReactivity>(); try { transaction = rootContext.beginTransaction(); @@ -428,7 +431,7 @@ String contact = "C"; TopiaQuery query = dao.createQuery(contact); - + String companyKey = contact + "." + Contact.OBSERVER + "." + WaoUser.COMPANY; String companyName = companyKey + "." + Company.NAME; @@ -446,36 +449,67 @@ query.addNotNull(dataInput); // FIXME-FD20100212 Hack for H2 which not managed day for date diff - TopiaContextImplementor context = (TopiaContextImplementor)transaction; - String dialect = context.getHibernateConfiguration().getProperty("hibernate.dialect"); +// TopiaContextImplementor context = (TopiaContextImplementor)transaction; +// String dialect = context.getHibernateConfiguration().getProperty("hibernate.dialect"); - String avg = "AVG(day(" + dataInput + " - " + tideBegin + "))"; - if (dialect.contains("H2Dialect")) { - avg = "AVG(" + dataInput + " - " + tideBegin + ")"; - } +// String avg = "AVG(day(" + dataInput + " - " + tideBegin + "))"; +// if (dialect.contains("H2Dialect")) { +// avg = "AVG(" + dataInput + " - " + tideBegin + ")"; +// } - query.setSelect(companyName, avg).addGroup(companyName); + //query.setSelect(companyName, avg).addGroup(companyName); + query.setSelect(companyName, dataInput, tideBegin); - if (log.isTraceEnabled()) { - log.trace("Exec query : " + query); + if (log.isDebugEnabled()) { + log.debug("Exec query : " + query); } List<Object[]> res = query.execute(); for (Object[] row : res) { String rowCompanyName = (String)row[0]; - Double rowAverage = (Double)row[1]; - if (log.isTraceEnabled()) { - log.trace("Company : " + rowCompanyName); - log.trace("Res : " + rowAverage.doubleValue()); + Date rowDataInputDate = (Date)row[1]; + Date rowTideBeginDate = (Date)row[2]; + + int nbDays = DateUtils.getDifferenceInDays(rowTideBeginDate, rowDataInputDate); + + if (log.isDebugEnabled()) { + log.debug("Company : " + rowCompanyName); + log.debug("tideBegin : " + rowTideBeginDate); + log.debug("dataInput : " + rowDataInputDate); + log.debug("nbDays : " + nbDays); } - if (rowAverage < 0) { - rowAverage = 0.; + + ContactAverageReactivity avg = results.get(rowCompanyName); + if (avg == null) { + avg = new ContactAverageReactivityImpl(); + avg.setCompanyName(rowCompanyName); + results.put(rowCompanyName, avg); } - results.put(rowCompanyName, rowAverage); + + avg.addValue(nbDays); + + + +// String rowCompanyName = (String)row[0]; +// Object rowAverage = row[1]; +// if (log.isDebugEnabled()) { +// log.debug("Company : " + rowCompanyName); +// log.debug("Res : " + rowAverage.getClass().getName()); +// log.debug("Res : " + rowAverage); +// log.debug("tideBegin : " + (Date)row[3]); +// log.debug("dataInput : " + (Date)row[2]); +// } +//// Double d = new Double((double)rowAverage.intValue()); +//// if (rowAverage < 0) { +//// rowAverage = 0.; +//// } +// results.put(rowCompanyName, 0.); } + + } catch (Exception eee) { String msgEnd = ""; if (company != null) { @@ -487,7 +521,7 @@ } finally { SuiviObsmerContext.closeTransaction(transaction); } - return results; + return results.values(); } } Modified: trunk/suiviobsmer-business/src/main/xmi/suiviobsmer.zargo =================================================================== (Binary files differ) Modified: trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/services/ServiceSynthesisImplTest.java =================================================================== --- trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/services/ServiceSynthesisImplTest.java 2010-02-12 17:26:04 UTC (rev 350) +++ trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/services/ServiceSynthesisImplTest.java 2010-02-12 18:01:51 UTC (rev 351) @@ -6,6 +6,7 @@ import fr.ifremer.suiviobsmer.SuiviObsmerRunner; import fr.ifremer.suiviobsmer.SuiviObsmerRunnerTest; import fr.ifremer.suiviobsmer.bean.BoardingResult; +import fr.ifremer.suiviobsmer.bean.ContactAverageReactivity; import fr.ifremer.suiviobsmer.bean.ContactState; import fr.ifremer.suiviobsmer.bean.ContactStateStatistics; import fr.ifremer.suiviobsmer.entity.Boat; @@ -27,6 +28,7 @@ import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; +import org.junit.Ignore; import org.junit.Test; import org.nuiton.topia.TopiaContext; import org.nuiton.util.DateUtils; @@ -493,19 +495,24 @@ PeriodDates period = new PeriodDates(begin, begin); // result for company TARTANPION - Map<String, Double> results = + Collection<ContactAverageReactivity> results = service.getContactDataInputDateReactivity(company, period); assertEquals(1, results.size()); // 12 days for contact1 + 43 days for contact2 / 2 = 27.5 days - assertEquals(28, results.get(company.getName()), 0.01); + ContactAverageReactivity res = + (ContactAverageReactivity)CollectionUtils.get(results, 0); + assertEquals(27., res.getResult(), 0.01); + // result for company BIS using admin mode (no company filtered) results = service.getContactDataInputDateReactivity(null, period); // 0 days for contact3 / 1 = O days - assertEquals(0, results.get(company2.getName()), 0.01); + res = (ContactAverageReactivity)CollectionUtils.get(results, 0); + + assertEquals(0, res.getResult(), 0.01); } } \ No newline at end of file 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-02-12 17:26:04 UTC (rev 350) +++ trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/Boats.java 2010-02-12 18:01:51 UTC (rev 351) @@ -728,9 +728,15 @@ /** /////////////////////// ACTIONS //////////////////////////////////// **/ + void onSuccess() throws SuiviObsmerException { + if (getBoatInfos() != null) { + boatSelectedImmatriculation = getBoatInfos().getBoat().getImmatriculation(); + } + } + Block onSuccessFromCompanySelectForm() throws SuiviObsmerException { companyBoatInfos = null; - getCompanyBoatInfos(); + getCompanyBoatInfos(); return boatInfosZone.getBody(); } @@ -752,7 +758,7 @@ }*/ // Set boatSelectedImmatriculation for boatInfos to reinitialize it (next getBoatInfos() call) - //boatSelectedImmatriculation = getBoatInfos().getBoat().getImmatriculation(); + boatSelectedImmatriculation = getBoatInfos().getBoat().getImmatriculation(); // Suppress boatInfos to get the one from serviceBoat (not updated yet) companyBoatInfos = null; return boatInfosZone.getBody(); @@ -782,10 +788,12 @@ // Save data serviceBoat.createUpdateCompanyBoatInfos(companyBoatInfos); } + //boatSelectedImmatriculation = getBoatInfos().getBoat().getImmatriculation(); return boatInfosZone.getBody(); } Block onSuccessFromCalculateBoardings() throws SuiviObsmerException { + //boatSelectedImmatriculation = getBoatInfos().getBoat().getImmatriculation(); return boatInfosZone.getBody(); } Modified: trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/Synthesis.java =================================================================== --- trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/Synthesis.java 2010-02-12 17:26:04 UTC (rev 350) +++ trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/Synthesis.java 2010-02-12 18:01:51 UTC (rev 351) @@ -27,6 +27,7 @@ import fr.ifremer.suiviobsmer.bean.BoatFilterImpl; import fr.ifremer.suiviobsmer.bean.ContactState; import fr.ifremer.suiviobsmer.bean.ContactStateStatistics; +import fr.ifremer.suiviobsmer.bean.ContactAverageReactivity; import fr.ifremer.suiviobsmer.entity.Company; import fr.ifremer.suiviobsmer.entity.WaoUser; import fr.ifremer.suiviobsmer.services.ServiceSynthesis; @@ -45,6 +46,7 @@ import java.util.List; import java.util.Map; import java.util.SortedMap; +import org.apache.commons.collections.CollectionUtils; import org.apache.tapestry5.Block; import org.apache.tapestry5.ComponentResources; import org.apache.tapestry5.annotations.IncludeStylesheet; @@ -405,15 +407,15 @@ /********************* INDICATOR : NONCOMPLIANCEBOARDING ******************/ - private Map<String, Double> allegroReactivity; + private Collection<ContactAverageReactivity> allegroReactivity; @Persist private PeriodDates periodForAllegroReactivity; @Property - private Map.Entry<String, Double> allegroReactivityEntry; + private ContactAverageReactivity allegroReactivityEntry; - public Map<String, Double> getAllegroReactivity() + public Collection<ContactAverageReactivity> getAllegroReactivity() throws SuiviObsmerException { if (allegroReactivity == null) { Company company = !user.getAdmin() ? user.getCompany() : null; @@ -431,12 +433,14 @@ } public Double getAllegroReactivityValue() throws SuiviObsmerException { - return getAllegroReactivity().get(user.getCompany().getName()); + ContactAverageReactivity entry = + (ContactAverageReactivity) CollectionUtils.get(getAllegroReactivity(), 0); + return entry.getResult(); } public String getAllegroReactivityStyle() throws SuiviObsmerException { double value = user.getAdmin() ? - allegroReactivityEntry.getValue() : getAllegroReactivityValue(); + allegroReactivityEntry.getResult() : getAllegroReactivityValue(); if (value >= 15.) { return " warn"; } Modified: trunk/suiviobsmer-ui/src/main/resources/fr/ifremer/suiviobsmer/ui/pages/Synthesis.properties =================================================================== --- trunk/suiviobsmer-ui/src/main/resources/fr/ifremer/suiviobsmer/ui/pages/Synthesis.properties 2010-02-12 17:26:04 UTC (rev 350) +++ trunk/suiviobsmer-ui/src/main/resources/fr/ifremer/suiviobsmer/ui/pages/Synthesis.properties 2010-02-12 18:01:51 UTC (rev 351) @@ -15,4 +15,12 @@ periodEndForContactStates-label: au periodBeginForAllegroReactivity-label: du -periodEndForAllegroReactivity-label: au \ No newline at end of file +periodEndForAllegroReactivity-label: au + +# Validation messages +filtersForm-periodBegin-required-message: La date de d\u00E9but est obligatoire +filtersForm-periodEnd-required-message: La date de fin est obligatoire +filterPeriodForContactStates-periodBeginForContactStates-required-message: La date de d\u00E9but est obligatoire +filterPeriodForContactStates-periodEndForContactStates-required-message: La date de fin est obligatoire +filterPeriodForAllegroReactivity-periodBeginForAllegroReactivity-required-message: La date de d\u00E9but est obligatoire +filterPeriodForAllegroReactivity-periodEndForAllegroReactivity-required-message: La date de fin est obligatoire \ No newline at end of file Modified: trunk/suiviobsmer-ui/src/main/webapp/Synthesis.tml =================================================================== --- trunk/suiviobsmer-ui/src/main/webapp/Synthesis.tml 2010-02-12 17:26:04 UTC (rev 350) +++ trunk/suiviobsmer-ui/src/main/webapp/Synthesis.tml 2010-02-12 18:01:51 UTC (rev 351) @@ -57,9 +57,9 @@ <div class="filterRow"> <label>Période: </label> <t:label t:for="periodBegin" />: - <input t:type="datefield" class="width70" t:id="periodBegin" t:value="period.fromDate" t:format="MM/yyyy"/> + <input t:type="datefield" class="width70" t:id="periodBegin" t:value="period.fromDate" t:format="MM/yyyy" t:validate="required"/> <t:label t:for="periodEnd" />: - <input t:type="datefield" class="width70" t:id="periodEnd" t:value="period.thruDate" t:format="MM/yyyy" /> + <input t:type="datefield" class="width70" t:id="periodEnd" t:value="period.thruDate" t:format="MM/yyyy" t:validate="required"/> </div> <div> <t:if t:test="user.admin"> @@ -192,9 +192,9 @@ <form t:type="form" t:id="filterPeriodForContactStates"> <label>Période : </label> <t:label t:for="periodBeginForContactStates" /> - <input t:type="datefield" class="width70" t:id="periodBeginForContactStates" t:value="periodForContactStates.fromDate" t:format="MM/yyyy"/> + <input t:type="datefield" class="width70" t:id="periodBeginForContactStates" t:value="periodForContactStates.fromDate" t:format="MM/yyyy" t:validate="required"/> <t:label t:for="periodEndForContactStates" /> - <input t:type="datefield" class="width70" t:id="periodEndForContactStates" t:value="periodForContactStates.thruDate" t:format="MM/yyyy" /> + <input t:type="datefield" class="width70" t:id="periodEndForContactStates" t:value="periodForContactStates.thruDate" t:format="MM/yyyy" t:validate="required" /> <input t:type="submit" class="ico search-32px" t:id="searchForContactStates" value="Search" title="Rechercher les états des contacts sur cette période"/> </form> @@ -245,9 +245,9 @@ <form t:type="form" t:id="filterPeriodForAllegroReactivity"> <label>Période : </label> <t:label t:for="periodBeginForAllegroReactivity" /> - <input t:type="datefield" class="width70" t:id="periodBeginForAllegroReactivity" t:value="periodForAllegroReactivity.fromDate" t:format="MM/yyyy"/> + <input t:type="datefield" class="width70" t:id="periodBeginForAllegroReactivity" t:value="periodForAllegroReactivity.fromDate" t:format="MM/yyyy" t:validate="required"/> <t:label t:for="periodEndForAllegroReactivity" /> - <input t:type="datefield" class="width70" t:id="periodEndForAllegroReactivity" t:value="periodForAllegroReactivity.thruDate" t:format="MM/yyyy" /> + <input t:type="datefield" class="width70" t:id="periodEndForAllegroReactivity" t:value="periodForAllegroReactivity.thruDate" t:format="MM/yyyy" t:validate="required" /> <input t:type="submit" class="ico search-32px" t:id="searchForAllegroReactivity" value="Search" title="Calcul de la moyenne du nombre de jours entre la date de saisie dans Allegro et la date de fin de marée sur la période sélectionnée"/> </form> @@ -261,10 +261,10 @@ </tr> </thead> <tbody> - <tr t:type="loop" t:source="allegroReactivity.entrySet()" t:value="allegroReactivityEntry"> - <td class="company">${allegroReactivityEntry.key}</td> + <tr t:type="loop" t:source="allegroReactivity" t:value="allegroReactivityEntry"> + <td class="company">${allegroReactivityEntry.companyName}</td> <td class="number${allegroReactivityStyle}"> - <t:output t:value="allegroReactivityEntry.value" t:format="numberFormat" /> + <t:output t:value="allegroReactivityEntry.result" t:format="numberFormat" /> </td> </tr> </tbody>
participants (1)
-
fdesbois@users.labs.libre-entreprise.org