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");
}
-
}