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>