blob: 5067a33901783ac29254152ca66b93f63fd19b75 [file] [log] [blame]
// Copyright 2008-2013 The Apache Software Foundation
//
// Licensed 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 org.apache.tapestry5.modules;
import org.apache.tapestry5.internal.pageload.PageLoaderImpl;
import org.apache.tapestry5.internal.services.*;
import org.apache.tapestry5.internal.services.ajax.AjaxFormUpdateController;
import org.apache.tapestry5.internal.services.javascript.JavaScriptStackPathConstructor;
import org.apache.tapestry5.internal.structure.ComponentPageElementResourcesSource;
import org.apache.tapestry5.internal.structure.ComponentPageElementResourcesSourceImpl;
import org.apache.tapestry5.ioc.MappedConfiguration;
import org.apache.tapestry5.ioc.OrderedConfiguration;
import org.apache.tapestry5.ioc.ServiceBinder;
import org.apache.tapestry5.ioc.annotations.Contribute;
import org.apache.tapestry5.ioc.annotations.Marker;
import org.apache.tapestry5.services.*;
import org.apache.tapestry5.services.transform.ControlledPackageType;
import javax.servlet.http.Cookie;
import java.util.Map;
/**
* {@link org.apache.tapestry5.modules.TapestryModule} has gotten too complicated and it is nice to demarkate public
* (and stable) from internal (and volatile).
*/
@Marker(Core.class)
public class InternalModule
{
/**
* Bind all the private/internal services of Tapestry.
*/
public static void bind(ServiceBinder binder)
{
binder.bind(PersistentFieldManager.class, PersistentFieldManagerImpl.class);
binder.bind(TemplateParser.class, TemplateParserImpl.class);
binder.bind(PageResponseRenderer.class, PageResponseRendererImpl.class);
binder.bind(PageMarkupRenderer.class, PageMarkupRendererImpl.class);
binder.bind(LinkSource.class, LinkSourceImpl.class);
binder.bind(LocalizationSetter.class, LocalizationSetterImpl.class);
binder.bind(PageElementFactory.class, PageElementFactoryImpl.class);
binder.bind(ResourceStreamer.class, ResourceStreamerImpl.class);
binder.bind(ClientPersistentFieldStorage.class, ClientPersistentFieldStorageImpl.class);
binder.bind(PageRenderQueue.class, PageRenderQueueImpl.class);
binder.bind(AjaxPartialResponseRenderer.class, AjaxPartialResponseRendererImpl.class);
binder.bind(PageContentTypeAnalyzer.class, PageContentTypeAnalyzerImpl.class);
binder.bind(ComponentPageElementResourcesSource.class, ComponentPageElementResourcesSourceImpl.class);
binder.bind(RequestSecurityManager.class, RequestSecurityManagerImpl.class);
binder.bind(InternalRequestGlobals.class, InternalRequestGlobalsImpl.class);
binder.bind(EndOfRequestEventHub.class);
binder.bind(ResponseCompressionAnalyzer.class, ResponseCompressionAnalyzerImpl.class);
binder.bind(ComponentModelSource.class);
binder.bind(JavaScriptStackPathConstructor.class);
binder.bind(AjaxFormUpdateController.class);
binder.bind(ResourceDigestManager.class, ResourceDigestManagerImpl.class); // Remove in Tapestry 5.5
binder.bind(RequestPageCache.class, RequestPageCacheImpl.class);
binder.bind(ComponentInstantiatorSource.class);
binder.bind(InternalComponentInvalidationEventHub.class);
binder.bind(PageSource.class, PageSourceImpl.class);
binder.bind(PageLoader.class, PageLoaderImpl.class).preventReloading();
binder.bind(UnknownActivationContextHandler.class, UnknownActivationContextHandlerImpl.class);
binder.bind(ReloadHelper.class, ReloadHelperImpl.class);
}
public static CookieSource buildCookieSource(final RequestGlobals requestGlobals)
{
return new CookieSource()
{
public Cookie[] getCookies()
{
return requestGlobals.getHTTPServletRequest().getCookies();
}
};
}
public static CookieSink buildCookieSink(final RequestGlobals requestGlobals)
{
return new CookieSink()
{
public void addCookie(Cookie cookie)
{
requestGlobals.getHTTPServletResponse().addCookie(cookie);
}
};
}
/**
* Contributes:
* <dl>
* <dt>LinkDecoration (instance of {@link LinkDecorationListener})</dt>
* <dd>Triggers events for notifications about links</dd>
* <dl>
*
* @since 5.2.0
*/
public static void contributeLinkSource(OrderedConfiguration<LinkCreationListener2> configuration)
{
configuration.addInstance("LinkDecoration", LinkDecorationListener.class);
}
/**
* Contributes packages identified by {@link ComponentClassResolver#getControlledPackageMapping()}.
*
* @since 5.3
*/
@Contribute(ComponentInstantiatorSource.class)
public static void configureControlledPackagesFromComponentClassResolver(
MappedConfiguration<String, ControlledPackageType> configuration, ComponentClassResolver resolver)
{
for (Map.Entry<String, ControlledPackageType> entry : resolver.getControlledPackageMapping().entrySet())
{
configuration.add(entry.getKey(), entry.getValue());
}
}
}