[Jsf4portlets-devel] SF.net SVN: jsf4portlets:[59] trunk/jsf4portlets-ext/src/main
Status: Alpha
Brought to you by:
alonsoft
From: <alo...@us...> - 2009-05-04 13:19:14
|
Revision: 59 http://jsf4portlets.svn.sourceforge.net/jsf4portlets/?rev=59&view=rev Author: alonsoft Date: 2009-05-04 13:19:07 +0000 (Mon, 04 May 2009) Log Message: ----------- Support for bridge scope listeners added Modified Paths: -------------- trunk/jsf4portlets-ext/src/main/resources/net/sf/jsf4portlets/ext/LogMessages.properties Added Paths: ----------- trunk/jsf4portlets-ext/src/main/java/net/sf/jsf4portlets/ext/config/ trunk/jsf4portlets-ext/src/main/java/net/sf/jsf4portlets/ext/config/BridgeListenersProcessor.java trunk/jsf4portlets-ext/src/main/resources/META-INF/jsf4portlets_faces-config-extension.xsd trunk/jsf4portlets-ext/src/main/resources/META-INF/services/ trunk/jsf4portlets-ext/src/main/resources/META-INF/services/net.sf.jsf4portlets.spi.ConfigurationProcessor Added: trunk/jsf4portlets-ext/src/main/java/net/sf/jsf4portlets/ext/config/BridgeListenersProcessor.java =================================================================== --- trunk/jsf4portlets-ext/src/main/java/net/sf/jsf4portlets/ext/config/BridgeListenersProcessor.java (rev 0) +++ trunk/jsf4portlets-ext/src/main/java/net/sf/jsf4portlets/ext/config/BridgeListenersProcessor.java 2009-05-04 13:19:07 UTC (rev 59) @@ -0,0 +1,94 @@ +package net.sf.jsf4portlets.ext.config; + +import java.io.IOException; +import java.util.List; +import java.util.logging.Level; +import java.util.logging.LogRecord; +import java.util.logging.Logger; + +import javax.faces.context.ExternalContext; +import javax.portlet.PortletContext; + +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.xml.sax.SAXException; + +import net.sf.jsf4portlets.event.RequestScopeListener; +import net.sf.jsf4portlets.scope.RequestScopeManager; +import net.sf.jsf4portlets.scope.RequestScopeManagerFactory; +import net.sf.jsf4portlets.spi.ConfigurationProcessor; +import net.sf.jsf4portlets.util.Util; +import net.sf.jsf4portlets.util.XmlHelper; + +public class BridgeListenersProcessor implements ConfigurationProcessor { + + private static final Logger logger = Logger.getLogger( + BridgeListenersProcessor.class.getPackage().getName(), + "net.sf.jsf4portlets.ext.LogMessages"); + + private static final String BRIDGE_EXT_NAMESPACE = + "http://jsf4portlets.sf.net/jsfportlet-ext"; + + public boolean acceptsResource(String resourceName) { + return (-1 != resourceName.indexOf("faces-config.xml")); + } + + @SuppressWarnings("unchecked") + public void process(ExternalContext context, Document facesConfig) + throws IOException, SAXException { + + PortletContext portletContext = (PortletContext) context.getContext(); + RequestScopeManager rsm = RequestScopeManagerFactory.getInstance() + .getRequestScopeManager(portletContext); + + Element listeners = getBridgeListenersElement(facesConfig); + if(listeners != null) { + List<Element> list = XmlHelper.getChildElements(listeners, + BRIDGE_EXT_NAMESPACE, "bridge-listener"); + RequestScopeListener listener = null; + for(Element listenerElem : list) { + String listenerClassName = XmlHelper.getText(listenerElem); + Class<RequestScopeListener> listenerClass; + try { + listenerClass = (Class<RequestScopeListener>) Util.loadClass( + listenerClassName, this); + } catch (ClassNotFoundException e) { + if(logger.isLoggable(Level.SEVERE)) { + logger.log(Level.SEVERE, "J4PE_000004", listenerClassName); + } + continue; + } + + try { + listener = listenerClass.newInstance(); + } catch (Exception e) { + if(logger.isLoggable(Level.SEVERE)) { + LogRecord logRecord = new LogRecord(Level.SEVERE, "J4PE_000005"); + logRecord.setParameters(new Object[]{ listenerClassName }); + logRecord.setThrown(e); + logger.log(logRecord); + } + continue; + } + + rsm.addRequestScopeListener(listener); + } + } + } + + private Element getBridgeListenersElement(Document facesConfig) { + final Element application = XmlHelper.getChildElement(facesConfig + .getDocumentElement(), "lifecycle"); + if (application == null) { + return null; + } + final Element extension = XmlHelper.getChildElement(application, + "lifecycle-extension"); + if (extension == null) { + return null; + } + return XmlHelper.getChildElement(extension, BRIDGE_EXT_NAMESPACE, + "bridge-listeners"); + } + +} Added: trunk/jsf4portlets-ext/src/main/resources/META-INF/jsf4portlets_faces-config-extension.xsd =================================================================== --- trunk/jsf4portlets-ext/src/main/resources/META-INF/jsf4portlets_faces-config-extension.xsd (rev 0) +++ trunk/jsf4portlets-ext/src/main/resources/META-INF/jsf4portlets_faces-config-extension.xsd 2009-05-04 13:19:07 UTC (rev 59) @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="utf-8"?> + +<!-- + JSF 4 Portlets - JSF Portlet Bridge (JSR-301) + Copyright (C) 2009 A. Alonso Dominguez + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + A. Alonso Dominguez + alo...@us... +--> + +<xs:schema id="bridge-ext" xmlns:xs="http://www.w3.org/2001/XMLSchema" + targetNamespace="http://jsf4portlets.sf.net/jsfportlet-ext" + attributeFormDefault="unqualified" elementFormDefault="qualified"> + + <xs:element name="bridge-listeners"> + <xs:annotation> + </xs:annotation> + <xs:complexType> + <xs:sequence> + <xs:element name="bridge-listener" minOccurs="0" + maxOccurs="unbounded" type="xs:string" /> + </xs:sequence> + </xs:complexType> + </xs:element> + +</xs:schema> \ No newline at end of file Added: trunk/jsf4portlets-ext/src/main/resources/META-INF/services/net.sf.jsf4portlets.spi.ConfigurationProcessor =================================================================== --- trunk/jsf4portlets-ext/src/main/resources/META-INF/services/net.sf.jsf4portlets.spi.ConfigurationProcessor (rev 0) +++ trunk/jsf4portlets-ext/src/main/resources/META-INF/services/net.sf.jsf4portlets.spi.ConfigurationProcessor 2009-05-04 13:19:07 UTC (rev 59) @@ -0,0 +1 @@ +net.sf.jsf4portlets.ext.config.BridgeListenersProcessor \ No newline at end of file Modified: trunk/jsf4portlets-ext/src/main/resources/net/sf/jsf4portlets/ext/LogMessages.properties =================================================================== --- trunk/jsf4portlets-ext/src/main/resources/net/sf/jsf4portlets/ext/LogMessages.properties 2009-05-04 13:15:41 UTC (rev 58) +++ trunk/jsf4portlets-ext/src/main/resources/net/sf/jsf4portlets/ext/LogMessages.properties 2009-05-04 13:19:07 UTC (rev 59) @@ -18,5 +18,8 @@ # A. Alonso Dominguez # alo...@us... # -J4PE_000001=J4PE000001: PortletEvent \'{0}\' has been queued for portlet {1}. -J4PE_000002=J4PE000002: Broadcasting event \'{0}\' to managed bean \"{1}\". \ No newline at end of file +J4PE_000001=J4PE000001: PortletEvent \"{0}\" has been queued for portlet {1}. +J4PE_000002=J4PE000002: Broadcasting event \"{0}\" to managed bean \"{1}\". +J4PE_000003=J4PE000003: Configuring bridge scope listener: {0} +J4PE_000004=J4PE000004: Bridge scope listener \"{0}\" not found. +J4PE_000005=J4PE000005: Error instantiating scope listener: {0} \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |