You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by lo...@apache.org on 2021/03/20 13:34:17 UTC

[myfaces-tobago] branch master updated (0ba752d -> c538d5b)

This is an automated email from the ASF dual-hosted git repository.

lofwyr pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/myfaces-tobago.git.


    from 0ba752d  docs: reference to issue in commit msg
     new 5cd4d59  chore: refactor RenderUtils -> RendererBase
     new a6e1d55  chore: refactor ComponentUtils -> RendererBase
     new 72c311d  chore: refactor ComponentUtils -> RendererBase
     new c538d5b  chore: refactor ComponentUtils -> RendererBase

The 4 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../internal/renderkit/renderer/BadgeRenderer.java |   3 +-
 .../renderkit/renderer/HiddenRenderer.java         |   3 +-
 .../internal/renderkit/renderer/OutRenderer.java   |   5 +-
 .../renderer/SelectManyCheckboxRenderer.java       |   2 +-
 .../renderer/SelectManyListboxRenderer.java        |   2 +-
 .../renderer/SelectManyShuttleRenderer.java        |   6 +-
 .../renderer/SelectOneChoiceRenderer.java          |   2 +-
 .../renderer/SelectOneListboxRenderer.java         |   2 +-
 .../renderkit/renderer/SelectOneRadioRenderer.java |   2 +-
 .../renderkit/renderer/TextareaRenderer.java       |   3 +-
 .../renderkit/renderer/VerbatimRenderer.java       |   3 +-
 .../tobago/internal/util/HtmlRendererUtils.java    |  99 +++----------
 .../myfaces/tobago/internal/util/RenderUtils.java  |  26 ++--
 .../myfaces/tobago/renderkit/RendererBase.java     | 158 ++++++++++++++++++++-
 .../apache/myfaces/tobago/util/ComponentUtils.java |  50 ++-----
 15 files changed, 213 insertions(+), 153 deletions(-)

[myfaces-tobago] 01/04: chore: refactor RenderUtils -> RendererBase

Posted by lo...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

lofwyr pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/myfaces-tobago.git

commit 5cd4d59c87416295bb981a286d90fef401ee8d8e
Author: Udo Schnurpfeil <ud...@irian.eu>
AuthorDate: Fri Mar 19 18:09:53 2021 +0100

    chore: refactor RenderUtils -> RendererBase
---
 .../renderer/SelectManyListboxRenderer.java        |   2 +-
 .../renderer/SelectManyShuttleRenderer.java        |   6 +-
 .../renderer/SelectOneChoiceRenderer.java          |   2 +-
 .../renderer/SelectOneListboxRenderer.java         |   2 +-
 .../tobago/internal/util/HtmlRendererUtils.java    |  13 +++
 .../myfaces/tobago/renderkit/RendererBase.java     | 104 +++++++++++++++++++++
 6 files changed, 123 insertions(+), 6 deletions(-)

diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectManyListboxRenderer.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectManyListboxRenderer.java
index 978c985..8968a90 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectManyListboxRenderer.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectManyListboxRenderer.java
@@ -82,7 +82,7 @@ public class SelectManyListboxRenderer<T extends AbstractUISelectManyListbox> ex
     final Object[] values = component.getSelectedValues();
     final String[] submittedValues = getSubmittedValues(component);
 
-    HtmlRendererUtils.renderSelectItems(
+    renderSelectItems(
         component, TobagoClass.SELECT_MANY_LISTBOX__OPTION, items, values, submittedValues, writer, facesContext);
   }
 
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectManyShuttleRenderer.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectManyShuttleRenderer.java
index b34b835..84c27ce 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectManyShuttleRenderer.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectManyShuttleRenderer.java
@@ -94,7 +94,7 @@ public class SelectManyShuttleRenderer<T extends AbstractUISelectManyShuttle> ex
 
     final Object[] values = component.getSelectedValues();
     final String[] submittedValues = getSubmittedValues(component);
-    HtmlRendererUtils.renderSelectItems(
+    renderSelectItems(
         component, TobagoClass.SELECT_MANY_SHUTTLE__OPTION, items, values, submittedValues, false, writer,
         facesContext);
 
@@ -131,7 +131,7 @@ public class SelectManyShuttleRenderer<T extends AbstractUISelectManyShuttle> ex
         BootstrapClass.FORM_CONTROL);
     writer.writeAttribute(HtmlAttributes.MULTIPLE, true);
     writer.writeAttribute(HtmlAttributes.SIZE, size);
-    HtmlRendererUtils.renderSelectItems(
+    renderSelectItems(
         component, TobagoClass.SELECT_MANY_SHUTTLE__OPTION, items, values, submittedValues, true, writer,
         facesContext);
 
@@ -143,7 +143,7 @@ public class SelectManyShuttleRenderer<T extends AbstractUISelectManyShuttle> ex
     writer.writeNameAttribute(clientId);
     writer.writeAttribute(HtmlAttributes.MULTIPLE, true);
     writer.writeAttribute(HtmlAttributes.REQUIRED, component.isRequired());
-    HtmlRendererUtils.renderSelectItems(
+    renderSelectItems(
         component, TobagoClass.SELECT_MANY_SHUTTLE__OPTION, items, values, submittedValues, writer, facesContext);
     writer.endElement(HtmlElements.SELECT);
   }
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectOneChoiceRenderer.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectOneChoiceRenderer.java
index 6804e79..81c4faa 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectOneChoiceRenderer.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectOneChoiceRenderer.java
@@ -88,7 +88,7 @@ public class SelectOneChoiceRenderer<T extends AbstractUISelectOneChoice> extend
     }
     renderFocus(clientId, component.isFocus(), component.isError(), facesContext, writer);
 
