Author: bleny Date: 2011-03-07 17:14:45 +0000 (Mon, 07 Mar 2011) New Revision: 1053 Log: add import or obsdeb sampling plan + test ; import UI ; sampling plan in UI Added: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/data/SampleRowDataSource.java trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/ObsDebSamplingPlan.java trunk/wao-ui/src/main/webapp/ObsDebSamplingPlan.tml Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/WaoUtils.java trunk/wao-business/src/main/java/fr/ifremer/wao/bean/ConnectedUserImpl.java trunk/wao-business/src/main/java/fr/ifremer/wao/entity/SampleRowImpl.java trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceReferentialImpl.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.zargo trunk/wao-business/src/test/java/fr/ifremer/wao/AbstractServiceTest.java trunk/wao-business/src/test/java/fr/ifremer/wao/entity/BoatImplTest.java trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceBoatImplTest.java trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceReferentialImplTest.java trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceSamplingImplTest.java trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceSynthesisImplTest.java trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/components/Layout.java trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/data/ContactDataSource.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/SamplingPlan.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 Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/WaoUtils.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/WaoUtils.java 2011-03-03 13:44:16 UTC (rev 1052) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/WaoUtils.java 2011-03-07 17:14:45 UTC (rev 1053) @@ -25,10 +25,15 @@ package fr.ifremer.wao; import fr.ifremer.wao.entity.TerrestrialDivision; +import fr.ifremer.wao.entity.TerrestrialDivisionDAO; import org.apache.commons.beanutils.PropertyUtils; import org.apache.commons.mail.EmailException; import org.nuiton.topia.TopiaContext; import org.nuiton.topia.TopiaException; +import org.nuiton.topia.persistence.TopiaDAO; +import org.nuiton.topia.persistence.TopiaEntity; +import org.nuiton.util.beans.Binder; +import org.nuiton.util.beans.BinderFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -36,6 +41,8 @@ import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; +import java.util.HashMap; +import java.util.Iterator; import java.util.LinkedHashMap; import java.util.LinkedList; import java.util.List; @@ -228,4 +235,31 @@ } return projection; } + + public static <E extends TopiaEntity> void createOrUpdate(Class<E> clazz, Iterator<E> entitiesIterator, + TopiaDAO<E> dao, String... idProperties) + throws InvocationTargetException, NoSuchMethodException, IllegalAccessException, TopiaException { + while (entitiesIterator.hasNext()) { + E entity = entitiesIterator.next(); + createOrUpdate(clazz, entity, dao, idProperties); + } + } + + public static <E extends TopiaEntity> void createOrUpdate(Class<E> clazz, E entity, + TopiaDAO<E> dao, String... idProperties) + throws InvocationTargetException, NoSuchMethodException, IllegalAccessException, TopiaException { + Binder<E, E> binder = BinderFactory.newBinder(clazz); + Map<String, Object> properties = new HashMap<String, Object>(); + for (String idProperty : idProperties) { + properties.put(idProperty, PropertyUtils.getProperty(entity, idProperty)); + } + E existingEntity = dao.findByProperties(properties); + if (existingEntity == null) { + dao.create(entity); + } else { + binder.copyExcluding(entity, existingEntity, + TopiaEntity.TOPIA_ID, TopiaEntity.TOPIA_CREATE_DATE, TopiaEntity.TOPIA_VERSION); + dao.update(existingEntity); + } + } } Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/bean/ConnectedUserImpl.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/bean/ConnectedUserImpl.java 2011-03-03 13:44:16 UTC (rev 1052) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/bean/ConnectedUserImpl.java 2011-03-07 17:14:45 UTC (rev 1053) @@ -119,4 +119,9 @@ public boolean isObsVente() { return isProgram(ObsProgram.OBSVENTE); } + + @Override + public boolean isObsDeb() { + return isProgram(ObsProgram.OBSDEB); + } } Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/entity/SampleRowImpl.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/entity/SampleRowImpl.java 2011-03-03 13:44:16 UTC (rev 1052) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/entity/SampleRowImpl.java 2011-03-07 17:14:45 UTC (rev 1053) @@ -41,6 +41,7 @@ import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; +import java.util.Collections; import java.util.Date; import java.util.GregorianCalendar; import java.util.HashMap; @@ -214,7 +215,12 @@ */ @Override public List<Integer> removeNoLongerElligibleBoats(List<Boat> boats) { - Iterator<ElligibleBoat> it = getElligibleBoat().iterator(); + List<ElligibleBoat> eligibleBoats = getElligibleBoat(); + if (eligibleBoats == null) { + eligibleBoats = Collections.emptyList(); + } + + Iterator<ElligibleBoat> it = eligibleBoats.iterator(); List<Integer> updatedImmatriculations = new ArrayList<Integer>(); while (it.hasNext()) { ElligibleBoat elligible = it.next(); 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-03-03 13:44:16 UTC (rev 1052) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceReferentialImpl.java 2011-03-07 17:14:45 UTC (rev 1053) @@ -614,7 +614,7 @@ try { Iterator<TerrestrialDivision> terrestrialDivisionIterator = terrestrialDivisionImport.startImport(); - createOrUpdate(TerrestrialDivision.class, terrestrialDivisionIterator, dao, TerrestrialDivision.PROPERTY_CODE); + WaoUtils.createOrUpdate(TerrestrialDivision.class, terrestrialDivisionIterator, dao, TerrestrialDivision.PROPERTY_CODE); } catch (Exception e) { transaction.rollbackTransaction(); throw e; @@ -623,26 +623,4 @@ } } - - protected <E extends TopiaEntity> void createOrUpdate(Class<E> clazz, Iterator<E> entitiesIterator, - TopiaDAO<E> dao, String... idProperties) - throws InvocationTargetException, NoSuchMethodException, IllegalAccessException, TopiaException { - Binder<E, E> binder = BinderFactory.newBinder(clazz); - while (entitiesIterator.hasNext()) { - E entity = entitiesIterator.next(); - Map<String, Object> properties = new HashMap<String, Object>(); - for (String idProperty : idProperties) { - properties.put(idProperty, PropertyUtils.getProperty(entity, idProperty)); - } - E existingEntity = dao.findByProperties(properties); - if (existingEntity == null) { - dao.create(entity); - } else { - binder.copyExcluding(entity, existingEntity, - TopiaEntity.TOPIA_ID, TopiaEntity.TOPIA_CREATE_DATE, TopiaEntity.TOPIA_VERSION); - dao.update(existingEntity); - } - } - - } } 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 2011-03-03 13:44:16 UTC (rev 1052) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceSamplingImpl.java 2011-03-07 17:14:45 UTC (rev 1053) @@ -64,18 +64,22 @@ import fr.ifremer.wao.entity.SampleRowDAO; import fr.ifremer.wao.entity.SampleRowImpl; import fr.ifremer.wao.entity.SampleRowLog; -import fr.ifremer.wao.entity.SampleRowLogDAO; import fr.ifremer.wao.entity.SampleRowLogImpl; import fr.ifremer.wao.entity.TargetSpeciesDCF; +import fr.ifremer.wao.entity.TerrestrialDivision; +import fr.ifremer.wao.entity.TerrestrialDivisionDAO; import fr.ifremer.wao.entity.TerrestrialLocation; import fr.ifremer.wao.entity.WaoUser; +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.SamplingExport; import fr.ifremer.wao.io.csv.WaoCsvHeader.FISHING_ZONE; import fr.ifremer.wao.io.csv.WaoCsvHeader.SAMPLING; -import org.apache.commons.lang.ObjectUtils; +import fr.ifremer.wao.io.csv2.Import; +import fr.ifremer.wao.io.csv2.models.SamplingPlanImportModel; +import org.apache.commons.io.IOUtils; import org.apache.commons.lang.StringUtils; import org.apache.commons.mail.EmailException; import org.nuiton.topia.TopiaContext; @@ -85,6 +89,8 @@ import org.nuiton.util.DateUtil; import org.nuiton.util.PeriodDates; import org.nuiton.util.StringUtil; +import org.nuiton.util.beans.Binder; +import org.nuiton.util.beans.BinderFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -96,17 +102,15 @@ import java.text.DateFormat; import java.text.NumberFormat; import java.text.ParseException; -import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.Calendar; import java.util.Collection; import java.util.Date; import java.util.GregorianCalendar; -import java.util.HashMap; +import java.util.Iterator; import java.util.LinkedList; import java.util.List; -import java.util.Map; /** * ServiceSamplingImpl @@ -229,17 +233,21 @@ throws Exception { // prepare some stuffs for persistence - for (SampleMonth sampleMonth : row.getSampleMonth()) { - if (sampleMonth.getTopiaId() == null) { - context.prepareTopiaId(SampleMonth.class, sampleMonth); + if (row.getSampleMonth() != null) { + for (SampleMonth sampleMonth : row.getSampleMonth()) { + if (sampleMonth.getTopiaId() == null) { + context.prepareTopiaId(SampleMonth.class, sampleMonth); + } } } - ProfessionDAO professionDAO = WaoDAOHelper.getProfessionDAO(transaction); - if (row.getProfession().getTopiaId() == null) { - context.prepareTopiaId(Profession.class, row.getProfession()); + if (row.getProfession() != null) { + ProfessionDAO professionDAO = WaoDAOHelper.getProfessionDAO(transaction); + if (row.getProfession().getTopiaId() == null) { + context.prepareTopiaId(Profession.class, row.getProfession()); + } + professionDAO.update(row.getProfession()); } - professionDAO.update(row.getProfession()); if (row.getDCF5Code() != null) { row.setDCF5Code(insertOrSelect(transaction, row.getDCF5Code())); @@ -248,17 +256,33 @@ updateElligibleBoats(transaction, row, boats); SampleRowDAO dao = WaoDAOHelper.getSampleRowDAO(transaction); - boolean rowIsNew = row.getTopiaId() == null; + + SampleRow oldRow = null; + if (row.getCode() == null) { + String code = executeGetNewSampleRowCode(transaction, context.getCurrentDate()); + row.setCode(code); + } else { + oldRow = getSampleRowByCode(null, row.getCode()); + } + + boolean rowIsNew = oldRow == null; if (rowIsNew) { + if (row.getTopiaId() == null) { + context.prepareTopiaId(SampleRow.class, row); + } dao.create(row); } else { - SampleRow oldRow = getSampleRow(row.getTopiaId()); + rowLog.setLogText(oldRow, row); + + Binder<SampleRow, SampleRow> sampleRowBinder = BinderFactory.newBinder(SampleRow.class); + sampleRowBinder.copyExcluding(row, oldRow, SampleRow.TOPIA_ID, SampleRow.TOPIA_VERSION, SampleRow.TOPIA_CREATE_DATE, + SampleRow.PROPERTY_SAMPLE_ROW_LOG); + if (rowLog.getTopiaId() == null) { context.prepareTopiaId(SampleRowLog.class, rowLog); } - rowLog.setLogText(oldRow, row); row.addSampleRowLog(rowLog); - dao.update(row); + dao.update(oldRow); } transaction.commitTransaction(); @@ -612,10 +636,40 @@ List<SampleRow> rows = dao.findAllByQuery(query); + if (ObsProgram.OBSDEB.equals(filter.getObsProgram())) { + // force load + for (SampleRow row : rows) { + row.getObservationUnit().getPort(); + row.sizeElligibleBoat(); + } + } + return rows; } @Override + protected int executeCountSampleRows(TopiaContext transaction, SamplingFilter filter) throws Exception { + + SampleRowDAO dao = WaoDAOHelper.getSampleRowDAO(transaction); + + WaoQueryBuilder builder = context.newQueryBuilder(); + + WaoQueryHelper.SampleRowProperty sampleRowProperty = + builder.initializeForSampleRow(false); + + WaoQueryHelper.DCF5CodeProperty dcf5CodeProperty = + WaoQueryHelper.newDCF5CodeProperty(); + + TopiaQuery query = builder.applySamplingFilter(filter, false). + addLeftJoin(sampleRowProperty.dCF5Code(), + dcf5CodeProperty.$alias(), false); + + int count = dao.countByQuery(query); + + return count; + } + + @Override public SampleRow executeGetSampleRow(TopiaContext transaction, List<Object> errorArgs, String sampleRowId) throws TopiaException { @@ -625,13 +679,16 @@ SampleRow result = dao.findByTopiaId(sampleRowId); - result.sizeSampleMonth(); - result.sizeElligibleBoat(); - result.sizeSampleRowLog(); + if (result != null) { + // force load + result.sizeSampleMonth(); + result.sizeElligibleBoat(); + result.sizeSampleRowLog(); - if (result.getObsProgram() == ObsProgram.OBSVENTE) { - // load specific field - result.getTerrestrialLocation(); + if (result.getObsProgram() == ObsProgram.OBSVENTE) { + // load specific field + result.getTerrestrialLocation(); + } } return result; @@ -649,17 +706,26 @@ TopiaQuery query = dao.createQuery(). addEquals(SampleRow.PROPERTY_CODE, sampleRowCode); - if (!user.isAdmin() && !user.isGuest()) { + boolean filterByUser = user != null; + if (filterByUser && user.isCoordinatorOrObserver()) { query.addEquals(SampleRow.PROPERTY_COMPANY, user.getCompany()); } query.addLoad(SampleRow.PROPERTY_SAMPLE_ROW_LOG); SampleRow result = dao.findByQuery(query); - if (result == null) { - throw new WaoBusinessException(Type.NOT_EXISTS, - ServiceSampling.class, "La ligne du plan avec " + - "pour code " + sampleRowCode + " est introuvable !"); +// if (result == null) { +// throw new WaoBusinessException(Type.NOT_EXISTS, +// ServiceSampling.class, "La ligne du plan avec " + +// "pour code " + sampleRowCode + " est introuvable !"); +// } + + if (result != null) { + result.sizeElligibleBoat(); + result.sizeSampleMonth(); + result.sizeFishingZone(); + result.sizeDCF5Code(); + result.sizeSampleRowLog(); } return result; @@ -960,104 +1026,127 @@ @Override public ImportResults executeImportSamplingPlanCsv(TopiaContext transaction, List<Object> errorArgs, - InputStream input, ObsProgram obsProgram) throws WaoBusinessException, IOException, - TopiaException, ParseException { + InputStream input, ConnectedUser connectedUser) throws WaoBusinessException, IOException, + TopiaException, ParseException, ImportRefusedException { + ObsProgram obsProgram = connectedUser.getProfile().getObsProgram(); + ImportResults result = new ImportResultsImpl(); - int currRow = 0; - SampleRow row = null; + if (ObsProgram.OBSDEB.equals(obsProgram)) { + TerrestrialDivisionDAO terrestrialDivisionDAO = WaoDAOHelper.getTerrestrialDivisionDAO(transaction); + List<TerrestrialDivision> terrestrialDivisions = terrestrialDivisionDAO.findAll(); - errorArgs.add(currRow); - errorArgs.add(null); + if (terrestrialDivisions.isEmpty()) { + throw new IllegalStateException("Le référentiel de stratification n'a pas été importé"); + } - CsvReader reader = new CsvReader(input, context.getCsvCharset()); - reader.readHeaders(); + SamplingPlanImportModel samplingPlanImportModel = new SamplingPlanImportModel(terrestrialDivisions); - ImportHelper.checkKeyHeader(reader, SAMPLING.PLAN_CODE); + try { + // SampleRowDAO dao = WaoDAOHelper.getSampleRowDAO(transaction); + Import<SampleRow> samplingPlanImport = new Import<SampleRow>(samplingPlanImportModel, input); + Iterator<SampleRow> it = samplingPlanImport.startImport(); + while (it.hasNext()) { + SampleRow sampleRow = it.next(); + sampleRow.clearSampleMonth(); - SampleRowDAO dao = WaoDAOHelper.getSampleRowDAO(transaction); + SampleRowLog sampleRowLog = executeGetNewSampleRowLog(sampleRow, connectedUser); - //int nbImported = 0; - //int nbRefused = 0; + try { + // WaoUtils.createOrUpdate(SampleRow.class, sampleRow, dao, SampleRow.PROPERTY_OBS_PROGRAM_ORDINAL, SampleRow.PROPERTY_CODE); + executeCreateUpdateSampleRow(transaction, sampleRow, new ArrayList<Boat>(), sampleRowLog); + } catch (Exception e) { + errorArgs.add(-1); + errorArgs.add(sampleRow.getCode()); + //errorArgs.add(e.getMessage()); + throw new ImportRefusedException(e.getMessage(), -1, "field", e); + } + } + transaction.commitTransaction(); + } finally { + IOUtils.closeQuietly(input); + } - while(reader.readRecord()) { + } else { - currRow++; + int currRow = 0; + SampleRow row = null; - if (log.isTraceEnabled()) { - log.trace(" " + Arrays.asList(reader.getValues())); - } + errorArgs.add(currRow); + errorArgs.add(null); - String code = ImportHelper.readSampleRowCode(reader); //reader.get(SAMPLING.PLAN_CODE.name()).trim(); + CsvReader reader = new CsvReader(input, context.getCsvCharset()); + reader.readHeaders(); - if (StringUtils.isEmpty(code)) { - continue; - } + ImportHelper.checkKeyHeader(reader, SAMPLING.PLAN_CODE); - errorArgs.set(0, currRow); - errorArgs.set(1, code); + SampleRowDAO dao = WaoDAOHelper.getSampleRowDAO(transaction); - String districts = ImportHelper.read(reader, FISHING_ZONE.PECHE_DIVISION); + //int nbImported = 0; + //int nbRefused = 0; - row = dao.findByCode(code); - // Refuse existing SampleRow - if (row != null) { - result.addError(currRow, "[CODE = " + code + "] refusé : Code déjà existant"); - result.incNbRefused(); - // Refuse Fishing zones empty - } else if (StringUtils.isEmpty(districts)) { - result.addError(currRow, "[CODE = " + code + "] refusé : Zone de pêche non renseigné"); - result.incNbRefused(); //nbRefused++; - } else { - row = dao.create(SampleRow.PROPERTY_CODE, code); - row.setObsProgram(obsProgram); + while(reader.readRecord()) { - String companyName = ImportHelper.read(reader, SAMPLING.SOCIETE_NOM); + currRow++; - // Create link with company if set in file - if (!StringUtils.isEmpty(companyName)) { - CompanyDAO companyDAO = WaoDAOHelper.getCompanyDAO(transaction); - Company company = companyDAO.findByName(companyName); - if (company == null) { - throw new WaoBusinessException(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); + if (log.isTraceEnabled()) { + log.trace(" " + Arrays.asList(reader.getValues())); } - // Import profession. Creation if not exist - Profession profession = importProfession(transaction, reader); - row.setProfession(profession); + String code = ImportHelper.readSampleRowCode(reader); //reader.get(SAMPLING.PLAN_CODE.name()).trim(); - // Import zones and set them to the row - // throw WaoException if FishingZone doesn't exist - importFishingZones(transaction, districts, currRow, row); + if (StringUtils.isEmpty(code)) { + continue; + } - updateRow(transaction, row, reader); - result.incNbImported(); //nbImported++; + errorArgs.set(0, currRow); + errorArgs.set(1, code); + + String districts = ImportHelper.read(reader, FISHING_ZONE.PECHE_DIVISION); + + row = dao.findByCode(code); + // Refuse existing SampleRow + if (row != null) { + result.addError(currRow, "[CODE = " + code + "] refusé : Code déjà existant"); + result.incNbRefused(); + // Refuse Fishing zones empty + } else if (StringUtils.isEmpty(districts)) { + result.addError(currRow, "[CODE = " + code + "] refusé : Zone de pêche non renseigné"); + result.incNbRefused(); //nbRefused++; + } else { + row = dao.create(SampleRow.PROPERTY_CODE, code); + row.setObsProgram(obsProgram); + + String companyName = ImportHelper.read(reader, SAMPLING.SOCIETE_NOM); + + // Create link with company if set in file + if (!StringUtils.isEmpty(companyName)) { + CompanyDAO companyDAO = WaoDAOHelper.getCompanyDAO(transaction); + Company company = companyDAO.findByName(companyName); + if (company == null) { + throw new WaoBusinessException(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 profession. Creation if not exist + Profession profession = importProfession(transaction, reader); + row.setProfession(profession); + + // Import zones and set them to the row + // throw WaoException if FishingZone doesn't exist + importFishingZones(transaction, districts, currRow, row); + + updateRow(transaction, row, reader); + result.incNbImported(); //nbImported++; + } + // Commit row by row + transaction.commitTransaction(); } - // Commit row by row - transaction.commitTransaction(); } - //transaction.closeContext(); - -// } catch (NumberFormatException eee) { -// context.serviceException(transaction, -// "Erreur à la ligne " + currRow + " [CODE = " + row.getCode() + "] : " + -// "Le format de la durée moyenne des marées est incorrect, il doit être de la forme : 1.9 ", eee); -// } catch (ParseException eee) { -// context.serviceException(transaction, -// "Erreur à la ligne " + currRow + " [CODE = " + row.getCode() + "] : " + -// "Le format des dates est incorrect, il doit être de la forme : MM/AAAA", eee); -// } catch (Exception eee) { -// context.serviceException(transaction, -// "Erreur à la ligne " + currRow + " [CODE = " + row.getCode() + "]", -// eee); -// } finally { -// context.closeTransaction(transaction); -// } 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 2011-03-03 13:44:16 UTC (rev 1052) +++ trunk/wao-business/src/main/resources/i18n/wao-business_en_GB.properties 2011-03-07 17:14:45 UTC (rev 1053) @@ -181,6 +181,7 @@ wao.error.serviceReferential.importTerrestrialDivisions= wao.error.serviceReferential.importTerrestrialLocations= wao.error.serviceReferential.updateAllContactStatesMotifs= +wao.error.serviceSampling.countSampleRows= wao.error.serviceSampling.createSampleRowLog= wao.error.serviceSampling.createUpdateSampleRow= wao.error.serviceSampling.deleteSampleRow= 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-03-03 13:44:16 UTC (rev 1052) +++ trunk/wao-business/src/main/resources/i18n/wao-business_fr_FR.properties 2011-03-07 17:14:45 UTC (rev 1053) @@ -181,6 +181,7 @@ wao.error.serviceReferential.importTerrestrialDivisions= wao.error.serviceReferential.importTerrestrialLocations= wao.error.serviceReferential.updateAllContactStatesMotifs= +wao.error.serviceSampling.countSampleRows= wao.error.serviceSampling.createSampleRowLog= wao.error.serviceSampling.createUpdateSampleRow=Impossible de sauvegarder la ligne d'\u00E9chantillon wao.error.serviceSampling.deleteSampleRow=Impossible de supprimer la ligne d'\u00E9chantillon \: %1$s Modified: trunk/wao-business/src/main/xmi/wao.zargo =================================================================== (Binary files differ) Modified: trunk/wao-business/src/test/java/fr/ifremer/wao/AbstractServiceTest.java =================================================================== --- trunk/wao-business/src/test/java/fr/ifremer/wao/AbstractServiceTest.java 2011-03-03 13:44:16 UTC (rev 1052) +++ trunk/wao-business/src/test/java/fr/ifremer/wao/AbstractServiceTest.java 2011-03-07 17:14:45 UTC (rev 1053) @@ -21,6 +21,8 @@ package fr.ifremer.wao; +import fr.ifremer.wao.bean.ConnectedUser; +import fr.ifremer.wao.bean.ConnectedUserImpl; import fr.ifremer.wao.bean.ContactState; import fr.ifremer.wao.bean.ObsProgram; import fr.ifremer.wao.bean.UserRole; @@ -35,8 +37,10 @@ import fr.ifremer.wao.entity.ElligibleBoatDAO; import fr.ifremer.wao.entity.SampleRow; import fr.ifremer.wao.entity.SampleRowDAO; +import fr.ifremer.wao.entity.UserProfileImpl; import fr.ifremer.wao.entity.WaoUser; import fr.ifremer.wao.entity.WaoUserDAO; +import fr.ifremer.wao.entity.WaoUserImpl; import fr.ifremer.wao.service.ServiceBoat; import fr.ifremer.wao.service.ServiceContact; import fr.ifremer.wao.service.ServiceReferential; @@ -552,7 +556,7 @@ input = getClass().getResourceAsStream("/import/echantillonnage.csv"); ServiceSampling serviceSampling = manager.getServiceSampling(); - serviceSampling.importSamplingPlanCsv(input, ObsProgram.OBSMER); + serviceSampling.importSamplingPlanCsv(input, getConnectedUser(null, UserRole.ADMIN, ObsProgram.OBSMER)); SampleRowDAO rowDAO = WaoDAOHelper.getSampleRowDAO(transaction); SampleRow row = rowDAO.findByCode("2010_0001"); @@ -621,4 +625,16 @@ contact6.setValidationProgram(Boolean.FALSE); serviceContact.saveContact(contact6, false); } + + public ConnectedUser getConnectedUser(WaoUser user, UserRole userRole, ObsProgram obsProgram) { + ConnectedUser connectedUser = new ConnectedUserImpl(); + if (user == null) { + WaoUser waoUser = new WaoUserImpl(); + connectedUser.setUser(waoUser); + } else { + connectedUser.setUser(user); + } + connectedUser.setProfile(new UserProfileImpl(obsProgram, userRole, true)); + return connectedUser; + } } Modified: trunk/wao-business/src/test/java/fr/ifremer/wao/entity/BoatImplTest.java =================================================================== --- trunk/wao-business/src/test/java/fr/ifremer/wao/entity/BoatImplTest.java 2011-03-03 13:44:16 UTC (rev 1052) +++ trunk/wao-business/src/test/java/fr/ifremer/wao/entity/BoatImplTest.java 2011-03-07 17:14:45 UTC (rev 1053) @@ -24,10 +24,12 @@ package fr.ifremer.wao.entity; +import fr.ifremer.wao.AbstractServiceTest; import fr.ifremer.wao.TestManager; import fr.ifremer.wao.WaoDAOHelper; import fr.ifremer.wao.bean.ContactState; import fr.ifremer.wao.bean.ObsProgram; +import fr.ifremer.wao.bean.UserRole; import fr.ifremer.wao.service.ServiceBoat; import fr.ifremer.wao.service.ServiceContact; import fr.ifremer.wao.service.ServiceSampling; @@ -54,7 +56,7 @@ * * @author fdesbois <fdesbois at codelutin.com> */ -public class BoatImplTest { +public class BoatImplTest extends AbstractServiceTest { private static TestManager manager; @@ -118,7 +120,7 @@ ServiceSampling serviceSampling = manager.getServiceSampling(); input = getClass().getResourceAsStream("/import/echantillonnage.csv"); - serviceSampling.importSamplingPlanCsv(input, ObsProgram.OBSMER); + serviceSampling.importSamplingPlanCsv(input, getConnectedUser(null, UserRole.ADMIN, ObsProgram.OBSMER)); SampleRowDAO rowDAO = WaoDAOHelper.getSampleRowDAO(transaction); SampleRow row = rowDAO.findByCode("2010_0001"); @@ -212,7 +214,7 @@ ServiceSampling serviceSampling = manager.getServiceSampling(); input = getClass().getResourceAsStream("/import/echantillonnage.csv"); - serviceSampling.importSamplingPlanCsv(input, ObsProgram.OBSMER); + serviceSampling.importSamplingPlanCsv(input, getConnectedUser(null, UserRole.ADMIN, ObsProgram.OBSMER)); SampleRowDAO rowDAO = WaoDAOHelper.getSampleRowDAO(transaction); SampleRow row = rowDAO.findByCode("2010_0001"); Modified: trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceBoatImplTest.java =================================================================== --- trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceBoatImplTest.java 2011-03-03 13:44:16 UTC (rev 1052) +++ trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceBoatImplTest.java 2011-03-07 17:14:45 UTC (rev 1053) @@ -24,6 +24,7 @@ package fr.ifremer.wao.service; +import fr.ifremer.wao.AbstractServiceTest; import fr.ifremer.wao.TestManager; import fr.ifremer.wao.WaoBusinessException; import fr.ifremer.wao.WaoDAOHelper; @@ -77,7 +78,7 @@ * * @author fdesbois <fdesbois at codelutin.com> */ -public class ServiceBoatImplTest { +public class ServiceBoatImplTest extends AbstractServiceTest { private static TestManager manager; @@ -237,7 +238,7 @@ ServiceSampling serviceSampling = manager.getServiceSampling(); input = getClass().getResourceAsStream("/import/echantillonnage.csv"); - serviceSampling.importSamplingPlanCsv(input, ObsProgram.OBSMER); + serviceSampling.importSamplingPlanCsv(input, getConnectedUser(null, UserRole.ADMIN, ObsProgram.OBSMER)); // Get two SampleRows : 2009_3 & 2010_4 SampleRowDAO rowDAO = WaoDAOHelper.getSampleRowDAO(transaction); Modified: trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceReferentialImplTest.java =================================================================== --- trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceReferentialImplTest.java 2011-03-03 13:44:16 UTC (rev 1052) +++ trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceReferentialImplTest.java 2011-03-07 17:14:45 UTC (rev 1053) @@ -29,6 +29,7 @@ import fr.ifremer.wao.bean.SamplingFilter; import fr.ifremer.wao.bean.SamplingFilterImpl; import fr.ifremer.wao.entity.FishingZone; +import org.apache.commons.io.IOUtils; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; @@ -159,10 +160,14 @@ } @Test - @Ignore("raise an exception due to business consistency, validation works") public void testImportTerrestrialDivision() { - InputStream input = getClass().getResourceAsStream("/import/terrestrialDivisions.csv"); - service.importTerrestrialDivisions(input); + InputStream input = null; + try { + input = getClass().getResourceAsStream("/import/purifiedTerrestrialDivisions.csv"); + service.importTerrestrialDivisions(input); + } finally { + IOUtils.closeQuietly(input); + } } } Modified: trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceSamplingImplTest.java =================================================================== --- trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceSamplingImplTest.java 2011-03-03 13:44:16 UTC (rev 1052) +++ trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceSamplingImplTest.java 2011-03-07 17:14:45 UTC (rev 1053) @@ -33,6 +33,7 @@ import fr.ifremer.wao.bean.SamplingFilter; import fr.ifremer.wao.bean.SamplingFilterImpl; import fr.ifremer.wao.bean.SamplingStrategy; +import fr.ifremer.wao.bean.UserRole; import fr.ifremer.wao.entity.Boat; import fr.ifremer.wao.entity.Company; import fr.ifremer.wao.entity.CompanyDAO; @@ -58,6 +59,7 @@ import fr.ifremer.wao.entity.TargetSpeciesDCFImpl; import fr.ifremer.wao.entity.WaoUser; import fr.ifremer.wao.io.ImportResults; +import org.apache.commons.io.IOUtils; import org.junit.Assert; import org.junit.Test; import org.nuiton.topia.TopiaContext; @@ -414,7 +416,7 @@ transaction.closeContext(); InputStream input = getClass().getResourceAsStream("/import/echantillonnage.csv"); - serviceSampling.importSamplingPlanCsv(input, ObsProgram.OBSMER); + serviceSampling.importSamplingPlanCsv(input, getConnectedUser(null, UserRole.ADMIN, ObsProgram.OBSMER)); /** EXEC METHOD **/ SamplingFilter filter = new SamplingFilterImpl(); @@ -433,22 +435,6 @@ assertEquals(1, results.size()); } - /** - * Test of getHistoric method, of class ServiceSamplingImpl. - */ - //@Test - public void testGetHistoric() throws Exception { - System.out.println("getHistoric"); - } - - /** - * Test of getSampleRow method, of class ServiceSamplingImpl. - */ - //@Test - public void testGetSampleRow() throws Exception { - System.out.println("getSampleRow"); - } - @Test public void testGetNewProfession() throws Exception { log.info("getNewProfession"); @@ -497,7 +483,7 @@ InputStream input = getClass().getResourceAsStream("/import/echantillonnage.csv"); - serviceSampling.importSamplingPlanCsv(input, ObsProgram.OBSMER); + serviceSampling.importSamplingPlanCsv(input, getConnectedUser(null, UserRole.ADMIN, ObsProgram.OBSMER)); SampleRowDAO rowDAO = WaoDAOHelper.getSampleRowDAO(transaction); SampleRow row = rowDAO.findByCode("2010_0001"); @@ -572,7 +558,7 @@ /** EXEC METHOD **/ InputStream input = getClass().getResourceAsStream("/import/echantillonnage.csv"); - ImportResults result = serviceSampling.importSamplingPlanCsv(input, ObsProgram.OBSMER); + ImportResults result = serviceSampling.importSamplingPlanCsv(input, getConnectedUser(null, UserRole.ADMIN, ObsProgram.OBSMER)); // total imported assertEquals(12, result.getNbRowsImported()); @@ -639,7 +625,7 @@ transaction.closeContext(); InputStream input = getClass().getResourceAsStream("/import/echantillonnage.csv"); - serviceSampling.importSamplingPlanCsv(input, ObsProgram.OBSMER); + serviceSampling.importSamplingPlanCsv(input, getConnectedUser(null, UserRole.ADMIN, ObsProgram.OBSMER)); /** EXEC METHOD **/ List<String> programs = serviceSampling.getPrograms(null); @@ -666,7 +652,7 @@ ServiceSampling serviceSampling = manager.getServiceSampling(); InputStream input = getClass().getResourceAsStream("/import/echantillonnage.csv"); - serviceSampling.importSamplingPlanCsv(input, ObsProgram.OBSMER); + serviceSampling.importSamplingPlanCsv(input, getConnectedUser(null, UserRole.ADMIN, ObsProgram.OBSMER)); transaction.closeContext(); @@ -687,4 +673,50 @@ // Assert.assertEquals("2010_04", code); } + /** + * Check that it's possible to import a sampling plan for the obsDeb Program + * + * @throws WaoBusinessException should not occur + */ + @Test + public void importObsdebSamplingPlan() throws WaoBusinessException { + ServiceReferential serviceReferential = manager.getServiceReferential(); + InputStream input = null; + try { + input = getClass().getResourceAsStream("/import/purifiedTerrestrialDivisions.csv"); + serviceReferential.importTerrestrialDivisions(input); + } finally { + IOUtils.closeQuietly(input); + } + + try { + input = getClass().getResourceAsStream("/import/samplingPlan-obsdeb.csv"); + serviceSampling.importSamplingPlanCsv(input, getConnectedUser(null, UserRole.ADMIN, ObsProgram.OBSDEB)); + } finally { + IOUtils.closeQuietly(input); + } + + SamplingFilter filter = new SamplingFilterImpl(); + filter.setObsProgram(ObsProgram.OBSDEB); + List<SampleRow> samplingPlan = serviceSampling.getSampleRowsByFilter(filter); + for (SampleRow sampleRow : samplingPlan) { + Assert.assertNotNull("all sample rows must have a code", sampleRow.getCode()); + Assert.assertNotNull("all sample rows must have a day", sampleRow.getDay()); + Assert.assertNotNull("all sample rows must have a location", sampleRow.getObservationUnit()); + Assert.assertNotNull("all sample rows must be attached to a port", sampleRow.getObservationUnit().getPort()); + } + Assert.assertEquals("there is two line to import", 2, samplingPlan.size()); + + // Now, let's try to re-import the same file and check that + // lines has been updated and no new line were added + try { + input = getClass().getResourceAsStream("/import/samplingPlan-obsdeb.csv"); + serviceSampling.importSamplingPlanCsv(input, getConnectedUser(null, UserRole.ADMIN, ObsProgram.OBSDEB)); + } finally { + IOUtils.closeQuietly(input); + } + samplingPlan = serviceSampling.getSampleRowsByFilter(filter); + Assert.assertEquals("there is two line to import", 2, samplingPlan.size()); + } + } Modified: trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceSynthesisImplTest.java =================================================================== --- trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceSynthesisImplTest.java 2011-03-03 13:44:16 UTC (rev 1052) +++ trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceSynthesisImplTest.java 2011-03-07 17:14:45 UTC (rev 1053) @@ -33,6 +33,7 @@ import fr.ifremer.wao.bean.ObsProgram; import fr.ifremer.wao.bean.SamplingFilter; import fr.ifremer.wao.bean.SamplingFilterImpl; +import fr.ifremer.wao.bean.UserRole; import fr.ifremer.wao.entity.Boat; import fr.ifremer.wao.entity.Company; import fr.ifremer.wao.entity.CompanyDAO; @@ -143,7 +144,7 @@ input = getClass().getResourceAsStream("/import/echantillonnage.csv"); ServiceSampling serviceSampling = manager.getServiceSampling(); - serviceSampling.importSamplingPlanCsv(input, ObsProgram.OBSMER); + serviceSampling.importSamplingPlanCsv(input, getConnectedUser(null, UserRole.ADMIN, ObsProgram.OBSMER)); SampleRowDAO rowDAO = WaoDAOHelper.getSampleRowDAO(transaction); SampleRow row = rowDAO.findByCode("2010_0001"); @@ -233,7 +234,7 @@ input = getClass().getResourceAsStream("/import/echantillonnage.csv"); ServiceSampling serviceSampling = manager.getServiceSampling(); - serviceSampling.importSamplingPlanCsv(input, ObsProgram.OBSMER); + serviceSampling.importSamplingPlanCsv(input, getConnectedUser(null, UserRole.ADMIN, ObsProgram.OBSMER)); SampleRowDAO rowDAO = WaoDAOHelper.getSampleRowDAO(transaction); SampleRow row = rowDAO.findByCode("2010_0001"); @@ -515,7 +516,7 @@ input = getClass().getResourceAsStream("/import/echantillonnage.csv"); ServiceSampling serviceSampling = manager.getServiceSampling(); - serviceSampling.importSamplingPlanCsv(input, ObsProgram.OBSMER); + serviceSampling.importSamplingPlanCsv(input, getConnectedUser(null, UserRole.ADMIN, ObsProgram.OBSMER)); SampleRowDAO rowDAO = WaoDAOHelper.getSampleRowDAO(transaction); SampleRow row = rowDAO.findByCode("2010_0001"); Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/components/Layout.java =================================================================== --- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/components/Layout.java 2011-03-03 13:44:16 UTC (rev 1052) +++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/components/Layout.java 2011-03-07 17:14:45 UTC (rev 1053) @@ -25,10 +25,12 @@ package fr.ifremer.wao.ui.components; import fr.ifremer.wao.bean.ConnectedUser; +import fr.ifremer.wao.bean.ObsProgram; import fr.ifremer.wao.ui.pages.Administration; import fr.ifremer.wao.ui.pages.Boats; import fr.ifremer.wao.ui.pages.Contacts; import fr.ifremer.wao.ui.pages.Index; +import fr.ifremer.wao.ui.pages.ObsDebSamplingPlan; import fr.ifremer.wao.ui.pages.SamplingPlan; import fr.ifremer.wao.ui.pages.Synthesis; import fr.ifremer.wao.ui.services.ServiceAuthentication; @@ -156,18 +158,21 @@ if (menuItems == null) { Messages messages = resources.getMessages(); - Map<String, Class> pagesInMenu = new LinkedHashMap<String, Class>(); + Map<Class, String> pagesInMenu = new LinkedHashMap<Class, String>(); - pagesInMenu.put(messages.get(n_("wao.ui.page.SamplingPlan.title")), SamplingPlan.class); - pagesInMenu.put(messages.get(n_("wao.ui.page.Boats.title")), Boats.class); - pagesInMenu.put(messages.get(n_("wao.ui.page.Contacts.title")), Contacts.class); - pagesInMenu.put(messages.get(n_("wao.ui.page.Synthesis.title")), Synthesis.class); - pagesInMenu.put(messages.get(n_("wao.ui.page.Administration.title")), Administration.class); + // Adding all pages that may be in the main menu + pagesInMenu.put(SamplingPlan.class, messages.get(n_("wao.ui.page.SamplingPlan.title"))); + pagesInMenu.put(ObsDebSamplingPlan.class, messages.get(n_("wao.ui.page.SamplingPlan.title"))); + pagesInMenu.put(Boats.class, messages.get(n_("wao.ui.page.Boats.title"))); + pagesInMenu.put(Contacts.class, messages.get(n_("wao.ui.page.Contacts.title"))); + pagesInMenu.put(Synthesis.class, messages.get(n_("wao.ui.page.Synthesis.title"))); + pagesInMenu.put(Administration.class, messages.get(n_("wao.ui.page.Administration.title"))); + // now creating the menu by adding only authorized pages menuItems = new LinkedHashMap<String, String>(); - for (Map.Entry<String, Class> menuEntry : pagesInMenu.entrySet()) { - String linkName = menuEntry.getKey(); - Class page = menuEntry.getValue(); + for (Map.Entry<Class, String> menuEntry : pagesInMenu.entrySet()) { + Class page = menuEntry.getKey(); + String linkName = menuEntry.getValue(); if (serviceAuthentication.isAllowed(page)) { Link link = pageRender.createPageRenderLinkWithContext(page); Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/data/ContactDataSource.java =================================================================== --- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/data/ContactDataSource.java 2011-03-03 13:44:16 UTC (rev 1052) +++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/data/ContactDataSource.java 2011-03-07 17:14:45 UTC (rev 1053) @@ -29,8 +29,6 @@ import fr.ifremer.wao.entity.Contact; import fr.ifremer.wao.service.ServiceContact; import org.apache.tapestry5.grid.SortConstraint; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import java.util.Map; @@ -43,8 +41,6 @@ */ public class ContactDataSource extends AbstractMappedGridDataSource<String, Contact> { - private static Logger log = LoggerFactory.getLogger(ContactDataSource.class); - private ContactFilter filter; private ServiceContact serviceContact; Added: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/data/SampleRowDataSource.java =================================================================== --- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/data/SampleRowDataSource.java (rev 0) +++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/data/SampleRowDataSource.java 2011-03-07 17:14:45 UTC (rev 1053) @@ -0,0 +1,43 @@ +package fr.ifremer.wao.ui.data; + +import fr.ifremer.wao.WaoException; +import fr.ifremer.wao.WaoUtils; +import fr.ifremer.wao.bean.SamplingFilter; +import fr.ifremer.wao.entity.SampleRow; +import fr.ifremer.wao.service.ServiceSampling; +import org.apache.tapestry5.grid.SortConstraint; + +import java.util.List; +import java.util.Map; + +public class SampleRowDataSource extends AbstractMappedGridDataSource<String, SampleRow> { + + protected SamplingFilter filter; + + protected ServiceSampling serviceSampling; + + public SampleRowDataSource(SamplingFilter filter, ServiceSampling serviceSampling) { + this.filter = filter; + this.serviceSampling = serviceSampling; + } + + @Override + protected Map<String, SampleRow> execute(int startIndex, int endIndex, SortConstraint orderBy) throws WaoException { + filter.setStartIndex(startIndex); + filter.setEndIndex(endIndex); + List<SampleRow> sampleRows = serviceSampling.getSampleRowsByFilter(filter); + Map<String, SampleRow> result = WaoUtils.projectPropertyUnique(sampleRows, SampleRow.TOPIA_ID); + return result; + } + + @Override + protected int count() throws WaoException { + int count = serviceSampling.countSampleRows(filter); + return count; + } + + @Override + public Class<?> getRowType() { + return SampleRow.class; + } +} 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-03-03 13:44:16 UTC (rev 1052) +++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Administration.java 2011-03-07 17:14:45 UTC (rev 1053) @@ -209,8 +209,7 @@ @Override public ImportResults execute(InputStream input) throws WaoException, WaoBusinessException { - ImportResults results = serviceSampling.importSamplingPlanCsv(input, - currentUser.getProfile().getObsProgram()); + ImportResults results = serviceSampling.importSamplingPlanCsv(input, currentUser); return results; } }; @@ -258,6 +257,18 @@ }; } + public ImportEngine getTerrestrialDivisionsImportEngine() { + return new ImportEngine() { + + @Override + public ImportResults execute(InputStream input) + throws WaoException, WaoBusinessException { + serviceReferential.importTerrestrialDivisions(input); + return null; + } + }; + } + public InputStream getActivityCalendarLogFile() { return getActivityCalendarLogFile(WaoProperty.FILENAME_LOG_ACTIVITY_IMPORT); } Added: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/ObsDebSamplingPlan.java =================================================================== --- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/ObsDebSamplingPlan.java (rev 0) +++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/ObsDebSamplingPlan.java 2011-03-07 17:14:45 UTC (rev 1053) @@ -0,0 +1,63 @@ +package fr.ifremer.wao.ui.pages; + + +import fr.ifremer.wao.bean.ObsProgram; +import fr.ifremer.wao.bean.SamplingFilter; +import fr.ifremer.wao.bean.SamplingFilterImpl; +import fr.ifremer.wao.entity.SampleRow; +import fr.ifremer.wao.service.ServiceSampling; +import fr.ifremer.wao.ui.data.SampleRowDataSource; +import org.apache.tapestry5.ComponentResources; +import org.apache.tapestry5.annotations.Property; +import org.apache.tapestry5.beaneditor.BeanModel; +import org.apache.tapestry5.grid.GridDataSource; +import org.apache.tapestry5.ioc.annotations.Inject; +import org.apache.tapestry5.services.BeanModelSource; + +public class ObsDebSamplingPlan { + + /********* Tapestry stuffs **********/ + + @Inject + private BeanModelSource beanModelSource; + + @Inject + private ComponentResources resources; + + @Inject + private ServiceSampling serviceSampling; + + + /********* FILTERS ********/ + + public SamplingFilter getSamplingFilter() { + SamplingFilter samplingFilter = new SamplingFilterImpl(); + samplingFilter.setObsProgram(ObsProgram.OBSDEB); + return samplingFilter; + } + + /********* GRID ********/ + + private GridDataSource sampleRows; + + @Property + private SampleRow sampleRow; + + public GridDataSource getSampleRows() { + if (sampleRows == null) { + sampleRows = new SampleRowDataSource(getSamplingFilter(), serviceSampling); + } + return sampleRows; + } + + private BeanModel<SampleRow> obsdebSamplingPlanModel; + + public BeanModel<SampleRow> getObsdebSamplingPlanModel() { + if (obsdebSamplingPlanModel == null) { + obsdebSamplingPlanModel = beanModelSource.createDisplayModel(SampleRow.class, resources.getMessages()); + obsdebSamplingPlanModel.include(SampleRow.PROPERTY_CODE, SampleRow.PROPERTY_DAY, SampleRow.PROPERTY_COMMENT); + obsdebSamplingPlanModel.add(SampleRow.PROPERTY_OBSERVATION_UNIT); + } + return obsdebSamplingPlanModel; + } +} 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 2011-03-03 13:44:16 UTC (rev 1052) +++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/SamplingPlan.java 2011-03-07 17:14:45 UTC (rev 1053) @@ -79,7 +79,7 @@ * * @author fdesbois <fdesbois at codelutin.com> */ - at RequiresAuthentication + at RequiresAuthentication(allowedPrograms = {ObsProgram.OBSMER, ObsProgram.OBSVENTE}) @Import(stylesheet = "context:css/sampling.css") public class SamplingPlan extends AbstractFilteredPage { 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-03-03 13:44:16 UTC (rev 1052) +++ trunk/wao-ui/src/main/resources/i18n/wao-ui_en_GB.properties 2011-03-07 17:14:45 UTC (rev 1053) @@ -166,6 +166,7 @@ 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.samplingPlanLabel=of the sampling plan +wao.ui.import.terrestrialDivisionsLabel=of the terrestrial divisions (ObsDeb) wao.ui.import.terrestrialLocationsLabel=of the terrestrial locations wao.ui.import.title=Import %s wao.ui.indicator.andMore=%s and more 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-03-03 13:44:16 UTC (rev 1052) +++ trunk/wao-ui/src/main/resources/i18n/wao-ui_fr_FR.properties 2011-03-07 17:14:45 UTC (rev 1053) @@ -166,6 +166,7 @@ wao.ui.import.fullDescription=Import %s (format %s avec encodage UTF-8) wao.ui.import.longTitle=Import/Export CSV (UTF-8) wao.ui.import.samplingPlanLabel=du plan d'\u00E9chantillonnage +wao.ui.import.terrestrialDivisionsLabel=du r\u00E9f\u00E9rentiel de stratification spatiale (ObsDeb) wao.ui.import.terrestrialLocationsLabel=des lieux terrestres wao.ui.import.title=Import %s wao.ui.indicator.andMore=%s et plus Modified: trunk/wao-ui/src/main/webapp/Administration.tml =================================================================== --- trunk/wao-ui/src/main/webapp/Administration.tml 2011-03-03 13:44:16 UTC (rev 1052) +++ trunk/wao-ui/src/main/webapp/Administration.tml 2011-03-07 17:14:45 UTC (rev 1053) @@ -178,6 +178,10 @@ </t:unless> <t:importFieldSet t:label="${message:wao.ui.import.terrestrialLocationsLabel}" t:engine="terrestrialLocationsImportEngine" /> + + <t:if test="currentUser.obsDeb"> + <t:importFieldSet t:label="${message:wao.ui.import.terrestrialDivisionsLabel}" t:engine="terrestrialDivisionsImportEngine" /> + </t:if> </t:if> <div class="mtop10" /> Added: trunk/wao-ui/src/main/webapp/ObsDebSamplingPlan.tml =================================================================== --- trunk/wao-ui/src/main/webapp/ObsDebSamplingPlan.tml (rev 0) +++ trunk/wao-ui/src/main/webapp/ObsDebSamplingPlan.tml 2011-03-07 17:14:45 UTC (rev 1053) @@ -0,0 +1,8 @@ +<t:layout t:pageTitle="${message:wao.ui.page.SamplingPlan.title}" t:contentId="wao-obsdebsamplingplan" + xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd" xmlns:p="tapestry:parameter"> + + <div t:type="grid" t:source="sampleRows" t:row="sampleRow" t:model="obsdebSamplingPlanModel" t:rowsPerPage="20"> + + </div> + +</t:layout> \ No newline at end of file