Author: sletellier Date: 2011-11-15 18:40:35 +0100 (Tue, 15 Nov 2011) New Revision: 86 Url: http://forge.codelutin.com/repositories/revision/echobase/86 Log: Fix editing in dbeditor without grid Added: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/dbeditor/GetEntity.java 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/LoadEntities.java trunk/echobase-ui/src/main/resources/config/struts-dbeditor.xml 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-15 09:38:05 UTC (rev 85) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/DbEditorService.java 2011-11-15 17:40:35 UTC (rev 86) @@ -148,6 +148,22 @@ } } + public Map<?, ?> getData(String tableName, + String topiaId) { + + DbMeta dbMeta = getDbMeta(); + TableMeta tableMeta = dbMeta.getTable(tableName); + EchoBaseEntityEnum entityEnum = tableMeta.getEntityEnum(); + Class<? extends TopiaEntity> contract = entityEnum.getContract(); + try { + TopiaDAO dao = EchoBaseDAOHelper.getDAO(getTransaction(), contract); + TopiaEntity entity = dao.findByTopiaId(topiaId); + return loadRow(tableMeta, entity); + } catch (TopiaException eee) { + throw new EchoBaseTechnicalException("Could not obtain data", eee); + } + } + public PropertyDiff[] saveEntity(TableMeta tableMeta, String id, Map<String, String> properties, Added: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/dbeditor/GetEntity.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/dbeditor/GetEntity.java (rev 0) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/dbeditor/GetEntity.java 2011-11-15 17:40:35 UTC (rev 86) @@ -0,0 +1,46 @@ +package fr.ifremer.echobase.ui.actions.dbeditor; + +import fr.ifremer.echobase.services.DbEditorService; +import fr.ifremer.echobase.ui.actions.EchoBaseActionSupport; + +import java.util.Map; + +/** + * To obtain the data for the given entity. + * + * @author sletellier <letellier@codelutin.com> + * @since 0.1 + */ +public class GetEntity extends EchoBaseActionSupport { + + /** Name of the table to load. */ + protected String tableName; + + /** Id of entity to load. */ + protected String id; + + /** Datas of the given table. */ + protected Map<?, ?> datas; + + public void setTableName(String tableName) { + this.tableName = tableName; + } + + public void setId(String id) { + this.id = id; + } + + public Map<?, ?> getDatas() { + return datas; + } + + @Override + public String execute() throws Exception { + + DbEditorService dbEditorService = newService(DbEditorService.class); + + datas = dbEditorService.getData(tableName, id); + + return SUCCESS; + } +} 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-15 09:38:05 UTC (rev 85) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/dbeditor/LoadEntities.java 2011-11-15 17:40:35 UTC (rev 86) @@ -32,6 +32,7 @@ import org.apache.commons.lang3.StringUtils; import org.nuiton.topia.persistence.TopiaEntity; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; Modified: trunk/echobase-ui/src/main/resources/config/struts-dbeditor.xml =================================================================== --- trunk/echobase-ui/src/main/resources/config/struts-dbeditor.xml 2011-11-15 09:38:05 UTC (rev 85) +++ trunk/echobase-ui/src/main/resources/config/struts-dbeditor.xml 2011-11-15 17:40:35 UTC (rev 86) @@ -40,7 +40,7 @@ <!-- get foreign entities as a select box --> <action name="getForeignEntities" class="fr.ifremer.echobase.ui.actions.dbeditor.GetForeignEntities"> - <result>/WEB-INF/jsp/dbeditor/foreignEntities.jsp</result> + <result type="json"/> </action> <!-- Get datas of the selected table --> @@ -49,9 +49,16 @@ <result type="json"/> </action> + <!-- Get datas of the selected table --> + <action name="getTableData" + class="fr.ifremer.echobase.ui.actions.dbeditor.GetEntity"> + <result type="json"/> + </action> + <!-- save the modified entity (no result as a grid json edit action)--> <action name="editTableData" class="fr.ifremer.echobase.ui.actions.dbeditor.SaveEntity"> + <result type="redirectAction">/dbeditor</result> </action> </package> 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-15 09:38:05 UTC (rev 85) +++ trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/dbeditor/dbeditor.jsp 2011-11-15 17:40:35 UTC (rev 86) @@ -27,6 +27,7 @@ <%@ taglib prefix="sjg" uri="/struts-jquery-grid-tags" %> <s:url id="reloadUrl" action="dbeditor" namespace="/dbeditor"/> +<s:url id="getTableData" action="getTableData" namespace="/dbeditor"/> <title><s:text name="echobase.title.dbEditor"/></title> @@ -40,6 +41,52 @@ }); }); + $.subscribe('rowselect', function(event) { + + // get selected id + var id = event.originalEvent.id; + + // get table name + var tableName = "${tableName}"; + + // get entity value from json + jQuery.getJSON("${getTableData}", + { + "tableName":tableName, + "id":id + }, + function (result) { + + // for all json result + // get data as pair : [property, value] + for (var data in Iterator(result.datas)) { + if (data) { + + // get property + var propertyName = data[0]; + + // get value + var value = data[1]; + + // get concerned editor + var editor = document.getElementById(propertyName); + + // if editor found + if (editor) { + + // get type for checkbox + var editorType = editor.type; + if (editorType == "checkbox") { + editor.checked = value; + } else { + editor.value = value; + } + } + } + } + }); + }); + function formatEntityLabel(cellvalue, options, rowObject) { var columnName = options.colModel.name + "_lib"; return rowObject[columnName]; @@ -71,6 +118,7 @@ navigatorEdit="true" navigatorSearch="true" navigatorDelete="false" navigatorAdd="false" resizable="true" editurl="%{editUrl}" rowList="10,15,20, 50" rowNum="10" + onSelectRowTopics="rowselect" navigatorSearchOptions="{multipleGroup:false,showQuery:true,multipleSearch:true,sopt:['eq','ne','cn','nc','bw','bn','ew','en','lt','le','gt','ge','nu','nn','in','ni']}"> <sjg:gridColumn name="id" title="id" hidden="true" editable="true"/> @@ -106,5 +154,56 @@ </sjg:grid> + <s:form id="editForm" action="editTableData" namespace="/dbeditor"> + <fieldset> + <legend> + <s:text name="echobase.common.user"/> + </legend> + <s:hidden key="id"/> + <s:hidden key="tableName"/> + <s:iterator value="columnMetas" var="meta" status="status"> + <%-- TODO sletellier 20111115 : try to refactor with table url --%> + <s:set name="urlName">getForeignEntitiesUrl_<s:property value="%{#meta.typeSimpleName}"/></s:set> + <s:url id="urlName" + action="getForeignEntities" + namespace="/dbeditor" + escapeAmp="false"> + <s:param name="entityType" value="%{#meta.typeSimpleName}"/> + </s:url> + <%-- TODO sletellier 20111115 : foreign key --%> + <s:if test="#meta.fK"> + <%--Foreign : <s:property value="%{#meta.name}"/>--%> + <sj:select id="%{#meta.name}" + label="%{getText(#meta.i18nKey)}" + href="%{urlName}" + list="entities" + listenTopics="rowselect" + emptyOption="true"/> + </s:if> + <s:else> + <s:if test='#meta.columnType == "string"'> + <s:textfield id="%{#meta.name}" + label="%{getText(#meta.i18nKey)}" + disabled="%{#meta.fK}" + value=""/> + </s:if> + <s:elseif test='#meta.columnType == "boolean"'> + <s:checkbox id="%{#meta.name}" + label="%{getText(#meta.i18nKey)}" value="%{false}"/> + </s:elseif> + <s:elseif test='#meta.columnType == "date"'> + <sj:datepicker id="%{#meta.name}" + label="%{getText(#meta.i18nKey)}"/> + </s:elseif> + </s:else> + <br/> + </s:iterator> + </fieldset> + <ul class="toolbar floatRight"> + <li><s:reset key="echobase.common.reset"/></li> + <li><s:submit key="echobase.action.save" theme="simple"/></li> + </ul> + </s:form> + </s:if>