From fdesbois@users.labs.libre-entreprise.org Mon Jun 15 01:50:54 2026
From: fdesbois@users.labs.libre-entreprise.org
To: wao-commits@list.forge.codelutin.com
Subject: [Suiviobsmer-commits] r176 - in trunk: .
	suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer
	suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl
	suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/mock
	suiviobsmer-business/src/main/xmi
	suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/entity
	suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/impl
	suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/components
	suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/page
Date: Thu, 07 Jan 2010 17:14:10 +0100
Message-ID: <20100107161410.DD34B16C4B9@labs.libre-entreprise.org>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="===============1798498289707512950=="

--===============1798498289707512950==
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable

Author: fdesbois
Date: 2010-01-07 16:14:09 +0000 (Thu, 07 Jan 2010)
New Revision: 176

Added:
   trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/Servi=
ceSynthesisImpl.java
   trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/components/Ch=
art.java
Modified:
   trunk/pom.xml
   trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/ImportHelp=
er.java
   trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/Servi=
ceContactImpl.java
   trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/Servi=
ceSamplingImpl.java
   trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/mock/Servi=
ceSamplingMock.java
   trunk/suiviobsmer-business/src/main/xmi/suiviobsmer.zargo
   trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/entity/Pro=
gramImplTest.java
   trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/impl/Servi=
ceBoatImplTest.java
   trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/impl/Servi=
ceSamplingImplTest.java
   trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/Samplin=
gPlan.java
   trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/Synthes=
is.java
   trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/services/AppM=
odule.java
   trunk/suiviobsmer-ui/src/main/webapp/Synthesis.tml
Log:
- Change filters hierarchy
- Create service for Synthesis
- Add Chart component in UI
- Use snapshots for EUGene (error on generated type) and Nuiton-utils (Period=
Dates)
- The company is now considerated in SamplingPlan import
- The elligibleBoat for a contact is automatically created from a contact imp=
ort

Modified: trunk/pom.xml
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/pom.xml	2010-01-07 11:15:49 UTC (rev 175)
+++ trunk/pom.xml	2010-01-07 16:14:09 UTC (rev 176)
@@ -238,11 +238,11 @@
         <labs.id>154</labs.id>
        =20
         <!-- libraries version -->
-        <nuitonutils.version>1.1.2</nuitonutils.version>
+        <nuitonutils.version>1.1.3-SNAPSHOT</nuitonutils.version>
         <topia.version>2.3.0-beta-4-SNAPSHOT</topia.version>
         <license.version>2.0.0</license.version>
         <helper.version>1.1.0</helper.version>
-        <eugene.version>2.0.0-beta-2</eugene.version>
+        <eugene.version>2.0.0-beta-3-SNAPSHOT</eugene.version>
         <tapestry.version>5.1.0.5</tapestry.version>
=20
         <!-- default license to use  -->

Modified: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/Imp=
ortHelper.java
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/ImportHel=
per.java	2010-01-07 11:15:49 UTC (rev 175)
+++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/ImportHel=
per.java	2010-01-07 16:14:09 UTC (rev 176)
@@ -86,6 +86,8 @@
     public static enum SAMPLING {
         /** SampleRow code **/
         PLAN_CODE(6),
+        /** Company name **/
+        SOCIETE_NOM(5),
         /** Program code **/
         PROGRAMME_CODE(7),
         /** Program period begin **/
@@ -160,8 +162,6 @@
         OBSERV_NOM(4),
         /** Company id **/
         //SOCIETE_ID,
-        /** Company nom **/
-        SOCIETE_NOM(5),
         /** Contact state **/
         CONT_ETAT(23),
         /** Contact tide begin **/

Modified: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/imp=
l/ServiceContactImpl.java
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/Serv=
iceContactImpl.java	2010-01-07 11:15:49 UTC (rev 175)
+++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/Serv=
iceContactImpl.java	2010-01-07 16:14:09 UTC (rev 176)
@@ -43,6 +43,7 @@
 import fr.ifremer.suiviobsmer.entity.ContactDAO;
 import fr.ifremer.suiviobsmer.entity.ContactImpl;
 import fr.ifremer.suiviobsmer.entity.ElligibleBoat;
+import fr.ifremer.suiviobsmer.entity.ElligibleBoatDAO;
 import fr.ifremer.suiviobsmer.entity.FishingZone;
 import fr.ifremer.suiviobsmer.entity.Profession;
 import fr.ifremer.suiviobsmer.entity.Program;
@@ -292,7 +293,7 @@
                 record[CONTACT.OBSERV_ID.forContactCsv()] =3D observer.getLo=
gin();
                 record[CONTACT.OBSERV_PRENOM.forContactCsv()] =3D observer.g=
etFirstName();
                 record[CONTACT.OBSERV_NOM.forContactCsv()] =3D observer.getL=
astName();
-                record[CONTACT.SOCIETE_NOM.forContactCsv()] =3D company.getN=
ame();
+                record[SAMPLING.SOCIETE_NOM.forContactCsv()] =3D company.get=
Name();
=20
                 // SampleRow part
                 SampleRow row =3D contact.getSampleRow();
@@ -394,36 +395,54 @@
                     }
