You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by mm...@apache.org on 2005/07/27 20:09:12 UTC

svn commit: r225559 - in /myfaces/sandbox/trunk/src/java/org/apache/myfaces/custom/autoupdatedatatable: ./ AutoUpdateDataTable.java AutoUpdateDataTableRenderer.java AutoUpdateDataTableTag.java

Author: mmarinschek
Date: Wed Jul 27 11:08:40 2005
New Revision: 225559

URL: http://svn.apache.org/viewcvs?rev=225559&view=rev
Log: (empty)

Added:
    myfaces/sandbox/trunk/src/java/org/apache/myfaces/custom/autoupdatedatatable/
    myfaces/sandbox/trunk/src/java/org/apache/myfaces/custom/autoupdatedatatable/AutoUpdateDataTable.java
    myfaces/sandbox/trunk/src/java/org/apache/myfaces/custom/autoupdatedatatable/AutoUpdateDataTableRenderer.java
    myfaces/sandbox/trunk/src/java/org/apache/myfaces/custom/autoupdatedatatable/AutoUpdateDataTableTag.java

Added: myfaces/sandbox/trunk/src/java/org/apache/myfaces/custom/autoupdatedatatable/AutoUpdateDataTable.java
URL: http://svn.apache.org/viewcvs/myfaces/sandbox/trunk/src/java/org/apache/myfaces/custom/autoupdatedatatable/AutoUpdateDataTable.java?rev=225559&view=auto
==============================================================================
--- myfaces/sandbox/trunk/src/java/org/apache/myfaces/custom/autoupdatedatatable/AutoUpdateDataTable.java (added)
+++ myfaces/sandbox/trunk/src/java/org/apache/myfaces/custom/autoupdatedatatable/AutoUpdateDataTable.java Wed Jul 27 11:08:40 2005
@@ -0,0 +1,68 @@
+package org.apache.myfaces.custom.autoupdatedatatable;
+
+import org.apache.myfaces.component.html.ext.HtmlDataTable;
+import org.apache.myfaces.custom.inputsuggestajax.AjaxComponent;
+import org.apache.myfaces.custom.inputsuggestajax.AjaxRenderer;
+
+import javax.faces.context.FacesContext;
+import javax.faces.render.Renderer;
+import java.io.IOException;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: ich
+ * Date: 13.07.2005
+ * Time: 19:16:29
+ * To change this template use File | Settings | File Templates.
+ */
+public class AutoUpdateDataTable extends HtmlDataTable implements AjaxComponent{
+
+    private String _frequency;
+
+    public void processRestoreState(FacesContext context, Object state)
+	{
+		super.processRestoreState(context, state);
+	}
+
+    public Object processSaveState(FacesContext context)
+	{
+		return super.processSaveState(context);
+	}   
+
+
+    public Object saveState(FacesContext context)
+    {
+        Object[] values = new Object[2];
+        values[0] = super.saveState(context);
+        values[1] = _frequency;
+
+        return values;
+    }
+
+    public void restoreState(FacesContext context, Object state)
+    {
+        Object values[] = (Object[])state;
+        super.restoreState(context, values[0]);
+        _frequency = (String) values[1];
+    }
+
+    public String getFrequency() {
+        return _frequency;
+    }
+
+    public void setFrequency(String _frequency) {
+        this._frequency = _frequency;
+    }
+
+    public void encodeAjax(FacesContext context) throws IOException {
+        if (context == null) throw new NullPointerException("context");
+        if (!isRendered()) return;
+        Renderer renderer = getRenderer(context);
+        if (renderer != null && renderer instanceof AjaxRenderer)
+        {
+
+            ((AjaxRenderer) renderer).encodeAjax(context, this);
+            
+        }
+    }
+}

