Author: sletellier Date: 2011-11-17 13:33:03 +0100 (Thu, 17 Nov 2011) New Revision: 89 Url: http://forge.codelutin.com/repositories/revision/echobase/89 Log: For DBeditor : - Complete i18n file - Refactor import action - Add success import page - Add redirect main page on save or import - Change log message on creation - Switch label between edition and creation Added: trunk/echobase-ui/src/main/resources/fr/ifremer/echobase/ui/actions/dbeditor/ trunk/echobase-ui/src/main/resources/fr/ifremer/echobase/ui/actions/dbeditor/ImportTable-doImport-validation.xml trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/dbeditor/modifImportResult.jsp Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/DbEditorService.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/dbeditor/ImportTable.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/dbeditor/LoadEntities.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/dbeditor/SaveEntity.java trunk/echobase-ui/src/main/resources/config/struts-dbeditor.xml trunk/echobase-ui/src/main/resources/config/struts-user.xml trunk/echobase-ui/src/main/resources/i18n/echobase-ui_fr_FR.properties trunk/echobase-ui/src/main/resources/log4j.properties trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/dbeditor/dbeditor.jsp Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/DbEditorService.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/DbEditorService.java 2011-11-16 17:33:28 UTC (rev 88) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/DbEditorService.java 2011-11-17 12:33:03 UTC (rev 89) @@ -224,7 +224,8 @@ TopiaEntity entityToSave; // Find or create entity if no id - if (StringUtils.isEmpty(id)) { + boolean create = StringUtils.isEmpty(id); + if (create) { entityToSave = dao.create(); } else { entityToSave = dao.findByTopiaId(id); @@ -267,10 +268,15 @@ ); StringBuilder buffer; - if (length == 1) { - buffer = new StringBuilder("Une propriété a été modifiée :"); + + if (create) { + buffer = new StringBuilder("Une entité à été crée :"); } else { - buffer = new StringBuilder(length + " propriétés ont été modifiées :"); + if (length == 1) { + buffer = new StringBuilder("Une propriété a été modifiée :"); + } else { + buffer = new StringBuilder(length + " propriétés ont été modifiées :"); + } } for (int i = 0; i < length; i++) { PropertyDiff diff = propertyDiffs[i]; @@ -293,11 +299,19 @@ } } - buffer.append(String.format("\n Propriété '%s', ancienne valeur : %s, nouvelle valeur : %s", - propertyName, - sourceValue, - targetValue - )); + + if (create) { + buffer.append(String.format("\n Propriété '%s', valeur : %s", + propertyName, + targetValue + )); + } else { + buffer.append(String.format("\n Propriété '%s', ancienne valeur : %s, nouvelle valeur : %s", + propertyName, + sourceValue, + targetValue + )); + } } dao1.create( EntityModificationLog.PROPERTY_ENTITY_TYPE, entityType.getSimpleName(), @@ -361,9 +375,7 @@ public List<PropertyDiff[]> importDatas(String tableName, File importFile, EchoBaseUser user) { - - TableMeta tableMeta = getTableMetas(tableName); - + TableMeta tableMetas = getTableMetas(tableName); BufferedReader bf = null; List<PropertyDiff[]> result = Lists.newArrayList(); try { @@ -384,12 +396,14 @@ } // Save entity - PropertyDiff[] propertyDiffs = saveEntity(tableMeta, id, valuesMap, user, false); + PropertyDiff[] propertyDiffs = saveEntity(tableMetas, id, valuesMap, user, false); result.add(propertyDiffs); line = bf.readLine(); } + // Commit + getTransaction().commitTransaction(); } catch (Exception eee) { log.error("Failled to read import file " + importFile.getName(), eee); throw new EchoBaseTechnicalException(eee); Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/dbeditor/ImportTable.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/dbeditor/ImportTable.java 2011-11-16 17:33:28 UTC (rev 88) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/dbeditor/ImportTable.java 2011-11-17 12:33:03 UTC (rev 89) @@ -23,8 +23,8 @@ */ package fr.ifremer.echobase.ui.actions.dbeditor; +import com.google.common.collect.Lists; import fr.ifremer.echobase.services.DbEditorService; -import fr.ifremer.echobase.ui.actions.EchoBaseActionSupport; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.util.beans.PropertyDiff; @@ -35,65 +35,66 @@ /** * To import datas from import file. * + * FIXME 20111117 sletellier : extends {@link LoadEntities} find a better way to redirect to dbeditor page on validation error + * * @author sletellier <letellier@codelutin.com> * @since 0.1 */ -public class ImportTable extends EchoBaseActionSupport { +public class ImportTable extends LoadEntities { private static final long serialVersionUID = 1L; /** Logger. */ private static final Log log = LogFactory.getLog(ImportTable.class); - /** Name of the table to load. */ - protected String tableName; + protected File modifImport; + protected String modifImportContentType; + protected String modifImportFileName; - protected File upfile; - protected String upfileContentType; - protected String upfileFileName; + protected List<PropertyDiff[]> propertyDiffs; - public void setTableName(String tableName) { - this.tableName = tableName; + public File getModifImport() { + return modifImport; } - public File getUpfile() { - return upfile; + public void setModifImport(File modifImport) { + this.modifImport = modifImport; } - public void setUpfile(File upfile) { - this.upfile = upfile; + public String getModifImportContentType() { + return modifImportContentType; } - public String getUpfileContentType() { - return upfileContentType; + public void setModifImportContentType(String modifImportContentType) { + this.modifImportContentType = modifImportContentType; } - public void setUpfileContentType(String upfileContentType) { - this.upfileContentType = upfileContentType; + public String getModifImportFileName() { + return modifImportFileName; } - public String getUpfileFileName() { - return upfileFileName; + public void setModifImportFileName(String modifImportFileName) { + this.modifImportFileName = modifImportFileName; } - public void setUpfileFileName(String upfileFileName) { - this.upfileFileName = upfileFileName; + public List<PropertyDiff[]> getPropertyDiffs() { + if (propertyDiffs == null) { + return Lists.newArrayList(); + } + return propertyDiffs; } - @Override - public String execute() throws Exception { + public void setPropertyDiffs(List<PropertyDiff[]> propertyDiffs) { + this.propertyDiffs = propertyDiffs; + } - if (upfile == null || !upfile.exists()) { - addActionError(_("echobase.error.fileNotFound")); - return ERROR; - } + public String doImportModif() throws Exception { DbEditorService dbEditorService = newService(DbEditorService.class); - List<PropertyDiff[]> propertyDiffs = - dbEditorService.importDatas(tableName, - upfile, - getEchoBaseSession().getEchoBaseUser()); + propertyDiffs = dbEditorService.importDatas(tableName, + modifImport, + getEchoBaseSession().getEchoBaseUser()); for (PropertyDiff[] diffs : propertyDiffs) { for (PropertyDiff diff : diffs) { Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/dbeditor/LoadEntities.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/dbeditor/LoadEntities.java 2011-11-16 17:33:28 UTC (rev 88) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/dbeditor/LoadEntities.java 2011-11-17 12:33:03 UTC (rev 89) @@ -24,6 +24,7 @@ package fr.ifremer.echobase.ui.actions.dbeditor; import com.google.common.collect.Maps; +import com.opensymphony.xwork2.Preparable; import fr.ifremer.echobase.entities.meta.ColumnMeta; import fr.ifremer.echobase.entities.meta.DbMeta; import fr.ifremer.echobase.entities.meta.TableMeta; @@ -33,7 +34,6 @@ import org.nuiton.topia.persistence.TopiaEntity; import java.util.Date; -import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -45,7 +45,7 @@ * @author tchemit <chemit@codelutin.com> * @since 0.1 */ -public class LoadEntities extends EchoBaseActionSupport { +public class LoadEntities extends EchoBaseActionSupport implements Preparable { private static final long serialVersionUID = 1L; @@ -58,10 +58,6 @@ /** Metas of the table */ protected TableMeta tableMeta; - public String getTableName() { - return tableName; - } - public Map<String, String> getTableNames() { return tableNames; } @@ -74,8 +70,12 @@ this.tableName = tableName; } + public String getTableName() { + return tableName; + } + @Override - public String execute() throws Exception { + public void prepare() throws Exception { tableNames = Maps.newTreeMap(); DbMeta dbMeta = getEchoBaseApplicationContext().getDbMeta(); for (TableMeta tableMeta : dbMeta) { @@ -93,7 +93,6 @@ DbEditorService dbEditorService = newService(DbEditorService.class); tableMeta = dbEditorService.getTableMetas(tableName); } - return SUCCESS; } public String getEditType(ColumnMeta meta) { Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/dbeditor/SaveEntity.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/dbeditor/SaveEntity.java 2011-11-16 17:33:28 UTC (rev 88) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/dbeditor/SaveEntity.java 2011-11-17 12:33:03 UTC (rev 89) @@ -59,6 +59,10 @@ this.tableName = tableName; } + public String getTableName() { + return tableName; + } + public void setId(String id) { this.id = id; } @@ -102,7 +106,7 @@ diff.getTargetValue()) ); } - return NONE; + return SUCCESS; } @Override Modified: trunk/echobase-ui/src/main/resources/config/struts-dbeditor.xml =================================================================== --- trunk/echobase-ui/src/main/resources/config/struts-dbeditor.xml 2011-11-16 17:33:28 UTC (rev 88) +++ trunk/echobase-ui/src/main/resources/config/struts-dbeditor.xml 2011-11-17 12:33:03 UTC (rev 89) @@ -31,9 +31,19 @@ <package name="dbeditor" extends="loggued" namespace="/dbeditor"> + <result-types> + <result-type name="redirectToDbEditor" class="org.apache.struts2.dispatcher.ServletActionRedirectResult"> + <param name="namespace">/dbeditor</param> + <param name="actionName">dbeditor</param> + <param name="tableName">${tableName}</param> + <param name="supressEmptyParameters">true</param> + </result-type> + </result-types> + <!-- load db editor main page --> <action name="dbeditor" class="fr.ifremer.echobase.ui.actions.dbeditor.LoadEntities"> + <interceptor-ref name="paramsPrepareParamsStackLoggued"/> <result>/WEB-INF/jsp/dbeditor/dbeditor.jsp</result> </action> @@ -57,12 +67,16 @@ <!-- save the modified entity (no result as a grid json edit action)--> <action name="editTableData" - class="fr.ifremer.echobase.ui.actions.dbeditor.SaveEntity"/> + class="fr.ifremer.echobase.ui.actions.dbeditor.SaveEntity"> + <result name="success" type="redirectToDbEditor"/> + </action> <!-- save the modified entity (no result as a grid json edit action)--> - <action name="doImport" - class="fr.ifremer.echobase.ui.actions.dbeditor.ImportTable"> + <action name="doImport" method="doImportModif" class="fr.ifremer.echobase.ui.actions.dbeditor.ImportTable"> <interceptor-ref name="paramsPrepareParamsStackLoggued"/> + <result>/WEB-INF/jsp/dbeditor/modifImportResult.jsp</result> + <result name="input">/WEB-INF/jsp/dbeditor/dbeditor.jsp</result> + <result name="error">/WEB-INF/jsp/dbeditor/modifImportResult.jsp</result> </action> <!-- save the modified entity (no result as a grid json edit action)--> Modified: trunk/echobase-ui/src/main/resources/config/struts-user.xml =================================================================== --- trunk/echobase-ui/src/main/resources/config/struts-user.xml 2011-11-16 17:33:28 UTC (rev 88) +++ trunk/echobase-ui/src/main/resources/config/struts-user.xml 2011-11-17 12:33:03 UTC (rev 89) @@ -89,7 +89,7 @@ <!-- Get modification logs entries --> <action name="getEntityModificationLogs" method="entityModificationLogs" - class="fr.ifremer.echobase.ui.actions.dbeditor.ImportTable"> + class="fr.ifremer.echobase.ui.actions.dbeditor.GetEntities"> <result type="json"/> </action> Added: trunk/echobase-ui/src/main/resources/fr/ifremer/echobase/ui/actions/dbeditor/ImportTable-doImport-validation.xml =================================================================== --- trunk/echobase-ui/src/main/resources/fr/ifremer/echobase/ui/actions/dbeditor/ImportTable-doImport-validation.xml (rev 0) +++ trunk/echobase-ui/src/main/resources/fr/ifremer/echobase/ui/actions/dbeditor/ImportTable-doImport-validation.xml 2011-11-17 12:33:03 UTC (rev 89) @@ -0,0 +1,14 @@ +<!DOCTYPE validators PUBLIC + "-//OpenSymphony Group//XWork Validator 1.0.2//EN" + "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"> +<validators> + + <field name="modifImport"> + + <field-validator type="required"> + <message key="echobase.validation.dbeditor.modifImport.required"/> + </field-validator> + + </field> + +</validators> \ No newline at end of file Modified: trunk/echobase-ui/src/main/resources/i18n/echobase-ui_fr_FR.properties =================================================================== --- trunk/echobase-ui/src/main/resources/i18n/echobase-ui_fr_FR.properties 2011-11-16 17:33:28 UTC (rev 88) +++ trunk/echobase-ui/src/main/resources/i18n/echobase-ui_fr_FR.properties 2011-11-17 12:33:03 UTC (rev 89) @@ -28,16 +28,19 @@ echobase.common.query.description=Description echobase.common.query.name=Nom echobase.common.request.result=Résultat de la requête sql +echobase.common.reset=Annuler echobase.common.sqlQueries=Requêtes enregistrées echobase.common.tableName=Nom de la table echobase.common.user=Utilisateur echobase.common.voyage=Voyage echobase.common.voyagesToSelect=Voyage à exporter +echobase.dbEditor.propertyDiffsResult=Nombres d'entrées importés \: echobase.dbeditor.export=Exporter echobase.dbeditor.import=Importer echobase.embeddedApplication.configuration=Configuration de l'application embarquée echobase.error.bad.password=Mot de passe incorrrect echobase.error.email.already.used= +echobase.error.fileDontExist= echobase.error.fileNotFound= echobase.error.importArgument= echobase.error.login.unknown=Utilisateur inconnu @@ -74,7 +77,7 @@ echobase.menu.logs=Visualiser les modifications echobase.menu.users=Gérer les utilisateurs echobase.message.askAdministratorPassword=Demander à un administrateur le mot de passe pour l'utilisateur donné -echobase.message.modified.property= +echobase.message.modified.property=Propriété '%s', ancienne valeur : %s, nouvelle valeur : %s", echobase.message.noEntrySelection=Aucune entrée sélectionnée echobase.msg.warnImportInProgress=Merci de ne pas fermer la fenêtre pour pouvoir accéder aux résultats de l'import. echobase.sqlQuery.configuration=Configuration de la requête @@ -100,3 +103,5 @@ echobase.validation.login.password.requiredstring=Le mot de passe est obligatoire echobase.validation.login.wrongLogin=Le login est déjà utilisé echobase.voyage.selectHeader=Selectionnez un voyage +echobase.dbeditor.create=Création de '%s' +echobase.dbeditor.edit=Edition de '%s' Modified: trunk/echobase-ui/src/main/resources/log4j.properties =================================================================== --- trunk/echobase-ui/src/main/resources/log4j.properties 2011-11-16 17:33:28 UTC (rev 88) +++ trunk/echobase-ui/src/main/resources/log4j.properties 2011-11-17 12:33:03 UTC (rev 89) @@ -32,4 +32,4 @@ log4j.appender.A1.layout.ConversionPattern=%d %5p [%t] (%F:%L) %M - %m%n # Toute l'application -log4j.logger.fr.ifremer.echobase=INFO +log4j.logger.fr.ifremer.echobase=INFO \ No newline at end of file Modified: trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/dbeditor/dbeditor.jsp =================================================================== --- trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/dbeditor/dbeditor.jsp 2011-11-16 17:33:28 UTC (rev 88) +++ trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/dbeditor/dbeditor.jsp 2011-11-17 12:33:03 UTC (rev 89) @@ -55,6 +55,9 @@ $.subscribe('rowselect', function(event) { + // Display edit label + toggleLabels(true); + // get selected id var id = event.originalEvent.id; @@ -108,6 +111,19 @@ }); }); + function toggleLabels(edit) { + var editDiv = $(document.getElementById("editDiv")); + var createDiv = $(document.getElementById("createDiv")); + + if (edit) { + createDiv.hide(); + editDiv.show(); + } else { + editDiv.hide(); + createDiv.show(); + } + } + function formatEntityLabel(cellvalue, options, rowObject) { var columnName = options.colModel.name + "_lib"; return rowObject[columnName]; @@ -122,17 +138,17 @@ enctype="multipart/form-data" theme="simple" cssClass="floatLeft"> <s:hidden key="tableName"/> - <s:file name="upfile" + <s:file name="modifImport" required="true" key="echobase.dbeditor.importFile" disabled="%{tableSelected}"/> - <s:submit key="echobase.dbeditor.import" disabled="%{tableSelected}"/> + <s:submit value="%{getText('echobase.dbeditor.import')}" disabled="%{tableSelected}"/> </s:form> <s:form id="exportForm" action="doExport" namespace="/dbeditor" theme="simple" cssClass="floatRight"> <s:hidden key="tableName"/> - <s:submit key="echobase.dbeditor.export" disabled="%{tableSelected}"/> + <s:submit value="%{getText('echobase.dbeditor.export')}" disabled="%{tableSelected}"/> </s:form> </div> <br class="clearBoth"/> @@ -148,9 +164,10 @@ <s:param name="tableName" value="%{tableName}"/> </s:url> + <s:set var="tableI18nName" value="%{getText('echobase.common.tableDatas', tableNames[tableName])}"/> <sjg:grid id="datas" dataType="json" href="%{loadUrl}" gridModel="datas" - caption="%{getText('echobase.common.tableDatas', tableNames[tableName])}" + caption="%{tableI18nName}" pager="true" pagerButtons="true" pagerInput="true" navigator="true" autowidth="true" rownumbers="false" viewrecords="true" navigatorEdit="true" navigatorSearch="true" @@ -198,10 +215,21 @@ <s:form id="editForm" action="editTableData" namespace="/dbeditor"> <fieldset> <legend> - <s:text name="echobase.common.user"/> + <div id="editDiv" style="display: none;"> + <s:text name="echobase.dbeditor.edit"> + <s:param value="%{tableI18nName}"/> + </s:text> + </div> + <div id="createDiv"> + <s:text name="echobase.dbeditor.create"> + <s:param value="%{tableI18nName}"/> + </s:text> + </div> </legend> - <s:hidden id="id" key="id"/> <s:hidden key="tableName"/> + + <%-- hidden field dont reset --%> + <s:textfield id="id" name="id" cssClass="hidden"/> <s:iterator value="columnMetas" var="meta" status="status"> <s:url id="urlName" action="getForeignEntities" @@ -240,7 +268,7 @@ </s:iterator> </fieldset> <ul class="toolbar floatRight"> - <li><s:reset key="echobase.common.reset"/></li> + <li><s:reset key="echobase.common.reset" onclick="toggleLabels(false)"/></li> <li><s:submit name="submit" key="echobase.action.save" theme="simple"/></li> </ul> </s:form> Added: trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/dbeditor/modifImportResult.jsp =================================================================== --- trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/dbeditor/modifImportResult.jsp (rev 0) +++ trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/dbeditor/modifImportResult.jsp 2011-11-17 12:33:03 UTC (rev 89) @@ -0,0 +1,5 @@ +<%@ page language="java" contentType="text/html" pageEncoding="utf-8" %> +<%@ taglib prefix="s" uri="/struts-tags" %> +<title><s:text name="echobase.title.dbEditor"/></title> + +<h2><s:text name="echobase.dbEditor.propertyDiffsResult"/><s:property value="#{propertyDiffs.size}"/></h2>