=20
                     if (company !=3D null) {
-                        String rowCode =3D reader.get(SAMPLING.PLAN_CODE.nam=
e());
+                        String rowCode =3D reader.get(SAMPLING.PLAN_CODE.nam=
e().trim());
=20
                         SampleRow row =3D rowDAO.findByProperties(SampleRow.=
CODE, rowCode, SampleRow.COMPANY, company);
=20
                         if (row !=3D null) {
-                            int boatImmatriculation =3D Integer.parseInt(rea=
der.get(BOAT.NAVS_COD.name()));
+                            int boatImmatriculation =3D Integer.parseInt(rea=
der.get(BOAT.NAVS_COD.name().trim()));
=20
-                            // The boat must be elligible for the row
-                            TopiaQuery<Boat> boatQuery =3D boatDAO.createQue=
ry("B").
-                                    addFrom(ElligibleBoat.class.getName() + =
" E").
-                                    add("E.sampleRow", row).add("E.boat =3D =
B").
-                                    add(Boat.IMMATRICULATION, boatImmatricul=
ation);
+                            Boat boat =3D boatDAO.findByImmatriculation(boat=
Immatriculation);
=20
-                            if (!user.getAdmin()) {
-                                // Constraint on companyActive for elligible=
Boat for a simple user
-                                boatQuery.add("E.companyActive =3D :booleanT=
rue OR (E.companyActive IS NULL AND E.globalActive =3D :booleanTrue)").
-                                        addParam("booleanTrue", Boolean.TRUE=
);
-                            }
+                            if (boat !=3D null) {
=20
-                            Boat boat =3D boatQuery.executeToEntity();
+                                ElligibleBoatDAO elligibleDAO =3D SuiviObsme=
rModelDAOHelper.getElligibleBoatDAO(transaction);
+                                ElligibleBoat elligible =3D elligibleDAO.fin=
dByProperties(
+                                        ElligibleBoat.BOAT, boat, ElligibleB=
oat.SAMPLE_ROW, row);
=20
-                            if (boat !=3D null) {
+                                if (elligible =3D=3D null) {
+                                    // Create new elligible boat not active =
in a global way
+                                    elligible =3D elligibleDAO.create(
+                                            ElligibleBoat.BOAT, boat, Elligi=
bleBoat.SAMPLE_ROW, row);
+                                }
+                                elligible.setCompanyActive(Boolean.TRUE);
=20
+                                // The boat must be elligible for the row
+//                                TopiaQuery<Boat> boatQuery =3D boatDAO.cre=
ateQuery("B").
+//                                        addFrom(ElligibleBoat.class.getNam=
e() + " E").
+//                                        add("E.sampleRow", row).add("E.boa=
t =3D B").
+//                                        add(Boat.IMMATRICULATION, boatImma=
triculation);
+//
+//                                if (!user.getAdmin()) {
+//                                    // Constraint on companyActive for ell=
igibleBoat for a simple user
+//                                    boatQuery.add("E.companyActive =3D :bo=
oleanTrue OR (E.companyActive IS NULL AND E.globalActive =3D :booleanTrue)").
+//                                            addParam("booleanTrue", Boolea=
n.TRUE);
+//                                }
+//
+//                                Boat boat =3D boatQuery.executeToEntity();
+//
+//                                if (boat =3D=3D null) {
+//                                    ElligibleBoatDAO elligibleDAO =3D Suiv=
iObsmerModelDAOHelper.getElligibleBoatDAO(transaction);
+//
+//                                }
+
                                 Contact contact =3D null;
=20
                                 // Check if createDate exist
-                                String createDateString =3D reader.get(CONTA=
CT.CONT_CREATION.name());
+                                String createDateString =3D reader.get(CONTA=
CT.CONT_CREATION.name().trim());
                                 //Date createDate =3D !StringUtils.isEmpty(c=
reateDateString) ? dateFormat.parse(createDateString) : null;
=20
-                                String contactCode =3D reader.get(CONTACT.CO=
NT_CODE.name());
+                                String contactCode =3D reader.get(CONTACT.CO=
NT_CODE.name().trim());
                                 Date createDate =3D ImportHelper.parseContac=
tCreateDate(contactCode, createDateString);
                                 if (log.isDebugEnabled()) {
                                     log.debug("Ligne " + currRow + " : Creat=
e date : " + createDate);
@@ -440,25 +459,25 @@
                                 }
=20
                                 // new contact to import
-                                if (contact =3D=3D null) {=20
+                                if (contact =3D=3D null) {
                                     contact =3D dao.create(
                                             TopiaEntity.TOPIA_CREATE_DATE, c=
reateDate,
                                             Contact.USER, observer,
                                             Contact.SAMPLE_ROW, row,
                                             Contact.BOAT, boat);
                                 }
-                               =20
-                                String tideBeginString =3D reader.get(CONTAC=
T.CONT_DEBUT_MAREE.name());
-                                String tideEndString =3D reader.get(CONTACT.=
CONT_FIN_MAREE.name());
-                                String nbObservantsString =3D reader.get(CON=
TACT.CONT_NB_OBSERV.name());
=20
+                                String tideBeginString =3D reader.get(CONTAC=
T.CONT_DEBUT_MAREE.name().trim());
+                                String tideEndString =3D reader.get(CONTACT.=
CONT_FIN_MAREE.name().trim());
+                                String nbObservantsString =3D reader.get(CON=
TACT.CONT_NB_OBSERV.name().trim());
+
                                 Date tideBegin =3D !StringUtils.isEmpty(tide=
BeginString) ? dateFormat.parse(tideBeginString) : null;
                                 Date tideEnd =3D !StringUtils.isEmpty(tideEn=
dString) ? dateFormat.parse(tideEndString) : null;
                                 int nbObservants =3D !StringUtils.isEmpty(nb=
ObservantsString) ? Integer.parseInt(nbObservantsString) : 0;
                                 boolean mammalsCapture =3D
-                                        ImportHelper.parseContactMammals(rea=
der.get(CONTACT.CONT_MAM_CAPT.name()));
+                                        ImportHelper.parseContactMammals(rea=
der.get(CONTACT.CONT_MAM_CAPT.name().trim()));
                                 boolean mammalsObsv =3D
-                                        ImportHelper.parseContactMammals(rea=
der.get(CONTACT.CONT_MAM_OBS.name()));
+                                        ImportHelper.parseContactMammals(rea=
der.get(CONTACT.CONT_MAM_OBS.name().trim()));
=20
                                 contact.setState(state);
                                 contact.setTideBeginDate(tideBegin);
@@ -471,8 +490,7 @@
=20
                             } else if (log.isWarnEnabled()) {
                                 log.warn("Import contact ligne " + currRow +=
 " : " +
-                                        "Navire inexistant ou incompatible a=
vec la ligne d'=C3=A9chantillon " +
-                                        "pour l'immatriculation : " + boatIm=
matriculation);
+                                        "Navire inexistant avec l'immatricul=
ation : " + boatImmatriculation);
                             }
                         } else if (log.isWarnEnabled()) {
                             log.warn("Import contact ligne " + currRow + " :=
 " +
@@ -490,16 +508,6 @@
                 if (result % 1000 =3D=3D 0) {
                     transaction.commitTransaction();
                     tic =3D ImportHelper.logTimeAndMemory(log, tic, "contact=
s ligne " + currRow);
-//                    if (log.isInfoEnabled()) {
-//                        log.info("RUNNING... Import contacts ligne " + cur=
rRow);
-//                        Runtime runtime =3D Runtime.getRuntime();
-//                        long mem =3D (runtime.totalMemory() - runtime.free=
Memory()) / 1048576;
-//                        //long memMega =3D mem / 1024 / 1024;
-//                        log.info("Memory : " + mem + " Mo");
-//                        tic2 =3D System.currentTimeMillis();
-//                        log.info("Time : " + DurationFormatUtils.formatDur=
ationHMS(tic2 - tic1));
-//                        tic1 =3D System.currentTimeMillis();
-//                    }
                 }
             }
=20

Modified: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/imp=
l/ServiceSamplingImpl.java
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/Serv=
iceSamplingImpl.java	2010-01-07 11:15:49 UTC (rev 175)
+++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/Serv=
iceSamplingImpl.java	2010-01-07 16:14:09 UTC (rev 176)
@@ -24,6 +24,8 @@
 import com.csvreader.CsvReader;
 import fr.ifremer.suiviobsmer.ImportHelper.FISHING_ZONE;
 import fr.ifremer.suiviobsmer.ImportHelper.SAMPLING;
+import fr.ifremer.suiviobsmer.SuiviObsmerBusinessException;
+import fr.ifremer.suiviobsmer.SuiviObsmerBusinessException.Type;
 import fr.ifremer.suiviobsmer.SuiviObsmerException;
 import fr.ifremer.suiviobsmer.SuiviObsmerModelDAOHelper;
 import fr.ifremer.suiviobsmer.SuiviObsmerContext;
@@ -53,6 +55,7 @@
 import org.nuiton.topia.persistence.TopiaEntity;
 import org.nuiton.topia.persistence.util.EntityLoador;
 import org.nuiton.util.DateUtils;
+import org.nuiton.util.PeriodDates;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
=20
@@ -170,11 +173,11 @@
     }