-    HtmlRendererUtils.renderSelectItems(component, null, items, component.getValue(),
+    renderSelectItems(component, null, items, component.getValue(),
         (String) component.getSubmittedValue(), writer, facesContext);
   }
 
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectOneListboxRenderer.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectOneListboxRenderer.java
index 81cdf13..244f841 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectOneListboxRenderer.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectOneListboxRenderer.java
@@ -78,7 +78,7 @@ public class SelectOneListboxRenderer<T extends AbstractUISelectOneListbox> exte
     final String title = HtmlRendererUtils.getTitleFromTipAndMessages(facesContext, component);
     writer.writeAttribute(HtmlAttributes.TITLE, title, true);
     writer.writeAttribute(HtmlAttributes.SIZE, size);
-    HtmlRendererUtils.renderSelectItems(component, null, items, component.getValue(),
+    renderSelectItems(component, null, items, component.getValue(),
         (String) component.getSubmittedValue(), writer, facesContext);
   }
 
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/util/HtmlRendererUtils.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/util/HtmlRendererUtils.java
index ec264ef..97fe57c 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/util/HtmlRendererUtils.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/util/HtmlRendererUtils.java
@@ -26,6 +26,7 @@ import org.apache.myfaces.tobago.component.Visual;
 import org.apache.myfaces.tobago.context.Markup;
 import org.apache.myfaces.tobago.internal.component.AbstractUIStyle;
 import org.apache.myfaces.tobago.renderkit.LabelWithAccessKey;
+import org.apache.myfaces.tobago.renderkit.RendererBase;
 import org.apache.myfaces.tobago.renderkit.css.FaIcons;
 import org.apache.myfaces.tobago.renderkit.css.TobagoClass;
 import org.apache.myfaces.tobago.renderkit.html.DataAttributes;
@@ -112,12 +113,20 @@ public final class HtmlRendererUtils {
     return result;
   }
 
+  /**
+   * @deprecated since 5.0.0. Please use {@link RendererBase#renderSelectItems}
+   */
+  @Deprecated
   public static void renderSelectItems(final UIInput component, final TobagoClass optionClass,
       final Iterable<SelectItem> items, final Object[] values, final String[] submittedValues,
       final TobagoResponseWriter writer, final FacesContext facesContext) throws IOException {
     renderSelectItems(component, optionClass, items, values, submittedValues, null, writer, facesContext);
   }
 
+  /**
+   * @deprecated since 5.0.0. Please use {@link RendererBase#renderSelectItems}
+   */
+  @Deprecated
   public static void renderSelectItems(final UIInput component, final TobagoClass optionClass,
       final Iterable<SelectItem> items, final Object value, final String submittedValue,
       final TobagoResponseWriter writer, final FacesContext facesContext) throws IOException {
@@ -125,6 +134,10 @@ public final class HtmlRendererUtils {
         submittedValue != null ? new String[]{submittedValue} : null, null, writer, facesContext);
   }
 
+  /**
+   * @deprecated since 5.0.0. Please use {@link RendererBase#renderSelectItems}
+   */
+  @Deprecated
   public static void renderSelectItems(final UIInput component, final TobagoClass optionClass,
       final Iterable<SelectItem> items, final Object[] values, final String[] submittedValues,
       final Boolean onlySelected, final TobagoResponseWriter writer, final FacesContext facesContext)
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/RendererBase.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/RendererBase.java
index 0fb9ea1..df22260 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/RendererBase.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/RendererBase.java
@@ -21,19 +21,27 @@ package org.apache.myfaces.tobago.renderkit;
 
 import org.apache.myfaces.tobago.component.ClientBehaviors;
 import org.apache.myfaces.tobago.component.Facets;
+import org.apache.myfaces.tobago.component.RendererTypes;
+import org.apache.myfaces.tobago.component.Tags;
+import org.apache.myfaces.tobago.component.Visual;
+import org.apache.myfaces.tobago.context.Markup;
 import org.apache.myfaces.tobago.context.TobagoContext;
 import org.apache.myfaces.tobago.internal.behavior.EventBehavior;
 import org.apache.myfaces.tobago.internal.component.AbstractUICommand;
 import org.apache.myfaces.tobago.internal.component.AbstractUIEvent;
 import org.apache.myfaces.tobago.internal.component.AbstractUIReload;
+import org.apache.myfaces.tobago.internal.component.AbstractUIStyle;
 import org.apache.myfaces.tobago.internal.renderkit.Collapse;
 import org.apache.myfaces.tobago.internal.renderkit.Command;
 import org.apache.myfaces.tobago.internal.renderkit.CommandMap;
 import org.apache.myfaces.tobago.internal.renderkit.renderer.TobagoClientBehaviorRenderer;