Added: myfaces/sandbox/trunk/src/java/org/apache/myfaces/custom/autoupdatedatatable/AutoUpdateDataTableRenderer.java
URL: http://svn.apache.org/viewcvs/myfaces/sandbox/trunk/src/java/org/apache/myfaces/custom/autoupdatedatatable/AutoUpdateDataTableRenderer.java?rev=225559&view=auto
==============================================================================
--- myfaces/sandbox/trunk/src/java/org/apache/myfaces/custom/autoupdatedatatable/AutoUpdateDataTableRenderer.java (added)
+++ myfaces/sandbox/trunk/src/java/org/apache/myfaces/custom/autoupdatedatatable/AutoUpdateDataTableRenderer.java Wed Jul 27 11:08:40 2005
@@ -0,0 +1,131 @@
+package org.apache.myfaces.custom.autoupdatedatatable;
+
+import org.apache.myfaces.renderkit.html.ext.HtmlTableRenderer;
+import org.apache.myfaces.renderkit.html.HTML;
+import org.apache.myfaces.renderkit.html.HtmlResponseWriterImpl;
+import org.apache.myfaces.renderkit.html.HtmlRendererUtils;
+import org.apache.myfaces.renderkit.JSFAttr;
+import org.apache.myfaces.renderkit.RendererUtils;
+import org.apache.myfaces.custom.inputsuggestajax.AjaxRenderer;
+import org.apache.myfaces.custom.inputsuggestajax.InputSuggestAjaxRenderer;
+import org.apache.myfaces.custom.inputsuggestajax.InputSuggestAjax;
+import org.apache.myfaces.custom.buffer.HtmlBufferResponseWriterWrapper;
+import org.apache.myfaces.component.html.util.AddResource;
+import org.apache.myfaces.el.ValueBindingImpl;
+import org.apache.myfaces.util.DebugUtils;
+import org.apache.myfaces.util.ArrayUtils;
+import org.apache.myfaces.util.StringUtils;
+import org.apache.myfaces.lifecycle.LifecycleImpl;
+import org.apache.myfaces.context.FacesContextWrapper;
+import org.apache.myfaces.context.ResponseWriterWrapper;
+import org.apache.myfaces.context.servlet.ServletFacesContextImpl;
+
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+import javax.faces.component.UIComponent;
+import javax.faces.component.UIData;
+import javax.faces.component.UIColumn;
+import javax.faces.component.html.HtmlDataTable;
+import javax.faces.application.ViewHandler;
+import javax.faces.application.Application;
+import javax.faces.application.StateManager;
+import javax.faces.el.ValueBinding;
+import javax.faces.FacesException;
+import javax.faces.event.PhaseId;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.io.Writer;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Random;
+import java.util.Iterator;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: ich
+ * Date: 13.07.2005
+ * Time: 19:46:00
+ * To change this template use File | Settings | File Templates.
+ */
+public class AutoUpdateDataTableRenderer extends HtmlTableRenderer implements AjaxRenderer{
+
+    private static final String JAVASCRIPT_ENCODED = "org.apache.myfaces.autoupdatedatatable.JAVASCRIPT_ENCODED";
+
+    private void encodeJavascript(FacesContext context, UIComponent component) throws IOException
+        {
+            // check to see if javascript has already been written (which could happen if more than one tree on the same page)
+            if (context.getExternalContext().getRequestMap().containsKey(JAVASCRIPT_ENCODED))
+            {
+                return;
+            }
+
+            // render javascript function for client-side toggle (it won't be used if user has opted for server-side toggle)
+            ResponseWriter out = context.getResponseWriter();
+            String javascriptLocation = (String)component.getAttributes().get(JSFAttr.JAVASCRIPT_LOCATION);
+            if (javascriptLocation == null)
+            {
+                AddResource.addJavaScriptHere(AutoUpdateDataTableRenderer.class, "prototype.js", context);
+            }
+            else
+            {
+                out.startElement(HTML.SCRIPT_ELEM, null);
+                out.writeAttribute(HTML.TYPE_ATTR, "text/javascript", null);
+                out.writeAttribute(HTML.SRC_ATTR,
+                                   javascriptLocation + "/prototype.js", null);
+                out.endElement(HTML.SCRIPT_ELEM);
+
+            }
+            context.getExternalContext().getRequestMap().put(JAVASCRIPT_ENCODED, Boolean.TRUE);
+        }
+
+    public void encodeEnd(FacesContext context, UIComponent component) throws IOException
+    {
+        RendererUtils.checkParamValidity(context, component, AutoUpdateDataTable.class);
+        AutoUpdateDataTable autoUpdateDataTable = (AutoUpdateDataTable) component;
+
+        this.encodeJavascript(context,component);
+
+        StateManager stateManager = context.getApplication().getStateManager();
+        StateManager.SerializedView serializedView = stateManager.saveSerializedView(context);
+
+        super.encodeEnd(context, component);
+
+        ResponseWriter out = context.getResponseWriter();
+
+        String viewId = context.getViewRoot().getViewId();
+        ViewHandler viewHandler = context.getApplication().getViewHandler();
+        String actionURL = viewHandler.getActionURL(context, viewId);
+
+        out.startElement(HTML.FORM_ELEM, null);
+        context.getRenderKit().getResponseStateManager().writeState(context, serializedView);
+        out.endElement(HTML.FORM_ELEM);
+
+        out.startElement(HTML.SCRIPT_ELEM, null);
+        out.writeAttribute(HTML.TYPE_ATTR, "text/javascript", null);
+        out.writeText("new Ajax.PeriodicalUpdater('",null);
+        out.writeText(component.getClientId(context)+":tbody_element",null);
+        out.writeText("','",null);
+        out.writeText(context.getExternalContext().encodeActionURL(actionURL+"?affectedAjaxComponent="+component.getClientId(context)),null);
+        out.writeText("', {\n" +
+                " frequency: "+ autoUpdateDataTable.getFrequency() +" , parameters: '&jsf_tree_64='+encodeURIComponent(document.getElementById('jsf_tree_64').value)+'&jsf_state_64='+encodeURIComponent(document.getElementById('jsf_state_64').value)+'&jsf_viewid='+encodeURIComponent(document.getElementById('jsf_viewid').value)"+
+                "    })",null);
+
+        out.endElement(HTML.SCRIPT_ELEM);
+
+
+    }
+
+    public void decode(FacesContext facesContext, UIComponent component)
+    {
+        super.decode(facesContext, component);
+    }
+
+
+
+    public void encodeAjax(FacesContext context, UIComponent component) throws IOException
+    {
+        encodeInnerHtml(context, component);
+    }
+
+}

