[Suiviobsmer-commits] r757 - in trunk: src/site/rst wao-business/src/main/java/fr/ifremer/wao wao-business/src/main/java/fr/ifremer/wao/entity wao-business/src/main/java/fr/ifremer/wao/service wao-business/src/main/resources/i18n wao-business/src/main/xmi wao-business/src/test/java/fr/ifremer/wao wao-ui/src/main/java/fr/ifremer/wao/ui/base wao-ui/src/main/java/fr/ifremer/wao/ui/pages wao-ui/src/main/webapp
Author: bleny Date: 2010-11-10 17:06:24 +0000 (Wed, 10 Nov 2010) New Revision: 757 Log: migrate Profession#codeDCF5 to its own entity (DB migration), added filter in sampling plan Added: trunk/wao-business/src/main/java/fr/ifremer/wao/entity/DCFFiveCodeImpl.java trunk/wao-business/src/test/java/fr/ifremer/wao/WaoMigrationCallBackTest.java Modified: trunk/src/site/rst/business-rules.rst trunk/wao-business/src/main/java/fr/ifremer/wao/PostgresMigrationCallback.java trunk/wao-business/src/main/java/fr/ifremer/wao/WaoMigrationCallBack.java trunk/wao-business/src/main/java/fr/ifremer/wao/WaoQueryBuilder.java trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceSamplingImpl.java trunk/wao-business/src/main/resources/i18n/wao-business-en_GB.properties trunk/wao-business/src/main/resources/i18n/wao-business-fr_FR.properties trunk/wao-business/src/main/xmi/wao.properties trunk/wao-business/src/main/xmi/wao.zargo trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/base/AbstractFilteredPage.java trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/SamplingPlan.java trunk/wao-ui/src/main/webapp/SamplingPlan.tml Modified: trunk/src/site/rst/business-rules.rst =================================================================== --- trunk/src/site/rst/business-rules.rst 2010-11-10 09:25:14 UTC (rev 756) +++ trunk/src/site/rst/business-rules.rst 2010-11-10 17:06:24 UTC (rev 757) @@ -1,3 +1,4 @@ +===================================================== Documentation des règles métiers de l'application WAO ===================================================== @@ -26,7 +27,7 @@ .. - Ligne du plan d'échantillonnage (ADMIN) ---------------------------------------- +======================================= Pré-requis : Import des zones de pêche @@ -58,7 +59,7 @@ - Unicité : code de la ligne Navires (OBSERVER/USER) ------------------------ +======================= - Filtres : @@ -73,7 +74,7 @@ - Unicité : immatriculation du navire Contact (OBSERVER/USER) ------------------------ +======================= Pré-requis : La création n'est possible que sur un navire elligible lié à une ligne du plan @@ -133,8 +134,20 @@ - Unicité : code de la ligne du plan + immatriculation du navire + société + date de création (avec temps) +Indicateurs +=========== + +Principe +-------- + +Indicateur 1 +------------ + +Bilan +----- + Administration --------------- +============== - Accessible par un administrateur ou un coordinateur - Le coordinateur ne peut modifier que les composantes de sa société (tel, adresse, observateurs, ...) @@ -142,4 +155,3 @@ - Aucune création d'utilisateur possible pour une société inactive - Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/PostgresMigrationCallback.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/PostgresMigrationCallback.java 2010-11-10 09:25:14 UTC (rev 756) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/PostgresMigrationCallback.java 2010-11-10 17:06:24 UTC (rev 757) @@ -26,6 +26,7 @@ import fr.ifremer.wao.bean.ContactState; import fr.ifremer.wao.bean.SynthesisId; +import fr.ifremer.wao.entity.DCFFiveCode; import org.hibernate.SQLQuery; import org.nuiton.topia.TopiaException; import org.nuiton.topia.framework.TopiaContextImplementor; @@ -439,4 +440,74 @@ protected void addDataReliability_1_6(List<String> queries) { queries.add("ALTER TABLE Contact ADD dataReliabilityOrdinal SMALLINT NOT NULL DEFAULT 0;"); } + + @Override + protected void createTablesForDCF5Code_1_6(List<String> queries) { + // create table IndicatorLog with author FK + queries.add("CREATE TABLE DCFFiveCode (" + + "topiaId CHARACTER VARYING(255) PRIMARY KEY," + + "topiaVersion BIGINT NOT NULL," + + "topiaCreateDate TIMESTAMP WITHOUT TIME ZONE NOT NULL," + + "fishingGearDCF CHARACTER VARYING(10) NOT NULL," + + "targetSpeciesDCF CHARACTER VARYING(10)," + + "UNIQUE (fishingGearDCF, targetSpeciesDCF));"); + + // *..* relation need an intermediate table + queries.add("CREATE TABLE dcf5code_profession (" + + "dcf5code character varying(255) NOT NULL," + + "Profession character varying(255) NOT NULL," + + "CONSTRAINT profession_fkey FOREIGN KEY (profession) " + + "REFERENCES Profession (topiaid) MATCH SIMPLE " + + "ON UPDATE NO ACTION ON DELETE NO ACTION," + + "CONSTRAINT dcffivecode_fkey FOREIGN KEY (dcf5code) " + + "REFERENCES DCFFiveCode (topiaid) MATCH SIMPLE " + + "ON UPDATE NO ACTION ON DELETE NO ACTION);"); + } + + /** get Data to migrate. key is the topiaId of the profession (to be + * used as a foreign key) and value is the value of the field to split) + */ + protected Map<String, String> getCodeDCF5ForMigration_1_6(TopiaContextImplementor tx) throws TopiaException { + + final Map<String, String> result = new HashMap<String, String>(); + + SQLQuery query = tx.getHibernate(). + createSQLQuery("SELECT topiaid, codedcf5 FROM Profession;"); + + List<Object[]> results = query.list(); + + for (Object[] row : results) { + String topiaId = (String) row[0]; + String code = (String) row[1]; + + result.put(topiaId, code); + } + + return result; + } + + @Override + protected void insertDCFFiveCode_1_6(String codeTopiaId, DCFFiveCode code, List<String> queries) { + int topiaVersion = 0; + String topiaCreateDateValue = "DATE '2010-11-09'"; + + String sql = String.format("INSERT INTO DCFFiveCode (topiaId, topiaVersion, topiaCreateDate, fishingGearDCF, targetSpeciesDCF) " + + "VALUES ('%s', %s, %s, '%s', %s);", + codeTopiaId, + topiaVersion, + topiaCreateDateValue, + code.getFishingGearDCF(), + code.getTargetSpeciesDCF() == null ? "NULL" : "'" + code.getTargetSpeciesDCF() + "'"); + queries.add(sql); + } + + @Override + protected void insertSplitCodes_1_6(String professionTopiaId, + String codeTopiaId, + List<String> queries) { + String sql = String.format("INSERT INTO dcf5code_profession (Profession, dcf5code) " + + "VALUES ('%s', '%s');", + professionTopiaId, codeTopiaId); + queries.add(sql); + } } Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/WaoMigrationCallBack.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/WaoMigrationCallBack.java 2010-11-10 09:25:14 UTC (rev 756) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/WaoMigrationCallBack.java 2010-11-10 17:06:24 UTC (rev 757) @@ -24,6 +24,8 @@ package fr.ifremer.wao; +import fr.ifremer.wao.entity.DCFFiveCode; +import fr.ifremer.wao.entity.DCFFiveCodeImpl; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.topia.TopiaException; @@ -33,8 +35,10 @@ import org.nuiton.util.VersionUtil; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Set; /** * @@ -84,6 +88,14 @@ protected abstract void addDataReliability_1_6(List<String> queries); + protected abstract void createTablesForDCF5Code_1_6(List<String> queries); + + protected abstract Map<String, String> getCodeDCF5ForMigration_1_6(TopiaContextImplementor tx) throws TopiaException; + + protected abstract void insertDCFFiveCode_1_6(String codeTopiaId, DCFFiveCode code, List<String> queries); + + protected abstract void insertSplitCodes_1_6(String professionTopiaId, String codeTopiaId, List<String> queries); + protected static final Version[] VERSIONS = new Version[] { VersionUtil.valueOf("1.0"), VersionUtil.valueOf("1.1"), @@ -242,6 +254,31 @@ addDataReliability_1_6(queries); + createTablesForDCF5Code_1_6(queries); + + Map<String, String> codesDCF5ForMigration = getCodeDCF5ForMigration_1_6(tx); + + Set<String> insertedDCFFiveCode = new HashSet<String>(); + + for (Map.Entry<String, String> codeToMigrate : codesDCF5ForMigration.entrySet()) { + // split the code String in multiple codes + List<DCFFiveCode> codes = splitCodeDCF5_1_6(codeToMigrate.getValue()); + + // first, do the insert if needed + for (DCFFiveCode code : codes) { + String codeTopiaId = "fr.ifremer.wao.entities.DCFFiveCode#1289320029000#798260963" + + code.getFishingGearDCF() + code.getTargetSpeciesDCF(); + if ( ! insertedDCFFiveCode.contains(codeTopiaId)) { + insertDCFFiveCode_1_6(codeTopiaId, code, queries); + insertedDCFFiveCode.add(codeTopiaId); + } + + insertSplitCodes_1_6(codeToMigrate.getKey(), codeTopiaId, queries); + } + } + + // remove obsolete column ? + if (log.isDebugEnabled()) { log.debug("queries for migration to version 1.6 are \n" + queries); } @@ -250,4 +287,29 @@ executeSQL(tx, true, true, strings); } + /** given "XXX_YYY et ZZZ_", will split with " et " and with "_" to extract + * some DCFFiveCode entities + */ + protected List<DCFFiveCode> splitCodeDCF5_1_6(String dcf5Code) { + + String codes[] = dcf5Code.split(" et "); + List<DCFFiveCode> result = new ArrayList<DCFFiveCode>(); + + for (String code : codes) { + String codeParts[] = code.split("_"); + DCFFiveCode dcfFiveCode = new DCFFiveCodeImpl(); + dcfFiveCode.setFishingGearDCF(codeParts[0]); + if (codeParts.length == 2 && ! codeParts[1].isEmpty()) { + dcfFiveCode.setTargetSpeciesDCF(codeParts[1]); + } + result.add(dcfFiveCode); + } + + if (log.isInfoEnabled()) { + log.info(String.format("line %s will be migrated to", + dcf5Code, result)); + } + return result; + } + } Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/WaoQueryBuilder.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/WaoQueryBuilder.java 2010-11-10 09:25:14 UTC (rev 756) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/WaoQueryBuilder.java 2010-11-10 17:06:24 UTC (rev 757) @@ -337,6 +337,11 @@ calendar.add(Calendar.MONTH, nbMonthsFinishedFromToday); query.addWhere(sampleRowProperty.periodEnd(), TopiaQuery.Op.GE, calendar.getTime()); } + + if (filter.getFishingGearDCF() != null) { + query.addEquals(WaoQueryHelper.newDCFFiveCodeProperty().fishingGearDCF(), + filter.getFishingGearDCF()); + } if(logger.isDebugEnabled()) { logger.debug("sampling filter query " + query); Added: trunk/wao-business/src/main/java/fr/ifremer/wao/entity/DCFFiveCodeImpl.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/entity/DCFFiveCodeImpl.java (rev 0) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/entity/DCFFiveCodeImpl.java 2010-11-10 17:06:24 UTC (rev 757) @@ -0,0 +1,13 @@ +package fr.ifremer.wao.entity; + +public class DCFFiveCodeImpl extends DCFFiveCodeAbstract { + + @Override + public String toString() { + String toString = getFishingGearDCF(); + if (getTargetSpeciesDCF() != null) { + toString += "_" + getTargetSpeciesDCF(); + } + return toString; + } +} Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceSamplingImpl.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceSamplingImpl.java 2010-11-10 09:25:14 UTC (rev 756) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceSamplingImpl.java 2010-11-10 17:06:24 UTC (rev 757) @@ -45,6 +45,7 @@ import fr.ifremer.wao.entity.CompanyDAO; import fr.ifremer.wao.entity.Contact; import fr.ifremer.wao.entity.ContactDAO; +import fr.ifremer.wao.entity.DCFFiveCode; import fr.ifremer.wao.entity.ElligibleBoat; import fr.ifremer.wao.entity.ElligibleBoatDAO; import fr.ifremer.wao.entity.FishingZone; @@ -94,8 +95,10 @@ import java.util.Date; import java.util.GregorianCalendar; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Set; /** * ServiceSamplingImpl @@ -399,11 +402,22 @@ fishingZoneProperty.districtCode(), sampleRowProperty.code()); + // Need fishingZone properties in Select to use them in orderBy // addSelect(queryBuilder.getFacadeNameProperty(), // queryBuilder.getSectorNameProperty(), // queryBuilder.getFishingZoneDistrictProperty()); + WaoQueryHelper.DCFFiveCodeProperty dcf5CodeProperty = WaoQueryHelper.newDCFFiveCodeProperty(); + query.addLeftJoin(sampleRowProperty.professionProperty().dcf5code(), + dcf5CodeProperty.$alias(), false); + + query.setSelect(sampleRowProperty.$alias(), + fishingZoneProperty.facadeName(), + fishingZoneProperty.sectorName(), + fishingZoneProperty.districtCode()); + query.addDistinct(); + if (log.isDebugEnabled()) { log.debug("Query : " + query); } @@ -415,6 +429,12 @@ for (SampleRow row : results) { // use FacadeRow to complete ordering using maps result.addRow(row); + + // XXX bleny 20101110 browse code to force load it from BD + // "lazy" directive doesn't seem to work + for (DCFFiveCode code : row.getProfession().getDcf5code()) { + log.debug("row " + row.getCode() + " has DCF5 code " + code.toString()); + } } return result; } @@ -1065,4 +1085,13 @@ } } + @Override + protected Set<String> executeGetDCFGears(TopiaContext transaction, SamplingFilter filter) throws Exception { + TopiaQuery query = WaoDAOHelper.getDCFFiveCodeDAO(transaction).createQuery(); + query.setSelect(DCFFiveCode.FISHING_GEAR_DCF); + query.addDistinct(); + List<String> dcfGears = transaction.findByQuery(query); + Set<String> result = new HashSet<String>(dcfGears); + return result; + } } Modified: trunk/wao-business/src/main/resources/i18n/wao-business-en_GB.properties =================================================================== --- trunk/wao-business/src/main/resources/i18n/wao-business-en_GB.properties 2010-11-10 09:25:14 UTC (rev 756) +++ trunk/wao-business/src/main/resources/i18n/wao-business-en_GB.properties 2010-11-10 17:06:24 UTC (rev 757) @@ -67,6 +67,7 @@ wao.error.serviceSampling.createUpdateSampleRow= wao.error.serviceSampling.deleteSampleRow= wao.error.serviceSampling.exportSamplingPlanCsv= +wao.error.serviceSampling.getDCFGears= wao.error.serviceSampling.getNewProfession= wao.error.serviceSampling.getNewSampleMonth= wao.error.serviceSampling.getNewSampleRow= Modified: trunk/wao-business/src/main/resources/i18n/wao-business-fr_FR.properties =================================================================== --- trunk/wao-business/src/main/resources/i18n/wao-business-fr_FR.properties 2010-11-10 09:25:14 UTC (rev 756) +++ trunk/wao-business/src/main/resources/i18n/wao-business-fr_FR.properties 2010-11-10 17:06:24 UTC (rev 757) @@ -66,6 +66,7 @@ wao.error.serviceSampling.createUpdateSampleRow=Impossible de sauvegarder la ligne d'\u00E9chantillon wao.error.serviceSampling.deleteSampleRow=Impossible de supprimer la ligne d'\u00E9chantillon \: %1$s wao.error.serviceSampling.exportSamplingPlanCsv=Impossible d'exporter le plan d'\u00E9chantillonnage sur la p\u00E9riode du %1$s au %2$s +wao.error.serviceSampling.getDCFGears= wao.error.serviceSampling.getNewProfession= wao.error.serviceSampling.getNewSampleMonth= wao.error.serviceSampling.getNewSampleRow= Modified: trunk/wao-business/src/main/xmi/wao.properties =================================================================== --- trunk/wao-business/src/main/xmi/wao.properties 2010-11-10 09:25:14 UTC (rev 756) +++ trunk/wao-business/src/main/xmi/wao.properties 2010-11-10 17:06:24 UTC (rev 757) @@ -12,8 +12,9 @@ fr.ifremer.wao.entity.SampleRow.attribute.sampleMonth.tagvalue.orderBy=periodDate fr.ifremer.wao.entity.SampleRow.attribute.fishingZone.tagvalue.lazy=false fr.ifremer.wao.entity.SampleRow.attribute.fishingZone.tagvalue.orderBy=facadeName,sectorName,districtCode +fr.ifremer.wao.entity.SampleRow.attribute.company.tagvalue.lazy=false fr.ifremer.wao.entity.SampleRow.attribute.profession.tagvalue.lazy=false -fr.ifremer.wao.entity.SampleRow.attribute.company.tagvalue.lazy=false +fr.ifremer.wao.entity.Profession.attribute.dcf5Code.tagvalue.lazy=false #fr.ifremer.wao.entity.SampleRow.attribute.elligibleBoat.tagvalue.lazy=false fr.ifremer.wao.entity.SampleRow.attribute.elligibleBoat.tagvalue.orderBy=companyActive #fr.ifremer.wao.entity.SampleRow.attribute.sampleRowLog.tagvalue.lazy=false @@ -34,3 +35,4 @@ fr.ifremer.wao.entity.Indicator.attribute.indicatorLevel.tagvalue.lazy=false fr.ifremer.wao.entity.IndicatorLog.attribute.author.tagvalue.lazy=false +fr.ifremer.wao.entity.Indicator.attribute.indicatorLevel.tagvalue.orderBy=level Modified: trunk/wao-business/src/main/xmi/wao.zargo =================================================================== (Binary files differ) Added: trunk/wao-business/src/test/java/fr/ifremer/wao/WaoMigrationCallBackTest.java =================================================================== --- trunk/wao-business/src/test/java/fr/ifremer/wao/WaoMigrationCallBackTest.java (rev 0) +++ trunk/wao-business/src/test/java/fr/ifremer/wao/WaoMigrationCallBackTest.java 2010-11-10 17:06:24 UTC (rev 757) @@ -0,0 +1,153 @@ +package fr.ifremer.wao; + +import fr.ifremer.wao.entity.DCFFiveCode; +import org.junit.Test; +import org.nuiton.topia.TopiaException; +import org.nuiton.topia.framework.TopiaContextImplementor; + +import java.util.List; +import java.util.Map; + +import static junit.framework.Assert.assertEquals; +import static junit.framework.Assert.assertNull; + +public class WaoMigrationCallBackTest { + + /** A dummy implementation of WaoMigrationCallBack to make it instanciable. */ + public class ConcreteWaoMigrationCallBack extends WaoMigrationCallBack { + @Override + protected void createUserRoleColumn_1_1a(List<String> queries) { + throw new UnsupportedOperationException(); + } + + @Override + protected void changeContactStateColumn_1_1b(List<String> queries) { + throw new UnsupportedOperationException(); + } + + @Override + protected void changeSampleRowLogAdminColumn_1_1c(List<String> queries) { + throw new UnsupportedOperationException(); + } + + @Override + protected void createBoatInfosNewColumns_1_2a(List<String> queries) { + throw new UnsupportedOperationException(); + } + + @Override + protected void createSampleMonthEstimatedTidesColumn_1_2b(List<String> queries) { + throw new UnsupportedOperationException(); + } + + @Override + protected void updateWaoUserRoleColumns_1_3a(List<String> queries) { + throw new UnsupportedOperationException(); + } + + @Override + protected void createSampleRowLogFromAdminColumn_1_3b(List<String> queries) { + throw new UnsupportedOperationException(); + } + + @Override + protected void createNewsCompanyColumn_1_4a(List<String> queries) { + throw new UnsupportedOperationException(); + } + + @Override + protected void createContactCommentColumns_1_4b(List<String> queries) { + throw new UnsupportedOperationException(); + } + + @Override + protected Map<String, List<String>> retrieveBoatDistrictCodes_1_5a(TopiaContextImplementor tx) throws TopiaException { + throw new UnsupportedOperationException(); + } + + @Override + protected void createBoatDistrictTable_1_5b(List<String> queries) { + throw new UnsupportedOperationException(); + } + + @Override + protected Map<String, String> insertBoatDistricts_1_5c(List<String> queries, Map<String, List<String>> boatDistrictCodes) { + throw new UnsupportedOperationException(); + } + + @Override + protected void updateBoatWithBoatDistrict_1_5d(List<String> queries, Map<String, String> boats) { + throw new UnsupportedOperationException(); + } + + @Override + protected void createContactEmailSentColumn_1_5e(List<String> queries) { + throw new UnsupportedOperationException(); + } + + @Override + protected void createTablesForIndicatorsAdministration_1_6(List<String> queries) { + throw new UnsupportedOperationException(); + } + + @Override + protected void insertIndicatorLevelInitialValues_1_6(List<String> queries) { + throw new UnsupportedOperationException(); + } + + @Override + protected void addDataReliability_1_6(List<String> queries) { + throw new UnsupportedOperationException(); + } + + @Override + protected void createTablesForDCF5Code_1_6(List<String> queries) { + throw new UnsupportedOperationException(); + } + + @Override + protected Map<String, String> getCodeDCF5ForMigration_1_6(TopiaContextImplementor tx) throws TopiaException { + throw new UnsupportedOperationException(); + } + + @Override + protected void insertDCFFiveCode_1_6(String codeTopiaId, DCFFiveCode code, List<String> queries) { + throw new UnsupportedOperationException(); + } + + @Override + protected void insertSplitCodes_1_6(String professionTopiaId, String codeTopiaId, List<String> queries) { + throw new UnsupportedOperationException(); + } + } + + @Test + public void testSplitCodeDCF5_1_6() { + ConcreteWaoMigrationCallBack migration = new ConcreteWaoMigrationCallBack(); + + // code to split. 4 codes should be found as result of the split + String code = "AAA_BBB et CCC_DDD et EEE_ et FFF"; + + // now, the split + List<DCFFiveCode> codes = migration.splitCodeDCF5_1_6(code); + + // first code + assertEquals("AAA", codes.get(0).getFishingGearDCF()); + assertEquals("BBB", codes.get(0).getTargetSpeciesDCF()); + + // second code + assertEquals("CCC", codes.get(1).getFishingGearDCF()); + assertEquals("DDD", codes.get(1).getTargetSpeciesDCF()); + + // third code + assertEquals("EEE", codes.get(2).getFishingGearDCF()); + assertNull(codes.get(2).getTargetSpeciesDCF()); + + // last code + assertEquals("FFF", codes.get(3).getFishingGearDCF()); + assertNull(codes.get(3).getTargetSpeciesDCF()); + + } + + +} Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/base/AbstractFilteredPage.java =================================================================== --- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/base/AbstractFilteredPage.java 2010-11-10 09:25:14 UTC (rev 756) +++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/base/AbstractFilteredPage.java 2010-11-10 17:06:24 UTC (rev 757) @@ -349,6 +349,19 @@ return programSelectModel; } + private SelectModel dcfGearSelectModel; + + public SelectModel getDcfGearSelectModel() throws WaoException { + if (dcfGearSelectModel == null) { + List<OptionModel> options = new ArrayList<OptionModel>(); + for (String dcfGear : serviceSampling.getDCFGears(getFilter())) { + options.add(new OptionModelImpl(dcfGear + " description", dcfGear)); + } + dcfGearSelectModel = new SelectModelImpl(null, options); + } + return dcfGearSelectModel; + } + protected abstract SamplingFilter getFilter() throws WaoException; /** Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/SamplingPlan.java =================================================================== --- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/SamplingPlan.java 2010-11-10 09:25:14 UTC (rev 756) +++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/SamplingPlan.java 2010-11-10 17:06:24 UTC (rev 757) @@ -360,6 +360,10 @@ return data; } + public String getDcf5code() { + return StringUtil.join(row.getProfession().getDcf5code(), ", ", true); + } + public List<Date> getMonths() { if (months == null) { months = getPeriod().getMonths(); Modified: trunk/wao-ui/src/main/webapp/SamplingPlan.tml =================================================================== --- trunk/wao-ui/src/main/webapp/SamplingPlan.tml 2010-11-10 09:25:14 UTC (rev 756) +++ trunk/wao-ui/src/main/webapp/SamplingPlan.tml 2010-11-10 17:06:24 UTC (rev 757) @@ -109,50 +109,46 @@ <div class="t-beaneditor"> <div> <t:if t:test="user.admin"> - <t:label t:for="company" />: + <t:label t:for="company" /> : <input t:type="select" t:id="company" t:model="companySelectModel" value="companyId"/> <input t:type="submit" class="ico22px refresh" t:id="refreshByCompany" value="Refresh" title="Rafraîchir les filtres en fonction de la société sélectionnée"/> </t:if> - <t:label t:for="programName" />: + <t:label t:for="programName" /> : <select t:type="select" t:id="programName" t:model="programSelectModel" t:value="filter.programName" /> - <t:label t:for="codeDCF5" />: + <t:label t:for="codeDCF5" /> : <input t:type="textfield" t:id="codeDCF5" value="filter.codeDCF5" t:mixins="Autocomplete"/> + + <t:label t:for="fishingGearDCF" /> : + <input t:type="select" t:id="fishingGearDCF" t:model="dcfGearSelectModel" value="filter.fishingGearDCF"/> </div> <div> - <t:label t:for="facadeName" />: + <t:label t:for="facadeName" /> : <select t:type="select" t:id="facadeName" t:model="facadeSelectModel" t:value="filter.facadeName" /> <input t:type="submit" class="ico22px refresh" t:id="refreshByFacade" value="Refresh" title="Rafraîchir les zones et les métiers en fonction de la façade sélectionnée"/> - <t:label t:for="sectorName" />: + <t:label t:for="sectorName" /> : <select t:type="select" t:id="sectorName" t:model="sectorSelectModel" t:value="filter.sectorName" /> <input t:type="submit" class="ico22px refresh" t:id="refreshBySector" value="Refresh" title="Rafraîchir les métiers en fonction de la zone sélectionnée"/> - <!--t:label t:for="sampleRow" />: - <input t:type="select" t:id="sampleRow" t:model="sampleRowSelectModel" value="sampleRowId" /--> - - - <t:zone id="so-sampling-sampleRowZone" t:id="sampleRowZone" t:update="show"> - <t:nuiton.subForm t:visible="refreshSampleRowCodeZone"> - <t:label t:for="selectedSampleRow" />: - <select t:type="select" t:id="selectedSampleRow" t:value="selectedSampleRow" t:model="sampleRowSelectModel" - t:mixins="ck/onEvent" t:event="change"/> - <a t:type="actionlink" t:id="addSampleRowCode" title="Ajouter un code de ligne" t:zone="so-sampling-sampleRowZone"> - <img src="${asset:context:img/add-16px.png}" /> - </a> - <ul> - <li t:type="loop" t:source="filter.sampleRows" t:value="row" t:index="sampleRowCodeIndex" t:volatile="true"> - ${row.code} - <a t:type="actionlink" t:id="removeSampleRowCode" t:context="sampleRowCodeIndex" title="Supprimer ce code de ligne" t:zone="so-sampling-sampleRowZone"> - <img src="${asset:context:img/remove-22px.png}" /> - </a> - </li> - </ul> - </t:nuiton.subForm> - </t:zone> - - - + <t:zone id="so-sampling-sampleRowZone" t:id="sampleRowZone" t:update="show"> + <t:nuiton.subForm t:visible="refreshSampleRowCodeZone"> + <t:label t:for="selectedSampleRow" />: + <select t:type="select" t:id="selectedSampleRow" t:value="selectedSampleRow" t:model="sampleRowSelectModel" + t:mixins="ck/onEvent" t:event="change"/> + <a t:type="actionlink" t:id="addSampleRowCode" title="Ajouter un code de ligne" t:zone="so-sampling-sampleRowZone"> + <img src="${asset:context:img/add-16px.png}" /> + </a> + <ul> + <li t:type="loop" t:source="filter.sampleRows" t:value="row" t:index="sampleRowCodeIndex" t:volatile="true"> + ${row.code} + <a t:type="actionlink" t:id="removeSampleRowCode" t:context="sampleRowCodeIndex" title="Supprimer ce code de ligne" t:zone="so-sampling-sampleRowZone"> + <img src="${asset:context:img/remove-22px.png}" /> + </a> + </li> + </ul> + </t:nuiton.subForm> + </t:zone> </div> <div class="t-beaneditor-row aright"> <input t:type="submit" class="ico search-32px" t:id="search" value="Search" title="Rechercher les lignes du plan correspondants aux filtres saisies" /> @@ -247,7 +243,7 @@ <t:if t:test="fullView"> <td>${fishingZones}</td> <td>${row.fishingZonesInfos}</td> - <td>${row.profession.codeDCF5}</td> + <td>${row.profession.codeDCF5} ; ${dcf5code}</td> <td>${row.profession.meshSize}</td> <td>${row.profession.size}</td> <td>${row.profession.other}</td>
participants (1)
-
bleny@users.labs.libre-entreprise.org