001// Licensed under the Apache License, Version 2.0 (the "License"); 002// you may not use this file except in compliance with the License. 003// You may obtain a copy of the License at 004// 005// http://www.apache.org/licenses/LICENSE-2.0 006// 007// Unless required by applicable law or agreed to in writing, software 008// distributed under the License is distributed on an "AS IS" BASIS, 009// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 010// See the License for the specific language governing permissions and 011// limitations under the License. 012 013package org.apache.tapestry5.modules; 014 015import org.apache.tapestry5.beanmodel.internal.services.*; 016import org.apache.tapestry5.beanmodel.services.*; 017import org.apache.tapestry5.commons.MappedConfiguration; 018import org.apache.tapestry5.commons.OrderedConfiguration; 019import org.apache.tapestry5.http.internal.services.ResponseCompressionAnalyzerImpl; 020import org.apache.tapestry5.http.services.RequestGlobals; 021import org.apache.tapestry5.http.services.ResponseCompressionAnalyzer; 022import org.apache.tapestry5.internal.pageload.PageLoaderImpl; 023import org.apache.tapestry5.internal.services.AjaxPartialResponseRenderer; 024import org.apache.tapestry5.internal.services.AjaxPartialResponseRendererImpl; 025import org.apache.tapestry5.internal.services.ClientPersistentFieldStorage; 026import org.apache.tapestry5.internal.services.ClientPersistentFieldStorageImpl; 027import org.apache.tapestry5.internal.services.ComponentInstantiatorSource; 028import org.apache.tapestry5.internal.services.ComponentModelSource; 029import org.apache.tapestry5.internal.services.CookieSink; 030import org.apache.tapestry5.internal.services.CookieSource; 031import org.apache.tapestry5.internal.services.EndOfRequestEventHub; 032import org.apache.tapestry5.internal.services.FormControlNameManager; 033import org.apache.tapestry5.internal.services.FormControlNameManagerImpl; 034import org.apache.tapestry5.internal.services.InternalComponentInvalidationEventHub; 035import org.apache.tapestry5.internal.services.InternalRequestGlobals; 036import org.apache.tapestry5.internal.services.InternalRequestGlobalsImpl; 037import org.apache.tapestry5.internal.services.LinkDecorationListener; 038import org.apache.tapestry5.internal.services.LinkSource; 039import org.apache.tapestry5.internal.services.LinkSourceImpl; 040import org.apache.tapestry5.internal.services.LocalizationSetterImpl; 041import org.apache.tapestry5.internal.services.PageContentTypeAnalyzer; 042import org.apache.tapestry5.internal.services.PageContentTypeAnalyzerImpl; 043import org.apache.tapestry5.internal.services.PageElementFactory; 044import org.apache.tapestry5.internal.services.PageElementFactoryImpl; 045import org.apache.tapestry5.internal.services.PageLoader; 046import org.apache.tapestry5.internal.services.PageMarkupRenderer; 047import org.apache.tapestry5.internal.services.PageMarkupRendererImpl; 048import org.apache.tapestry5.internal.services.PageRenderQueue; 049import org.apache.tapestry5.internal.services.PageRenderQueueImpl; 050import org.apache.tapestry5.internal.services.PageResponseRenderer; 051import org.apache.tapestry5.internal.services.PageResponseRendererImpl; 052import org.apache.tapestry5.internal.services.PageSource; 053import org.apache.tapestry5.internal.services.PageSourceImpl; 054import org.apache.tapestry5.internal.services.PersistentFieldManager; 055import org.apache.tapestry5.internal.services.PersistentFieldManagerImpl; 056import org.apache.tapestry5.internal.services.ReloadHelper; 057import org.apache.tapestry5.internal.services.ReloadHelperImpl; 058import org.apache.tapestry5.internal.services.RequestPageCache; 059import org.apache.tapestry5.internal.services.RequestPageCacheImpl; 060import org.apache.tapestry5.internal.services.RequestSecurityManager; 061import org.apache.tapestry5.internal.services.RequestSecurityManagerImpl; 062import org.apache.tapestry5.internal.services.ResourceDigestManager; 063import org.apache.tapestry5.internal.services.ResourceDigestManagerImpl; 064import org.apache.tapestry5.internal.services.ResourceStreamer; 065import org.apache.tapestry5.internal.services.ResourceStreamerImpl; 066import org.apache.tapestry5.internal.services.TemplateParser; 067import org.apache.tapestry5.internal.services.TemplateParserImpl; 068import org.apache.tapestry5.internal.services.UnknownActivationContextHandler; 069import org.apache.tapestry5.internal.services.UnknownActivationContextHandlerImpl; 070import org.apache.tapestry5.internal.services.ajax.AjaxFormUpdateController; 071import org.apache.tapestry5.internal.services.javascript.JavaScriptStackPathConstructor; 072import org.apache.tapestry5.internal.structure.ComponentPageElementResourcesSource; 073import org.apache.tapestry5.internal.structure.ComponentPageElementResourcesSourceImpl; 074import org.apache.tapestry5.ioc.ServiceBinder; 075import org.apache.tapestry5.ioc.annotations.Contribute; 076import org.apache.tapestry5.ioc.annotations.Marker; 077import org.apache.tapestry5.services.ComponentClassResolver; 078import org.apache.tapestry5.services.Core; 079import org.apache.tapestry5.services.LinkCreationListener2; 080import org.apache.tapestry5.services.LocalizationSetter; 081import org.apache.tapestry5.services.transform.ControlledPackageType; 082 083import javax.servlet.http.Cookie; 084import java.util.Map; 085 086/** 087 * {@link org.apache.tapestry5.modules.TapestryModule} has gotten too complicated and it is nice to demarkate public 088 * (and stable) from internal (and volatile). 089 */ 090@Marker(Core.class) 091public class InternalModule 092{ 093 /** 094 * Bind all the private/internal services of Tapestry. 095 */ 096 public static void bind(ServiceBinder binder) 097 { 098 binder.bind(PersistentFieldManager.class, PersistentFieldManagerImpl.class); 099 binder.bind(TemplateParser.class, TemplateParserImpl.class); 100 binder.bind(PageResponseRenderer.class, PageResponseRendererImpl.class); 101 binder.bind(PageMarkupRenderer.class, PageMarkupRendererImpl.class); 102 binder.bind(LinkSource.class, LinkSourceImpl.class); 103 binder.bind(LocalizationSetter.class, LocalizationSetterImpl.class); 104 binder.bind(PageElementFactory.class, PageElementFactoryImpl.class); 105 binder.bind(ResourceStreamer.class, ResourceStreamerImpl.class); 106 binder.bind(ClientPersistentFieldStorage.class, ClientPersistentFieldStorageImpl.class); 107 binder.bind(PageRenderQueue.class, PageRenderQueueImpl.class); 108 binder.bind(AjaxPartialResponseRenderer.class, AjaxPartialResponseRendererImpl.class); 109 binder.bind(PageContentTypeAnalyzer.class, PageContentTypeAnalyzerImpl.class); 110 binder.bind(ComponentPageElementResourcesSource.class, ComponentPageElementResourcesSourceImpl.class); 111 binder.bind(RequestSecurityManager.class, RequestSecurityManagerImpl.class); 112 binder.bind(InternalRequestGlobals.class, InternalRequestGlobalsImpl.class); 113 binder.bind(EndOfRequestEventHub.class); 114 binder.bind(ComponentModelSource.class); 115 binder.bind(JavaScriptStackPathConstructor.class); 116 binder.bind(AjaxFormUpdateController.class); 117 binder.bind(ResourceDigestManager.class, ResourceDigestManagerImpl.class); // Remove in Tapestry 5.5 118 binder.bind(RequestPageCache.class, RequestPageCacheImpl.class); 119 binder.bind(ComponentInstantiatorSource.class).eagerLoad(); 120 binder.bind(InternalComponentInvalidationEventHub.class); 121 binder.bind(PageSource.class, PageSourceImpl.class); 122 binder.bind(PageLoader.class, PageLoaderImpl.class).preventReloading(); 123 binder.bind(UnknownActivationContextHandler.class, UnknownActivationContextHandlerImpl.class); 124 binder.bind(ReloadHelper.class, ReloadHelperImpl.class); 125 binder.bind(FormControlNameManager.class, FormControlNameManagerImpl.class); 126 127 } 128 129 public static CookieSource buildCookieSource(final RequestGlobals requestGlobals) 130 { 131 return new CookieSource() 132 { 133 134 public Cookie[] getCookies() 135 { 136 return requestGlobals.getHTTPServletRequest().getCookies(); 137 } 138 }; 139 } 140 141 public static CookieSink buildCookieSink(final RequestGlobals requestGlobals) 142 { 143 return new CookieSink() 144 { 145 146 public void addCookie(Cookie cookie) 147 { 148 requestGlobals.getHTTPServletResponse().addCookie(cookie); 149 } 150 }; 151 } 152 153 /** 154 * Contributes: 155 * <dl> 156 * <dt>LinkDecoration (instance of {@link LinkDecorationListener})</dt> 157 * <dd>Triggers events for notifications about links</dd> 158 * </dl> 159 * 160 * @since 5.2.0 161 */ 162 public static void contributeLinkSource(OrderedConfiguration<LinkCreationListener2> configuration) 163 { 164 configuration.addInstance("LinkDecoration", LinkDecorationListener.class); 165 } 166 167 /** 168 * Contributes packages identified by {@link ComponentClassResolver#getControlledPackageMapping()}. 169 * 170 * @since 5.3 171 */ 172 @Contribute(ComponentInstantiatorSource.class) 173 public static void configureControlledPackagesFromComponentClassResolver( 174 MappedConfiguration<String, ControlledPackageType> configuration, ComponentClassResolver resolver) 175 { 176 for (Map.Entry<String, ControlledPackageType> entry : resolver.getControlledPackageMapping().entrySet()) 177 { 178 configuration.add(entry.getKey(), entry.getValue()); 179 } 180 } 181}