+import org.apache.myfaces.tobago.internal.util.ArrayUtils;
 import org.apache.myfaces.tobago.internal.util.HtmlRendererUtils;
 import org.apache.myfaces.tobago.internal.util.RenderUtils;
 import org.apache.myfaces.tobago.internal.util.StringUtils;
+import org.apache.myfaces.tobago.internal.util.StyleRenderUtils;
 import org.apache.myfaces.tobago.internal.webapp.TobagoResponseWriterWrapper;
+import org.apache.myfaces.tobago.renderkit.css.TobagoClass;
 import org.apache.myfaces.tobago.renderkit.html.CustomAttributes;
 import org.apache.myfaces.tobago.renderkit.html.HtmlAttributes;
 import org.apache.myfaces.tobago.renderkit.html.HtmlElements;
@@ -44,6 +52,7 @@ import org.slf4j.LoggerFactory;
 
 import javax.faces.component.EditableValueHolder;
 import javax.faces.component.UIComponent;
+import javax.faces.component.UIInput;
 import javax.faces.component.ValueHolder;
 import javax.faces.component.behavior.AjaxBehavior;
 import javax.faces.component.behavior.ClientBehavior;
@@ -54,10 +63,13 @@ import javax.faces.context.FacesContext;
 import javax.faces.context.ResponseWriter;
 import javax.faces.convert.Converter;
 import javax.faces.convert.ConverterException;
+import javax.faces.model.SelectItem;
+import javax.faces.model.SelectItemGroup;
 import javax.faces.render.ClientBehaviorRenderer;
 import javax.faces.render.Renderer;
 import java.io.IOException;
 import java.lang.invoke.MethodHandles;
+import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
 
@@ -367,4 +379,96 @@ public abstract class RendererBase<T extends UIComponent> extends Renderer {
     }
   }
 
+  protected void renderSelectItems(final UIInput component, final TobagoClass optionClass,
+                                       final Iterable<SelectItem> items, final Object[] values, final String[] submittedValues,
+                                       final TobagoResponseWriter writer, final FacesContext facesContext) throws IOException {
+    renderSelectItems(component, optionClass, items, values, submittedValues, null, writer, facesContext);
+  }
+
+  protected void renderSelectItems(final UIInput component, final TobagoClass optionClass,
+                                       final Iterable<SelectItem> items, final Object value, final String submittedValue,
+                                       final TobagoResponseWriter writer, final FacesContext facesContext) throws IOException {
+    renderSelectItems(component, optionClass, items, value != null ? new Object[]{value} : null,
+        submittedValue != null ? new String[]{submittedValue} : null, null, writer, facesContext);
+  }
+
+  protected void renderSelectItems(final UIInput component, final TobagoClass optionClass,
+                                       final Iterable<SelectItem> items, final Object[] values, final String[] submittedValues,
+                                       final Boolean onlySelected, final TobagoResponseWriter writer, final FacesContext facesContext)
+      throws IOException {
+
+    if (LOG.isDebugEnabled()) {
+      LOG.debug("component id = '{}'", component.getId());
+      LOG.debug("values = '{}'", Arrays.toString(values));
+      LOG.debug("submittedValues = '{}'", Arrays.toString(submittedValues));
+    }
+    for (final SelectItem item : items) {
+      if (item instanceof SelectItemGroup) {
+        writer.startElement(HtmlElements.OPTGROUP);
+        writer.writeAttribute(HtmlAttributes.LABEL, item.getLabel(), true);
+        if (item.isDisabled()) {
+          writer.writeAttribute(HtmlAttributes.DISABLED, true);
+        }
+        final SelectItem[] selectItems = ((SelectItemGroup) item).getSelectItems();
+        renderSelectItems(component, optionClass, Arrays.asList(selectItems), values, submittedValues,
+            onlySelected, writer, facesContext);
+        writer.endElement(HtmlElements.OPTGROUP);
+      } else {
+
+        Object itemValue = item.getValue();
+        // when using selectItem tag with a literal value: use the converted value
+        if (itemValue instanceof String && values != null && values.length > 0 && !(values[0] instanceof String)) {
+          itemValue = ComponentUtils.getConvertedValue(facesContext, component, (String) itemValue);
+        }
+        final String formattedValue = ComponentUtils.getFormattedValue(facesContext, component, itemValue);
+        final boolean contains;
+        if (submittedValues == null) {
+          contains = ArrayUtils.contains(values, itemValue);
+        } else {
+          contains = ArrayUtils.contains(submittedValues, formattedValue);
+        }
+        if (onlySelected != null) {
+          if (onlySelected) {
+            if (!contains) {
+              continue;
+            }
+          } else {
+            if (contains) {
+              continue;
+            }
+          }
+        }
+        writer.startElement(HtmlElements.OPTION);
+        writer.writeAttribute(HtmlAttributes.VALUE, formattedValue, true);
+        if (item instanceof org.apache.myfaces.tobago.model.SelectItem) {
+          final String image = ((org.apache.myfaces.tobago.model.SelectItem) item).getImage();
+          if (image != null) {
+            final AbstractUIStyle style = (AbstractUIStyle) facesContext.getApplication()
+                .createComponent(facesContext, Tags.style.componentType(), RendererTypes.Style.name());
+            style.setTransient(true);
+            style.setBackgroundImage(image);
+            style.setSelector(
+                StyleRenderUtils.encodeIdSelector(component.getClientId(facesContext))
+                    + " option[value=" + formattedValue + "]");
+            // XXX This works not in common browsers...
+            component.getChildren().add(style);
+          }
+        }
+        Markup markup = item instanceof Visual ? ((Visual) item).getMarkup() : Markup.NULL;
+        if (onlySelected == null && contains) {
+          writer.writeAttribute(HtmlAttributes.SELECTED, true);
+          markup = Markup.SELECTED.add(markup);
+        }
+        if (item.isDisabled()) {
+          writer.writeAttribute(HtmlAttributes.DISABLED, true);
+          markup = Markup.DISABLED.add(markup);
+        }
+        writer.writeClassAttribute(optionClass, optionClass != null ? optionClass.createMarkup(markup) : null);
+
+        writer.writeText(item.getLabel());
+        writer.endElement(HtmlElements.OPTION);
+      }
+    }
+  }
+
 }

