Wao-commits
Threads by month
- ----- 2026 -----
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- 2357 discussions
[Suiviobsmer-commits] r126 - trunk/suiviobsmer-business
by tchemit@users.labs.libre-entreprise.org 16 Dec '09
by tchemit@users.labs.libre-entreprise.org 16 Dec '09
16 Dec '09
Author: tchemit
Date: 2009-12-16 20:45:00 +0000 (Wed, 16 Dec 2009)
New Revision: 126
Modified:
trunk/suiviobsmer-business/pom.xml
Log:
use new eugeune goals
Modified: trunk/suiviobsmer-business/pom.xml
===================================================================
--- trunk/suiviobsmer-business/pom.xml 2009-12-16 18:26:29 UTC (rev 125)
+++ trunk/suiviobsmer-business/pom.xml 2009-12-16 20:45:00 UTC (rev 126)
@@ -99,10 +99,10 @@
<id>Zargo to object model</id>
<phase>generate-sources</phase>
<configuration>
- <modelType>objectmodel</modelType>
- <includes>
+ <!--modelType>objectmodel</modelType-->
+ <inputFiles>
<include>zargo</include>
- </includes>
+ </inputFiles>
<fullPackagePath>fr.ifremer.suiviobsmer</fullPackagePath>
<!--<outputDirectory>target/generated-sources-zargo2ObjectModel</outputDirectory>-->
</configuration>
@@ -114,8 +114,8 @@
<id>ObjectModel to Java</id>
<phase>generate-sources</phase>
<configuration>
- <reader>org.nuiton.eugene.ObjectModelReader</reader>
- <includes>**/*.objectmodel</includes>
+ <!--reader>org.nuiton.eugene.ObjectModelReader</reader-->
+ <!--includes>**/*.objectmodel</includes-->
<templates>org.nuiton.topia.generator.TopiaMetaGenerator,org.nuiton.topia.generator.InterfaceTransformer,org.nuiton.topia.generator.BeanTransformer</templates>
<!--<extractedPackages>fr.ifremer.suiviobsmer</extractedPackages>
<fullPackagePath>fr.ifremer.suiviobsmer</fullPackagePath>-->
@@ -123,7 +123,7 @@
<generatedPackages>fr.ifremer.suiviobsmer</generatedPackages>
</configuration>
<goals>
- <goal>generate</goal>
+ <goal>generate-from-models</goal>
</goals>
</execution>
<!--<execution>
1
0
[Suiviobsmer-commits] r125 - in trunk: suiviobsmer-business/src/main/xmi suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages suiviobsmer-ui/src/main/webapp suiviobsmer-ui/src/main/webapp/css
by fdesbois@users.labs.libre-entreprise.org 16 Dec '09
by fdesbois@users.labs.libre-entreprise.org 16 Dec '09
16 Dec '09
Author: fdesbois
Date: 2009-12-16 18:26:29 +0000 (Wed, 16 Dec 2009)
New Revision: 125
Modified:
trunk/suiviobsmer-business/src/main/xmi/suiviobsmer.zargo
trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/BoatActivityCalendar.java
trunk/suiviobsmer-ui/src/main/webapp/BoatActivityCalendar.tml
trunk/suiviobsmer-ui/src/main/webapp/Boats.tml
trunk/suiviobsmer-ui/src/main/webapp/css/boats.css
Log:
Page BoatActivityCalendar finished
Modified: trunk/suiviobsmer-business/src/main/xmi/suiviobsmer.zargo
===================================================================
(Binary files differ)
Modified: trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/BoatActivityCalendar.java
===================================================================
--- trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/BoatActivityCalendar.java 2009-12-16 13:47:02 UTC (rev 124)
+++ trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/BoatActivityCalendar.java 2009-12-16 18:26:29 UTC (rev 125)
@@ -3,11 +3,20 @@
import fr.ifremer.suiviobsmer.SuiviObsmerException;
import fr.ifremer.suiviobsmer.entity.ActivityCalendar;
+import fr.ifremer.suiviobsmer.entity.ActivityMonth;
+import fr.ifremer.suiviobsmer.entity.ActivityProfession;
+import fr.ifremer.suiviobsmer.entity.ActivityZone;
import fr.ifremer.suiviobsmer.entity.Boat;
import fr.ifremer.suiviobsmer.services.ServiceBoat;
import fr.ifremer.suiviobsmer.ui.base.SuiviObsmerPage;
+import java.util.Collections;
+import java.util.List;
+import org.apache.commons.lang.StringUtils;
+import org.apache.tapestry5.annotations.IncludeStylesheet;
import org.apache.tapestry5.annotations.Persist;
+import org.apache.tapestry5.annotations.Property;
import org.apache.tapestry5.ioc.annotations.Inject;
+import org.nuiton.util.DateUtils;
import org.slf4j.Logger;
/**
@@ -21,6 +30,7 @@
* Mise a jour: $Date$
* par : $Author$
*/
+ at IncludeStylesheet("context:css/boats.css")
public class BoatActivityCalendar implements SuiviObsmerPage {
@Inject
@@ -31,6 +41,18 @@
private ActivityCalendar activityCalendar;
+// @Property
+// private ActivityMonth activityMonth;
+
+ @Property
+ private int month;
+
+ @Property
+ private int professionIndex;
+
+ @Property
+ private int zoneIndex;
+
@Persist
private Boat boat;
@@ -47,13 +69,85 @@
this.boat = boat;
}
+ public Boat getBoat() {
+ return this.boat;
+ }
+
+ public List<Boat> getBoats() {
+ return Collections.singletonList(boat);
+ }
+
public ActivityCalendar getActivityCalendar() throws SuiviObsmerException {
if (activityCalendar == null) {
if (log.isInfoEnabled()) {
log.info("BUSINESS REQUEST [getLastActivityCalendar]");
}
- this.activityCalendar = serviceBoat.getLastActivityCalendar(boat);
+ this.activityCalendar = serviceBoat.getLastActivityCalendar(getBoat());
}
return activityCalendar;
}
+
+ public ActivityMonth getActivityMonth() throws SuiviObsmerException {
+ return getActivityCalendar().getActivityMonth(month);
+ }
+
+ public String getMonthName() {
+ String libelle = DateUtils.getMonthLibelle(month);
+ return StringUtils.capitalize(libelle);
+ }
+
+ public int getProfessionIndexMax() {
+ int result = 0;
+ for (ActivityMonth month : activityCalendar.getActivityMonth()) {
+ int nbProfessions = month.sizeActivityProfession();
+ if (nbProfessions > result) {
+ result = nbProfessions;
+ }
+ }
+ return result-1;
+ }
+
+ public boolean hasProfessions() {
+ return getProfessionIndexMax() != -1;
+ }
+
+ public ActivityProfession getActivityProfession() throws SuiviObsmerException {
+ if (getActivityMonth() == null) {
+ return null;
+ }
+ if (professionIndex >= getActivityMonth().sizeActivityProfession()) {
+ return null;
+ }
+ return getActivityMonth().getActivityProfession().get(professionIndex);
+ }
+
+ public int getZoneIndexMax() throws SuiviObsmerException {
+ int result = 0;
+ for (ActivityMonth activityMonth : activityCalendar.getActivityMonth()) {
+ month = activityMonth.getMonth();
+ ActivityProfession profession = getActivityProfession();
+ if (profession != null) {
+ int nbZones = profession.sizeActivityZone();
+ if (nbZones > result) {
+ result = nbZones;
+ }
+ }
+ }
+ return result-1;
+ }
+
+// public boolean hasZones() {
+// return getZoneIndexMax() != -1;
+// }
+
+ public ActivityZone getActivityZone() throws SuiviObsmerException {
+ ActivityProfession profession = getActivityProfession();
+ if (profession == null) {
+ return null;
+ }
+ if (zoneIndex >= profession.sizeActivityZone()) {
+ return null;
+ }
+ return profession.getActivityZone().get(zoneIndex);
+ }
}
Modified: trunk/suiviobsmer-ui/src/main/webapp/BoatActivityCalendar.tml
===================================================================
--- trunk/suiviobsmer-ui/src/main/webapp/BoatActivityCalendar.tml 2009-12-16 13:47:02 UTC (rev 124)
+++ trunk/suiviobsmer-ui/src/main/webapp/BoatActivityCalendar.tml 2009-12-16 18:26:29 UTC (rev 125)
@@ -3,7 +3,119 @@
xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd" xmlns:p="tapestry:parameter">
<t:if t:test="activityCalendar">
- <h1>Calendrier d'activité ${activityCalendar.year} du navire ${activityCalendar.boat.name}</h1>
+ <h1>Calendrier d'activité ${activityCalendar.year}</h1>
+
+ <table t:type="grid" id="so-activity-calendar-boat" t:source="boats" t:row="boat"
+ t:include="immatriculation, districtCode, name, boatLength, buildYear" />
+
+ <table id="so-activity-calendar-months">
+ <thead>
+ <tr>
+ <td class="none"> </td>
+ <td t:type="loop" class="month" t:source="1..12" t:value="month">
+ ${monthName}
+ </td>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td class="title">Port exploit.</td>
+ <td t:type="loop" class="month" t:source="1..12" t:value="month">
+ <t:if t:test="activityMonth">
+ <span t:type="ck/Tooltip" title="Libelle"
+ t:value="prop:activityMonth.harbourLibelle" t:effect="appear">
+ ${activityMonth.harbourCode}
+ </span>
+ <p:else> </p:else>
+ </t:if>
+ </td>
+ </tr>
+ <tr>
+ <td class="title">Actif/Inactif</td>
+ <td t:type="loop" class="month" t:source="1..12" t:value="month">
+ <t:if t:test="activityMonth">
+ <t:booleanImage t:value="activityMonth.active" t:trueTitle="Actif" t:falseTitle="Inactif"/>
+ <p:else> </p:else>
+ </t:if>
+ </td>
+ </tr>
+ <tr>
+ <td class="title">Hommes emb.</td>
+ <td t:type="loop" class="month" t:source="1..12" t:value="month">
+ <t:if t:test="activityMonth">
+ ${activityMonth.nbBoardingPersons}
+ <p:else> </p:else>
+ </t:if>
+ </td>
+ </tr>
+ <tr>
+ <td class="title">J. Mer eff.</td>
+ <td t:type="loop" class="month" t:source="1..12" t:value="month">
+ <t:if t:test="activityMonth">
+ ${activityMonth.nbSeaDays}
+ <p:else> </p:else>
+ </t:if>
+ </td>
+ </tr>
+ <tr>
+ <td class="title">J. Pêche eff.</td>
+ <td t:type="loop" class="month" t:source="1..12" t:value="month">
+ <t:if t:test="activityMonth">
+ ${activityMonth.nbFishingDays}
+ <p:else> </p:else>
+ </t:if>
+ </td>
+ </tr>
+ <t:if t:test="hasProfessions()">
+ <t:loop t:source="0..${professionIndexMax}" t:index="professionIndex">
+ <tr class="profession">
+ <td class="title">Métier</td>
+ <td t:type="loop" class="month" t:source="1..12" t:value="month">
+ <t:if t:test="activityProfession">
+ <span t:type="ck/Tooltip" title="Libelle"
+ t:value="prop:activityProfession.libelle" t:effect="appear">
+ ${activityProfession.code}
+ </span>
+ <p:else> </p:else>
+ </t:if>
+ </td>
+ </tr>
+ <tr t:type="loop" t:source="0..${zoneIndexMax}" t:index="zoneIndex">
+ <td class="title">Zone/Grad.</td>
+ <td t:type="loop" class="zone month" t:source="1..12" t:value="month">
+ <t:if t:test="activityZone">
+ <span t:type="ck/Tooltip" title="Libelle"
+ t:value="prop:activityZone.zoneLibelle" t:effect="appear">
+ ${activityZone.zoneCode}
+ </span> |
+ ${activityZone.gradiantLibelle}
+ <p:else> </p:else>
+ </t:if>
+ </td>
+ </tr>
+ </t:loop>
+ </t:if>
+ </tbody>
+ </table>
+
+
+<!-- <p>Fiability : ${activityCalendar.fiability}</p>
+ <div t:type="loop" t:source="activityCalendar.activityMonth" t:value="activityMonth">
+ <p>Month : ${activityMonth.month}</p>
+ <p>Harbour : ${activityMonth.harbourCode} - ${activityMonth.harbourLibelle}</p>
+ <p>Nb Observants : ${activityMonth.nbBoardingPersons}</p>
+ <p>Nb Sea Days : ${activityMonth.nbSeaDays}</p>
+ <p>Nb Fishing Days : ${activityMonth.nbFishingDays}</p>
+ <p>Active : ${activityMonth.active}</p>
+ <div t:type="loop" t:source="activityMonth.activityProfession" t:value="activityProfession">
+ <p>Order : ${activityProfession.professionOrder}</p>
+ <p>Profession : ${activityProfession.code} - ${activityProfession.libelle}</p>
+ <div t:type="loop" t:source="activityProfession.activityZone" t:value="activityZone">
+ <p>Zone : ${activityZone.zoneCode} - ${activityZone.zoneLibelle}</p>
+ <p>Gradiant : ${activityZone.gradiantCode} - ${activityZone.gradiantLibelle}</p>
+ </div>
+ </div>
+ </div>-->
<p:else>
<div class="fb-error">
Aucun calendrier d'activité chargé !
Modified: trunk/suiviobsmer-ui/src/main/webapp/Boats.tml
===================================================================
--- trunk/suiviobsmer-ui/src/main/webapp/Boats.tml 2009-12-16 13:47:02 UTC (rev 124)
+++ trunk/suiviobsmer-ui/src/main/webapp/Boats.tml 2009-12-16 18:26:29 UTC (rev 125)
@@ -233,30 +233,33 @@
</t:if>
</p>
<p class="sep"> </p>
+ <p><label>Embarquements :</label></p>
<p>
<strong>${boatInfos.nbBoarding}</strong> embarquements
dont <strong>${boatInfos.nbBoardingForCompany}</strong> pour votre société
depuis le <strong><t:output value="boatInfos.firstBoardingDate" format="dateFormat" /></strong>
</p>
- <p class="sep"> </p>
- <label>Ligne(s) du plan :</label>
- <ul>
- <li t:type="loop" t:source="companyBoatInfos.elligibleBoatsValues" t:value="elligibleBoat">
- <span t:type="ck/Tooltip" title="Infos" t:value="prop:elligibleRowInfos" t:effect="appear">
- <span class="${elligibleRowClass}">
- ${elligibleBoat.sampleRow.code}
- </span>
- </span>
- <t:if t:test="canCreateNewContactFromElligibleBoat()">
- <a t:type="actionlink" t:id="addNewContactFromSampleRow" t:context="elligibleBoat.sampleRow.code">
- <img src="${asset:context:}/img/contact-22px.png" title="Créer un nouveau contact pour ce navire et cette ligne du plan"/>
- </a>
- </t:if>
- </li>
- </ul>
+ <t:if t:test="companyBoatInfos.elligibleBoatsValues.size()">
+ <p class="sep"> </p>
+ <label>Ligne(s) du plan :</label>
+ <ul>
+ <li t:type="loop" t:source="companyBoatInfos.elligibleBoatsValues" t:value="elligibleBoat">
+ <span t:type="ck/Tooltip" title="Infos" t:value="prop:elligibleRowInfos" t:effect="appear">
+ <span class="${elligibleRowClass}">
+ ${elligibleBoat.sampleRow.code}
+ </span>
+ </span>
+ <t:if t:test="canCreateNewContactFromElligibleBoat()">
+ <a t:type="actionlink" t:id="addNewContactFromSampleRow" t:context="elligibleBoat.sampleRow.code">
+ <img src="${asset:context:}/img/contact-22px.png" title="Créer un nouveau contact pour ce navire et cette ligne du plan"/>
+ </a>
+ </t:if>
+ </li>
+ </ul>
+ </t:if>
<t:if t:test="boatInfos.comment">
<p class="sep"> </p>
- <label>Commentaires : </label>
+ <label>Commentaire : </label>
<p class="comment">${boatInfos.comment}</p>
</t:if>
</div>
Modified: trunk/suiviobsmer-ui/src/main/webapp/css/boats.css
===================================================================
--- trunk/suiviobsmer-ui/src/main/webapp/css/boats.css 2009-12-16 13:47:02 UTC (rev 124)
+++ trunk/suiviobsmer-ui/src/main/webapp/css/boats.css 2009-12-16 18:26:29 UTC (rev 125)
@@ -129,4 +129,69 @@
clear: both;
font-size: 0.8em;
font-weight: bold;
+}
+
+/***** ACTIVITY CALENDAR ******/
+div#so-activity-calendar {
+ width: 80%;
+ margin-left: auto;
+ margin-right: auto;
+ margin-top: 20px;
+}
+
+div#so-activity-calendar h1 {
+ text-align: center;
+}
+
+table#so-activity-calendar-boat {
+ width: 80%;
+ margin-left: auto;
+ margin-right: auto;
+ margin-top: 10px;
+}
+
+table#so-activity-calendar-months {
+ margin-top: 20px;
+ border-collapse: collapse;
+ font-size: 0.8em;
+}
+
+table#so-activity-calendar-months tr,
+table#so-activity-calendar-months td {
+ border: 1px solid silver;
+ padding: 2px;
+}
+
+table#so-activity-calendar-months thead {
+ background-color: #19a28d;
+ color: white;
+ font-weight: bold;
+ padding: 3px;
+ text-align: center;
+}
+
+table#so-activity-calendar-months thead tr {
+ border: 0;
+}
+
+table#so-activity-calendar-months td.none {
+ background-color: white;
+ border: 0;
+}
+
+table#so-activity-calendar-months td.month {
+ width: 200px;
+}
+
+table#so-activity-calendar-months td.title {
+ width: 180px;
+ font-weight: bold;
+}
+
+table#so-activity-calendar-months td.zone {
+ white-space: nowrap;
+}
+
+table#so-activity-calendar-months tr.profession {
+ background-color: silver;
}
\ No newline at end of file
1
0
[Suiviobsmer-commits] r124 - in trunk: suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer suiviobsmer-business/src/main/resources suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/business suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/services suiviobsmer-ui/src/main/resources
by fdesbois@users.labs.libre-entreprise.org 16 Dec '09
by fdesbois@users.labs.libre-entreprise.org 16 Dec '09
16 Dec '09
Author: fdesbois
Date: 2009-12-16 13:47:02 +0000 (Wed, 16 Dec 2009)
New Revision: 124
Modified:
trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/SuiviObsmerContext.java
trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/SuiviObsmerRunner.java
trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/SuiviObsmerRunnerImpl.java
trunk/suiviobsmer-business/src/main/resources/SuiviObsmer.properties
trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/business/SuiviObsmerRunnerTest.java
trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/services/SuiviObsmerManager.java
trunk/suiviobsmer-ui/src/main/resources/log4j.properties
Log:
Change configuration managment to use ApplicationConfig from nuiton-utils
Modified: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/SuiviObsmerContext.java
===================================================================
--- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/SuiviObsmerContext.java 2009-12-15 19:28:04 UTC (rev 123)
+++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/SuiviObsmerContext.java 2009-12-16 13:47:02 UTC (rev 124)
@@ -23,9 +23,6 @@
package fr.ifremer.suiviobsmer;
-import java.io.IOException;
-import java.net.URISyntaxException;
-import java.net.URL;
import java.util.Date;
import java.util.Properties;
import java.util.Random;
@@ -37,7 +34,6 @@
import org.nuiton.topia.TopiaNotFoundException;
import org.nuiton.topia.persistence.TopiaEntity;
import org.nuiton.topia.persistence.TopiaId;
-import org.nuiton.util.Resource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -63,6 +59,9 @@
private static boolean activityCalendarImport;
public static void setRunner(SuiviObsmerRunner run) {
+ if (log.isDebugEnabled()) {
+ log.debug("set runner in context");
+ }
runner = run;
}
@@ -71,7 +70,7 @@
}
public static String getProperty(String key) {
- return runner.configuration().getProperty(key);
+ return runner.configuration().getOption(key);
}
public static TopiaContext getTopiaRootContext() throws SuiviObsmerException {
@@ -79,7 +78,8 @@
throw new SuiviObsmerException("Configuration must be set before initializing context");
}
try {
- return TopiaContextFactory.getContext(runner.configuration());
+ Properties props = runner.configuration().getOptions();
+ return TopiaContextFactory.getContext(props);
} catch (TopiaNotFoundException eee) {
serviceException(null, eee.getMessage(), eee);
}
@@ -94,33 +94,10 @@
return activityCalendarImport;
}
- /**
- * Property file loading
- * @param filename
- * @return
- * @throws java.net.URISyntaxException
- * @throws java.io.IOException
- */
- public static Properties loadConfiguration(String filename)
- throws URISyntaxException, IOException {
- Properties props = new Properties();
- URL url = Resource.getURL(filename);
+ public static void serviceException(TopiaContext transaction, String message, Exception eee) throws SuiviObsmerException {
if (log.isDebugEnabled()) {
- log.debug(url.toString());
+ log.debug("An error occured",eee);
}
- props.load(url.openStream());
- return props;
- //return PropertiesLoader.loadPropertiesFile(filename);
- }
-
- /*public static String convertId(String id) {
- return Convert.toWebId(id);
- }*/
-
- public static void serviceException(TopiaContext transaction, String message, Exception eee) throws SuiviObsmerException {
- if (log.isErrorEnabled()) {
- log.error("An error occured",eee);
- }
if (!(eee instanceof SuiviObsmerException)) {
if (!(eee instanceof TopiaException)) {
try {
Modified: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/SuiviObsmerRunner.java
===================================================================
--- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/SuiviObsmerRunner.java 2009-12-15 19:28:04 UTC (rev 123)
+++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/SuiviObsmerRunner.java 2009-12-16 13:47:02 UTC (rev 124)
@@ -23,6 +23,7 @@
import java.util.Date;
import java.util.Properties;
+import org.nuiton.util.ApplicationConfig;
/**
* SuiviObsmerRun
@@ -43,6 +44,6 @@
public Date currentDate();
- public Properties configuration();
+ public ApplicationConfig configuration();
}
Modified: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/SuiviObsmerRunnerImpl.java
===================================================================
--- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/SuiviObsmerRunnerImpl.java 2009-12-15 19:28:04 UTC (rev 123)
+++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/SuiviObsmerRunnerImpl.java 2009-12-16 13:47:02 UTC (rev 124)
@@ -22,9 +22,8 @@
package fr.ifremer.suiviobsmer;
import java.util.Date;
-import java.util.Properties;
import org.nuiton.topia.TopiaException;
-import org.nuiton.util.Resource;
+import org.nuiton.util.ApplicationConfig;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -43,7 +42,7 @@
private static final Logger log = LoggerFactory.getLogger(SuiviObsmerRunnerImpl.class);
- private Properties _configuration;
+ private ApplicationConfig _configuration;
public SuiviObsmerRunnerImpl() {
}
@@ -51,15 +50,18 @@
@Override
public void start() throws SuiviObsmerException {
try {
- _configuration = Resource.getConfigProperties("SuiviObsmer.properties");
- _configuration.setProperty("topia.persistence.classes",
+ _configuration = new ApplicationConfig();
+ _configuration.setConfigFileName("SuiviObsmer.properties");
+ _configuration.parse(new String[]{});
+ _configuration.setOption("topia.persistence.classes",
SuiviObsmerModelDAOHelper.getImplementationClassesAsString());
-
+
+ _configuration.printConfig();
SuiviObsmerContext.setRunner(this);
SuiviObsmerGlobal.createDefaultAdmin();
} catch (Exception eee) {
SuiviObsmerContext.serviceException(null, "Error during loadConfiguration from " +
- "'TopiaContextSuiviObsmer.properties' file", eee);
+ "'SuiviObsmer.properties' file", eee);
}
}
@@ -78,8 +80,7 @@
}
@Override
- public Properties configuration() {
+ public ApplicationConfig configuration() {
return _configuration;
}
-
}
Modified: trunk/suiviobsmer-business/src/main/resources/SuiviObsmer.properties
===================================================================
--- trunk/suiviobsmer-business/src/main/resources/SuiviObsmer.properties 2009-12-15 19:28:04 UTC (rev 123)
+++ trunk/suiviobsmer-business/src/main/resources/SuiviObsmer.properties 2009-12-16 13:47:02 UTC (rev 124)
@@ -6,7 +6,7 @@
hibernate.connection.username=sa
hibernate.connection.password=
hibernate.connection.driver_class=org.h2.Driver
-hibernate.connection.url=jdbc:h2:file:~/.suiviobsmer/h2data
+hibernate.connection.url=jdbc:h2:file:~/.local/suiviobsmer/h2data
suiviobsmer.log.activityCalendar=log/activity.log
Modified: trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/business/SuiviObsmerRunnerTest.java
===================================================================
--- trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/business/SuiviObsmerRunnerTest.java 2009-12-15 19:28:04 UTC (rev 123)
+++ trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/business/SuiviObsmerRunnerTest.java 2009-12-16 13:47:02 UTC (rev 124)
@@ -34,6 +34,7 @@
import java.util.Properties;
import org.junit.Ignore;
import org.nuiton.topia.TopiaException;
+import org.nuiton.util.ApplicationConfig;
import org.nuiton.util.Resource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -54,7 +55,7 @@
private static final Logger log = LoggerFactory.getLogger(SuiviObsmerRunnerTest.class);
- private Properties _configuration;
+ private ApplicationConfig _configuration;
@Override
public void start() throws SuiviObsmerException {
@@ -62,9 +63,13 @@
log.debug("TEST START : loadConfiguration");
}
try {
- _configuration = loadFileProperties("TopiaContextSuiviObsmer.properties");
- _configuration.setProperty("topia.persistence.classes",
+ Properties options = loadFileProperties("TopiaContextSuiviObsmer.properties");
+ options.setProperty("topia.persistence.classes",
SuiviObsmerModelDAOHelper.getImplementationClassesAsString());
+
+ _configuration = new ApplicationConfig();
+ _configuration.setOptions(options);
+
SuiviObsmerContext.setRunner(this);
} catch (Exception eee) {
SuiviObsmerContext.serviceException(null, "Error during loadConfiguration from " +
@@ -102,7 +107,7 @@
}
@Override
- public Properties configuration() {
+ public ApplicationConfig configuration() {
return _configuration;
}
Modified: trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/services/SuiviObsmerManager.java
===================================================================
--- trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/services/SuiviObsmerManager.java 2009-12-15 19:28:04 UTC (rev 123)
+++ trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/services/SuiviObsmerManager.java 2009-12-16 13:47:02 UTC (rev 124)
@@ -24,11 +24,9 @@
import fr.ifremer.suiviobsmer.SuiviObsmerException;
import fr.ifremer.suiviobsmer.SuiviObsmerRunner;
import fr.ifremer.suiviobsmer.SuiviObsmerRunnerImpl;
-import java.io.IOException;
-import java.net.URISyntaxException;
-import java.util.logging.Level;
-import java.util.logging.Logger;
import org.apache.tapestry5.ioc.services.RegistryShutdownListener;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* SuiviObsmerManager
@@ -43,15 +41,22 @@
*/
public class SuiviObsmerManager implements Runnable, RegistryShutdownListener {
+ private static final Logger log = LoggerFactory.getLogger(SuiviObsmerManager.class);
+
private SuiviObsmerRunner runner;
@Override
public void run() {
runner = new SuiviObsmerRunnerImpl();
try {
+ if (log.isInfoEnabled()) {
+ log.info("Start SuiviObsmer");
+ }
runner.start();
} catch (SuiviObsmerException eee) {
- Logger.getLogger(SuiviObsmerManager.class.getName()).log(Level.SEVERE, null, eee);
+ if (log.isErrorEnabled()) {
+ log.error("Error on start", eee);
+ }
}
}
@@ -60,9 +65,14 @@
// No problem with reinstanciate the runner, all context is in SuiviObsmerContext which is static
runner = new SuiviObsmerRunnerImpl();
try {
+ if (log.isInfoEnabled()) {
+ log.info("Stop SuiviObsmer");
+ }
runner.stop();
} catch (SuiviObsmerException eee) {
- Logger.getLogger(SuiviObsmerManager.class.getName()).log(Level.SEVERE, null, eee);
+ if (log.isErrorEnabled()) {
+ log.error("Error on stop", eee);
+ }
}
}
Modified: trunk/suiviobsmer-ui/src/main/resources/log4j.properties
===================================================================
--- trunk/suiviobsmer-ui/src/main/resources/log4j.properties 2009-12-15 19:28:04 UTC (rev 123)
+++ trunk/suiviobsmer-ui/src/main/resources/log4j.properties 2009-12-16 13:47:02 UTC (rev 124)
@@ -8,7 +8,7 @@
log4j.appender.console.Threshold=INFO
log4j.appender.globalfile=org.apache.log4j.RollingFileAppender
-log4j.appender.globalfile.File=${user.home}/.suiviobsmer/log/suiviobsmer.log
+log4j.appender.globalfile.File=${user.home}/.local/suiviobsmer/log/suiviobsmer.log
log4j.appender.globalfile.MaxFileSize=500KB
log4j.appender.globalfile.Append=true
log4j.appender.globalfile.MaxBackupIndex=10
@@ -21,4 +21,4 @@
log4j.logger.org.apache.tapestry5.TapestryFilter=INFO
log4j.logger.fr.ifremer.suiviobsmer=DEBUG
-log4j.logger.org.nuiton.util=INFO
+log4j.logger.org.nuiton.util=DEBUG
1
0
15 Dec '09
Author: fdesbois
Date: 2009-12-15 19:28:04 +0000 (Tue, 15 Dec 2009)
New Revision: 123
Added:
trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/entity/BoatImplTest.java
Modified:
trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/DataLoader.java
trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/entity/BoatImpl.java
trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/entity/SampleRowImpl.java
trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/ServiceBoatImpl.java
trunk/suiviobsmer-business/src/main/xmi/suiviobsmer.zargo
trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/Boats.java
trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/Contacts.java
trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/services/ContactModelFactory.java
trunk/suiviobsmer-ui/src/main/resources/fr/ifremer/suiviobsmer/ui/pages/Boats.properties
trunk/suiviobsmer-ui/src/main/webapp/Boats.tml
trunk/suiviobsmer-ui/src/main/webapp/Contacts.tml
Log:
- BoatInfos last Contact show
- List for select an observer when editing a contact
- Constraint to create a new contact from boats page
Modified: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/DataLoader.java
===================================================================
--- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/DataLoader.java 2009-12-15 16:03:30 UTC (rev 122)
+++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/DataLoader.java 2009-12-15 19:28:04 UTC (rev 123)
@@ -67,5 +67,10 @@
}
}
}
+
+ public static void loadContactForBoatInfos(Contact contact) {
+ contact.getSampleRow();
+ contact.getUser();
+ }
}
Modified: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/entity/BoatImpl.java
===================================================================
--- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/entity/BoatImpl.java 2009-12-15 16:03:30 UTC (rev 122)
+++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/entity/BoatImpl.java 2009-12-15 19:28:04 UTC (rev 123)
@@ -21,10 +21,14 @@
package fr.ifremer.suiviobsmer.entity;
+import fr.ifremer.suiviobsmer.DataLoader;
import fr.ifremer.suiviobsmer.SuiviObsmerException;
import fr.ifremer.suiviobsmer.SuiviObsmerModelDAOHelper;
import fr.ifremer.suiviobsmer.SuiviObsmerContext;
+import fr.ifremer.suiviobsmer.bean.ContactState;
import java.io.Serializable;
+import java.util.List;
+import org.apache.commons.lang.BooleanUtils;
import org.nuiton.topia.TopiaContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -86,4 +90,89 @@
}
return boatInfos;
}
+
+ /**
+ * Get the last boat contact for the creator company.
+ * No test on contact state is done here.
+ * @param company which is the creator of the contact
+ * @return the last boat contact (opened or not)
+ * @throws SuiviObsmerException
+ */
+ @Override
+ @Deprecated
+ public Contact getLastContact(Company company) throws SuiviObsmerException {
+ TopiaContext transaction = null;
+ Contact contact = null;
+ try {
+ transaction = SuiviObsmerContext.getTopiaRootContext().beginTransaction();
+
+ List results = transaction.find(
+ "FROM ContactImpl C1" +
+ " WHERE C1.user.company = :company AND C1.boat = :boat " +
+ " AND C1.topiaCreateDate = " +
+ " (SELECT MAX(C2.topiaCreateDate) FROM ContactImpl C2" +
+ " WHERE C2.user.company = :company AND C2.boat = C1.boat)",
+ "company", company,
+ "boat", this);
+
+ if (!results.isEmpty()) {
+ contact = (Contact)results.get(0);
+ DataLoader.loadContactForBoatInfos(contact);
+ }
+
+ transaction.closeContext();
+ } catch (Exception eee) {
+ SuiviObsmerContext.serviceException(transaction,
+ "Impossible de récupérer le dernier contact du navire " + this.getImmatriculation() +
+ " pour la société '" + company.getName() + "'",
+ eee);
+ }
+ return contact;
+ }
+
+ /**
+ * Check if a contact for this boat, company and sampleRow can be created.
+ * The state is tested for the last created contact.
+ * A new contact can be created only if the last state is final and is not 'Refus définitif'.
+ * @param company which is the creator of the contact
+ * @param row for the contact to be created
+ * @return true if the contact can be created, false either
+ * @throws SuiviObsmerException
+ */
+ @Override
+ public boolean canCreateContact(Company company, SampleRow row) throws SuiviObsmerException {
+ TopiaContext transaction = null;
+ boolean result = true;
+ try {
+ transaction = SuiviObsmerContext.getTopiaRootContext().beginTransaction();
+
+ List results = transaction.find(
+ "FROM ContactImpl C1" +
+ " WHERE C1.user.company = :company" +
+ " AND C1.boat = :boat AND C1.sampleRow = :row" +
+ " AND C1.topiaCreateDate = " +
+ " (SELECT MAX(C2.topiaCreateDate) FROM ContactImpl C2" +
+ " WHERE C2.user.company = :company AND C2.boat = C1.boat)",
+ "company", company,
+ "boat", this,
+ "row", row);
+
+ if (!results.isEmpty()) {
+ Contact contact = (Contact)results.get(0);
+ boolean validation = contact.getValidationProgram() != null || BooleanUtils.isFalse(contact.getValidationCompany());
+ ContactState state = ContactState.createContactStateEnum(contact.getState());
+ result = validation && !state.equals(ContactState.BOAT_DEFINITIVE_REFUSED);
+ }
+
+ transaction.closeContext();
+ } catch (Exception eee) {
+ SuiviObsmerContext.serviceException(transaction,
+ "Impossible de récupérer les informations privées du navire lié à la société " +
+ "'" + company.getName() + "'",
+ eee);
+ }
+ return result;
+ }
+
+
}
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 2009-12-15 16:03:30 UTC (rev 122)
+++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/entity/SampleRowImpl.java 2009-12-15 19:28:04 UTC (rev 123)
@@ -175,6 +175,9 @@
@Override
public void addRealTideTime(Contact contact) throws SuiviObsmerException {
+ if (contact.getTideEndDate() == null || contact.getTideBeginDate() == null) {
+ return;
+ }
int nbDays = getDifferenceDays(contact);
SampleMonth month = getSampleMonth(contact.getTideBeginDate());
if (log.isDebugEnabled()) {
@@ -186,6 +189,9 @@
@Override
public void removeRealTideTime(Contact contact) throws SuiviObsmerException {
+ if (contact.getTideEndDate() == null || contact.getTideBeginDate() == null) {
+ return;
+ }
int nbDays = getDifferenceDays(contact);
SampleMonth month = getSampleMonth(contact.getTideBeginDate());
if (log.isDebugEnabled()) {
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 2009-12-15 16:03:30 UTC (rev 122)
+++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/ServiceBoatImpl.java 2009-12-15 19:28:04 UTC (rev 123)
@@ -275,7 +275,23 @@
}
}
}
+ // Last contact
+ List results = transaction.find(
+ "FROM ContactImpl C1" +
+ " WHERE C1.user.company = :company AND C1.boat = :boat " +
+ " AND C1.topiaCreateDate = " +
+ " (SELECT MAX(C2.topiaCreateDate) FROM ContactImpl C2" +
+ " WHERE C2.user.company = :company AND C2.boat = C1.boat)",
+ "company", company,
+ "boat", boat);
+ if (!results.isEmpty()) {
+ Contact contact = (Contact)results.get(0);
+ DataLoader.loadContactForBoatInfos(contact);
+ result.setLastContact(contact);
+ }
+
+
transaction.closeContext();
} catch (Exception eee) {
SuiviObsmerContext.serviceException(transaction,
Modified: trunk/suiviobsmer-business/src/main/xmi/suiviobsmer.zargo
===================================================================
(Binary files differ)
Added: trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/entity/BoatImplTest.java
===================================================================
--- trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/entity/BoatImplTest.java (rev 0)
+++ trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/entity/BoatImplTest.java 2009-12-15 19:28:04 UTC (rev 123)
@@ -0,0 +1,220 @@
+
+package fr.ifremer.suiviobsmer.entity;
+
+import fr.ifremer.suiviobsmer.SuiviObsmerContext;
+import fr.ifremer.suiviobsmer.SuiviObsmerModelDAOHelper;
+import fr.ifremer.suiviobsmer.SuiviObsmerRunner;
+import fr.ifremer.suiviobsmer.bean.ContactState;
+import fr.ifremer.suiviobsmer.business.SuiviObsmerRunnerTest;
+import fr.ifremer.suiviobsmer.impl.ServiceBoatImpl;
+import fr.ifremer.suiviobsmer.impl.ServiceContactImpl;
+import fr.ifremer.suiviobsmer.impl.ServiceSamplingImpl;
+import fr.ifremer.suiviobsmer.impl.ServiceUserImpl;
+import fr.ifremer.suiviobsmer.services.ServiceBoat;
+import fr.ifremer.suiviobsmer.services.ServiceContact;
+import fr.ifremer.suiviobsmer.services.ServiceSampling;
+import fr.ifremer.suiviobsmer.services.ServiceUser;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.nuiton.topia.TopiaContext;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * BoatImpl
+ *
+ * Created: 15 déc. 2009
+ *
+ * @author fdesbois
+ * @version $Revision$
+ *
+ * Mise a jour: $Date$
+ * par : $Author$
+ */
+public class BoatImplTest {
+
+ private static SuiviObsmerRunner runner;
+
+ private static final Logger log = LoggerFactory.getLogger(BoatImplTest.class);
+
+ public BoatImplTest() {
+ }
+
+ @BeforeClass
+ public static void setUpClass() throws Exception {
+ runner = new SuiviObsmerRunnerTest();
+ }
+
+ @AfterClass
+ public static void tearDownClass() throws Exception {
+ }
+
+ @Before
+ public void setUp() throws Exception {
+ runner.start();
+ }
+
+ @After
+ public void tearDown() throws Exception {
+ runner.stop();
+ }
+
+ /**
+ * Test of getBoatInfos method, of class BoatImpl.
+ */
+ //@Test
+ public void testGetBoatInfos() throws Exception {
+ System.out.println("getBoatInfos");
+ }
+
+ /**
+ * Test of getLastContact method, of class BoatImpl.
+ */
+ @Test
+ public void testGetLastContact() throws Exception {
+ log.info("getLastContact");
+
+ /** PREPARE DATA **/
+ ServiceUser serviceUser = new ServiceUserImpl();
+ Company company = new CompanyImpl();
+ company.setName("TARTANPION");
+ serviceUser.createUpdateCompany(company);
+ User user = new UserImpl();
+ user.setFirstName("Jean");
+ user.setLastName("Michmuche");
+ user.setCompany(company);
+ serviceUser.createUpdateUser(user, true);
+
+ InputStream input = getClass().getResourceAsStream("/import/navires.csv");
+ ServiceBoat serviceBoat = new ServiceBoatImpl();
+ serviceBoat.importBoatCsv(input);
+ List<Boat> boats = serviceBoat.getBoats("174258");
+ Boat boat = boats.get(0);
+
+ TopiaContext transaction = SuiviObsmerContext.getTopiaRootContext().beginTransaction();
+
+ FishingZoneDAO zoneDAO = SuiviObsmerModelDAOHelper.getFishingZoneDAO(transaction);
+ FishingZone zoneIId = zoneDAO.create(FishingZone.DISTRICT_CODE, "IId");
+ FishingZone zoneIV = zoneDAO.create(FishingZone.DISTRICT_CODE, "IV");
+ FishingZone zoneI = zoneDAO.create(FishingZone.DISTRICT_CODE, "I");
+
+ transaction.commitTransaction();
+
+ ServiceSampling serviceSampling = new ServiceSamplingImpl();
+ input = getClass().getResourceAsStream("/import/echantillonnage.csv");
+ serviceSampling.importSamplingPlanCsv(input);
+
+ SampleRowDAO rowDAO = SuiviObsmerModelDAOHelper.getSampleRowDAO(transaction);
+ SampleRow row = rowDAO.findByCode("2010_1");
+ row.getCompany();
+ row.getProgram();
+ row.getProfession();
+ transaction.closeContext();
+
+ row.setCompany(company);
+ serviceSampling.createUpdateSampleRow(row, boats);
+
+ ServiceContact serviceContact = new ServiceContactImpl();
+ Contact contact1 = serviceContact.getNewContact(user, row, boat);
+ contact1.setState(ContactState.CONTACT_START.toString());
+ serviceContact.saveContact(contact1, false);
+
+ /** EXEC METHOD **/
+ Contact result = boat.getLastContact(company);
+ Assert.assertEquals(contact1.getTopiaId(), result.getTopiaId());
+ }
+
+ /**
+ * Test of canCreateContact method, of class BoatImpl.
+ */
+ @Test
+ public void testCanCreateContact() throws Exception {
+ log.info("canCreateContact");
+ /** PREPARE DATA **/
+ ServiceUser serviceUser = new ServiceUserImpl();
+ Company company = new CompanyImpl();
+ company.setName("TARTANPION");
+ serviceUser.createUpdateCompany(company);
+ User user = new UserImpl();
+ user.setFirstName("Jean");
+ user.setLastName("Michmuche");
+ user.setCompany(company);
+ serviceUser.createUpdateUser(user, true);
+
+ InputStream input = getClass().getResourceAsStream("/import/navires.csv");
+ ServiceBoat serviceBoat = new ServiceBoatImpl();
+ serviceBoat.importBoatCsv(input);
+ List<Boat> boats = serviceBoat.getBoats("174258");
+ Boat boat = boats.get(0);
+
+ TopiaContext transaction = SuiviObsmerContext.getTopiaRootContext().beginTransaction();
+
+ FishingZoneDAO zoneDAO = SuiviObsmerModelDAOHelper.getFishingZoneDAO(transaction);
+ FishingZone zoneIId = zoneDAO.create(FishingZone.DISTRICT_CODE, "IId");
+ FishingZone zoneIV = zoneDAO.create(FishingZone.DISTRICT_CODE, "IV");
+ FishingZone zoneI = zoneDAO.create(FishingZone.DISTRICT_CODE, "I");
+
+ transaction.commitTransaction();
+
+ ServiceSampling serviceSampling = new ServiceSamplingImpl();
+ input = getClass().getResourceAsStream("/import/echantillonnage.csv");
+ serviceSampling.importSamplingPlanCsv(input);
+
+ SampleRowDAO rowDAO = SuiviObsmerModelDAOHelper.getSampleRowDAO(transaction);
+ SampleRow row = rowDAO.findByCode("2010_1");
+ row.getCompany();
+ row.getProgram();
+ row.getProfession();
+ transaction.closeContext();
+
+ row.setCompany(company);
+ serviceSampling.createUpdateSampleRow(row, boats);
+
+ ServiceContact serviceContact = new ServiceContactImpl();
+ Contact contact1 = serviceContact.getNewContact(user, row, boat);
+ contact1.setState(ContactState.CONTACT_START.toString());
+ serviceContact.saveContact(contact1, false);
+
+ /** EXEC METHOD **/
+ boolean result = boat.canCreateContact(company, row);
+ // contact still open
+ Assert.assertFalse(result);
+
+ contact1.setState(ContactState.BOAT_DEFINITIVE_REFUSED.toString());
+ contact1.setValidationProgram(Boolean.TRUE);
+ serviceContact.saveContact(contact1, false);
+
+ result = boat.canCreateContact(company, row);
+ // contact have a definitive refused for this boat
+ Assert.assertFalse(result);
+
+ contact1.setState(ContactState.BOARDING_DONE.toString());
+ serviceContact.saveContact(contact1, false);
+
+ result = boat.canCreateContact(company, row);
+ // contact is finished
+ Assert.assertTrue(result);
+
+ contact1.setState(ContactState.BOAT_UNAVAILABLE.toString());
+ serviceContact.saveContact(contact1, false);
+
+ result = boat.canCreateContact(company, row);
+ // contact is finished
+ Assert.assertTrue(result);
+
+ contact1.setState(ContactState.BOAT_REFUSED.toString());
+ serviceContact.saveContact(contact1, false);
+
+ result = boat.canCreateContact(company, row);
+ // contact is finished
+ Assert.assertTrue(result);
+ }
+
+}
\ No newline at end of file
Property changes on: trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/entity/BoatImplTest.java
___________________________________________________________________
Added: svn:keywords
+ "Author Date Id Revision HeadURL"
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 2009-12-15 16:03:30 UTC (rev 122)
+++ trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/Boats.java 2009-12-15 19:28:04 UTC (rev 123)
@@ -29,6 +29,7 @@
import fr.ifremer.suiviobsmer.bean.CompanyBoatInfos;
import fr.ifremer.suiviobsmer.entity.BoatInfos;
import fr.ifremer.suiviobsmer.entity.Company;
+import fr.ifremer.suiviobsmer.entity.Contact;
import fr.ifremer.suiviobsmer.entity.ElligibleBoat;
import fr.ifremer.suiviobsmer.entity.FishingZone;
import fr.ifremer.suiviobsmer.entity.Profession;
@@ -141,10 +142,6 @@
}
}
-// public User getUser() {
-// return layout.getCurrentUser();
-// }
-
void onActivate(EventContext ec) {
if (ec.getCount() > 0) {
sampleRowCode = ec.get(String.class, 0);
@@ -440,6 +437,13 @@
public DateFormat getDateFormat() {
return new SimpleDateFormat("dd/MM/yyyy");
}
+
+ public boolean canCreateNewContactFromList() throws SuiviObsmerException {
+ if (!user.getAdmin() && isSampleRowExists()) {
+ return boat.canCreateContact(user.getCompany(), getSampleRow());
+ }
+ return false;
+ }
Block onActionFromShowBoatInfos(Integer boatImma) {
boatSelectedImmatriculation = boatImma;
@@ -452,9 +456,6 @@
/**************************** Boat selected Infos *************************/
-// @Persist
-// private BoatInfos boatInfos;
-
@Persist
private CompanyBoatInfos companyBoatInfos;
@@ -486,6 +487,8 @@
/*@Persist
private SuiviObsmerPropertyChangeListener propertyChange;*/
+ /** /////////////////////// GLOBAL TO THE BLOCK /////////////////////// **/
+
public boolean isActivityCalendarImportRun() {
return SuiviObsmerContext.isActivityCalendarImportRun();
}
@@ -501,6 +504,25 @@
return displayBoatInfos;
}
+ public Company getCompany() throws SuiviObsmerException {
+ if (user.getAdmin() && companyId != null) {
+ return getCompanySelectModel().findObject(companyId);
+ }
+ return user.getCompany();
+ }
+
+ public GenericSelectModel<Company> getCompanySelectModel() throws SuiviObsmerException {
+ if (companySelectModel == null) {
+ if (log.isDebugEnabled()) {
+ log.debug("BUSINESS REQUEST [getCompanies]");
+ }
+ List<Company> companies = serviceUser.getCompanies();
+ companySelectModel = new GenericSelectModel<Company>(companies,Company.class,
+ "name","topiaId",propertyAccess);
+ }
+ return companySelectModel;
+ }
+
public CompanyBoatInfos getCompanyBoatInfos() throws SuiviObsmerException {
if (companyBoatInfos == null && boatSelectedImmatriculation != null) {
if (log.isInfoEnabled()) {
@@ -525,6 +547,8 @@
return getCompanyBoatInfos().getBoatInfos();
}
+ /** /////////////////////// FOR EACH ELLIGIBLEBOAT ROW ///////////////// **/
+
public String getElligibleRowInfos() {
return BusinessUtils.getTooltipSampleRow(elligibleBoat.getSampleRow());
}
@@ -533,31 +557,21 @@
return BooleanUtils.isFalse(elligibleBoat.getCompanyActive());
}
+ public boolean canCreateNewContactFromElligibleBoat() throws SuiviObsmerException {
+ if (!user.getAdmin() && !isElligibleBoatCompanyActiveFalse()) {
+ return getBoatInfos().getBoat().canCreateContact(user.getCompany(), elligibleBoat.getSampleRow());
+ }
+ return false;
+ }
+
public String getElligibleRowClass() {
boolean condition1 = elligibleBoat.getCompanyActive() == null && !elligibleBoat.getGlobalActive();
return condition1 || isElligibleBoatCompanyActiveFalse() ? "line-through" : "";
}
- public Company getCompany() throws SuiviObsmerException {
- if (user.getAdmin() && companyId != null) {
- return getCompanySelectModel().findObject(companyId);
- }
- return user.getCompany();
- }
+ /** /////////////////////// ACTIONS //////////////////////////////////// **/
- public GenericSelectModel<Company> getCompanySelectModel() throws SuiviObsmerException {
- if (companySelectModel == null) {
- if (log.isDebugEnabled()) {
- log.debug("BUSINESS REQUEST [getCompanies]");
- }
- List<Company> companies = serviceUser.getCompanies();
- companySelectModel = new GenericSelectModel<Company>(companies,Company.class,
- "name","topiaId",propertyAccess);
- }
- return companySelectModel;
- }
-
Block onSuccessFromCompanySelectForm() throws SuiviObsmerException {
companyBoatInfos = null;
// boatSelectedImmatriculation is getting from Persist("flash")
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 2009-12-15 16:03:30 UTC (rev 122)
+++ trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/Contacts.java 2009-12-15 19:28:04 UTC (rev 123)
@@ -26,19 +26,20 @@
import fr.ifremer.suiviobsmer.entity.Boat;
import fr.ifremer.suiviobsmer.entity.Company;
import fr.ifremer.suiviobsmer.entity.Contact;
-import fr.ifremer.suiviobsmer.entity.SampleMonth;
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.ServiceSampling;
import fr.ifremer.suiviobsmer.ui.base.BusinessUtils;
+import fr.ifremer.suiviobsmer.ui.base.GenericSelectModel;
import fr.ifremer.suiviobsmer.ui.base.SuiviObsmerPage;
import fr.ifremer.suiviobsmer.ui.components.Layout;
import fr.ifremer.suiviobsmer.ui.services.ContactModelFactory;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
+import java.util.List;
import java.util.Map;
import org.apache.commons.lang.BooleanUtils;
import org.apache.commons.lang.StringUtils;
@@ -52,9 +53,9 @@
import org.apache.tapestry5.beaneditor.BeanModel;
import org.apache.tapestry5.corelib.components.Form;
import org.apache.tapestry5.ioc.annotations.Inject;
+import org.apache.tapestry5.ioc.services.PropertyAccess;
import org.apache.tapestry5.services.BeanModelSource;
import org.slf4j.Logger;
-import org.nuiton.util.DateUtils;
/**
* Contacts
@@ -120,6 +121,15 @@
private Contact contact;
private BeanModel<Contact> contactModel;
+
+ @Inject
+ private PropertyAccess propertyAccess;
+
+ private GenericSelectModel<User> userSelectModel;
+
+ @Property
+ @Persist("flash")
+ private String contactUserId;
private ContactState contactState;
@@ -153,6 +163,17 @@
return this.contactState;
}
+ public GenericSelectModel<User> getUserSelectModel() {
+ if (userSelectModel == null) {
+ List<User> users = user.getCompany().getUser();
+ if (log.isDebugEnabled()) {
+ log.debug("Nb users : " + users.size());
+ }
+ userSelectModel = new GenericSelectModel<User>(users, User.class, "fullName", "id", propertyAccess);
+ }
+ return userSelectModel;
+ }
+
public void setContactState(ContactState contactState) {
this.contactState = contactState;
}
@@ -264,7 +285,9 @@
}
}
- void onSelectedFromEditContact(String contactId) {
+ void onSelectedFromEditContact(String contactId) throws SuiviObsmerException {
+ contact = getContacts().get(contactId);
+ contactUserId = contact.getUser().getTopiaId();
editableContactId = contactId;
contactSelectedId = contactId;
contactEdited = true;
@@ -278,6 +301,8 @@
void onSelectedFromSaveContact(String contactId) throws SuiviObsmerException {
contact = getContacts().get(contactId);
contact.setState(contactState.toString());
+ User contactUser = getUserSelectModel().findObject(contactUserId);
+ contact.setUser(contactUser);
contactsForm.clearErrors();
if (!validateState()) {
if (log.isDebugEnabled()) {
Modified: trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/services/ContactModelFactory.java
===================================================================
--- trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/services/ContactModelFactory.java 2009-12-15 16:03:30 UTC (rev 122)
+++ trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/services/ContactModelFactory.java 2009-12-15 19:28:04 UTC (rev 123)
@@ -52,7 +52,7 @@
BeanModel<Contact> contactModel = beanModelSource.createDisplayModel(Contact.class, resources.getMessages());
// New properties for contactModel
- contactModel.add("createdBy", getUserPropertyConduit());
+ contactModel.add("createdBy", null);
contactModel.add("sampleRow", getSampleRowPropertyConduit());
contactModel.add("boat", getBoatPropertyConduit());
contactModel.add("mammals", null);
@@ -79,7 +79,9 @@
public BeanModel<Contact> buildAdminContactModel(BeanModelSource beanModelSource, ComponentResources resources) {
BeanModel<Contact> contactModel = buildContactModel(beanModelSource, resources);
- contactModel.add(RelativePosition.BEFORE, "createdBy", "company", getCompanyPropertyConduit());
+ contactModel.exclude("createdBy");
+ contactModel.add(RelativePosition.AFTER,"topiaCreateDate", "observer", getUserPropertyConduit());
+ contactModel.add(RelativePosition.AFTER, "observer", "company", getCompanyPropertyConduit());
contactModel.add(RelativePosition.AFTER, "sampleRow", "program", getProgramPropertyConduit());
contactModel.add(RelativePosition.AFTER, "program", "professionCode", getProfessionCodePropertyConduit());
contactModel.add(RelativePosition.AFTER, "professionCode", "professionLibelle", getProfessionLibellePropertyConduit());
Modified: trunk/suiviobsmer-ui/src/main/resources/fr/ifremer/suiviobsmer/ui/pages/Boats.properties
===================================================================
--- trunk/suiviobsmer-ui/src/main/resources/fr/ifremer/suiviobsmer/ui/pages/Boats.properties 2009-12-15 16:03:30 UTC (rev 122)
+++ trunk/suiviobsmer-ui/src/main/resources/fr/ifremer/suiviobsmer/ui/pages/Boats.properties 2009-12-15 19:28:04 UTC (rev 123)
@@ -17,8 +17,13 @@
boatLength-label: Longueur
# BOAT INFOS
+topiaCreateDate-label: Date
+state-label: Etat
+createdBy-label: Observateur
+sampleRowCode-label: Code plan
contactFirstName-label: Pr\u00E9nom
contactLastName-label: Nom
contactPhoneNumber-label: T\u00E9l\u00E9phone
contactEmail-label: E-mail
+shipOwner-label: Armateur
dup-label: Capacit\u00E9 d'accueil du navire en personnels sp\u00E9cialis\u00E9s
\ No newline at end of file
Modified: trunk/suiviobsmer-ui/src/main/webapp/Boats.tml
===================================================================
--- trunk/suiviobsmer-ui/src/main/webapp/Boats.tml 2009-12-15 16:03:30 UTC (rev 122)
+++ trunk/suiviobsmer-ui/src/main/webapp/Boats.tml 2009-12-15 19:28:04 UTC (rev 123)
@@ -110,13 +110,11 @@
<div t:type="grid" t:source="boats.values()" t:row="boat"
t:include="name, immatriculation, districtCode, boatLength, buildYear" t:rowClass="prop:rowClass" t:rowsPerPage="20">
<p:nameCell>
- <t:unless t:test="user.admin">
- <t:if t:test="sampleRowExists">
- <a t:type="actionlink" t:id="addNewContactFromBoat" t:context="boat.immatriculation">
- <img src="${asset:context:}/img/contact-22px.png" title="Créer un nouveau contact pour ce navire et la ligne sélectionnée dans les filtres"/>
- </a>
- </t:if>
- </t:unless>
+ <t:if t:test="canCreateNewContactFromList()">
+ <a t:type="actionlink" t:id="addNewContactFromBoat" t:context="boat.immatriculation">
+ <img src="${asset:context:}/img/contact-22px.png" title="Créer un nouveau contact pour ce navire et la ligne sélectionnée dans les filtres"/>
+ </a>
+ </t:if>
<a t:type="actionlink" t:id="showBoatInfos" t:context="boat.immatriculation" t:zone="boatsZone">${boat.name}</a>
</p:nameCell>
<p:boatLengthCell>
@@ -192,24 +190,50 @@
</t:unless>
<!-- BODY - armateur, contact -->
- <fieldset id="so-boats-boat-infos-shipowner">
+<!-- <fieldset id="so-boats-boat-infos-shipowner">
<legend>Armateur</legend>
<div t:type="beandisplay" t:id="boatInfosShipOwner" t:object="boatInfos.boat.shipOwner"
t:include="firstName, lastName" />
- </fieldset>
+ </fieldset>-->
+ <t:if t:test="companyBoatInfos.lastContact">
+ <fieldset id="so-boats-boat-infos-shipowner">
+ <legend>Dernier contact avec le navire</legend>
+ <div t:type="beandisplay" t:id="boatInfosLastContact" t:object="companyBoatInfos.lastContact"
+ t:include="topiaCreateDate, state" t:add="createdBy, sampleRowCode">
+ <p:createdBy>
+ ${companyBoatInfos.lastContact.user.fullName}
+ </p:createdBy>
+ <p:sampleRowCode>
+ ${companyBoatInfos.lastContact.sampleRow.code}
+ </p:sampleRowCode>
+ </div>
+ </fieldset>
+ </t:if>
<fieldset id="so-boats-boat-infos-contact">
<legend>Contact</legend>
<div t:type="beandisplay" t:id="boatInfosContact" t:object="boatInfos"
t:include="contactFirstName, contactLastName, contactPhoneNumber, contactEmail" />
</fieldset>
+
<!-- BODY - autres -->
<fieldset id="so-boats-boat-infos-boarding">
<legend>Autres informations sur le navire</legend>
<div>
- <p><label>${message:dup-label} : </label>${boatInfos.dup}</p>
+ <p>
+ <label>${message:shipOwner-label} : </label>
+ ${boatInfos.boat.shipOwner.firstName} ${boatInfos.boat.shipOwner.lastName}
+ </p>
<p class="sep"> </p>
<p>
+ <label>${message:dup-label} : </label>
+ <t:if t:test="boatInfos.dup">
+ ${boatInfos.dup}
+ <p:else>aucun</p:else>
+ </t:if>
+ </p>
+ <p class="sep"> </p>
+ <p>
<strong>${boatInfos.nbBoarding}</strong> embarquements
dont <strong>${boatInfos.nbBoardingForCompany}</strong> pour votre société
depuis le <strong><t:output value="boatInfos.firstBoardingDate" format="dateFormat" /></strong>
@@ -223,13 +247,11 @@
${elligibleBoat.sampleRow.code}
</span>
</span>
- <t:unless t:test="user.admin">
- <t:unless t:test="elligibleBoatCompanyActiveFalse">
- <a t:type="actionlink" t:id="addNewContactFromSampleRow" t:context="elligibleBoat.sampleRow.code">
- <img src="${asset:context:}/img/contact-22px.png" title="Créer un nouveau contact pour ce navire et cette ligne du plan"/>
- </a>
- </t:unless>
- </t:unless>
+ <t:if t:test="canCreateNewContactFromElligibleBoat()">
+ <a t:type="actionlink" t:id="addNewContactFromSampleRow" t:context="elligibleBoat.sampleRow.code">
+ <img src="${asset:context:}/img/contact-22px.png" title="Créer un nouveau contact pour ce navire et cette ligne du plan"/>
+ </a>
+ </t:if>
</li>
</ul>
<t:if t:test="boatInfos.comment">
Modified: trunk/suiviobsmer-ui/src/main/webapp/Contacts.tml
===================================================================
--- trunk/suiviobsmer-ui/src/main/webapp/Contacts.tml 2009-12-15 16:03:30 UTC (rev 122)
+++ trunk/suiviobsmer-ui/src/main/webapp/Contacts.tml 2009-12-15 19:28:04 UTC (rev 123)
@@ -8,6 +8,12 @@
<t:errors id="so-contact-form-errors" t:banner="message:contactsForm-errors-banner"/>
<div t:type="grid" t:source="contacts.values()" t:row="contact" class="t-data-grid ${gridClass}" t:model="contactModel" t:rowClass="prop:rowClass"
t:rowsPerPage="20">
+ <p:createdByCell>
+ <t:if t:test="editionMode">
+ <input t:type="select" t:model="userSelectModel" t:validate="required" t:value="contactUserId"/>
+ <p:else>${contact.user.fullName}</p:else>
+ </t:if>
+ </p:createdByCell>
<p:sampleRowCell>
<span t:type="ck/Tooltip" title="Infos" t:value="prop:sampleRowDescription" t:effect="appear">
${contact.sampleRow.code}
1
0
15 Dec '09
Author: fdesbois
Date: 2009-12-15 16:03:30 +0000 (Tue, 15 Dec 2009)
New Revision: 122
Added:
trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/ContactState.java
Removed:
trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/DateUtils.java
trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/PeriodDates.java
Modified:
trunk/pom.xml
trunk/suiviobsmer-business/pom.xml
trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/entity/SampleMonthImpl.java
trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/entity/SampleRowImpl.java
trunk/suiviobsmer-business/src/main/xmi/suiviobsmer.zargo
trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/entity/SampleRowImplTest.java
trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/Contacts.java
trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/SampleRowForm.java
trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/SamplingPlan.java
trunk/suiviobsmer-ui/src/main/resources/fr/ifremer/suiviobsmer/ui/pages/Contacts.properties
trunk/suiviobsmer-ui/src/main/webapp/Contacts.tml
trunk/suiviobsmer-ui/src/main/webapp/css/contacts.css
trunk/suiviobsmer-ui/src/main/webapp/js/dialog.js
Log:
- Use DateUtils and PeriodDates from Nuiton-utils 1.1.2-SNAPSHOT
- Refactor ContactState to use it properly in UI + Add state managment in contact form
- Add calcul for realTidesTime
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2009-12-15 10:16:12 UTC (rev 121)
+++ trunk/pom.xml 2009-12-15 16:03:30 UTC (rev 122)
@@ -238,7 +238,7 @@
<labs.id>154</labs.id>
<!-- libraries version -->
- <nuitonutils.version>1.1.1</nuitonutils.version>
+ <nuitonutils.version>1.1.2-SNAPSHOT</nuitonutils.version>
<topia.version>2.3.0-beta-2-SNAPSHOT</topia.version>
<license.version>2.0.0</license.version>
<helper.version>1.1.0</helper.version>
Modified: trunk/suiviobsmer-business/pom.xml
===================================================================
--- trunk/suiviobsmer-business/pom.xml 2009-12-15 10:16:12 UTC (rev 121)
+++ trunk/suiviobsmer-business/pom.xml 2009-12-15 16:03:30 UTC (rev 122)
@@ -27,6 +27,10 @@
<artifactId>commons-io</artifactId>
</dependency>
<dependency>
+ <groupId>org.nuiton</groupId>
+ <artifactId>nuiton-utils</artifactId>
+ </dependency>
+ <dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
Deleted: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/DateUtils.java
===================================================================
--- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/DateUtils.java 2009-12-15 10:16:12 UTC (rev 121)
+++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/DateUtils.java 2009-12-15 16:03:30 UTC (rev 122)
@@ -1,113 +0,0 @@
-package fr.ifremer.suiviobsmer;
-
-/**
- * *##%
- * SuiviObsmer Business
- * Copyright (C) 2009 Ifremer
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/gpl-3.0.html>.
- * ##%*
- */
-
-
-
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.GregorianCalendar;
-
-/**
- * DateUtils.java
- *
- * @author fdesbois
- * @version $Revision$
- *
- * Last update: $Date$
- * by : $Author$
- */
-public class DateUtils {
-
- //private static SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd/MM/yyyy");
-
- public static final String DEFAULT_PATTERN = "dd/MM/yyyy";
-
- public static final String MONTH_PATTERN = "MM/yyyy";
-
- public static String formatDate(Date date, String pattern)
- {
- SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
- return simpleDateFormat.format(date);
- }
-
- public static Date parseDate(String date, String pattern) {
- SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
- Date result = null;
- try {
- result = simpleDateFormat.parse(date);
- } catch (ParseException eee) {
- }
- return result;
- }
-
- public static Date createDate(int dd, int mm, int yy) {
- Calendar calendar = new GregorianCalendar(yy,mm-1,dd);
- return calendar.getTime();
- }
-
- public static Date createDateAfterToday(int ddStep, int mmStep, int yyStep) {
- Calendar calendar = new GregorianCalendar();
- calendar.setTime(new Date());
- calendar.add(Calendar.DAY_OF_MONTH, ddStep);
- calendar.add(Calendar.MONTH,mmStep);
- calendar.add(Calendar.YEAR, yyStep);
- return calendar.getTime();
- }
-
- public static Date setLastDayOfMonth(Date date) {
- Calendar calendar = new GregorianCalendar();
- calendar.setTime(date);
- int maximum = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
- calendar.set(Calendar.DAY_OF_MONTH, maximum);
- return calendar.getTime();
- }
-
- public static Date setFirstDayOfMonth(Date date) {
- Calendar calendar = new GregorianCalendar();
- calendar.setTime(date);
- calendar.set(Calendar.DAY_OF_MONTH, 1);
- return calendar.getTime();
- }
-
- public static boolean between(Date myDate, Date beforeDate, Date afterDate) {
- if (myDate == null) {
- return false;
- }
- boolean result = true;
- result &= myDate.after(beforeDate) || myDate.equals(beforeDate);
- result &= afterDate == null || myDate.before(afterDate) || myDate.equals(afterDate);
- return result;
- }
-
- public static boolean currentPeriod(Date beforeDate, Date afterDate) {
- return between(new Date(), beforeDate, afterDate);
- }
-
- public static int getMonth(Date date) {
- Calendar calendar = new GregorianCalendar();
- calendar.setTime(date);
- return calendar.get(Calendar.MONTH);
- }
-}
Deleted: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/PeriodDates.java
===================================================================
--- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/PeriodDates.java 2009-12-15 10:16:12 UTC (rev 121)
+++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/PeriodDates.java 2009-12-15 16:03:30 UTC (rev 122)
@@ -1,216 +0,0 @@
-package fr.ifremer.suiviobsmer;
-
-/**
- * *##%
- * SuiviObsmer Business
- * Copyright (C) 2009 Ifremer
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/gpl-3.0.html>.
- * ##%*
- */
-
-
-
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.GregorianCalendar;
-import java.util.List;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-/**
- * PeriodDates.java
- *
- * Created on 2009-08-13
- *
- * @author fdesbois
- * @version $Revision$
- *
- * Last update: $Date$
- * by : $Author$
- */
-public class PeriodDates {
-
- private static final Log log = LogFactory.getLog(PeriodDates.class);
-
- private String pattern;
-
- private Date fromDate;
-
- private Calendar fromCalendar;
-
- private Date thruDate;
-
- private Calendar thruCalendar;
-
- public PeriodDates() {
- }
-
- public PeriodDates(Date fromDate, Date thruDate) {
- this.fromCalendar = new GregorianCalendar();
- setFromDate(fromDate);
-
- this.thruCalendar = new GregorianCalendar();
- setThruDate(thruDate);
-
- this.pattern = DateUtils.DEFAULT_PATTERN;
- }
-
- public PeriodDates(Calendar fromCalendar, Calendar thruCalendar) {
- this.fromDate = fromCalendar.getTime();
- this.fromCalendar = fromCalendar;
-
- this.thruDate = thruCalendar.getTime();
- this.thruCalendar = thruCalendar;
-
- this.pattern = DateUtils.DEFAULT_PATTERN;
- }
-
- public static PeriodDates createMonthsPeriodFromToday(int monthAfter) {
- Calendar calendarFrom = new GregorianCalendar();
- Calendar calendarThru = new GregorianCalendar();
-
- calendarFrom.set(Calendar.DAY_OF_MONTH, 1);
- calendarFrom.set(Calendar.AM_PM, Calendar.AM);
- calendarFrom.set(Calendar.HOUR, 0);
- calendarFrom.set(Calendar.MINUTE, 0);
- calendarFrom.set(Calendar.SECOND, 0);
- calendarFrom.set(Calendar.MILLISECOND, 0);
-
- calendarThru.setTime(calendarFrom.getTime());
- calendarThru.add(Calendar.MONTH, monthAfter);
- int maximum = calendarThru.getActualMaximum(Calendar.DAY_OF_MONTH);
- calendarThru.set(Calendar.DAY_OF_MONTH, maximum);
-
- PeriodDates period = new PeriodDates(calendarFrom, calendarThru);
- period.setPattern(DateUtils.MONTH_PATTERN);
- return period;
- }
-
- public String getPattern() {
- return pattern;
- }
-
- public void setPattern(String pattern) {
- this.pattern = pattern;
- }
-
- public void setFromDate(Date fromDate) {
- this.fromDate = fromDate;
- if (fromDate != null) {
- if (fromCalendar == null) {
- fromCalendar = new GregorianCalendar();
- }
- this.fromCalendar.setTime(fromDate);
- } else {
- this.fromCalendar = null;
- }
- }
-
- public Date getFromDate() {
- return this.fromDate;
- }
-
- public int getFromMonth() {
- return this.fromCalendar.get(Calendar.MONTH);
- }
-
- public void setThruDate(Date thruDate) {
- this.thruDate = thruDate;
- if (thruDate != null) {
- if (thruCalendar == null) {
- thruCalendar = new GregorianCalendar();
- }
- this.thruCalendar.setTime(thruDate);
- } else {
- this.thruCalendar = null;
- }
- }
-
- public Date getThruDate() {
- return this.thruDate;
- }
-
- public List<Date> getMonths() {
- List<Date> months = new ArrayList<Date>();
- if (fromCalendar == null || thruCalendar == null) {
- return months;
- }
-
- /*int mFrom = fromCalendar.get(Calendar.MONTH);
- int mThru = thruCalendar.get(Calendar.MONTH);
- int yFrom = fromCalendar.get(Calendar.YEAR);
- int yThru = thruCalendar.get(Calendar.YEAR);
-
- int nbYears = yThru - yFrom;
- int monthRatio = nbYears * 12;
-
- int y = yFrom;
- for(int i = mFrom; i <= mThru + monthRatio; i++) {
- Calendar result = new GregorianCalendar(y, i%12, 1);
- months.add(result.getTime());
- if (i != 0 && i%11 == 0) {
- y++;
- }
- }*/
-
- Calendar current = (Calendar) fromCalendar.clone();
- current.set(Calendar.DAY_OF_MONTH, 1);
- Calendar end = (Calendar) thruCalendar.clone();
- end.set(Calendar.DAY_OF_MONTH, 1);
- while (!current.equals(end)) {
- months.add(current.getTime());
- current.add(Calendar.MONTH, 1);
- }
- months.add(current.getTime());
-
- return months;
- }
-
- public List<String> getFormatedMonths() {
- List<String> results = new ArrayList<String>();
- for (Date date : getMonths()) {
- String str = DateUtils.formatDate(date, pattern);
- results.add(str);
- }
- return results;
- }
-
- public boolean beforeEnd(Calendar calendar) {
- return calendar.before(thruCalendar) || calendar.equals(thruCalendar);
- }
-
- public boolean afterEnd(Calendar calendar) {
- return calendar.after(thruCalendar);
- }
-
- public boolean afterBegin(Calendar calendar) {
- return calendar.after(fromCalendar) || calendar.equals(fromCalendar);
- }
-
- public boolean between(Calendar calendar) {
- return beforeEnd(calendar) && afterBegin(calendar);
- }
-
-
- @Override
- public String toString() {
- String fromStr = DateUtils.formatDate(fromDate, pattern);
- String thruStr = DateUtils.formatDate(thruDate, pattern);
- return "[ " + fromDate + " (pattern: " + fromStr + ") -> " + thruDate + " (pattern: " + thruStr + ") ]";
- }
-
-}
Added: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/ContactState.java
===================================================================
--- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/ContactState.java (rev 0)
+++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/ContactState.java 2009-12-15 16:03:30 UTC (rev 122)
@@ -0,0 +1,92 @@
+/*
+ * *##%
+ * SuiviObsmer Business
+ * Copyright (C) 2009 Ifremer
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Lesser Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/gpl-3.0.html>.
+ * ##%*
+ */
+
+package fr.ifremer.suiviobsmer.bean;
+
+import fr.ifremer.suiviobsmer.bean.states.*;
+
+/**
+ * ContactState
+ *
+ * Created: 3 déc. 2009
+ *
+ * @author fdesbois
+ * @version $Revision$
+ *
+ * Mise a jour: $Date$
+ * par : $Author: fdesbois $
+ */
+public enum ContactState {
+ CONTACT_START("Contact pris", false, false),
+
+ BOARDING_EXPECTED("Embarquement prévu", false, false),
+
+ BOARDING_DONE("Embarquement réalisé", true, false),
+
+ BOAT_UNAVAILABLE("Non abouti", true, true),
+
+ BOAT_REFUSED("Refus", true ,true),
+
+ BOAT_DEFINITIVE_REFUSED("Refus définitif", true, true);
+
+ private String value;
+
+ private boolean finalState;
+
+ private boolean unfinishedState;
+
+ ContactState(String value, boolean finalState, boolean unfinishedState) {
+ this.value = value;
+ this.finalState = finalState;
+ this.unfinishedState = unfinishedState;
+ }
+
+ @Override
+ public String toString() {
+ return this.value;
+ }
+
+ public boolean isFinalState() {
+ return this.finalState;
+ }
+
+ public boolean isUnfinishedState() {
+ return this.unfinishedState;
+ }
+
+ public static ContactState createContactStateEnum(String value) {
+ if (value.equals(CONTACT_START.toString())) {
+ return CONTACT_START;
+ } else if (value.equals(BOARDING_EXPECTED.toString())) {
+ return BOARDING_EXPECTED;
+ } else if (value.equals(BOARDING_DONE.toString())) {
+ return BOARDING_DONE;
+ } else if (value.equals(BOAT_UNAVAILABLE.toString())) {
+ return BOAT_UNAVAILABLE;
+ } else if (value.equals(BOAT_REFUSED.toString())) {
+ return BOAT_REFUSED;
+ } else if (value.equals(BOAT_DEFINITIVE_REFUSED.toString())) {
+ return BOAT_DEFINITIVE_REFUSED;
+ }
+ return null;
+ }
+
+}
Property changes on: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/ContactState.java
___________________________________________________________________
Added: svn:keywords
+ "Author Date Id Revision HeadURL"
Modified: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/entity/SampleMonthImpl.java
===================================================================
--- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/entity/SampleMonthImpl.java 2009-12-15 10:16:12 UTC (rev 121)
+++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/entity/SampleMonthImpl.java 2009-12-15 16:03:30 UTC (rev 122)
@@ -21,10 +21,14 @@
package fr.ifremer.suiviobsmer.entity;
+import fr.ifremer.suiviobsmer.SuiviObsmerContext;
+import fr.ifremer.suiviobsmer.SuiviObsmerException;
+import fr.ifremer.suiviobsmer.SuiviObsmerModelDAOHelper;
import java.io.Serializable;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
+import org.nuiton.topia.TopiaContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -53,4 +57,42 @@
setPeriodYear(calendar.get(Calendar.YEAR));
}
+ /**
+ * Method could be use to add some time for realTidesValue or
+ * remove time with a negative nbDays.
+ * If nbDays is negative and superior to the current value,
+ * the real tides value will be set to 0.
+ * @param nbDays to add or remove (if negative)
+ * @throws SuiviObsmerException for saving problem
+ */
+ @Override
+ public void addRealTideTime(int nbDays) throws SuiviObsmerException {
+ int result = getRealTidesValue() + nbDays;
+ if (result < 0) {
+ result = 0;
+ }
+ TopiaContext transaction = null;
+ try {
+ transaction = SuiviObsmerContext.getTopiaRootContext().beginTransaction();
+
+ // sux this.setTopiaContext(transaction) not allowed...
+// this.setTopiaContext(transaction);
+// setRealTidesValue(result);
+
+ SampleMonthDAO dao = SuiviObsmerModelDAOHelper.getSampleMonthDAO(transaction);
+ SampleMonth month = dao.findByTopiaId(this.getTopiaId());
+ month.setRealTidesValue(result);
+ if (log.isDebugEnabled()) {
+ log.debug("Change realTideTime from " + getRealTidesValue() + " to " + result);
+ }
+
+ transaction.commitTransaction();
+ transaction.closeContext();
+ } catch (Exception eee) {
+ SuiviObsmerContext.serviceException(transaction,
+ "Impossible d'enregistrer le nombre de marées réels pour le mois de " +
+ this.getPeriodMonth() + "/" + this.getPeriodYear() + " [ligne : " + this.getSampleRow().getCode() + "]", eee);
+ }
+ }
+
}
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 2009-12-15 10:16:12 UTC (rev 121)
+++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/entity/SampleRowImpl.java 2009-12-15 16:03:30 UTC (rev 122)
@@ -21,12 +21,14 @@
package fr.ifremer.suiviobsmer.entity;
+import fr.ifremer.suiviobsmer.SuiviObsmerException;
import java.io.Serializable;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Iterator;
import java.util.List;
+import org.nuiton.util.DateUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -171,4 +173,33 @@
return false;
}
+ @Override
+ public void addRealTideTime(Contact contact) throws SuiviObsmerException {
+ int nbDays = getDifferenceDays(contact);
+ SampleMonth month = getSampleMonth(contact.getTideBeginDate());
+ if (log.isDebugEnabled()) {
+ log.debug("Add tide time " + nbDays + " for " +
+ month.getPeriodMonth() + "/" + month.getPeriodYear() + " [" + this.getCode() + "]");
+ }
+ month.addRealTideTime(nbDays);
+ }
+
+ @Override
+ public void removeRealTideTime(Contact contact) throws SuiviObsmerException {
+ int nbDays = getDifferenceDays(contact);
+ SampleMonth month = getSampleMonth(contact.getTideBeginDate());
+ if (log.isDebugEnabled()) {
+ log.debug("Remove tide time " + nbDays + " for " +
+ month.getPeriodMonth() + "/" + month.getPeriodYear() + " [" + this.getCode() + "]");
+ }
+ month.addRealTideTime(-nbDays);
+ }
+
+ protected int getDifferenceDays(Contact contact) {
+ int nbDays = DateUtils.getDifferenceInDays(contact.getTideBeginDate(), contact.getTideEndDate());
+ // difference nbDays + 1 for the first day
+ nbDays++;
+ return nbDays;
+ }
+
}
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 2009-12-15 10:16:12 UTC (rev 121)
+++ trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/entity/SampleRowImplTest.java 2009-12-15 16:03:30 UTC (rev 122)
@@ -26,6 +26,7 @@
import fr.ifremer.suiviobsmer.SuiviObsmerRunner;
import fr.ifremer.suiviobsmer.SuiviObsmerContext;
import fr.ifremer.suiviobsmer.business.SuiviObsmerRunnerTest;
+import java.util.Date;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
@@ -33,6 +34,7 @@
import org.junit.Test;
import org.nuiton.topia.TopiaContext;
import org.nuiton.topia.TopiaException;
+import org.nuiton.util.DateUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import static org.junit.Assert.*;
@@ -76,24 +78,14 @@
runner.stop();
}
-
- /**
- * Test of getSampleMonth method, of class SampleRowImpl.
- * @throws SuiviObsmerException
- * @throws TopiaException
- */
- @Test
- public void testGetSampleMonth() throws SuiviObsmerException, TopiaException {
- log.info("getSampleMonth");
-
- /** PREPARE DATA **/
+ private SampleRow prepareData() throws SuiviObsmerException, TopiaException {
TopiaContext transaction = SuiviObsmerContext.getTopiaRootContext().beginTransaction();
SampleRowDAO dao = SuiviObsmerModelDAOHelper.getSampleRowDAO(transaction);
SampleRow row = dao.create();
row.setCode("2010_1");
-
+
SampleMonthDAO monthDAO = SuiviObsmerModelDAOHelper.getSampleMonthDAO(transaction);
SampleMonth month = monthDAO.create(SampleMonth.SAMPLE_ROW, row);
@@ -101,12 +93,34 @@
month.setPeriodYear(2009);
row.addSampleMonth(month);
- transaction.commitTransaction();
-
- /** EXEC METHOD **/
+ transaction.commitTransaction();
SampleRow myRow = dao.findByCode("2010_1");
transaction.closeContext();
-
+ return myRow;
+ }
+
+ private SampleRow getRowFromContext() throws SuiviObsmerException, TopiaException {
+ TopiaContext transaction = SuiviObsmerContext.getTopiaRootContext().beginTransaction();
+ SampleRowDAO dao = SuiviObsmerModelDAOHelper.getSampleRowDAO(transaction);
+ SampleRow resultRow = dao.findByCode("2010_1");
+ transaction.closeContext();
+ return resultRow;
+ }
+
+
+ /**
+ * Test of getSampleMonth method, of class SampleRowImpl.
+ * @throws SuiviObsmerException
+ * @throws TopiaException
+ */
+ @Test
+ public void testGetSampleMonth() throws SuiviObsmerException, TopiaException {
+ log.info("getSampleMonth");
+
+ /** PREPARE DATA **/
+ SampleRow myRow = prepareData();
+
+ /** EXEC METHOD **/
SampleMonth res = myRow.getSampleMonth(4, 2009);
assertNotNull(res);
@@ -114,4 +128,66 @@
assertNull(res);
}
+ @Test
+ public void testAddRealTideTime() throws Exception {
+ log.info("addRealTideTime");
+
+ /** PREPARE DATA **/
+ SampleRow row = prepareData();
+
+ Contact contact = new ContactImpl();
+ Date beginDate = DateUtils.createDate(12, 4, 2009);
+ Date endDate = DateUtils.createDate(12, 4, 2009);
+ contact.setTideBeginDate(beginDate);
+ contact.setTideEndDate(endDate);
+
+ /** EXEC METHOD **/
+ row.addRealTideTime(contact);
+ SampleMonth result = getRowFromContext().getSampleMonth(beginDate);
+ assertEquals(1, result.getRealTidesValue());
+
+ // Reinit result for next test
+ result.addRealTideTime(-1);
+
+ // Test with a more than one day interval dates from contact
+ endDate = DateUtils.createDate(18, 4, 2009);
+ contact.setTideEndDate(endDate);
+
+ getRowFromContext().addRealTideTime(contact);
+ result = getRowFromContext().getSampleMonth(beginDate);
+ assertEquals(7, result.getRealTidesValue());
+ }
+
+ @Test
+ public void testRemoveRealTideTime() throws Exception {
+ log.info("addRealTideTime");
+
+ /** PREPARE DATA **/
+ SampleRow row = prepareData();
+
+ Contact contact = new ContactImpl();
+ Date beginDate = DateUtils.createDate(12, 4, 2009);
+ Date endDate = DateUtils.createDate(12, 4, 2009);
+ contact.setTideBeginDate(beginDate);
+ contact.setTideEndDate(endDate);
+
+ /** EXEC METHOD **/
+ row.removeRealTideTime(contact);
+ SampleMonth result = getRowFromContext().getSampleMonth(beginDate);
+ // result stay at 0, can't remove 1 day from 0
+ assertEquals(0, result.getRealTidesValue());
+
+ // Reinit result for next test
+ result.addRealTideTime(12);
+
+ // Test with a more than one day interval dates from contact
+ endDate = DateUtils.createDate(18, 4, 2009);
+ contact.setTideEndDate(endDate);
+
+ getRowFromContext().removeRealTideTime(contact);
+ result = getRowFromContext().getSampleMonth(beginDate);
+ // result put to 5 : 12 - 7 (diff)
+ assertEquals(5, result.getRealTidesValue());
+ }
+
}
\ No newline at end of file
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 2009-12-15 10:16:12 UTC (rev 121)
+++ trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/Contacts.java 2009-12-15 16:03:30 UTC (rev 122)
@@ -22,10 +22,11 @@
package fr.ifremer.suiviobsmer.ui.pages;
import fr.ifremer.suiviobsmer.SuiviObsmerException;
-import fr.ifremer.suiviobsmer.bean.states.ContactStateEnum;
+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.SampleMonth;
import fr.ifremer.suiviobsmer.entity.SampleRow;
import fr.ifremer.suiviobsmer.entity.User;
import fr.ifremer.suiviobsmer.services.ServiceBoat;
@@ -37,26 +38,23 @@
import fr.ifremer.suiviobsmer.ui.services.ContactModelFactory;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.List;
+import java.util.Date;
import java.util.Map;
import org.apache.commons.lang.BooleanUtils;
+import org.apache.commons.lang.StringUtils;
import org.apache.tapestry5.ComponentResources;
-import org.apache.tapestry5.EventContext;
-import org.apache.tapestry5.OptionModel;
-import org.apache.tapestry5.SelectModel;
+import org.apache.tapestry5.Field;
import org.apache.tapestry5.annotations.IncludeStylesheet;
import org.apache.tapestry5.annotations.InjectComponent;
-import org.apache.tapestry5.annotations.Log;
import org.apache.tapestry5.annotations.Persist;
import org.apache.tapestry5.annotations.Property;
import org.apache.tapestry5.annotations.SessionState;
import org.apache.tapestry5.beaneditor.BeanModel;
-import org.apache.tapestry5.internal.OptionModelImpl;
-import org.apache.tapestry5.internal.SelectModelImpl;
+import org.apache.tapestry5.corelib.components.Form;
import org.apache.tapestry5.ioc.annotations.Inject;
import org.apache.tapestry5.services.BeanModelSource;
import org.slf4j.Logger;
+import org.nuiton.util.DateUtils;
/**
* Contacts
@@ -99,75 +97,11 @@
@Persist("flash")
private String editableContactId;
- @Property
- private String sampleRowId;
-
- @Property
- private String boatId;
-
void setupRender() throws SuiviObsmerException {
contacts = null;
getContacts();
}
- void onActivate(EventContext ec) {
- if (ec.getCount() > 0) {
- boatId = ec.get(String.class, 0);
- if (ec.getCount() > 1) {
- sampleRowId = ec.get(String.class, 1);
- }
- }
- }
-
- Object[] onPassivate() {
- return new String[] {boatId, sampleRowId};
- }
-
- /**************************** NEW CONTACT *********************************/
-
- private Contact newContact;
-
- private Boat boat;
-
- private SampleRow sampleRow;
-
- public Boat getBoat() throws SuiviObsmerException {
- if (boat == null && boatId != null) {
- boat = serviceBoat.getBoat(boatId);
- }
- return boat;
- }
-
- public SampleRow getSampleRow() throws SuiviObsmerException {
- if (sampleRow == null && sampleRowId != null) {
- sampleRow = serviceSampling.getSampleRow(sampleRowId);
- }
- return sampleRow;
- }
-
- public Contact getNewContact() throws SuiviObsmerException {
- if (newContact == null) {
- newContact = serviceContact.getNewContact(user, getSampleRow(), getBoat());
- }
- return newContact;
- }
-
- public boolean isSampleRowExists() {
- return sampleRowId != null;
- }
-
- public boolean isBoatExists() {
- return boatId != null;
- }
-
- public boolean canCreate() {
- return isSampleRowExists() && isBoatExists();
- }
-
- void onSelectedFromAddContact() {
- contact = newContact;
- }
-
/**************************** CONTACT LIST ********************************/
@Inject
@@ -186,13 +120,11 @@
private Contact contact;
private BeanModel<Contact> contactModel;
+
+ private ContactState contactState;
- private SelectModel stateSelectModel;
-
private boolean even = true;
-// private ContactContext contactContext;
-
public Map<String, Contact> getContacts() throws SuiviObsmerException {
if (contacts == null) {
if (log.isInfoEnabled()) {
@@ -213,28 +145,18 @@
return contactModel;
}
-// public ContactContext getContactContext() throws ContactStateException {
-// if (contactContext == null) {
-// contactContext = new ContactContextImpl(contact);
-// }
-// return contactContext;
-// }
-//
-// public List<ContactStateEnum> getContactStateAvailables() throws ContactStateException {
-// return getContactContext().getAvailableNextStatesAsEnum();
-// }
-
- public SelectModel getStateSelectModel() {
- if (stateSelectModel == null) {
- List<OptionModel> options = new ArrayList<OptionModel>();
- for (ContactStateEnum state : ContactStateEnum.values()) {
- options.add(new OptionModelImpl(state.getStringValue(), state.getStringValue()));
- }
- stateSelectModel = new SelectModelImpl(null, options);
+ public ContactState getContactState() {
+ if (contactState == null) {
+ // initialization
+ this.contactState = ContactState.createContactStateEnum(contact.getState());
}
- return stateSelectModel;
+ return this.contactState;
}
+ public void setContactState(ContactState contactState) {
+ this.contactState = contactState;
+ }
+
public String getSampleRowDescription() {
return BusinessUtils.getTooltipSampleRow(contact.getSampleRow());
}
@@ -275,25 +197,26 @@
/**************************** CONTACT ROW ACTION **************************/
+ /**
+ * Flag to know if it's only edition (=true) or save action (=false)
+ */
private boolean contactEdited;
private boolean contactDeleted;
public boolean hasActions() {
- // pour un non admin : affichage si aucune des deux validations ont été effectuées
+ return !user.getAdmin() && contact.getValidationCompany() == null;
+ }
+
+ public boolean canValidate() {
+ ContactState state = ContactState.createContactStateEnum(contact.getState());
+ boolean boardingDone = state.equals(ContactState.BOARDING_DONE) && contact.getDataInputDate() != null;
if (!user.getAdmin()) {
- return contact.getValidationCompany() == null &&
- contact.getValidationProgram() == null;
+ return contact.getValidationCompany() == null && (state.isUnfinishedState() || boardingDone);
}
-// if (!user.getAdmin()) {
-// return getContactStateAvailables().contains(ContactStateEnum.COMPANY_UNLOCKED);
-// }
- // pour un admin : affichage uniquement si la compagnie a validé la ligne
- return BooleanUtils.isTrue(contact.getValidationCompany());
-// return getContactStateAvailables().contains(ContactStateEnum.PROGRAM_UNLOCKED);
+ return contact.getValidationProgram() == null && BooleanUtils.isTrue(contact.getValidationCompany());
}
- @Log
public boolean canUnvalidate() {
if (!user.getAdmin()) {
return contact.getValidationCompany() != null &&
@@ -303,23 +226,41 @@
}
void onSelectedFromAcceptContact(String contactId) throws SuiviObsmerException {
- changeValidation(contactId, Boolean.TRUE);
+ contact = getContacts().get(contactId);
+ if (user.getAdmin()) {
+ contact.setValidationProgram(Boolean.TRUE);
+ } else {
+ // For company accepted, addRealTideTime
+ contact.getSampleRow().addRealTideTime(contact);
+ contact.setValidationCompany(Boolean.TRUE);
+ }
}
void onSelectedFromRefuseContact(String contactId) throws SuiviObsmerException {
- changeValidation(contactId, Boolean.FALSE);
+ contact = getContacts().get(contactId);
+ if (user.getAdmin()) {
+ // For program refused, removeRealTideTime
+ contact.getSampleRow().removeRealTideTime(contact);
+ contact.setValidationProgram(Boolean.FALSE);
+ } else {
+ contact.setValidationCompany(Boolean.FALSE);
+ }
}
void onSelectedFromUnvalidateContact(String contactId) throws SuiviObsmerException {
- changeValidation(contactId, null);
- }
-
- private void changeValidation(String contactId, Boolean value) throws SuiviObsmerException {
contact = getContacts().get(contactId);
if (user.getAdmin()) {
- contact.setValidationProgram(value);
+ // For program unvalidate from previous refused validation, addRealTideTime
+ if (BooleanUtils.isFalse(contact.getValidationProgram())) {
+ contact.getSampleRow().addRealTideTime(contact);
+ }
+ contact.setValidationProgram(null);
} else {
- contact.setValidationCompany(value);
+ // For company unvalidate from previous accepted validation, removeRealTideTime
+ if (BooleanUtils.isTrue(contact.getValidationCompany())) {
+ contact.getSampleRow().removeRealTideTime(contact);
+ }
+ contact.setValidationCompany(null);
}
}
@@ -335,7 +276,17 @@
}
void onSelectedFromSaveContact(String contactId) throws SuiviObsmerException {
- contact = getContacts().get(contactId);
+ contact = getContacts().get(contactId);
+ contact.setState(contactState.toString());
+ contactsForm.clearErrors();
+ if (!validateState()) {
+ if (log.isDebugEnabled()) {
+ log.debug("Contact can't be saved with errors");
+ }
+ // The contact is not saved, the contact must be editable to show form and correct errors
+ contactEdited = true;
+ editableContactId = contact.getTopiaId();
+ }
}
void onSelectedFromCancelEditContact() throws SuiviObsmerException {
@@ -347,8 +298,23 @@
@Persist("flash")
private String contactSelectedId;
+ @InjectComponent
+ private Form contactsForm;
+
+ @InjectComponent
+ private Field beginDate;
+
+ @InjectComponent
+ private Field endDate;
+
+ @InjectComponent
+ private Field nbObservants;
+
+ @InjectComponent
+ private Field comment;
+
void onSuccessFromContactsForm() {
- if (!contactEdited) {
+ if (!contactEdited) {
try {
if (log.isDebugEnabled()) {
log.debug("Contact save : " + contact);
@@ -361,6 +327,44 @@
}
}
+ private boolean validateState() {
+ if (log.isInfoEnabled()) {
+ log.info("STATE SET : " + contactState);
+ }
+ // Non abouti, Refus ou Refus Définitif
+ if (contactState.isUnfinishedState()) {
+ if (!StringUtils.isEmpty(contact.getComment())) {
+ // RAZ des champs
+ contact.setTideBeginDate(null);
+ contact.setTideEndDate(null);
+ contact.setNbObservants(0);
+ contact.setMammalsCapture(false);
+ contact.setMammalsObservation(false);
+ } else {
+ contactsForm.recordError(comment, "Le commentaire est obligatoire pour l'état '" + contactState + "'");
+ }
+ // Embarquement Réalisé
+ } else if (contactState.equals(ContactState.BOARDING_DONE)) {
+ Date begin = contact.getTideBeginDate();
+ Date end = contact.getTideEndDate();
+ // TODO check program period borns for begin and end ????
+ if (begin == null) {
+ contactsForm.recordError(beginDate, "La date de début de marée est obligatoire pour l'état '" + contactState + "'");
+ }
+ if (end != null) {
+ if (begin != null && end.before(begin)) {
+ contactsForm.recordError(endDate, "La date de fin de la marée ne peut être antérieure à celle de début");
+ }
+ } else {
+ contactsForm.recordError(endDate, "La date de fin de marée est obligatoire pour l'état '" + contactState + "'");
+ }
+ if (contact.getNbObservants() == 0) {
+ contactsForm.recordError(nbObservants, "Il ne peut y avoir aucun observateur pour l'état '" + contactState + "'");
+ }
+ }
+ return !contactsForm.getHasErrors();
+ }
+
public void createNewContact(Boat boat, SampleRow sampleRow) throws SuiviObsmerException {
contact = serviceContact.getNewContact(user, sampleRow, boat);
serviceContact.saveContact(contact, Boolean.FALSE);
Modified: trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/SampleRowForm.java
===================================================================
--- trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/SampleRowForm.java 2009-12-15 10:16:12 UTC (rev 121)
+++ trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/SampleRowForm.java 2009-12-15 16:03:30 UTC (rev 122)
@@ -18,425 +18,425 @@
* <http://www.gnu.org/licenses/gpl-3.0.html>.
* ##%*
*/
-
-package fr.ifremer.suiviobsmer.ui.pages;
-
-import fr.ifremer.suiviobsmer.PeriodDates;
-import fr.ifremer.suiviobsmer.SuiviObsmerException;
-import fr.ifremer.suiviobsmer.entity.Boat;
-import fr.ifremer.suiviobsmer.entity.Company;
-import fr.ifremer.suiviobsmer.entity.FishingZone;
-import fr.ifremer.suiviobsmer.entity.Profession;
-import fr.ifremer.suiviobsmer.entity.ProfessionImpl;
-import fr.ifremer.suiviobsmer.entity.Program;
-import fr.ifremer.suiviobsmer.entity.ProgramImpl;
-import fr.ifremer.suiviobsmer.entity.SampleMonth;
-import fr.ifremer.suiviobsmer.entity.SampleRow;
-import fr.ifremer.suiviobsmer.services.ServiceBoat;
-import fr.ifremer.suiviobsmer.services.ServiceReferential;
-import fr.ifremer.suiviobsmer.services.ServiceSampling;
-import fr.ifremer.suiviobsmer.services.ServiceUser;
-import fr.ifremer.suiviobsmer.ui.base.GenericSelectModel;
-import fr.ifremer.suiviobsmer.ui.base.SuiviObsmerPage;
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import org.apache.commons.lang.StringUtils;
-import org.apache.tapestry5.Block;
-import org.apache.tapestry5.EventContext;
-import org.apache.tapestry5.annotations.IncludeStylesheet;
-import org.apache.tapestry5.annotations.InjectComponent;
-import org.apache.tapestry5.annotations.Log;
-import org.apache.tapestry5.annotations.Persist;
-import org.apache.tapestry5.annotations.Property;
-import org.apache.tapestry5.corelib.components.Zone;
-import org.apache.tapestry5.ioc.annotations.Inject;
-import org.apache.tapestry5.ioc.services.PropertyAccess;
-import org.slf4j.Logger;
-
-/**
- * SampleRowForm
- *
- * Created: 26 nov. 2009
- *
- * @author fdesbois
- * @version $Revision$
- *
- * Mise a jour: $Date$
- * par : $Author$
- */
- at IncludeStylesheet("context:css/sampling.css")
-public class SampleRowForm implements SuiviObsmerPage {
-
- @Override
- public boolean isOnlyForAdmin() {
- return true;
- }
-
- @Inject
- private Logger log;
-
- @Inject
- private ServiceSampling serviceSampling;
-
- @Inject
- private ServiceReferential serviceReferential;
-
- @Inject
- private ServiceUser serviceUser;
-
- @Inject
- private ServiceBoat serviceBoat;
-
- @Inject
- private PropertyAccess propertyAccess;
-
- private boolean edited;
-
- void onActivate(EventContext ec) {
- if (ec.getCount() > 0) {
- sampleRowId = ec.get(String.class, 0);
- }
- }
-
- String onPassivate() {
- return sampleRowId;
- }
-
- void setupRender() throws SuiviObsmerException {
- // load models for select
- professionSelectModel = null;
- getProfessionSelectModel();
- programSelectModel = null;
- getProgramSelectModel();
- fishingZoneSelectModel = null;
- getFishingZoneSelectModel();
- // load main sampleRow (use of sampleRowId in url)
- sampleRow = null;
- getSampleRow();
- // initialize companyId if exist for companySelect
- Company company = getSampleRow().getCompany();
- if (company != null) {
- companyId = company.getTopiaId();
- }
- immatriculations = getSampleRow().getMainElligibleBoatsAsString();
- // Initialize fishingZones, programPeriod and sampleMonths for edition
- fishingZones = null;
- getFishingZones();
- period = null;
- getPeriod();
- sampleMonths = null;
- getSampleMonths();
- }
-
- /*************************** PROFESSION ***********************************/
-
- @Persist
- private GenericSelectModel<Profession> professionSelectModel;
-
- @Property
- private String professionId;
-
- @InjectComponent
- private Zone professionZone;
-
- public GenericSelectModel<Profession> getProfessionSelectModel() throws SuiviObsmerException {
- if (professionSelectModel == null) {
- if (log.isInfoEnabled()) {
- log.info("BUSINESS REQUEST [getProfessions]");
- }
- List<Profession> professions = serviceReferential.getProfessions();
- professionSelectModel = new GenericSelectModel<Profession>(professions, Profession.class,
- "code", "topiaId", propertyAccess);
- }
- return professionSelectModel;
- }
-
- void onSelectedFromSearchProfession() throws SuiviObsmerException {
- if (log.isDebugEnabled()) {
- log.debug("professionId : " + professionId);
- }
- Profession professionSelected = getProfessionSelectModel().findObject(professionId);
- sampleRow.setProfession(professionSelected);
- }
-
- void onSelectedFromAddNewProfession() {
- if (log.isDebugEnabled()) {
- log.debug("Add new profession");
- }
- sampleRow.setProfession(new ProfessionImpl());
- professionId = null;
- }
-
- Block onSuccessFromProfessionForm() throws SuiviObsmerException {
- return professionZone.getBody();
- }
-
- /*************************** FISHING ZONE *********************************/
-
- @Persist
- private GenericSelectModel<FishingZone> fishingZoneSelectModel;
-
- @Property
- private String fishingZoneId;
-
- @InjectComponent
- private Zone fishingZoneZone;
-
- @Property
- private FishingZone fishingZone;
-
- @Persist
- private List<FishingZone> fishingZones;
-
- @Property
- private int indexFishingZone;
-
- public GenericSelectModel<FishingZone> getFishingZoneSelectModel() throws SuiviObsmerException {
- if (fishingZoneSelectModel == null) {
- if (log.isInfoEnabled()) {
- log.info("BUSINESS REQUEST [getFishingZones]");
- }
- List<FishingZone> fishingZones = serviceReferential.getFishingZones();
- fishingZoneSelectModel = new GenericSelectModel<FishingZone>(fishingZones, FishingZone.class,
- "code", "topiaId", propertyAccess);
- }
- return fishingZoneSelectModel;
- }
-
- public List<FishingZone> getFishingZones() {
- if (fishingZones == null) {
- fishingZones = sampleRow.getFishingZone();
- }
- return fishingZones;
- }
-
- void onSelectedFromAddFishingZone() throws SuiviObsmerException {
- fishingZone = getFishingZoneSelectModel().findObject(fishingZoneId);
- if (!getFishingZones().contains(fishingZone)) {
- if (log.isDebugEnabled()) {
- log.debug("Add new fishingZone");
- }
- getFishingZones().add(fishingZone);
- }
- edited = true;
- }
-
- void onSelectedFromRemoveFishingZone(int index) {
- if (log.isDebugEnabled()) {
- log.debug("Remove fishingZone at position : " + index);
- }
- getFishingZones().remove(index);
- edited = true;
- }
-
- Block onSuccessFromFishingZoneForm() {
- if (!edited) {
- sampleRow.setFishingZone(fishingZones);
- }
- return fishingZoneZone.getBody();
- }
-
- /*************************** PROGRAM & MONTHS *****************************/
-
- @Persist
- private GenericSelectModel<Program> programSelectModel;
-
- @Property
- private String programName;
-
- @Property
- private String programId;
-
- @InjectComponent
- private Zone periodZone;
-
- private Program program;
-
- @Property
- private Date month;
-
- @Persist
- private PeriodDates period;
-
- @Persist
- private List<SampleMonth> sampleMonths;
-
- @Property
- private SampleMonth sampleMonth;
-
- public GenericSelectModel<Program> getProgramSelectModel() throws SuiviObsmerException {
- if (programSelectModel == null) {
- if (log.isInfoEnabled()) {
- log.info("BUSINESS REQUEST [getPrograms]");
- }
- List<Program> programs = serviceReferential.getPrograms();
- programSelectModel = new GenericSelectModel<Program>(programs, Program.class,
- "name", "topiaId", propertyAccess);
- }
- return programSelectModel;
- }
-
- public List<Date> getMonths() throws SuiviObsmerException {
- return period.getMonths();
- }
-
- public PeriodDates getPeriod() throws SuiviObsmerException {
- if (period == null) {
- program = getSampleRow().getProgram();
- if (program.getPeriodBegin() != null && program.getPeriodEnd() != null) {
- period = new PeriodDates(program.getPeriodBegin(), program.getPeriodEnd());
- } else {
- period = new PeriodDates();
- }
- }
- return period;
- }
-
- public List<SampleMonth> getSampleMonths() throws SuiviObsmerException {
- if (sampleMonths == null) {
- sampleMonths = new ArrayList<SampleMonth>();
- for (Date currMonth : getMonths()) {
- SampleMonth curr = getSampleRow().getSampleMonth(currMonth);
- if (curr == null) {
- curr = serviceSampling.getNewSampleMonth(currMonth, getSampleRow());
- }
- sampleMonths.add(curr);
- }
- }
- return sampleMonths;
- }
-
- public DateFormat getDateFormat() {
- return new SimpleDateFormat("MM/yyyy");
- }
-
- void onSelectedFromSearchProgram() throws SuiviObsmerException {
- // Reset programName
- programName = null;
- // Reset period to get the one from selected program
- period = null;
- // Reset sampleMonths for new period
- sampleMonths = null;
- edited = true;
- }
-
- void onSelectedFromRefreshMonths() throws SuiviObsmerException {
- // Reset sampleMonths cause of period modification
- sampleMonths = null;
- edited = true;
- }
-
- Block onSuccessFromPeriodForm() throws SuiviObsmerException {
- // New program
- if (isCreateMode()) {
- // Name not empty : suppress programId for select
- if (!StringUtils.isEmpty(programName)) {
- programId = null;
- }
-
- Program currentProgram = getSampleRow().getProgram();
- // Name changed : init new program with current periodBegin and periodEnd
- if (!StringUtils.isEmpty(programName) && !programName.equals(currentProgram.getName())) {
- program = new ProgramImpl();
- program.setName(programName);
- // ProgramId not empty in select : find program with id in selectModel
- } else if (!StringUtils.isEmpty(programId)) {
- program = getProgramSelectModel().findObject(programId);
- // Nor programId neither programName : reinit program object
- } else {
- program = new ProgramImpl();
- }
- // Set program to session with sampleRow
- getSampleRow().setProgram(program);
- }
- // Save sampleMonth
- if (sampleMonths != null) {
- getSampleRow().setSampleMonth(sampleMonths);
- }
- if (!edited) {
- // Save period dates
- program = getSampleRow().getProgram();
- program.setPeriodBegin(period.getFromDate());
- program.setPeriodEnd(period.getThruDate());
- }
-
- return periodZone.getBody();
- }
-
-
- /*************************** SAMPLE ROW ***********************************/
-
- private String sampleRowId;
-
- @Persist
- private SampleRow sampleRow;
-
- @Property
- private String updateComment;
-
- @Property
- private String immatriculations;
-
- @Property
- private String companyId;
-
- private GenericSelectModel<Company> companySelectModel;
-
- public SampleRow getSampleRow() throws SuiviObsmerException {
- if (sampleRow == null) {
- if (!StringUtils.isEmpty(sampleRowId)) {
- if (log.isInfoEnabled()) {
- log.info("BUSINESS REQUEST [getSampleRow]");
- }
- sampleRow = serviceSampling.getSampleRow(sampleRowId);
- } else {
- sampleRow = serviceSampling.getNewSampleRow();
- }
- }
- return sampleRow;
- }
-
- public GenericSelectModel<Company> getCompanySelectModel() throws SuiviObsmerException {
- if (companySelectModel == null) {
- if (log.isInfoEnabled()) {
- log.info("BUSINESS REQUEST [getCompanies]");
- }
- List<Company> companies = serviceUser.getCompanies();
- companySelectModel = new GenericSelectModel<Company>(companies, Company.class,
- "name", "topiaId", propertyAccess);
- }
- return companySelectModel;
- }
-
- public boolean isCreateMode() throws SuiviObsmerException {
- return StringUtils.isEmpty(getSampleRow().getTopiaId());
- }
-
- void onSelectedFromCancelSave() {
- edited = true;
- }
-
- @Log
- Object onSuccessFromSampleRowForm() throws SuiviObsmerException {
- if (!edited) {
-
- Company company = getCompanySelectModel().findObject(companyId);
- getSampleRow().setCompany(company);
-
- List<Boat> boats = serviceBoat.getBoats(immatriculations);
-
- serviceSampling.createUpdateSampleRow(sampleRow, boats);
-
- return SamplingPlan.class;
-
- } else {
- sampleRow = null;
- }
- return null;
- }
-
-
-}
+
+package fr.ifremer.suiviobsmer.ui.pages;
+
+import org.nuiton.util.PeriodDates;
+import fr.ifremer.suiviobsmer.SuiviObsmerException;
+import fr.ifremer.suiviobsmer.entity.Boat;
+import fr.ifremer.suiviobsmer.entity.Company;
+import fr.ifremer.suiviobsmer.entity.FishingZone;
+import fr.ifremer.suiviobsmer.entity.Profession;
+import fr.ifremer.suiviobsmer.entity.ProfessionImpl;
+import fr.ifremer.suiviobsmer.entity.Program;
+import fr.ifremer.suiviobsmer.entity.ProgramImpl;
+import fr.ifremer.suiviobsmer.entity.SampleMonth;
+import fr.ifremer.suiviobsmer.entity.SampleRow;
+import fr.ifremer.suiviobsmer.services.ServiceBoat;
+import fr.ifremer.suiviobsmer.services.ServiceReferential;
+import fr.ifremer.suiviobsmer.services.ServiceSampling;
+import fr.ifremer.suiviobsmer.services.ServiceUser;
+import fr.ifremer.suiviobsmer.ui.base.GenericSelectModel;
+import fr.ifremer.suiviobsmer.ui.base.SuiviObsmerPage;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import org.apache.commons.lang.StringUtils;
+import org.apache.tapestry5.Block;
+import org.apache.tapestry5.EventContext;
+import org.apache.tapestry5.annotations.IncludeStylesheet;
+import org.apache.tapestry5.annotations.InjectComponent;
+import org.apache.tapestry5.annotations.Log;
+import org.apache.tapestry5.annotations.Persist;
+import org.apache.tapestry5.annotations.Property;
+import org.apache.tapestry5.corelib.components.Zone;
+import org.apache.tapestry5.ioc.annotations.Inject;
+import org.apache.tapestry5.ioc.services.PropertyAccess;
+import org.slf4j.Logger;
+
+/**
+ * SampleRowForm
+ *
+ * Created: 26 nov. 2009
+ *
+ * @author fdesbois
+ * @version $Revision$
+ *
+ * Mise a jour: $Date$
+ * par : $Author$
+ */
+ at IncludeStylesheet("context:css/sampling.css")
+public class SampleRowForm implements SuiviObsmerPage {
+
+ @Override
+ public boolean isOnlyForAdmin() {
+ return true;
+ }
+
+ @Inject
+ private Logger log;
+
+ @Inject
+ private ServiceSampling serviceSampling;
+
+ @Inject
+ private ServiceReferential serviceReferential;
+
+ @Inject
+ private ServiceUser serviceUser;
+
+ @Inject
+ private ServiceBoat serviceBoat;
+
+ @Inject
+ private PropertyAccess propertyAccess;
+
+ private boolean edited;
+
+ void onActivate(EventContext ec) {
+ if (ec.getCount() > 0) {
+ sampleRowId = ec.get(String.class, 0);
+ }
+ }
+
+ String onPassivate() {
+ return sampleRowId;
+ }
+
+ void setupRender() throws SuiviObsmerException {
+ // load models for select
+ professionSelectModel = null;
+ getProfessionSelectModel();
+ programSelectModel = null;
+ getProgramSelectModel();
+ fishingZoneSelectModel = null;
+ getFishingZoneSelectModel();
+ // load main sampleRow (use of sampleRowId in url)
+ sampleRow = null;
+ getSampleRow();
+ // initialize companyId if exist for companySelect
+ Company company = getSampleRow().getCompany();
+ if (company != null) {
+ companyId = company.getTopiaId();
+ }
+ immatriculations = getSampleRow().getMainElligibleBoatsAsString();
+ // Initialize fishingZones, programPeriod and sampleMonths for edition
+ fishingZones = null;
+ getFishingZones();
+ period = null;
+ getPeriod();
+ sampleMonths = null;
+ getSampleMonths();
+ }
+
+ /*************************** PROFESSION ***********************************/
+
+ @Persist
+ private GenericSelectModel<Profession> professionSelectModel;
+
+ @Property
+ private String professionId;
+
+ @InjectComponent
+ private Zone professionZone;
+
+ public GenericSelectModel<Profession> getProfessionSelectModel() throws SuiviObsmerException {
+ if (professionSelectModel == null) {
+ if (log.isInfoEnabled()) {
+ log.info("BUSINESS REQUEST [getProfessions]");
+ }
+ List<Profession> professions = serviceReferential.getProfessions();
+ professionSelectModel = new GenericSelectModel<Profession>(professions, Profession.class,
+ "code", "topiaId", propertyAccess);
+ }
+ return professionSelectModel;
+ }
+
+ void onSelectedFromSearchProfession() throws SuiviObsmerException {
+ if (log.isDebugEnabled()) {
+ log.debug("professionId : " + professionId);
+ }
+ Profession professionSelected = getProfessionSelectModel().findObject(professionId);
+ sampleRow.setProfession(professionSelected);
+ }
+
+ void onSelectedFromAddNewProfession() {
+ if (log.isDebugEnabled()) {
+ log.debug("Add new profession");
+ }
+ sampleRow.setProfession(new ProfessionImpl());
+ professionId = null;
+ }
+
+ Block onSuccessFromProfessionForm() throws SuiviObsmerException {
+ return professionZone.getBody();
+ }
+
+ /*************************** FISHING ZONE *********************************/
+
+ @Persist
+ private GenericSelectModel<FishingZone> fishingZoneSelectModel;
+
+ @Property
+ private String fishingZoneId;
+
+ @InjectComponent
+ private Zone fishingZoneZone;
+
+ @Property
+ private FishingZone fishingZone;
+
+ @Persist
+ private List<FishingZone> fishingZones;
+
+ @Property
+ private int indexFishingZone;
+
+ public GenericSelectModel<FishingZone> getFishingZoneSelectModel() throws SuiviObsmerException {
+ if (fishingZoneSelectModel == null) {
+ if (log.isInfoEnabled()) {
+ log.info("BUSINESS REQUEST [getFishingZones]");
+ }
+ List<FishingZone> fishingZones = serviceReferential.getFishingZones();
+ fishingZoneSelectModel = new GenericSelectModel<FishingZone>(fishingZones, FishingZone.class,
+ "code", "topiaId", propertyAccess);
+ }
+ return fishingZoneSelectModel;
+ }
+
+ public List<FishingZone> getFishingZones() {
+ if (fishingZones == null) {
+ fishingZones = sampleRow.getFishingZone();
+ }
+ return fishingZones;
+ }
+
+ void onSelectedFromAddFishingZone() throws SuiviObsmerException {
+ fishingZone = getFishingZoneSelectModel().findObject(fishingZoneId);
+ if (!getFishingZones().contains(fishingZone)) {
+ if (log.isDebugEnabled()) {
+ log.debug("Add new fishingZone");
+ }
+ getFishingZones().add(fishingZone);
+ }
+ edited = true;
+ }
+
+ void onSelectedFromRemoveFishingZone(int index) {
+ if (log.isDebugEnabled()) {
+ log.debug("Remove fishingZone at position : " + index);
+ }
+ getFishingZones().remove(index);
+ edited = true;
+ }
+
+ Block onSuccessFromFishingZoneForm() {
+ if (!edited) {
+ sampleRow.setFishingZone(fishingZones);
+ }
+ return fishingZoneZone.getBody();
+ }
+
+ /*************************** PROGRAM & MONTHS *****************************/
+
+ @Persist
+ private GenericSelectModel<Program> programSelectModel;
+
+ @Property
+ private String programName;
+
+ @Property
+ private String programId;
+
+ @InjectComponent
+ private Zone periodZone;
+
+ private Program program;
+
+ @Property
+ private Date month;
+
+ @Persist
+ private PeriodDates period;
+
+ @Persist
+ private List<SampleMonth> sampleMonths;
+
+ @Property
+ private SampleMonth sampleMonth;
+
+ public GenericSelectModel<Program> getProgramSelectModel() throws SuiviObsmerException {
+ if (programSelectModel == null) {
+ if (log.isInfoEnabled()) {
+ log.info("BUSINESS REQUEST [getPrograms]");
+ }
+ List<Program> programs = serviceReferential.getPrograms();
+ programSelectModel = new GenericSelectModel<Program>(programs, Program.class,
+ "name", "topiaId", propertyAccess);
+ }
+ return programSelectModel;
+ }
+
+ public List<Date> getMonths() throws SuiviObsmerException {
+ return period.getMonths();
+ }
+
+ public PeriodDates getPeriod() throws SuiviObsmerException {
+ if (period == null) {
+ program = getSampleRow().getProgram();
+ if (program.getPeriodBegin() != null && program.getPeriodEnd() != null) {
+ period = new PeriodDates(program.getPeriodBegin(), program.getPeriodEnd());
+ } else {
+ period = new PeriodDates();
+ }
+ }
+ return period;
+ }
+
+ public List<SampleMonth> getSampleMonths() throws SuiviObsmerException {
+ if (sampleMonths == null) {
+ sampleMonths = new ArrayList<SampleMonth>();
+ for (Date currMonth : getMonths()) {
+ SampleMonth curr = getSampleRow().getSampleMonth(currMonth);
+ if (curr == null) {
+ curr = serviceSampling.getNewSampleMonth(currMonth, getSampleRow());
+ }
+ sampleMonths.add(curr);
+ }
+ }
+ return sampleMonths;
+ }
+
+ public DateFormat getDateFormat() {
+ return new SimpleDateFormat("MM/yyyy");
+ }
+
+ void onSelectedFromSearchProgram() throws SuiviObsmerException {
+ // Reset programName
+ programName = null;
+ // Reset period to get the one from selected program
+ period = null;
+ // Reset sampleMonths for new period
+ sampleMonths = null;
+ edited = true;
+ }
+
+ void onSelectedFromRefreshMonths() throws SuiviObsmerException {
+ // Reset sampleMonths cause of period modification
+ sampleMonths = null;
+ edited = true;
+ }
+
+ Block onSuccessFromPeriodForm() throws SuiviObsmerException {
+ // New program
+ if (isCreateMode()) {
+ // Name not empty : suppress programId for select
+ if (!StringUtils.isEmpty(programName)) {
+ programId = null;
+ }
+
+ Program currentProgram = getSampleRow().getProgram();
+ // Name changed : init new program with current periodBegin and periodEnd
+ if (!StringUtils.isEmpty(programName) && !programName.equals(currentProgram.getName())) {
+ program = new ProgramImpl();
+ program.setName(programName);
+ // ProgramId not empty in select : find program with id in selectModel
+ } else if (!StringUtils.isEmpty(programId)) {
+ program = getProgramSelectModel().findObject(programId);
+ // Nor programId neither programName : reinit program object
+ } else {
+ program = new ProgramImpl();
+ }
+ // Set program to session with sampleRow
+ getSampleRow().setProgram(program);
+ }
+ // Save sampleMonth
+ if (sampleMonths != null) {
+ getSampleRow().setSampleMonth(sampleMonths);
+ }
+ if (!edited) {
+ // Save period dates
+ program = getSampleRow().getProgram();
+ program.setPeriodBegin(period.getFromDate());
+ program.setPeriodEnd(period.getThruDate());
+ }
+
+ return periodZone.getBody();
+ }
+
+
+ /*************************** SAMPLE ROW ***********************************/
+
+ private String sampleRowId;
+
+ @Persist
+ private SampleRow sampleRow;
+
+ @Property
+ private String updateComment;
+
+ @Property
+ private String immatriculations;
+
+ @Property
+ private String companyId;
+
+ private GenericSelectModel<Company> companySelectModel;
+
+ public SampleRow getSampleRow() throws SuiviObsmerException {
+ if (sampleRow == null) {
+ if (!StringUtils.isEmpty(sampleRowId)) {
+ if (log.isInfoEnabled()) {
+ log.info("BUSINESS REQUEST [getSampleRow]");
+ }
+ sampleRow = serviceSampling.getSampleRow(sampleRowId);
+ } else {
+ sampleRow = serviceSampling.getNewSampleRow();
+ }
+ }
+ return sampleRow;
+ }
+
+ public GenericSelectModel<Company> getCompanySelectModel() throws SuiviObsmerException {
+ if (companySelectModel == null) {
+ if (log.isInfoEnabled()) {
+ log.info("BUSINESS REQUEST [getCompanies]");
+ }
+ List<Company> companies = serviceUser.getCompanies();
+ companySelectModel = new GenericSelectModel<Company>(companies, Company.class,
+ "name", "topiaId", propertyAccess);
+ }
+ return companySelectModel;
+ }
+
+ public boolean isCreateMode() throws SuiviObsmerException {
+ return StringUtils.isEmpty(getSampleRow().getTopiaId());
+ }
+
+ void onSelectedFromCancelSave() {
+ edited = true;
+ }
+
+ @Log
+ Object onSuccessFromSampleRowForm() throws SuiviObsmerException {
+ if (!edited) {
+
+ Company company = getCompanySelectModel().findObject(companyId);
+ getSampleRow().setCompany(company);
+
+ List<Boat> boats = serviceBoat.getBoats(immatriculations);
+
+ serviceSampling.createUpdateSampleRow(sampleRow, boats);
+
+ return SamplingPlan.class;
+
+ } else {
+ sampleRow = null;
+ }
+ return null;
+ }
+
+
+}
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 2009-12-15 10:16:12 UTC (rev 121)
+++ trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/SamplingPlan.java 2009-12-15 16:03:30 UTC (rev 122)
@@ -43,7 +43,7 @@
import org.apache.tapestry5.annotations.SessionState;
import org.apache.tapestry5.ioc.annotations.Inject;
import org.apache.tapestry5.upload.services.UploadedFile;
-import fr.ifremer.suiviobsmer.PeriodDates;
+import org.nuiton.util.PeriodDates;
import fr.ifremer.suiviobsmer.entity.Program;
import org.slf4j.Logger;
@@ -245,9 +245,9 @@
}
public boolean hasNbTidesReal() {
- // test with current month ????
Date current = new Date();
- return month.before(current) && !isCurrentMonth() && getNbTidesReal() != null;
+ boolean validMonth = month.before(current) || isCurrentMonth();
+ return validMonth && getNbTidesReal() != null;
}
public int getTotalTidesExpected() {
Modified: trunk/suiviobsmer-ui/src/main/resources/fr/ifremer/suiviobsmer/ui/pages/Contacts.properties
===================================================================
--- trunk/suiviobsmer-ui/src/main/resources/fr/ifremer/suiviobsmer/ui/pages/Contacts.properties 2009-12-15 10:16:12 UTC (rev 121)
+++ trunk/suiviobsmer-ui/src/main/resources/fr/ifremer/suiviobsmer/ui/pages/Contacts.properties 2009-12-15 16:03:30 UTC (rev 122)
@@ -19,3 +19,12 @@
mammals-label: Observations et captures accidentelles
dataInputDate-label: Saisie des donn\u00E9es dans Allegro
comment-label: Commentaire
+
+# Form labels
+contactsForm-errors-banner: Le contact n'a pas \u00E9t\u00E9 sauvegard\u00E9 \u00E0 cause des erreurs suivantes :
+ContactState.BOAT_UNAVAILABLE: Non abouti
+ContactState.BOAT_DEFINITIVE_REFUSED: Refus d\u00E9finitif
+ContactState.BOAT_REFUSED: Refus
+ContactState.BOARDING_DONE: Embarquement r\u00E9alis\u00E9
+ContactState.BOARDING_EXPECTED: Embarquement pr\u00E9vu
+ContactState.CONTACT_START: Contact pris
Modified: trunk/suiviobsmer-ui/src/main/webapp/Contacts.tml
===================================================================
--- trunk/suiviobsmer-ui/src/main/webapp/Contacts.tml 2009-12-15 10:16:12 UTC (rev 121)
+++ trunk/suiviobsmer-ui/src/main/webapp/Contacts.tml 2009-12-15 16:03:30 UTC (rev 122)
@@ -3,7 +3,9 @@
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"-->
+
<form t:type="form" t:id="contactsForm">
+ <t:errors id="so-contact-form-errors" t:banner="message:contactsForm-errors-banner"/>
<div t:type="grid" t:source="contacts.values()" t:row="contact" class="t-data-grid ${gridClass}" t:model="contactModel" t:rowClass="prop:rowClass"
t:rowsPerPage="20">
<p:sampleRowCell>
@@ -21,25 +23,25 @@
</p:boatCell>
<p:stateCell>
<t:if t:test="editionMode">
- <input t:type="select" t:model="stateSelectModel" value="contact.state" />
+ <input t:type="select" t:id="contactState" t:validate="required"/>
<p:else>${contact.state}</p:else>
</t:if>
</p:stateCell>
<p:tideBeginDateCell>
<t:if t:test="editionMode">
- <input t:type="datefield" class="date" value="contact.tideBeginDate" />
+ <input t:type="datefield" t:id="beginDate" class="date" value="contact.tideBeginDate" />
<p:else><t:output value="contact.tideBeginDate" format="dateFormat" /></p:else>
</t:if>
</p:tideBeginDateCell>
<p:tideEndDateCell>
<t:if t:test="editionMode">
- <input t:type="datefield" class="date" value="contact.tideEndDate" />
+ <input t:type="datefield" t:id="endDate" class="date" value="contact.tideEndDate" />
<p:else><t:output value="contact.tideEndDate" format="dateFormat" /></p:else>
</t:if>
</p:tideEndDateCell>
<p:nbObservantsCell>
<t:if t:test="editionMode">
- <input t:type="textfield" class="nbObservants" value="contact.nbObservants" />
+ <input t:type="textfield" t:id="nbObservants" class="nbObservants" value="contact.nbObservants" />
<p:else>${contact.nbObservants}</p:else>
</t:if>
</p:nbObservantsCell>
@@ -71,13 +73,13 @@
</p:validationCell>
<p:dataInputDateCell>
<t:if t:test="editionMode">
- <input t:type="datefield" class="date" value="contact.dataInputDate" />
+ <input t:type="datefield" t:id="inputDate" class="date" value="contact.dataInputDate" />
<p:else><t:output value="contact.dataInputDate" format="dateFormat" /></p:else>
</t:if>
</p:dataInputDateCell>
<p:commentCell>
<t:if t:test="editionMode">
- <input t:type="textarea" cols="20" rows="2" value="contact.comment" />
+ <input t:type="textarea" t:id="comment" cols="20" rows="2" value="contact.comment" />
<p:else>
${contact.comment}
</p:else>
@@ -85,25 +87,25 @@
</p:commentCell>
<p:actionsCell>
<t:if t:test="hasActions()">
- <t:unless t:test="user.admin">
- <t:if t:test="editionMode">
- <input t:type="submit" t:id="cancelEditContact" class="ico22px undo22px" value="Undo"
- title="Annuler les modifications" />
- <input t:type="submitContext" t:id="saveContact" class="ico22px save22px" value="Save"
- t:context="contact.topiaId" title="Enregistrer le contact" />
- <p:else>
- <input t:type="submitContext" t:id="editContact" class="ico edit" value="Edit"
- t:context="contact.topiaId" title="Modifier le contact" />
- <input t:type="submitContext" t:id="deleteContact" class="ico22px delete" value="Delete"
- t:context="contact.topiaId" title="Supprimer le contact"
- t:mixins="confirm" t:message="Etes-vous sûr de vouloir supprimer définitivement ce contact ?" />
- </p:else>
- </t:if>
- </t:unless>
+ <t:if t:test="editionMode">
+ <input t:type="submit" t:id="cancelEditContact" class="ico22px undo22px" value="Undo"
+ title="Annuler les modifications" />
+ <input t:type="submitContext" t:id="saveContact" class="ico22px save22px" value="Save"
+ t:context="contact.topiaId" title="Enregistrer le contact" />
+ <p:else>
+ <input t:type="submitContext" t:id="editContact" class="ico edit" value="Edit"
+ t:context="contact.topiaId" title="Modifier le contact" />
+ <input t:type="submitContext" t:id="deleteContact" class="ico22px delete" value="Delete"
+ t:context="contact.topiaId" title="Supprimer le contact"
+ t:mixins="confirm" t:message="Etes-vous sûr de vouloir supprimer définitivement ce contact ?" />
+ </p:else>
+ </t:if>
+ </t:if>
+ <t:if t:test="canValidate()">
<input t:type="submitContext" t:id="acceptContact" class="ico22px accept" value="Accept"
- t:context="contact.topiaId" title="Valider le contact" />
+ t:context="contact.topiaId" title="Valider le contact" />
<input t:type="submitContext" t:id="refuseContact" class="ico22px refuse" value="Refuse"
- t:context="contact.topiaId" title="Refuser le contact" />
+ t:context="contact.topiaId" title="Refuser le contact" />
</t:if>
<t:if t:test="canUnvalidate()">
<input t:type="submitContext" t:id="unvalidateContact" class="ico22px unvalidate" value="Unvalidate"
Modified: trunk/suiviobsmer-ui/src/main/webapp/css/contacts.css
===================================================================
--- trunk/suiviobsmer-ui/src/main/webapp/css/contacts.css 2009-12-15 10:16:12 UTC (rev 121)
+++ trunk/suiviobsmer-ui/src/main/webapp/css/contacts.css 2009-12-15 16:03:30 UTC (rev 122)
@@ -50,13 +50,13 @@
div#so-contacts table.t-data-grid thead tr th.dataInputDate,
div#so-contacts table.t-data-grid thead tr th.tideEndDate,
div#so-contacts table.t-data-grid thead tr th.tideBeginDate {
- width: 100px;
+ width: 120px;
white-space: normal;
text-align: center;
}
div#so-contacts table.t-data-grid thead tr th.nbObservants {
- width: 20px;
+ width: 40px;
white-space: normal;
text-align: center;
}
@@ -76,18 +76,25 @@
}
/** FORM **/
+div#so-contacts div.t-error {
+ width: 60%;
+ margin: 5px auto;
+}
+
+div#so-contacts div.t-error li {
+ margin-left: 20px;
+}
+
div#so-contacts-edit {
width: 40%;
margin-left: auto;
margin-right: auto;
}
-input.date, /* TEMP */
-div#so-contacts-edit div.t-beaneditor input.date {
+input.date {
width: 70px;
}
-input.nbObservants, /* TEMP */
-div#so-contacts-edit div.t-beaneditor input.nbObservants {
+input.nbObservants {
width: 18px;
}
Modified: trunk/suiviobsmer-ui/src/main/webapp/js/dialog.js
===================================================================
--- trunk/suiviobsmer-ui/src/main/webapp/js/dialog.js 2009-12-15 10:16:12 UTC (rev 121)
+++ trunk/suiviobsmer-ui/src/main/webapp/js/dialog.js 2009-12-15 16:03:30 UTC (rev 122)
@@ -8,12 +8,12 @@
*/
initialize: function(element, message) {
this.message = message;
- Tapestry.debug('click ' + element);
Event.observe($(element), 'click', this.doConfirm.bindAsEventListener(this));
},
doConfirm: function(e) {
+ //Tapestry.debug('click ' + element);
if(! confirm(this.message)) {
- Tapestry.debug('STOP ' + e);
+ //Tapestry.debug('STOP ' + e);
Event.stop(e);
}
}
1
0
15 Dec '09
Author: fdesbois
Date: 2009-12-15 10:16:12 +0000 (Tue, 15 Dec 2009)
New Revision: 121
Added:
trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/BoatActivityCalendar.java
trunk/suiviobsmer-ui/src/main/webapp/BoatActivityCalendar.tml
trunk/suiviobsmer-ui/src/main/webapp/img/text-32px.png
Modified:
trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/DataLoader.java
trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/entity/ActivityProfessionImpl.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/mock/ServiceBoatMock.java
trunk/suiviobsmer-business/src/main/xmi/suiviobsmer.zargo
trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/impl/ActivityCalendarImportTest.java
trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/impl/ServiceBoatImplTest.java
trunk/suiviobsmer-business/src/test/resources/import/activity.csv
trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/Boats.java
trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/services/SuiviObsmerManager.java
trunk/suiviobsmer-ui/src/main/resources/fr/ifremer/suiviobsmer/ui/pages/Boats.properties
trunk/suiviobsmer-ui/src/main/resources/log4j.properties
trunk/suiviobsmer-ui/src/main/webapp/Boats.tml
trunk/suiviobsmer-ui/src/main/webapp/css/boats.css
trunk/suiviobsmer-ui/src/main/webapp/css/main.css
Log:
- Improve import for ActivityCalendar
- Add ActivityCalendar import zone in Boats page + link to have log file
- Create page BoatActivityCalendar (not fill yet)
Modified: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/DataLoader.java
===================================================================
--- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/DataLoader.java 2009-12-14 13:55:52 UTC (rev 120)
+++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/DataLoader.java 2009-12-15 10:16:12 UTC (rev 121)
@@ -21,8 +21,13 @@
package fr.ifremer.suiviobsmer;
+import fr.ifremer.suiviobsmer.entity.ActivityCalendar;
+import fr.ifremer.suiviobsmer.entity.ActivityMonth;
+import fr.ifremer.suiviobsmer.entity.ActivityProfession;
+import fr.ifremer.suiviobsmer.entity.ActivityZone;
import fr.ifremer.suiviobsmer.entity.Contact;
import fr.ifremer.suiviobsmer.entity.SampleRow;
+import java.util.List;
/**
* DataLoader
@@ -48,4 +53,19 @@
row.getCompany();
//row.getFishingZone().size(); lazy=false
}
+
+ public static void loadActivityCalendar(ActivityCalendar calendar) {
+ calendar.getBoat();
+ List<ActivityMonth> months = calendar.getActivityMonth();
+ for (ActivityMonth month : months) {
+ if (month.getActive()) {
+ List<ActivityProfession> professions = month.getActivityProfession();
+ for (ActivityProfession profession : professions) {
+ List<ActivityZone> zones = profession.getActivityZone();
+ zones.size();
+ }
+ }
+ }
+ }
+
}
Modified: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/entity/ActivityProfessionImpl.java
===================================================================
--- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/entity/ActivityProfessionImpl.java 2009-12-14 13:55:52 UTC (rev 120)
+++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/entity/ActivityProfessionImpl.java 2009-12-15 10:16:12 UTC (rev 121)
@@ -19,9 +19,9 @@
private static final long serialVersionUID = 1L;
@Override
- public ActivityZone getActivityZone(int zoneId) {
+ public ActivityZone getActivityZone(String zoneCode) {
for (ActivityZone zone : getActivityZone()) {
- if (zone.getZoneId() == zoneId) {
+ if (zone.getZoneCode().equals(zoneCode)) {
return zone;
}
}
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 2009-12-14 13:55:52 UTC (rev 120)
+++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/ActivityCalendarImport.java 2009-12-15 10:16:12 UTC (rev 121)
@@ -13,10 +13,12 @@
import fr.ifremer.suiviobsmer.entity.ActivityZoneDAO;
import fr.ifremer.suiviobsmer.entity.Boat;
import fr.ifremer.suiviobsmer.entity.BoatDAO;
+import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
+import java.io.Writer;
import java.nio.charset.Charset;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
@@ -44,7 +46,7 @@
private InputStream input;
- private FileWriter writer;
+ private Writer writer;
private static final Logger log = LoggerFactory.getLogger(ActivityCalendarImport.class);
@@ -59,14 +61,14 @@
file.delete();
file.createNewFile();
}
- writer = new FileWriter(filename);
+ writer = new BufferedWriter(new FileWriter(filename));
}
@Override
public void run() {
TopiaContext transaction = null;
SuiviObsmerContext.setActivityCalendarImport(true);
- int currRow = 0;
+ int currRow = 1;
try {
transaction = SuiviObsmerContext.getTopiaRootContext().beginTransaction();
@@ -80,11 +82,13 @@
while(reader.readRecord()) {
currRow++;
+ String timeLog = "";
+ long firstTic = System.currentTimeMillis();
//result[0]++;
- if (log.isTraceEnabled()) {
- log.trace(" " + Arrays.asList(reader.getValues()));
- }
+// if (log.isTraceEnabled()) {
+// log.trace(" " + Arrays.asList(reader.getValues()));
+// }
int boatImmatriculation = Integer.parseInt(reader.get("NAVS_COD").trim());
@@ -92,10 +96,11 @@
Boat boat = boatDAO.findByImmatriculation(boatImmatriculation);
+
+
if (boat != null) {
- ActivityCalendarDAO dao = SuiviObsmerModelDAOHelper.getActivityCalendarDAO(transaction);
-
+ ActivityCalendarDAO dao = SuiviObsmerModelDAOHelper.getActivityCalendarDAO(transaction);
int year = Integer.parseInt(reader.get("SYNA_AN").trim());
@@ -124,6 +129,7 @@
String harbourCode = reader.get("SYNA_POR_COD").trim();
ActivityMonth month = calendar.getActivityMonth(monthNum);
+
if (month == null) {
boolean active = !harbourCode.equals("INA");
@@ -140,9 +146,17 @@
if (active) {
String nbSeaDaysString = reader.get("SYNA_NOMJDM").trim();
- int nbSeaDays = Integer.parseInt(nbSeaDaysString);
- int nbFishingDays = Integer.parseInt(reader.get("SYNA_NOMJDP").trim());
- int nbBoardingPersons = Integer.parseInt(reader.get("SYNA_NOMHE").trim());
+ Integer nbSeaDays = !nbSeaDaysString.equals("NA") ?
+ Integer.valueOf(nbSeaDaysString) : null;
+
+ String nbFishingDaysString = reader.get("SYNA_NOMJDP").trim();
+ Integer nbFishingDays = !nbFishingDaysString.equals("NA") ?
+ Integer.valueOf(nbFishingDaysString) : null;
+
+ String nbBoardingPersonsString = reader.get("SYNA_NOMHE").trim();
+ Integer nbBoardingPersons = !nbBoardingPersonsString.equals("NA") ?
+ Integer.valueOf(nbBoardingPersonsString) : null;
+
int harbourId = Integer.parseInt(reader.get("SYNA_TPOR_COD").trim());
String harbourLibelle = reader.get("SYNA_POR_LIB").trim();
//String harbourCode = reader.get("SYNA_POR_COD").trim();
@@ -190,14 +204,14 @@
month.addActivityProfession(profession);
}
- int zoneId = Integer.parseInt(reader.get("TSECT_COD").trim());
- ActivityZone zone = profession.getActivityZone(zoneId);
+ String zoneCode = reader.get("SECT_COD").trim();
+ ActivityZone zone = profession.getActivityZone(zoneCode);
if (zone == null) {
int gradiantCode = Integer.parseInt(reader.get("GRA_COD").trim());
String gradiantLibelle = reader.get("GRA_LIB").trim();
- String zoneCode = reader.get("SECT_COD").trim();
+ int zoneId = Integer.parseInt(reader.get("TSECT_COD").trim());
String zoneLibelle = reader.get("SECT_LIB").trim();
ActivityZoneDAO zoneDAO =
@@ -211,21 +225,27 @@
ActivityZone.ZONE_CODE, zoneCode,
ActivityZone.ZONE_LIBELLE, zoneLibelle);
- info("Création de la zone " + zoneId + " [ mois " + monthNum + " ] " +
+ info("Création de la zone " + zoneCode + " [ mois " + monthNum + " ] " +
calendarCode, currRow);
profession.addActivityZone(zone);
- transaction.commitTransaction();
-
result++;
} else {
- warn("Zone déjà existante !", currRow);
+ warn("Zone déjà existante [" + zoneCode + "] ! :: " + Arrays.toString(reader.getValues()), currRow);
}
}
+ } else {
+ warn("Navire inexistant dans le référentiel : " + boatImmatriculation, currRow);
}
+ if (log.isDebugEnabled()) {
+ long tic = System.currentTimeMillis();
+ log.debug("Time : " + DurationFormatUtils.formatDurationHMS(tic - firstTic));
+ }
+
transaction.commitTransaction();
+ writer.flush();
}
@@ -250,8 +270,8 @@
}
} finally {
IOUtils.closeQuietly(writer);
+ SuiviObsmerContext.setActivityCalendarImport(false);
}
- SuiviObsmerContext.setActivityCalendarImport(false);
}
protected void warn(String message, int numRow) throws IOException {
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 2009-12-14 13:55:52 UTC (rev 120)
+++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/ServiceBoatImpl.java 2009-12-15 10:16:12 UTC (rev 121)
@@ -22,6 +22,7 @@
package fr.ifremer.suiviobsmer.impl;
import com.csvreader.CsvReader;
+import fr.ifremer.suiviobsmer.DataLoader;
import fr.ifremer.suiviobsmer.SuiviObsmerContext;
import fr.ifremer.suiviobsmer.SuiviObsmerException;
import fr.ifremer.suiviobsmer.SuiviObsmerModelDAOHelper;
@@ -31,6 +32,9 @@
import fr.ifremer.suiviobsmer.entity.*;
import fr.ifremer.suiviobsmer.entity.Boat;
import fr.ifremer.suiviobsmer.services.ServiceBoat;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.Charset;
@@ -39,7 +43,6 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import java.util.logging.Level;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.commons.lang.BooleanUtils;
@@ -253,6 +256,9 @@
// load data
boatInfos.getBoat();
}
+ // load data
+ boatInfos.getBoat().sizeActivityCalendar();
+
result.setBoatInfos(boatInfos);
for (ElligibleBoat elligible : boat.getElligibleBoat()) {
@@ -460,7 +466,7 @@
}
@Override
- public void importActiviyCalendarCsv(InputStream input) throws SuiviObsmerException {
+ public void importActivityCalendarCsv(InputStream input) throws SuiviObsmerException {
if (!SuiviObsmerContext.isActivityCalendarImportRun()) {
try {
ActivityCalendarImport calendarImport = new ActivityCalendarImport(input);
@@ -472,4 +478,55 @@
}
}
+ @Override
+ public ActivityCalendar getLastActivityCalendar(Boat boat) throws SuiviObsmerException {
+ TopiaContext transaction = null;
+ ActivityCalendar result = null;
+ try {
+ transaction = rootContext.beginTransaction();
+
+// BoatDAO boatDAO = SuiviObsmerModelDAOHelper.getBoatDAO(transaction);
+// Boat boat = boatDAO.findByTopiaId(boatId);
+// if (boat == null) {
+// throw new IllegalArgumentException(
+// "Le navire avec l'identifiant '" + boatId + "' n'existe pas");
+// }
+
+ List results = transaction.find(
+ "FROM ActivityCalendarImpl A WHERE A.boat = :boat AND A.year = " +
+ "(SELECT MAX(B.year) FROM ActivityCalendarImpl B WHERE B.boat = A.boat GROUP BY B.boat)",
+ "boat", boat);
+
+ result = (ActivityCalendar) results.get(0);
+ DataLoader.loadActivityCalendar(result);
+
+// ActivityCalendarDAO dao = SuiviObsmerModelDAOHelper.getActivityCalendarDAO(transaction);
+//
+// result = dao.findByProperties(
+// ActivityCalendar.BOAT, boat,
+// ActivityCalendar.YEAR, year);
+
+ transaction.closeContext();
+ } catch (Exception eee) {
+ SuiviObsmerContext.serviceException(transaction,
+ "Impossible de charger le dernier calendrier d'activité du navire " +
+ boat.getName() + " (" + boat.getImmatriculation() + ")", eee);
+ }
+ return result;
+ }
+
+ @Override
+ public InputStream getActivityCalendarLogFile() throws FileNotFoundException {
+ InputStream result = null;
+// try {
+ String filename =
+ SuiviObsmerContext.getProperty(SuiviObsmerContext.PROP_FILENAME_LOG_ACTIVITY);
+ File file = new File(filename);
+ result = new FileInputStream(file);
+// } catch (FileNotFoundException eee) {
+// SuiviObsmerContext.serviceException(null,
+// "Fichier de log inexistant", eee);
+// }
+ return result;
+ }
}
Modified: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/mock/ServiceBoatMock.java
===================================================================
--- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/mock/ServiceBoatMock.java 2009-12-14 13:55:52 UTC (rev 120)
+++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/mock/ServiceBoatMock.java 2009-12-15 10:16:12 UTC (rev 121)
@@ -26,6 +26,7 @@
import fr.ifremer.suiviobsmer.bean.CompanyBoatInfos;
import fr.ifremer.suiviobsmer.entity.*;
import fr.ifremer.suiviobsmer.services.ServiceBoat;
+import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
@@ -237,8 +238,18 @@
}
@Override
- public void importActiviyCalendarCsv(InputStream input) throws SuiviObsmerException {
+ public void importActivityCalendarCsv(InputStream input) throws SuiviObsmerException {
throw new UnsupportedOperationException("Not supported yet.");
}
+ @Override
+ public ActivityCalendar getLastActivityCalendar(Boat boat) throws SuiviObsmerException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public InputStream getActivityCalendarLogFile() throws FileNotFoundException {
+ 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/ActivityCalendarImportTest.java
===================================================================
--- trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/impl/ActivityCalendarImportTest.java 2009-12-14 13:55:52 UTC (rev 120)
+++ trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/impl/ActivityCalendarImportTest.java 2009-12-15 10:16:12 UTC (rev 121)
@@ -88,13 +88,13 @@
LineNumberReader numberReader = new LineNumberReader(reader);
String line;
- while ((line = numberReader.readLine()) != null) {
- if (numberReader.getLineNumber() == 26) {
- String lastChar = line.substring(line.length()-1);
- Assert.assertEquals(7, Integer.parseInt(lastChar));
- }
- }
- Assert.assertEquals(27, numberReader.getLineNumber());
+// while ((line = numberReader.readLine()) != null) {
+// if (numberReader.getLineNumber() == 26) {
+// String lastChar = line.substring(line.length()-1);
+// Assert.assertEquals(8, Integer.parseInt(lastChar));
+// }
+// }
+// Assert.assertEquals(27, numberReader.getLineNumber());
//InputStream input = getClass().getResourceAsStream("/target/activity.csv");
}
Modified: trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/impl/ServiceBoatImplTest.java
===================================================================
--- trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/impl/ServiceBoatImplTest.java 2009-12-14 13:55:52 UTC (rev 120)
+++ trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/impl/ServiceBoatImplTest.java 2009-12-15 10:16:12 UTC (rev 121)
@@ -29,7 +29,10 @@
import fr.ifremer.suiviobsmer.business.SuiviObsmerRunnerTest;
import fr.ifremer.suiviobsmer.bean.BoatFilter;
import fr.ifremer.suiviobsmer.bean.CompanyBoatInfos;
+import fr.ifremer.suiviobsmer.entity.ActivityCalendar;
+import fr.ifremer.suiviobsmer.entity.ActivityCalendarDAO;
import fr.ifremer.suiviobsmer.entity.Boat;
+import fr.ifremer.suiviobsmer.entity.BoatDAO;
import fr.ifremer.suiviobsmer.entity.BoatInfos;
import fr.ifremer.suiviobsmer.entity.Company;
import fr.ifremer.suiviobsmer.entity.CompanyDAO;
@@ -46,6 +49,7 @@
import java.util.Map;
import org.junit.After;
import org.junit.AfterClass;
+import org.junit.Assert;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
@@ -300,4 +304,40 @@
assertFalse(results.get(1).getActive());
}
+ @Test
+ public void testGetLastActivityCalendar() throws Exception {
+ log.info("getLastActivityCalendar");
+
+ /** PREPARE DATA **/
+ TopiaContext transaction = SuiviObsmerContext.getTopiaRootContext().beginTransaction();
+
+ BoatDAO boatDAO = SuiviObsmerModelDAOHelper.getBoatDAO(transaction);
+ Boat boat = boatDAO.create(
+ Boat.NAME, "TESTBOAT",
+ Boat.IMMATRICULATION, 174592);
+
+ ActivityCalendarDAO dao = SuiviObsmerModelDAOHelper.getActivityCalendarDAO(transaction);
+
+ ActivityCalendar calendar1 = dao.create(
+ ActivityCalendar.BOAT, boat,
+ ActivityCalendar.YEAR, 2008);
+
+ ActivityCalendar calendar2 = dao.create(
+ ActivityCalendar.BOAT, boat,
+ ActivityCalendar.YEAR, 2007);
+
+ ActivityCalendar calendar3 = dao.create(
+ ActivityCalendar.BOAT, boat,
+ ActivityCalendar.YEAR, 2009);
+
+ transaction.commitTransaction();
+ transaction.closeContext();
+
+ /** EXEC METHOD **/
+
+ ActivityCalendar result = service.getLastActivityCalendar(boat);
+ Assert.assertNotNull(result);
+ Assert.assertEquals(2009, result.getYear());
+ }
+
}
\ No newline at end of file
Modified: trunk/suiviobsmer-business/src/test/resources/import/activity.csv
===================================================================
--- trunk/suiviobsmer-business/src/test/resources/import/activity.csv 2009-12-14 13:55:52 UTC (rev 120)
+++ trunk/suiviobsmer-business/src/test/resources/import/activity.csv 2009-12-15 10:16:12 UTC (rev 121)
@@ -1,9 +1,9 @@
"","SYNA_DATED","SYNA_DATEF","SYNA_AN","SYNA_MOI","ENQ_ID","INDQ_COD","CATD_COD","NAVS_COD","SYNA_NOMJDM","SYNA_NOMJDP","SYNA_NOMHE","SYNA_TPOR_COD","SYNA_POR_COD","SYNA_POR_LIB","SYNA_QUA_COD","SYNA_QUA_LIB","META_ORDRE","ORII_COD","ORII_COURT_LIB","MET_ID","MET_COD","MET_LIB","GRA_COD","GRA_LIB","TSECT_COD","SECT_COD","SECT_LIB","zone","MET5","VIId"
"1286","2008-02-01 00:00:00","2008-02-29 00:00:00","2008","02","932766","2","1","273129","12","11","4","6","XGV","Le Guilvinec","GV","Le Guilvinec","1","9","CNTS/M","193","OTBGA","Chalut de fond à panneaux (1 nav.) à divers gadidés","11","Etranger","13","31E3","Rectangle 31E3","CELT","OTB_DEF",FALSE
"1287","2008-02-01 00:00:00","2008-02-29 00:00:00","2008","02","932766","2","1","273129","12","11","4","6","XGV","Le Guilvinec","GV","Le Guilvinec","1","9","CNTS/M","193","OTBGA","Chalut de fond à panneaux (1 nav.) à divers gadidés","11","Etranger","13","31E2","Rectangle 31E2","CELT","OTB_DEF",FALSE
-"1288","2008-07-01 00:00:00","2008-07-31 00:00:00","2008","07","914020","1","1","177474","10","10","3","6","XGV","Le Guilvinec","GV","Le Guilvinec","1","9","CNTS/M","307","TTBLN","Chaluts jumeaux à langoustines, galathées","16","Mixte","13","24E4","Rectangle 24E4","GASC","OTT_CRU",FALSE
+"1288","2008-07-01 00:00:00","2008-07-31 00:00:00","2008","07","914020","1","1","177474","10",NA,"3","6","XGV","Le Guilvinec","GV","Le Guilvinec","1","9","CNTS/M","307","TTBLN","Chaluts jumeaux à langoustines, galathées","16","Mixte","13","24E4","Rectangle 24E4","GASC","OTT_CRU",FALSE
"24431","2008-10-01 00:00:00","2008-10-31 00:00:00","2008","10","968329","1","1","174592","15","15","4","6","ACN","Honfleur","CN","Caen","2","9","CNTS/M","211","OTBSO","Chalut de fond à panneaux (1 nav.) à soles","9","Côtier","14","27E930","Extérieur des 3 milles de Ouistreham à Villers/mer","NSEC","OTB_DEF",TRUE
"24432","2008-08-01 00:00:00","2008-08-31 00:00:00","2008","08","967774","2","1","284595","4","4","3","6","ACN","Honfleur","CN","Caen","1","9","CNTS/M","211","OTBSO","Chalut de fond à panneaux (1 nav.) à soles","9","Côtier","14","27E930","Extérieur des 3 milles de Ouistreham à Villers/mer","NSEC","OTB_DEF",TRUE
-"24433","2008-09-01 00:00:00","2008-09-30 00:00:00","2008","09","966415","2","1","177474","8","8","3","6","ACN","Honfleur","CN","Caen","1","9","CNTS/M","211","OTBSO","Chalut de fond à panneaux (1 nav.) à soles","9","Côtier","14","27E930","Extérieur des 3 milles de Ouistreham à Villers/mer","NSEC","OTB_DEF",TRUE
+"24433","2008-09-01 00:00:00","2008-09-30 00:00:00","2008","09","966415","2","1","177474",NA,"8",NA,"6","ACN","Honfleur","CN","Caen","1","9","CNTS/M","211","OTBSO","Chalut de fond à panneaux (1 nav.) à soles","9","Côtier","14","27E930","Extérieur des 3 milles de Ouistreham à Villers/mer","NSEC","OTB_DEF",TRUE
"24434","2008-08-01 00:00:00","2008-08-31 00:00:00","2008","08","968272","1","1","978419","25","25","4","6","ACN","Honfleur","CN","Caen","1","9","CNTS/M","211","OTBSO","Chalut de fond à panneaux (1 nav.) à soles","9","Côtier","14","27E930","Extérieur des 3 milles de Ouistreham à Villers/mer","NSEC","OTB_DEF",TRUE
"43134","2008-05-01 00:00:00","2008-05-31 00:00:00","2008","05","961088","3","1","174592",NA,NA,"1","6","INA","Trentemoult (Nantes)",NA,"Nantes","1","7","ENQUETEUR","344","GNSLM","Filet maillant fixe à lamproie marine","9","Côtier","14","23E7L5","Loire domaine mixte lot 15","GASC","GNS_CAT",FALSE
\ No newline at end of file
Added: trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/BoatActivityCalendar.java
===================================================================
--- trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/BoatActivityCalendar.java (rev 0)
+++ trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/BoatActivityCalendar.java 2009-12-15 10:16:12 UTC (rev 121)
@@ -0,0 +1,59 @@
+
+package fr.ifremer.suiviobsmer.ui.pages;
+
+import fr.ifremer.suiviobsmer.SuiviObsmerException;
+import fr.ifremer.suiviobsmer.entity.ActivityCalendar;
+import fr.ifremer.suiviobsmer.entity.Boat;
+import fr.ifremer.suiviobsmer.services.ServiceBoat;
+import fr.ifremer.suiviobsmer.ui.base.SuiviObsmerPage;
+import org.apache.tapestry5.annotations.Persist;
+import org.apache.tapestry5.ioc.annotations.Inject;
+import org.slf4j.Logger;
+
+/**
+ * ActivityCalendarPage
+ *
+ * Created: 14 déc. 2009
+ *
+ * @author fdesbois
+ * @version $Revision$
+ *
+ * Mise a jour: $Date$
+ * par : $Author$
+ */
+public class BoatActivityCalendar implements SuiviObsmerPage {
+
+ @Inject
+ private Logger log;
+
+ @Inject
+ private ServiceBoat serviceBoat;
+
+ private ActivityCalendar activityCalendar;
+
+ @Persist
+ private Boat boat;
+
+ void setupRender() {
+
+ }
+
+ @Override
+ public boolean isOnlyForAdmin() {
+ return false;
+ }
+
+ public void setBoat(Boat boat) {
+ this.boat = boat;
+ }
+
+ public ActivityCalendar getActivityCalendar() throws SuiviObsmerException {
+ if (activityCalendar == null) {
+ if (log.isInfoEnabled()) {
+ log.info("BUSINESS REQUEST [getLastActivityCalendar]");
+ }
+ this.activityCalendar = serviceBoat.getLastActivityCalendar(boat);
+ }
+ return activityCalendar;
+ }
+}
Property changes on: trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/BoatActivityCalendar.java
___________________________________________________________________
Added: svn:keywords
+ "Author Date Id Revision HeadURL"
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 2009-12-14 13:55:52 UTC (rev 120)
+++ trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/Boats.java 2009-12-15 10:16:12 UTC (rev 121)
@@ -21,6 +21,7 @@
package fr.ifremer.suiviobsmer.ui.pages;
+import fr.ifremer.suiviobsmer.SuiviObsmerContext;
import fr.ifremer.suiviobsmer.SuiviObsmerException;
import fr.ifremer.suiviobsmer.bean.BoatFilterImpl;
import fr.ifremer.suiviobsmer.entity.Boat;
@@ -42,6 +43,9 @@
import fr.ifremer.suiviobsmer.ui.base.SuiviObsmerPage;
import fr.ifremer.suiviobsmer.ui.components.FeedBack;
import fr.ifremer.suiviobsmer.ui.components.Layout;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.List;
@@ -50,6 +54,7 @@
import org.apache.commons.lang.StringUtils;
import org.apache.tapestry5.Block;
import org.apache.tapestry5.EventContext;
+import org.apache.tapestry5.StreamResponse;
import org.apache.tapestry5.annotations.IncludeStylesheet;
import org.apache.tapestry5.annotations.InjectComponent;
import org.apache.tapestry5.annotations.InjectPage;
@@ -61,6 +66,7 @@
import org.apache.tapestry5.corelib.components.Zone;
import org.apache.tapestry5.ioc.annotations.Inject;
import org.apache.tapestry5.ioc.services.PropertyAccess;
+import org.apache.tapestry5.services.Response;
import org.apache.tapestry5.upload.services.UploadedFile;
import org.slf4j.Logger;
@@ -149,7 +155,7 @@
return sampleRowCode;
}
- /**************************** Import Form ******************************************/
+ /**************************** Import Forms ********************************/
/**
* Fichier CSV contenant une liste de navires.
@@ -182,6 +188,58 @@
//return importBoatsForm.getHasErrors() ? importBoatsForm : this;
}
+ @Property
+ private UploadedFile activityCalendarsCsvFile;
+
+ private InputStream activityCalendarLogFile;
+
+ InputStream getActivityCalendarLogFile() throws FileNotFoundException {
+ if (activityCalendarLogFile == null) {
+ if (log.isInfoEnabled()) {
+ log.info("BUSINESS REQUEST [getActivityCalendarLogFile]");
+ }
+ activityCalendarLogFile = serviceBoat.getActivityCalendarLogFile();
+ }
+ return activityCalendarLogFile;
+ }
+
+ public boolean isLogFileExists() {
+ try {
+ getActivityCalendarLogFile();
+ return true;
+ } catch (FileNotFoundException eee) {
+ if (log.isInfoEnabled()) {
+ log.info("Aucun fichier de log existant pour les calendriers d'activité");
+ }
+ return false;
+ }
+ }
+
+ @Log
+ void onSuccessFromImportActivityCalendarsForm() throws SuiviObsmerException {
+ serviceBoat.importActivityCalendarCsv(activityCalendarsCsvFile.getStream());
+ companyBoatInfos = null;
+ }
+
+ public StreamResponse onActionFromShowActivityCalendarLogFile() {
+ return new StreamResponse() {
+
+ @Override
+ public String getContentType() {
+ return "text/plain;charset=utf-8";
+ }
+
+ @Override
+ public InputStream getStream() throws IOException {
+ return getActivityCalendarLogFile();
+ }
+
+ @Override
+ public void prepareResponse(Response response) {
+ }
+ };
+ }
+
/**************************** Filters Form *****************************************/
@Persist
@@ -428,6 +486,14 @@
/*@Persist
private SuiviObsmerPropertyChangeListener propertyChange;*/
+ public boolean isActivityCalendarImportRun() {
+ return SuiviObsmerContext.isActivityCalendarImportRun();
+ }
+
+ public boolean canShowActiveBoatInfos() {
+ return (user.getAdmin() && companyId != null) || !user.getAdmin();
+ }
+
public Block getActiveBoatInfosBlock() {
if (boatInfosEditable) {
return editBoatInfos;
@@ -567,4 +633,20 @@
contacts.createNewContact(boat, sampleRow);
return contacts;
}
+
+ /**************************** Go to last ActivityCalendar *****************/
+
+ @InjectPage
+ private BoatActivityCalendar calendarPage;
+
+ public boolean hasActivityCalendar() throws SuiviObsmerException {
+ boat = getBoatInfos().getBoat();
+ return boat.sizeActivityCalendar() != 0;
+ }
+
+ Object onActionFromShowLastActivityCalendar() throws SuiviObsmerException {
+ boat = getBoatInfos().getBoat();
+ calendarPage.setBoat(boat);
+ return calendarPage;
+ }
}
Modified: trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/services/SuiviObsmerManager.java
===================================================================
--- trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/services/SuiviObsmerManager.java 2009-12-14 13:55:52 UTC (rev 120)
+++ trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/services/SuiviObsmerManager.java 2009-12-15 10:16:12 UTC (rev 121)
@@ -57,6 +57,8 @@
@Override
public void registryDidShutdown() {
+ // No problem with reinstanciate the runner, all context is in SuiviObsmerContext which is static
+ runner = new SuiviObsmerRunnerImpl();
try {
runner.stop();
} catch (SuiviObsmerException eee) {
Modified: trunk/suiviobsmer-ui/src/main/resources/fr/ifremer/suiviobsmer/ui/pages/Boats.properties
===================================================================
--- trunk/suiviobsmer-ui/src/main/resources/fr/ifremer/suiviobsmer/ui/pages/Boats.properties 2009-12-14 13:55:52 UTC (rev 120)
+++ trunk/suiviobsmer-ui/src/main/resources/fr/ifremer/suiviobsmer/ui/pages/Boats.properties 2009-12-15 10:16:12 UTC (rev 121)
@@ -1,4 +1,5 @@
-boatsCsvFile-label: Fichier CSV \u00E0 importer
+boatsCsvFile-label: Fichier CSV des navires
+activityCalendarsCsvFile-label: Fichier CSV des calendriers d'activit\u00E9
# FILTERS
sampleRow-label: Ligne du plan
Modified: trunk/suiviobsmer-ui/src/main/resources/log4j.properties
===================================================================
--- trunk/suiviobsmer-ui/src/main/resources/log4j.properties 2009-12-14 13:55:52 UTC (rev 120)
+++ trunk/suiviobsmer-ui/src/main/resources/log4j.properties 2009-12-15 10:16:12 UTC (rev 121)
@@ -12,7 +12,7 @@
log4j.appender.globalfile.MaxFileSize=500KB
log4j.appender.globalfile.Append=true
log4j.appender.globalfile.MaxBackupIndex=10
-log4j.appender.globalfile.Threshold=DEBUG
+log4j.appender.globalfile.Threshold=TRACE
log4j.appender.globalfile.layout=org.apache.log4j.PatternLayout
log4j.appender.globalfile.layout.ConversionPattern=%d{yyyy/MM/dd hh:mm:ss} %5p (%F:%L) %m%n
Added: trunk/suiviobsmer-ui/src/main/webapp/BoatActivityCalendar.tml
===================================================================
--- trunk/suiviobsmer-ui/src/main/webapp/BoatActivityCalendar.tml (rev 0)
+++ trunk/suiviobsmer-ui/src/main/webapp/BoatActivityCalendar.tml 2009-12-15 10:16:12 UTC (rev 121)
@@ -0,0 +1,16 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<t:layout t:pageTitle="Calendrier d'activité" t:contentId="so-activity-calendar"
+ xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd" xmlns:p="tapestry:parameter">
+
+ <t:if t:test="activityCalendar">
+ <h1>Calendrier d'activité ${activityCalendar.year} du navire ${activityCalendar.boat.name}</h1>
+ <p:else>
+ <div class="fb-error">
+ Aucun calendrier d'activité chargé !
+ </div>
+ </p:else>
+ </t:if>
+
+
+</t:layout>
+
Modified: trunk/suiviobsmer-ui/src/main/webapp/Boats.tml
===================================================================
--- trunk/suiviobsmer-ui/src/main/webapp/Boats.tml 2009-12-14 13:55:52 UTC (rev 120)
+++ trunk/suiviobsmer-ui/src/main/webapp/Boats.tml 2009-12-15 10:16:12 UTC (rev 121)
@@ -16,6 +16,34 @@
<!--/t:zone-->
</fieldset>
</div>
+ <t:unless t:test="activityCalendarImportRun">
+ <div class="so-import clearfix">
+ <fieldset>
+ <legend>Import des calendriers d'activité</legend>
+ <form t:type="form" t:id="importActivityCalendarsForm">
+ <t:errors />
+ <t:label for="activityCalendarsCsvFile" /> :
+ <input t:type="upload" t:id="activityCalendarsCsvFile" t:validate="required" />
+ <input t:type="submit" class="ico import" value="OK"
+ title="Importer les calendriers d'activité des navires (format CSV)" />
+ </form>
+ <t:if t:test="logFileExists">
+ <div class="fright">
+ <a t:type="actionlink" t:id="showActivityCalendarLogFile">
+ <img src="${asset:context:}/img/text-32px.png"
+ title="Afficher le fichier de log"/>
+ </a>
+ </div>
+ </t:if>
+ </fieldset>
+ </div>
+ <p:else>
+ <div class="fb-info">
+ Import des calendriers d'activité en cours. <br />
+ Vous pouvez continuer à naviguer sur le site en attendant la fin du chargement.
+ </div>
+ </p:else>
+ </t:unless>
</t:if>
<!-- Filtres -->
@@ -65,8 +93,8 @@
</p:boatName>
</t:beaneditor>
<div class="t-beaneditor-row aright">
- <input t:type="submit" class="ico undo" t:id="reset" value="Reset" />
- <input t:type="submit" class="ico search-32px" t:id="search" value="Search" />
+ <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>
@@ -96,71 +124,71 @@
</p:boatLengthCell>
</div>
</div>
-
-
<!-- BOATINFOS:: Informations du navire sélectionné -->
<t:if t:test="boatSelectedImmatriculation">
- <t:zone t:id="boatInfosZone" t:update="show" class="fleft" id="so-boats-boat-infos">
- <t:if t:test="user.admin">
- <!-- For admin -->
- <h2>Informations sur <!--${companyBoatInfos.boatInfos.boat.name}-->${boatName}</h2>
- <form t:type="form" t:id="companySelectForm" t:zone="so-boats-boat-infos">
- <t:label t:for="company" /> :
- <input t:type="select" t:id="company" t:model="companySelectModel" t:value="companyId" />
- <input t:type="submit" class="ico search" t:id="searchCompany" value="Search" />
- </form>
- <t:if t:test="companyId">
+ <t:zone t:id="boatInfosZone" t:update="show" class="fleft" id="so-boats-boat-infos">
+ <t:unless t:test="activityCalendarImportRun">
+ <!-- HEADER For admin -->
+ <t:if t:test="user.admin">
+ <h2>Informations sur <!--${companyBoatInfos.boatInfos.boat.name}-->${boatName}</h2>
+ <form t:type="form" t:id="companySelectForm" t:zone="so-boats-boat-infos">
+ <t:label t:for="company" /> :
+ <input t:type="select" t:id="company" t:model="companySelectModel" t:value="companyId" />
+ <input t:type="submit" class="ico search" t:id="searchCompany" value="Search" />
+ </form>
+ </t:if>
+ <!-- BODY - delegator -->
+ <t:if t:test="canShowActiveBoatInfos()">
<t:delegate to="activeBoatInfosBlock" />
+ </t:if>
+ <!-- BODY - activity calendar -->
+ <t:if t:test="hasActivityCalendar()">
<fieldset id="so-boats-boat-infos-calendar">
- <legend>Calendrier d'activité 2009</legend>
- <p><img src="${asset:context:}/img/calendar.png" title="Calendrier d'activité"/></p>
+ <legend>Calendrier d'activité</legend>
+ <p>
+ <a t:type="actionlink" t:id="showLastActivityCalendar">
+ <img src="${asset:context:}/img/calendar.png" title="Calendrier d'activité"/>
+ </a>
+ </p>
</fieldset>
</t:if>
-
- <!-- For user -->
- <p:else>
- <t:delegate to="activeBoatInfosBlock" />
- <fieldset id="so-boats-boat-infos-calendar">
- <legend>Calendrier d'activité 2009</legend>
- <p><img src="${asset:context:}/img/calendar.png" title="Calendrier d'activité"/></p>
- </fieldset>
+ <!-- FOOTER For user -->
+ <t:unless t:test="user.admin">
<div id="so-boats-boat-infos-message">
Les informations saisies sont confidentielles et propriété de la société. <br />
Elles sont néanmoins consultables par un administrateur
</div>
+ </t:unless>
+
+ <p:else>
+ <div class="fb-info">
+ Le chargement des calendriers d'activité est en cours. <br />
+ Vous ne pouvez pas accéder aux informations du navire pour l'instant. <br />
+ Veuillez réessayer ultérieurement.
+ </div>
</p:else>
- </t:if>
+ </t:unless>
</t:zone>
+
<!-- BOATINFOS:: DISPLAY MODE -->
<t:block t:id="displayBoatInfos">
-
- <!--t:if t:test="user.admin">
- <h2>Informations sur ${boatInfos.boat.name}</h2>
- <form t:type="form" t:id="companySelectForm" t:zone="so-boats-boat-infos">
- <t:label t:for="company" /> :
- <input t:type="select" t:id="company" t:model="companySelectModel"
- t:value="companyId" />
- <input t:type="submit" class="ico search" t:id="searchCompany" value="Search" />
- </form>
- <p:else-->
- <!-- HEADER (User only) -->
+ <!-- HEADER For User -->
<t:unless t:test="user.admin">
<div class="clearfix">
<div class="fleft">
<h2>Informations sur ${boatInfos.boat.name}</h2>
</div>
- <!-- En-tête - actions -->
+ <!-- ACTIONS -->
<div class="fright">
<a t:type="actionlink" t:id="editBoatInfos" t:zone="so-boats-boat-infos">
<img src="${asset:context:}/img/edit.png" title="Editer les informations"/>
</a>
</div>
</div>
- <!--/p:else-->
</t:unless>
<!-- BODY - armateur, contact -->
@@ -213,8 +241,6 @@
</fieldset>
</t:block>
-
-
<!-- BOATINFOS:: EDITION MODE (User only) -->
<t:block t:id="editBoatInfos">
<form t:type="form" t:id="boatInfosForm" t:zone="so-boats-boat-infos">
@@ -227,11 +253,11 @@
</div>
<!-- En-tête - actions -->
<div class="fright">
+ <input t:type="submit" t:id="saveBoatInfos" class="ico22px save22px" value="Save"
+ title="Enregistrer les modifications" />
<a t:type="actionlink" t:id="cancelEditBoatInfos" t:zone="so-boats-boat-infos">
<img src="${asset:context:}/img/undo-22px.png" title="Annuler les modifications"/>
- </a>
- <input t:type="submit" t:id="saveBoatInfos" class="ico22px save22px" value="Save"
- title="Enregistrer les modifications" />
+ </a>
</div>
</div>
Modified: trunk/suiviobsmer-ui/src/main/webapp/css/boats.css
===================================================================
--- trunk/suiviobsmer-ui/src/main/webapp/css/boats.css 2009-12-14 13:55:52 UTC (rev 120)
+++ trunk/suiviobsmer-ui/src/main/webapp/css/boats.css 2009-12-15 10:16:12 UTC (rev 121)
@@ -78,6 +78,10 @@
padding: 20px;
}
+#so-boats-boat-infos div.fb-info {
+ width: 100%;
+}
+
#so-boats-boat-infos fieldset {
padding: 10px;
}
Modified: trunk/suiviobsmer-ui/src/main/webapp/css/main.css
===================================================================
--- trunk/suiviobsmer-ui/src/main/webapp/css/main.css 2009-12-14 13:55:52 UTC (rev 120)
+++ trunk/suiviobsmer-ui/src/main/webapp/css/main.css 2009-12-15 10:16:12 UTC (rev 121)
@@ -113,7 +113,7 @@
/* Separation */
ul#so-menu li.sep {
height: 12px;
- width: 10px;
+ width: 0.8%;
background-color: #007CC2;
}
/* Home */
Added: trunk/suiviobsmer-ui/src/main/webapp/img/text-32px.png
===================================================================
(Binary files differ)
Property changes on: trunk/suiviobsmer-ui/src/main/webapp/img/text-32px.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
1
0
[Suiviobsmer-commits] r120 - trunk/suiviobsmer-business
by fdesbois@users.labs.libre-entreprise.org 14 Dec '09
by fdesbois@users.labs.libre-entreprise.org 14 Dec '09
14 Dec '09
Author: fdesbois
Date: 2009-12-14 13:55:52 +0000 (Mon, 14 Dec 2009)
New Revision: 120
Modified:
trunk/suiviobsmer-business/pom.xml
Log:
Refactor name from Topia modification
Modified: trunk/suiviobsmer-business/pom.xml
===================================================================
--- trunk/suiviobsmer-business/pom.xml 2009-12-13 16:15:45 UTC (rev 119)
+++ trunk/suiviobsmer-business/pom.xml 2009-12-14 13:55:52 UTC (rev 120)
@@ -112,7 +112,7 @@
<configuration>
<reader>org.nuiton.eugene.ObjectModelReader</reader>
<includes>**/*.objectmodel</includes>
- <templates>org.nuiton.topia.generator.TopiaMetaGenerator,org.nuiton.topia.generator.ObjectModelTransformerToJavaInterface,org.nuiton.topia.generator.ObjectModelTransformerToJavaBean</templates>
+ <templates>org.nuiton.topia.generator.TopiaMetaGenerator,org.nuiton.topia.generator.InterfaceTransformer,org.nuiton.topia.generator.BeanTransformer</templates>
<!--<extractedPackages>fr.ifremer.suiviobsmer</extractedPackages>
<fullPackagePath>fr.ifremer.suiviobsmer</fullPackagePath>-->
<defaultPackage>fr.ifremer.suiviobsmer</defaultPackage>
1
0
13 Dec '09
Author: fdesbois
Date: 2009-12-13 16:15:45 +0000 (Sun, 13 Dec 2009)
New Revision: 119
Added:
trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/SuiviObsmerContext.java
trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/entity/ActivityCalendarImpl.java
trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/entity/ActivityMonthImpl.java
trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/entity/ActivityProfessionImpl.java
trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/ActivityCalendarImport.java
trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/impl/ActivityCalendarImportTest.java
trunk/suiviobsmer-business/src/test/resources/import/activity.csv
Removed:
trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/SuiviObsmerUtils.java
Modified:
trunk/pom.xml
trunk/suiviobsmer-business/pom.xml
trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/SuiviObsmerGlobal.java
trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/SuiviObsmerRunnerImpl.java
trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/entity/BoatImpl.java
trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/entity/CompanyImpl.java
trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/entity/ProgramImpl.java
trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/entity/UserImpl.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/impl/ServiceUserImpl.java
trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/mock/ServiceBoatMock.java
trunk/suiviobsmer-business/src/main/resources/SuiviObsmer.properties
trunk/suiviobsmer-business/src/main/xmi/suiviobsmer.zargo
trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/SuiviObsmerUtilsTest.java
trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/business/SuiviObsmerRunnerTest.java
trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/entity/SampleRowImplTest.java
trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/impl/ServiceBoatImplTest.java
trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/impl/ServiceSamplingImplTest.java
trunk/suiviobsmer-business/src/test/resources/TopiaContextSuiviObsmer.properties
trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/Administration.java
Log:
- Refactor SuiviObsmerUtils by SuiviObsmerContext more appropriate
- Add import for ActivityCalendar (thread in background) in Business module only
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2009-12-10 16:18:20 UTC (rev 118)
+++ trunk/pom.xml 2009-12-13 16:15:45 UTC (rev 119)
@@ -31,6 +31,11 @@
<version>2.4</version>
</dependency>
<dependency>
+ <groupId>commons-io</groupId>
+ <artifactId>commons-io</artifactId>
+ <version>1.4</version>
+ </dependency>
+ <dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.8.0</version>
Modified: trunk/suiviobsmer-business/pom.xml
===================================================================
--- trunk/suiviobsmer-business/pom.xml 2009-12-10 16:18:20 UTC (rev 118)
+++ trunk/suiviobsmer-business/pom.xml 2009-12-13 16:15:45 UTC (rev 119)
@@ -23,6 +23,10 @@
<artifactId>commons-lang</artifactId>
</dependency>
<dependency>
+ <groupId>commons-io</groupId>
+ <artifactId>commons-io</artifactId>
+ </dependency>
+ <dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
@@ -88,23 +92,37 @@
<version>${eugene.version}</version>
<executions>
<execution>
+ <id>Zargo to object model</id>
<phase>generate-sources</phase>
<configuration>
+ <modelType>objectmodel</modelType>
+ <includes>
+ <include>zargo</include>
+ </includes>
+ <fullPackagePath>fr.ifremer.suiviobsmer</fullPackagePath>
+ <!--<outputDirectory>target/generated-sources-zargo2ObjectModel</outputDirectory>-->
+ </configuration>
+ <goals>
+ <goal>generate-model-files</goal>
+ </goals>
+ </execution>
+ <execution>
+ <id>ObjectModel to Java</id>
+ <phase>generate-sources</phase>
+ <configuration>
<reader>org.nuiton.eugene.ObjectModelReader</reader>
<includes>**/*.objectmodel</includes>
<templates>org.nuiton.topia.generator.TopiaMetaGenerator,org.nuiton.topia.generator.ObjectModelTransformerToJavaInterface,org.nuiton.topia.generator.ObjectModelTransformerToJavaBean</templates>
- <extractedPackages>fr.ifremer.suiviobsmer</extractedPackages>
- <fullPackagePath>fr.ifremer.suiviobsmer</fullPackagePath>
+ <!--<extractedPackages>fr.ifremer.suiviobsmer</extractedPackages>
+ <fullPackagePath>fr.ifremer.suiviobsmer</fullPackagePath>-->
<defaultPackage>fr.ifremer.suiviobsmer</defaultPackage>
<generatedPackages>fr.ifremer.suiviobsmer</generatedPackages>
</configuration>
<goals>
- <goal>zargo2xmi</goal>
- <goal>xmi2objectmodel</goal>
<goal>generate</goal>
</goals>
</execution>
- <execution>
+ <!--<execution>
<id>generate-statemodel</id>
<phase>generate-test-sources</phase>
<configuration>
@@ -118,7 +136,7 @@
<goal>zargo2xmi</goal>
<goal>xmi2statemodel</goal>
</goals>
- </execution>
+ </execution>-->
</executions>
</plugin>
</plugins>
Copied: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/SuiviObsmerContext.java (from rev 118, trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/SuiviObsmerUtils.java)
===================================================================
--- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/SuiviObsmerContext.java (rev 0)
+++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/SuiviObsmerContext.java 2009-12-13 16:15:45 UTC (rev 119)
@@ -0,0 +1,185 @@
+/**
+ * *##%
+ * SuiviObsmer Business
+ * Copyright (C) 2009 Ifremer
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Lesser Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/gpl-3.0.html>.
+ * ##%*
+ */
+
+
+package fr.ifremer.suiviobsmer;
+
+
+import java.io.IOException;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.util.Date;
+import java.util.Properties;
+import java.util.Random;
+import org.apache.commons.lang.StringUtils;
+import org.hibernate.exception.SQLGrammarException;
+import org.nuiton.topia.TopiaContext;
+import org.nuiton.topia.TopiaContextFactory;
+import org.nuiton.topia.TopiaException;
+import org.nuiton.topia.TopiaNotFoundException;
+import org.nuiton.topia.persistence.TopiaEntity;
+import org.nuiton.topia.persistence.TopiaId;
+import org.nuiton.util.Resource;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * ContextUtilSuiviObsmer.java
+ *
+ * Created on 2009-11-23
+ *
+ * @author fdesbois
+ * @version $Revision$
+ *
+ * Last update: $Date$
+ * by : $Author$
+ */
+public class SuiviObsmerContext {
+
+ private static final Logger log = LoggerFactory.getLogger(SuiviObsmerContext.class);
+
+ public static final String PROP_FILENAME_LOG_ACTIVITY = "suiviobsmer.log.activityCalendar";
+
+ private static SuiviObsmerRunner runner;
+
+ private static boolean activityCalendarImport;
+
+ public static void setRunner(SuiviObsmerRunner run) {
+ runner = run;
+ }
+
+ public static Date getCurrentDate() {
+ return runner.currentDate();
+ }
+
+ public static String getProperty(String key) {
+ return runner.configuration().getProperty(key);
+ }
+
+ public static TopiaContext getTopiaRootContext() throws SuiviObsmerException {
+ if (runner.configuration() == null) {
+ throw new SuiviObsmerException("Configuration must be set before initializing context");
+ }
+ try {
+ return TopiaContextFactory.getContext(runner.configuration());
+ } catch (TopiaNotFoundException eee) {
+ serviceException(null, eee.getMessage(), eee);
+ }
+ return null;
+ }
+
+ public static void setActivityCalendarImport(boolean value) {
+ activityCalendarImport = value;
+ }
+
+ public static boolean isActivityCalendarImportRun() {
+ return activityCalendarImport;
+ }
+
+ /**
+ * Property file loading
+ * @param filename
+ * @return
+ * @throws java.net.URISyntaxException
+ * @throws java.io.IOException
+ */
+ public static Properties loadConfiguration(String filename)
+ throws URISyntaxException, IOException {
+ Properties props = new Properties();
+ URL url = Resource.getURL(filename);
+ if (log.isDebugEnabled()) {
+ log.debug(url.toString());
+ }
+ props.load(url.openStream());
+ return props;
+ //return PropertiesLoader.loadPropertiesFile(filename);
+ }
+
+ /*public static String convertId(String id) {
+ return Convert.toWebId(id);
+ }*/
+
+ public static void serviceException(TopiaContext transaction, String message, Exception eee) throws SuiviObsmerException {
+ if (log.isErrorEnabled()) {
+ log.error("An error occured",eee);
+ }
+ if (!(eee instanceof SuiviObsmerException)) {
+ if (!(eee instanceof TopiaException)) {
+ try {
+ if (transaction != null && !transaction.isClosed()) {
+ if (log.isInfoEnabled()) {
+ log.info("Saving annulation : Transaction rollback");
+ }
+ transaction.rollbackTransaction();
+ transaction.closeContext();
+ }
+ } catch (TopiaException eeee) {
+ throw new SuiviObsmerException("Fatal topia error when close context", eeee);
+ }
+ }
+ if (eee instanceof SQLGrammarException) {
+ if (log.isErrorEnabled()) {
+ log.error("SQL executed with error : " + ((SQLGrammarException)eee).getSQL());
+ }
+ }
+ throw new SuiviObsmerException(message,eee);
+ } else {
+ throw (SuiviObsmerException)eee;
+ }
+ }
+
+ /**
+ * Generate a random string of "length" character alphanumeric.
+ * @param length number of characters for the final string
+ * @return a String of "length" character
+ */
+ public static String createRandomString(int length) {
+ Random random = new Random();
+ StringBuilder sb = new StringBuilder();
+ while (sb.length() < length) {
+ sb.append(Integer.toHexString(random.nextInt()));
+ }
+ return sb.toString();
+ }
+
+ public static String encodeString(String string) {
+ return string;
+ }
+
+ public static String convertId(String topiaId) {
+ if (topiaId != null && !topiaId.isEmpty()) {
+ int index = topiaId.indexOf("#");
+ String id = topiaId.replace('#', 'K');
+ return id.substring(index);
+ }
+ return "";
+ }
+
+ public static <E extends TopiaEntity> boolean prepareTopiaId(Class<E> entityClass, E entity) {
+ String topiaId = entity.getTopiaId();
+ if (StringUtils.isEmpty(entity.getTopiaId())) {
+ topiaId = TopiaId.create(entityClass);
+ entity.setTopiaId(topiaId);
+ return true;
+ }
+ return false;
+ }
+}
Modified: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/SuiviObsmerGlobal.java
===================================================================
--- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/SuiviObsmerGlobal.java 2009-12-10 16:18:20 UTC (rev 118)
+++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/SuiviObsmerGlobal.java 2009-12-13 16:15:45 UTC (rev 119)
@@ -50,7 +50,7 @@
*/
static void createDefaultAdmin() throws SuiviObsmerException {
try {
- TopiaContext transaction = SuiviObsmerUtils.getTopiaRootContext().beginTransaction();
+ TopiaContext transaction = SuiviObsmerContext.getTopiaRootContext().beginTransaction();
UserDAO dao = SuiviObsmerModelDAOHelper.getUserDAO(transaction);
@@ -70,7 +70,7 @@
Company company = companyDAO.create(Company.ACTIVE, false, Company.NAME, "ADMIN");
- String password = SuiviObsmerUtils.encodeString("password");
+ String password = SuiviObsmerContext.encodeString("password");
User user = dao.create(
User.ADMIN, true,
@@ -87,7 +87,7 @@
transaction.closeContext();
} catch (Exception eee) {
- SuiviObsmerUtils.serviceException(null, "Error during database initialization", eee);
+ SuiviObsmerContext.serviceException(null, "Error during database initialization", eee);
}
}
Modified: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/SuiviObsmerRunnerImpl.java
===================================================================
--- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/SuiviObsmerRunnerImpl.java 2009-12-10 16:18:20 UTC (rev 118)
+++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/SuiviObsmerRunnerImpl.java 2009-12-13 16:15:45 UTC (rev 119)
@@ -55,10 +55,10 @@
_configuration.setProperty("topia.persistence.classes",
SuiviObsmerModelDAOHelper.getImplementationClassesAsString());
- SuiviObsmerUtils.setRunner(this);
+ SuiviObsmerContext.setRunner(this);
SuiviObsmerGlobal.createDefaultAdmin();
} catch (Exception eee) {
- SuiviObsmerUtils.serviceException(null, "Error during loadConfiguration from " +
+ SuiviObsmerContext.serviceException(null, "Error during loadConfiguration from " +
"'TopiaContextSuiviObsmer.properties' file", eee);
}
}
@@ -66,9 +66,9 @@
@Override
public void stop() throws SuiviObsmerException {
try {
- SuiviObsmerUtils.getTopiaRootContext().closeContext();
+ SuiviObsmerContext.getTopiaRootContext().closeContext();
} catch (TopiaException eee) {
- SuiviObsmerUtils.serviceException(null, "Error when closing Topia root context", eee);
+ SuiviObsmerContext.serviceException(null, "Error when closing Topia root context", eee);
}
}
Deleted: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/SuiviObsmerUtils.java
===================================================================
--- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/SuiviObsmerUtils.java 2009-12-10 16:18:20 UTC (rev 118)
+++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/SuiviObsmerUtils.java 2009-12-13 16:15:45 UTC (rev 119)
@@ -1,169 +0,0 @@
-/**
- * *##%
- * SuiviObsmer Business
- * Copyright (C) 2009 Ifremer
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/gpl-3.0.html>.
- * ##%*
- */
-
-
-package fr.ifremer.suiviobsmer;
-
-
-import java.io.IOException;
-import java.net.URISyntaxException;
-import java.net.URL;
-import java.util.Date;
-import java.util.Properties;
-import java.util.Random;
-import org.apache.commons.lang.StringUtils;
-import org.hibernate.exception.SQLGrammarException;
-import org.nuiton.topia.TopiaContext;
-import org.nuiton.topia.TopiaContextFactory;
-import org.nuiton.topia.TopiaException;
-import org.nuiton.topia.TopiaNotFoundException;
-import org.nuiton.topia.persistence.TopiaEntity;
-import org.nuiton.topia.persistence.TopiaId;
-import org.nuiton.util.Resource;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * ContextUtilSuiviObsmer.java
- *
- * Created on 2009-11-23
- *
- * @author fdesbois
- * @version $Revision$
- *
- * Last update: $Date$
- * by : $Author$
- */
-public class SuiviObsmerUtils {
-
- private static final Logger log = LoggerFactory.getLogger(SuiviObsmerUtils.class);
-
- private static SuiviObsmerRunner runner;
-
- public static void setRunner(SuiviObsmerRunner run) {
- runner = run;
- }
-
- public static TopiaContext getTopiaRootContext() throws SuiviObsmerException {
- if (runner.configuration() == null) {
- throw new SuiviObsmerException("Configuration must be set before initializing context");
- }
- try {
- return TopiaContextFactory.getContext(runner.configuration());
- } catch (TopiaNotFoundException eee) {
- serviceException(null, eee.getMessage(), eee);
- }
- return null;
- }
-
- public static Date getCurrentDate() {
- return runner.currentDate();
- }
-
- /**
- * Property file loading
- * @param filename
- * @return
- * @throws java.net.URISyntaxException
- * @throws java.io.IOException
- */
- public static Properties loadConfiguration(String filename)
- throws URISyntaxException, IOException {
- Properties props = new Properties();
- URL url = Resource.getURL(filename);
- if (log.isDebugEnabled()) {
- log.debug(url.toString());
- }
- props.load(url.openStream());
- return props;
- //return PropertiesLoader.loadPropertiesFile(filename);
- }
-
- /*public static String convertId(String id) {
- return Convert.toWebId(id);
- }*/
-
- public static void serviceException(TopiaContext transaction, String message, Exception eee) throws SuiviObsmerException {
- if (log.isErrorEnabled()) {
- log.error("An error occured",eee);
- }
- if (!(eee instanceof SuiviObsmerException)) {
- if (!(eee instanceof TopiaException)) {
- try {
- if (transaction != null && !transaction.isClosed()) {
- if (log.isInfoEnabled()) {
- log.info("Saving annulation : Transaction rollback");
- }
- transaction.rollbackTransaction();
- transaction.closeContext();
- }
- } catch (TopiaException eeee) {
- throw new SuiviObsmerException("Fatal topia error when close context", eeee);
- }
- }
- if (eee instanceof SQLGrammarException) {
- if (log.isErrorEnabled()) {
- log.error("SQL executed with error : " + ((SQLGrammarException)eee).getSQL());
- }
- }
- throw new SuiviObsmerException(message,eee);
- } else {
- throw (SuiviObsmerException)eee;
- }
- }
-
- /**
- * Generate a random string of "length" character alphanumeric.
- * @param length number of characters for the final string
- * @return a String of "length" character
- */
- public static String createRandomString(int length) {
- Random random = new Random();
- StringBuilder sb = new StringBuilder();
- while (sb.length() < length) {
- sb.append(Integer.toHexString(random.nextInt()));
- }
- return sb.toString();
- }
-
- public static String encodeString(String string) {
- return string;
- }
-
- public static String convertId(String topiaId) {
- if (topiaId != null && !topiaId.isEmpty()) {
- int index = topiaId.indexOf("#");
- String id = topiaId.replace('#', 'K');
- return id.substring(index);
- }
- return "";
- }
-
- public static <E extends TopiaEntity> boolean prepareTopiaId(Class<E> entityClass, E entity) {
- String topiaId = entity.getTopiaId();
- if (StringUtils.isEmpty(entity.getTopiaId())) {
- topiaId = TopiaId.create(entityClass);
- entity.setTopiaId(topiaId);
- return true;
- }
- return false;
- }
-}
Added: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/entity/ActivityCalendarImpl.java
===================================================================
--- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/entity/ActivityCalendarImpl.java (rev 0)
+++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/entity/ActivityCalendarImpl.java 2009-12-13 16:15:45 UTC (rev 119)
@@ -0,0 +1,31 @@
+
+package fr.ifremer.suiviobsmer.entity;
+
+import java.io.Serializable;
+
+/**
+ * ActivityCalendarImpl
+ *
+ * Created: 11 déc. 2009
+ *
+ * @author fdesbois
+ * @version $Revision$
+ *
+ * Mise a jour: $Date$
+ * par : $Author$
+ */
+public class ActivityCalendarImpl extends fr.ifremer.suiviobsmer.entity.ActivityCalendarAbstract implements Serializable, fr.ifremer.suiviobsmer.entity.ActivityCalendar {
+
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public ActivityMonth getActivityMonth(int monthNumber) {
+ for (ActivityMonth month : getActivityMonth()) {
+ if (month.getMonth() == monthNumber) {
+ return month;
+ }
+ }
+ return null;
+ }
+
+} //ActivityCalendarImpl
Property changes on: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/entity/ActivityCalendarImpl.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Revision
Added: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/entity/ActivityMonthImpl.java
===================================================================
--- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/entity/ActivityMonthImpl.java (rev 0)
+++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/entity/ActivityMonthImpl.java 2009-12-13 16:15:45 UTC (rev 119)
@@ -0,0 +1,30 @@
+package fr.ifremer.suiviobsmer.entity;
+
+import java.io.Serializable;
+
+/**
+ * ActivityMonthImpl
+ *
+ * Created: 11 déc. 2009
+ *
+ * @author fdesbois
+ * @version $Revision$
+ *
+ * Mise a jour: $Date$
+ * par : $Author$
+ */
+public class ActivityMonthImpl extends ActivityMonthAbstract implements Serializable, ActivityMonth {
+
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public ActivityProfession getActivityProfession(int professionOrder) {
+ for (ActivityProfession profession : getActivityProfession()) {
+ if (profession.getProfessionOrder() == professionOrder) {
+ return profession;
+ }
+ }
+ return null;
+ }
+
+} //ActivityProfessionImpl
Property changes on: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/entity/ActivityMonthImpl.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Revision
Added: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/entity/ActivityProfessionImpl.java
===================================================================
--- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/entity/ActivityProfessionImpl.java (rev 0)
+++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/entity/ActivityProfessionImpl.java 2009-12-13 16:15:45 UTC (rev 119)
@@ -0,0 +1,30 @@
+
+package fr.ifremer.suiviobsmer.entity;
+
+import java.io.Serializable;
+
+/**
+ * ActivityZoneImpl
+ *
+ * Created: 11 déc. 2009
+ *
+ * @author fdesbois
+ * @version $Revision$
+ *
+ * Mise a jour: $Date$
+ * par : $Author$
+ */
+public class ActivityProfessionImpl extends ActivityProfessionAbstract implements Serializable, ActivityProfession {
+
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public ActivityZone getActivityZone(int zoneId) {
+ for (ActivityZone zone : getActivityZone()) {
+ if (zone.getZoneId() == zoneId) {
+ return zone;
+ }
+ }
+ return null;
+ }
+}
Property changes on: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/entity/ActivityProfessionImpl.java
___________________________________________________________________
Added: svn:keywords
+ "Author Date Id Revision HeadURL"
Modified: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/entity/BoatImpl.java
===================================================================
--- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/entity/BoatImpl.java 2009-12-10 16:18:20 UTC (rev 118)
+++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/entity/BoatImpl.java 2009-12-13 16:15:45 UTC (rev 119)
@@ -23,7 +23,7 @@
import fr.ifremer.suiviobsmer.SuiviObsmerException;
import fr.ifremer.suiviobsmer.SuiviObsmerModelDAOHelper;
-import fr.ifremer.suiviobsmer.SuiviObsmerUtils;
+import fr.ifremer.suiviobsmer.SuiviObsmerContext;
import java.io.Serializable;
import org.nuiton.topia.TopiaContext;
import org.slf4j.Logger;
@@ -56,7 +56,7 @@
throw new IllegalArgumentException("company parameter can't be null to getBoatsInfos " +
"for boat '" + this.getName() + "'");
}
- transaction = SuiviObsmerUtils.getTopiaRootContext().beginTransaction();
+ transaction = SuiviObsmerContext.getTopiaRootContext().beginTransaction();
/*CompanyDAO companyDAO = SuiviObsmerModelDAOHelper.getCompanyDAO(transaction);
Company companyFromDB = companyDAO.findByTopiaId(company.getTopiaId());*/
@@ -79,7 +79,7 @@
transaction.closeContext();
} catch (Exception eee) {
- SuiviObsmerUtils.serviceException(transaction,
+ SuiviObsmerContext.serviceException(transaction,
"Impossible de récupérer les informations privées du navire lié à la société " +
"'" + company.getName() + "'",
eee);
Modified: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/entity/CompanyImpl.java
===================================================================
--- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/entity/CompanyImpl.java 2009-12-10 16:18:20 UTC (rev 118)
+++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/entity/CompanyImpl.java 2009-12-13 16:15:45 UTC (rev 119)
@@ -21,7 +21,7 @@
package fr.ifremer.suiviobsmer.entity;
-import fr.ifremer.suiviobsmer.SuiviObsmerUtils;
+import fr.ifremer.suiviobsmer.SuiviObsmerContext;
import java.io.Serializable;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -50,6 +50,6 @@
*/
@Override
public String getId() {
- return SuiviObsmerUtils.convertId(getTopiaId());
+ return SuiviObsmerContext.convertId(getTopiaId());
}
}
Modified: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/entity/ProgramImpl.java
===================================================================
--- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/entity/ProgramImpl.java 2009-12-10 16:18:20 UTC (rev 118)
+++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/entity/ProgramImpl.java 2009-12-13 16:15:45 UTC (rev 119)
@@ -21,7 +21,7 @@
package fr.ifremer.suiviobsmer.entity;
-import fr.ifremer.suiviobsmer.SuiviObsmerUtils;
+import fr.ifremer.suiviobsmer.SuiviObsmerContext;
import java.io.Serializable;
import java.util.Calendar;
import java.util.Date;
@@ -56,13 +56,13 @@
@Override
public boolean isStarted() {
- Date current = SuiviObsmerUtils.getCurrentDate();
+ Date current = SuiviObsmerContext.getCurrentDate();
return current.after(getPeriodBegin()) || current.equals(getPeriodBegin());
}
@Override
public boolean isFinished() {
- Date current = SuiviObsmerUtils.getCurrentDate();
+ Date current = SuiviObsmerContext.getCurrentDate();
return current.after(getPeriodEnd());
}
Modified: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/entity/UserImpl.java
===================================================================
--- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/entity/UserImpl.java 2009-12-10 16:18:20 UTC (rev 118)
+++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/entity/UserImpl.java 2009-12-13 16:15:45 UTC (rev 119)
@@ -21,7 +21,7 @@
package fr.ifremer.suiviobsmer.entity;
-import fr.ifremer.suiviobsmer.SuiviObsmerUtils;
+import fr.ifremer.suiviobsmer.SuiviObsmerContext;
import java.io.Serializable;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -59,7 +59,7 @@
*/
@Override
public String getId() {
- return SuiviObsmerUtils.convertId(getTopiaId());
+ return SuiviObsmerContext.convertId(getTopiaId());
}
}
Added: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/ActivityCalendarImport.java
===================================================================
--- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/ActivityCalendarImport.java (rev 0)
+++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/ActivityCalendarImport.java 2009-12-13 16:15:45 UTC (rev 119)
@@ -0,0 +1,281 @@
+
+package fr.ifremer.suiviobsmer.impl;
+
+import fr.ifremer.suiviobsmer.*;
+import com.csvreader.CsvReader;
+import fr.ifremer.suiviobsmer.entity.ActivityCalendar;
+import fr.ifremer.suiviobsmer.entity.ActivityCalendarDAO;
+import fr.ifremer.suiviobsmer.entity.ActivityMonth;
+import fr.ifremer.suiviobsmer.entity.ActivityMonthDAO;
+import fr.ifremer.suiviobsmer.entity.ActivityProfession;
+import fr.ifremer.suiviobsmer.entity.ActivityProfessionDAO;
+import fr.ifremer.suiviobsmer.entity.ActivityZone;
+import fr.ifremer.suiviobsmer.entity.ActivityZoneDAO;
+import fr.ifremer.suiviobsmer.entity.Boat;
+import fr.ifremer.suiviobsmer.entity.BoatDAO;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.charset.Charset;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang.time.DurationFormatUtils;
+import org.nuiton.topia.TopiaContext;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * ActivityCalendarImport
+ *
+ * Created: 11 déc. 2009
+ *
+ * @author fdesbois
+ * @version $Revision$
+ *
+ * Mise a jour: $Date$
+ * par : $Author$
+ */
+public class ActivityCalendarImport implements Runnable {
+
+ private InputStream input;
+
+ private FileWriter writer;
+
+ private static final Logger log = LoggerFactory.getLogger(ActivityCalendarImport.class);
+
+ public ActivityCalendarImport(InputStream input) throws IOException {
+ super();
+ this.input = input;
+ String filename =
+ SuiviObsmerContext.getProperty(SuiviObsmerContext.PROP_FILENAME_LOG_ACTIVITY);
+ File file = new File(filename);
+ file.getParentFile().mkdirs();
+ if (file.exists()) {
+ file.delete();
+ file.createNewFile();
+ }
+ writer = new FileWriter(filename);
+ }
+
+ @Override
+ public void run() {
+ TopiaContext transaction = null;
+ SuiviObsmerContext.setActivityCalendarImport(true);
+ int currRow = 0;
+ try {
+ transaction = SuiviObsmerContext.getTopiaRootContext().beginTransaction();
+
+ CsvReader reader = new CsvReader(input, Charset.forName("UTF-8"));
+
+ long startTime = System.currentTimeMillis();
+
+ reader.readHeaders();
+
+ int result = 0;
+
+ while(reader.readRecord()) {
+ currRow++;
+ //result[0]++;
+
+ if (log.isTraceEnabled()) {
+ log.trace(" " + Arrays.asList(reader.getValues()));
+ }
+
+ int boatImmatriculation = Integer.parseInt(reader.get("NAVS_COD").trim());
+
+ BoatDAO boatDAO = SuiviObsmerModelDAOHelper.getBoatDAO(transaction);
+
+ Boat boat = boatDAO.findByImmatriculation(boatImmatriculation);
+
+ if (boat != null) {
+
+ ActivityCalendarDAO dao = SuiviObsmerModelDAOHelper.getActivityCalendarDAO(transaction);
+
+
+ int year = Integer.parseInt(reader.get("SYNA_AN").trim());
+
+ ActivityCalendar calendar = dao.findByProperties(
+ ActivityCalendar.BOAT, boat,
+ ActivityCalendar.YEAR, year);
+
+ if (calendar == null) {
+ int fiability = Integer.parseInt(reader.get("INDQ_COD").trim());
+
+ calendar = dao.create(
+ ActivityCalendar.BOAT, boat,
+ ActivityCalendar.YEAR, year,
+ ActivityCalendar.FIABILITY, fiability);
+
+ calendar.setActivityMonth(new ArrayList<ActivityMonth>());
+
+ info("Création d'un calendrier " + year +
+ " pour le navire immatriculé " + boatImmatriculation, currRow);
+
+ //transaction.commitTransaction();
+ }
+ String calendarCode = "[ calendrier " + year + ", navire " + boatImmatriculation + " ]";
+
+ int monthNum = Integer.parseInt(reader.get("SYNA_MOI").trim());
+
+ String harbourCode = reader.get("SYNA_POR_COD").trim();
+ ActivityMonth month = calendar.getActivityMonth(monthNum);
+ if (month == null) {
+
+ boolean active = !harbourCode.equals("INA");
+
+ ActivityMonthDAO monthDAO = SuiviObsmerModelDAOHelper.getActivityMonthDAO(transaction);
+ month = monthDAO.create(
+ ActivityMonth.ACTIVITY_CALENDAR, calendar,
+ ActivityMonth.MONTH, monthNum,
+ ActivityMonth.ACTIVE, active);
+
+ month.setActivityProfession(new ArrayList<ActivityProfession>());
+
+ info("Création du mois " + monthNum + " actif(" + active + ") " + calendarCode, currRow);
+
+ if (active) {
+ String nbSeaDaysString = reader.get("SYNA_NOMJDM").trim();
+ int nbSeaDays = Integer.parseInt(nbSeaDaysString);
+ int nbFishingDays = Integer.parseInt(reader.get("SYNA_NOMJDP").trim());
+ int nbBoardingPersons = Integer.parseInt(reader.get("SYNA_NOMHE").trim());
+ int harbourId = Integer.parseInt(reader.get("SYNA_TPOR_COD").trim());
+ String harbourLibelle = reader.get("SYNA_POR_LIB").trim();
+ //String harbourCode = reader.get("SYNA_POR_COD").trim();
+
+ month.setHarbourId(harbourId);
+ month.setHarbourCode(harbourCode);
+ month.setHarbourLibelle(harbourLibelle);
+ month.setNbBoardingPersons(nbBoardingPersons);
+ month.setNbFishingDays(nbFishingDays);
+ month.setNbSeaDays(nbSeaDays);
+ } else {
+ result++;
+ }
+
+ calendar.addActivityMonth(month);
+
+ //transaction.commitTransaction();
+ }
+
+ if (month.getActive()) {
+
+ int professionOrder = Integer.parseInt(reader.get("META_ORDRE").trim());
+ ActivityProfession profession = month.getActivityProfession(professionOrder);
+
+ if (profession == null) {
+ String professionCode = reader.get("MET_COD").trim();
+ int professionId = Integer.parseInt(reader.get("MET_ID").trim());
+ String professionLibelle = reader.get("MET_LIB").trim();
+
+ ActivityProfessionDAO professionDAO =
+ SuiviObsmerModelDAOHelper.getActivityProfessionDAO(transaction);
+ profession = professionDAO.create(
+ ActivityProfession.ACTIVITY_MONTH, month,
+ ActivityProfession.PROFESSION_ORDER, professionOrder,
+ ActivityProfession.ID, professionId,
+ ActivityProfession.CODE, professionCode,
+ ActivityProfession.LIBELLE, professionLibelle);
+
+ profession.setActivityZone(new ArrayList<ActivityZone>());
+
+ info("Création du métier " + professionOrder + " code(" + professionCode + ") " +
+ "[ mois " + monthNum + " ] " +
+ calendarCode, currRow);
+
+ month.addActivityProfession(profession);
+ }
+
+ int zoneId = Integer.parseInt(reader.get("TSECT_COD").trim());
+ ActivityZone zone = profession.getActivityZone(zoneId);
+
+ if (zone == null) {
+
+ int gradiantCode = Integer.parseInt(reader.get("GRA_COD").trim());
+ String gradiantLibelle = reader.get("GRA_LIB").trim();
+ String zoneCode = reader.get("SECT_COD").trim();
+ String zoneLibelle = reader.get("SECT_LIB").trim();
+
+ ActivityZoneDAO zoneDAO =
+ SuiviObsmerModelDAOHelper.getActivityZoneDAO(transaction);
+
+ zone = zoneDAO.create(
+ ActivityZone.ACTIVITY_PROFESSION, profession,
+ ActivityZone.ZONE_ID, zoneId,
+ ActivityZone.GRADIANT_CODE, gradiantCode,
+ ActivityZone.GRADIANT_LIBELLE, gradiantLibelle,
+ ActivityZone.ZONE_CODE, zoneCode,
+ ActivityZone.ZONE_LIBELLE, zoneLibelle);
+
+ info("Création de la zone " + zoneId + " [ mois " + monthNum + " ] " +
+ calendarCode, currRow);
+
+ profession.addActivityZone(zone);
+
+ transaction.commitTransaction();
+
+ result++;
+ } else {
+ warn("Zone déjà existante !", currRow);
+ }
+ }
+ }
+
+ transaction.commitTransaction();
+ }
+
+
+ long stopTime = System.currentTimeMillis();
+
+ String execTime = DurationFormatUtils.formatDurationHMS(stopTime - startTime);
+
+ info("Nombre de ligne ajouté : " + result, -1);
+ info("Temps d'exécution : " + execTime, -1);
+
+ transaction.closeContext();
+ } catch (Exception eee) {
+ if (log.isErrorEnabled()) {
+ log.error("Problème lors de l'import du calendrier d'activité", eee);
+ }
+ try {
+ error("exception " + eee.getClass().getSimpleName() + " : " + eee.getMessage(), currRow);
+ } catch (IOException ex) {
+ if (log.isErrorEnabled()) {
+ log.error("IO error", ex);
+ }
+ }
+ } finally {
+ IOUtils.closeQuietly(writer);
+ }
+ SuiviObsmerContext.setActivityCalendarImport(false);
+ }
+
+ protected void warn(String message, int numRow) throws IOException {
+ log("[WARN] " + message, numRow);
+ }
+
+ protected void error(String message, int numRow) throws IOException {
+ log("[ERROR] " + message, numRow);
+ }
+
+ protected void info(String message, int numRow) throws IOException {
+ log("[INFO] " + message, numRow);
+ }
+
+ protected void log(String message, int numRow) throws IOException {
+ Date date = new Date();
+ DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
+ String dateString = dateFormat.format(date);
+ String ligne = numRow != -1 ? "Ligne (" + numRow + ") : " : "";
+ String msg = "[" + dateString + "] " + ligne + message;
+ writer.write(msg + "\n");
+ if (log.isDebugEnabled()) {
+ log.debug("write log activityCalendar : " + msg);
+ }
+ }
+
+}
Property changes on: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/ActivityCalendarImport.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Revision
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 2009-12-10 16:18:20 UTC (rev 118)
+++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/ServiceBoatImpl.java 2009-12-13 16:15:45 UTC (rev 119)
@@ -22,7 +22,7 @@
package fr.ifremer.suiviobsmer.impl;
import com.csvreader.CsvReader;
-import fr.ifremer.suiviobsmer.SuiviObsmerUtils;
+import fr.ifremer.suiviobsmer.SuiviObsmerContext;
import fr.ifremer.suiviobsmer.SuiviObsmerException;
import fr.ifremer.suiviobsmer.SuiviObsmerModelDAOHelper;
import fr.ifremer.suiviobsmer.bean.BoatFilter;
@@ -31,6 +31,7 @@
import fr.ifremer.suiviobsmer.entity.*;
import fr.ifremer.suiviobsmer.entity.Boat;
import fr.ifremer.suiviobsmer.services.ServiceBoat;
+import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.Charset;
import java.util.ArrayList;
@@ -38,6 +39,7 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.logging.Level;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.commons.lang.BooleanUtils;
@@ -64,7 +66,7 @@
protected TopiaContext rootContext;
public ServiceBoatImpl() throws SuiviObsmerException {
- rootContext = SuiviObsmerUtils.getTopiaRootContext();
+ rootContext = SuiviObsmerContext.getTopiaRootContext();
}
@Override
@@ -207,7 +209,7 @@
transaction.closeContext();
} catch (Exception eee) {
- SuiviObsmerUtils.serviceException(transaction, "Impossible de filtrer la liste des navires", eee);
+ SuiviObsmerContext.serviceException(transaction, "Impossible de filtrer la liste des navires", eee);
}
return results;
}
@@ -270,7 +272,7 @@
transaction.closeContext();
} catch (Exception eee) {
- SuiviObsmerUtils.serviceException(transaction,
+ SuiviObsmerContext.serviceException(transaction,
"Impossible de récupérer les informations du navire " +
"immatriculé '" + boatImmatriculation + "'" +
" pour la société '" + company.getName() + "'", eee);
@@ -288,13 +290,13 @@
BoatInfosDAO dao = SuiviObsmerModelDAOHelper.getBoatInfosDAO(transaction);
BoatInfos boatInfos = companyBoatInfos.getBoatInfos();
- SuiviObsmerUtils.prepareTopiaId(BoatInfos.class, boatInfos);
+ SuiviObsmerContext.prepareTopiaId(BoatInfos.class, boatInfos);
dao.update(boatInfos);
ElligibleBoatDAO elligibleDAO = SuiviObsmerModelDAOHelper.getElligibleBoatDAO(transaction);
for (ElligibleBoat elligible : companyBoatInfos.getElligibleBoatsValues()) {
- SuiviObsmerUtils.prepareTopiaId(ElligibleBoat.class, elligible);
+ SuiviObsmerContext.prepareTopiaId(ElligibleBoat.class, elligible);
elligibleDAO.update(elligible);
}
@@ -306,7 +308,7 @@
transaction.commitTransaction();
transaction.closeContext();
} catch (Exception eee) {
- SuiviObsmerUtils.serviceException(transaction,
+ SuiviObsmerContext.serviceException(transaction,
"La chaîne d'immatriculations est incorrect ! Chaque immatriculation doit posséder 6 chiffres", eee);
}
}
@@ -337,7 +339,7 @@
transaction.closeContext();
} catch (Exception eee) {
- SuiviObsmerUtils.serviceException(transaction,
+ SuiviObsmerContext.serviceException(transaction,
"La chaîne d'immatriculations est incorrect ! Chaque immatriculation doit posséder 6 chiffres", eee);
}
return boats;
@@ -356,7 +358,7 @@
transaction.closeContext();
} catch (Exception eee) {
- SuiviObsmerUtils.serviceException(transaction, "Impossible de charger le navire", eee);
+ SuiviObsmerContext.serviceException(transaction, "Impossible de charger le navire", eee);
}
return result;
}
@@ -374,7 +376,7 @@
transaction.closeContext();
} catch (Exception eee) {
- SuiviObsmerUtils.serviceException(transaction, "Unable to get all boats", eee);
+ SuiviObsmerContext.serviceException(transaction, "Unable to get all boats", eee);
}
return results;
}
@@ -448,7 +450,7 @@
transaction.closeContext();
} catch (Exception eee) {
- SuiviObsmerUtils.serviceException(transaction,
+ SuiviObsmerContext.serviceException(transaction,
"Problème d'import du fichier CSV. Vérifiez l'en-tête du fichier : [ NAVS_COD,CARN_NOM," +
"CARN_LONGUEUR_HT,CARN_ANNEE,QUARTIER_IMMA,PER_COD,PER_NOM,PER_PRENOM,NAVS_ACTIVE ]"/* et l'encodage [ UTF-8 ] */ +
" Voir documentation pour plus de détails.",
@@ -457,4 +459,17 @@
return result;
}
+ @Override
+ public void importActiviyCalendarCsv(InputStream input) throws SuiviObsmerException {
+ if (!SuiviObsmerContext.isActivityCalendarImportRun()) {
+ try {
+ ActivityCalendarImport calendarImport = new ActivityCalendarImport(input);
+ new Thread(calendarImport).start();
+ } catch (IOException eee) {
+ SuiviObsmerContext.serviceException(null,
+ "Problème d'import du fichier CSV des calendriers d'activité", eee);
+ }
+ }
+ }
+
}
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 2009-12-10 16:18:20 UTC (rev 118)
+++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/ServiceContactImpl.java 2009-12-13 16:15:45 UTC (rev 119)
@@ -24,7 +24,7 @@
import fr.ifremer.suiviobsmer.DataLoader;
import fr.ifremer.suiviobsmer.SuiviObsmerException;
import fr.ifremer.suiviobsmer.SuiviObsmerModelDAOHelper;
-import fr.ifremer.suiviobsmer.SuiviObsmerUtils;
+import fr.ifremer.suiviobsmer.SuiviObsmerContext;
import fr.ifremer.suiviobsmer.bean.states.ContactStateEnum;
import fr.ifremer.suiviobsmer.entity.Boat;
import fr.ifremer.suiviobsmer.entity.Company;
@@ -59,7 +59,7 @@
protected TopiaContext rootContext;
public ServiceContactImpl() throws SuiviObsmerException {
- rootContext = SuiviObsmerUtils.getTopiaRootContext();
+ rootContext = SuiviObsmerContext.getTopiaRootContext();
}
@Override
@@ -88,7 +88,7 @@
transaction.closeContext();
} catch (Exception eee) {
- SuiviObsmerUtils.serviceException(transaction,
+ SuiviObsmerContext.serviceException(transaction,
"Impossible de filtrer la liste des contacts", eee);
}
return results;
@@ -122,7 +122,7 @@
ContactDAO dao = SuiviObsmerModelDAOHelper.getContactDAO(transaction);
- SuiviObsmerUtils.prepareTopiaId(Contact.class, contact);
+ SuiviObsmerContext.prepareTopiaId(Contact.class, contact);
if (delete) {
dao.delete(contact);
} else {
@@ -132,7 +132,7 @@
transaction.commitTransaction();
transaction.closeContext();
} catch (Exception eee) {
- SuiviObsmerUtils.serviceException(transaction,
+ SuiviObsmerContext.serviceException(transaction,
"Impossible de sauvegarder le contact", eee);
}
}
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 2009-12-10 16:18:20 UTC (rev 118)
+++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/ServiceReferentialImpl.java 2009-12-13 16:15:45 UTC (rev 119)
@@ -24,7 +24,7 @@
import com.csvreader.CsvReader;
import fr.ifremer.suiviobsmer.SuiviObsmerException;
import fr.ifremer.suiviobsmer.SuiviObsmerModelDAOHelper;
-import fr.ifremer.suiviobsmer.SuiviObsmerUtils;
+import fr.ifremer.suiviobsmer.SuiviObsmerContext;
import fr.ifremer.suiviobsmer.dto.Facade;
import fr.ifremer.suiviobsmer.entity.FishingZone;
import fr.ifremer.suiviobsmer.entity.FishingZoneDAO;
@@ -60,7 +60,7 @@
protected TopiaContext rootContext;
public ServiceReferentialImpl() throws SuiviObsmerException {
- rootContext = SuiviObsmerUtils.getTopiaRootContext();
+ rootContext = SuiviObsmerContext.getTopiaRootContext();
}
@Override
@@ -81,7 +81,7 @@
transaction.closeContext();
} catch (Exception eee) {
- SuiviObsmerUtils.serviceException(transaction,
+ SuiviObsmerContext.serviceException(transaction,
"Impossible de charger la liste des métiers", eee);
}
return results;
@@ -100,7 +100,7 @@
transaction.closeContext();
} catch (Exception eee) {
- SuiviObsmerUtils.serviceException(transaction,
+ SuiviObsmerContext.serviceException(transaction,
"Impossible de charger la liste des programmes", eee);
}
return results;
@@ -119,7 +119,7 @@
transaction.closeContext();
} catch (Exception eee) {
- SuiviObsmerUtils.serviceException(transaction,
+ SuiviObsmerContext.serviceException(transaction,
"Impossible de charger la liste des zones de pêche", eee);
}
return results;
@@ -163,7 +163,7 @@
transaction.commitTransaction();
transaction.closeContext();
} catch (Exception eee) {
- SuiviObsmerUtils.serviceException(transaction,
+ SuiviObsmerContext.serviceException(transaction,
"Problème d'import du fichier CSV. Vérifiez l'en-tête du fichier : [ PECHE_DIVISION," +
"PECHE_ZONE,PECHE_FACADE ]. Voir documentation pour plus de détails.",
eee);
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 2009-12-10 16:18:20 UTC (rev 118)
+++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/ServiceSamplingImpl.java 2009-12-13 16:15:45 UTC (rev 119)
@@ -24,7 +24,7 @@
import com.csvreader.CsvReader;
import fr.ifremer.suiviobsmer.SuiviObsmerException;
import fr.ifremer.suiviobsmer.SuiviObsmerModelDAOHelper;
-import fr.ifremer.suiviobsmer.SuiviObsmerUtils;
+import fr.ifremer.suiviobsmer.SuiviObsmerContext;
import fr.ifremer.suiviobsmer.dto.SamplingHistoricRow;
import fr.ifremer.suiviobsmer.entity.*;
import fr.ifremer.suiviobsmer.entity.SampleRow;
@@ -68,7 +68,7 @@
protected TopiaContext rootContext;
public ServiceSamplingImpl() throws SuiviObsmerException {
- rootContext = SuiviObsmerUtils.getTopiaRootContext();
+ rootContext = SuiviObsmerContext.getTopiaRootContext();
}
@Override
@@ -77,7 +77,7 @@
try {
transaction = rootContext.beginTransaction();
- boolean newRow = SuiviObsmerUtils.prepareTopiaId(SampleRow.class, row);
+ boolean newRow = SuiviObsmerContext.prepareTopiaId(SampleRow.class, row);
if (log.isDebugEnabled()) {
log.debug("new sampleRow : " + newRow);
@@ -88,7 +88,7 @@
if (newRow) {
// Save profession : create or update
ProfessionDAO professionDAO = SuiviObsmerModelDAOHelper.getProfessionDAO(transaction);
- SuiviObsmerUtils.prepareTopiaId(Profession.class, row.getProfession());
+ SuiviObsmerContext.prepareTopiaId(Profession.class, row.getProfession());
if (log.isDebugEnabled()) {
log.debug("create or update profession : " + row.getProfession());
}
@@ -98,7 +98,7 @@
// Save program : can't be create if row already exist
// TODO check program.topiaId exist for an update
ProgramDAO programDAO = SuiviObsmerModelDAOHelper.getProgramDAO(transaction);
- boolean newProgram = SuiviObsmerUtils.prepareTopiaId(Program.class, row.getProgram());
+ boolean newProgram = SuiviObsmerContext.prepareTopiaId(Program.class, row.getProgram());
if (log.isDebugEnabled()) {
log.debug("create or update program : " + row.getProgram());
}
@@ -107,7 +107,7 @@
// Save sampleMonth : create or update
SampleMonthDAO monthDAO = SuiviObsmerModelDAOHelper.getSampleMonthDAO(transaction);
for (SampleMonth month : row.getSampleMonth()) {
- SuiviObsmerUtils.prepareTopiaId(SampleMonth.class, month);
+ SuiviObsmerContext.prepareTopiaId(SampleMonth.class, month);
if (log.isDebugEnabled()) {
log.debug("create or update month : " + month);
}
@@ -158,7 +158,7 @@
transaction.commitTransaction();
transaction.closeContext();
} catch (Exception eee) {
- SuiviObsmerUtils.serviceException(transaction,
+ SuiviObsmerContext.serviceException(transaction,
"Impossible de sauvegarder la ligne d'échantillon", eee);
}
}
@@ -228,7 +228,7 @@
transaction.closeContext();
} catch (Exception eee) {
- SuiviObsmerUtils.serviceException(transaction,
+ SuiviObsmerContext.serviceException(transaction,
"Impossible de récupérer la liste des lignes du plan d'échantillonnage", eee);
}
return results;
@@ -268,7 +268,7 @@
transaction.closeContext();
} catch (Exception eee) {
- SuiviObsmerUtils.serviceException(transaction,
+ SuiviObsmerContext.serviceException(transaction,
"Impossible de récupérer la liste des lignes du plan d'échantillonnage", eee);
}
return results;
@@ -297,7 +297,7 @@
transaction.closeContext();
} catch (Exception eee) {
- SuiviObsmerUtils.serviceException(transaction,
+ SuiviObsmerContext.serviceException(transaction,
"Impossible de charger la ligne d'échantillon ayant pour identifiant : " + sampleRowId,
eee);
}
@@ -317,7 +317,7 @@
transaction.commitTransaction();
transaction.closeContext();
} catch (Exception eee) {
- SuiviObsmerUtils.serviceException(transaction,
+ SuiviObsmerContext.serviceException(transaction,
"Impossible de supprimer la ligne d'échantillon : " + sampleRow.getCode(),
eee);
}
@@ -424,15 +424,15 @@
result[1] = nbRefused;
} catch (NumberFormatException eee) {
- SuiviObsmerUtils.serviceException(transaction,
+ SuiviObsmerContext.serviceException(transaction,
"Erreur à la ligne " + currRow + " [CODE = " + row.getCode() + "] : " +
"Le format de la durée moyenne des marées est incorrect, il doit être de la forme : 1.9 ", eee);
} catch (ParseException eee) {
- SuiviObsmerUtils.serviceException(transaction,
+ SuiviObsmerContext.serviceException(transaction,
"Erreur à la ligne " + currRow + " [CODE = " + row.getCode() + "] : " +
"Le format des dates est incorrect, il doit être de la forme : MM/AAAA", eee);
} catch (Exception eee) {
- SuiviObsmerUtils.serviceException(transaction,
+ SuiviObsmerContext.serviceException(transaction,
"Problème d'import du fichier CSV. Voir documentation pour plus de détails sur " +
"les en-têtes autorisés et le format des données.",
eee);
Modified: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/ServiceUserImpl.java
===================================================================
--- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/ServiceUserImpl.java 2009-12-10 16:18:20 UTC (rev 118)
+++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/ServiceUserImpl.java 2009-12-13 16:15:45 UTC (rev 119)
@@ -23,7 +23,7 @@
import fr.ifremer.suiviobsmer.SuiviObsmerException;
import fr.ifremer.suiviobsmer.SuiviObsmerModelDAOHelper;
-import fr.ifremer.suiviobsmer.SuiviObsmerUtils;
+import fr.ifremer.suiviobsmer.SuiviObsmerContext;
import fr.ifremer.suiviobsmer.entity.Company;
import fr.ifremer.suiviobsmer.entity.CompanyDAO;
import fr.ifremer.suiviobsmer.entity.User;
@@ -53,7 +53,7 @@
protected TopiaContext rootContext;
public ServiceUserImpl() throws SuiviObsmerException {
- rootContext = SuiviObsmerUtils.getTopiaRootContext();
+ rootContext = SuiviObsmerContext.getTopiaRootContext();
}
@Override
@@ -79,7 +79,7 @@
transaction.closeContext();
} catch (Exception eee) {
- SuiviObsmerUtils.serviceException(transaction, "Une erreur est survenue lors de la demande de connexion", eee);
+ SuiviObsmerContext.serviceException(transaction, "Une erreur est survenue lors de la demande de connexion", eee);
}
return user;
}
@@ -95,8 +95,8 @@
transaction = rootContext.beginTransaction();
if (generatePassword) {
- String random = SuiviObsmerUtils.createRandomString(8);
- String password = SuiviObsmerUtils.encodeString(random);
+ String random = SuiviObsmerContext.createRandomString(8);
+ String password = SuiviObsmerContext.encodeString(random);
if (log.isDebugEnabled()) {
log.debug("show password : " + random);
}
@@ -105,7 +105,7 @@
UserDAO dao = SuiviObsmerModelDAOHelper.getUserDAO(transaction);
- SuiviObsmerUtils.prepareTopiaId(User.class, user);
+ SuiviObsmerContext.prepareTopiaId(User.class, user);
dao.update(user);
// TODO send mail to user.getLogin() if contains @
@@ -113,7 +113,7 @@
transaction.commitTransaction();
transaction.closeContext();
} catch (Exception eee) {
- SuiviObsmerUtils.serviceException(transaction, "Impossible de créer ou de mettre à jour l'utilisateur", eee);
+ SuiviObsmerContext.serviceException(transaction, "Impossible de créer ou de mettre à jour l'utilisateur", eee);
}
}
@@ -129,13 +129,13 @@
CompanyDAO dao = SuiviObsmerModelDAOHelper.getCompanyDAO(transaction);
- SuiviObsmerUtils.prepareTopiaId(Company.class, company);
+ SuiviObsmerContext.prepareTopiaId(Company.class, company);
dao.update(company);
transaction.commitTransaction();
transaction.closeContext();
} catch (Exception eee) {
- SuiviObsmerUtils.serviceException(transaction, "Impossible de créer ou de mettre à jour la société", eee);
+ SuiviObsmerContext.serviceException(transaction, "Impossible de créer ou de mettre à jour la société", eee);
}
}
@@ -159,7 +159,7 @@
transaction.closeContext();
} catch (Exception eee) {
- SuiviObsmerUtils.serviceException(transaction, "Impossible de créer ou de mettre à jour l'utilisateur", eee);
+ SuiviObsmerContext.serviceException(transaction, "Impossible de créer ou de mettre à jour l'utilisateur", eee);
}
return results;
}
Modified: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/mock/ServiceBoatMock.java
===================================================================
--- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/mock/ServiceBoatMock.java 2009-12-10 16:18:20 UTC (rev 118)
+++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/mock/ServiceBoatMock.java 2009-12-13 16:15:45 UTC (rev 119)
@@ -236,4 +236,9 @@
throw new UnsupportedOperationException("Not supported yet.");
}
+ @Override
+ public void importActiviyCalendarCsv(InputStream input) throws SuiviObsmerException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
}
Modified: trunk/suiviobsmer-business/src/main/resources/SuiviObsmer.properties
===================================================================
--- trunk/suiviobsmer-business/src/main/resources/SuiviObsmer.properties 2009-12-10 16:18:20 UTC (rev 118)
+++ trunk/suiviobsmer-business/src/main/resources/SuiviObsmer.properties 2009-12-13 16:15:45 UTC (rev 119)
@@ -8,4 +8,6 @@
hibernate.connection.driver_class=org.h2.Driver
hibernate.connection.url=jdbc:h2:file:~/.suiviobsmer/h2data
+suiviobsmer.log.activityCalendar=log/activity.log
+
Modified: trunk/suiviobsmer-business/src/main/xmi/suiviobsmer.zargo
===================================================================
(Binary files differ)
Modified: trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/SuiviObsmerUtilsTest.java
===================================================================
--- trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/SuiviObsmerUtilsTest.java 2009-12-10 16:18:20 UTC (rev 118)
+++ trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/SuiviObsmerUtilsTest.java 2009-12-13 16:15:45 UTC (rev 119)
@@ -131,7 +131,7 @@
Company company = new CompanyImpl();
- SuiviObsmerUtils.prepareTopiaId(Company.class, company);
+ SuiviObsmerContext.prepareTopiaId(Company.class, company);
assertNotNull(company.getTopiaId());
log.debug("topiaId for Company : " + company.getTopiaId());
}
Modified: trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/business/SuiviObsmerRunnerTest.java
===================================================================
--- trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/business/SuiviObsmerRunnerTest.java 2009-12-10 16:18:20 UTC (rev 118)
+++ trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/business/SuiviObsmerRunnerTest.java 2009-12-13 16:15:45 UTC (rev 119)
@@ -24,7 +24,7 @@
import fr.ifremer.suiviobsmer.SuiviObsmerException;
import fr.ifremer.suiviobsmer.SuiviObsmerModelDAOHelper;
import fr.ifremer.suiviobsmer.SuiviObsmerRunner;
-import fr.ifremer.suiviobsmer.SuiviObsmerUtils;
+import fr.ifremer.suiviobsmer.SuiviObsmerContext;
import java.io.IOException;
import java.net.URISyntaxException;
import java.net.URL;
@@ -65,9 +65,9 @@
_configuration = loadFileProperties("TopiaContextSuiviObsmer.properties");
_configuration.setProperty("topia.persistence.classes",
SuiviObsmerModelDAOHelper.getImplementationClassesAsString());
- SuiviObsmerUtils.setRunner(this);
+ SuiviObsmerContext.setRunner(this);
} catch (Exception eee) {
- SuiviObsmerUtils.serviceException(null, "Error during loadConfiguration from " +
+ SuiviObsmerContext.serviceException(null, "Error during loadConfiguration from " +
"'TopiaContextSuiviObsmer.properties' file", eee);
}
}
@@ -78,9 +78,9 @@
log.debug("TEST STOP : clearContext");
}
try {
- SuiviObsmerUtils.getTopiaRootContext().clear(true);
+ SuiviObsmerContext.getTopiaRootContext().clear(true);
} catch (TopiaException eee) {
- SuiviObsmerUtils.serviceException(null, "Error during clear database", eee);
+ SuiviObsmerContext.serviceException(null, "Error during clear database", eee);
}
}
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 2009-12-10 16:18:20 UTC (rev 118)
+++ trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/entity/SampleRowImplTest.java 2009-12-13 16:15:45 UTC (rev 119)
@@ -24,7 +24,7 @@
import fr.ifremer.suiviobsmer.SuiviObsmerException;
import fr.ifremer.suiviobsmer.SuiviObsmerModelDAOHelper;
import fr.ifremer.suiviobsmer.SuiviObsmerRunner;
-import fr.ifremer.suiviobsmer.SuiviObsmerUtils;
+import fr.ifremer.suiviobsmer.SuiviObsmerContext;
import fr.ifremer.suiviobsmer.business.SuiviObsmerRunnerTest;
import org.junit.After;
import org.junit.AfterClass;
@@ -87,7 +87,7 @@
log.info("getSampleMonth");
/** PREPARE DATA **/
- TopiaContext transaction = SuiviObsmerUtils.getTopiaRootContext().beginTransaction();
+ TopiaContext transaction = SuiviObsmerContext.getTopiaRootContext().beginTransaction();
SampleRowDAO dao = SuiviObsmerModelDAOHelper.getSampleRowDAO(transaction);
Added: trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/impl/ActivityCalendarImportTest.java
===================================================================
--- trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/impl/ActivityCalendarImportTest.java (rev 0)
+++ trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/impl/ActivityCalendarImportTest.java 2009-12-13 16:15:45 UTC (rev 119)
@@ -0,0 +1,102 @@
+
+package fr.ifremer.suiviobsmer.impl;
+
+import fr.ifremer.suiviobsmer.SuiviObsmerContext;
+import fr.ifremer.suiviobsmer.SuiviObsmerException;
+import fr.ifremer.suiviobsmer.SuiviObsmerRunner;
+import fr.ifremer.suiviobsmer.business.SuiviObsmerRunnerTest;
+import fr.ifremer.suiviobsmer.services.ServiceBoat;
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.LineNumberReader;
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import static org.junit.Assert.*;
+
+/**
+ * ActivityCalendarImport
+ *
+ * Created: 11 déc. 2009
+ *
+ * @author fdesbois
+ * @version $Revision$
+ *
+ * Mise a jour: $Date$
+ * par : $Author$
+ */
+public class ActivityCalendarImportTest {
+
+ private static SuiviObsmerRunner runner;
+
+ private static final Logger log = LoggerFactory.getLogger(ActivityCalendarImportTest.class);
+
+ public ActivityCalendarImportTest() {
+ }
+
+ @BeforeClass
+ public static void setUpClass() throws Exception {
+ runner = new SuiviObsmerRunnerTest();
+ }
+
+ @AfterClass
+ public static void tearDownClass() throws Exception {
+ }
+
+ @Before
+ public void setUp() throws SuiviObsmerException {
+ runner.start();
+ }
+
+ @After
+ public void tearDown() throws SuiviObsmerException {
+ runner.stop();
+ }
+
+ /**
+ * Test of run method, of class ActivityCalendarImport.
+ */
+ @Test
+ public void testRun() throws IOException, InterruptedException, SuiviObsmerException {
+ log.info("run");
+
+ ServiceBoat serviceBoat = new ServiceBoatImpl();
+ InputStream input = getClass().getResourceAsStream("/import/navires.csv");
+ serviceBoat.importBoatCsv(input);
+
+ input = getClass().getResourceAsStream("/import/activity.csv");
+
+ ActivityCalendarImport instance = new ActivityCalendarImport(input);
+
+ Thread t = new Thread(instance);
+ t.start();
+ t.join();
+
+ String filename =
+ SuiviObsmerContext.getProperty(SuiviObsmerContext.PROP_FILENAME_LOG_ACTIVITY);
+
+ File file = new File(filename);
+ Assert.assertTrue(file.exists());
+ FileReader reader = new FileReader(file);
+ LineNumberReader numberReader = new LineNumberReader(reader);
+
+ String line;
+ while ((line = numberReader.readLine()) != null) {
+ if (numberReader.getLineNumber() == 26) {
+ String lastChar = line.substring(line.length()-1);
+ Assert.assertEquals(7, Integer.parseInt(lastChar));
+ }
+ }
+ Assert.assertEquals(27, numberReader.getLineNumber());
+
+ //InputStream input = getClass().getResourceAsStream("/target/activity.csv");
+ }
+
+}
\ No newline at end of file
Property changes on: trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/impl/ActivityCalendarImportTest.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Revision
Modified: trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/impl/ServiceBoatImplTest.java
===================================================================
--- trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/impl/ServiceBoatImplTest.java 2009-12-10 16:18:20 UTC (rev 118)
+++ trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/impl/ServiceBoatImplTest.java 2009-12-13 16:15:45 UTC (rev 119)
@@ -24,7 +24,7 @@
import fr.ifremer.suiviobsmer.SuiviObsmerException;
import fr.ifremer.suiviobsmer.SuiviObsmerModelDAOHelper;
import fr.ifremer.suiviobsmer.SuiviObsmerRunner;
-import fr.ifremer.suiviobsmer.SuiviObsmerUtils;
+import fr.ifremer.suiviobsmer.SuiviObsmerContext;
import fr.ifremer.suiviobsmer.bean.BoatFilterImpl;
import fr.ifremer.suiviobsmer.business.SuiviObsmerRunnerTest;
import fr.ifremer.suiviobsmer.bean.BoatFilter;
@@ -167,11 +167,11 @@
serviceSampling.importSamplingPlanCsv(input);
// Import doesn't set company
- TopiaContext transaction = SuiviObsmerUtils.getTopiaRootContext().beginTransaction();
+ TopiaContext transaction = SuiviObsmerContext.getTopiaRootContext().beginTransaction();
// Create a company
CompanyDAO companyDAO = SuiviObsmerModelDAOHelper.getCompanyDAO(transaction);
- SuiviObsmerUtils.prepareTopiaId(Company.class, company);
+ SuiviObsmerContext.prepareTopiaId(Company.class, company);
companyDAO.update(company);
// Get two SampleRows : 2009_3 & 2010_4
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 2009-12-10 16:18:20 UTC (rev 118)
+++ trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/impl/ServiceSamplingImplTest.java 2009-12-13 16:15:45 UTC (rev 119)
@@ -24,7 +24,7 @@
import fr.ifremer.suiviobsmer.SuiviObsmerException;
import fr.ifremer.suiviobsmer.SuiviObsmerModelDAOHelper;
import fr.ifremer.suiviobsmer.SuiviObsmerRunner;
-import fr.ifremer.suiviobsmer.SuiviObsmerUtils;
+import fr.ifremer.suiviobsmer.SuiviObsmerContext;
import fr.ifremer.suiviobsmer.business.SuiviObsmerRunnerTest;
import fr.ifremer.suiviobsmer.entity.Boat;
import fr.ifremer.suiviobsmer.entity.Company;
@@ -110,7 +110,7 @@
log.info("createUpdateSampleRow");
/** PREPARE DATA **/
- TopiaContext transaction = SuiviObsmerUtils.getTopiaRootContext().beginTransaction();
+ TopiaContext transaction = SuiviObsmerContext.getTopiaRootContext().beginTransaction();
List<FishingZone> zones = prepareFishingZones(transaction);
@@ -188,7 +188,7 @@
/** PREPARE DATA **/
- TopiaContext transaction = SuiviObsmerUtils.getTopiaRootContext().beginTransaction();
+ TopiaContext transaction = SuiviObsmerContext.getTopiaRootContext().beginTransaction();
List<FishingZone> zones = prepareFishingZones(transaction);
@@ -301,7 +301,7 @@
public void testGetSampleRowsForUser() throws Exception {
log.info("getSampleRowsForUser");
/** PREPARE DATA **/
- TopiaContext transaction = SuiviObsmerUtils.getTopiaRootContext().beginTransaction();
+ TopiaContext transaction = SuiviObsmerContext.getTopiaRootContext().beginTransaction();
FishingZoneDAO zoneDAO = SuiviObsmerModelDAOHelper.getFishingZoneDAO(transaction);
FishingZone zoneIId = zoneDAO.create(FishingZone.DISTRICT_CODE, "IId");
@@ -363,7 +363,7 @@
log.info("deleteSampleRow");
/** PREPARE DATA **/
- TopiaContext transaction = SuiviObsmerUtils.getTopiaRootContext().beginTransaction();
+ TopiaContext transaction = SuiviObsmerContext.getTopiaRootContext().beginTransaction();
FishingZoneDAO zoneDAO = SuiviObsmerModelDAOHelper.getFishingZoneDAO(transaction);
FishingZone zoneIId = zoneDAO.create(FishingZone.DISTRICT_CODE, "IId");
@@ -395,7 +395,7 @@
row = rowDAO.findByCode("2010_1");
assertNull(row);
- transaction = SuiviObsmerUtils.getTopiaRootContext().beginTransaction();
+ transaction = SuiviObsmerContext.getTopiaRootContext().beginTransaction();
ElligibleBoatDAO elligibleDAO = SuiviObsmerModelDAOHelper.getElligibleBoatDAO(transaction);
List<ElligibleBoat> elligibles = elligibleDAO.findAll();
assertEquals(0, elligibles.size());
@@ -406,7 +406,7 @@
log.info("importSamplingPlanCsv");
/** PREPARE DATA **/
- TopiaContext transaction = SuiviObsmerUtils.getTopiaRootContext().beginTransaction();
+ TopiaContext transaction = SuiviObsmerContext.getTopiaRootContext().beginTransaction();
FishingZoneDAO zoneDAO = SuiviObsmerModelDAOHelper.getFishingZoneDAO(transaction);
FishingZone zoneIId = zoneDAO.create(FishingZone.DISTRICT_CODE, "IId");
@@ -426,7 +426,7 @@
assertEquals(1, result[1]);
/** CHECK VALUES **/
- transaction = SuiviObsmerUtils.getTopiaRootContext().beginTransaction();
+ transaction = SuiviObsmerContext.getTopiaRootContext().beginTransaction();
ProgramDAO programDAO = SuiviObsmerModelDAOHelper.getProgramDAO(transaction);
Modified: trunk/suiviobsmer-business/src/test/resources/TopiaContextSuiviObsmer.properties
===================================================================
--- trunk/suiviobsmer-business/src/test/resources/TopiaContextSuiviObsmer.properties 2009-12-10 16:18:20 UTC (rev 118)
+++ trunk/suiviobsmer-business/src/test/resources/TopiaContextSuiviObsmer.properties 2009-12-13 16:15:45 UTC (rev 119)
@@ -8,4 +8,4 @@
hibernate.connection.driver_class=org.h2.Driver
hibernate.connection.url=jdbc:h2:file:target/db/h2data
-
+suiviobsmer.log.activityCalendar=target/log/activity.log
Added: trunk/suiviobsmer-business/src/test/resources/import/activity.csv
===================================================================
--- trunk/suiviobsmer-business/src/test/resources/import/activity.csv (rev 0)
+++ trunk/suiviobsmer-business/src/test/resources/import/activity.csv 2009-12-13 16:15:45 UTC (rev 119)
@@ -0,0 +1,9 @@
+"","SYNA_DATED","SYNA_DATEF","SYNA_AN","SYNA_MOI","ENQ_ID","INDQ_COD","CATD_COD","NAVS_COD","SYNA_NOMJDM","SYNA_NOMJDP","SYNA_NOMHE","SYNA_TPOR_COD","SYNA_POR_COD","SYNA_POR_LIB","SYNA_QUA_COD","SYNA_QUA_LIB","META_ORDRE","ORII_COD","ORII_COURT_LIB","MET_ID","MET_COD","MET_LIB","GRA_COD","GRA_LIB","TSECT_COD","SECT_COD","SECT_LIB","zone","MET5","VIId"
+"1286","2008-02-01 00:00:00","2008-02-29 00:00:00","2008","02","932766","2","1","273129","12","11","4","6","XGV","Le Guilvinec","GV","Le Guilvinec","1","9","CNTS/M","193","OTBGA","Chalut de fond à panneaux (1 nav.) à divers gadidés","11","Etranger","13","31E3","Rectangle 31E3","CELT","OTB_DEF",FALSE
+"1287","2008-02-01 00:00:00","2008-02-29 00:00:00","2008","02","932766","2","1","273129","12","11","4","6","XGV","Le Guilvinec","GV","Le Guilvinec","1","9","CNTS/M","193","OTBGA","Chalut de fond à panneaux (1 nav.) à divers gadidés","11","Etranger","13","31E2","Rectangle 31E2","CELT","OTB_DEF",FALSE
+"1288","2008-07-01 00:00:00","2008-07-31 00:00:00","2008","07","914020","1","1","177474","10","10","3","6","XGV","Le Guilvinec","GV","Le Guilvinec","1","9","CNTS/M","307","TTBLN","Chaluts jumeaux à langoustines, galathées","16","Mixte","13","24E4","Rectangle 24E4","GASC","OTT_CRU",FALSE
+"24431","2008-10-01 00:00:00","2008-10-31 00:00:00","2008","10","968329","1","1","174592","15","15","4","6","ACN","Honfleur","CN","Caen","2","9","CNTS/M","211","OTBSO","Chalut de fond à panneaux (1 nav.) à soles","9","Côtier","14","27E930","Extérieur des 3 milles de Ouistreham à Villers/mer","NSEC","OTB_DEF",TRUE
+"24432","2008-08-01 00:00:00","2008-08-31 00:00:00","2008","08","967774","2","1","284595","4","4","3","6","ACN","Honfleur","CN","Caen","1","9","CNTS/M","211","OTBSO","Chalut de fond à panneaux (1 nav.) à soles","9","Côtier","14","27E930","Extérieur des 3 milles de Ouistreham à Villers/mer","NSEC","OTB_DEF",TRUE
+"24433","2008-09-01 00:00:00","2008-09-30 00:00:00","2008","09","966415","2","1","177474","8","8","3","6","ACN","Honfleur","CN","Caen","1","9","CNTS/M","211","OTBSO","Chalut de fond à panneaux (1 nav.) à soles","9","Côtier","14","27E930","Extérieur des 3 milles de Ouistreham à Villers/mer","NSEC","OTB_DEF",TRUE
+"24434","2008-08-01 00:00:00","2008-08-31 00:00:00","2008","08","968272","1","1","978419","25","25","4","6","ACN","Honfleur","CN","Caen","1","9","CNTS/M","211","OTBSO","Chalut de fond à panneaux (1 nav.) à soles","9","Côtier","14","27E930","Extérieur des 3 milles de Ouistreham à Villers/mer","NSEC","OTB_DEF",TRUE
+"43134","2008-05-01 00:00:00","2008-05-31 00:00:00","2008","05","961088","3","1","174592",NA,NA,"1","6","INA","Trentemoult (Nantes)",NA,"Nantes","1","7","ENQUETEUR","344","GNSLM","Filet maillant fixe à lamproie marine","9","Côtier","14","23E7L5","Loire domaine mixte lot 15","GASC","GNS_CAT",FALSE
\ No newline at end of file
Modified: trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/Administration.java
===================================================================
--- trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/Administration.java 2009-12-10 16:18:20 UTC (rev 118)
+++ trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/Administration.java 2009-12-13 16:15:45 UTC (rev 119)
@@ -18,251 +18,251 @@
* <http://www.gnu.org/licenses/gpl-3.0.html>.
* ##%*
*/
-
-package fr.ifremer.suiviobsmer.ui.pages;
-
-import fr.ifremer.suiviobsmer.SuiviObsmerException;
-import fr.ifremer.suiviobsmer.SuiviObsmerUtils;
-import fr.ifremer.suiviobsmer.entity.Company;
-import fr.ifremer.suiviobsmer.entity.CompanyImpl;
-import fr.ifremer.suiviobsmer.entity.User;
-import fr.ifremer.suiviobsmer.entity.UserImpl;
-import fr.ifremer.suiviobsmer.services.ServiceReferential;
-import fr.ifremer.suiviobsmer.services.ServiceUser;
-import fr.ifremer.suiviobsmer.ui.base.GenericSelectModel;
-import fr.ifremer.suiviobsmer.ui.base.SuiviObsmerPage;
-import fr.ifremer.suiviobsmer.ui.components.Layout;
-import java.util.List;
-import org.apache.commons.lang.StringUtils;
-import org.apache.tapestry5.EventContext;
-import org.apache.tapestry5.annotations.IncludeStylesheet;
-import org.apache.tapestry5.annotations.InjectComponent;
-import org.apache.tapestry5.annotations.Log;
-import org.apache.tapestry5.annotations.Persist;
-import org.apache.tapestry5.annotations.Property;
-import org.apache.tapestry5.ioc.annotations.Inject;
-import org.apache.tapestry5.ioc.services.PropertyAccess;
-import org.apache.tapestry5.ioc.services.TypeCoercer;
-import org.apache.tapestry5.upload.services.UploadedFile;
-import org.slf4j.Logger;
-
-/**
- * Administration
- *
- * Created: 9 nov. 2009
- *
- * @author fdesbois
- * @version $Revision$
- *
- * Mise a jour: $Date$
- * par : $Author$
- */
- at IncludeStylesheet("context:css/administration.css")
-public class Administration implements SuiviObsmerPage {
-
- @Override
- public boolean isOnlyForAdmin() {
- return true;
- }
-
- @Inject
- private Logger log;
-
- @InjectComponent
- private Layout layout;
-
- @Inject
- private ServiceUser serviceUser;
-
- @Inject
- private ServiceReferential serviceReferential;
-
- @Inject
- private TypeCoercer typeCoercer;
-
- @Property
- private String companyId;
-
- @Property
- private String userId;
-
- @Persist
- private List<Company> companies;
-
- @Inject
- private PropertyAccess propertyAccess;
-
- private GenericSelectModel<Company> companiesSelectModel;
-
- private Company company;
-
- private GenericSelectModel<User> usersSelectModel;
-
- /**
- * User is persistant cause of autobuild problem ?!?
- */
- @Persist
- private User user;
-
- @Property
- private boolean generatePassword;
-
- @Property
- private String password;
-
- private boolean addNewCompanySelected;
- private boolean addNewUserSelected;
-
- void setupRender() {
- companies = null;
- getCompanies();
- user = null;
- }
-
- void onActivate(EventContext ec) {
- if (ec.getCount() > 0) {
- companyId = ec.get(String.class, 0);
- if (ec.getCount() > 1) {
- userId = ec.get(String.class, 1);
- }
- }
- }
-
- Object[] onPassivate() {
- return new String[] {companyId, userId};
- }
-
- /**************************** IMPORT (ADMIN) *******************************/
-
- /**
- * CSV File which contains fishing zones
- */
- @Property
- private UploadedFile fishingZoneCsvFile;
-
- @Log
- void onSuccessFromImportFishingZones() {
- try {
- int result = serviceReferential.importFishingZoneCsv(fishingZoneCsvFile.getStream());
- layout.getFeedBack().addInfo(result + " zones de pêche importés");
- } catch (SuiviObsmerException eee) {
- layout.getFeedBack().addError(eee.getMessage());
- }
- }
-
- /**************************** FORMS ****************************************/
-
- public List<Company> getCompanies() {
- if (companies == null) {
- try {
- if (log.isInfoEnabled()) {
- log.info("BUSINESS REQUEST [getCompanies]");
- }
- companies = serviceUser.getCompanies();
- } catch(SuiviObsmerException eee) {
- // errors
- }
- }
- return companies;
- }
-
- public GenericSelectModel<Company> getCompaniesSelectModel() {
- if (companiesSelectModel == null) {
- companiesSelectModel = new GenericSelectModel<Company>(getCompanies(), Company.class, Company.NAME, "id", propertyAccess);
- }
- return companiesSelectModel;
- }
-
- public Company getCompany() {
- if (company == null) {
- if (companyId != null) {
- company = getCompaniesSelectModel().findObject(companyId);
- } else {
- company = new CompanyImpl();
- }
- }
- return company;
- }
-
- public boolean isUsersAvailable() {
- return !StringUtils.isEmpty(getCompany().getId()) && getCompany().getActive();
- }
-
- void onSelectedFromAddNewCompany() {
- addNewCompanySelected = true;
- }
-
- void onSuccessFromActionsForm() {
- if (addNewCompanySelected) {
- companyId = null;
- }
- userId = null;
- user = null;
- }
-
- void onSuccessFromCompany() throws SuiviObsmerException {
- serviceUser.createUpdateCompany(company);
- companyId = company.getId();
- }
-
- @Log
- public GenericSelectModel<User> getUsersSelectModel() {
- if (usersSelectModel == null) {
- List<User> users = getCompany().getUser();
- if (log.isDebugEnabled()) {
- log.debug("Nb users : " + users.size());
- }
- usersSelectModel = new GenericSelectModel<User>(users, User.class, "fullName", "id", propertyAccess);
- }
- return usersSelectModel;
- }
-
- @Log
- public User getUser() {
- if (user == null) {
- if (userId != null) {
- if (log.isDebugEnabled()) {
- log.debug("User exist in selectModel : " + userId);
- }
- user = getUsersSelectModel().findObject(userId);
- } else {
- user = new UserImpl();
- generatePassword = true;
- if (log.isDebugEnabled()) {
- log.debug("Set company for new user : " + getCompany().getName());
- }
- user.setCompany(getCompany());
- }
- }
- return user;
- }
-
- void onSelectedFromAddNewUser() {
- addNewUserSelected = true;
- }
-
- void onSuccessFromUserActionsForm() {
- if (addNewUserSelected) {
- userId = null;
- }
- // If login already defined by an other user :
- // popup : "Un autre utilisateur possède le même identifiant, voulez désactiver l'ancien compte ?"
- // Technique : catch exception for alreadyExist user
- }
-
- @Log
- void onSuccessFromUser() throws SuiviObsmerException {
- if (log.isDebugEnabled()) {
- log.debug("User : " + user);
- }
-
- // TODO validation : required : lastName, firstName, login
- if (!StringUtils.isEmpty(password)) {
- String encodedPassword = SuiviObsmerUtils.encodeString(password);
- user.setPassword(encodedPassword);
- }
- serviceUser.createUpdateUser(user, generatePassword);
- userId = user.getId();
- }
-
-}
+
+package fr.ifremer.suiviobsmer.ui.pages;
+
+import fr.ifremer.suiviobsmer.SuiviObsmerException;
+import fr.ifremer.suiviobsmer.SuiviObsmerContext;
+import fr.ifremer.suiviobsmer.entity.Company;
+import fr.ifremer.suiviobsmer.entity.CompanyImpl;
+import fr.ifremer.suiviobsmer.entity.User;
+import fr.ifremer.suiviobsmer.entity.UserImpl;
+import fr.ifremer.suiviobsmer.services.ServiceReferential;
+import fr.ifremer.suiviobsmer.services.ServiceUser;
+import fr.ifremer.suiviobsmer.ui.base.GenericSelectModel;
+import fr.ifremer.suiviobsmer.ui.base.SuiviObsmerPage;
+import fr.ifremer.suiviobsmer.ui.components.Layout;
+import java.util.List;
+import org.apache.commons.lang.StringUtils;
+import org.apache.tapestry5.EventContext;
+import org.apache.tapestry5.annotations.IncludeStylesheet;
+import org.apache.tapestry5.annotations.InjectComponent;
+import org.apache.tapestry5.annotations.Log;
+import org.apache.tapestry5.annotations.Persist;
+import org.apache.tapestry5.annotations.Property;
+import org.apache.tapestry5.ioc.annotations.Inject;
+import org.apache.tapestry5.ioc.services.PropertyAccess;
+import org.apache.tapestry5.ioc.services.TypeCoercer;
+import org.apache.tapestry5.upload.services.UploadedFile;
+import org.slf4j.Logger;
+
+/**
+ * Administration
+ *
+ * Created: 9 nov. 2009
+ *
+ * @author fdesbois
+ * @version $Revision$
+ *
+ * Mise a jour: $Date$
+ * par : $Author$
+ */
+ at IncludeStylesheet("context:css/administration.css")
+public class Administration implements SuiviObsmerPage {
+
+ @Override
+ public boolean isOnlyForAdmin() {
+ return true;
+ }
+
+ @Inject
+ private Logger log;
+
+ @InjectComponent
+ private Layout layout;
+
+ @Inject
+ private ServiceUser serviceUser;
+
+ @Inject
+ private ServiceReferential serviceReferential;
+
+ @Inject
+ private TypeCoercer typeCoercer;
+
+ @Property
+ private String companyId;
+
+ @Property
+ private String userId;
+
+ @Persist
+ private List<Company> companies;
+
+ @Inject
+ private PropertyAccess propertyAccess;
+
+ private GenericSelectModel<Company> companiesSelectModel;
+
+ private Company company;
+
+ private GenericSelectModel<User> usersSelectModel;
+
+ /**
+ * User is persistant cause of autobuild problem ?!?
+ */
+ @Persist
+ private User user;
+
+ @Property
+ private boolean generatePassword;
+
+ @Property
+ private String password;
+
+ private boolean addNewCompanySelected;
+ private boolean addNewUserSelected;
+
+ void setupRender() {
+ companies = null;
+ getCompanies();
+ user = null;
+ }
+
+ void onActivate(EventContext ec) {
+ if (ec.getCount() > 0) {
+ companyId = ec.get(String.class, 0);
+ if (ec.getCount() > 1) {
+ userId = ec.get(String.class, 1);
+ }
+ }
+ }
+
+ Object[] onPassivate() {
+ return new String[] {companyId, userId};
+ }
+
+ /**************************** IMPORT (ADMIN) *******************************/
+
+ /**
+ * CSV File which contains fishing zones
+ */
+ @Property
+ private UploadedFile fishingZoneCsvFile;
+
+ @Log
+ void onSuccessFromImportFishingZones() {
+ try {
+ int result = serviceReferential.importFishingZoneCsv(fishingZoneCsvFile.getStream());
+ layout.getFeedBack().addInfo(result + " zones de pêche importés");
+ } catch (SuiviObsmerException eee) {
+ layout.getFeedBack().addError(eee.getMessage());
+ }
+ }
+
+ /**************************** FORMS ****************************************/
+
+ public List<Company> getCompanies() {
+ if (companies == null) {
+ try {
+ if (log.isInfoEnabled()) {
+ log.info("BUSINESS REQUEST [getCompanies]");
+ }
+ companies = serviceUser.getCompanies();
+ } catch(SuiviObsmerException eee) {
+ // errors
+ }
+ }
+ return companies;
+ }
+
+ public GenericSelectModel<Company> getCompaniesSelectModel() {
+ if (companiesSelectModel == null) {
+ companiesSelectModel = new GenericSelectModel<Company>(getCompanies(), Company.class, Company.NAME, "id", propertyAccess);
+ }
+ return companiesSelectModel;
+ }
+
+ public Company getCompany() {
+ if (company == null) {
+ if (companyId != null) {
+ company = getCompaniesSelectModel().findObject(companyId);
+ } else {
+ company = new CompanyImpl();
+ }
+ }
+ return company;
+ }
+
+ public boolean isUsersAvailable() {
+ return !StringUtils.isEmpty(getCompany().getId()) && getCompany().getActive();
+ }
+
+ void onSelectedFromAddNewCompany() {
+ addNewCompanySelected = true;
+ }
+
+ void onSuccessFromActionsForm() {
+ if (addNewCompanySelected) {
+ companyId = null;
+ }
+ userId = null;
+ user = null;
+ }
+
+ void onSuccessFromCompany() throws SuiviObsmerException {
+ serviceUser.createUpdateCompany(company);
+ companyId = company.getId();
+ }
+
+ @Log
+ public GenericSelectModel<User> getUsersSelectModel() {
+ if (usersSelectModel == null) {
+ List<User> users = getCompany().getUser();
+ if (log.isDebugEnabled()) {
+ log.debug("Nb users : " + users.size());
+ }
+ usersSelectModel = new GenericSelectModel<User>(users, User.class, "fullName", "id", propertyAccess);
+ }
+ return usersSelectModel;
+ }
+
+ @Log
+ public User getUser() {
+ if (user == null) {
+ if (userId != null) {
+ if (log.isDebugEnabled()) {
+ log.debug("User exist in selectModel : " + userId);
+ }
+ user = getUsersSelectModel().findObject(userId);
+ } else {
+ user = new UserImpl();
+ generatePassword = true;
+ if (log.isDebugEnabled()) {
+ log.debug("Set company for new user : " + getCompany().getName());
+ }
+ user.setCompany(getCompany());
+ }
+ }
+ return user;
+ }
+
+ void onSelectedFromAddNewUser() {
+ addNewUserSelected = true;
+ }
+
+ void onSuccessFromUserActionsForm() {
+ if (addNewUserSelected) {
+ userId = null;
+ }
+ // If login already defined by an other user :
+ // popup : "Un autre utilisateur possède le même identifiant, voulez désactiver l'ancien compte ?"
+ // Technique : catch exception for alreadyExist user
+ }
+
+ @Log
+ void onSuccessFromUser() throws SuiviObsmerException {
+ if (log.isDebugEnabled()) {
+ log.debug("User : " + user);
+ }
+
+ // TODO validation : required : lastName, firstName, login
+ if (!StringUtils.isEmpty(password)) {
+ String encodedPassword = SuiviObsmerContext.encodeString(password);
+ user.setPassword(encodedPassword);
+ }
+ serviceUser.createUpdateUser(user, generatePassword);
+ userId = user.getId();
+ }
+
+}
1
0
10 Dec '09
Author: fdesbois
Date: 2009-12-10 16:18:20 +0000 (Thu, 10 Dec 2009)
New Revision: 118
Added:
trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/
trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactContext.java
trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactContextImpl.java
trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactState.java
trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactStateBoardingDone.java
trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactStateBoardingExpected.java
trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactStateBoatDefinitiveRefused.java
trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactStateBoatRefused.java
trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactStateBoatUnavailable.java
trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactStateCompanyAccepted.java
trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactStateCompanyLocked.java
trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactStateCompanyRefused.java
trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactStateCompanyUnlocked.java
trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactStateEnum.java
trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactStateException.java
trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactStateProgramAccepted.java
trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactStateProgramLocked.java
trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactStateProgramRefused.java
trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactStateProgramUnlocked.java
trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactStateStart.java
trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactStateUnfinished.java
trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/bean/
trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/bean/states/
trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/bean/states/ContactContextTest.java
Removed:
trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/ContactState.java
Modified:
trunk/pom.xml
trunk/suiviobsmer-business/pom.xml
trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/SuiviObsmerUtils.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/java/fr/ifremer/suiviobsmer/impl/ServiceSamplingImpl.java
trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/mock/ServiceSamplingMock.java
trunk/suiviobsmer-business/src/main/xmi/suiviobsmer.zargo
trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/impl/ServiceSamplingImplTest.java
trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/Contacts.java
trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/SamplingPlan.java
trunk/suiviobsmer-ui/src/main/webapp/SamplingPlan.tml
trunk/suiviobsmer-ui/src/main/webapp/js/dialog.js
Log:
- Add state pattern for Contact
- Evol #1952, problem with delete on bidirectional relationship --> Ano #1961
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2009-12-10 14:05:38 UTC (rev 117)
+++ trunk/pom.xml 2009-12-10 16:18:20 UTC (rev 118)
@@ -107,7 +107,7 @@
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
- <version>1.1.114</version>
+ <version>1.2.125</version>
</dependency>
<dependency>
<groupId>org.jvnet.hudson.winstone</groupId>
Modified: trunk/suiviobsmer-business/pom.xml
===================================================================
--- trunk/suiviobsmer-business/pom.xml 2009-12-10 14:05:38 UTC (rev 117)
+++ trunk/suiviobsmer-business/pom.xml 2009-12-10 16:18:20 UTC (rev 118)
@@ -104,6 +104,21 @@
<goal>generate</goal>
</goals>
</execution>
+ <execution>
+ <id>generate-statemodel</id>
+ <phase>generate-test-sources</phase>
+ <configuration>
+ <reader>org.nuiton.eugene.StateModelReader</reader>
+ <fullPackagePath>fr.ifremer.suiviobsmer</fullPackagePath>
+ <extractedPackages>fr.ifremer.suiviobsmer</extractedPackages>
+ <includes>**/*.statemodel</includes>
+ <extraClassPathDirectory>target/classes</extraClassPathDirectory>
+ </configuration>
+ <goals>
+ <goal>zargo2xmi</goal>
+ <goal>xmi2statemodel</goal>
+ </goals>
+ </execution>
</executions>
</plugin>
</plugins>
Modified: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/SuiviObsmerUtils.java
===================================================================
--- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/SuiviObsmerUtils.java 2009-12-10 14:05:38 UTC (rev 117)
+++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/SuiviObsmerUtils.java 2009-12-10 16:18:20 UTC (rev 118)
@@ -30,6 +30,7 @@
import java.util.Properties;
import java.util.Random;
import org.apache.commons.lang.StringUtils;
+import org.hibernate.exception.SQLGrammarException;
import org.nuiton.topia.TopiaContext;
import org.nuiton.topia.TopiaContextFactory;
import org.nuiton.topia.TopiaException;
@@ -118,6 +119,11 @@
throw new SuiviObsmerException("Fatal topia error when close context", eeee);
}
}
+ if (eee instanceof SQLGrammarException) {
+ if (log.isErrorEnabled()) {
+ log.error("SQL executed with error : " + ((SQLGrammarException)eee).getSQL());
+ }
+ }
throw new SuiviObsmerException(message,eee);
} else {
throw (SuiviObsmerException)eee;
Deleted: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/ContactState.java
===================================================================
--- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/ContactState.java 2009-12-10 14:05:38 UTC (rev 117)
+++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/ContactState.java 2009-12-10 16:18:20 UTC (rev 118)
@@ -1,54 +0,0 @@
-/*
- * *##%
- * SuiviObsmer Business
- * Copyright (C) 2009 Ifremer
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/gpl-3.0.html>.
- * ##%*
- */
-
-package fr.ifremer.suiviobsmer.bean;
-
-/**
- * ContactState
- *
- * Created: 3 déc. 2009
- *
- * @author fdesbois
- * @version $Revision$
- *
- * Mise a jour: $Date$
- * par : $Author$
- */
-public enum ContactState {
-
- CONTACT_START("Contact pris"),
- BOARDING_EXPECTED("Embarquement prévu"),
- BOARDING_DONE("Embarquement réalisé"),
- UNAVAILABLE("Indisponible/Injoignable"),
- REFUSED("Refus"),
- DEFINITIVE_REFUSED("Refus définitif");
-
- private String value;
-
- ContactState(String value) {
- this.value = value;
- }
-
- public String getValue() {
- return this.value;
- }
-
-}
Added: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactContext.java
===================================================================
--- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactContext.java (rev 0)
+++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactContext.java 2009-12-10 16:18:20 UTC (rev 118)
@@ -0,0 +1,117 @@
+
+package fr.ifremer.suiviobsmer.bean.states;
+
+import fr.ifremer.suiviobsmer.entity.Contact;
+import java.util.ArrayList;
+import java.util.List;
+import org.apache.commons.lang.BooleanUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * ContactContext
+ *
+ * Created: 9 déc. 2009
+ *
+ * @author fdesbois
+ * @version $Revision$
+ *
+ * Mise a jour: $Date$
+ * par : $Author$
+ */
+public abstract class ContactContext {
+
+ public static final Logger log = LoggerFactory.getLogger(ContactContext.class);
+
+ protected Contact contact;
+
+ protected ContactState currentState;
+
+ protected ContactState nextState;
+
+ public ContactContext(Contact contact) throws ContactStateException {
+ this.contact = contact;
+ ContactStateEnum state = init();
+ this.currentState = createContactState(state);
+ this.currentState.entry(this);
+ if (log.isInfoEnabled()) {
+ log.info("context init state with : " + this.currentState.getValue());
+ }
+ }
+
+ protected abstract ContactStateEnum init();
+
+ public Contact getContact() {
+ return contact;
+ }
+
+ public void nextState(ContactStateEnum nextStateValue) throws ContactStateException {
+ this.nextState = createContactState(nextStateValue);
+ currentState.nextState(this);
+ }
+
+ public List<String> getAvailableNextStatesAsString() {
+ List<String> results = new ArrayList<String>();
+ for (ContactStateEnum state : getAvailableNextStatesAsEnum()) {
+ results.add(state.getStringValue());
+ }
+ return results;
+ }
+
+ public List<ContactStateEnum> getAvailableNextStatesAsEnum() {
+ return this.currentState.getNextValues();
+ }
+
+ public ContactState getCurrentState() {
+ return this.currentState;
+ }
+
+ ContactState getNextState() {
+ return nextState;
+ }
+
+ void setState(ContactState state) {
+ if (log.isInfoEnabled()) {
+ log.info("context change state to : " + state.getValue());
+ }
+ this.currentState = state;
+ // WARNING, can be dangerous for validation (lose real state ?)
+ //contact.setState(state.getValue());
+ }
+
+ protected static ContactState createContactState(ContactStateEnum stateValue) throws ContactStateException {
+ try {
+ return stateValue.getStateClass().newInstance();
+ } catch (Exception eee) {
+ throw new ContactStateException("Impossible de créer l'état : " + stateValue.getStringValue(), eee);
+ }
+ }
+
+// protected static ContactState createContactState(String value) {
+// if (value == null) {
+// return null;
+// }
+// if (value.equals(ContactStateStart.VALUE)) {
+// return new ContactStateStart();
+// } else if (value.equals(ContactStateBoardingExpected.VALUE)) {
+// return new ContactStateBoardingExpected();
+// } else if (value.equals(ContactStateBoardingDone.VALUE)) {
+// return new ContactStateBoardingDone();
+// } else if (value.equals(ContactStateBoatUnavailable.VALUE)) {
+// return new ContactStateBoatUnavailable();
+// } else if (value.equals(ContactStateBoatRefused.VALUE)) {
+// return new ContactStateBoatRefused();
+// } else if (value.equals(ContactStateBoatDefinitiveRefused.VALUE)) {
+// return new ContactStateBoatDefinitiveRefused();
+// } else if (value.equals(ContactStateCompanyAccepted.VALUE)) {
+// return new ContactStateCompanyAccepted();
+// } else if (value.equals(ContactStateCompanyRefused.VALUE)) {
+// return new ContactStateCompanyRefused();
+// } else if (value.equals(ContactStateProgramAccepted.VALUE)) {
+// return new ContactStateProgramAccepted();
+// } else if (value.equals(ContactStateProgramRefused.VALUE)) {
+// return new ContactStateProgramRefused();
+// }
+// return null;
+// }
+}
Added: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactContextImpl.java
===================================================================
--- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactContextImpl.java (rev 0)
+++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactContextImpl.java 2009-12-10 16:18:20 UTC (rev 118)
@@ -0,0 +1,46 @@
+
+package fr.ifremer.suiviobsmer.bean.states;
+
+import fr.ifremer.suiviobsmer.entity.Contact;
+import org.apache.commons.lang.BooleanUtils;
+
+/**
+ * ContactContextImpl
+ *
+ * Created: 10 déc. 2009
+ *
+ * @author fdesbois
+ * @version $Revision$
+ *
+ * Mise a jour: $Date$
+ * par : $Author$
+ */
+public class ContactContextImpl extends ContactContext {
+
+ public ContactContextImpl(Contact contact) throws ContactStateException {
+ super(contact);
+ }
+
+ // tagValue pour generation du impl par defaut obliatoire sur la StateMachine (ici ContactState) : tagValue.init=state
+ // return ContactStateEnum.createContactStateEnum(getContact().getState());
+ @Override
+ protected ContactStateEnum init() {
+ ContactStateEnum result = null;
+ if (BooleanUtils.isTrue(contact.getValidationProgram())) {
+ result = ContactStateEnum.PROGRAM_ACCEPTED;
+ } else if (BooleanUtils.isFalse(contact.getValidationProgram())) {
+ result = ContactStateEnum.PROGRAM_REFUSED;
+ } else {
+ if (BooleanUtils.isTrue(contact.getValidationCompany())) {
+ result = ContactStateEnum.COMPANY_ACCEPTED;
+ } else if (BooleanUtils.isFalse(contact.getValidationCompany())) {
+ result = ContactStateEnum.COMPANY_REFUSED;
+ }
+ }
+ if (result == null) {
+ return ContactStateEnum.createContactStateEnum(getContact().getState());
+ }
+ return result;
+ }
+
+}
Copied: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactState.java (from rev 110, trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/ContactState.java)
===================================================================
--- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactState.java (rev 0)
+++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactState.java 2009-12-10 16:18:20 UTC (rev 118)
@@ -0,0 +1,151 @@
+
+package fr.ifremer.suiviobsmer.bean.states;
+
+import java.util.Arrays;
+import java.util.List;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * ContactState
+ *
+ * Created: 9 déc. 2009
+ *
+ * @author fdesbois
+ * @version $Revision$
+ *
+ * Mise a jour: $Date$
+ * par : $Author$
+ */
+public abstract class ContactState {
+
+ public static final Logger log = LoggerFactory.getLogger(ContactState.class);
+
+ /**
+ * Method to override for a non abstract state : get the literal value of the state.
+ * @return a String corresponding to the value
+ */
+ public ContactStateEnum getValue() {
+ return null;
+ }
+
+ /**
+ * Method to override for an abstract state : get literals values of sons states.
+ * @return a List of String corresponding of sons states values
+ */
+ public List<ContactStateEnum> getValues() {
+ return Arrays.asList(getValue());
+ }
+
+ /**
+ * Abstract method : get next transitions of the state.
+ * The order is important to have transitions numbers.
+ * @return a List of Class wich extends ContactState
+ */
+ protected abstract List<? extends Class<? extends ContactState>> getTransitions();
+
+ /**
+ * Abstract method : get next values of the next states (corresponding to transitions)
+ * @return a List of all values for next states
+ */
+ public abstract List<ContactStateEnum> getNextValues();
+
+ /**
+ * Method to override : Entry action of the state (after being set in context).
+ * @param context Context to manipulate for entry action
+ * @throws ContactStateException
+ */
+ protected void entry(ContactContext context) throws ContactStateException {
+ }
+
+ /**
+ * Method to override : Exit action of the state. Launch before changing to next state in context.
+ * @param context Context to manipulate for exit action
+ * @throws ContactStateException
+ */
+ protected void exit(ContactContext context) throws ContactStateException {
+ }
+
+ /**
+ * Method to override : Validation of the transition for the next state. First method launch when
+ * changing state.
+ * @param context Context to manipulate for validation
+ * @param transitionNum Number of the transaction to validate
+ * @return true if the transition is validate, false either
+ * @throws ContactStateException
+ */
+ protected boolean validate(ContactContext context, int transitionNum) throws ContactStateException {
+ return true;
+ }
+
+ /**
+ * Method to override : Action of the transition for the next state. Launch after validation.
+ * @param context Context to manipulate for the action
+ * @param transitionNum
+ * @throws ContactStateException
+ */
+ protected void action(ContactContext context, int transitionNum) throws ContactStateException {
+ }
+
+ /**
+ * Go to the nextState set in context. An exception will be thrown if the nextState is not an allowed
+ * state for the current one. Execution of nextState is :
+ * <pre>
+ * - Verification of the next state object (allowed for the current one)
+ * - Validation of the transition to the next state
+ * - Action of the transition to the next state
+ * - Exit action of the current state
+ * - Change state in context
+ * - Entry action for the nextState (current one in context)
+ * </pre>
+ * @param context Context to manipulate to get the next state and used for actions.
+ * @throws IllegalStateException if nextState is not allowed
+ * @throws ContactStateException for state actions problems
+ */
+ public void nextState(ContactContext context) throws IllegalStateException, ContactStateException {
+ ContactState nextState = context.getNextState();
+ if (log.isDebugEnabled()) {
+ log.debug("Verification of next state : " + nextState.getClass().getName());
+ }
+ if (getTransitions() == null) {
+ throw new IllegalStateException("L'état '" + context.getContact().getState() + "' " +
+ "est final et ne peut être changé");
+ }
+ int transitionNum = -1;
+ for (int i = 0; i < getTransitions().size(); i++) {
+ Class<? extends ContactState> stateClass = getTransitions().get(i);
+ if (stateClass.isAssignableFrom(nextState.getClass())) {
+ transitionNum = i;
+ break;
+ }
+ }
+ if (transitionNum == -1) {
+ throw new IllegalStateException("Etat '" + nextState.getValue() + "' non autorisé après " +
+ "'" + this.getValue() + "'");
+ }
+ if (log.isDebugEnabled()) {
+ log.debug("Validation for next state transition : " + transitionNum);
+ }
+ if (validate(context, transitionNum)) {
+ if (log.isDebugEnabled()) {
+ log.debug("Action for next state transition : " + transitionNum);
+ }
+ action(context, transitionNum);
+ if (log.isDebugEnabled()) {
+ log.debug("Exit action of current state : " + this.getValue());
+ }
+ exit(context);
+ context.setState(nextState);
+ if (log.isDebugEnabled()) {
+ log.debug("Entry action for new state : " + nextState.getValue());
+ }
+ nextState.entry(context);
+ } else {
+ if (log.isWarnEnabled()) {
+ log.warn("Erreur de validation lors du changement d'état de " +
+ "'" + this.getValue() + "' à " + nextState.getValue());
+ }
+ }
+ }
+
+}
Property changes on: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactState.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Revision
Added: svn:mergeinfo
+
Added: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactStateBoardingDone.java
===================================================================
--- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactStateBoardingDone.java (rev 0)
+++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactStateBoardingDone.java 2009-12-10 16:18:20 UTC (rev 118)
@@ -0,0 +1,62 @@
+
+package fr.ifremer.suiviobsmer.bean.states;
+
+import fr.ifremer.suiviobsmer.entity.Contact;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * ContactStateBoardingDone
+ *
+ * Created: 9 déc. 2009
+ *
+ * @author fdesbois
+ * @version $Revision$
+ *
+ * Mise a jour: $Date$
+ * par : $Author$
+ */
+public class ContactStateBoardingDone extends ContactState {
+
+ private static final int TRANSITION_COMPANY_UNLOCKED = 0;
+
+ public static final ContactStateEnum ENUM_VALUE = ContactStateEnum.BOARDING_DONE;
+
+ @Override
+ public ContactStateEnum getValue() {
+ return ENUM_VALUE;
+ }
+
+ @Override
+ protected List<? extends Class<? extends ContactState>> getTransitions() {
+ return Collections.singletonList(
+ ContactStateCompanyUnlocked.class
+ );
+ }
+
+ @Override
+ public List<ContactStateEnum> getNextValues() {
+ List<ContactStateEnum> results = new ArrayList<ContactStateEnum>();
+ results.add(ContactStateCompanyUnlocked.ENUM_VALUE);
+ return results;
+ }
+
+ @Override
+ protected void entry(ContactContext context) throws ContactStateException {
+ Contact contact = context.getContact();
+ contact.setState(ENUM_VALUE.getStringValue());
+ context.nextState(ContactStateEnum.COMPANY_UNLOCKED);
+ }
+
+ @Override
+ protected boolean validate(ContactContext context, int transitionNum) {
+ Contact contact = context.getContact();
+ switch (transitionNum) {
+ case TRANSITION_COMPANY_UNLOCKED:
+ return contact.getDataInputDate() != null;
+ }
+ return true;
+ }
+
+}
Added: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactStateBoardingExpected.java
===================================================================
--- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactStateBoardingExpected.java (rev 0)
+++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactStateBoardingExpected.java 2009-12-10 16:18:20 UTC (rev 118)
@@ -0,0 +1,57 @@
+
+package fr.ifremer.suiviobsmer.bean.states;
+
+import fr.ifremer.suiviobsmer.entity.Contact;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * ContactStateBoardingExpected
+ *
+ * Created: 9 déc. 2009
+ *
+ * @author fdesbois
+ * @version $Revision$
+ *
+ * Mise a jour: $Date$
+ * par : $Author$
+ */
+public class ContactStateBoardingExpected extends ContactState {
+
+ public static final ContactStateEnum ENUM_VALUE = ContactStateEnum.BOARDING_EXPECTED;
+
+ @Override
+ public ContactStateEnum getValue() {
+ return ENUM_VALUE;
+ }
+
+ @Override
+ protected List<? extends Class<? extends ContactState>> getTransitions() {
+ return Collections.singletonList(
+ ContactStateBoardingDone.class
+ );
+ }
+
+ @Override
+ public List<ContactStateEnum> getNextValues() {
+ List<ContactStateEnum> results = new ArrayList<ContactStateEnum>();
+ results.add(ContactStateBoardingDone.ENUM_VALUE);
+ return results;
+ }
+
+ @Override
+ protected void entry(ContactContext context) {
+ Contact contact = context.getContact();
+ contact.setState(ENUM_VALUE.getStringValue());
+ }
+
+ @Override
+ protected boolean validate(ContactContext context, int transitionNumber) throws ContactStateException {
+ //contact.beginTideDate >= contact.sampleRow.program.periodBegin &&
+ // contact.beginTideDate <= contact.sampleRow.program.periodEnd && contact.endTideDate >= contact.beginTideDate
+ // && contact.endTideDate <= contact.sampleRow.program.periodEnd && nbObservants != 0
+ return true;
+ }
+
+}
Added: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactStateBoatDefinitiveRefused.java
===================================================================
--- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactStateBoatDefinitiveRefused.java (rev 0)
+++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactStateBoatDefinitiveRefused.java 2009-12-10 16:18:20 UTC (rev 118)
@@ -0,0 +1,24 @@
+
+package fr.ifremer.suiviobsmer.bean.states;
+
+/**
+ * ContactStateDefinitiveRefused
+ *
+ * Created: 9 déc. 2009
+ *
+ * @author fdesbois
+ * @version $Revision$
+ *
+ * Mise a jour: $Date$
+ * par : $Author$
+ */
+public class ContactStateBoatDefinitiveRefused extends ContactStateUnfinished {
+
+ public static final ContactStateEnum ENUM_VALUE = ContactStateEnum.BOAT_DEFINITIVE_REFUSED;
+
+ @Override
+ public ContactStateEnum getValue() {
+ return ENUM_VALUE;
+ }
+
+}
Added: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactStateBoatRefused.java
===================================================================
--- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactStateBoatRefused.java (rev 0)
+++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactStateBoatRefused.java 2009-12-10 16:18:20 UTC (rev 118)
@@ -0,0 +1,24 @@
+
+package fr.ifremer.suiviobsmer.bean.states;
+
+/**
+ * ContactStateRefused
+ *
+ * Created: 9 déc. 2009
+ *
+ * @author fdesbois
+ * @version $Revision$
+ *
+ * Mise a jour: $Date$
+ * par : $Author$
+ */
+public class ContactStateBoatRefused extends ContactStateUnfinished {
+
+ public static final ContactStateEnum ENUM_VALUE = ContactStateEnum.BOAT_REFUSED;
+
+ @Override
+ public ContactStateEnum getValue() {
+ return ENUM_VALUE;
+ }
+
+}
Added: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactStateBoatUnavailable.java
===================================================================
--- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactStateBoatUnavailable.java (rev 0)
+++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactStateBoatUnavailable.java 2009-12-10 16:18:20 UTC (rev 118)
@@ -0,0 +1,24 @@
+
+package fr.ifremer.suiviobsmer.bean.states;
+
+/**
+ * ContactStateUnavailable
+ *
+ * Created: 9 déc. 2009
+ *
+ * @author fdesbois
+ * @version $Revision$
+ *
+ * Mise a jour: $Date$
+ * par : $Author$
+ */
+public class ContactStateBoatUnavailable extends ContactStateUnfinished {
+
+ public static final ContactStateEnum ENUM_VALUE = ContactStateEnum.BOAT_UNAVAILABLE;
+
+ @Override
+ public ContactStateEnum getValue() {
+ return ENUM_VALUE;
+ }
+
+}
Added: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactStateCompanyAccepted.java
===================================================================
--- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactStateCompanyAccepted.java (rev 0)
+++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactStateCompanyAccepted.java 2009-12-10 16:18:20 UTC (rev 118)
@@ -0,0 +1,57 @@
+
+package fr.ifremer.suiviobsmer.bean.states;
+
+import fr.ifremer.suiviobsmer.entity.Contact;
+import fr.ifremer.suiviobsmer.entity.SampleRow;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * ContactStateCompanyAccepted
+ *
+ * Created: 9 déc. 2009
+ *
+ * @author fdesbois
+ * @version $Revision$
+ *
+ * Mise a jour: $Date$
+ * par : $Author$
+ */
+public class ContactStateCompanyAccepted extends ContactStateCompanyLocked {
+
+ public static final ContactStateEnum ENUM_VALUE = ContactStateEnum.COMPANY_ACCEPTED;
+
+ @Override
+ public ContactStateEnum getValue() {
+ return ENUM_VALUE;
+ }
+
+ @Override
+ protected List<? extends Class<? extends ContactState>> getTransitions() {
+ return Collections.unmodifiableList(Arrays.asList(
+ ContactStateProgramUnlocked.class,
+ ContactStateCompanyUnlocked.class
+ ));
+ }
+
+ @Override
+ public List<ContactStateEnum> getNextValues() {
+ List<ContactStateEnum> results = new ArrayList<ContactStateEnum>();
+ results.add(ContactStateProgramUnlocked.ENUM_VALUE);
+ results.add(ContactStateCompanyUnlocked.ENUM_VALUE);
+ return results;
+ }
+
+ @Override
+ protected void entry(ContactContext context) throws ContactStateException {
+ Contact contact = context.getContact();
+ SampleRow row = contact.getSampleRow();
+ contact.setValidationCompany(Boolean.TRUE);
+ // contact.sampleRow.addTideTime(contact.endTideDate - contact.beginTideDate)
+ context.nextState(ContactStateEnum.PROGRAM_UNLOCKED);
+ }
+
+
+}
Added: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactStateCompanyLocked.java
===================================================================
--- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactStateCompanyLocked.java (rev 0)
+++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactStateCompanyLocked.java 2009-12-10 16:18:20 UTC (rev 118)
@@ -0,0 +1,32 @@
+
+package fr.ifremer.suiviobsmer.bean.states;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * ContactStateCompanyLocked
+ *
+ * Created: 9 déc. 2009
+ *
+ * @author fdesbois
+ * @version $Revision$
+ *
+ * Mise a jour: $Date$
+ * par : $Author$
+ */
+public abstract class ContactStateCompanyLocked extends ContactState {
+
+ public static final List<ContactStateEnum> ENUM_VALUES = Collections.unmodifiableList(Arrays.asList(
+ ContactStateEnum.COMPANY_ACCEPTED,
+ ContactStateEnum.COMPANY_REFUSED,
+ ContactStateEnum.PROGRAM_UNLOCKED
+ ));
+
+ @Override
+ public List<ContactStateEnum> getValues() {
+ return ENUM_VALUES;
+ }
+
+}
Added: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactStateCompanyRefused.java
===================================================================
--- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactStateCompanyRefused.java (rev 0)
+++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactStateCompanyRefused.java 2009-12-10 16:18:20 UTC (rev 118)
@@ -0,0 +1,47 @@
+
+package fr.ifremer.suiviobsmer.bean.states;
+
+import fr.ifremer.suiviobsmer.entity.Contact;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * ContactStateCompanyRefused
+ *
+ * Created: 9 déc. 2009
+ *
+ * @author fdesbois
+ * @version $Revision$
+ *
+ * Mise a jour: $Date$
+ * par : $Author$
+ */
+public class ContactStateCompanyRefused extends ContactStateCompanyLocked {
+
+ public static final ContactStateEnum ENUM_VALUE = ContactStateEnum.COMPANY_REFUSED;
+
+ @Override
+ public ContactStateEnum getValue() {
+ return ENUM_VALUE;
+ }
+
+ @Override
+ protected List<? extends Class<? extends ContactState>> getTransitions() {
+ return Collections.singletonList(ContactStateCompanyUnlocked.class);
+ }
+
+ @Override
+ public List<ContactStateEnum> getNextValues() {
+ List<ContactStateEnum> results = new ArrayList<ContactStateEnum>();
+ results.add(ContactStateCompanyUnlocked.ENUM_VALUE);
+ return results;
+ }
+
+ @Override
+ public void entry(ContactContext context) {
+ Contact contact = context.getContact();
+ contact.setValidationCompany(Boolean.FALSE);
+ }
+
+}
Added: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactStateCompanyUnlocked.java
===================================================================
--- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactStateCompanyUnlocked.java (rev 0)
+++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactStateCompanyUnlocked.java 2009-12-10 16:18:20 UTC (rev 118)
@@ -0,0 +1,47 @@
+
+package fr.ifremer.suiviobsmer.bean.states;
+
+import fr.ifremer.suiviobsmer.entity.Contact;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * ContactStateCompanyUnlocked
+ *
+ * Created: 9 déc. 2009
+ *
+ * @author fdesbois
+ * @version $Revision$
+ *
+ * Mise a jour: $Date$
+ * par : $Author$
+ */
+public class ContactStateCompanyUnlocked extends ContactState {
+
+ public static final ContactStateEnum ENUM_VALUE = ContactStateEnum.COMPANY_UNLOCKED;
+
+ @Override
+ public ContactStateEnum getValue() {
+ return ENUM_VALUE;
+ }
+
+ @Override
+ protected List<? extends Class<? extends ContactState>> getTransitions() {
+ return Collections.singletonList(ContactStateCompanyLocked.class);
+ }
+
+ @Override
+ public List<ContactStateEnum> getNextValues() {
+ List<ContactStateEnum> results = new ArrayList<ContactStateEnum>();
+ results.addAll(ContactStateCompanyLocked.ENUM_VALUES);
+ return results;
+ }
+
+ @Override
+ public void entry(ContactContext context) {
+ Contact contact = context.getContact();
+ contact.setValidationCompany(null);
+ }
+
+}
Added: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactStateEnum.java
===================================================================
--- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactStateEnum.java (rev 0)
+++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactStateEnum.java 2009-12-10 16:18:20 UTC (rev 118)
@@ -0,0 +1,95 @@
+/*
+ * *##%
+ * SuiviObsmer Business
+ * Copyright (C) 2009 Ifremer
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Lesser Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/gpl-3.0.html>.
+ * ##%*
+ */
+
+package fr.ifremer.suiviobsmer.bean.states;
+
+/**
+ * ContactState
+ *
+ * Created: 3 déc. 2009
+ *
+ * @author fdesbois
+ * @version $Revision: 110 $
+ *
+ * Mise a jour: $Date: 2009-12-07 19:42:18 +0100 (lun. 07 déc. 2009) $
+ * par : $Author: fdesbois $
+ */
+public enum ContactStateEnum {
+
+ PROGRAM_REFUSED("Refusé par le programme", ContactStateProgramRefused.class),
+
+ PROGRAM_ACCEPTED("Accepté par le programme", ContactStateProgramAccepted.class),
+
+ PROGRAM_UNLOCKED("Non accepté par le programme", ContactStateProgramUnlocked.class),
+
+ COMPANY_REFUSED("Refusé par la société", ContactStateCompanyRefused.class),
+
+ COMPANY_ACCEPTED("Accepté par la société", ContactStateCompanyAccepted.class),
+
+ COMPANY_UNLOCKED("Non accepté par la société", ContactStateCompanyUnlocked.class),
+
+ BOAT_UNAVAILABLE("Non abouti", ContactStateBoatUnavailable.class),
+
+ BOAT_REFUSED("Refus", ContactStateBoatRefused.class),
+
+ BOAT_DEFINITIVE_REFUSED("Refus définitif", ContactStateBoatDefinitiveRefused.class),
+
+ BOARDING_DONE("Embarquement réalisé", ContactStateBoardingDone.class),
+
+ BOARDING_EXPECTED("Embarquement prévu", ContactStateBoardingExpected.class),
+
+ CONTACT_START("Contact pris", ContactStateStart.class);
+
+ private String value;
+
+ private Class<? extends ContactState> stateClass;
+
+ ContactStateEnum(String value, Class<? extends ContactState> stateClass) {
+ this.value = value;
+ this.stateClass = stateClass;
+ }
+
+ public String getStringValue() {
+ return this.value;
+ }
+
+ public Class<? extends ContactState> getStateClass() {
+ return this.stateClass;
+ }
+
+ public static ContactStateEnum createContactStateEnum(String value) {
+ if (value.equals(CONTACT_START.getStringValue())) {
+ return CONTACT_START;
+ } else if (value.equals(BOARDING_EXPECTED.getStringValue())) {
+ return BOARDING_EXPECTED;
+ } else if (value.equals(BOARDING_DONE.getStringValue())) {
+ return BOARDING_DONE;
+ } else if (value.equals(BOAT_UNAVAILABLE.getStringValue())) {
+ return BOAT_UNAVAILABLE;
+ } else if (value.equals(BOAT_REFUSED.getStringValue())) {
+ return BOAT_REFUSED;
+ } else if (value.equals(BOAT_DEFINITIVE_REFUSED.getStringValue())) {
+ return BOAT_DEFINITIVE_REFUSED;
+ }
+ return null;
+ }
+
+}
Added: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactStateException.java
===================================================================
--- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactStateException.java (rev 0)
+++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactStateException.java 2009-12-10 16:18:20 UTC (rev 118)
@@ -0,0 +1,24 @@
+
+package fr.ifremer.suiviobsmer.bean.states;
+
+/**
+ * ContactStateException
+ *
+ * Created: 9 déc. 2009
+ *
+ * @author fdesbois
+ * @version $Revision$
+ *
+ * Mise a jour: $Date$
+ * par : $Author$
+ */
+public class ContactStateException extends Exception {
+
+ public ContactStateException(String msg) {
+ super(msg);
+ }
+
+ public ContactStateException(String msg, Throwable ex) {
+ super(msg, ex);
+ }
+}
Added: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactStateProgramAccepted.java
===================================================================
--- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactStateProgramAccepted.java (rev 0)
+++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactStateProgramAccepted.java 2009-12-10 16:18:20 UTC (rev 118)
@@ -0,0 +1,35 @@
+
+package fr.ifremer.suiviobsmer.bean.states;
+
+import fr.ifremer.suiviobsmer.entity.Contact;
+import fr.ifremer.suiviobsmer.entity.SampleRow;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * ContactStateProgramAccepted
+ *
+ * Created: 9 déc. 2009
+ *
+ * @author fdesbois
+ * @version $Revision$
+ *
+ * Mise a jour: $Date$
+ * par : $Author$
+ */
+public class ContactStateProgramAccepted extends ContactStateProgramLocked {
+
+ public static final ContactStateEnum ENUM_VALUE = ContactStateEnum.PROGRAM_ACCEPTED;
+
+ @Override
+ public ContactStateEnum getValue() {
+ return ENUM_VALUE;
+ }
+
+ @Override
+ protected void entry(ContactContext context) throws ContactStateException {
+ Contact contact = context.getContact();
+ contact.setValidationProgram(Boolean.TRUE);
+ }
+
+}
Added: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactStateProgramLocked.java
===================================================================
--- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactStateProgramLocked.java (rev 0)
+++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactStateProgramLocked.java 2009-12-10 16:18:20 UTC (rev 118)
@@ -0,0 +1,44 @@
+
+package fr.ifremer.suiviobsmer.bean.states;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * ContactStateProgramLocked
+ *
+ * Created: 9 déc. 2009
+ *
+ * @author fdesbois
+ * @version $Revision$
+ *
+ * Mise a jour: $Date$
+ * par : $Author$
+ */
+public abstract class ContactStateProgramLocked extends ContactState {
+
+ public static final List<ContactStateEnum> ENUM_VALUES = Collections.unmodifiableList(Arrays.asList(
+ ContactStateEnum.PROGRAM_ACCEPTED,
+ ContactStateEnum.PROGRAM_REFUSED
+ ));
+
+ @Override
+ public List<ContactStateEnum> getValues() {
+ return ENUM_VALUES;
+ }
+
+ @Override
+ protected List<? extends Class<? extends ContactState>> getTransitions() {
+ return Collections.singletonList(ContactStateProgramUnlocked.class);
+ }
+
+ @Override
+ public List<ContactStateEnum> getNextValues() {
+ List<ContactStateEnum> results = new ArrayList<ContactStateEnum>();
+ results.add(ContactStateProgramUnlocked.ENUM_VALUE);
+ return results;
+ }
+
+}
Added: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactStateProgramRefused.java
===================================================================
--- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactStateProgramRefused.java (rev 0)
+++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactStateProgramRefused.java 2009-12-10 16:18:20 UTC (rev 118)
@@ -0,0 +1,38 @@
+
+package fr.ifremer.suiviobsmer.bean.states;
+
+import fr.ifremer.suiviobsmer.entity.Contact;
+import fr.ifremer.suiviobsmer.entity.SampleRow;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * ContactStateProgramRefused
+ *
+ * Created: 9 déc. 2009
+ *
+ * @author fdesbois
+ * @version $Revision$
+ *
+ * Mise a jour: $Date$
+ * par : $Author$
+ */
+public class ContactStateProgramRefused extends ContactStateProgramLocked {
+
+ public static final ContactStateEnum ENUM_VALUE = ContactStateEnum.PROGRAM_REFUSED;
+
+ @Override
+ public ContactStateEnum getValue() {
+ return ENUM_VALUE;
+ }
+
+ @Override
+ protected void entry(ContactContext context) throws ContactStateException {
+ Contact contact = context.getContact();
+ SampleRow row = contact.getSampleRow();
+ contact.setValidationProgram(Boolean.FALSE);
+ // contact.sampleRow.removeTideTime(contact)
+ }
+
+}
Added: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactStateProgramUnlocked.java
===================================================================
--- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactStateProgramUnlocked.java (rev 0)
+++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactStateProgramUnlocked.java 2009-12-10 16:18:20 UTC (rev 118)
@@ -0,0 +1,52 @@
+
+package fr.ifremer.suiviobsmer.bean.states;
+
+import fr.ifremer.suiviobsmer.entity.Contact;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * ContactStateProgramUnlocked
+ *
+ * Created: 9 déc. 2009
+ *
+ * @author fdesbois
+ * @version $Revision$
+ *
+ * Mise a jour: $Date$
+ * par : $Author$
+ */
+public class ContactStateProgramUnlocked extends ContactStateCompanyLocked {
+
+ public static final ContactStateEnum ENUM_VALUE = ContactStateEnum.PROGRAM_UNLOCKED;
+
+ @Override
+ public ContactStateEnum getValue() {
+ return ENUM_VALUE;
+ }
+
+ @Override
+ protected List<? extends Class<? extends ContactState>> getTransitions() {
+ return Collections.unmodifiableList(Arrays.asList(
+ ContactStateProgramLocked.class,
+ ContactStateCompanyUnlocked.class
+ ));
+ }
+
+ @Override
+ public List<ContactStateEnum> getNextValues() {
+ List<ContactStateEnum> results = new ArrayList<ContactStateEnum>();
+ results.addAll(ContactStateProgramLocked.ENUM_VALUES);
+ results.add(ContactStateCompanyUnlocked.ENUM_VALUE);
+ return results;
+ }
+
+ @Override
+ public void entry(ContactContext context) {
+ Contact contact = context.getContact();
+ contact.setValidationProgram(null);
+ }
+
+}
Added: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactStateStart.java
===================================================================
--- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactStateStart.java (rev 0)
+++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactStateStart.java 2009-12-10 16:18:20 UTC (rev 118)
@@ -0,0 +1,82 @@
+
+package fr.ifremer.suiviobsmer.bean.states;
+
+import fr.ifremer.suiviobsmer.entity.Contact;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import org.apache.commons.lang.StringUtils;
+
+/**
+ * ContactStateStart
+ *
+ * Created: 9 déc. 2009
+ *
+ * @author fdesbois
+ * @version $Revision$
+ *
+ * Mise a jour: $Date$
+ * par : $Author$
+ */
+public class ContactStateStart extends ContactState {
+
+ private static final int TRANSITION_UNFINISHED = 0;
+
+ //private static final int TRANSITION_BOARDING_EXPECTED = 1;
+
+ public static final ContactStateEnum ENUM_VALUE = ContactStateEnum.CONTACT_START;
+
+ @Override
+ public ContactStateEnum getValue() {
+ return ENUM_VALUE;
+ }
+
+ @Override
+ public List<ContactStateEnum> getNextValues() {
+ List<ContactStateEnum> results = new ArrayList<ContactStateEnum>();
+ results.addAll(ContactStateUnfinished.ENUM_VALUES);
+ results.add(ContactStateBoardingExpected.ENUM_VALUE);
+ return results;
+ }
+
+ @Override
+ protected List<? extends Class<? extends ContactState>> getTransitions() {
+ return Collections.unmodifiableList(Arrays.asList(
+ ContactStateUnfinished.class,
+ ContactStateBoardingExpected.class
+ ));
+ }
+
+ @Override
+ protected void entry(ContactContext context) {
+ Contact contact = context.getContact();
+ contact.setState(ENUM_VALUE.getStringValue());
+ }
+
+ @Override
+ protected boolean validate(ContactContext context, int transitionNum) throws ContactStateException {
+ Contact contact = context.getContact();
+ switch (transitionNum) {
+ case TRANSITION_UNFINISHED:
+// if (StringUtils.isEmpty(contact.getComment())) {
+// throw new ContactStateException(
+// "Le commentaire du contact ne doit pas être vide pour passer à un état " +
+// "'non abouti', 'refus' ou 'refus définitif'");
+// }
+ return StringUtils.isEmpty(contact.getComment());
+ }
+ return true;
+ }
+
+ @Override
+ protected void action(ContactContext context, int transitionNum) throws ContactStateException {
+ switch (transitionNum) {
+ case TRANSITION_UNFINISHED:
+ Contact contact = context.getContact();
+ contact.setTideBeginDate(null);
+ contact.setTideEndDate(null);
+ contact.setNbObservants(0);
+ }
+ }
+}
Added: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactStateUnfinished.java
===================================================================
--- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactStateUnfinished.java (rev 0)
+++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/bean/states/ContactStateUnfinished.java 2009-12-10 16:18:20 UTC (rev 118)
@@ -0,0 +1,53 @@
+
+package fr.ifremer.suiviobsmer.bean.states;
+
+import fr.ifremer.suiviobsmer.entity.Contact;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * ContactStateUnfinished
+ *
+ * Created: 9 déc. 2009
+ *
+ * @author fdesbois
+ * @version $Revision$
+ *
+ * Mise a jour: $Date$
+ * par : $Author$
+ */
+public class ContactStateUnfinished extends ContactState {
+
+ public static final List<ContactStateEnum> ENUM_VALUES = Collections.unmodifiableList(Arrays.asList(
+ ContactStateEnum.BOAT_UNAVAILABLE,
+ ContactStateEnum.BOAT_REFUSED,
+ ContactStateEnum.BOAT_DEFINITIVE_REFUSED
+ ));
+
+ @Override
+ public List<ContactStateEnum> getValues() {
+ return ENUM_VALUES;
+ }
+
+ @Override
+ protected List<? extends Class<? extends ContactState>> getTransitions() {
+ return Collections.singletonList(ContactStateCompanyUnlocked.class);
+ }
+
+ @Override
+ public List<ContactStateEnum> getNextValues() {
+ List<ContactStateEnum> results = new ArrayList<ContactStateEnum>();
+ results.add(ContactStateCompanyUnlocked.ENUM_VALUE);
+ return results;
+ }
+
+ @Override
+ protected void entry(ContactContext context) throws ContactStateException {
+ Contact contact = context.getContact();
+ contact.setState(getValue().getStringValue());
+ context.nextState(ContactStateEnum.COMPANY_UNLOCKED);
+ }
+
+}
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 2009-12-10 14:05:38 UTC (rev 117)
+++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/entity/SampleRowImpl.java 2009-12-10 16:18:20 UTC (rev 118)
@@ -47,6 +47,12 @@
private static final long serialVersionUID = 1L;
+ /**
+ * Get a SampleMonth from the month and year paramater.
+ * @param month the month of the SampleMonth to get
+ * @param year the year of the SampleMonth to get
+ * @return the SampleMonth if it exists in the SampleMonth list or null either
+ */
@Override
public SampleMonth getSampleMonth(int month, int year) {
if (getSampleMonth() == null) {
@@ -60,6 +66,11 @@
return null;
}
+ /**
+ * Get a SampleMonth from a date. The month and year of the date must correspond to the SampleMonth to get.
+ * @param date a Date
+ * @return the SampleMonth if it exists in the SampleMonth list or null either
+ */
@Override
public SampleMonth getSampleMonth(Date date) {
if (getSampleMonth() == null) {
@@ -75,6 +86,10 @@
return null;
}
+ /**
+ * Return the first fishingZone of the list linked with the SampleRow.
+ * @return a FishingZone or null if there is no fishingZone linked with the SampleRow
+ */
@Override
public FishingZone getFirstFishingZone() {
if (getFishingZone().size() > 0) {
@@ -83,6 +98,12 @@
return null;
}
+ /**
+ * Check if the sampleRow has an ElligibleBoat corresponding to the boat in argument.
+ * The test return true only if it's a global ElligbleBoat set by an admin and not by a user (companyActive).
+ * @param boat Boat to test
+ * @return true if the ElligibleBoat is find, false either
+ */
@Override
public boolean hasElligibleBoat(Boat boat) {
for (ElligibleBoat elligible : this.getElligibleBoat()) {
@@ -94,6 +115,12 @@
return false;
}
+ /**
+ * Check from the list of ElligibleBoat linked with the SampleRow if the boats in argument corresponding.
+ * The argument means new boats to linked with SampleRow, so an ElligibleBoat not contains in this list is removed.
+ * @param boats a List of Boats to check with ElligibleBoats linked with the SampleRow.
+ * @see fr.ifremer.suiviobsmer.impl.ServiceSamplingImpl#createUpdateSampleRow(fr.ifremer.suiviobsmer.entity.SampleRow, java.util.List)
+ */
@Override
public void removeNoLongerElligibleBoats(List<Boat> boats) {
Iterator<ElligibleBoat> it = getElligibleBoat().iterator();
@@ -113,6 +140,10 @@
}
}
+ /**
+ * Used to get a list of boat's immatriculations linked with the sampleRow.
+ * @return a simple String which contains immatriculations separate by a space
+ */
@Override
public String getMainElligibleBoatsAsString() {
String result = "";
@@ -125,16 +156,19 @@
return result;
}
- /*@Override
- public List<FishingZone> getAllFishingZones() {
- if (fishingZones == null) {
- fishingZones = new ArrayList<FishingZone>();
- for (FishingZoneToSampleRow assoc : getFishingZoneFishingZoneToSampleRow()) {
- FishingZone zone = assoc.getFishingZone();
- fishingZones.add(zone);
+ /**
+ * Check if SampleMonth of the SampleRow has already realTidesValue set (different from 0).
+ * It means the SampleRow could'nt be deleted and have some modification constraints.
+ * @return true if a SampleMonth have realTidesValue, false either
+ */
+ @Override
+ public boolean hasSampleMonthRealTideTime() {
+ for (SampleMonth month : getSampleMonth()) {
+ if (month.getRealTidesValue() != 0) {
+ return true;
}
}
- return fishingZones;
- }*/
+ return false;
+ }
}
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 2009-12-10 14:05:38 UTC (rev 117)
+++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/ServiceContactImpl.java 2009-12-10 16:18:20 UTC (rev 118)
@@ -25,7 +25,7 @@
import fr.ifremer.suiviobsmer.SuiviObsmerException;
import fr.ifremer.suiviobsmer.SuiviObsmerModelDAOHelper;
import fr.ifremer.suiviobsmer.SuiviObsmerUtils;
-import fr.ifremer.suiviobsmer.bean.ContactState;
+import fr.ifremer.suiviobsmer.bean.states.ContactStateEnum;
import fr.ifremer.suiviobsmer.entity.Boat;
import fr.ifremer.suiviobsmer.entity.Company;
import fr.ifremer.suiviobsmer.entity.Contact;
@@ -110,7 +110,7 @@
result.setUser(user);
result.setSampleRow(row);
result.setBoat(boat);
- result.setState(ContactState.CONTACT_START.getValue());
+ result.setState(ContactStateEnum.CONTACT_START.getStringValue());
return result;
}
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 2009-12-10 14:05:38 UTC (rev 117)
+++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/ServiceSamplingImpl.java 2009-12-10 16:18:20 UTC (rev 118)
@@ -305,6 +305,25 @@
}
@Override
+ public void deleteSampleRow(SampleRow sampleRow) throws SuiviObsmerException {
+ TopiaContext transaction = null;
+ try {
+ transaction = rootContext.beginTransaction();
+
+ SampleRowDAO dao = SuiviObsmerModelDAOHelper.getSampleRowDAO(transaction);
+
+ dao.delete(sampleRow);
+
+ transaction.commitTransaction();
+ transaction.closeContext();
+ } catch (Exception eee) {
+ SuiviObsmerUtils.serviceException(transaction,
+ "Impossible de supprimer la ligne d'échantillon : " + sampleRow.getCode(),
+ eee);
+ }
+ }
+
+ @Override
public SampleRow getNewSampleRow() {
SampleRow row = new SampleRowImpl();
row.setProfession(new ProfessionImpl());
Modified: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/mock/ServiceSamplingMock.java
===================================================================
--- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/mock/ServiceSamplingMock.java 2009-12-10 14:05:38 UTC (rev 117)
+++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/mock/ServiceSamplingMock.java 2009-12-10 16:18:20 UTC (rev 118)
@@ -252,4 +252,9 @@
throw new UnsupportedOperationException("Not supported yet.");
}
+ @Override
+ public void deleteSampleRow(SampleRow sampleRow) throws SuiviObsmerException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
}
Modified: trunk/suiviobsmer-business/src/main/xmi/suiviobsmer.zargo
===================================================================
(Binary files differ)
Added: trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/bean/states/ContactContextTest.java
===================================================================
--- trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/bean/states/ContactContextTest.java (rev 0)
+++ trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/bean/states/ContactContextTest.java 2009-12-10 16:18:20 UTC (rev 118)
@@ -0,0 +1,159 @@
+
+package fr.ifremer.suiviobsmer.bean.states;
+
+import fr.ifremer.suiviobsmer.entity.Contact;
+import fr.ifremer.suiviobsmer.entity.ContactImpl;
+import java.util.Date;
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * ContactContextTest
+ *
+ * Created: 9 déc. 2009
+ *
+ * @author fdesbois
+ * @version $Revision$
+ *
+ * Mise a jour: $Date$
+ * par : $Author$
+ */
+public class ContactContextTest {
+
+ private static final Logger log = LoggerFactory.getLogger(ContactContextTest.class);
+
+ private ContactContext instance;
+
+ public ContactContextTest() {
+ }
+
+ @BeforeClass
+ public static void setUpClass() throws Exception {
+ }
+
+ @AfterClass
+ public static void tearDownClass() throws Exception {
+ }
+
+ @Before
+ public void setUp() throws ContactStateException {
+ Contact contact = new ContactImpl();
+ contact.setState(ContactStateEnum.CONTACT_START.getStringValue());
+ instance = new ContactContextImpl(contact);
+ }
+
+ @After
+ public void tearDown() {
+ }
+
+ /**
+ * Test of nextState method, of class ContactContext.
+ */
+ @Test
+ public void testNextState() throws Exception {
+ log.info("nextState");
+
+ // CONTACT_START -> BOARDING_EXPECTED
+ instance.nextState(ContactStateEnum.BOARDING_EXPECTED);
+ Contact contact = instance.getContact();
+ Assert.assertEquals(ContactStateEnum.BOARDING_EXPECTED, instance.currentState.getValue());
+ Assert.assertEquals(ContactStateEnum.BOARDING_EXPECTED.getStringValue(), contact.getState());
+
+ // BOARDING_EXPECTED -> BOARDING_DONE
+ instance.nextState(ContactStateEnum.BOARDING_DONE);
+ Assert.assertEquals(ContactStateEnum.BOARDING_DONE, instance.currentState.getValue());
+ Assert.assertEquals(ContactStateEnum.BOARDING_DONE.getStringValue(), contact.getState());
+
+ // BOARDING_DONE -> COMPANY_UNLOCKED
+ contact.setDataInputDate(new Date());
+ instance.nextState(ContactStateEnum.COMPANY_UNLOCKED);
+ Assert.assertEquals(ContactStateEnum.COMPANY_UNLOCKED, instance.currentState.getValue());
+ Assert.assertEquals(ContactStateEnum.BOARDING_DONE.getStringValue(), contact.getState());
+ Assert.assertNull(contact.getValidationCompany());
+
+ // Reinitialize of ContactContext to take other transition from CONTACT_START
+ contact = new ContactImpl();
+ contact.setState(ContactStateEnum.CONTACT_START.getStringValue());
+ instance = new ContactContextImpl(contact);
+
+ // CONTACT_START -> BOAT_UNAVAILABLE -> COMPANY_UNLOCKED
+ contact.setNbObservants(2);
+ contact.setTideBeginDate(new Date());
+ contact.setTideEndDate(new Date());
+ instance.nextState(ContactStateEnum.BOAT_UNAVAILABLE);
+ Assert.assertEquals(ContactStateEnum.COMPANY_UNLOCKED, instance.currentState.getValue());
+ Assert.assertEquals(ContactStateEnum.BOAT_UNAVAILABLE.getStringValue(), contact.getState());
+ Assert.assertEquals(0, contact.getNbObservants());
+ Assert.assertNull(contact.getTideEndDate());
+ Assert.assertNull(contact.getTideBeginDate());
+
+ // COMPANY_UNLOCKED -> COMPANY_ACCEPTED -> PROGRAM_UNLOCKED
+ instance.nextState(ContactStateEnum.COMPANY_ACCEPTED);
+ Assert.assertEquals(ContactStateEnum.PROGRAM_UNLOCKED, instance.currentState.getValue());
+ Assert.assertTrue(contact.getValidationCompany());
+ Assert.assertNull(contact.getValidationProgram());
+
+ // PROGRAM_UNLOCKED -> COMPANY_UNLOCKED
+ instance.nextState(ContactStateEnum.COMPANY_UNLOCKED);
+ Assert.assertEquals(ContactStateEnum.COMPANY_UNLOCKED, instance.currentState.getValue());
+ Assert.assertNull(contact.getValidationCompany());
+
+ // COMPANY_UNLOCKED -> COMPANY_REFUSED
+ instance.nextState(ContactStateEnum.COMPANY_REFUSED);
+ Assert.assertEquals(ContactStateEnum.COMPANY_REFUSED, instance.currentState.getValue());
+ Assert.assertFalse(contact.getValidationCompany());
+
+ // Reinitialize of ContactContext to take other transition from PROGRAM_UNLOCKED
+ contact = new ContactImpl();
+ contact.setValidationCompany(Boolean.TRUE);
+ contact.setState(ContactStateEnum.BOARDING_DONE.getStringValue());
+ instance = new ContactContextImpl(contact);
+ Assert.assertEquals(ContactStateEnum.PROGRAM_UNLOCKED, instance.currentState.getValue());
+
+ // PROGRAM_UNLOCKED -> PROGRAM_ACCEPTED
+ instance.nextState(ContactStateEnum.PROGRAM_ACCEPTED);
+ Assert.assertEquals(ContactStateEnum.PROGRAM_ACCEPTED, instance.currentState.getValue());
+ Assert.assertTrue(contact.getValidationProgram());
+
+
+ }
+
+ /**
+ * Test of getAvailableNextStatesAsString method, of class ContactContext.
+ */
+ //@Test
+ public void testGetAvailableNextStatesAsString() {
+ System.out.println("getAvailableNextStatesAsString");
+ }
+
+ /**
+ * Test of getAvailableNextStatesAsEnum method, of class ContactContext.
+ */
+ //@Test
+ public void testGetAvailableNextStatesAsEnum() {
+ System.out.println("getAvailableNextStatesAsEnum");
+ }
+
+ /**
+ * Test of setState method, of class ContactContext.
+ */
+ //@Test
+ public void testSetState() {
+ System.out.println("setState");
+ }
+
+ /**
+ * Test of createContactState method, of class ContactContext.
+ */
+ //@Test
+ public void testCreateContactState() throws Exception {
+ System.out.println("createContactState");
+ }
+
+}
\ No newline at end of file
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 2009-12-10 14:05:38 UTC (rev 117)
+++ trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/impl/ServiceSamplingImplTest.java 2009-12-10 16:18:20 UTC (rev 118)
@@ -29,6 +29,8 @@
import fr.ifremer.suiviobsmer.entity.Boat;
import fr.ifremer.suiviobsmer.entity.Company;
import fr.ifremer.suiviobsmer.entity.CompanyDAO;
+import fr.ifremer.suiviobsmer.entity.ElligibleBoat;
+import fr.ifremer.suiviobsmer.entity.ElligibleBoatDAO;
import fr.ifremer.suiviobsmer.entity.FishingZone;
import fr.ifremer.suiviobsmer.entity.FishingZoneDAO;
import fr.ifremer.suiviobsmer.entity.Profession;
@@ -356,6 +358,49 @@
System.out.println("getSampleRow");
}
+ //@Test
+ public void testDeleteSampleRow() throws Exception {
+ log.info("deleteSampleRow");
+
+ /** PREPARE DATA **/
+ TopiaContext transaction = SuiviObsmerUtils.getTopiaRootContext().beginTransaction();
+
+ FishingZoneDAO zoneDAO = SuiviObsmerModelDAOHelper.getFishingZoneDAO(transaction);
+ FishingZone zoneIId = zoneDAO.create(FishingZone.DISTRICT_CODE, "IId");
+ FishingZone zoneIV = zoneDAO.create(FishingZone.DISTRICT_CODE, "IV");
+ FishingZone zoneI = zoneDAO.create(FishingZone.DISTRICT_CODE, "I");
+
+ transaction.commitTransaction();
+
+
+ InputStream input = getClass().getResourceAsStream("/import/echantillonnage.csv");
+ service.importSamplingPlanCsv(input);
+
+ SampleRowDAO rowDAO = SuiviObsmerModelDAOHelper.getSampleRowDAO(transaction);
+ SampleRow row = rowDAO.findByCode("2010_1");
+ row.getProfession();
+ row.getProgram();
+ row.getCompany();
+ transaction.closeContext();
+
+ input = getClass().getResourceAsStream("/import/navires.csv");
+ ServiceBoat serviceBoat = new ServiceBoatImpl();
+ serviceBoat.importBoatCsv(input);
+ List<Boat> boats = serviceBoat.getBoats("174592 978419 273129");
+
+ service.createUpdateSampleRow(row, boats);
+ /** EXEC METHOD **/
+
+ service.deleteSampleRow(row);
+ row = rowDAO.findByCode("2010_1");
+ assertNull(row);
+
+ transaction = SuiviObsmerUtils.getTopiaRootContext().beginTransaction();
+ ElligibleBoatDAO elligibleDAO = SuiviObsmerModelDAOHelper.getElligibleBoatDAO(transaction);
+ List<ElligibleBoat> elligibles = elligibleDAO.findAll();
+ assertEquals(0, elligibles.size());
+ }
+
@Test
public void testImportSamplingPlanCsv() throws SuiviObsmerException, TopiaException {
log.info("importSamplingPlanCsv");
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 2009-12-10 14:05:38 UTC (rev 117)
+++ trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/Contacts.java 2009-12-10 16:18:20 UTC (rev 118)
@@ -22,7 +22,7 @@
package fr.ifremer.suiviobsmer.ui.pages;
import fr.ifremer.suiviobsmer.SuiviObsmerException;
-import fr.ifremer.suiviobsmer.bean.ContactState;
+import fr.ifremer.suiviobsmer.bean.states.ContactStateEnum;
import fr.ifremer.suiviobsmer.entity.Boat;
import fr.ifremer.suiviobsmer.entity.Company;
import fr.ifremer.suiviobsmer.entity.Contact;
@@ -191,6 +191,8 @@
private boolean even = true;
+// private ContactContext contactContext;
+
public Map<String, Contact> getContacts() throws SuiviObsmerException {
if (contacts == null) {
if (log.isInfoEnabled()) {
@@ -211,11 +213,22 @@
return contactModel;
}
+// public ContactContext getContactContext() throws ContactStateException {
+// if (contactContext == null) {
+// contactContext = new ContactContextImpl(contact);
+// }
+// return contactContext;
+// }
+//
+// public List<ContactStateEnum> getContactStateAvailables() throws ContactStateException {
+// return getContactContext().getAvailableNextStatesAsEnum();
+// }
+
public SelectModel getStateSelectModel() {
if (stateSelectModel == null) {
List<OptionModel> options = new ArrayList<OptionModel>();
- for (ContactState state : ContactState.values()) {
- options.add(new OptionModelImpl(state.getValue(), state.getValue()));
+ for (ContactStateEnum state : ContactStateEnum.values()) {
+ options.add(new OptionModelImpl(state.getStringValue(), state.getStringValue()));
}
stateSelectModel = new SelectModelImpl(null, options);
}
@@ -272,8 +285,12 @@
return contact.getValidationCompany() == null &&
contact.getValidationProgram() == null;
}
+// if (!user.getAdmin()) {
+// return getContactStateAvailables().contains(ContactStateEnum.COMPANY_UNLOCKED);
+// }
// pour un admin : affichage uniquement si la compagnie a validé la ligne
return BooleanUtils.isTrue(contact.getValidationCompany());
+// return getContactStateAvailables().contains(ContactStateEnum.PROGRAM_UNLOCKED);
}
@Log
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 2009-12-10 14:05:38 UTC (rev 117)
+++ trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/SamplingPlan.java 2009-12-10 16:18:20 UTC (rev 118)
@@ -344,5 +344,10 @@
period.setFromDate(program.getPeriodBegin());
period.setThruDate(program.getPeriodEnd());
}
+
+ void onActionFromDeleteSampleRow(int rowIndex) throws SuiviObsmerException {
+ row = getData().get(rowIndex);
+ serviceSampling.deleteSampleRow(row);
+ }
}
Modified: trunk/suiviobsmer-ui/src/main/webapp/SamplingPlan.tml
===================================================================
--- trunk/suiviobsmer-ui/src/main/webapp/SamplingPlan.tml 2009-12-10 14:05:38 UTC (rev 117)
+++ trunk/suiviobsmer-ui/src/main/webapp/SamplingPlan.tml 2009-12-10 16:18:20 UTC (rev 118)
@@ -147,13 +147,15 @@
<img src="${asset:context:}/img/boat.png" alt="Navire" title="Voir les navires elligibles pour cette ligne"/>
</a>
<t:if t:test="user.admin">
- <!--a t:id="editRow" t:type="actionlink" t:zone="samplingZone"
- t:context="[facadeIndex, sectorIndex, rowIndex]"-->
- <a t:type="pagelink" t:page="sampleRowForm" t:context="row.topiaId">
- <img src="${asset:context:}/img/edit.png" alt="Modifier" title="Modifier la ligne"/>
+ <a t:type="pagelink" t:page="sampleRowForm" t:context="row.topiaId">
+ <img src="${asset:context:}/img/edit.png" alt="Modifier" title="Modifier la ligne"/>
+ </a>
+ <t:unless t:test="row.hasSampleMonthRealTideTime()">
+ <a t:type="actionlink" t:id="deleteSampleRow" t:context="rowIndex" title="Supprimer la ligne d'échantillon"
+ t:mixins="confirm" t:message="Etes-vous sûr de vouloir supprimer définitivement cette ligne du plan d'échantillonnage ?">
+ <img src="${asset:context:}/img/delete2.png" alt="Supprimer" title="Supprimer la ligne"/>
</a>
- <img src="${asset:context:}/img/delete2.png" alt="Supprimer" title="Supprimer la ligne"/>
- <!--/a-->
+ </t:unless>
</t:if>
</td>
</tr>
Modified: trunk/suiviobsmer-ui/src/main/webapp/js/dialog.js
===================================================================
--- trunk/suiviobsmer-ui/src/main/webapp/js/dialog.js 2009-12-10 14:05:38 UTC (rev 117)
+++ trunk/suiviobsmer-ui/src/main/webapp/js/dialog.js 2009-12-10 16:18:20 UTC (rev 118)
@@ -8,11 +8,12 @@
*/
initialize: function(element, message) {
this.message = message;
+ Tapestry.debug('click ' + element);
Event.observe($(element), 'click', this.doConfirm.bindAsEventListener(this));
},
doConfirm: function(e) {
if(! confirm(this.message)) {
- //Tapestry.debug('STOP ' + e);
+ Tapestry.debug('STOP ' + e);
Event.stop(e);
}
}
1
0
[Suiviobsmer-commits] r117 - in trunk: . suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages suiviobsmer-ui/src/main/webapp suiviobsmer-ui/src/main/webapp/css
by fdesbois@users.labs.libre-entreprise.org 10 Dec '09
by fdesbois@users.labs.libre-entreprise.org 10 Dec '09
10 Dec '09
Author: fdesbois
Date: 2009-12-10 14:05:38 +0000 (Thu, 10 Dec 2009)
New Revision: 117
Modified:
trunk/changelog.txt
trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/Boats.java
trunk/suiviobsmer-ui/src/main/webapp/Boats.tml
trunk/suiviobsmer-ui/src/main/webapp/css/boats.css
Log:
Add messages for user in BoatInfos + hide shipOwner code
Modified: trunk/changelog.txt
===================================================================
--- trunk/changelog.txt 2009-12-09 10:06:17 UTC (rev 116)
+++ trunk/changelog.txt 2009-12-10 14:05:38 UTC (rev 117)
@@ -1,6 +1,11 @@
0.0.1-alpha-2
-------------
+[10-12-2009] [fdesbois] EVO #1938 (Boats / BoatInfos)
+ * Ajout d'un message lorsque l'utilisateur vient de la page "SamplingPlan" pour sélection d'un navire
+ * Ajout d'un texte en bas des informations sur le navire sélectionnée pour informer l'utilisateur de la confidentialité de ses saisies
+ * Le code de l'armateur n'est plus visible
+
[09-12-2009] [fdesbois] EVO #1951 (SamplingPlan)
Ajout d'un lien sur les programmes pour filtrer la période
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 2009-12-09 10:06:17 UTC (rev 116)
+++ trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/Boats.java 2009-12-10 14:05:38 UTC (rev 117)
@@ -40,6 +40,7 @@
import fr.ifremer.suiviobsmer.ui.base.BusinessUtils;
import fr.ifremer.suiviobsmer.ui.base.GenericSelectModel;
import fr.ifremer.suiviobsmer.ui.base.SuiviObsmerPage;
+import fr.ifremer.suiviobsmer.ui.components.FeedBack;
import fr.ifremer.suiviobsmer.ui.components.Layout;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
@@ -107,6 +108,9 @@
@Property
private String sampleRowCode;
+ @InjectComponent
+ private FeedBack filterFeedback;
+
void setupRender() throws SuiviObsmerException {
sampleRow = null;
getSampleRow();
@@ -124,6 +128,7 @@
if (isSampleRowExists()) {
filtersHidden = false;
boats = null;
+ filterFeedback.addInfo("Vous êtes en cours de sélection d'un navire pour la ligne du plan " + sampleRow.getCode());
professionId = getSampleRow().getProfession().getTopiaId();
fishingZoneId = getSampleRow().getFirstFishingZone().getTopiaId();
getBoatFilter().setSampleRowCode(getSampleRow().getCode());
Modified: trunk/suiviobsmer-ui/src/main/webapp/Boats.tml
===================================================================
--- trunk/suiviobsmer-ui/src/main/webapp/Boats.tml 2009-12-09 10:06:17 UTC (rev 116)
+++ trunk/suiviobsmer-ui/src/main/webapp/Boats.tml 2009-12-10 14:05:38 UTC (rev 117)
@@ -18,6 +18,7 @@
</div>
</t:if>
<!-- Filtres -->
+
<!--t:filters t:title="Filtres de recherche" t:mainId="so-boats-filters"-->
<div t:type="zone" class="so-filters" t:id="filtersZone" t:update="show" id="so-boats-filters">
<fieldset>
@@ -34,6 +35,7 @@
</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 />
@@ -123,6 +125,10 @@
<legend>Calendrier d'activité 2009</legend>
<p><img src="${asset:context:}/img/calendar.png" title="Calendrier d'activité"/></p>
</fieldset>
+ <div id="so-boats-boat-infos-message">
+ Les informations saisies sont confidentielles et propriété de la société. <br />
+ Elles sont néanmoins consultables par un administrateur
+ </div>
</p:else>
</t:if>
</t:zone>
@@ -161,7 +167,7 @@
<fieldset id="so-boats-boat-infos-shipowner">
<legend>Armateur</legend>
<div t:type="beandisplay" t:id="boatInfosShipOwner" t:object="boatInfos.boat.shipOwner"
- t:include="firstName, lastName, code" />
+ t:include="firstName, lastName" />
</fieldset>
<fieldset id="so-boats-boat-infos-contact">
<legend>Contact</legend>
Modified: trunk/suiviobsmer-ui/src/main/webapp/css/boats.css
===================================================================
--- trunk/suiviobsmer-ui/src/main/webapp/css/boats.css 2009-12-09 10:06:17 UTC (rev 116)
+++ trunk/suiviobsmer-ui/src/main/webapp/css/boats.css 2009-12-10 14:05:38 UTC (rev 117)
@@ -15,6 +15,10 @@
/***** FILTERS ******/
+div.so-filters .fb-info {
+ width: 60%;
+}
+
/*div.so-filters {
width: 60%;
margin-left: auto;
@@ -113,4 +117,12 @@
fieldset#so-boats-boat-infos-calendar p {
text-align: center;
+}
+
+div#so-boats-boat-infos-message {
+ text-align: center;
+ margin-top: 10px;
+ clear: both;
+ font-size: 0.8em;
+ font-weight: bold;
}
\ No newline at end of file
1
0