You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by bo...@apache.org on 2007/05/03 14:18:43 UTC
svn commit: r534816 -
/myfaces/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/renderkit/RendererBase.java
Author: bommel
Date: Thu May 3 05:18:42 2007
New Revision: 534816
URL: http://svn.apache.org/viewvc?view=rev&rev=534816
Log:
(TOBAGO-378) Split RendererBase in RendererBase and LayoutableRendererBase
Added:
myfaces/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/renderkit/RendererBase.java
Added: myfaces/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/renderkit/RendererBase.java
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/renderkit/RendererBase.java?view=auto&rev=534816
==============================================================================
--- myfaces/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/renderkit/RendererBase.java (added)
+++ myfaces/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/renderkit/RendererBase.java Thu May 3 05:18:42 2007
@@ -0,0 +1,149 @@
+package org.apache.myfaces.tobago.renderkit;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import org.apache.myfaces.tobago.config.ThemeConfig;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import javax.faces.render.Renderer;
+import javax.faces.context.FacesContext;
+import javax.faces.component.UIComponent;
+import javax.faces.component.UIInput;
+import javax.faces.component.ValueHolder;
+import javax.faces.convert.Converter;
+import javax.faces.convert.ConverterException;
+import javax.faces.el.ValueBinding;
+import javax.faces.FacesException;
+import java.util.Locale;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: bommel
+ * Date: Apr 21, 2007
+ * Time: 8:04:25 PM
+ */
+public class RendererBase extends Renderer {
+ protected static final Log LOG = LogFactory.getLog(LayoutableRendererBase.class);
+
+ public void decode(FacesContext facesContext, UIComponent component) {
+ // nothing to do
+
+ // FIXME later:
+ if (component instanceof UIInput) {
+ LOG.warn("decode() should be overwritten! Renderer: "
+ + this.getClass().getName());
+ }
+ }
+
+ public String getRendererName(String rendererType) {
+ String name;
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("rendererType = '" + rendererType + "'");
+ }
+ /* if ("javax.faces.Text".equals(rendererType)) { // TODO: find a better way
+ name = RENDERER_TYPE_OUT;
+ } else {*/
+ name = rendererType;
+ /*}
+ if (name.startsWith("javax.faces.")) { // FIXME: this is a hotfix from jsf1.0beta to jsf1.0fr
+ LOG.warn("patching renderer from " + name);
+ name = name.substring("javax.faces.".length());
+ LOG.warn("patching renderer to " + name);
+ }*/
+ name = name.substring(0, 1).toLowerCase(Locale.ENGLISH) + name.substring(1);
+ return name;
+ }
+
+ public int getConfiguredValue(FacesContext facesContext,
+ UIComponent component, String key) {
+ try {
+ return ThemeConfig.getValue(facesContext, component, key);
+ } catch (Exception e) {
+ LOG.error("Can't take '" + key + "' for " + getClass().getName()
+ + " from config-file: " + e.getMessage(), e);
+ }
+ return 0;
+ }
+
+ protected String getCurrentValue(
+ FacesContext facesContext, UIComponent component) {
+
+ if (component instanceof UIInput) {
+ Object submittedValue = ((UIInput) component).getSubmittedValue();
+ if (submittedValue != null) {
+ return (String) submittedValue;
+ }
+ }
+ String currentValue = null;
+ Object currentObj = getValue(component);
+ if (currentObj != null) {
+ currentValue = RenderUtil.getFormattedValue(facesContext, component, currentObj);
+ }
+ return currentValue;
+ }
+
+ protected Object getValue(UIComponent component) {
+ if (component instanceof ValueHolder) {
+ Object value = ((ValueHolder) component).getValue();
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("component.getValue() returned " + value);
+ }
+ return value;
+ } else {
+ return null;
+ }
+ }
+
+ public Converter getConverter(FacesContext context, UIComponent component) {
+ Converter converter = null;
+ if (component instanceof ValueHolder) {
+ converter = ((ValueHolder) component).getConverter();
+ }
+ if (converter == null) {
+ ValueBinding valueBinding = component.getValueBinding("value");
+ if (valueBinding != null) {
+ Class converterType = valueBinding.getType(context);
+ if (converterType == null || converterType == String.class
+ || converterType == Object.class) {
+ return null;
+ }
+ try {
+ converter = context.getApplication().createConverter(converterType);
+ } catch (FacesException e) {
+ LOG.error("No Converter found for type " + converterType);
+ }
+ }
+ }
+ return converter;
+ }
+
+ public Object getConvertedValue(FacesContext context,
+ UIComponent component, Object submittedValue)
+ throws ConverterException {
+ if (!(submittedValue instanceof String)) {
+ return submittedValue;
+ }
+ Converter converter = getConverter(context, component);
+ if (converter != null) {
+ return converter.getAsObject(context, component, (String) submittedValue);
+ } else {
+ return submittedValue;
+ }
+ }
+}