Jelajahi Sumber

refactoring:

svn path=/branches/mainsoft/JSF/mcs/; revision=91538
Igor Zelmanovich 18 tahun lalu
induk
melakukan
0760c4cb5b

+ 49 - 0
mcs/class/Mainsoft.Web/Mainsoft.Web.Hosting/BaseFacesPageHandlerFactory.cs

@@ -0,0 +1,49 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Web;
+using javax.faces.context;
+using javax.faces.lifecycle;
+using javax.servlet;
+using javax.faces;
+using javax.faces.webapp;
+
+namespace Mainsoft.Web
+{
+	public abstract class BaseFacesPageHandlerFactory : IHttpHandlerFactory
+	{
+		readonly FacesContextFactory _facesContextFactory;
+		readonly Lifecycle _lifecycle;
+
+		protected FacesContextFactory FacesContextFactory {
+			get { return _facesContextFactory; }
+		}
+
+		protected Lifecycle Lifecycle {
+			get { return _lifecycle; }
+		}
+
+		public BaseFacesPageHandlerFactory () {
+
+			_facesContextFactory = (FacesContextFactory) FactoryFinder.getFactory (FactoryFinder.FACES_CONTEXT_FACTORY);
+
+			HttpWorkerRequest wr = (HttpWorkerRequest) ((IServiceProvider) HttpContext.Current).GetService (typeof (HttpWorkerRequest));
+			ServletContext servletContext = (ServletContext) ((IServiceProvider) wr).GetService (typeof (ServletContext));
+
+			String lifecycleId = servletContext.getInitParameter (FacesServlet.LIFECYCLE_ID_ATTR);
+			lifecycleId = lifecycleId ?? LifecycleFactory.DEFAULT_LIFECYCLE;
+			//TODO: null-check for Weblogic, that tries to initialize Servlet before ContextListener
+
+			//Javadoc says: Lifecycle instance is shared across multiple simultaneous requests, it must be implemented in a thread-safe manner.
+			//So we can acquire it here once:
+			LifecycleFactory lifecycleFactory = (LifecycleFactory) FactoryFinder.getFactory (FactoryFinder.LIFECYCLE_FACTORY);
+			_lifecycle = lifecycleFactory.getLifecycle (lifecycleId);
+
+		}
+
+		public abstract IHttpHandler GetHandler (HttpContext context, string requestType, string url, string pathTranslated);
+
+		public virtual void ReleaseHandler (IHttpHandler handler) {
+		}
+	}
+}

+ 3 - 31
mcs/class/Mainsoft.Web/Mainsoft.Web.Hosting/ServletFacesPageHandlerFactory.cs

@@ -12,40 +12,12 @@ using javax.faces;
 
 namespace Mainsoft.Web.Hosting
 {
-	public sealed class ServletFacesPageHandlerFactory : IHttpHandlerFactory
+	public sealed class ServletFacesPageHandlerFactory : BaseFacesPageHandlerFactory
 	{
-		readonly ServletConfig _servletConfig;
-		readonly FacesContextFactory _facesContextFactory;
-		readonly Lifecycle _lifecycle;
-
-		string getLifecycleId () {
-			String lifecycleId = _servletConfig.getServletContext ().getInitParameter (FacesServlet.LIFECYCLE_ID_ATTR);
-			return lifecycleId != null ? lifecycleId : LifecycleFactory.DEFAULT_LIFECYCLE;
-		}
-
-		public ServletFacesPageHandlerFactory () {
-
-			HttpWorkerRequest wr = (HttpWorkerRequest) ((IServiceProvider) HttpContext.Current).GetService (typeof (HttpWorkerRequest));
-			HttpServlet servlet = (HttpServlet) ((IServiceProvider) wr).GetService (typeof (HttpServlet));
-
-			_servletConfig = servlet.getServletConfig ();
-			_facesContextFactory = (FacesContextFactory) FactoryFinder.getFactory (FactoryFinder.FACES_CONTEXT_FACTORY);
-			//TODO: null-check for Weblogic, that tries to initialize Servlet before ContextListener
-
-			//Javadoc says: Lifecycle instance is shared across multiple simultaneous requests, it must be implemented in a thread-safe manner.
-			//So we can acquire it here once:
-			LifecycleFactory lifecycleFactory = (LifecycleFactory) FactoryFinder.getFactory (FactoryFinder.LIFECYCLE_FACTORY);
-			_lifecycle = lifecycleFactory.getLifecycle (getLifecycleId ());
-
-		}
-
-		public IHttpHandler GetHandler (HttpContext context, string requestType, string url, string path) {
-			IHttpHandler handler = new ServletFacesPageHandler (url, _facesContextFactory, _lifecycle);
+		public override IHttpHandler GetHandler (HttpContext context, string requestType, string url, string path) {
+			IHttpHandler handler = new ServletFacesPageHandler (url, FacesContextFactory, Lifecycle);
 			return SessionWrapper.WrapHandler (handler, context, url);
 		}
-
-		public void ReleaseHandler (IHttpHandler handler) {
-		}
 	}
 }
 

+ 1 - 0
mcs/class/Mainsoft.Web/Mainsoft.Web.J2EE.csproj

@@ -134,6 +134,7 @@
     <Compile Include="..\..\build\common\MonoTODOAttribute.cs">
       <Link>MonoTODOAttribute.cs</Link>
     </Compile>
+    <Compile Include="Mainsoft.Web.Hosting\BaseFacesPageHandlerFactory.cs" />
     <Compile Include="Mainsoft.Web.Hosting\AspNetFacesContext.cs" />
     <Compile Include="Mainsoft.Web.Hosting\BaseFacesStateManager.cs" />
     <Compile Include="Mainsoft.Web.Hosting\BaseFacesViewHandler.cs" />