This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository echobase. See http://git.codelutin.com/echobase.git commit f5ec58a247b40d5663d52279869752c5946169b0 Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Dec 30 12:30:42 2014 +0100 pouvoir telecharger les fichier d'import sur l'ecran de tableau de bord --- .../ui/actions/workingDb/DownloadImportFile.java | 95 ++++++++++++++++++++++ .../ui/actions/workingDb/GetImportLogDetail.java | 9 ++ .../src/main/resources/config/struts-workingDb.xml | 12 +++ .../resources/i18n/echobase-ui_en_GB.properties | 2 + .../resources/i18n/echobase-ui_fr_FR.properties | 2 + .../webapp/WEB-INF/jsp/workingDb/dashboard.jsp | 53 ++++++++++-- echobase-ui/src/main/webapp/js/test.js | 65 --------------- 7 files changed, 167 insertions(+), 71 deletions(-) diff --git a/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/workingDb/DownloadImportFile.java b/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/workingDb/DownloadImportFile.java new file mode 100644 index 0000000..5069ee5 --- /dev/null +++ b/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/workingDb/DownloadImportFile.java @@ -0,0 +1,95 @@ +package fr.ifremer.echobase.ui.actions.workingDb; + +import fr.ifremer.echobase.entities.ImportFile; +import fr.ifremer.echobase.services.service.UserDbPersistenceService; +import fr.ifremer.echobase.ui.actions.EchoBaseActionSupport; +import org.apache.commons.io.IOUtils; + +import javax.inject.Inject; +import java.io.InputStream; +import java.net.URLDecoder; +import java.sql.Blob; +import java.util.zip.GZIPInputStream; + +/** + * Created on 12/30/14. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 2.7.2 + */ +public class DownloadImportFile extends EchoBaseActionSupport { + + private static final long serialVersionUID = 1L; + + /** id of import file to download. */ + protected String importFileId; + + protected String filename; + + public void setImportFileId(String importFileId) { + this.importFileId = importFileId; + } + + public String getImportFileId() { + return importFileId; + } + + public String getFilename() { + return filename; + } + + /** Input stream of the file to download. */ + protected transient InputStream inputStream; + + public InputStream getInputStream() { + return inputStream; + } + + /** Length of the file to download. */ + protected long contentLength; + + public long getContentLength() { + return contentLength; + } + + /** Content type of the file to download. */ + protected String contentType; + + public String getContentType() { + return contentType; + } + + @Override + public String execute() throws Exception { + + //FIXME Find out why we need to decode id? + String id = URLDecoder.decode(importFileId, "UTF-8"); + ImportFile importFile = userDbPersistenceService.getImportFile(id); + + filename = importFile.getName(); + + contentType = "application/text"; + + Blob file = importFile.getFile(); + { + byte[] bytes; + try (InputStream binaryStream = file.getBinaryStream()) { + bytes = IOUtils.toString(new GZIPInputStream(binaryStream)).getBytes(); + } + contentLength = bytes.length; + } + + inputStream = new GZIPInputStream(file.getBinaryStream(), 65535); + + return SUCCESS; + + } + + //------------------------------------------------------------------------// + //-- Injected objects // + //------------------------------------------------------------------------// + + @Inject + protected transient UserDbPersistenceService userDbPersistenceService; + +} \ No newline at end of file diff --git a/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/workingDb/GetImportLogDetail.java b/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/workingDb/GetImportLogDetail.java index 4afc896..c1ee7d6 100644 --- a/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/workingDb/GetImportLogDetail.java +++ b/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/workingDb/GetImportLogDetail.java @@ -22,6 +22,7 @@ package fr.ifremer.echobase.ui.actions.workingDb; */ import fr.ifremer.echobase.entities.EchoBaseUserEntityEnum; +import fr.ifremer.echobase.entities.ImportFile; import fr.ifremer.echobase.entities.ImportLog; import fr.ifremer.echobase.entities.ImportType; import fr.ifremer.echobase.entities.data.Voyage; @@ -32,6 +33,7 @@ import fr.ifremer.echobase.ui.actions.EchoBaseActionSupport; import org.nuiton.topia.persistence.metadata.TableMeta; import javax.inject.Inject; +import java.util.Collection; import java.util.Map; /** @@ -72,7 +74,12 @@ public class GetImportLogDetail extends EchoBaseActionSupport { Voyage voyage = userDbPersistenceService.getVoyage((String) data.get(ImportLog.PROPERTY_VOYAGE_ID)); decoratorService.decorateForeignKey(data, ImportLog.PROPERTY_VOYAGE_ID, voyage, null); + // get import files + Collection<ImportFile> importFiles = userDbPersistenceService.getImportFiles(importLogId); + data.put(ImportLog.PROPERTY_IMPORT_FILE, importFiles); + return SUCCESS; + } //------------------------------------------------------------------------// @@ -81,8 +88,10 @@ public class GetImportLogDetail extends EchoBaseActionSupport { @Inject protected transient UserDbPersistenceService userDbPersistenceService; + @Inject protected transient DbEditorService dbEditorService; + @Inject protected transient DecoratorService decoratorService; } diff --git a/echobase-ui/src/main/resources/config/struts-workingDb.xml b/echobase-ui/src/main/resources/config/struts-workingDb.xml index 538b439..4cb4d00 100644 --- a/echobase-ui/src/main/resources/config/struts-workingDb.xml +++ b/echobase-ui/src/main/resources/config/struts-workingDb.xml @@ -182,6 +182,18 @@ <interceptor-ref name="basicStackLogguedWithdb"/> <result>/WEB-INF/jsp/workingDb/dashboard.jsp</result> </action> + + <!-- Download import file --> + <action name="downloadImportFile" method="execute" + class="fr.ifremer.echobase.ui.actions.workingDb.DownloadImportFile"> + <interceptor-ref name="prepareParamsStackLogguedWithDb"/> + <result type="stream"> + <param name="contentType">${contentType}</param> + <param name="contentLength">${contentLength}</param> + <param name="contentDisposition">attachment; filename="${filename}"</param> + </result> + </action> + </package> </struts> diff --git a/echobase-ui/src/main/resources/i18n/echobase-ui_en_GB.properties b/echobase-ui/src/main/resources/i18n/echobase-ui_en_GB.properties index 09c5889..ead8c9b 100644 --- a/echobase-ui/src/main/resources/i18n/echobase-ui_en_GB.properties +++ b/echobase-ui/src/main/resources/i18n/echobase-ui_en_GB.properties @@ -384,6 +384,7 @@ echobase.message.importData.result=Data import successful in %s \:\n%s echobase.message.no.row.selected=No data selected echobase.message.no.spatial.database.support=The working db you are using is not compatible with postgis 2. echobase.message.noEntrySelection=No field selected +echobase.message.noImportFilesFound=No import file found (import was done before version 2.8) echobase.message.noImportLogSelected=No import selected echobase.message.noVoyageSelected=No voyage selected echobase.message.removeData.result=Data import removalwas successful in %s\:\n%s @@ -417,6 +418,7 @@ echobase.title.importDb=Database import echobase.title.importDbProgress=Importing data echobase.title.importDbResult=Data import results echobase.title.importLog.detail=Import detail +echobase.title.importLog.files=Import files echobase.title.importLogs=Import logs echobase.title.importTable=Import a table echobase.title.login=Connection diff --git a/echobase-ui/src/main/resources/i18n/echobase-ui_fr_FR.properties b/echobase-ui/src/main/resources/i18n/echobase-ui_fr_FR.properties index 1c92268..1bc5e2a 100644 --- a/echobase-ui/src/main/resources/i18n/echobase-ui_fr_FR.properties +++ b/echobase-ui/src/main/resources/i18n/echobase-ui_fr_FR.properties @@ -387,6 +387,7 @@ echobase.message.importData.result=Import de données réussi en %s \:\n%s echobase.message.no.row.selected=Aucune donnée sélectionnée echobase.message.no.spatial.database.support=La base de travail que vous utilisez ne possède pas de support spatiale. echobase.message.noEntrySelection=Pas de champ sélectionné +echobase.message.noImportFilesFound=Pas de fichiers conservés (import effectué avant la version 2.8) echobase.message.noImportLogSelected=Pas d'import sélectionné echobase.message.noVoyageSelected=Pas de campagne sélectionné echobase.message.removeData.result=La suppression de l'import s'est déroule avec succès en %s \:\n%s @@ -420,6 +421,7 @@ echobase.title.importDb=Import d'une base echobase.title.importDbProgress=Import de données en cours echobase.title.importDbResult=Résultats de l'import de données echobase.title.importLog.detail=Détail d'un import +echobase.title.importLog.files=Fichiers d'import echobase.title.importLogs=Liste des imports echobase.title.importTable=Importer une table echobase.title.login=Connexion diff --git a/echobase-ui/src/main/webapp/WEB-INF/jsp/workingDb/dashboard.jsp b/echobase-ui/src/main/webapp/WEB-INF/jsp/workingDb/dashboard.jsp index 75b4332..e9a75b0 100644 --- a/echobase-ui/src/main/webapp/WEB-INF/jsp/workingDb/dashboard.jsp +++ b/echobase-ui/src/main/webapp/WEB-INF/jsp/workingDb/dashboard.jsp @@ -40,8 +40,8 @@ dataType:"json", success:function (data, textStatus) { - $('#noImportLogDetail').hide(); - $('#importLogDetail').show(); + $('.noImportLogDetail').hide(); + $('.importLogDetail').show(); var json = data.data; if ($('#noVoyageDetail').is(":visible")) { @@ -55,11 +55,35 @@ $('#importLogUser').html(json['importUser']); $('#importLogDate').html(json['importDate']); $('#importLogImportType').html(json['importType']); + + loadImportFiles(json['importFile']); } }); return false; } + function loadImportFiles(importFiles) { + var importUrlPrefix ='<s:url action="downloadImportFile" namespace="/workingDb"/>'; + + var result=""; + $(importFiles).each(function () { + var importFile = this; + var importFileId = importFile['topiaId']; + var filename = importFile['name']; + var importUrl = encodeURI($.prepareUrl(importUrlPrefix , {importFileId:importFileId})); + + result += "<li><a href='"+importUrl+"' class='fontsize11'>" + filename + "</a></li>"; + }); + + if (result == "") { + result = "<s:text name='echobase.message.noImportFilesFound'/>"; + } + $('#importLogFiles').html(result); + } + + function downloadImportFile(importFileId) { + + } function loadVoyageDetail(voyageId) { $.ajax( { @@ -113,8 +137,8 @@ $.addClearSelectTopic('voyages', function (event) { - $('#noImportLogDetail').show(); - $('#importLogDetail').hide(); + $('.noImportLogDetail').show(); + $('.importLogDetail').hide(); $('#noVoyageDetail').show(); $('#voyageDetail').hide(); }); @@ -193,12 +217,12 @@ <fieldset> <legend><s:text name="echobase.title.importLog.detail"/></legend> - <div id="noImportLogDetail"> + <div class="noImportLogDetail"> <pre> <s:text name="echobase.message.noImportLogSelected"/> </pre> </div> - <div id="importLogDetail"> + <div class="importLogDetail"> <s:label key='echobase.common.importType' value=''/> <pre id='importLogImportType' style="font-weight: bold;"></pre> @@ -224,3 +248,20 @@ </div> </fieldset> + +<fieldset id="importLogFilesFieldset"> + <legend><s:text name="echobase.title.importLog.files"/></legend> + + <div class="noImportLogDetail"> + <pre> + <s:text name="echobase.message.noImportLogSelected"/> + </pre> + </div> + <div class="importLogDetail"> + + <ul id='importLogFiles' style="font-weight: bold;"></ul> + + </div> + + +</fieldset> diff --git a/echobase-ui/src/main/webapp/js/test.js b/echobase-ui/src/main/webapp/js/test.js deleted file mode 100644 index 6db29b2..0000000 --- a/echobase-ui/src/main/webapp/js/test.js +++ /dev/null @@ -1,65 +0,0 @@ -/* - * #%L - * EchoBase :: UI - * %% - * Copyright (C) 2011 - 2013 Ifremer, Codelutin - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * #L% - */ -var statesData = { - "type": "FeatureCollection", - "features": [ - { - "type": "Feature", - "id": "01", - "properties": {"name": "Alabama", "density": 94.65}, - "geometry": {"type": "Polygon", "coordinates": [ - [ - [-87.359296, 35.00118], - [-85.606675, 34.984749], - [-85.431413, 34.124869], - [-85.184951, 32.859696], - [-85.069935, 32.580372], - [-84.960397, 32.421541], - [-85.004212, 32.322956], - [-84.889196, 32.262709], - [-85.058981, 32.13674], - [-85.053504, 32.01077], - [-85.141136, 31.840985], - [-85.042551, 31.539753], - [-85.113751, 31.27686], - [-85.004212, 31.003013], - [-85.497137, 30.997536], - [-87.600282, 30.997536], - [-87.633143, 30.86609], - [-87.408589, 30.674397], - [-87.446927, 30.510088], - [-87.37025, 30.427934], - [-87.518128, 30.280057], - [-87.655051, 30.247195], - [-87.90699, 30.411504], - [-87.934375, 30.657966], - [-88.011052, 30.685351], - [-88.10416, 30.499135], - [-88.137022, 30.318396], - [-88.394438, 30.367688], - [-88.471115, 31.895754], - [-88.241084, 33.796253], - [-88.098683, 34.891641], - [-88.202745, 34.995703], - [-87.359296, 35.00118] - ] - ]}} - ]}; -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.