You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by lu...@apache.org on 2017/01/24 04:30:10 UTC

svn commit: r1780027 - in /myfaces/core/branches/2.3.x: api/src/main/java/javax/faces/component/ api/src/main/resources/META-INF/ impl/src/main/java/org/apache/myfaces/push/ impl/src/main/java/org/apache/myfaces/view/facelets/tag/jsf/core/

Author: lu4242
Date: Tue Jan 24 04:30:10 2017
New Revision: 1780027

URL: http://svn.apache.org/viewvc?rev=1780027&view=rev
Log:
MYFACES-4069 Implement f:websocket and related api (add UIWebsocket)

Added:
    myfaces/core/branches/2.3.x/api/src/main/java/javax/faces/component/_UIWebsocket.java
Modified:
    myfaces/core/branches/2.3.x/api/src/main/resources/META-INF/componentClass20.vm
    myfaces/core/branches/2.3.x/impl/src/main/java/org/apache/myfaces/push/WebsocketComponentRenderer.java
    myfaces/core/branches/2.3.x/impl/src/main/java/org/apache/myfaces/push/WebsocketInitRenderer.java
    myfaces/core/branches/2.3.x/impl/src/main/java/org/apache/myfaces/push/_WebsocketInit.java
    myfaces/core/branches/2.3.x/impl/src/main/java/org/apache/myfaces/view/facelets/tag/jsf/core/CoreLibrary.java
    myfaces/core/branches/2.3.x/impl/src/main/java/org/apache/myfaces/view/facelets/tag/jsf/core/WebsocketHandler.java

Added: myfaces/core/branches/2.3.x/api/src/main/java/javax/faces/component/_UIWebsocket.java
URL: http://svn.apache.org/viewvc/myfaces/core/branches/2.3.x/api/src/main/java/javax/faces/component/_UIWebsocket.java?rev=1780027&view=auto
==============================================================================
--- myfaces/core/branches/2.3.x/api/src/main/java/javax/faces/component/_UIWebsocket.java (added)
+++ myfaces/core/branches/2.3.x/api/src/main/java/javax/faces/component/_UIWebsocket.java Tue Jan 24 04:30:10 2017
@@ -0,0 +1,147 @@
+/*
+ * 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.
+ */
+
+package javax.faces.component;
+
+import javax.faces.component.behavior.ClientBehaviorHolder;
+import org.apache.myfaces.buildtools.maven2.plugin.builder.annotation.JSFComponent;
+import org.apache.myfaces.buildtools.maven2.plugin.builder.annotation.JSFProperty;
+
+/**
+ *
+ */
+@JSFComponent
+(clazz = "javax.faces.component.UIWebsocket",template=true,
+ name = "f:websocket",
+ defaultRendererType = "javax.faces.Websocket",
+ implementz = "javax.faces.component.behavior.ClientBehaviorHolder",
+ bodyContent = "empty")
+abstract class _UIWebsocket extends UIOutput implements ClientBehaviorHolder
+{
+    
+    static public final String COMPONENT_FAMILY = "javax.faces.Script";
+    static public final String COMPONENT_TYPE = "javax.faces.Websocket";
+
+    @JSFProperty
+    public abstract String getChannel();
+    
+    @JSFProperty
+    public abstract String getScope();
+    
+    @JSFProperty
+    public abstract String getUser();
+    
+    @JSFProperty
+    public abstract String getOnopen();
+    
+    @JSFProperty
+    public abstract String getOnmessage();
+    
+    @JSFProperty
+    public abstract String getOnclose();
+
+    @JSFProperty(defaultValue = "true")
+    public abstract boolean isConnected();
+
+    @Override
+    public java.util.Collection<String> getEventNames()
+    {
+        return new java.util.Collection<String>(){
+
+            @Override
+            public int size()
+            {
+                return 0;
+            }
+
+            @Override
+            public boolean isEmpty()
+            {
+                return false;
+            }
+
+            @Override
+            public boolean contains(Object o)
+            {
+                return true;
+            }
+
+            @Override
+            public java.util.Iterator<String> iterator()
+            {
+                throw new UnsupportedOperationException("Not supported yet.");
+            }
+
+            @Override
+            public Object[] toArray()
+            {
+                throw new UnsupportedOperationException("Not supported yet.");
+            }
+
+            @Override
+            public <T> T[] toArray(T[] a)
+            {
+                throw new UnsupportedOperationException("Not supported yet.");
+            }
+
+            @Override
+            public boolean add(String e)
+            {
+                throw new UnsupportedOperationException("Not supported yet.");
+            }
+
+            @Override
+            public boolean remove(Object o)
+            {
+                throw new UnsupportedOperationException("Not supported yet.");
+            }
+
+            @Override
+            public boolean containsAll(java.util.Collection<?> c)
+            {
+                return true;
+            }
+
+            @Override
+            public boolean addAll(java.util.Collection<? extends String> c)
+            {
+                throw new UnsupportedOperationException("Not supported yet.");
+            }
+
+            @Override
+            public boolean removeAll(java.util.Collection<?> c)
+            {
+                throw new UnsupportedOperationException("Not supported yet.");
+            }
+
+            @Override
+            public boolean retainAll(java.util.Collection<?> c)
+            {
+                throw new UnsupportedOperationException("Not supported yet.");
+            }
+
+            @Override
+            public void clear()
+            {
+                throw new UnsupportedOperationException("Not supported yet.");
+            }
+        };
+    }
+
+}