=20
     @Override
-    public List<SampleRow> getSampleRowsOrderedByFishingZone(Date periodBegi=
n, Date periodEnd, Company company) throws SuiviObsmerException {
+    public List<SampleRow> getSampleRowsOrderedByFishingZone(PeriodDates per=
iod, Company company) throws SuiviObsmerException {
         TopiaContext transaction =3D null;
         List<SampleRow> results =3D new ArrayList<SampleRow>();
         try {
-            if (periodBegin =3D=3D null || periodEnd =3D=3D null) {
+            if (period.getFromDate() =3D=3D null || period.getThruDate() =3D=
=3D null) {
                 throw new IllegalArgumentException("PeriodBegin date and/or =
PeriodEnd date can't be null !");
             }
             transaction =3D rootContext.beginTransaction();
@@ -189,9 +192,9 @@
             }
=20
             // Prepare period dates
-            periodBegin =3D DateUtils.setFirstDayOfMonth(periodBegin);
-            periodEnd =3D DateUtils.setLastDayOfMonth(periodEnd);
-            query.add("S.program.periodBegin", Op.LT, periodEnd).add("S.prog=
ram.periodEnd", Op.GT, periodBegin);
+            period.setDayOfMonthExtremities();
+            query.add("S.program.periodBegin", Op.LT, period.getThruDate()).
+                  add("S.program.periodEnd", Op.GT, period.getFromDate());
=20
             // Order By facade, sector, districtCode, sampleRowCode
             String zoneOrder =3D "F.facadeName, F.sectorName, F.districtCode=
";
@@ -369,7 +372,7 @@
                 int[] programBegin =3D getMonthAndYear(reader.get(SAMPLING.P=
ROGRAMME_DEBUT.name()).trim());
                 int[] programEnd =3D getMonthAndYear(reader.get(SAMPLING.PRO=
GRAMME_FIN.name()).trim());
                 String districts =3D reader.get(FISHING_ZONE.PECHE_DIVISION.=
name());
-
+               =20
                 row =3D dao.findByCode(code);
                 // Refuse existing SampleRow
                 if (row !=3D null) {
@@ -380,8 +383,8 @@
                     nbRefused++;
                 // Refuse Fishing zones empty
                 } else if (StringUtils.isEmpty(programName)) {
-                    throw new SuiviObsmerException(
-                        "Erreur =C3=A0 la ligne " + currRow + " [CODE =3D " =
+ row.getCode() + "] : " +
+                    throw new SuiviObsmerBusinessException(Type.IMPORT_ERROR=
, this.getClass(),
+                        "Erreur =C3=A0 la ligne " + currRow + " [CODE =3D " =
+ code + "] : " +
                         "Cette ligne n'est li=C3=A9 =C3=A0 aucun programme !=
");
                     //nbRefused++;
                 } else if (StringUtils.isEmpty(districts)) {
@@ -393,6 +396,20 @@
                 } else {
                     row =3D dao.create(SampleRow.CODE, code);
=20
+                    String companyName =3D reader.get(SAMPLING.SOCIETE_NOM.n=
ame()).trim();
+
+                    // Create link with company if set in file
+                    if (!StringUtils.isEmpty(companyName)) {
+                        CompanyDAO companyDAO =3D SuiviObsmerModelDAOHelper.=
getCompanyDAO(transaction);
+                        Company company =3D companyDAO.findByName(companyNam=
e);
+                        if (company =3D=3D null) {
+                            throw new SuiviObsmerBusinessException(Type.IMPO=
RT_ERROR, this.getClass(),
+                                    "Erreur =C3=A0 la ligne " + currRow + " =
[CODE =3D " + code + "] : " +
+                                    "La soci=C3=A9t=C3=A9 portant le nom '" =
+ companyName + "' n'existe pas dans l'application");
+                        }
+                        row.setCompany(company);
+                    }
+
                     // Import program. Creation if not exist
                     Program program =3D importProgram(transaction, programNa=
me, programBegin, programEnd);
                     row.setProgram(program);
@@ -530,7 +547,7 @@
         for (String districtCode : districtList) {
             FishingZone zone =3D dao.findByDistrictCode(districtCode.trim());
             if (zone =3D=3D null) {
-                throw new SuiviObsmerException(
+                throw new SuiviObsmerBusinessException(Type.IMPORT_ERROR, th=
is.getClass(),
                         "Erreur =C3=A0 la ligne " + currRow + " [CODE =3D " =
+ row.getCode() + "] : " +
                         "Cette ligne est li=C3=A9 =C3=A0 une zone inexistant=
e : " + districtCode);
             }

Added: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/S=
erviceSynthesisImpl.java
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/Serv=
iceSynthesisImpl.java	                        (rev 0)
+++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/Serv=
iceSynthesisImpl.java	2010-01-07 16:14:09 UTC (rev 176)
@@ -0,0 +1,29 @@
+
+package fr.ifremer.suiviobsmer.impl;
+
+import fr.ifremer.suiviobsmer.SuiviObsmerException;
+import fr.ifremer.suiviobsmer.services.ServiceSynthesis;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import org.nuiton.util.PeriodDates;
+
+/**
+ * ServiceSynthesisImpl
+ *
+ * Created: 7 janv. 2010
+ *
+ * @author fdesbois
+ * @version $Revision$
+ *
+ * Mise a jour: $Date$
+ * par : $Author$
+ */
+public class ServiceSynthesisImpl implements ServiceSynthesis {
+
+    @Override
+    public List<Map<Date, Integer>> getDataSampling(PeriodDates period) thro=
ws SuiviObsmerException {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+}


Property changes on: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiv=
iobsmer/impl/ServiceSynthesisImpl.java
___________________________________________________________________
Added: svn:keywords
   + "Author Date Id Revision HeadURL"

Modified: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/moc=
k/ServiceSamplingMock.java
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/mock/Serv=
iceSamplingMock.java	2010-01-07 11:15:49 UTC (rev 175)
+++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/mock/Serv=
iceSamplingMock.java	2010-01-07 16:14:09 UTC (rev 176)
@@ -38,6 +38,7 @@
 import java.util.Date;
 import java.util.GregorianCalendar;
 import java.util.List;
+import org.nuiton.util.PeriodDates;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
=20
@@ -57,7 +58,7 @@
     private static final Logger log =3D LoggerFactory.getLogger(ServiceSampl=
ingMock.class);
=20
     @Override
-    public List<SampleRow> getSampleRowsOrderedByFishingZone(Date periodBegi=
n, Date periodEnd, Company company) throws SuiviObsmerException {
+    public List<SampleRow> getSampleRowsOrderedByFishingZone(PeriodDates per=
iod, Company company) throws SuiviObsmerException {
         return new ArrayList<SampleRow>();
     }
=20

Modified: trunk/suiviobsmer-business/src/main/xmi/suiviobsmer.zargo
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
(Binary files differ)

Modified: trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/ent=
ity/ProgramImplTest.java
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/entity/Pr=
ogramImplTest.java	2010-01-07 11:15:49 UTC (rev 175)
+++ trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/entity/Pr=
ogramImplTest.java	2010-01-07 16:14:09 UTC (rev 176)
@@ -180,6 +180,9 @@
         FishingZone zoneIId =3D zoneDAO.create(FishingZone.DISTRICT_CODE, "I=
Id");
         FishingZone zoneIV =3D zoneDAO.create(FishingZone.DISTRICT_CODE, "IV=
");
         FishingZone zoneI =3D zoneDAO.create(FishingZone.DISTRICT_CODE, "I");
+
+        CompanyDAO companyDAO =3D SuiviObsmerModelDAOHelper.getCompanyDAO(tr=
ansaction);
+        companyDAO.create(Company.NAME, "TARTANPION");
         transaction.commitTransaction();
=20
         ServiceSampling serviceSampling =3D new ServiceSamplingImpl();

Modified: trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/imp=
l/ServiceBoatImplTest.java
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/impl/Serv=
iceBoatImplTest.java	2010-01-07 11:15:49 UTC (rev 175)
+++ trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/impl/Serv=
iceBoatImplTest.java	2010-01-07 16:14:09 UTC (rev 176)
@@ -209,18 +209,17 @@
         InputStream input =3D getClass().getResourceAsStream("/import/zonesP=
eche.csv");
         serviceReferential.importFishingZoneCsv(input);
=20
-        ServiceSampling serviceSampling =3D new ServiceSamplingImpl();
-        input =3D getClass().getResourceAsStream("/import/echantillonnage.cs=
v");
-        serviceSampling.importSamplingPlanCsv(input);
-
-        // Import doesn't set company
         TopiaContext transaction =3D SuiviObsmerContext.getTopiaRootContext(=
).beginTransaction();
-
         // Create a company
         CompanyDAO companyDAO =3D SuiviObsmerModelDAOHelper.getCompanyDAO(tr=
ansaction);
         SuiviObsmerContext.prepareTopiaId(Company.class, company);
         companyDAO.update(company);
+        transaction.commitTransaction();
=20
+        ServiceSampling serviceSampling =3D new ServiceSamplingImpl();
+        input =3D getClass().getResourceAsStream("/import/echantillonnage.cs=
v");
+        serviceSampling.importSamplingPlanCsv(input);
+
         // Get two SampleRows : 2009_3 & 2010_4
         SampleRowDAO rowDAO =3D SuiviObsmerModelDAOHelper.getSampleRowDAO(tr=
ansaction);
         SampleRow row1 =3D rowDAO.findByCode("2009_03");

Modified: trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/imp=
l/ServiceSamplingImplTest.java
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/impl/Serv=
iceSamplingImplTest.java	2010-01-07 11:15:49 UTC (rev 175)
+++ trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/impl/Serv=
iceSamplingImplTest.java	2010-01-07 16:14:09 UTC (rev 176)
@@ -60,6 +60,7 @@
 import org.junit.Test;
 import org.nuiton.topia.TopiaContext;
 import org.nuiton.topia.TopiaException;
+import org.nuiton.util.PeriodDates;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import static org.junit.Assert.*;
@@ -237,7 +238,8 @@
         //      NO COMPANY (=3D null)
         Calendar begin =3D new GregorianCalendar(2000, 0, 1, 0, 0, 0);
         Calendar end =3D new GregorianCalendar(2020, 11, 31, 0, 0, 0);
-        List<SampleRow> rows =3D service.getSampleRowsOrderedByFishingZone(b=
egin.getTime(), end.getTime(), null);
+        PeriodDates period =3D new PeriodDates(begin, end);
+        List<SampleRow> rows =3D service.getSampleRowsOrderedByFishingZone(p=
eriod, null);
         assertEquals(4, rows.size());
         SampleRow resultRow0 =3D rows.get(0);
         assertEquals("2010_02", resultRow0.getCode());
@@ -264,7 +266,8 @@
         //      NO COMPANY (=3D null)
         begin =3D new GregorianCalendar(2009, 0, 1, 0, 0, 0);
         end =3D new GregorianCalendar(2020, 11, 31, 0, 0, 0);
-        rows =3D service.getSampleRowsOrderedByFishingZone(begin.getTime(), =
end.getTime(), null);
+        period =3D new PeriodDates(begin, end);
+        rows =3D service.getSampleRowsOrderedByFishingZone(period, null);
         assertEquals(3, rows.size());
         resultRow0 =3D rows.get(0);
         assertEquals("2010_02", resultRow0.getCode());
@@ -401,7 +404,9 @@
         FishingZone zoneIId =3D zoneDAO.create(FishingZone.DISTRICT_CODE, "I=
Id");
         FishingZone zoneIV =3D zoneDAO.create(FishingZone.DISTRICT_CODE, "IV=
");
         FishingZone zoneI =3D zoneDAO.create(FishingZone.DISTRICT_CODE, "I");
-
+       =20
+        CompanyDAO companyDAO =3D SuiviObsmerModelDAOHelper.getCompanyDAO(tr=
ansaction);
+        companyDAO.create(Company.NAME, "TARTANPION");
         transaction.commitTransaction();
=20
=20
@@ -446,7 +451,9 @@
         FishingZone zoneIId =3D zoneDAO.create(FishingZone.DISTRICT_CODE, "I=
Id");
         FishingZone zoneIV =3D zoneDAO.create(FishingZone.DISTRICT_CODE, "IV=
");
         FishingZone zoneI =3D zoneDAO.create(FishingZone.DISTRICT_CODE, "I");
-
+       =20
+        CompanyDAO companyDAO =3D SuiviObsmerModelDAOHelper.getCompanyDAO(tr=
ansaction);
+        companyDAO.create(Company.NAME, "TARTANPION");
         transaction.commitTransaction();
         transaction.closeContext();
=20

Added: trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/component=
s/Chart.java
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/components/C=
hart.java	                        (rev 0)
+++ trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/components/C=
hart.java	2010-01-07 16:14:09 UTC (rev 176)
@@ -0,0 +1,167 @@
+/* *##% Pollen
+ * Copyright (C) 2009 CodeLutin
+ *
+ * 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 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/>. ##%=
*/
+
+package fr.ifremer.suiviobsmer.ui.components;
+
+import java.awt.image.BufferedImage;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.List;
+
+import org.apache.tapestry5.ComponentResources;
+import org.apache.tapestry5.Link;
+import org.apache.tapestry5.MarkupWriter;
+import org.apache.tapestry5.StreamResponse;
+import org.apache.tapestry5.annotations.Parameter;
+import org.apache.tapestry5.annotations.Persist;
+import org.apache.tapestry5.dom.Element;
+import org.apache.tapestry5.ioc.annotations.Inject;
+import org.apache.tapestry5.services.Response;
+import org.jfree.chart.ChartUtilities;
+import org.jfree.chart.JFreeChart;
+import org.nuiton.util.ArrayUtil;
+
+/**
+ * Composant qui affiche un graphe de type PieChart.
+ *
+ * <pre>
+ * Utilisation :
+ * &lt;t:chart width=3D&quot;210&quot; height=3D&quot;190&quot; values=3D&qu=
ot;choice&quot; title=3D&quot;title&quot; type=3D&quot;1&quot;/&gt;
+ * - choice est une liste de cha=C3=AEnes repr=C3=A9sentant les labels et le=
ur valeurs respectives. ({&quot;val1&quot;, &quot;20&quot;, &quot;val2&quot;,=
 &quot;10&quot;}...)
+ * - type est le type de repr=C3=A9sentation du diagramme (1:PIE, 2:PIE3D...)
+ * Pour g=C3=A9n=C3=A9raliser =C3=A0 d'autres types de graphes il faudrait p=
asser un JFreeChart :
+ * Persist Parameter(required=3Dtrue)
+ * private JFreeChart _chart;
+ * </pre>
+ *
+ * @author rannou
+ * @version $Id$
+ */
+public class Chart {
+
+//    /** diagramme de type PIE */
+//    public static final int PIE =3D 1;
+//    /** diagramme de type PIE3D */
+//    public static final int PIE3D =3D 2;
+//    /** diagramme de type RING */
+//    public static final int RING =3D 3;
+
+    /** titre du diagramme */
+    @Parameter
+    private String _title =3D "";
+
+    @Parameter(required =3D true)
+    private JFreeChart _chart;
+
+    /** type de repr=C3=A9sentation du diagramme */
+//    @Parameter(required =3D true)
+//    private int _type;
+
+    @Parameter(required =3D true)
+    private int _width;
+
+    @Parameter(required =3D true)
+    private int _height;
+
+    @Persist
+    private JFreeChart currentChart;
+
+    /**
+     * list(array) of paired values(label,value):
+     * [String,Number,String,Number,...]
+     */
+//    @Parameter(required =3D true)
+//    private List<Object> _values;
+
+    @Inject
+    private ComponentResources _resources;
+
+    void beginRender(MarkupWriter writer) {
+
+        // event link params
+        Object[] params =3D new Object[] { _title, _width, _height };
+//        params =3D ArrayUtil.concat(params, _values.toArray());
+
+        // generate event link
+        Link link =3D _resources.createEventLink("chart", params);
+        Element img =3D writer.element("img", "src", link);
+
+        _resources.renderInformalParameters(writer);
+    }
+
+    void afterRender(MarkupWriter writer) {
+        writer.end();
+    }
+
+    public StreamResponse onChart(final String title,
+            final int width, final int height) {
+//        DefaultKeyedValues values =3D new DefaultKeyedValues();
+//        for (int i =3D 4; i < rest.length; i +=3D 2) {
+//            values.addValue(rest[i].toString(), Double.valueOf(rest[i + 1]
+//                    .toString()));
+//        }
+//        values.sortByValues(SortOrder.DESCENDING);
+//        PieDataset data =3D new DefaultPieDataset(values);
+//
+//        // create the chart look according to the type
+//        PiePlot plot =3D null;
+//        switch (type) {
+//        case PIE:
+//            plot =3D new PiePlot(data);
+//            break;
+//        case PIE3D:
+//            plot =3D new PiePlot3D(data);
+//            break;
+//        case RING:
+//            plot =3D new RingPlot(data);
+//            break;
+//        default:
+//            plot =3D new PiePlot(data);
+//            break;
+//        }
+
+        //plot.setForegroundAlpha(0.7f);
+//        plot.setCircular(true);
+//        plot.setLabelGenerator(new StandardPieSectionLabelGenerator("{0} {=
2}"));
+//        plot.setLegendLabelGenerator(new StandardPieSectionLabelGenerator(
+//                "{0} =3D {1}"));
+//        plot.setNoDataMessage("No Data");
+//
+//        final JFreeChart chart =3D new JFreeChart(plot);
+//        chart.setTitle(new TextTitle(title, new Font(Font.SANS_SERIF,
+//                Font.BOLD, 12)));
+//        chart.setBackgroundPaint(new Color(255, 255, 255));
+
+        // return the image
+        return new StreamResponse() {
+            public String getContentType() {
+                return "image/png";
+            }
+
+            public InputStream getStream() throws IOException {
+                BufferedImage image =3D currentChart.createBufferedImage(wid=
th, height);
+                ByteArrayOutputStream byteArray =3D new ByteArrayOutputStrea=
m();
+                ChartUtilities.writeBufferedImageAsPNG(byteArray, image);
+                return new ByteArrayInputStream(byteArray.toByteArray());
+            }
+
+            public void prepareResponse(Response response) {
+            }
+        };
+    }
+}
\ No newline at end of file


Property changes on: trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsme=
r/ui/components/Chart.java
___________________________________________________________________
Added: svn:keywords
   + "Author Date Id Revision HeadURL"

Modified: trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/=
SamplingPlan.java
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/Sampli=
ngPlan.java	2010-01-07 11:15:49 UTC (rev 175)
+++ trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/Sampli=
ngPlan.java	2010-01-07 16:14:09 UTC (rev 176)
@@ -22,6 +22,7 @@
 package fr.ifremer.suiviobsmer.ui.pages;
=20
=20
+import fr.ifremer.suiviobsmer.SuiviObsmerBusinessException;
 import fr.ifremer.suiviobsmer.SuiviObsmerException;
 import fr.ifremer.suiviobsmer.entity.Company;
 import fr.ifremer.suiviobsmer.entity.FishingZone;
@@ -104,12 +105,12 @@
     private UploadedFile samplingPlanCsvFile;
=20
     @Log
-    void onSuccessFromImportSamplingPlan() {
+    void onSuccessFromImportSamplingPlan() throws SuiviObsmerException {
         try {
             int[] result =3D serviceSampling.importSamplingPlanCsv(samplingP=
lanCsvFile.getStream());
             layout.getFeedBack().addInfo(result[0] + " lignes du plan import=
=C3=A9s,  " +
                     result[1] + " refus=C3=A9s (voir documentation)");
-        } catch (SuiviObsmerException eee) {
+        } catch (SuiviObsmerBusinessException eee) {
             layout.getFeedBack().addError(eee.getMessage());
         }
     }
@@ -179,8 +180,7 @@
             if (!user.getAdmin()) {
                 company =3D user.getCompany();
             }
-            data =3D serviceSampling.getSampleRowsOrderedByFishingZone(
-                    getPeriod().getFromDate(), getPeriod().getThruDate(), co=
mpany);
+            data =3D serviceSampling.getSampleRowsOrderedByFishingZone(getPe=
riod(), company);
         }
         return data;
     }

Modified: trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/=
Synthesis.java
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/Synthe=
sis.java	2010-01-07 11:15:49 UTC (rev 175)
+++ trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/Synthe=
sis.java	2010-01-07 16:14:09 UTC (rev 176)
@@ -23,6 +23,7 @@
=20
 import fr.ifremer.suiviobsmer.ui.base.SuiviObsmerPage;
 import org.apache.tapestry5.annotations.IncludeStylesheet;
+import org.jfree.chart.JFreeChart;
=20
 /**
  * Synthesis
@@ -42,5 +43,10 @@
     public boolean isOnlyForAdmin() {
         return false;
     }
+
+    public JFreeChart getTestChart() {
        =20
+    }
+
+       =20
 }

Modified: trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/servic=
es/AppModule.java
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/services/App=
Module.java	2010-01-07 11:15:49 UTC (rev 175)
+++ trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/services/App=
Module.java	2010-01-07 16:14:09 UTC (rev 176)
@@ -19,6 +19,8 @@
=20
 package fr.ifremer.suiviobsmer.ui.services;
=20
+import fr.ifremer.suiviobsmer.SuiviObsmerModelDAOHelper;
+import fr.ifremer.suiviobsmer.entity.User;
 import fr.ifremer.suiviobsmer.mock.*;
 import fr.ifremer.suiviobsmer.services.*;
 import fr.ifremer.suiviobsmer.impl.*;
@@ -55,6 +57,8 @@
         binder.bind(ServiceBoat.class, ServiceBoatImpl.class);
         binder.bind(ServiceContact.class, ServiceContactImpl.class);
         binder.bind(ContactModelFactory.class);
+        binder.bind(SuiviObsmerModelDAOHelper.getContractClass(User.class),
+                SuiviObsmerModelDAOHelper.getImplementationClass(User.class)=
);
     }
=20
     public static void contributeApplicationDefaults(

Modified: trunk/suiviobsmer-ui/src/main/webapp/Synthesis.tml
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/suiviobsmer-ui/src/main/webapp/Synthesis.tml	2010-01-07 11:15:49 UT=
C (rev 175)
+++ trunk/suiviobsmer-ui/src/main/webapp/Synthesis.tml	2010-01-07 16:14:09 UT=
C (rev 176)
@@ -41,4 +41,6 @@
                 lectus nunc. Proin molestie molestie augue aliquet suscipit.=
 Sed id enim diam,
                 sed rutrum libero. </p>
         </div>
+
+    <t:chart t:width=3D"300" t:height=3D"250" t:chart=3D"testChart" />
 </t:layout>


--===============1798498289707512950==--