[myfaces-tobago] 02/04: chore: refactor ComponentUtils -> RendererBase

Posted by lo...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

lofwyr pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/myfaces-tobago.git

commit a6e1d556fd0a34383778019d4d7ababd236cceeb
Author: Udo Schnurpfeil <ud...@irian.eu>
AuthorDate: Fri Mar 19 18:22:26 2021 +0100

    chore: refactor ComponentUtils -> RendererBase
---
 .../myfaces/tobago/internal/renderkit/renderer/BadgeRenderer.java    | 3 +--
 .../myfaces/tobago/internal/renderkit/renderer/HiddenRenderer.java   | 3 +--
 .../myfaces/tobago/internal/renderkit/renderer/OutRenderer.java      | 5 ++---
 .../myfaces/tobago/internal/renderkit/renderer/TextareaRenderer.java | 3 +--
 .../myfaces/tobago/internal/renderkit/renderer/VerbatimRenderer.java | 3 +--
 .../java/org/apache/myfaces/tobago/internal/util/RenderUtils.java    | 5 +++++
 6 files changed, 11 insertions(+), 11 deletions(-)

diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/BadgeRenderer.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/BadgeRenderer.java
index 7cee268..20156c2 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/BadgeRenderer.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/BadgeRenderer.java
@@ -21,7 +21,6 @@ package org.apache.myfaces.tobago.internal.renderkit.renderer;
 
 import org.apache.myfaces.tobago.context.Markup;
 import org.apache.myfaces.tobago.internal.component.AbstractUIBadge;
-import org.apache.myfaces.tobago.internal.util.RenderUtils;
 import org.apache.myfaces.tobago.renderkit.RendererBase;
 import org.apache.myfaces.tobago.renderkit.css.BootstrapClass;
 import org.apache.myfaces.tobago.renderkit.css.TobagoClass;