Modified: myfaces/core/branches/2.3.x/api/src/main/resources/META-INF/componentClass20.vm
URL: http://svn.apache.org/viewvc/myfaces/core/branches/2.3.x/api/src/main/resources/META-INF/componentClass20.vm?rev=1780027&r1=1780026&r2=1780027&view=diff
==============================================================================
--- myfaces/core/branches/2.3.x/api/src/main/resources/META-INF/componentClass20.vm (original)
+++ myfaces/core/branches/2.3.x/api/src/main/resources/META-INF/componentClass20.vm Tue Jan 24 04:30:10 2017
@@ -102,7 +102,8 @@ $innersource
 ## TODO: this condition should be checked for parent components
 ## and csv implements
 #if ($component.implements)
-#if ($component.implements == "javax.faces.component.behavior.ClientBehaviorHolder")
+#if ( ($component.implements == "javax.faces.component.behavior.ClientBehaviorHolder")
+     && (${utils.getClassFromFullClass($component.className)} != "UIWebsocket"))
     static private final java.util.Collection<String> CLIENT_EVENTS_LIST = 
         java.util.Collections.unmodifiableCollection(
             java.util.Arrays.asList(

Modified: myfaces/core/branches/2.3.x/impl/src/main/java/org/apache/myfaces/push/WebsocketComponentRenderer.java
URL: http://svn.apache.org/viewvc/myfaces/core/branches/2.3.x/impl/src/main/java/org/apache/myfaces/push/WebsocketComponentRenderer.java?rev=1780027&r1=1780026&r2=1780027&view=diff
==============================================================================
--- myfaces/core/branches/2.3.x/impl/src/main/java/org/apache/myfaces/push/WebsocketComponentRenderer.java (original)
+++ myfaces/core/branches/2.3.x/impl/src/main/java/org/apache/myfaces/push/WebsocketComponentRenderer.java Tue Jan 24 04:30:10 2017
@@ -24,6 +24,7 @@ import java.util.Map;
 import java.util.Map.Entry;
 import javax.enterprise.inject.spi.BeanManager;
 import javax.faces.component.UIComponent;
+import javax.faces.component.UIWebsocket;
 import javax.faces.component.behavior.ClientBehavior;
 import javax.faces.component.behavior.ClientBehaviorContext;
 import javax.faces.context.FacesContext;
@@ -47,8 +48,8 @@ import org.apache.myfaces.shared.renderk
  */
 @JSFRenderer(
         renderKitId = "HTML_BASIC",
-        family = "javax.faces.Output",
-        type = "org.apache.myfaces.WebsocketComponent")
+        family = "javax.faces.Script",
+        type = "javax.faces.Websocket")
 @ListenerFor(systemEventClass = PostAddToViewEvent.class)
 public class WebsocketComponentRenderer extends Renderer implements ComponentSystemEventListener
 {
@@ -59,14 +60,14 @@ public class WebsocketComponentRenderer
         if (event instanceof PostAddToViewEvent)
         {
             FacesContext facesContext = FacesContext.getCurrentInstance();
-            WebsocketComponent component = (WebsocketComponent) event.getComponent();
+            UIWebsocket component = (UIWebsocket) event.getComponent();
             WebsocketInit initComponent = (WebsocketInit) facesContext.getViewRoot().findComponent(
-                    component.getInitComponentId());
+                    (String) component.getAttributes().get("initComponentId"));
             if (initComponent == null)
             {
                 initComponent = (WebsocketInit) facesContext.getApplication().createComponent(facesContext,
                         "org.apache.myfaces.WebsocketInit", "org.apache.myfaces.WebsocketInit");
-                initComponent.setId(component.getInitComponentId());
+                initComponent.setId((String) component.getAttributes().get("initComponentId"));
                 facesContext.getViewRoot().addComponentResource(facesContext,
                         initComponent, "body");
             }
@@ -100,10 +101,10 @@ public class WebsocketComponentRenderer
     {
         super.encodeEnd(facesContext, c); //check for NP
 
-        WebsocketComponent component = (WebsocketComponent) c;
+        UIWebsocket component = (UIWebsocket) c;
 
         WebsocketInit init = (WebsocketInit) facesContext.getViewRoot().findComponent(
-                component.getInitComponentId());
+                (String) component.getAttributes().get("initComponentId"));
 
         ResponseWriter writer = facesContext.getResponseWriter();
 
@@ -214,12 +215,12 @@ public class WebsocketComponentRenderer
         {
             HtmlBufferResponseWriterWrapper buffwriter = (HtmlBufferResponseWriterWrapper) 
                     facesContext.getResponseWriter();
-            init.getWebsocketComponentMarkupList().add(writer.toString());
+            init.getUIWebsocketMarkupList().add(writer.toString());
             facesContext.setResponseWriter(buffwriter.getInitialWriter());
         }
     }
     
-    private String getBehaviorScripts(FacesContext facesContext, WebsocketComponent component)
+    private String getBehaviorScripts(FacesContext facesContext, UIWebsocket component)
     {
         Map<String, List<ClientBehavior>> clientBehaviorsByEvent = component.getClientBehaviors();
 

Modified: myfaces/core/branches/2.3.x/impl/src/main/java/org/apache/myfaces/push/WebsocketInitRenderer.java
URL: http://svn.apache.org/viewvc/myfaces/core/branches/2.3.x/impl/src/main/java/org/apache/myfaces/push/WebsocketInitRenderer.java?rev=1780027&r1=1780026&r2=1780027&view=diff
==============================================================================
--- myfaces/core/branches/2.3.x/impl/src/main/java/org/apache/myfaces/push/WebsocketInitRenderer.java (original)
+++ myfaces/core/branches/2.3.x/impl/src/main/java/org/apache/myfaces/push/WebsocketInitRenderer.java Tue Jan 24 04:30:10 2017
@@ -45,7 +45,7 @@ public class WebsocketInitRenderer exten
   
         ResponseWriter writer = facesContext.getResponseWriter();
         // If two websocket share the same channel and scope, share init.
-        for (Iterator it = init.getWebsocketComponentMarkupList().iterator(); it.hasNext();)
+        for (Iterator it = init.getUIWebsocketMarkupList().iterator(); it.hasNext();)
         {
             String markup = (String) it.next();
             writer.write(markup);

Modified: myfaces/core/branches/2.3.x/impl/src/main/java/org/apache/myfaces/push/_WebsocketInit.java
URL: http://svn.apache.org/viewvc/myfaces/core/branches/2.3.x/impl/src/main/java/org/apache/myfaces/push/_WebsocketInit.java?rev=1780027&r1=1780026&r2=1780027&view=diff
==============================================================================
--- myfaces/core/branches/2.3.x/impl/src/main/java/org/apache/myfaces/push/_WebsocketInit.java (original)
+++ myfaces/core/branches/2.3.x/impl/src/main/java/org/apache/myfaces/push/_WebsocketInit.java Tue Jan 24 04:30:10 2017
@@ -27,7 +27,7 @@ import org.apache.myfaces.buildtools.mav
  * This component is the one that render the initialization at the end of body section.
  * 
  * The idea is it works like a buffer that collects all markup generated by 
- * WebsocketComponent and then render it at the end of body section. In that way it 
+ * UIWebsocket and then render it at the end of body section. In that way it 
  * is possible to preserve the context and ensure the script is called when the page
  * is loaded.
  */
@@ -39,11 +39,11 @@ import org.apache.myfaces.buildtools.mav
 public abstract class _WebsocketInit extends UIOutput
 {
     /**
-     * List that stores the rendered markup of previous WebsocketComponent instances.
+     * List that stores the rendered markup of previous UIWebsocket instances.
      */
     private transient List<String> websocketComponentMarkupList = new java.util.ArrayList<String>();
     
-    public List<String> getWebsocketComponentMarkupList()
+    public List<String> getUIWebsocketMarkupList()
     {
         return websocketComponentMarkupList;
     }

Modified: myfaces/core/branches/2.3.x/impl/src/main/java/org/apache/myfaces/view/facelets/tag/jsf/core/CoreLibrary.java
URL: http://svn.apache.org/viewvc/myfaces/core/branches/2.3.x/impl/src/main/java/org/apache/myfaces/view/facelets/tag/jsf/core/CoreLibrary.java?rev=1780027&r1=1780026&r2=1780027&view=diff
==============================================================================
--- myfaces/core/branches/2.3.x/impl/src/main/java/org/apache/myfaces/view/facelets/tag/jsf/core/CoreLibrary.java (original)
+++ myfaces/core/branches/2.3.x/impl/src/main/java/org/apache/myfaces/view/facelets/tag/jsf/core/CoreLibrary.java Tue Jan 24 04:30:10 2017
@@ -117,7 +117,7 @@ public final class CoreLibrary extends A
 
         this.addComponent("verbatim", "javax.faces.HtmlOutputText", "javax.faces.Text", VerbatimHandler.class);
         
-        this.addComponent("websocket", "org.apache.myfaces.WebsocketComponent", 
-                "org.apache.myfaces.WebsocketComponent", WebsocketHandler.class);
+        this.addComponent("websocket", "javax.faces.Websocket", 
+                "javax.faces.Websocket", WebsocketHandler.class);
     }
 }

Modified: myfaces/core/branches/2.3.x/impl/src/main/java/org/apache/myfaces/view/facelets/tag/jsf/core/WebsocketHandler.java
URL: http://svn.apache.org/viewvc/myfaces/core/branches/2.3.x/impl/src/main/java/org/apache/myfaces/view/facelets/tag/jsf/core/WebsocketHandler.java?rev=1780027&r1=1780026&r2=1780027&view=diff
==============================================================================
--- myfaces/core/branches/2.3.x/impl/src/main/java/org/apache/myfaces/view/facelets/tag/jsf/core/WebsocketHandler.java (original)
+++ myfaces/core/branches/2.3.x/impl/src/main/java/org/apache/myfaces/view/facelets/tag/jsf/core/WebsocketHandler.java Tue Jan 24 04:30:10 2017
@@ -20,13 +20,13 @@
 package org.apache.myfaces.view.facelets.tag.jsf.core;
 
 import javax.faces.component.UIComponent;
+import javax.faces.component.UIWebsocket;
 import javax.faces.view.facelets.ComponentConfig;
 import javax.faces.view.facelets.ComponentHandler;
 import javax.faces.view.facelets.FaceletContext;
 import javax.faces.view.facelets.TagAttribute;
 import org.apache.myfaces.buildtools.maven2.plugin.builder.annotation.JSFFaceletAttribute;
 import org.apache.myfaces.buildtools.maven2.plugin.builder.annotation.JSFFaceletTag;
-import org.apache.myfaces.push.WebsocketComponent;
 import org.apache.myfaces.view.facelets.tag.jsf.ComponentSupport;
 
 /**
@@ -51,50 +51,13 @@ public class WebsocketHandler extends Co
         _channel = getRequiredAttribute("channel");
     }
 
-    /*
-    public UIComponent findChildByTagId(FaceletContext ctx, UIComponent parent,
-            String id)
-    {
-        //Script with no target and no relocation is possible
-        UIComponent c = ComponentSupport.findChildByTagId(parent, id);
-        if (c == null)
-        {
-            UIViewRoot root = ComponentSupport.getViewRoot(ctx, parent);
-            
-            if (root.getFacetCount() > 0)
-            {
-                Iterator<UIComponent> itr = root.getFacets().values().iterator();
-                while (itr.hasNext() && c == null)
-                {
-                    UIComponent facet = itr.next();
-                    c = ComponentSupport.findChildByTagId(facet, id);
-                }
-            }
-            return c;
-        }
-        else
-        {
-            return c;
-        }
-    }*/
-
-
     @Override
     public void onComponentCreated(FaceletContext ctx, UIComponent c,
             UIComponent parent)
     {
-        /*
-        UIComponent parentCompositeComponent
-                = FaceletCompositionContext.getCurrentInstance(ctx).getCompositeComponentFromStack();
-        if (parentCompositeComponent != null)
-        {
-            c.getAttributes().put(CompositeComponentELUtils.LOCATION_KEY,
-                    parentCompositeComponent.getAttributes().get(CompositeComponentELUtils.LOCATION_KEY));
-        }*/
-        
-        WebsocketComponent component = (WebsocketComponent) c;
-        component.setInitComponentId(ComponentSupport.getViewRoot(ctx, parent).createUniqueId()+"_wsinit");
+        UIWebsocket component = (UIWebsocket) c;
+        component.getAttributes().put("initComponentId", 
+                ComponentSupport.getViewRoot(ctx, parent).createUniqueId()+"_wsinit");
     }
-
     
 }