package com.wooki.services; import org.apache.tapestry5.SymbolConstants; import org.apache.tapestry5.internal.services.LinkSource; import org.apache.tapestry5.internal.services.MessagesBundle; import org.apache.tapestry5.internal.services.MessagesSource; import org.apache.tapestry5.internal.services.MessagesSourceImpl; import org.apache.tapestry5.ioc.Messages; import org.apache.tapestry5.ioc.Resource; import org.apache.tapestry5.ioc.annotations.Inject; import org.apache.tapestry5.ioc.annotations.Symbol; import org.apache.tapestry5.ioc.internal.util.ClasspathResource; import org.apache.tapestry5.ioc.internal.util.URLChangeTracker; import org.apache.tapestry5.ioc.services.ClasspathURLConverter; import org.apache.tapestry5.ioc.services.ThreadLocale; import org.apache.tapestry5.services.messages.PropertiesFileParser; public class ServicesMessagesImpl implements ServicesMessages { private final MessagesBundle bundle; private final MessagesSource source; private final ThreadLocale locale; private final Resource appCatalogResource; public ServicesMessagesImpl( @Symbol(SymbolConstants.APPLICATION_CATALOG) final Resource appCatalogResource, @Inject ClasspathURLConverter urlConverter, @Inject ThreadLocale locale, @Inject LinkSource linkSource, @Inject PropertiesFileParser propertyFileParser) { URLChangeTracker tracker = new URLChangeTracker(urlConverter); this.appCatalogResource = appCatalogResource; this.source = new MessagesSourceImpl(tracker, propertyFileParser); this.locale = locale; this.bundle = new MessagesBundle() { private final Resource resource; { this.resource = new ClasspathResource("com/wooki/services/wooki-services"); } public MessagesBundle getParent() { if (appCatalogResource.exists()) { return rootBundle(); } return null; } public Object getId() { return resource.getPath(); } public Resource getBaseResource() { return this.resource; } }; } public Messages getMessages() { return source.getMessages(bundle, locale.getLocale()); } public void checkForUpdates() { source.checkForUpdates(); } private MessagesBundle rootBundle() { return new MessagesBundle() { public Resource getBaseResource() { return appCatalogResource; } public Object getId() { return appCatalogResource.getPath(); } public MessagesBundle getParent() { return null; } }; } }