This is an automated email from the ASF dual-hosted git repository.
nmalin pushed a commit to branch trunk in repository https://gitbox.apache.org/repos/asf/ofbiz-framework.git The following commit(s) were added to refs/heads/trunk by this push: new 2c58133 Improved: Improve webtools/control/FindGeneric (OFBIZ-11253) Update the script to generate xml form to introduce new following features : 2c58133 is described below commit 2c58133e50a61c8caf57aee47e1f786a8f3eaaa8 Author: Nicolas Malin <[hidden email]> AuthorDate: Sun Nov 10 20:14:14 2019 +0100 Improved: Improve webtools/control/FindGeneric (OFBIZ-11253) Update the script to generate xml form to introduce new following features : * set equals as operator by default on pk instead of contains, when you use a pk on FindGeneric it's in general to resolve it on completed key. * add on tooltip the raw field name * add possibility to filter on internal field * add sort on column During this work I also view that the ModelFormField contains an 'IF forest' to analyze each field. I rewrote it to consolidate the analyze by type. --- .../groovyScripts/entity/FindGeneric.groovy | 76 +++++++----- .../ofbiz/widget/model/ModelFormFieldBuilder.java | 134 ++++++++++----------- 2 files changed, 111 insertions(+), 99 deletions(-) diff --git a/framework/webtools/groovyScripts/entity/FindGeneric.groovy b/framework/webtools/groovyScripts/entity/FindGeneric.groovy index 127a94a..11bbacb 100644 --- a/framework/webtools/groovyScripts/entity/FindGeneric.groovy +++ b/framework/webtools/groovyScripts/entity/FindGeneric.groovy @@ -17,9 +17,6 @@ * under the License. */ -import org.apache.ofbiz.base.util.Debug -import org.apache.ofbiz.base.util.UtilValidate -import org.apache.ofbiz.base.util.UtilProperties import org.apache.ofbiz.base.util.UtilXml import org.apache.ofbiz.entity.GenericEntityException import org.apache.ofbiz.entity.model.ModelEntity @@ -28,7 +25,6 @@ import org.apache.ofbiz.entity.model.ModelReader import org.apache.ofbiz.widget.model.FormFactory import org.apache.ofbiz.widget.model.ModelForm import org.apache.ofbiz.widget.renderer.FormRenderer -import org.apache.ofbiz.widget.renderer.VisualTheme import org.apache.ofbiz.widget.renderer.macro.MacroFormRenderer import org.w3c.dom.Document @@ -36,7 +32,7 @@ ModelEntity modelEntity = null try { modelEntity = delegator.getModelEntity(parameters.entityName) } catch(GenericEntityException e) { - Debug.logError("The entityName " + parameters.entityName + " is not found", "FindGeneric.groovy") + logError("The entityName ${parameters.entityName} isn't found", "FindGeneric.groovy") } if (modelEntity) { @@ -44,28 +40,35 @@ if (modelEntity) { context.entityName = entityName ModelReader entityModelReader = delegator.getModelReader() //create the search form with auto-fields-entity - String dynamicAutoEntityFieldSearchForm = '<?xml version="1.0" encoding="UTF-8"?><forms xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://ofbiz.apache.org/Widget-Form" xsi:schemaLocation="http://ofbiz.apache.org/Widget-Form http://ofbiz.apache.org/dtds/widget-form.xsd">' + - '<form name="FindGeneric" type="single" target="FindGeneric?entityName='+ entityName +'">' + - '<auto-fields-entity entity-name="' + entityName + '" default-field-type="find"/>' + - '<field name="noConditionFind"><hidden value="Y"/></field>' + - '<field name="searchOptions_collapsed" ><hidden value="true"/></field>' + - '<field name="searchButton" title="' + UtilProperties.getMessage("CommonUiLabels", "FormFieldTitle_searchButton", locale) + '"><submit/></field>' + String dynamicAutoEntityFieldSearchForm = """<?xml version="1.0" encoding="UTF-8"?><forms xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://ofbiz.apache.org/Widget-Form" xsi:schemaLocation="http://ofbiz.apache.org/Widget-Form http://ofbiz.apache.org/dtds/widget-form.xsd"> + <form name="FindGeneric" type="single" target="FindGeneric?entityName=${entityName}"> + <auto-fields-entity entity-name="${entityName}" default-field-type="find" include-internal="true"/> + <field name="noConditionFind"><hidden value="Y"/></field> + <field name="searchOptions_collapsed" ><hidden value="true"/></field> + <field name="searchButton"><submit/></field>""" //call modelEntity to complete information on the field type modelEntity.getFieldsUnmodifiable().each { modelField -> if (! modelEntity.getAutomaticFieldNames().contains(modelField.name)) { ModelFieldType type = delegator.getEntityFieldType(modelEntity, modelField.getType()) - dynamicAutoEntityFieldSearchForm = dynamicAutoEntityFieldSearchForm + - '<field name="' + modelField.name + '" tooltip="' + - (modelField.getIsPk() ? "* " : " ") + - modelField.getType() + " (${type.getJavaType()} - ${type.getSqlType()})" + - '"/>' + dynamicAutoEntityFieldSearchForm += + "<field name=\"${modelField.name}\" tooltip=\"${modelField.getName()}" + + (modelField.getIsPk() ? '* ': ' ') + + " / ${modelField.getType()} (${type.getJavaType()} - ${type.getSqlType()})\">" + + //In general when your research some entity on the pk field, you check on element, so help by set as default equals comparison + if (modelField.getIsPk() && type.getJavaType() == 'String') { + dynamicAutoEntityFieldSearchForm += '<text-find default-option="equals"/>' + } + dynamicAutoEntityFieldSearchForm += '</field>' } } dynamicAutoEntityFieldSearchForm = dynamicAutoEntityFieldSearchForm + '</form></forms>' + logVerbose(dynamicAutoEntityFieldSearchForm) Document dynamicAutoEntityFieldSearchFormXml = UtilXml.readXmlDocument(dynamicAutoEntityFieldSearchForm, true, true) Map<String, ModelForm> modelFormMap = FormFactory.readFormDocument(dynamicAutoEntityFieldSearchFormXml, entityModelReader, dispatcher.getDispatchContext(), entityName) + ModelForm modelForm if (modelFormMap) { Map.Entry<String, ModelForm> entry = modelFormMap.entrySet().iterator().next() modelForm = entry.getValue() @@ -79,22 +82,31 @@ if (modelEntity) { context.dynamicAutoEntitySearchForm = writer //prepare the result list from performFind - String dynamicAutoEntityFieldListForm = '<?xml version="1.0" encoding="UTF-8"?><forms xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://ofbiz.apache.org/Widget-Form" xsi:schemaLocation="http://ofbiz.apache.org/Widget-Form http://ofbiz.apache.org/dtds/widget-form.xsd">' + - '<form name="ListGeneric" type="list" target="FindGeneric" list-name="listIt" ' + - ' odd-row-style="alternate-row" default-table-style="basic-table light-grid hover-bar">' + - '<actions><service service-name="performFind">' + - '<field-map field-name="inputFields" from-field="parameters"/>' + - '<field-map field-name="entityName" value="' + entityName + '"/>' + - '</service></actions>' + - '<auto-fields-entity entity-name="' + entityName + '" default-field-type="display" include-internal="true"/>' + - '<field name="entityName"><hidden value="' + entityName + '"/></field>' + - '<field name="viewGeneric" title=" "><hyperlink target="ViewGeneric" description="view">' + - ' <auto-parameters-entity entity-name="' + entityName + '"/>' + - ' <parameter param-name="entityName" value="' + entityName + '"/>' + - '</hyperlink></field>' + - '<sort-order><sort-field name="viewGeneric"/></sort-order>' + - '</form></forms>' - //Debug.logInfo(dynamicAutoEntityFieldForm, "") + String dynamicAutoEntityFieldListForm = """<?xml version="1.0" encoding="UTF-8"?><forms xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://ofbiz.apache.org/Widget-Form" xsi:schemaLocation="http://ofbiz.apache.org/Widget-Form http://ofbiz.apache.org/dtds/widget-form.xsd"> + <form name="ListGeneric" type="list" target="FindGeneric" list-name="listIt" + odd-row-style="alternate-row" default-table-style="basic-table light-grid hover-bar" header-row-style="header-row-2"> + <actions> + <service service-name="performFind"> + <field-map field-name="inputFields" from-field="parameters"/> + <field-map field-name="entityName" value="${entityName}"/> + <field-map field-name="orderBy" from-field="parameters.sortField"/> + </service> + </actions> + <auto-fields-entity entity-name="${entityName}" default-field-type="display" include-internal="true"/> + <field name="entityName"><hidden value="${entityName}"/></field>""" + modelEntity.getFieldsUnmodifiable().each { + modelField -> + dynamicAutoEntityFieldListForm += + "<field name=\"${modelField.name}\" sort-field=\"true\"/>" + } + dynamicAutoEntityFieldListForm += """ + <field name="viewGeneric" title=" "><hyperlink target="ViewGeneric" description="view"> + <auto-parameters-entity entity-name="${entityName}"/> + <parameter param-name="entityName" value="${entityName}"/> + </hyperlink></field> + <sort-order><sort-field name="viewGeneric"/></sort-order> + </form></forms>""" + Document dynamicAutoEntityFieldListFormXml = UtilXml.readXmlDocument(dynamicAutoEntityFieldListForm, true, true) modelFormMap = FormFactory.readFormDocument(dynamicAutoEntityFieldListFormXml, entityModelReader, dispatcher.getDispatchContext(), entityName) if (modelFormMap) { diff --git a/framework/widget/src/main/java/org/apache/ofbiz/widget/model/ModelFormFieldBuilder.java b/framework/widget/src/main/java/org/apache/ofbiz/widget/model/ModelFormFieldBuilder.java index 656b99d..a59ca45 100644 --- a/framework/widget/src/main/java/org/apache/ofbiz/widget/model/ModelFormFieldBuilder.java +++ b/framework/widget/src/main/java/org/apache/ofbiz/widget/model/ModelFormFieldBuilder.java @@ -19,10 +19,12 @@ package org.apache.ofbiz.widget.model; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.Map; import org.apache.ofbiz.base.util.Debug; +import org.apache.ofbiz.base.util.UtilMisc; import org.apache.ofbiz.base.util.UtilValidate; import org.apache.ofbiz.base.util.UtilXml; import org.apache.ofbiz.base.util.collections.FlexibleMapAccessor; @@ -113,6 +115,43 @@ public class ModelFormFieldBuilder { private String tabindex = ""; private String conditionGroup = ""; + protected static final List<String> numericFieldTypes = Collections.unmodifiableList(UtilMisc.toList( + "floating-point", "numeric", "fixed-point", + "currency-amount", "currency-precise")); + protected static final List<String> textFieldTypes = Collections.unmodifiableList(UtilMisc.toList( + "id", "id-long", "id-vlong", + "very-short", "name", "short-varchar", + "value", "comment", "description", + "long-varchar", "url", "email")); + protected static final Map<String, Integer> textSizeByFieldTypes = Collections.unmodifiableMap(UtilMisc.toMap( + "id", 20, + "id-long", 40, + "id-vlong", 60, + "very-short", 6, + "name", 40, + "short-varchar", 40, + "value", 60, + "comment", 60, + "description", 60, + "long-varchar", 60, + "url", 60, + "email", 60)); + protected static final Map<String, Integer> textMaxSizeByFieldTypes = Collections.unmodifiableMap(UtilMisc.toMap( + "id", 20, + "id-long", 60, + "id-vlong", 250, + "very-short", 10, + "name", 60, + "short-varchar", 40, + "value", 250, + "comment", 250, + "description", 250, + "long-varchar", 250, + "url", 250, + "email", 250)); + protected static final List<String> dateFieldTypes = Collections.unmodifiableList(UtilMisc.toList( + "date-time", "date", "time")); + public ModelFormFieldBuilder() { } @@ -518,41 +557,26 @@ public class ModelFormFieldBuilder { } this.entityName = modelEntity.getEntityName(); this.fieldName = modelField.getName(); + String fieldType = modelField.getType(); if ("find".equals(defaultFieldType)) { - if ("id".equals(modelField.getType())) { - ModelFormField.TextFindField textField = new ModelFormField.TextFindField(FieldInfo.SOURCE_AUTO_ENTITY, 20, - 20, null); - this.setFieldInfo(textField); - } else if ("id-long".equals(modelField.getType())) { - ModelFormField.TextFindField textField = new ModelFormField.TextFindField(FieldInfo.SOURCE_AUTO_ENTITY, 40, - 60, null); - this.setFieldInfo(textField); - } else if ("id-vlong".equals(modelField.getType())) { - ModelFormField.TextFindField textField = new ModelFormField.TextFindField(FieldInfo.SOURCE_AUTO_ENTITY, 60, - 250, null); - this.setFieldInfo(textField); - } else if ("very-short".equals(modelField.getType())) { - ModelFormField.TextField textField = new ModelFormField.TextField(FieldInfo.SOURCE_AUTO_ENTITY, 6, - 10, null); - this.setFieldInfo(textField); - } else if ("name".equals(modelField.getType()) || "short-varchar".equals(modelField.getType())) { - ModelFormField.TextFindField textField = new ModelFormField.TextFindField(FieldInfo.SOURCE_AUTO_ENTITY, 40, - 60, null); - this.setFieldInfo(textField); - } else if ("value".equals(modelField.getType()) || "comment".equals(modelField.getType()) - || "description".equals(modelField.getType()) || "long-varchar".equals(modelField.getType()) - || "url".equals(modelField.getType()) || "email".equals(modelField.getType())) { - ModelFormField.TextFindField textField = new ModelFormField.TextFindField(FieldInfo.SOURCE_AUTO_ENTITY, 60, - 250, null); + if ("indicator".equals(fieldType)) { + List<OptionSource> optionSources = UtilMisc.toList( + new ModelFormField.SingleOption("", null, null), + new ModelFormField.SingleOption("Y", null, null), + new ModelFormField.SingleOption("N", null, null)); + ModelFormField.DropDownField dropDownField = new ModelFormField.DropDownField(FieldInfo.SOURCE_AUTO_ENTITY, + optionSources); + this.setFieldInfo(dropDownField); + } else if (textFieldTypes.contains(fieldType)) { + ModelFormField.TextFindField textField = new ModelFormField.TextFindField(FieldInfo.SOURCE_AUTO_ENTITY, + textSizeByFieldTypes.get(fieldType), textMaxSizeByFieldTypes.get(fieldType), null); this.setFieldInfo(textField); - } else if ("floating-point".equals(modelField.getType()) || "currency-amount".equals(modelField.getType()) - || "numeric".equals(modelField.getType()) || "fixed-point".equals(modelField.getType()) || "currency-precise".equals(modelField.getType())) { + } else if (numericFieldTypes.contains(fieldType)) { ModelFormField.RangeFindField textField = new ModelFormField.RangeFindField(FieldInfo.SOURCE_AUTO_ENTITY, 6, null); this.setFieldInfo(textField); - } else if ("date-time".equals(modelField.getType()) || "date".equals(modelField.getType()) - || "time".equals(modelField.getType())) { - String type = modelField.getType(); - if ("date-time".equals(modelField.getType())) { + } else if (dateFieldTypes.contains(fieldType)) { + String type = fieldType; + if ("date-time".equals(fieldType)) { type = "timestamp"; } ModelFormField.DateFindField dateTimeField = new ModelFormField.DateFindField(FieldInfo.SOURCE_AUTO_ENTITY, type); @@ -568,50 +592,26 @@ public class ModelFormFieldBuilder { ModelFormField.HiddenField hiddenField = new ModelFormField.HiddenField(FieldInfo.SOURCE_AUTO_SERVICE, null); this.setFieldInfo(hiddenField); } else { - if ("id".equals(modelField.getType())) { - ModelFormField.TextField textField = new ModelFormField.TextField(FieldInfo.SOURCE_AUTO_ENTITY, 20, - 20, null); - this.setFieldInfo(textField); - } else if ("id-long".equals(modelField.getType())) { - ModelFormField.TextField textField = new ModelFormField.TextField(FieldInfo.SOURCE_AUTO_ENTITY, 40, - 60, null); - this.setFieldInfo(textField); - } else if ("id-vlong".equals(modelField.getType())) { - ModelFormField.TextField textField = new ModelFormField.TextField(FieldInfo.SOURCE_AUTO_ENTITY, 60, - 250, null); - this.setFieldInfo(textField); - } else if ("indicator".equals(modelField.getType())) { - List<OptionSource> optionSources = new ArrayList<>(); - optionSources.add(new ModelFormField.SingleOption("Y", null, null)); - optionSources.add(new ModelFormField.SingleOption("N", null, null)); + if ("indicator".equals(fieldType)) { + List<OptionSource> optionSources = UtilMisc.toList( + new ModelFormField.SingleOption("Y", null, null), + new ModelFormField.SingleOption("N", null, null)); ModelFormField.DropDownField dropDownField = new ModelFormField.DropDownField(FieldInfo.SOURCE_AUTO_ENTITY, optionSources); this.setFieldInfo(dropDownField); - } else if ("very-short".equals(modelField.getType())) { - ModelFormField.TextField textField = new ModelFormField.TextField(FieldInfo.SOURCE_AUTO_ENTITY, 6, - 10, null); - this.setFieldInfo(textField); - } else if ("very-long".equals(modelField.getType())) { + } else if ("very-long".equals(fieldType)) { ModelFormField.TextareaField textareaField = new ModelFormField.TextareaField(FieldInfo.SOURCE_AUTO_ENTITY, null); this.setFieldInfo(textareaField); - } else if ("name".equals(modelField.getType()) || "short-varchar".equals(modelField.getType())) { - ModelFormField.TextField textField = new ModelFormField.TextField(FieldInfo.SOURCE_AUTO_ENTITY, 40, - 60, null); - this.setFieldInfo(textField); - } else if ("value".equals(modelField.getType()) || "comment".equals(modelField.getType()) - || "description".equals(modelField.getType()) || "long-varchar".equals(modelField.getType()) - || "url".equals(modelField.getType()) || "email".equals(modelField.getType())) { - ModelFormField.TextField textField = new ModelFormField.TextField(FieldInfo.SOURCE_AUTO_ENTITY, 60, - 250, null); + } if (textFieldTypes.contains(fieldType)) { + ModelFormField.TextField textField = new ModelFormField.TextField(FieldInfo.SOURCE_AUTO_ENTITY, + textSizeByFieldTypes.get(fieldType), textMaxSizeByFieldTypes.get(fieldType), null); this.setFieldInfo(textField); - } else if ("floating-point".equals(modelField.getType()) || "currency-amount".equals(modelField.getType()) - || "numeric".equals(modelField.getType())) { + } else if (numericFieldTypes.contains(fieldType)) { ModelFormField.TextField textField = new ModelFormField.TextField(FieldInfo.SOURCE_AUTO_ENTITY, 6, null, null); this.setFieldInfo(textField); - } else if ("date-time".equals(modelField.getType()) || "date".equals(modelField.getType()) - || "time".equals(modelField.getType())) { - String type = modelField.getType(); - if ("date-time".equals(modelField.getType())) { + } else if (dateFieldTypes.contains(fieldType)) { + String type = fieldType; + if ("date-time".equals(fieldType)) { type = "timestamp"; } ModelFormField.DateTimeField dateTimeField = new ModelFormField.DateTimeField(FieldInfo.SOURCE_AUTO_ENTITY, type); |
Free forum by Nabble | Edit this page |