Author: bleny Date: 2014-03-18 18:28:59 +0100 (Tue, 18 Mar 2014) New Revision: 1726 Url: http://forge.codelutin.com/projects/wao/repository/revisions/1726 Log: refs #4483 add import UI Added: trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/AbstractImportCsvAction.java trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/ImportSamplingPlanAction.java trunk/wao-web/src/main/webapp/WEB-INF/content/obsmer/import-sampling-plan-input.jsp Modified: trunk/wao-services/src/main/java/fr/ifremer/wao/services/AuthenticatedWaoUser.java trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/administration/AbstractImportReferentialAction.java trunk/wao-web/src/main/resources/i18n/wao-web_en_GB.properties trunk/wao-web/src/main/resources/i18n/wao-web_fr_FR.properties trunk/wao-web/src/main/webapp/WEB-INF/content/administration/companies.jsp trunk/wao-web/src/main/webapp/WEB-INF/content/administration/referential-management.jsp trunk/wao-web/src/main/webapp/WEB-INF/decorators/layout.jsp Modified: trunk/wao-services/src/main/java/fr/ifremer/wao/services/AuthenticatedWaoUser.java =================================================================== --- trunk/wao-services/src/main/java/fr/ifremer/wao/services/AuthenticatedWaoUser.java 2014-03-18 16:39:19 UTC (rev 1725) +++ trunk/wao-services/src/main/java/fr/ifremer/wao/services/AuthenticatedWaoUser.java 2014-03-18 17:28:59 UTC (rev 1726) @@ -175,4 +175,7 @@ return userProfile.isCoordinator(); } + public boolean isAuthorizedToImportSamplingPlan() { + return userProfile.isAdmin(); + } } Added: trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/AbstractImportCsvAction.java =================================================================== --- trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/AbstractImportCsvAction.java (rev 0) +++ trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/AbstractImportCsvAction.java 2014-03-18 17:28:59 UTC (rev 1726) @@ -0,0 +1,99 @@ +package fr.ifremer.wao.web.action; + +import com.google.common.collect.ImmutableSet; +import fr.ifremer.wao.WaoTechnicalException; +import fr.ifremer.wao.services.service.ImportErrorException; +import fr.ifremer.wao.services.service.administration.ReferentialService; +import fr.ifremer.wao.web.WaoJspActionSupport; +import org.apache.commons.io.IOUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.InputStream; + +public abstract class AbstractImportCsvAction extends WaoJspActionSupport { + + private static final Log log = LogFactory.getLog(AbstractImportCsvAction.class); + + protected static final ImmutableSet<String> CSV_CONTENT_TYPES = + ImmutableSet.of("text/csv", "text/comma-separated-values", "application/vnd.ms-excel"); + + protected ReferentialService service; + + protected File csvFile; + + protected String csvFileContentType; + + public void setCsvFile(File csvFile) { + this.csvFile = csvFile; + } + + public void setCsvFileContentType(String csvFileContentType) { + this.csvFileContentType = csvFileContentType; + } + + public void setService(ReferentialService service) { + this.service = service; + } + + protected abstract void importCsv(InputStream csvInputStream) throws ImportErrorException; + + protected abstract String getSuccessMessage(); + + @Override + public String execute() { + + String result = SUCCESS; + + if (CSV_CONTENT_TYPES.contains(csvFileContentType)) { + + InputStream csvInputStream = null; + + try { + + csvInputStream = new FileInputStream(csvFile); + + importCsv(csvInputStream); + + session.addMessage(getSuccessMessage()); + + } catch (FileNotFoundException e) { + + if (log.isErrorEnabled()) { + log.error("should never occur", e); + } + + throw new WaoTechnicalException(e); + + } catch (ImportErrorException e) { + + session.addErrorMessages(e.getMessage()); + + result = ERROR; + + } finally { + + IOUtils.closeQuietly(csvInputStream); + + } + + } else { + + if (log.isWarnEnabled()) { + log.warn("content type " + csvFileContentType + " is not CSV compatible"); + } + + session.addErrorMessages(t("wao.ui.import.csvTypeRequired", csvFileContentType)); + + result = ERROR; + + } + + return result; + + } + +} Modified: trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/administration/AbstractImportReferentialAction.java =================================================================== --- trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/administration/AbstractImportReferentialAction.java 2014-03-18 16:39:19 UTC (rev 1725) +++ trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/administration/AbstractImportReferentialAction.java 2014-03-18 17:28:59 UTC (rev 1726) @@ -1,105 +1,14 @@ package fr.ifremer.wao.web.action.administration; -import com.google.common.collect.ImmutableSet; -import fr.ifremer.wao.WaoTechnicalException; -import fr.ifremer.wao.services.service.ImportErrorException; -import fr.ifremer.wao.services.service.administration.ReferentialService; -import fr.ifremer.wao.web.WaoJspActionSupport; -import org.apache.commons.io.IOUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; +import fr.ifremer.wao.web.action.AbstractImportCsvAction; import org.apache.struts2.convention.annotation.Result; import org.apache.struts2.convention.annotation.Results; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.InputStream; - @Results({ @Result(name="error", type="redirectAction", params = { "actionName", "referential-management" }), @Result(name="success", type="redirectAction", params = { "actionName", "referential-management" }) }) -public abstract class AbstractImportReferentialAction extends WaoJspActionSupport { +public abstract class AbstractImportReferentialAction extends AbstractImportCsvAction { - private static final Log log = LogFactory.getLog(AbstractImportReferentialAction.class); - protected static final ImmutableSet<String> CSV_CONTENT_TYPES = - ImmutableSet.of("text/csv", "text/comma-separated-values", "application/vnd.ms-excel"); - - protected ReferentialService service; - - protected File csvFile; - - protected String csvFileContentType; - - public void setCsvFile(File csvFile) { - this.csvFile = csvFile; - } - - public void setCsvFileContentType(String csvFileContentType) { - this.csvFileContentType = csvFileContentType; - } - - public void setService(ReferentialService service) { - this.service = service; - } - - protected abstract void importCsv(InputStream csvInputStream) throws ImportErrorException; - - protected abstract String getSuccessMessage(); - - @Override - public String execute() { - - String result = SUCCESS; - - if (CSV_CONTENT_TYPES.contains(csvFileContentType)) { - - InputStream csvInputStream = null; - - try { - - csvInputStream = new FileInputStream(csvFile); - - importCsv(csvInputStream); - - session.addMessage(getSuccessMessage()); - - } catch (FileNotFoundException e) { - - if (log.isErrorEnabled()) { - log.error("should never occur", e); - } - - throw new WaoTechnicalException(e); - - } catch (ImportErrorException e) { - - session.addErrorMessages(e.getMessage()); - - result = ERROR; - - } finally { - - IOUtils.closeQuietly(csvInputStream); - - } - - } else { - - if (log.isWarnEnabled()) { - log.warn("content type " + csvFileContentType + " is not CSV compatible"); - } - - session.addErrorMessages(t("wao.ui.import.csvTypeRequired", csvFileContentType)); - - result = ERROR; - - } - - return result; - - } - } Added: trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/ImportSamplingPlanAction.java =================================================================== --- trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/ImportSamplingPlanAction.java (rev 0) +++ trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/ImportSamplingPlanAction.java 2014-03-18 17:28:59 UTC (rev 1726) @@ -0,0 +1,33 @@ +package fr.ifremer.wao.web.action.obsmer; + +import fr.ifremer.wao.services.service.ImportErrorException; +import fr.ifremer.wao.services.service.ObsMerSamplingPlanService; +import fr.ifremer.wao.web.action.AbstractImportCsvAction; +import org.apache.struts2.convention.annotation.Result; +import org.apache.struts2.convention.annotation.Results; + +import java.io.InputStream; + +@Results({ + @Result(name="error", type="redirectAction", params = { "actionName", "import-sampling-plan!input" }) , + @Result(name="success", type="redirectAction", params = { "actionName", "sampling-plan" }) +}) +public class ImportSamplingPlanAction extends AbstractImportCsvAction { + + protected ObsMerSamplingPlanService service; + + public void setService(ObsMerSamplingPlanService service) { + this.service = service; + } + + @Override + protected void importCsv(InputStream csvInputStream) throws ImportErrorException { + service.importSamplingPlan(getAuthenticatedWaoUser(), csvInputStream); + } + + @Override + protected String getSuccessMessage() { + return t("wao.ui.import.samplingPlan.success"); + } + +} Modified: trunk/wao-web/src/main/resources/i18n/wao-web_en_GB.properties =================================================================== --- trunk/wao-web/src/main/resources/i18n/wao-web_en_GB.properties 2014-03-18 16:39:19 UTC (rev 1725) +++ trunk/wao-web/src/main/resources/i18n/wao-web_en_GB.properties 2014-03-18 17:28:59 UTC (rev 1726) @@ -276,6 +276,8 @@ 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.samplingPlan=Sampling plan import +wao.ui.import.samplingPlan.success=Sampling plan import successful 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-web/src/main/resources/i18n/wao-web_fr_FR.properties =================================================================== --- trunk/wao-web/src/main/resources/i18n/wao-web_fr_FR.properties 2014-03-18 16:39:19 UTC (rev 1725) +++ trunk/wao-web/src/main/resources/i18n/wao-web_fr_FR.properties 2014-03-18 17:28:59 UTC (rev 1726) @@ -276,6 +276,8 @@ 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.samplingPlan=Import du plan d'échantillonnage +wao.ui.import.samplingPlan.success=Import du plan d'échantillonnage réalisé avec succès 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-web/src/main/webapp/WEB-INF/content/administration/companies.jsp =================================================================== --- trunk/wao-web/src/main/webapp/WEB-INF/content/administration/companies.jsp 2014-03-18 16:39:19 UTC (rev 1725) +++ trunk/wao-web/src/main/webapp/WEB-INF/content/administration/companies.jsp 2014-03-18 17:28:59 UTC (rev 1726) @@ -53,7 +53,7 @@ <s:param name="companyId" value="topiaId" /> </s:url> <s:a href="%{waoUsersUrl}"> - <i class="icon-list"></i> <s:text name="wao.ui.action.viewCompanyWaoUsers" /> + <i class="icon-user"></i> <s:text name="wao.ui.action.viewCompanyWaoUsers" /> </s:a> </td> </tr> Modified: trunk/wao-web/src/main/webapp/WEB-INF/content/administration/referential-management.jsp =================================================================== --- trunk/wao-web/src/main/webapp/WEB-INF/content/administration/referential-management.jsp 2014-03-18 16:39:19 UTC (rev 1725) +++ trunk/wao-web/src/main/webapp/WEB-INF/content/administration/referential-management.jsp 2014-03-18 17:28:59 UTC (rev 1726) @@ -4,9 +4,11 @@ <html> <head> - + <title><s:text name="wao.ui.page.ReferentialManagement.title" /></title> </head> + <h1><s:text name="wao.ui.page.ReferentialManagement.title" /></h1> + <div class="alert alert-info"> <s:text name="wao.ui.import.disclaimer" /> </div> Added: trunk/wao-web/src/main/webapp/WEB-INF/content/obsmer/import-sampling-plan-input.jsp =================================================================== --- trunk/wao-web/src/main/webapp/WEB-INF/content/obsmer/import-sampling-plan-input.jsp (rev 0) +++ trunk/wao-web/src/main/webapp/WEB-INF/content/obsmer/import-sampling-plan-input.jsp 2014-03-18 17:28:59 UTC (rev 1726) @@ -0,0 +1,32 @@ +<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@taglib uri="/struts-tags" prefix="s" %> + +<html> + + <head> + <title><s:text name="wao.ui.import.samplingPlan" /></title> + </head> + + <h1><s:text name="wao.ui.import.samplingPlan" /></h1> + + <div class="alert alert-info"> + <s:text name="wao.ui.import.disclaimer" /> + </div> + + <s:form action="import-sampling-plan" method="POST" enctype="multipart/form-data"> + + <fieldset> + <legend> + <s:text name="wao.ui.import.samplingPlan" /> + </legend> + + <s:file name="csvFile" /> + + <s:submit type="button"> + <i class="icon-upload"></i> Importer + </s:submit> + </fieldset> + + </s:form> + +</html> Modified: trunk/wao-web/src/main/webapp/WEB-INF/decorators/layout.jsp =================================================================== --- trunk/wao-web/src/main/webapp/WEB-INF/decorators/layout.jsp 2014-03-18 16:39:19 UTC (rev 1725) +++ trunk/wao-web/src/main/webapp/WEB-INF/decorators/layout.jsp 2014-03-18 17:28:59 UTC (rev 1726) @@ -36,7 +36,7 @@ <li> <s:url namespace="/%{obsProgram.name().toLowerCase()}" action="sampling-plan" id="samplingPlanUrl" /> <s:a href="%{samplingPlanUrl}"> - <s:text name="wao.ui.page.SamplingPlan.title" /> + <i class="icon-tasks"></i> <s:text name="wao.ui.page.SamplingPlan.title" /> </s:a> </li> <li> @@ -65,6 +65,14 @@ <b class="caret"></b> </a> <ul class="dropdown-menu"> + <s:if test="authenticatedWaoUser.authorizedToImportSamplingPlan"> + <li> + <s:url namespace="/%{obsProgram.name().toLowerCase()}" action="import-sampling-plan!input" id="importSamplingPlanUrl" /> + <s:a href="%{importSamplingPlanUrl}"> + <i class="icon-upload"></i> <s:text name="wao.ui.import.samplingPlan" /> + </s:a> + </li> + </s:if> <s:if test="authenticatedWaoUser.authorizedToUpdateReferential"> <li> <s:url namespace="/administration" action="referential-management" id="referentialManagementUrl" /> @@ -77,7 +85,7 @@ <li> <s:url namespace="/administration" action="companies" id="companiesUrl" /> <s:a href="%{companiesUrl}"> - <i class="icon-user"></i> <s:text name="wao.ui.page.companies.title" /> + <i class="icon-briefcase"></i> <s:text name="wao.ui.page.companies.title" /> </s:a> </li> </s:if>