[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
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/ServiceSynthesisImpl.java trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/components/Chart.java Modified: trunk/pom.xml trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/ImportHelper.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/entity/ProgramImplTest.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-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/SamplingPlan.java trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/Synthesis.java trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/services/AppModule.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 (PeriodDates) - The company is now considerated in SamplingPlan import - The elligibleBoat for a contact is automatically created from a contact import Modified: trunk/pom.xml =================================================================== --- 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> <!-- 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> <!-- default license to use --> Modified: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/ImportHelper.java =================================================================== --- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/ImportHelper.java 2010-01-07 11:15:49 UTC (rev 175) +++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/ImportHelper.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/impl/ServiceContactImpl.java =================================================================== --- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/ServiceContactImpl.java 2010-01-07 11:15:49 UTC (rev 175) +++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/ServiceContactImpl.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()] = observer.getLogin(); record[CONTACT.OBSERV_PRENOM.forContactCsv()] = observer.getFirstName(); record[CONTACT.OBSERV_NOM.forContactCsv()] = observer.getLastName(); - record[CONTACT.SOCIETE_NOM.forContactCsv()] = company.getName(); + record[SAMPLING.SOCIETE_NOM.forContactCsv()] = company.getName(); // SampleRow part SampleRow row = contact.getSampleRow(); @@ -394,36 +395,54 @@ } if (company != null) { - String rowCode = reader.get(SAMPLING.PLAN_CODE.name()); + String rowCode = reader.get(SAMPLING.PLAN_CODE.name().trim()); SampleRow row = rowDAO.findByProperties(SampleRow.CODE, rowCode, SampleRow.COMPANY, company); if (row != null) { - int boatImmatriculation = Integer.parseInt(reader.get(BOAT.NAVS_COD.name())); + int boatImmatriculation = Integer.parseInt(reader.get(BOAT.NAVS_COD.name().trim())); - // The boat must be elligible for the row - TopiaQuery<Boat> boatQuery = boatDAO.createQuery("B"). - addFrom(ElligibleBoat.class.getName() + " E"). - add("E.sampleRow", row).add("E.boat = B"). - add(Boat.IMMATRICULATION, boatImmatriculation); + Boat boat = boatDAO.findByImmatriculation(boatImmatriculation); - if (!user.getAdmin()) { - // Constraint on companyActive for elligibleBoat for a simple user - boatQuery.add("E.companyActive = :booleanTrue OR (E.companyActive IS NULL AND E.globalActive = :booleanTrue)"). - addParam("booleanTrue", Boolean.TRUE); - } + if (boat != null) { - Boat boat = boatQuery.executeToEntity(); + ElligibleBoatDAO elligibleDAO = SuiviObsmerModelDAOHelper.getElligibleBoatDAO(transaction); + ElligibleBoat elligible = elligibleDAO.findByProperties( + ElligibleBoat.BOAT, boat, ElligibleBoat.SAMPLE_ROW, row); - if (boat != null) { + if (elligible == null) { + // Create new elligible boat not active in a global way + elligible = elligibleDAO.create( + ElligibleBoat.BOAT, boat, ElligibleBoat.SAMPLE_ROW, row); + } + elligible.setCompanyActive(Boolean.TRUE); + // The boat must be elligible for the row +// TopiaQuery<Boat> boatQuery = boatDAO.createQuery("B"). +// addFrom(ElligibleBoat.class.getName() + " E"). +// add("E.sampleRow", row).add("E.boat = B"). +// add(Boat.IMMATRICULATION, boatImmatriculation); +// +// if (!user.getAdmin()) { +// // Constraint on companyActive for elligibleBoat for a simple user +// boatQuery.add("E.companyActive = :booleanTrue OR (E.companyActive IS NULL AND E.globalActive = :booleanTrue)"). +// addParam("booleanTrue", Boolean.TRUE); +// } +// +// Boat boat = boatQuery.executeToEntity(); +// +// if (boat == null) { +// ElligibleBoatDAO elligibleDAO = SuiviObsmerModelDAOHelper.getElligibleBoatDAO(transaction); +// +// } + Contact contact = null; // Check if createDate exist - String createDateString = reader.get(CONTACT.CONT_CREATION.name()); + String createDateString = reader.get(CONTACT.CONT_CREATION.name().trim()); //Date createDate = !StringUtils.isEmpty(createDateString) ? dateFormat.parse(createDateString) : null; - String contactCode = reader.get(CONTACT.CONT_CODE.name()); + String contactCode = reader.get(CONTACT.CONT_CODE.name().trim()); Date createDate = ImportHelper.parseContactCreateDate(contactCode, createDateString); if (log.isDebugEnabled()) { log.debug("Ligne " + currRow + " : Create date : " + createDate); @@ -440,25 +459,25 @@ } // new contact to import - if (contact == null) { + if (contact == null) { contact = dao.create( TopiaEntity.TOPIA_CREATE_DATE, createDate, Contact.USER, observer, Contact.SAMPLE_ROW, row, Contact.BOAT, boat); } - - String tideBeginString = reader.get(CONTACT.CONT_DEBUT_MAREE.name()); - String tideEndString = reader.get(CONTACT.CONT_FIN_MAREE.name()); - String nbObservantsString = reader.get(CONTACT.CONT_NB_OBSERV.name()); + String tideBeginString = reader.get(CONTACT.CONT_DEBUT_MAREE.name().trim()); + String tideEndString = reader.get(CONTACT.CONT_FIN_MAREE.name().trim()); + String nbObservantsString = reader.get(CONTACT.CONT_NB_OBSERV.name().trim()); + Date tideBegin = !StringUtils.isEmpty(tideBeginString) ? dateFormat.parse(tideBeginString) : null; Date tideEnd = !StringUtils.isEmpty(tideEndString) ? dateFormat.parse(tideEndString) : null; int nbObservants = !StringUtils.isEmpty(nbObservantsString) ? Integer.parseInt(nbObservantsString) : 0; boolean mammalsCapture = - ImportHelper.parseContactMammals(reader.get(CONTACT.CONT_MAM_CAPT.name())); + ImportHelper.parseContactMammals(reader.get(CONTACT.CONT_MAM_CAPT.name().trim())); boolean mammalsObsv = - ImportHelper.parseContactMammals(reader.get(CONTACT.CONT_MAM_OBS.name())); + ImportHelper.parseContactMammals(reader.get(CONTACT.CONT_MAM_OBS.name().trim())); contact.setState(state); contact.setTideBeginDate(tideBegin); @@ -471,8 +490,7 @@ } else if (log.isWarnEnabled()) { log.warn("Import contact ligne " + currRow + " : " + - "Navire inexistant ou incompatible avec la ligne d'échantillon " + - "pour l'immatriculation : " + boatImmatriculation); + "Navire inexistant avec l'immatriculation : " + boatImmatriculation); } } else if (log.isWarnEnabled()) { log.warn("Import contact ligne " + currRow + " : " + @@ -490,16 +508,6 @@ if (result % 1000 == 0) { transaction.commitTransaction(); tic = ImportHelper.logTimeAndMemory(log, tic, "contacts ligne " + currRow); -// if (log.isInfoEnabled()) { -// log.info("RUNNING... Import contacts ligne " + currRow); -// Runtime runtime = Runtime.getRuntime(); -// long mem = (runtime.totalMemory() - runtime.freeMemory()) / 1048576; -// //long memMega = mem / 1024 / 1024; -// log.info("Memory : " + mem + " Mo"); -// tic2 = System.currentTimeMillis(); -// log.info("Time : " + DurationFormatUtils.formatDurationHMS(tic2 - tic1)); -// tic1 = System.currentTimeMillis(); -// } } } Modified: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/ServiceSamplingImpl.java =================================================================== --- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/ServiceSamplingImpl.java 2010-01-07 11:15:49 UTC (rev 175) +++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/ServiceSamplingImpl.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; @@ -170,11 +173,11 @@ } @Override - public List<SampleRow> getSampleRowsOrderedByFishingZone(Date periodBegin, Date periodEnd, Company company) throws SuiviObsmerException { + public List<SampleRow> getSampleRowsOrderedByFishingZone(PeriodDates period, Company company) throws SuiviObsmerException { TopiaContext transaction = null; List<SampleRow> results = new ArrayList<SampleRow>(); try { - if (periodBegin == null || periodEnd == null) { + if (period.getFromDate() == null || period.getThruDate() == null) { throw new IllegalArgumentException("PeriodBegin date and/or PeriodEnd date can't be null !"); } transaction = rootContext.beginTransaction(); @@ -189,9 +192,9 @@ } // Prepare period dates - periodBegin = DateUtils.setFirstDayOfMonth(periodBegin); - periodEnd = DateUtils.setLastDayOfMonth(periodEnd); - query.add("S.program.periodBegin", Op.LT, periodEnd).add("S.program.periodEnd", Op.GT, periodBegin); + period.setDayOfMonthExtremities(); + query.add("S.program.periodBegin", Op.LT, period.getThruDate()). + add("S.program.periodEnd", Op.GT, period.getFromDate()); // Order By facade, sector, districtCode, sampleRowCode String zoneOrder = "F.facadeName, F.sectorName, F.districtCode"; @@ -369,7 +372,7 @@ int[] programBegin = getMonthAndYear(reader.get(SAMPLING.PROGRAMME_DEBUT.name()).trim()); int[] programEnd = getMonthAndYear(reader.get(SAMPLING.PROGRAMME_FIN.name()).trim()); String districts = reader.get(FISHING_ZONE.PECHE_DIVISION.name()); - + row = dao.findByCode(code); // Refuse existing SampleRow if (row != null) { @@ -380,8 +383,8 @@ nbRefused++; // Refuse Fishing zones empty } else if (StringUtils.isEmpty(programName)) { - throw new SuiviObsmerException( - "Erreur à la ligne " + currRow + " [CODE = " + row.getCode() + "] : " + + throw new SuiviObsmerBusinessException(Type.IMPORT_ERROR, this.getClass(), + "Erreur à la ligne " + currRow + " [CODE = " + code + "] : " + "Cette ligne n'est lié à aucun programme !"); //nbRefused++; } else if (StringUtils.isEmpty(districts)) { @@ -393,6 +396,20 @@ } else { row = dao.create(SampleRow.CODE, code); + String companyName = reader.get(SAMPLING.SOCIETE_NOM.name()).trim(); + + // Create link with company if set in file + if (!StringUtils.isEmpty(companyName)) { + CompanyDAO companyDAO = SuiviObsmerModelDAOHelper.getCompanyDAO(transaction); + Company company = companyDAO.findByName(companyName); + if (company == null) { + throw new SuiviObsmerBusinessException(Type.IMPORT_ERROR, this.getClass(), + "Erreur à la ligne " + currRow + " [CODE = " + code + "] : " + + "La société portant le nom '" + companyName + "' n'existe pas dans l'application"); + } + row.setCompany(company); + } + // Import program. Creation if not exist Program program = importProgram(transaction, programName, programBegin, programEnd); row.setProgram(program); @@ -530,7 +547,7 @@ for (String districtCode : districtList) { FishingZone zone = dao.findByDistrictCode(districtCode.trim()); if (zone == null) { - throw new SuiviObsmerException( + throw new SuiviObsmerBusinessException(Type.IMPORT_ERROR, this.getClass(), "Erreur à la ligne " + currRow + " [CODE = " + row.getCode() + "] : " + "Cette ligne est lié à une zone inexistante : " + districtCode); } Added: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/ServiceSynthesisImpl.java =================================================================== --- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/ServiceSynthesisImpl.java (rev 0) +++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/ServiceSynthesisImpl.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) throws SuiviObsmerException { + throw new UnsupportedOperationException("Not supported yet."); + } + +} Property changes on: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/ServiceSynthesisImpl.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL" 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 2010-01-07 11:15:49 UTC (rev 175) +++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/mock/ServiceSamplingMock.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; @@ -57,7 +58,7 @@ private static final Logger log = LoggerFactory.getLogger(ServiceSamplingMock.class); @Override - public List<SampleRow> getSampleRowsOrderedByFishingZone(Date periodBegin, Date periodEnd, Company company) throws SuiviObsmerException { + public List<SampleRow> getSampleRowsOrderedByFishingZone(PeriodDates period, Company company) throws SuiviObsmerException { return new ArrayList<SampleRow>(); } Modified: trunk/suiviobsmer-business/src/main/xmi/suiviobsmer.zargo =================================================================== (Binary files differ) Modified: trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/entity/ProgramImplTest.java =================================================================== --- trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/entity/ProgramImplTest.java 2010-01-07 11:15:49 UTC (rev 175) +++ trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/entity/ProgramImplTest.java 2010-01-07 16:14:09 UTC (rev 176) @@ -180,6 +180,9 @@ FishingZone zoneIId = zoneDAO.create(FishingZone.DISTRICT_CODE, "IId"); FishingZone zoneIV = zoneDAO.create(FishingZone.DISTRICT_CODE, "IV"); FishingZone zoneI = zoneDAO.create(FishingZone.DISTRICT_CODE, "I"); + + CompanyDAO companyDAO = SuiviObsmerModelDAOHelper.getCompanyDAO(transaction); + companyDAO.create(Company.NAME, "TARTANPION"); transaction.commitTransaction(); ServiceSampling serviceSampling = new ServiceSamplingImpl(); 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 2010-01-07 11:15:49 UTC (rev 175) +++ trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/impl/ServiceBoatImplTest.java 2010-01-07 16:14:09 UTC (rev 176) @@ -209,18 +209,17 @@ InputStream input = getClass().getResourceAsStream("/import/zonesPeche.csv"); serviceReferential.importFishingZoneCsv(input); - ServiceSampling serviceSampling = new ServiceSamplingImpl(); - input = getClass().getResourceAsStream("/import/echantillonnage.csv"); - serviceSampling.importSamplingPlanCsv(input); - - // Import doesn't set company TopiaContext transaction = SuiviObsmerContext.getTopiaRootContext().beginTransaction(); - // Create a company CompanyDAO companyDAO = SuiviObsmerModelDAOHelper.getCompanyDAO(transaction); SuiviObsmerContext.prepareTopiaId(Company.class, company); companyDAO.update(company); + transaction.commitTransaction(); + ServiceSampling serviceSampling = new ServiceSamplingImpl(); + input = getClass().getResourceAsStream("/import/echantillonnage.csv"); + serviceSampling.importSamplingPlanCsv(input); + // Get two SampleRows : 2009_3 & 2010_4 SampleRowDAO rowDAO = SuiviObsmerModelDAOHelper.getSampleRowDAO(transaction); SampleRow row1 = rowDAO.findByCode("2009_03"); Modified: trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/impl/ServiceSamplingImplTest.java =================================================================== --- trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/impl/ServiceSamplingImplTest.java 2010-01-07 11:15:49 UTC (rev 175) +++ trunk/suiviobsmer-business/src/test/java/fr/ifremer/suiviobsmer/impl/ServiceSamplingImplTest.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 (= null) Calendar begin = new GregorianCalendar(2000, 0, 1, 0, 0, 0); Calendar end = new GregorianCalendar(2020, 11, 31, 0, 0, 0); - List<SampleRow> rows = service.getSampleRowsOrderedByFishingZone(begin.getTime(), end.getTime(), null); + PeriodDates period = new PeriodDates(begin, end); + List<SampleRow> rows = service.getSampleRowsOrderedByFishingZone(period, null); assertEquals(4, rows.size()); SampleRow resultRow0 = rows.get(0); assertEquals("2010_02", resultRow0.getCode()); @@ -264,7 +266,8 @@ // NO COMPANY (= null) begin = new GregorianCalendar(2009, 0, 1, 0, 0, 0); end = new GregorianCalendar(2020, 11, 31, 0, 0, 0); - rows = service.getSampleRowsOrderedByFishingZone(begin.getTime(), end.getTime(), null); + period = new PeriodDates(begin, end); + rows = service.getSampleRowsOrderedByFishingZone(period, null); assertEquals(3, rows.size()); resultRow0 = rows.get(0); assertEquals("2010_02", resultRow0.getCode()); @@ -401,7 +404,9 @@ FishingZone zoneIId = zoneDAO.create(FishingZone.DISTRICT_CODE, "IId"); FishingZone zoneIV = zoneDAO.create(FishingZone.DISTRICT_CODE, "IV"); FishingZone zoneI = zoneDAO.create(FishingZone.DISTRICT_CODE, "I"); - + + CompanyDAO companyDAO = SuiviObsmerModelDAOHelper.getCompanyDAO(transaction); + companyDAO.create(Company.NAME, "TARTANPION"); transaction.commitTransaction(); @@ -446,7 +451,9 @@ FishingZone zoneIId = zoneDAO.create(FishingZone.DISTRICT_CODE, "IId"); FishingZone zoneIV = zoneDAO.create(FishingZone.DISTRICT_CODE, "IV"); FishingZone zoneI = zoneDAO.create(FishingZone.DISTRICT_CODE, "I"); - + + CompanyDAO companyDAO = SuiviObsmerModelDAOHelper.getCompanyDAO(transaction); + companyDAO.create(Company.NAME, "TARTANPION"); transaction.commitTransaction(); transaction.closeContext(); Added: trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/components/Chart.java =================================================================== --- trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/components/Chart.java (rev 0) +++ trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/components/Chart.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 : + * <t:chart width="210" height="190" values="choice" title="title" type="1"/> + * - choice est une liste de chaînes représentant les labels et leur valeurs respectives. ({"val1", "20", "val2", "10"}...) + * - type est le type de représentation du diagramme (1:PIE, 2:PIE3D...) + * Pour généraliser à d'autres types de graphes il faudrait passer un JFreeChart : + * Persist Parameter(required=true) + * private JFreeChart _chart; + * </pre> + * + * @author rannou + * @version $Id$ + */ +public class Chart { + +// /** diagramme de type PIE */ +// public static final int PIE = 1; +// /** diagramme de type PIE3D */ +// public static final int PIE3D = 2; +// /** diagramme de type RING */ +// public static final int RING = 3; + + /** titre du diagramme */ + @Parameter + private String _title = ""; + + @Parameter(required = true) + private JFreeChart _chart; + + /** type de représentation du diagramme */ +// @Parameter(required = true) +// private int _type; + + @Parameter(required = true) + private int _width; + + @Parameter(required = true) + private int _height; + + @Persist + private JFreeChart currentChart; + + /** + * list(array) of paired values(label,value): + * [String,Number,String,Number,...] + */ +// @Parameter(required = true) +// private List<Object> _values; + + @Inject + private ComponentResources _resources; + + void beginRender(MarkupWriter writer) { + + // event link params + Object[] params = new Object[] { _title, _width, _height }; +// params = ArrayUtil.concat(params, _values.toArray()); + + // generate event link + Link link = _resources.createEventLink("chart", params); + Element img = 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 = new DefaultKeyedValues(); +// for (int i = 4; i < rest.length; i += 2) { +// values.addValue(rest[i].toString(), Double.valueOf(rest[i + 1] +// .toString())); +// } +// values.sortByValues(SortOrder.DESCENDING); +// PieDataset data = new DefaultPieDataset(values); +// +// // create the chart look according to the type +// PiePlot plot = null; +// switch (type) { +// case PIE: +// plot = new PiePlot(data); +// break; +// case PIE3D: +// plot = new PiePlot3D(data); +// break; +// case RING: +// plot = new RingPlot(data); +// break; +// default: +// plot = new PiePlot(data); +// break; +// } + + //plot.setForegroundAlpha(0.7f); +// plot.setCircular(true); +// plot.setLabelGenerator(new StandardPieSectionLabelGenerator("{0} {2}")); +// plot.setLegendLabelGenerator(new StandardPieSectionLabelGenerator( +// "{0} = {1}")); +// plot.setNoDataMessage("No Data"); +// +// final JFreeChart chart = 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 = currentChart.createBufferedImage(width, height); + ByteArrayOutputStream byteArray = new ByteArrayOutputStream(); + 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/suiviobsmer/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 =================================================================== --- trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/SamplingPlan.java 2010-01-07 11:15:49 UTC (rev 175) +++ trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/SamplingPlan.java 2010-01-07 16:14:09 UTC (rev 176) @@ -22,6 +22,7 @@ package fr.ifremer.suiviobsmer.ui.pages; +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; @Log - void onSuccessFromImportSamplingPlan() { + void onSuccessFromImportSamplingPlan() throws SuiviObsmerException { try { int[] result = serviceSampling.importSamplingPlanCsv(samplingPlanCsvFile.getStream()); layout.getFeedBack().addInfo(result[0] + " lignes du plan importés, " + result[1] + " refusés (voir documentation)"); - } catch (SuiviObsmerException eee) { + } catch (SuiviObsmerBusinessException eee) { layout.getFeedBack().addError(eee.getMessage()); } } @@ -179,8 +180,7 @@ if (!user.getAdmin()) { company = user.getCompany(); } - data = serviceSampling.getSampleRowsOrderedByFishingZone( - getPeriod().getFromDate(), getPeriod().getThruDate(), company); + data = serviceSampling.getSampleRowsOrderedByFishingZone(getPeriod(), company); } return data; } Modified: trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/Synthesis.java =================================================================== --- trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/Synthesis.java 2010-01-07 11:15:49 UTC (rev 175) +++ trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/Synthesis.java 2010-01-07 16:14:09 UTC (rev 176) @@ -23,6 +23,7 @@ import fr.ifremer.suiviobsmer.ui.base.SuiviObsmerPage; import org.apache.tapestry5.annotations.IncludeStylesheet; +import org.jfree.chart.JFreeChart; /** * Synthesis @@ -42,5 +43,10 @@ public boolean isOnlyForAdmin() { return false; } + + public JFreeChart getTestChart() { + } + + } Modified: trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/services/AppModule.java =================================================================== --- trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/services/AppModule.java 2010-01-07 11:15:49 UTC (rev 175) +++ trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/services/AppModule.java 2010-01-07 16:14:09 UTC (rev 176) @@ -19,6 +19,8 @@ package fr.ifremer.suiviobsmer.ui.services; +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)); } public static void contributeApplicationDefaults( Modified: trunk/suiviobsmer-ui/src/main/webapp/Synthesis.tml =================================================================== --- trunk/suiviobsmer-ui/src/main/webapp/Synthesis.tml 2010-01-07 11:15:49 UTC (rev 175) +++ trunk/suiviobsmer-ui/src/main/webapp/Synthesis.tml 2010-01-07 16:14:09 UTC (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="300" t:height="250" t:chart="testChart" /> </t:layout>
participants (1)
-
fdesbois@users.labs.libre-entreprise.org