Author: bleny Date: 2011-05-17 12:57:36 +0000 (Tue, 17 May 2011) New Revision: 1280 Log: add ObsDebCode entity migration import contact form and grids Added: trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/models/ObsDebCodesImportModel.java Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/PostgresMigrationCallback.java trunk/wao-business/src/main/java/fr/ifremer/wao/WaoContextImpl.java trunk/wao-business/src/main/java/fr/ifremer/wao/WaoMigrationCallBack.java trunk/wao-business/src/main/java/fr/ifremer/wao/entity/FleetImpl.java trunk/wao-business/src/main/java/fr/ifremer/wao/io/ImportResultsImpl.java trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceContactImpl.java trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceReferentialImpl.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.zargo trunk/wao-business/src/test/java/fr/ifremer/wao/service/ObsDebTest.java trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Administration.java trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/ContactForm.java trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/ContactModelFactory.java trunk/wao-ui/src/main/resources/i18n/wao-ui_en_GB.properties trunk/wao-ui/src/main/resources/i18n/wao-ui_fr_FR.properties trunk/wao-ui/src/main/webapp/Administration.tml trunk/wao-ui/src/main/webapp/ContactForm.tml trunk/wao-ui/src/main/webapp/Contacts.tml Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/PostgresMigrationCallback.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/PostgresMigrationCallback.java 2011-05-16 15:49:46 UTC (rev 1279) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/PostgresMigrationCallback.java 2011-05-17 12:57:36 UTC (rev 1280) @@ -860,9 +860,21 @@ } @Override + protected void addObsDebCodes_3_0(List<String> queries) { + queries.add("CREATE TABLE ObsDebCode (" + + "topiaId CHARACTER VARYING(255) PRIMARY KEY," + + "topiaVersion BIGINT NOT NULL," + + "topiaCreateDate TIMESTAMP WITHOUT TIME ZONE NOT NULL," + + "code CHARACTER VARYING(255)," + + "name TEXT);"); + } + + @Override protected void addObsDebToContacts_3_0(List<String> queries) { queries.add("ALTER TABLE Contact ADD landingDate TIMESTAMP WITHOUT TIME ZONE;"); queries.add("ALTER TABLE Contact ADD observationTypeOrdinal SMALLINT;"); + queries.add("ALTER TABLE Contact ADD obsDebCode CHARACTER VARYING(255);"); + queries.add("ALTER TABLE Contact ADD CONSTRAINT obsDebCode_fkey FOREIGN KEY (obsDebCode) REFERENCES ObsDebCode(topiaId);"); } @Override Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/WaoContextImpl.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/WaoContextImpl.java 2011-05-16 15:49:46 UTC (rev 1279) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/WaoContextImpl.java 2011-05-17 12:57:36 UTC (rev 1280) @@ -263,14 +263,10 @@ // Create the default admin in database serviceUser.createDefaultAdmin(); - // import all DCF codes + // import all needed initial references ServiceReferential serviceReferential = getServiceFactory().getServiceReferential(); - serviceReferential.importDCFcodes(); - InputStream terrestrialLocationsCsv = getClass().getResourceAsStream("/terrestrialLocations.csv"); - serviceReferential.importTerrestrialLocations(terrestrialLocationsCsv); + serviceReferential.initialImport(); - serviceReferential.importInitialContactStateMotifs(); - serviceUser.addTokensToAllProfiles(); if (log.isInfoEnabled()) { Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/WaoMigrationCallBack.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/WaoMigrationCallBack.java 2011-05-16 15:49:46 UTC (rev 1279) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/WaoMigrationCallBack.java 2011-05-17 12:57:36 UTC (rev 1280) @@ -149,6 +149,8 @@ protected abstract void addFleetToBoats_3_0(List<String> queries); + protected abstract void addObsDebCodes_3_0(List<String> queries); + protected static final Version[] VERSIONS = new Version[] { VersionUtil.valueOf("1.0"), VersionUtil.valueOf("1.1"), @@ -507,6 +509,8 @@ addAdminRolesToAdmin_3_0(tx, queries); + addObsDebCodes_3_0(queries); + addObsDebToContacts_3_0(queries); addTokensToUserProfiles_3_0(queries); Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/entity/FleetImpl.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/entity/FleetImpl.java 2011-05-16 15:49:46 UTC (rev 1279) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/entity/FleetImpl.java 2011-05-17 12:57:36 UTC (rev 1280) @@ -4,7 +4,7 @@ @Override public String getDescription() { - return getCode() + " - " + getDescription(); + return getCode() + " - " + getName(); } @Override Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/io/ImportResultsImpl.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/io/ImportResultsImpl.java 2011-05-16 15:49:46 UTC (rev 1279) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/io/ImportResultsImpl.java 2011-05-17 12:57:36 UTC (rev 1280) @@ -24,6 +24,8 @@ package fr.ifremer.wao.io; +import org.apache.commons.lang.builder.ToStringBuilder; + import java.util.ArrayList; import java.util.List; @@ -71,4 +73,10 @@ nbRowsImportedNew += 1; setNbRowsImportedNew(nbRowsImportedNew); } + + @Override + public String toString() { + String toString = ToStringBuilder.reflectionToString(this); + return toString; + } } Added: trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/models/ObsDebCodesImportModel.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/models/ObsDebCodesImportModel.java (rev 0) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/models/ObsDebCodesImportModel.java 2011-05-17 12:57:36 UTC (rev 1280) @@ -0,0 +1,44 @@ +package fr.ifremer.wao.io.csv2.models; + +import fr.ifremer.wao.entity.ObsDebCode; +import fr.ifremer.wao.entity.ObsDebCodeImpl; +import fr.ifremer.wao.io.csv2.ImportModel; +import fr.ifremer.wao.io.csv2.ImportableColumn; +import fr.ifremer.wao.io.csv2.ModelBuilder; + +import java.util.Collection; +import java.util.List; + +public class ObsDebCodesImportModel implements ImportModel<ObsDebCode> { + + protected ModelBuilder<ObsDebCode> modelBuilder; + + @Override + public char getSeparator() { + return ';'; + } + + @Override + public void pushCsvHeaderNames(List<String> headerNames) { + // nothing to do + } + + @Override + public ObsDebCode newEmptyInstance() { + return new ObsDebCodeImpl(); + } + + protected void buildModel() { + modelBuilder = new ModelBuilder<ObsDebCode>(); + modelBuilder.newMandatoryColumn("CODE", ObsDebCode.PROPERTY_CODE); + modelBuilder.newMandatoryColumn("NOM", ObsDebCode.PROPERTY_NAME); + } + + @Override + public Collection<ImportableColumn> getColumnsForImport() { + if (modelBuilder == null) { + buildModel(); + } + return modelBuilder.getColumnsForImport(); + } +} Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceContactImpl.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceContactImpl.java 2011-05-16 15:49:46 UTC (rev 1279) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceContactImpl.java 2011-05-17 12:57:36 UTC (rev 1280) @@ -234,6 +234,9 @@ if (contact.getContactStateMotif() != null) { motives.add(contact.getContactStateMotif()); } + if (contact.getObsProgram() == ObsProgram.OBSDEB) { + contact.getObsDebCode(); + } } EntitiesTranslator translator = new EntitiesTranslator(transaction); Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceReferentialImpl.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceReferentialImpl.java 2011-05-16 15:49:46 UTC (rev 1279) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceReferentialImpl.java 2011-05-17 12:57:36 UTC (rev 1280) @@ -25,7 +25,6 @@ package fr.ifremer.wao.service; import com.csvreader.CsvReader; -import fr.ifremer.wao.WaoBinderHelper; import fr.ifremer.wao.WaoBusinessException; import fr.ifremer.wao.WaoContext; import fr.ifremer.wao.WaoDAOHelper; @@ -37,8 +36,6 @@ import fr.ifremer.wao.bean.ContactState; import fr.ifremer.wao.bean.LocationType; import fr.ifremer.wao.bean.SamplingFilter; -import fr.ifremer.wao.entity.Boat; -import fr.ifremer.wao.entity.BoatDAO; import fr.ifremer.wao.entity.ContactStateMotif; import fr.ifremer.wao.entity.ContactStateMotifDAO; import fr.ifremer.wao.entity.ContactStateMotifImpl; @@ -46,6 +43,8 @@ import fr.ifremer.wao.entity.FishingGearDCFDAO; import fr.ifremer.wao.entity.FishingZone; import fr.ifremer.wao.entity.FishingZoneDAO; +import fr.ifremer.wao.entity.ObsDebCode; +import fr.ifremer.wao.entity.ObsDebCodeDAO; import fr.ifremer.wao.entity.Profession; import fr.ifremer.wao.entity.ProfessionDAO; import fr.ifremer.wao.entity.TargetSpeciesDCF; @@ -55,24 +54,20 @@ import fr.ifremer.wao.entity.TerrestrialLocation; import fr.ifremer.wao.entity.TerrestrialLocationDAO; import fr.ifremer.wao.entity.TerrestrialLocationImpl; -import fr.ifremer.wao.io.ImportRefusedException; +import fr.ifremer.wao.io.ImportResults; +import fr.ifremer.wao.io.ImportResultsImpl; import fr.ifremer.wao.io.csv.ImportHelper; import fr.ifremer.wao.io.csv.WaoCsvHeader.FISHING_ZONE; import fr.ifremer.wao.io.csv2.Import; import fr.ifremer.wao.io.csv2.ImportModel; +import fr.ifremer.wao.io.csv2.models.ObsDebCodesImportModel; import fr.ifremer.wao.io.csv2.models.TerrestrialDivisionImportModel; import fr.ifremer.wao.io.csv2.models.TerrestrialLocationImportModel; -import org.apache.commons.beanutils.BeanUtils; -import org.apache.commons.beanutils.PropertyUtils; -import org.apache.commons.beanutils.PropertyUtilsBean; -import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.io.IOUtils; import org.apache.commons.lang.StringUtils; import org.nuiton.topia.TopiaContext; import org.nuiton.topia.TopiaException; import org.nuiton.topia.framework.TopiaQuery; -import org.nuiton.topia.persistence.TopiaDAO; -import org.nuiton.topia.persistence.TopiaEntity; -import org.nuiton.util.CollectionUtil; import org.nuiton.util.beans.Binder; import org.nuiton.util.beans.BinderFactory; import org.slf4j.Logger; @@ -80,14 +75,9 @@ import java.io.IOException; import java.io.InputStream; -import java.lang.reflect.InvocationTargetException; -import java.util.ArrayList; import java.util.Arrays; -import java.util.Collection; import java.util.HashMap; -import java.util.HashSet; import java.util.Iterator; -import java.util.LinkedHashMap; import java.util.LinkedList; import java.util.List; import java.util.Locale; @@ -248,46 +238,6 @@ return result; } - protected void executeImportDCFcodes(TopiaContext transaction) throws TopiaException { - - FishingGearDCFDAO fishingGearDCFDAO = WaoDAOHelper.getFishingGearDCFDAO(transaction); - TargetSpeciesDCFDAO targetSpeciesDCFDAO = WaoDAOHelper.getTargetSpeciesDCFDAO(transaction); - - long nbCodes = fishingGearDCFDAO.count() + targetSpeciesDCFDAO.count(); - - if (nbCodes == 0) { - - final String[] gearCodesBase = {"DRB", "DRH", "FAR", "FCN", "FG", - "FIX", "FPN", "FPO", "FSN", "FWR", "FYK", "GEN", "GES", "GN", "GNC", - "GND", "GNF", "GNS", "GT", "GTN", "GTR", "HAR", "HMD", "HMP", "HMX", - "LA", "LHM", "LHP", "LL", "LLD", "LLS", "LN", "LNB", "LNP", "LNS", - "LTL", "LX", "MIS", "NK", "OT", "OTB", "OTM", "OTT", "PS", "PS1", - "PS2", "PT", "PTB", "PTM", "RG", "SB", "SDN", "SPR", "SSC", "SV", - "SW", "TB", "TBB", "TBN", "TBS", "TM", "TMS", "TX"}; - final String[] speciesCodesBase = {"ALG", "CAT", "CRU", "CSJ", - "DEF", "DWS", "FIN", "LPF", "MOL", "SPF"}; - - for (String code : gearCodesBase) { - fishingGearDCFDAO.create(FishingGearDCF.PROPERTY_CODE, code); - } - - for (String code : speciesCodesBase) { - targetSpeciesDCFDAO.create(TargetSpeciesDCF.PROPERTY_CODE, code); - } - - transaction.commitTransaction(); - - if (log.isDebugEnabled()) { - nbCodes = fishingGearDCFDAO.count() + targetSpeciesDCFDAO.count(); - log.debug(nbCodes + " dcf codes inserted"); - } - } else { - if (log.isDebugEnabled()) { - log.debug("no DCF codes will be inserted"); - } - } - } - /** * * @param input a CVS file with terrestrial locations @@ -516,7 +466,10 @@ transaction.commitTransaction(); } - @Override + /** + * @deprecated write a CSV file and use import + */ + @Deprecated protected void executeImportInitialContactStateMotifs(TopiaContext transaction) throws Exception { ContactStateMotifDAO contactStateMotifDAO = WaoDAOHelper.getContactStateMotifDAO(transaction); long count = contactStateMotifDAO.count(); @@ -693,4 +646,125 @@ return ports; } + + @Override + protected ImportResults executeImportObsDebCodes(TopiaContext transaction, InputStream input) throws Exception { + Import<ObsDebCode> obsDebCodeImport = null; + ImportResults result = new ImportResultsImpl(); // will be returned + + try { + ObsDebCodeDAO dao = WaoDAOHelper.getObsDebCodeDAO(transaction); + ImportModel<ObsDebCode> model = new ObsDebCodesImportModel(); + obsDebCodeImport = new Import<ObsDebCode>(model, input); + + // start reading the CSV file line by line + Iterator<ObsDebCode> it = obsDebCodeImport.startImport(); + while (it.hasNext()) { + ObsDebCode obsDebCode = it.next(); + + // try to find an already existing entity to update + // or create one + ObsDebCode existingCode = dao.findByCode(obsDebCode.getCode()); + if (existingCode == null) { + dao.create(obsDebCode); + result.incNbImportedNew(); + } else { + existingCode.setName(obsDebCode.getName()); + dao.update(existingCode); + } + result.incNbImported(); + } + } finally { + if (obsDebCodeImport != null) { + obsDebCodeImport.stopImport(); + } + } + + transaction.commitTransaction(); + + if (log.isDebugEnabled()) { + log.debug("import of obsdeb codes returns " + result); + } + + return result; + } + + @Override + protected List<ObsDebCode> executeGetAllObsDebCodes(TopiaContext transaction) throws Exception { + ObsDebCodeDAO dao = WaoDAOHelper.getObsDebCodeDAO(transaction); + List<ObsDebCode> allObsDebCodes = dao.findAll(); + return allObsDebCodes; + } + + protected void initialDCF5CodesImport(TopiaContext transaction) throws TopiaException { + + FishingGearDCFDAO fishingGearDCFDAO = WaoDAOHelper.getFishingGearDCFDAO(transaction); + TargetSpeciesDCFDAO targetSpeciesDCFDAO = WaoDAOHelper.getTargetSpeciesDCFDAO(transaction); + + long nbCodes = fishingGearDCFDAO.count() + targetSpeciesDCFDAO.count(); + + if (nbCodes == 0) { + + final String[] gearCodesBase = {"DRB", "DRH", "FAR", "FCN", "FG", + "FIX", "FPN", "FPO", "FSN", "FWR", "FYK", "GEN", "GES", "GN", "GNC", + "GND", "GNF", "GNS", "GT", "GTN", "GTR", "HAR", "HMD", "HMP", "HMX", + "LA", "LHM", "LHP", "LL", "LLD", "LLS", "LN", "LNB", "LNP", "LNS", + "LTL", "LX", "MIS", "NK", "OT", "OTB", "OTM", "OTT", "PS", "PS1", + "PS2", "PT", "PTB", "PTM", "RG", "SB", "SDN", "SPR", "SSC", "SV", + "SW", "TB", "TBB", "TBN", "TBS", "TM", "TMS", "TX"}; + final String[] speciesCodesBase = {"ALG", "CAT", "CRU", "CSJ", + "DEF", "DWS", "FIN", "LPF", "MOL", "SPF"}; + + for (String code : gearCodesBase) { + fishingGearDCFDAO.create(FishingGearDCF.PROPERTY_CODE, code); + } + + for (String code : speciesCodesBase) { + targetSpeciesDCFDAO.create(TargetSpeciesDCF.PROPERTY_CODE, code); + } + + transaction.commitTransaction(); + + if (log.isDebugEnabled()) { + nbCodes = fishingGearDCFDAO.count() + targetSpeciesDCFDAO.count(); + log.debug(nbCodes + " dcf codes inserted"); + } + } else { + if (log.isDebugEnabled()) { + log.debug("no DCF codes will be inserted"); + } + } + } + + @Override + protected void executeInitialImport(TopiaContext transaction) throws Exception { + + initialDCF5CodesImport(transaction); + + InputStream input = null; + + TerrestrialLocationDAO terrestrialLocationDAO = WaoDAOHelper.getTerrestrialLocationDAO(transaction); + ObsDebCodeDAO obsDebCodeDAO = WaoDAOHelper.getObsDebCodeDAO(transaction); + + // import terrestrial locations if base is empty + if (terrestrialLocationDAO.count() == 0) { + try { + input = getClass().getResourceAsStream("/terrestrialLocations.csv"); + executeImportTerrestrialLocations(transaction, input); + } finally { + IOUtils.closeQuietly(input); + } + } + + if (obsDebCodeDAO.count() == 0) { + try { + input = getClass().getResourceAsStream("/obsDebCodes.csv"); + executeImportObsDebCodes(transaction, input); + } finally { + IOUtils.closeQuietly(input); + } + } + + // executeImportInitialContactStateMotifs(transaction); + } } 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 2011-05-16 15:49:46 UTC (rev 1279) +++ trunk/wao-business/src/main/resources/i18n/wao-business_en_GB.properties 2011-05-17 12:57:36 UTC (rev 1280) @@ -185,6 +185,7 @@ wao.error.serviceNews.getNews= wao.error.serviceNews.saveNews= wao.error.serviceReferential.getAllContactStateMotifs= +wao.error.serviceReferential.getAllObsDebCodes= wao.error.serviceReferential.getAllObservationUnits= wao.error.serviceReferential.getAllPorts= wao.error.serviceReferential.getAllTerrestrialDistricts= @@ -199,8 +200,10 @@ wao.error.serviceReferential.importDCFcodes= wao.error.serviceReferential.importFishingZoneCsv= wao.error.serviceReferential.importInitialContactStateMotifs= +wao.error.serviceReferential.importObsDebCodes= wao.error.serviceReferential.importTerrestrialDivisions= wao.error.serviceReferential.importTerrestrialLocations= +wao.error.serviceReferential.initialImport= wao.error.serviceReferential.updateAllContactStatesMotifs= wao.error.serviceSampling.countSampleRows= wao.error.serviceSampling.createSampleRowLog= 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 2011-05-16 15:49:46 UTC (rev 1279) +++ trunk/wao-business/src/main/resources/i18n/wao-business_fr_FR.properties 2011-05-17 12:57:36 UTC (rev 1280) @@ -185,6 +185,7 @@ wao.error.serviceNews.getNews=Impossible de récupérer l'ensemble des news wao.error.serviceNews.saveNews=Impossible d'enregistrer la news ayant pour titre '%1$s' wao.error.serviceReferential.getAllContactStateMotifs= +wao.error.serviceReferential.getAllObsDebCodes= wao.error.serviceReferential.getAllObservationUnits= wao.error.serviceReferential.getAllPorts= wao.error.serviceReferential.getAllTerrestrialDistricts= @@ -199,8 +200,10 @@ wao.error.serviceReferential.importDCFcodes=Impossible de créer le référentiel des codes DCF wao.error.serviceReferential.importFishingZoneCsv=Problème d'import du fichier CSV. Vérifiez l'en-tête du fichier \: [ PECHE_DIVISION,PECHE_ZONE,PECHE_FACADE ]. Voir documentation pour plus de détails. wao.error.serviceReferential.importInitialContactStateMotifs= +wao.error.serviceReferential.importObsDebCodes= wao.error.serviceReferential.importTerrestrialDivisions= wao.error.serviceReferential.importTerrestrialLocations= +wao.error.serviceReferential.initialImport= wao.error.serviceReferential.updateAllContactStatesMotifs= wao.error.serviceSampling.countSampleRows= wao.error.serviceSampling.createSampleRowLog= Modified: trunk/wao-business/src/main/xmi/wao.zargo =================================================================== (Binary files differ) Modified: trunk/wao-business/src/test/java/fr/ifremer/wao/service/ObsDebTest.java =================================================================== --- trunk/wao-business/src/test/java/fr/ifremer/wao/service/ObsDebTest.java 2011-05-16 15:49:46 UTC (rev 1279) +++ trunk/wao-business/src/test/java/fr/ifremer/wao/service/ObsDebTest.java 2011-05-17 12:57:36 UTC (rev 1280) @@ -36,6 +36,7 @@ import fr.ifremer.wao.bean.ValidationResult; import fr.ifremer.wao.entity.Boat; import fr.ifremer.wao.entity.Contact; +import fr.ifremer.wao.entity.ObsDebCode; import fr.ifremer.wao.entity.SampleRow; import fr.ifremer.wao.entity.TerrestrialDivision; import fr.ifremer.wao.entity.TerrestrialLocation; @@ -447,6 +448,11 @@ contact = serviceContact.getNewContact(fixtures.joshAsObserver(), row, fixtures.samourai()); Assert.assertNotNull("service must have pre filled field", contact.getObservationEndDate()); Assert.assertNotNull("service must have pre filled field", contact.getTerrestrialLocation()); + + // i've made the survey in this last contact, so i can associate an ObsDebCode + List<ObsDebCode> allObsDebCodes = serviceReferential.getAllObsDebCodes(); + contact.setObsDebCode(allObsDebCodes.get(123)); + serviceContact.saveContact(fixtures.joshAsObserver(), contact, false); } @Test Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Administration.java =================================================================== --- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Administration.java 2011-05-16 15:49:46 UTC (rev 1279) +++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Administration.java 2011-05-17 12:57:36 UTC (rev 1280) @@ -266,6 +266,16 @@ }; } + public ImportEngine getObsDebCodesImportEngine() { + return new ImportEngine() { + @Override + public ImportResults execute(InputStream input) { + ImportResults result = serviceReferential.importObsDebCodes(input); + return result; + } + }; + } + public InputStream getActivityCalendarLogFile() { return getActivityCalendarLogFile(WaoProperty.FILENAME_LOG_ACTIVITY_IMPORT); } Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/ContactForm.java =================================================================== --- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/ContactForm.java 2011-05-16 15:49:46 UTC (rev 1279) +++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/ContactForm.java 2011-05-17 12:57:36 UTC (rev 1280) @@ -30,6 +30,7 @@ import fr.ifremer.wao.bean.ValidationResult; import fr.ifremer.wao.entity.Contact; import fr.ifremer.wao.entity.ContactStateMotif; +import fr.ifremer.wao.entity.ObsDebCode; import fr.ifremer.wao.entity.TerrestrialLocation; import fr.ifremer.wao.entity.WaoUser; import fr.ifremer.wao.service.ServiceContact; @@ -253,6 +254,10 @@ return locations; } + public List<ObsDebCode> getObsDebCodes() { + return serviceReferential.getAllObsDebCodes(); + } + public SelectModel getContactStateSelectModel() { List<ContactState> allowedStates = ContactState.getAllowedStates(contact.getObsProgram()); return new EnumSelectModel(ContactState.class, messages, Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/ContactModelFactory.java =================================================================== --- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/ContactModelFactory.java 2011-05-16 15:49:46 UTC (rev 1279) +++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/ContactModelFactory.java 2011-05-17 12:57:36 UTC (rev 1280) @@ -108,6 +108,7 @@ addNonSortableProperty(Contact.PROPERTY_COMMENT_COORDINATOR, getCommentCoordinatorPropertyConduit()); addNonSortableProperty(Contact.PROPERTY_COMMENT_ADMIN, getCommentAdminPropertyConduit()); addNonSortableProperty("dataReliability", getDataReliabilityPropertyConduit()); + addNonSortableProperty(Contact.PROPERTY_OBS_DEB_CODE, null); addNonSortableProperty("actions", null); } @@ -143,7 +144,8 @@ "fishingZoneSector", "fishingZoneDivision", "professionCode", "program"); } else { - model.exclude(Contact.PROPERTY_LANDING_DATE, "observationType"); + model.exclude(Contact.PROPERTY_LANDING_DATE, "observationType", + Contact.PROPERTY_OBS_DEB_CODE); } } Modified: trunk/wao-ui/src/main/resources/i18n/wao-ui_en_GB.properties =================================================================== --- trunk/wao-ui/src/main/resources/i18n/wao-ui_en_GB.properties 2011-05-16 15:49:46 UTC (rev 1279) +++ trunk/wao-ui/src/main/resources/i18n/wao-ui_en_GB.properties 2011-05-17 12:57:36 UTC (rev 1280) @@ -107,6 +107,7 @@ wao.ui.field.Contact.mammalsInfo=Scientific names and number of captured species wao.ui.field.Contact.mammalsObservation=Exceptional observation wao.ui.field.Contact.nbObservants=Observers number +wao.ui.field.Contact.obsDebCode=Profession wao.ui.field.Contact.observationType=Observation type wao.ui.field.Contact.samplingStrategy=Sampling strategy followed wao.ui.field.Contact.secondaryObservers=Observers @@ -190,6 +191,7 @@ wao.ui.import.fishingZoneLabel=of fishing zones wao.ui.import.fullDescription=Import %s (%s format with UTF-8 characters set) wao.ui.import.longTitle=CSV Import/Export (UTF-8) +wao.ui.import.obsDebCodesLabel=of the ObsDeb profession codes wao.ui.import.samplingPlanLabel=of the sampling plan wao.ui.import.terrestrialDivisionsLabel=of the terrestrial divisions (ObsDeb) wao.ui.import.terrestrialLocationsLabel=of the terrestrial locations Modified: trunk/wao-ui/src/main/resources/i18n/wao-ui_fr_FR.properties =================================================================== --- trunk/wao-ui/src/main/resources/i18n/wao-ui_fr_FR.properties 2011-05-16 15:49:46 UTC (rev 1279) +++ trunk/wao-ui/src/main/resources/i18n/wao-ui_fr_FR.properties 2011-05-17 12:57:36 UTC (rev 1280) @@ -106,6 +106,7 @@ wao.ui.field.Contact.mammalsInfo=Noms scientifiques et nombres d'individus des espèces capturées wao.ui.field.Contact.mammalsObservation=Observation exceptionnelle wao.ui.field.Contact.nbObservants=Nombre d'observateurs +wao.ui.field.Contact.obsDebCode=Métier wao.ui.field.Contact.observationType=Type d'observation wao.ui.field.Contact.samplingStrategy=Stratégie d'échantillonnage suivie wao.ui.field.Contact.secondaryObservers=Observateurs @@ -189,6 +190,7 @@ wao.ui.import.fishingZoneLabel=des zones de pêches wao.ui.import.fullDescription=Import %s (format %s avec encodage UTF-8) wao.ui.import.longTitle=Import/Export CSV (UTF-8) +wao.ui.import.obsDebCodesLabel=des codes métiers ObsDeb wao.ui.import.samplingPlanLabel=du plan d'échantillonnage wao.ui.import.terrestrialDivisionsLabel=du référentiel de stratification spatiale (ObsDeb) wao.ui.import.terrestrialLocationsLabel=des lieux terrestres Modified: trunk/wao-ui/src/main/webapp/Administration.tml =================================================================== --- trunk/wao-ui/src/main/webapp/Administration.tml 2011-05-16 15:49:46 UTC (rev 1279) +++ trunk/wao-ui/src/main/webapp/Administration.tml 2011-05-17 12:57:36 UTC (rev 1280) @@ -181,6 +181,7 @@ <t:if test="currentUser.obsDeb"> <t:importFieldSet t:label="${message:wao.ui.import.terrestrialDivisionsLabel}" t:engine="terrestrialDivisionsImportEngine" /> + <t:importFieldSet t:label="${message:wao.ui.import.obsDebCodesLabel}" t:engine="obsDebCodesImportEngine" /> </t:if> </t:if> Modified: trunk/wao-ui/src/main/webapp/ContactForm.tml =================================================================== --- trunk/wao-ui/src/main/webapp/ContactForm.tml 2011-05-16 15:49:46 UTC (rev 1279) +++ trunk/wao-ui/src/main/webapp/ContactForm.tml 2011-05-17 12:57:36 UTC (rev 1280) @@ -186,6 +186,12 @@ ${contact.terrestrialLocation.name} </t:if> </div> + <div> + <label for="obsDebCode">${message:wao.ui.field.Contact.obsDebCode}</label> + <t:if test="contact.obsDebCode"> + ${contact.obsDebCode.description} + </t:if> + </div> </t:if> <div> <label>${message:wao.ui.field.Contact.dataInputDate}</label> @@ -308,6 +314,14 @@ t:values="terrestrialLocations" t:selectedValue="contact.terrestrialLocation" /> </div> + <div> + <label for="obsDebCode">${message:wao.ui.field.Contact.obsDebCode}</label> + <t:topiaEntitySelector t:id="obsDebCode" + t:clazzName="ObsDebCode" + t:labelPropertyName="description" + t:values="obsDebCodes" + t:selectedValue="contact.obsDebCode" /> + </div> </t:if> <div> <!-- this field must be just before contact.comment --> <label for="inputDate">${message:wao.ui.field.Contact.dataInputDate}</label> Modified: trunk/wao-ui/src/main/webapp/Contacts.tml =================================================================== --- trunk/wao-ui/src/main/webapp/Contacts.tml 2011-05-16 15:49:46 UTC (rev 1279) +++ trunk/wao-ui/src/main/webapp/Contacts.tml 2011-05-17 12:57:36 UTC (rev 1280) @@ -341,6 +341,13 @@ </span> </t:if> </p:commentAdminCell> + <p:obsDebCodeCell> + <t:if test="contact.obsDebCode"> + <span t:type="ck/Tooltip" title="Infos" t:value="${contact.obsDebCode.description}" t:effect="appear"> + ${contact.obsDebCode.code} + </span> + </t:if> + </p:obsDebCodeCell> <p:actionsCell> <t:if t:test="canEditSampleRow()"> <a t:type="pagelink" t:page="contactForm" t:anchor="focus" t:context="contact.topiaId">