@@ -39,7 +38,7 @@ public class BadgeRenderer<T extends AbstractUIBadge> extends RendererBase<T> {
     final TobagoResponseWriter writer = getResponseWriter(facesContext);
     final Markup markup = component.getMarkup() != null ? component.getMarkup() : Markup.NULL;
     final String tip = component.getTip();
-    final String value = RenderUtils.currentValue(component);
+    final String value = getCurrentValue(facesContext, component);
 
     writer.startElement(HtmlElements.TOBAGO_BADGE);
     writer.writeIdAttribute(component.getClientId(facesContext));
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/HiddenRenderer.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/HiddenRenderer.java
index 3446d5b..5c38117 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/HiddenRenderer.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/HiddenRenderer.java
@@ -21,7 +21,6 @@ package org.apache.myfaces.tobago.internal.renderkit.renderer;
 
 import org.apache.myfaces.tobago.internal.component.AbstractUIHidden;
 import org.apache.myfaces.tobago.internal.util.HtmlRendererUtils;
-import org.apache.myfaces.tobago.internal.util.RenderUtils;
 import org.apache.myfaces.tobago.renderkit.html.HtmlAttributes;
 import org.apache.myfaces.tobago.renderkit.html.HtmlElements;
 import org.apache.myfaces.tobago.renderkit.html.HtmlInputTypes;
@@ -41,7 +40,7 @@ public class HiddenRenderer<T extends AbstractUIHidden> extends DecodingInputRen
   public void encodeBeginInternal(final FacesContext facesContext, final T component) throws IOException {
 
     final String clientId = component.getClientId(facesContext);
-    final String value = RenderUtils.currentValue(component);
+    final String value = getCurrentValue(facesContext, component);
 
     final TobagoResponseWriter writer = getResponseWriter(facesContext);
 
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/OutRenderer.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/OutRenderer.java
index 7f5b010..57d9405 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/OutRenderer.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/OutRenderer.java
@@ -23,7 +23,6 @@ import org.apache.myfaces.tobago.config.TobagoConfig;
 import org.apache.myfaces.tobago.context.Markup;
 import org.apache.myfaces.tobago.internal.component.AbstractUIOut;
 import org.apache.myfaces.tobago.internal.util.HtmlRendererUtils;
-import org.apache.myfaces.tobago.internal.util.RenderUtils;
 import org.apache.myfaces.tobago.renderkit.css.BootstrapClass;
 import org.apache.myfaces.tobago.renderkit.css.CssItem;
 import org.apache.myfaces.tobago.renderkit.css.TobagoClass;
@@ -95,12 +94,12 @@ public class OutRenderer<T extends AbstractUIOut> extends MessageLayoutRendererB
     encodeText(facesContext, component);
   }
 
-  private void encodeText(final FacesContext facesContext, final AbstractUIOut out) throws IOException {
+  private void encodeText(final FacesContext facesContext, final T out) throws IOException {
     final TobagoResponseWriter writer = getResponseWriter(facesContext);
     final boolean escape = out.isEscape();
     final boolean keepLineBreaks = out.isKeepLineBreaks();
 
-    String text = RenderUtils.currentValue(out);
+    String text = getCurrentValue(facesContext, out);
     if (text == null) {
       text = "";
     }
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/TextareaRenderer.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/TextareaRenderer.java
index 148f36e..5bc458e 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/TextareaRenderer.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/TextareaRenderer.java
@@ -24,7 +24,6 @@ import org.apache.myfaces.tobago.context.Markup;
 import org.apache.myfaces.tobago.internal.component.AbstractUITextarea;
 import org.apache.myfaces.tobago.internal.util.AccessKeyLogger;
 import org.apache.myfaces.tobago.internal.util.HtmlRendererUtils;
-import org.apache.myfaces.tobago.internal.util.RenderUtils;
 import org.apache.myfaces.tobago.internal.util.StringUtils;
 import org.apache.myfaces.tobago.renderkit.css.BootstrapClass;
 import org.apache.myfaces.tobago.renderkit.css.TobagoClass;
@@ -136,7 +135,7 @@ public class TextareaRenderer<T extends AbstractUITextarea> extends MessageLayou
     if (!disabled && !readonly && StringUtils.isNotBlank(placeholder)) {
       writer.writeAttribute(HtmlAttributes.PLACEHOLDER, placeholder, true);
     }
-    String currentValue = RenderUtils.currentValue(component);
+    String currentValue = getCurrentValue(facesContext, component);
     if (currentValue != null) {
       if (ComponentUtils.getDataAttribute(component, "html-editor") != null
           && SanitizeMode.auto == component.getSanitize()) {
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/VerbatimRenderer.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/VerbatimRenderer.java
index 7713236..cd00327 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/VerbatimRenderer.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/VerbatimRenderer.java
@@ -21,7 +21,6 @@ package org.apache.myfaces.tobago.internal.renderkit.renderer;
 
 import org.apache.myfaces.tobago.component.Attributes;
 import org.apache.myfaces.tobago.renderkit.RendererBase;
-import org.apache.myfaces.tobago.internal.util.RenderUtils;
 import org.apache.myfaces.tobago.util.ComponentUtils;
 import org.apache.myfaces.tobago.webapp.TobagoResponseWriter;
 
@@ -36,7 +35,7 @@ public class VerbatimRenderer<T extends UIComponent> extends RendererBase<T> {
 
     final TobagoResponseWriter writer = getResponseWriter(facesContext);
 
-    final String value = RenderUtils.currentValue(component);
+    final String value = getCurrentValue(facesContext, component);
     if (value == null) {
       return;
     }
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/util/RenderUtils.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/util/RenderUtils.java
index e22c994..221b83b 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/util/RenderUtils.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/util/RenderUtils.java
@@ -32,6 +32,7 @@ import org.apache.myfaces.tobago.internal.renderkit.renderer.TobagoClientBehavio
 import org.apache.myfaces.tobago.model.ExpandedState;
 import org.apache.myfaces.tobago.model.SelectedState;
 import org.apache.myfaces.tobago.model.TreePath;
+import org.apache.myfaces.tobago.renderkit.RendererBase;
 import org.apache.myfaces.tobago.util.ComponentUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -136,6 +137,10 @@ public final class RenderUtils {
     return false;
   }
 
+  /**
+   * @deprecated since 5.0.0. Please use {@link RendererBase#getCurrentValue}
+   */
+  @Deprecated
   public static String currentValue(final UIComponent component) {
     String currentValue = null;
     if (component instanceof ValueHolder) {

[myfaces-tobago] 03/04: chore: refactor ComponentUtils -> RendererBase

Posted by lo...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

lofwyr pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/myfaces-tobago.git

commit 72c311ddf4cd64a6ca3fa12e2a83a566f10f4755
Author: Udo Schnurpfeil <ud...@irian.eu>
AuthorDate: Fri Mar 19 18:39:58 2021 +0100

    chore: refactor ComponentUtils -> RendererBase
---
 .../renderer/SelectManyCheckboxRenderer.java       |  2 +-
 .../renderkit/renderer/SelectOneRadioRenderer.java |  2 +-
 .../tobago/internal/util/HtmlRendererUtils.java    | 86 ++--------------------
 .../myfaces/tobago/internal/util/RenderUtils.java  | 21 +-----
 .../myfaces/tobago/renderkit/RendererBase.java     | 19 ++++-
 .../apache/myfaces/tobago/util/ComponentUtils.java | 21 +++---
 6 files changed, 40 insertions(+), 111 deletions(-)

diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectManyCheckboxRenderer.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectManyCheckboxRenderer.java
index c135bd3..6f031a8 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectManyCheckboxRenderer.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectManyCheckboxRenderer.java
@@ -84,7 +84,7 @@ public class SelectManyCheckboxRenderer<T extends AbstractUISelectManyCheckbox>
         writer.startElement(HtmlElements.INPUT);
         writer.writeClassAttribute(BootstrapClass.FORM_CHECK_INPUT);
         writer.writeAttribute(HtmlAttributes.TYPE, HtmlInputTypes.CHECKBOX);
-        final String formattedValue = ComponentUtils.getFormattedValue(facesContext, component, item.getValue());
+        final String formattedValue = getFormattedValue(facesContext, component, item.getValue());
         final boolean checked;
         if (submittedValues == null) {
           checked = ArrayUtils.contains(values, item.getValue());
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectOneRadioRenderer.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectOneRadioRenderer.java
index 202838b..a657ed8 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectOneRadioRenderer.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectOneRadioRenderer.java
@@ -84,7 +84,7 @@ public class SelectOneRadioRenderer<T extends AbstractUISelectOneRadio> extends
         writer.startElement(HtmlElements.INPUT);
         writer.writeClassAttribute(BootstrapClass.FORM_CHECK_INPUT);
         writer.writeAttribute(HtmlAttributes.TYPE, HtmlInputTypes.RADIO);
-        final String formattedValue = ComponentUtils.getFormattedValue(facesContext, component, item.getValue());
+        final String formattedValue = getFormattedValue(facesContext, component, item.getValue());
         final boolean checked;
         if (submittedValue == null) {
           checked = ObjectUtils.equals(item.getValue(), value);
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/util/HtmlRendererUtils.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/util/HtmlRendererUtils.java
index 97fe57c..fb3f082 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/util/HtmlRendererUtils.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/util/HtmlRendererUtils.java
@@ -20,11 +20,6 @@
 package org.apache.myfaces.tobago.internal.util;
 
 import org.apache.myfaces.tobago.component.Attributes;
-import org.apache.myfaces.tobago.component.RendererTypes;
-import org.apache.myfaces.tobago.component.Tags;
-import org.apache.myfaces.tobago.component.Visual;
-import org.apache.myfaces.tobago.context.Markup;
-import org.apache.myfaces.tobago.internal.component.AbstractUIStyle;
 import org.apache.myfaces.tobago.renderkit.LabelWithAccessKey;
 import org.apache.myfaces.tobago.renderkit.RendererBase;
 import org.apache.myfaces.tobago.renderkit.css.FaIcons;
@@ -43,10 +38,8 @@ import javax.faces.component.UIComponent;
 import javax.faces.component.UIInput;
 import javax.faces.context.FacesContext;
 import javax.faces.model.SelectItem;
-import javax.faces.model.SelectItemGroup;
 import java.io.IOException;
 import java.lang.invoke.MethodHandles;
-import java.util.Arrays;
 import java.util.Locale;
 import java.util.Map;
 
@@ -142,79 +135,14 @@ public final class HtmlRendererUtils {
       final Iterable<SelectItem> items, final Object[] values, final String[] submittedValues,
       final Boolean onlySelected, final TobagoResponseWriter writer, final FacesContext facesContext)
       throws IOException {
-
-    if (LOG.isDebugEnabled()) {
-      LOG.debug("component id = '{}'", component.getId());
-      LOG.debug("values = '{}'", Arrays.toString(values));
-      LOG.debug("submittedValues = '{}'", Arrays.toString(submittedValues));
-    }
-    for (final SelectItem item : items) {
-      if (item instanceof SelectItemGroup) {
-        writer.startElement(HtmlElements.OPTGROUP);
-        writer.writeAttribute(HtmlAttributes.LABEL, item.getLabel(), true);
-        if (item.isDisabled()) {
-          writer.writeAttribute(HtmlAttributes.DISABLED, true);
-        }
-        final SelectItem[] selectItems = ((SelectItemGroup) item).getSelectItems();
-        renderSelectItems(component, optionClass, Arrays.asList(selectItems), values, submittedValues,
-            onlySelected, writer, facesContext);
-        writer.endElement(HtmlElements.OPTGROUP);
-      } else {
-
-        Object itemValue = item.getValue();
-        // when using selectItem tag with a literal value: use the converted value
-        if (itemValue instanceof String && values != null && values.length > 0 && !(values[0] instanceof String)) {
-          itemValue = ComponentUtils.getConvertedValue(facesContext, component, (String) itemValue);
-        }
-        final String formattedValue = ComponentUtils.getFormattedValue(facesContext, component, itemValue);
-        final boolean contains;
-        if (submittedValues == null) {
-          contains = ArrayUtils.contains(values, itemValue);
-        } else {
-          contains = ArrayUtils.contains(submittedValues, formattedValue);
-        }
-        if (onlySelected != null) {
-          if (onlySelected) {
-            if (!contains) {
-              continue;
-            }
-          } else {
-            if (contains) {
-              continue;
-            }
-          }
-        }
-        writer.startElement(HtmlElements.OPTION);
-        writer.writeAttribute(HtmlAttributes.VALUE, formattedValue, true);
-        if (item instanceof org.apache.myfaces.tobago.model.SelectItem) {
-          final String image = ((org.apache.myfaces.tobago.model.SelectItem) item).getImage();
-          if (image != null) {
-            final AbstractUIStyle style = (AbstractUIStyle) facesContext.getApplication()
-                .createComponent(facesContext, Tags.style.componentType(), RendererTypes.Style.name());
-            style.setTransient(true);
-            style.setBackgroundImage(image);
-            style.setSelector(
-                StyleRenderUtils.encodeIdSelector(component.getClientId(facesContext))
-                    + " option[value=" + formattedValue + "]");
-            // XXX This works not in common browsers...
-            component.getChildren().add(style);
-          }
-        }
-        Markup markup = item instanceof Visual ? ((Visual) item).getMarkup() : Markup.NULL;
-        if (onlySelected == null && contains) {
-          writer.writeAttribute(HtmlAttributes.SELECTED, true);
-          markup = Markup.SELECTED.add(markup);
-        }
-        if (item.isDisabled()) {
-          writer.writeAttribute(HtmlAttributes.DISABLED, true);
-          markup = Markup.DISABLED.add(markup);
-        }
-        writer.writeClassAttribute(optionClass, optionClass != null ? optionClass.createMarkup(markup) : null);
-
-        writer.writeText(item.getLabel());
-        writer.endElement(HtmlElements.OPTION);
+    new RendererBase<UIComponent>() {
+      public void fake(final UIInput component, final TobagoClass optionClass,
+                       final Iterable<SelectItem> items, final Object[] values, final String[] submittedValues,
+                       final Boolean onlySelected, final TobagoResponseWriter writer, final FacesContext facesContext)
+          throws IOException {
+        renderSelectItems(component, optionClass, items, values, submittedValues, onlySelected, writer, facesContext);
       }
-    }
+    }.fake(component, optionClass, items, values, submittedValues, onlySelected, writer, facesContext);
   }
 
   public static void writeDataAttributes(
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/util/RenderUtils.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/util/RenderUtils.java
index 221b83b..261fc5a 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/util/RenderUtils.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/util/RenderUtils.java
@@ -38,11 +38,9 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import javax.faces.application.ViewHandler;
-import javax.faces.component.EditableValueHolder;
 import javax.faces.component.UIComponent;
 import javax.faces.component.UIPanel;
 import javax.faces.component.UIParameter;
-import javax.faces.component.ValueHolder;
 import javax.faces.component.behavior.AjaxBehavior;
 import javax.faces.component.behavior.ClientBehavior;
 import javax.faces.component.behavior.ClientBehaviorBase;
@@ -142,22 +140,11 @@ public final class RenderUtils {
    */
   @Deprecated
   public static String currentValue(final UIComponent component) {
-    String currentValue = null;
-    if (component instanceof ValueHolder) {
-      Object value;
-      if (component instanceof EditableValueHolder) {
-        value = ((EditableValueHolder) component).getSubmittedValue();
-        if (value != null) {
-          return (String) value;
-        }
-      }
-
-      value = ((ValueHolder) component).getValue();
-      if (value != null) {
-        currentValue = ComponentUtils.getFormattedValue(FacesContext.getCurrentInstance(), component, value);
+    return new RendererBase<UIComponent>() {
+      public String fake(final UIComponent component) {
+        return getCurrentValue(FacesContext.getCurrentInstance(), component);
       }
-    }
-    return currentValue;
+    }.fake(component);
   }
 
   public static void decodedStateOfTreeData(final FacesContext facesContext, final AbstractUIData data) {
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/RendererBase.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/RendererBase.java
index df22260..2222a9a 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/RendererBase.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/RendererBase.java
@@ -154,7 +154,7 @@ public abstract class RendererBase<T extends UIComponent> extends Renderer {
       String currentValue = null;
       final Object result = ((ValueHolder) component).getValue();
       if (result != null) {
-        currentValue = ComponentUtils.getFormattedValue(facesContext, component, result);
+        currentValue = getFormattedValue(facesContext, component, result);
       }
       return currentValue;
     } else {
@@ -420,7 +420,7 @@ public abstract class RendererBase<T extends UIComponent> extends Renderer {
         if (itemValue instanceof String && values != null && values.length > 0 && !(values[0] instanceof String)) {
           itemValue = ComponentUtils.getConvertedValue(facesContext, component, (String) itemValue);
         }
-        final String formattedValue = ComponentUtils.getFormattedValue(facesContext, component, itemValue);
+        final String formattedValue = getFormattedValue(facesContext, component, itemValue);
         final boolean contains;
         if (submittedValues == null) {
           contains = ArrayUtils.contains(values, itemValue);
@@ -471,4 +471,19 @@ public abstract class RendererBase<T extends UIComponent> extends Renderer {
     }
   }
 
+  protected String getFormattedValue(
+      final FacesContext facesContext, final UIComponent component, final Object currentValue)
+      throws ConverterException {
+
+    if (currentValue == null) {
+      return "";
+    }
+
+    final Converter converter = ComponentUtils.getConverter(facesContext, component, currentValue);
+    if (converter != null) {
+      return converter.getAsString(facesContext, component, currentValue);
+    } else {
+      return currentValue.toString();
+    }
+  }
 }
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/util/ComponentUtils.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/util/ComponentUtils.java
index 338265b..2159d94 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/util/ComponentUtils.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/util/ComponentUtils.java
@@ -873,20 +873,19 @@ public final class ComponentUtils {
     return converter;
   }
 
+  /**
+   * @deprecated since 5.0.0. Please use {@link RendererBase#getFormattedValue}
+   */
+  @Deprecated
   public static String getFormattedValue(
       final FacesContext facesContext, final UIComponent component, final Object currentValue)
       throws ConverterException {
-
-    if (currentValue == null) {
-      return "";
-    }
-
-    final Converter converter = ComponentUtils.getConverter(facesContext, component, currentValue);
-    if (converter != null) {
-      return converter.getAsString(facesContext, component, currentValue);
-    } else {
-      return currentValue.toString();
-    }
+    return new RendererBase<UIComponent>() {
+      public String fake(
+          final FacesContext facesContext, final UIComponent component, final Object currentValue) {
+        return getFormattedValue(facesContext, component, currentValue);
+      }
+    }.fake(facesContext, component, currentValue);
   }
 
   public static UIComponent createComponent(

[myfaces-tobago] 04/04: chore: refactor ComponentUtils -> RendererBase

Posted by lo...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

lofwyr pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/myfaces-tobago.git

commit c538d5b41c8f64de7ed34c7255c9ca63a3dc6624
Author: Udo Schnurpfeil <ud...@irian.eu>
AuthorDate: Fri Mar 19 18:58:47 2021 +0100

    chore: refactor ComponentUtils -> RendererBase
---
 .../myfaces/tobago/renderkit/RendererBase.java     | 39 ++++++++++++++++++++--
 .../apache/myfaces/tobago/util/ComponentUtils.java | 29 +++-------------
 2 files changed, 41 insertions(+), 27 deletions(-)

diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/RendererBase.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/RendererBase.java
index 2222a9a..7e6a6a1 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/RendererBase.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/RendererBase.java
@@ -50,6 +50,7 @@ import org.apache.myfaces.tobago.webapp.TobagoResponseWriter;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import javax.el.ValueExpression;
 import javax.faces.component.EditableValueHolder;
 import javax.faces.component.UIComponent;
 import javax.faces.component.UIInput;
@@ -130,7 +131,7 @@ public abstract class RendererBase<T extends UIComponent> extends Renderer {
     if (!(submittedValue instanceof String)) {
       return submittedValue;
     }
-    final Converter converter = ComponentUtils.getConverter(context, component, submittedValue);
+    final Converter converter = getConverter(context, component, submittedValue);
     if (converter != null) {
       return converter.getAsObject(context, component, (String) submittedValue);
     } else {
@@ -479,11 +480,45 @@ public abstract class RendererBase<T extends UIComponent> extends Renderer {
       return "";
     }
 
-    final Converter converter = ComponentUtils.getConverter(facesContext, component, currentValue);
+    final Converter converter = getConverter(facesContext, component, currentValue);
     if (converter != null) {
       return converter.getAsString(facesContext, component, currentValue);
     } else {
       return currentValue.toString();
     }
   }
+
+  /**
+   * May return null, if no converter can be find.
+   */
+  protected Converter getConverter(
+      final FacesContext facesContext, final UIComponent component, final Object value) {
+
+    Converter converter = null;
+    if (component instanceof ValueHolder) {
+      converter = ((ValueHolder) component).getConverter();
+    }
+
+    if (converter == null) {
+      final ValueExpression valueExpression = component.getValueExpression("value");
+      if (valueExpression != null) {
+        Class converterType = null;
+        try {
+          converterType = valueExpression.getType(facesContext.getELContext());
+        } catch (final Exception e) {
+          // ignore, seems not to be possible, when EL is a function like #{bean.getName(item.id)}
+        }
+        if (converterType == null) {
+          if (value != null) {
+            converterType = value.getClass();
+          }
+        }
+        if (converterType != null && converterType != Object.class) {
+          converter = facesContext.getApplication().createConverter(converterType);
+        }
+      }
+    }
+
+    return converter;
+  }
 }
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/util/ComponentUtils.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/util/ComponentUtils.java
index 2159d94..e8b0972 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/util/ComponentUtils.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/util/ComponentUtils.java
@@ -845,32 +845,11 @@ public final class ComponentUtils {
   public static Converter getConverter(
       final FacesContext facesContext, final UIComponent component, final Object value) {
 
-    Converter converter = null;
-    if (component instanceof ValueHolder) {
-      converter = ((ValueHolder) component).getConverter();
-    }
-
-    if (converter == null) {
-      final ValueExpression valueExpression = component.getValueExpression("value");
-      if (valueExpression != null) {
-        Class converterType = null;
-        try {
-          converterType = valueExpression.getType(facesContext.getELContext());
-        } catch (final Exception e) {
-          // ignore, seems not to be possible, when EL is a function like #{bean.getName(item.id)}
-        }
-        if (converterType == null) {
-          if (value != null) {
-            converterType = value.getClass();
-          }
-        }
-        if (converterType != null && converterType != Object.class) {
-          converter = facesContext.getApplication().createConverter(converterType);
-        }
+    return new RendererBase<UIComponent>() {
+      public Converter fake(final FacesContext facesContext, final UIComponent component, final Object value) {
+        return getConverter(facesContext, component, value);
       }
-    }
-
-    return converter;
+    }.fake(facesContext, component, value);
   }
 
   /**