Added: myfaces/sandbox/trunk/src/java/org/apache/myfaces/custom/autoupdatedatatable/AutoUpdateDataTableTag.java
URL: http://svn.apache.org/viewcvs/myfaces/sandbox/trunk/src/java/org/apache/myfaces/custom/autoupdatedatatable/AutoUpdateDataTableTag.java?rev=225559&view=auto
==============================================================================
--- myfaces/sandbox/trunk/src/java/org/apache/myfaces/custom/autoupdatedatatable/AutoUpdateDataTableTag.java (added)
+++ myfaces/sandbox/trunk/src/java/org/apache/myfaces/custom/autoupdatedatatable/AutoUpdateDataTableTag.java Wed Jul 27 11:08:40 2005
@@ -0,0 +1,49 @@
+package org.apache.myfaces.custom.autoupdatedatatable;
+
+import org.apache.myfaces.taglib.html.ext.HtmlDataTableTag;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import javax.faces.component.UIComponent;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: ich
+ * Date: 13.07.2005
+ * Time: 19:16:58
+ * To change this template use File | Settings | File Templates.
+ */
+public class AutoUpdateDataTableTag extends HtmlDataTableTag{
+    private static Log log = LogFactory.getLog(AutoUpdateDataTableTag.class);
+
+
+    private String _frequency;
+
+    public String getFrequency() {
+        return _frequency;
+    }
+
+    public void setFrequency(String _frequency) {
+        this._frequency = _frequency;
+    }
+
+
+    public String getComponentType() {
+        return "org.apache.myfaces.AutoUpdateDataTable";
+    }
+
+    public String getRendererType() {
+        return "org.apache.myfaces.AutoUpdateDataTable";
+    }
+
+    public void release() {
+        super.release();
+        _frequency = null;
+    }
+
+    protected void setProperties(UIComponent component) {
+        super.setProperties(component);
+
+        setStringProperty(component, "frequency", _frequency);
+    }
+}