[Suiviobsmer-commits] r551 - in trunk/wao-ui/src/main: java/fr/ifremer/wao/ui/components java/fr/ifremer/wao/ui/data java/fr/ifremer/wao/ui/pages resources/fr/ifremer/wao/ui/components webapp
Author: fdesbois Date: 2010-06-18 14:35:41 +0000 (Fri, 18 Jun 2010) New Revision: 551 Log: Evo #2018 : refactor imports, all admin imports need to be on administration page. Use ImportEngine interface + CsvImport component. Added: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/components/CsvImport.java trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/data/ErrorReport.java trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/data/ImportEngine.java trunk/wao-ui/src/main/resources/fr/ifremer/wao/ui/components/CsvImport.tml 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/SamplingPlan.java trunk/wao-ui/src/main/webapp/Administration.tml trunk/wao-ui/src/main/webapp/SamplingPlan.tml Added: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/components/CsvImport.java =================================================================== --- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/components/CsvImport.java (rev 0) +++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/components/CsvImport.java 2010-06-18 14:35:41 UTC (rev 551) @@ -0,0 +1,73 @@ +package fr.ifremer.wao.ui.components; + +import fr.ifremer.wao.WaoBusinessException; +import fr.ifremer.wao.WaoException; +import fr.ifremer.wao.bean.ImportResults; +import fr.ifremer.wao.ui.data.ErrorReport; +import fr.ifremer.wao.ui.data.ImportEngine; +import fr.ifremer.wao.ui.services.WaoManager; +import org.apache.tapestry5.BindingConstants; +import org.apache.tapestry5.ComponentResources; +import org.apache.tapestry5.annotations.Log; +import org.apache.tapestry5.annotations.Parameter; +import org.apache.tapestry5.annotations.Property; +import org.apache.tapestry5.ioc.Messages; +import org.apache.tapestry5.ioc.annotations.Inject; +import org.apache.tapestry5.upload.services.UploadedFile; +import org.slf4j.Logger; + +import java.util.List; + +/** + * Created: 18 juin 2010 + * + * @author fdesbois <fdesbois at codelutin.com> + * @version $Id$ + */ +public class CsvImport { + + static final String EVENT_IMPORTED = "imported"; + + @Parameter(required = true, defaultPrefix = BindingConstants.LITERAL) + @Property + private String label; + + @Parameter(required = true) + private ImportEngine engine; + + @Inject + private WaoManager manager; + + @Inject + private ComponentResources resources; + + @Inject + private Messages messages; + + @Inject + private Logger logger; + + @Property + private UploadedFile csvFile; + + @Log + void onSuccessFromImportCsv() { + final ErrorReport errorReport = new ErrorReport(); + + try { + ImportResults result = engine.execute(csvFile.getStream()); + errorReport.addInfo(result.getNbRowsImported() + " lignes importées, " + + result.getNbRowsRefused() + " refusées."); + List<String> errors = result.getErrors(); + errorReport.addError(errors.toArray(new String[errors.size()])); + } catch (WaoBusinessException eee) { + errorReport.addError(eee.getMessage()); + } catch (WaoException eee) { + String[] errors = + manager.getErrorMessages(eee, messages, logger); + errorReport.addError(errors); + } + + resources.triggerEvent(EVENT_IMPORTED, new Object[] {errorReport}, null); + } +} Added: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/data/ErrorReport.java =================================================================== --- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/data/ErrorReport.java (rev 0) +++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/data/ErrorReport.java 2010-06-18 14:35:41 UTC (rev 551) @@ -0,0 +1,41 @@ +package fr.ifremer.wao.ui.data; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created: 18 juin 2010 + * + * @author fdesbois <fdesbois at codelutin.com> + * @version $Id$ + */ +public class ErrorReport { + + protected List<String> infos; + + protected List<String> errors; + + public void addInfo(String info) { + getInfos().add(info); + } + + public void addError(String... errors) { + for (String error : errors) { + getErrors().add(error); + } + } + + public List<String> getInfos() { + if (infos == null) { + infos = new ArrayList<String>(); + } + return infos; + } + + public List<String> getErrors() { + if (errors == null) { + errors = new ArrayList<String>(); + } + return errors; + } +} Added: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/data/ImportEngine.java =================================================================== --- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/data/ImportEngine.java (rev 0) +++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/data/ImportEngine.java 2010-06-18 14:35:41 UTC (rev 551) @@ -0,0 +1,21 @@ +package fr.ifremer.wao.ui.data; + +import fr.ifremer.wao.WaoBusinessException; +import fr.ifremer.wao.WaoException; +import fr.ifremer.wao.bean.ImportResults; +import fr.ifremer.wao.ui.components.Layout; + +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; + +/** + * Created: 18 juin 2010 + * + * @author fdesbois <fdesbois at codelutin.com> + * @version $Id$ + */ +public interface ImportEngine { + + ImportResults execute(InputStream input) throws WaoException, WaoBusinessException; +} 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 2010-06-18 13:39:46 UTC (rev 550) +++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Administration.java 2010-06-18 14:35:41 UTC (rev 551) @@ -28,21 +28,27 @@ import fr.ifremer.wao.WaoBusinessException; import fr.ifremer.wao.WaoBusinessException.Type; import fr.ifremer.wao.WaoException; +import fr.ifremer.wao.bean.ConnectedUser; +import fr.ifremer.wao.bean.ImportResults; +import fr.ifremer.wao.bean.ImportResultsImpl; import fr.ifremer.wao.bean.UserRole; import fr.ifremer.wao.entity.Company; import fr.ifremer.wao.entity.CompanyImpl; import fr.ifremer.wao.entity.WaoUser; import fr.ifremer.wao.service.ServiceReferential; +import fr.ifremer.wao.service.ServiceSampling; import fr.ifremer.wao.service.ServiceUser; +import fr.ifremer.wao.ui.data.ErrorReport; import fr.ifremer.wao.ui.data.GenericSelectModel; import fr.ifremer.wao.ui.components.Layout; +import fr.ifremer.wao.ui.data.ImportEngine; import fr.ifremer.wao.ui.data.RequiresAuthentication; import fr.ifremer.wao.ui.services.WaoManager; + +import java.io.InputStream; import java.util.List; import org.apache.commons.lang.StringUtils; -import org.apache.tapestry5.ComponentResources; import org.apache.tapestry5.EventContext; -import org.apache.tapestry5.PersistenceConstants; import org.apache.tapestry5.annotations.IncludeStylesheet; import org.apache.tapestry5.annotations.InjectComponent; import org.apache.tapestry5.annotations.Log; @@ -51,7 +57,6 @@ import org.apache.tapestry5.annotations.SessionState; import org.apache.tapestry5.beaneditor.BeanModel; import org.apache.tapestry5.corelib.components.BeanEditForm; -import org.apache.tapestry5.corelib.components.Form; import org.apache.tapestry5.corelib.components.Zone; import org.apache.tapestry5.ioc.Messages; import org.apache.tapestry5.ioc.annotations.Inject; @@ -72,16 +77,19 @@ @IncludeStylesheet("context:css/administration.css") public class Administration { - @Inject - private Logger logger; - @InjectComponent private Layout layout; @SessionState - private WaoUser currentUser; + private ConnectedUser currentUser; @Inject + private Logger logger; + + @Inject + private WaoManager manager; + + @Inject private ServiceUser serviceUser; @Inject @@ -90,6 +98,9 @@ @Inject private TypeCoercer typeCoercer; + @Inject + private Messages messages; + @Property private String companyId; @@ -135,31 +146,41 @@ return new String[] {companyId, userId}; } - /**************************** IMPORT (ADMIN) *******************************/ + /**************************** IMPORTS (ADMIN) *******************************/ - /** - * CSV File which contains fishing zones - */ - @Property - private UploadedFile fishingZoneCsvFile; - @Inject - private Messages messages; + private ServiceSampling serviceSampling; - @Inject - private WaoManager manager; + public ImportEngine getFishingZoneImportEngine() { + return new ImportEngine() { + @Override + public ImportResults execute(InputStream input) throws WaoException, WaoBusinessException { + int nbImported = serviceReferential.importFishingZoneCsv(input); + ImportResults results = new ImportResultsImpl(); + results.setNbRowsImported(nbImported); + return results; + } + }; + } + public ImportEngine getSamplingPlanImportEngine() { + return new ImportEngine() { + @Override + public ImportResults execute(InputStream input) throws WaoException, WaoBusinessException { + ImportResults results = serviceSampling.importSamplingPlanCsv(input); + return results; + } + }; + } + @Log - void onSuccessFromImportFishingZones() { - try { - int result = serviceReferential.importFishingZoneCsv( - fishingZoneCsvFile.getStream()); - layout.addInfo(result + " zones de pêche importées"); - } catch (WaoException eee) { - String[] errors = - manager.getErrorMessages(eee, messages, logger); - layout.addError(errors); + void onImported(ErrorReport report) { + for (String info : report.getInfos()) { + layout.addInfo(info); } + for (String error : report.getErrors()) { + layout.addError(error); + } } /**************************** FORMS ****************************************/ 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-06-18 13:39:46 UTC (rev 550) +++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/SamplingPlan.java 2010-06-18 14:35:41 UTC (rev 551) @@ -118,33 +118,33 @@ /**************************** IMPORT (ADMIN) *******************************/ - /** - * Fichier CSV contenant un plan d'échantillonnage - */ - @Property - private UploadedFile samplingPlanCsvFile; - - public boolean canImportSamplingPlan() { - return user.isAdmin() && !user.isReadOnly(); - } - - @Log - void onSuccessFromImportSamplingPlan() throws WaoException { - if (canImportSamplingPlan()) { - try { - ImportResults result = serviceSampling.importSamplingPlanCsv( - samplingPlanCsvFile.getStream()); - layout.addInfo(result.getNbRowsImported() + - " lignes du plan importés, " + - result.getNbRowsRefused() + " refusés."); - for (String error : result.getErrors()) { - layout.addInfo(error); - } - } catch (WaoBusinessException eee) { - layout.addError(eee.getMessage()); - } - } - } +// /** +// * Fichier CSV contenant un plan d'échantillonnage +// */ +// @Property +// private UploadedFile samplingPlanCsvFile; +// +// public boolean canImportSamplingPlan() { +// return user.isAdmin() && !user.isReadOnly(); +// } +// +// @Log +// void onSuccessFromImportSamplingPlan() throws WaoException { +// if (canImportSamplingPlan()) { +// try { +// ImportResults result = serviceSampling.importSamplingPlanCsv( +// samplingPlanCsvFile.getStream()); +// layout.addInfo(result.getNbRowsImported() + +// " lignes du plan importés, " + +// result.getNbRowsRefused() + " refusés."); +// for (String error : result.getErrors()) { +// layout.addInfo(error); +// } +// } catch (WaoBusinessException eee) { +// layout.addError(eee.getMessage()); +// } +// } +// } /**************************** EXPORT **************************************/ Added: trunk/wao-ui/src/main/resources/fr/ifremer/wao/ui/components/CsvImport.tml =================================================================== --- trunk/wao-ui/src/main/resources/fr/ifremer/wao/ui/components/CsvImport.tml (rev 0) +++ trunk/wao-ui/src/main/resources/fr/ifremer/wao/ui/components/CsvImport.tml 2010-06-18 14:35:41 UTC (rev 551) @@ -0,0 +1,16 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd" xmlns:p="tapestry:parameter"> + + <div class="so-import"> + <form t:type="form" t:id="importCsv" action="post"> + <fieldset> + <legend>Import ${label}</legend> + <t:errors /> + <label for="csvFile">Fichier CSV ${label}</label> : + <input t:type="upload" t:id="csvFile" t:validate="required" /> + <input t:type="submit" class="ico import" value="OK" title="Import ${label} (format CSV avec encodage UTF-8)" /> + </fieldset> + </form> + </div> + +</html> \ No newline at end of file Modified: trunk/wao-ui/src/main/webapp/Administration.tml =================================================================== --- trunk/wao-ui/src/main/webapp/Administration.tml 2010-06-18 13:39:46 UTC (rev 550) +++ trunk/wao-ui/src/main/webapp/Administration.tml 2010-06-18 14:35:41 UTC (rev 551) @@ -31,18 +31,10 @@ <t:layout t:pageTitle="Administration" t:contentId="so-admin" xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd" xmlns:p="tapestry:parameter"> - <div class="so-import"> - <fieldset> - <legend>Import des zones de pêche</legend> - <form t:type="form" t:id="importFishingZones"> - <t:errors /> - <t:label for="fishingZoneCsvFile" /> : - <input t:type="upload" t:id="fishingZoneCsvFile" t:validate="required" /> - <input t:type="submit" class="ico import" value="OK" title="Importer des zones de pêche (format CSV avec encodage UTF-8)" /> - </form> - </fieldset> - </div> + <t:csvImport t:label="des zones de pêche" t:engine="fishingZoneImportEngine" /> + <t:csvImport t:label="du plan d'échantillonnage" t:engine="samplingPlanImportEngine" /> + <form class="actions clearfix" t:type="form" t:id="actionsForm"> <div class="fields fleft"> <t:label t:for="companies" /> : Modified: trunk/wao-ui/src/main/webapp/SamplingPlan.tml =================================================================== --- trunk/wao-ui/src/main/webapp/SamplingPlan.tml 2010-06-18 13:39:46 UTC (rev 550) +++ trunk/wao-ui/src/main/webapp/SamplingPlan.tml 2010-06-18 14:35:41 UTC (rev 551) @@ -31,19 +31,19 @@ <t:layout t:pageTitle="Plan d'Echantillonnage" t:contentId="so-sampling" xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd" xmlns:p="tapestry:parameter"> <div class="${mainClass}"> - <t:if t:test="canImportSamplingPlan()"> - <div class="so-import"> - <form t:type="form" t:id="importSamplingPlan" action="post"> - <fieldset> - <legend>Import d'un nouveau plan d'échantillonnage</legend> - <t:errors /> - <t:label for="samplingPlanCsvFile" /> : - <input t:type="upload" t:id="samplingPlanCsvFile" t:validate="required" /> - <input t:type="submit" class="ico import" value="OK" title="Importer un plan d'échantillonnage (format CSV avec encodage UTF-8)" /> - </fieldset> - </form> - </div> - </t:if> + <!--<t:if t:test="canImportSamplingPlan()">--> + <!--<div class="so-import">--> + <!--<form t:type="form" t:id="importSamplingPlan" action="post">--> + <!--<fieldset>--> + <!--<legend>Import d'un nouveau plan d'échantillonnage</legend>--> + <!--<t:errors />--> + <!--<t:label for="samplingPlanCsvFile" /> :--> + <!--<input t:type="upload" t:id="samplingPlanCsvFile" t:validate="required" />--> + <!--<input t:type="submit" class="ico import" value="OK" title="Importer un plan d'échantillonnage (format CSV avec encodage UTF-8)" />--> + <!--</fieldset>--> + <!--</form>--> + <!--</div>--> + <!--</t:if>--> <div class="clearfix mbottom10"> <div class="clearfix"> <h1 class="fleft">Plan d'échantillonnage</h1>
participants (1)
-
fdesbois@users.labs.libre-entreprise.org