This is an automated email from the ASF dual-hosted git repository.
doebele pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/empire-db.git
The following commit(s) were added to refs/heads/master by this push:
new 18ddbf07 EMPIREDB-422 FormGridTag improvments
18ddbf07 is described below
commit 18ddbf073ab022b0460086717f02071ee000e14d
Author: Rainer Döbele <[email protected]>
AuthorDate: Fri May 17 11:56:46 2024 +0200
EMPIREDB-422
FormGridTag improvments
---
.../apache/empire/jsf2/components/ControlTag.java | 19 ++++-
.../apache/empire/jsf2/components/FormGridTag.java | 24 +++++--
.../apache/empire/jsf2/components/MenuItemTag.java | 2 +-
.../apache/empire/jsf2/components/MenuListTag.java | 2 +-
.../apache/empire/jsf2/components/TabViewTag.java | 2 +-
.../empire/jsf2/utils/ControlRenderInfo.java | 8 +--
.../empire/jsf2/utils/TagEncodingHelper.java | 81 +++++++++++++++++-----
7 files changed, 105 insertions(+), 33 deletions(-)
diff --git
a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/ControlTag.java
b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/ControlTag.java
index 52887087..51d87cd6 100644
---
a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/ControlTag.java
+++
b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/ControlTag.java
@@ -329,7 +329,7 @@ public class ControlTag extends UIInput implements
NamingContainer
ResponseWriter writer = context.getResponseWriter();
writer.startElement(renderInfo.CONTROL_TAG, this);
// render id
- helper.writeComponentId(writer, renderInfo.RENDER_AUTO_ID);
+ helper.writeComponentId(writer, false);
// style class
String controlClass =
helper.getTagAttributeStringEx("controlClass");
String styleClass = helper.getControlContextStyleClass();
@@ -437,6 +437,23 @@ public class ControlTag extends UIInput implements
NamingContainer
super.setId(id);
}
+ @Override
+ public void setParent(UIComponent parent)
+ {
+ super.setParent(parent);
+ // check
+ if (helper.hasComponentId())
+ return;
+ if (this.renderInfo==null) {
+ this.renderInfo=helper.getControlRenderInfo();
+ if (this.renderInfo!=null &&
this.renderInfo.AUTO_CONTROL_ID!=null) {
+ String compId =
helper.completeInputTagId(this.renderInfo.AUTO_CONTROL_ID.toString());
+ log.warn("Auto-Setting compontent id for control to {}",
compId);
+ super.setId(compId);
+ }
+ }
+ }
+
@Override
public String getId()
{
diff --git
a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/FormGridTag.java
b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/FormGridTag.java
index d7a98aa8..d75f7c7e 100644
---
a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/FormGridTag.java
+++
b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/FormGridTag.java
@@ -20,13 +20,12 @@ package org.apache.empire.jsf2.components;
import java.io.IOException;
-import javax.faces.component.NamingContainer;
import javax.faces.component.UINamingContainer;
import javax.faces.component.UIOutput;
import javax.faces.context.FacesContext;
import javax.faces.context.ResponseWriter;
-import org.apache.empire.commons.ObjectUtils;
+import org.apache.empire.commons.StringUtils;
import org.apache.empire.jsf2.controls.InputControl;
import org.apache.empire.jsf2.utils.ControlRenderInfo;
import org.apache.empire.jsf2.utils.TagEncodingHelper;
@@ -35,7 +34,7 @@ import org.apache.empire.jsf2.utils.TagStyleClass;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-public class FormGridTag extends UIOutput implements NamingContainer
+public class FormGridTag extends UIOutput // implements NamingContainer
{
// Logger
private static final Logger log =
LoggerFactory.getLogger(FormGridTag.class);
@@ -112,7 +111,7 @@ public class FormGridTag extends UIOutput implements
NamingContainer
ResponseWriter writer = context.getResponseWriter();
writer.startElement(mode.GRID_TAG, this);
// id
- helper.writeComponentId(writer, getControlRenderInfo().RENDER_AUTO_ID);
+ helper.writeComponentId(writer);
// style class
helper.writeStyleClass(writer);
helper.writeAttribute(writer, InputControl.HTML_ATTR_STYLE,
helper.getTagAttributeString("style"));
@@ -150,10 +149,21 @@ public class FormGridTag extends UIOutput implements
NamingContainer
// check mode
if (this.mode==null)
this.mode =
FormGridMode.detect(helper.getTagAttributeString("mode",
FormGridMode.GRID.name()));
- // additional
- boolean renderAutoId =
ObjectUtils.getBoolean(helper.getTagAttributeString("renderAutoId"));
+ // autoControlId
+ Character autoControlId = null;
+ Object autoId = helper.getTagAttributeString("autoControlId");
+ if (autoId!=null)
+ { // check
+ String id = autoId.toString();
+ if ("true".equalsIgnoreCase(id))
+ autoControlId = TagEncodingHelper.PH_COLUMN_SMART;
+ else if (id.length()==1 && StringUtils.indexOfAny(id,
TagEncodingHelper.ALLOWED_COLUMN_PH)>=0)
+ autoControlId = id.charAt(0);
+ else if (!"false".equalsIgnoreCase(id))
+ log.warn("FormGridTag: Invalid value \"{}\" for attribute
\"autoControlId\". Allowed values are *|@|&", id);
+ }
// create control info
- this.controlRenderInfo = new ControlRenderInfo(mode.CONTROL_TAG,
mode.LABEL_TAG, mode.INPUT_TAG, renderAutoId);
+ this.controlRenderInfo = new ControlRenderInfo(mode.CONTROL_TAG,
mode.LABEL_TAG, mode.INPUT_TAG, autoControlId);
return controlRenderInfo;
}
}
diff --git
a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/MenuItemTag.java
b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/MenuItemTag.java
index 3a35b721..1ea8fd36 100644
---
a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/MenuItemTag.java
+++
b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/MenuItemTag.java
@@ -109,7 +109,7 @@ public class MenuItemTag extends LinkTag
writer.startElement("li", this);
//Compoent-ID
- helper.writeComponentId(writer, false);
+ helper.writeComponentId(writer);
// Style Class
helper.writeAttribute(writer, "class", getStyleClass());
diff --git
a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/MenuListTag.java
b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/MenuListTag.java
index 709da792..24b75f98 100644
---
a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/MenuListTag.java
+++
b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/MenuListTag.java
@@ -82,7 +82,7 @@ public class MenuListTag extends UIOutput // implements
NamingContainer
writer.startElement("ul", this);
//Compoent-ID
- helper.writeComponentId(writer, false);
+ helper.writeComponentId(writer);
// Style class and style
helper.writeAttribute(writer, "class", getStyleClass());
diff --git
a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/TabViewTag.java
b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/TabViewTag.java
index abaa3c50..7d19371b 100644
---
a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/TabViewTag.java
+++
b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/TabViewTag.java
@@ -211,7 +211,7 @@ public class TabViewTag extends UIOutput // implements
NamingContainer
// render components
ResponseWriter writer = context.getResponseWriter();
writer.startElement(InputControl.HTML_TAG_DIV, this);
- helper.writeComponentId(writer, true);
+ helper.writeComponentId(writer);
helper.writeStyleClass(writer);
// style
String style = this.helper.getTagAttributeString("style");
diff --git
a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/utils/ControlRenderInfo.java
b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/utils/ControlRenderInfo.java
index b6ccaf57..733f158c 100644
---
a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/utils/ControlRenderInfo.java
+++
b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/utils/ControlRenderInfo.java
@@ -32,20 +32,20 @@ public class ControlRenderInfo
{
public DefaultControlRenderInfo()
{
- super(null, InputControl.HTML_TAG_TD, InputControl.HTML_TAG_TD,
true);
+ super(null, InputControl.HTML_TAG_TD, InputControl.HTML_TAG_TD,
null);
}
}
public final String CONTROL_TAG;
public final String LABEL_WRAPPER_TAG;
public final String INPUT_WRAPPER_TAG;
- public final boolean RENDER_AUTO_ID;
+ public final Character AUTO_CONTROL_ID;
- public ControlRenderInfo(String controlTag, String labelTag, String
inputTag, boolean renderAutoId)
+ public ControlRenderInfo(String controlTag, String labelTag, String
inputTag, Character autoControlId)
{
this.CONTROL_TAG = StringUtils.nullIfEmpty(controlTag);
this.LABEL_WRAPPER_TAG = StringUtils.nullIfEmpty(labelTag);
this.INPUT_WRAPPER_TAG = StringUtils.nullIfEmpty(inputTag);
- this.RENDER_AUTO_ID = renderAutoId;
+ this.AUTO_CONTROL_ID = autoControlId;
}
}
diff --git
a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/utils/TagEncodingHelper.java
b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/utils/TagEncodingHelper.java
index 0edf2520..254a2038 100644
---
a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/utils/TagEncodingHelper.java
+++
b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/utils/TagEncodingHelper.java
@@ -20,6 +20,7 @@ package org.apache.empire.jsf2.utils;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
+import java.util.HashSet;
import java.util.Iterator;
import java.util.Locale;
import java.util.Set;
@@ -50,9 +51,9 @@ import org.apache.empire.commons.Unwrappable;
import org.apache.empire.data.Column;
import org.apache.empire.data.ColumnExpr;
import org.apache.empire.data.DataType;
+import org.apache.empire.data.EntityType;
import org.apache.empire.data.Record;
import org.apache.empire.data.RecordData;
-import org.apache.empire.db.DBColumn;
import org.apache.empire.db.DBDatabase;
import org.apache.empire.db.DBRecordBase;
import org.apache.empire.db.DBRowSet;
@@ -118,6 +119,13 @@ public class TagEncodingHelper implements NamingContainer
{
return expr.getEnumType();
}
+
+ @Override
+ public EntityType getEntityType()
+ {
+ Column column = getUpdateColumn();
+ return (column!=null ? column.getEntityType() : null);
+ }
@Override
public String getName()
@@ -494,31 +502,48 @@ public class TagEncodingHelper implements NamingContainer
checkRecord();
}
- protected static final String PH_COLUMN_NAME = "@"; // placeholder for
column name
- protected static final String PH_COLUMN_FULL = "&"; // placeholder for
column full name including table
+ public static final char PH_COLUMN_NAME = '@'; // placeholder for column
name
+ public static final char PH_COLUMN_FULL = '$'; // placeholder for column
full name including table
+ public static final char PH_COLUMN_SMART = '*'; // placeholder for column
name smart mode
+ public static final char[] ALLOWED_COLUMN_PH = new char[] {
PH_COLUMN_NAME, PH_COLUMN_FULL, PH_COLUMN_SMART };
+ public static final Set<String> SMART_COLUMN_NAME_SET;
+ static {
+ SMART_COLUMN_NAME_SET = new HashSet<String>();
+ SMART_COLUMN_NAME_SET.add("ID");
+ SMART_COLUMN_NAME_SET.add("NAME");
+ SMART_COLUMN_NAME_SET.add("STATUS");
+ }
public String completeInputTagId(String id)
{
// EmptyString or AT
- if (StringUtils.isEmpty(id) || PH_COLUMN_NAME.equals(id))
- return getColumnName();
+ if (StringUtils.isEmpty(id))
+ id = "*"; // Smart
+ else if (id.startsWith(FACES_ID_PREFIX))
+ return id; // Faces-Auto-ID
// replace placeholder
- if (id.indexOf(PH_COLUMN_NAME)>=0)
+ int idx;
+ String name;
+ if ((idx=id.indexOf(PH_COLUMN_NAME))>=0)
{ // column name only
- id = id.replace(PH_COLUMN_NAME, getColumnName());
+ name = getColumnName();
}
- else if (id.indexOf(PH_COLUMN_FULL)>=0)
+ else if ((idx=id.indexOf(PH_COLUMN_SMART))>=0)
+ { // column name only
+ name = getColumnName();
+ if (SMART_COLUMN_NAME_SET.contains(name))
+ name= getColumnFullName();
+ }
+ else if ((idx=id.indexOf(PH_COLUMN_FULL))>=0)
{ // column full name including table
- String name= null;
- if (column==null)
- column = findColumn();
- if (column instanceof DBColumn)
- name = ((DBColumn)column).getFullName().replace('.', '_');
- else if (column!=null)
- name = column.getName();
- id = id.replace(PH_COLUMN_FULL, String.valueOf(name));
+ name= getColumnFullName();
+ }
+ else
+ { // No placeholder
+ return id;
}
// done
+ id = (id.length()>1 ? StringUtils.concat(id.substring(0, idx), name,
id.substring(idx+1)) : name);
return id;
}
@@ -675,7 +700,21 @@ public class TagEncodingHelper implements NamingContainer
// don't use hasColumn() or getColumn() here!
if (column==null)
column = findColumn();
- return (column!=null ? column.getName() : "null");
+ return (column!=null ? column.getName() : StringUtils.NULL);
+ }
+
+ public String getColumnFullName()
+ {
+ if (column==null)
+ column = findColumn();
+ if (column==null)
+ return StringUtils.NULL;
+ // Find Entity
+ EntityType entity = column.getEntityType();
+ if (entity!=null)
+ return StringUtils.concat(entity.getEntityName(), "_",
column.getName());
+ // No Entity
+ return column.getName();
}
public void setColumn(Column column)
@@ -1547,6 +1586,12 @@ public class TagEncodingHelper implements NamingContainer
if (renderAutoId || hasComponentId())
writer.writeAttribute(InputControl.HTML_ATTR_ID,
component.getClientId(), null);
}
+
+ public void writeComponentId(ResponseWriter writer)
+ throws IOException
+ {
+ writeComponentId(writer, (component instanceof NamingContainer));
+ }
public void writeStyleClass(ResponseWriter writer, String... styleClasses)
throws IOException
@@ -1581,7 +1626,7 @@ public class TagEncodingHelper implements NamingContainer
writer.startElement(tagName, this.component);
// render id
if (renderId)
- writeComponentId(writer, false);
+ writeComponentId(writer);
// style class
String wrapCtxClass = (renderValue ? "eWrapVal" : "eWrapInp");
writeStyleClass(writer, wrapCtxClass, nullIf(wrapperClass, '-'));