Class AssetSourceImpl
- java.lang.Object
-
- org.apache.tapestry5.commons.internal.util.LockSupport
-
- org.apache.tapestry5.internal.services.AssetSourceImpl
-
- All Implemented Interfaces:
AssetSource
public class AssetSourceImpl extends LockSupport implements AssetSource
-
-
Constructor Summary
Constructors Constructor Description AssetSourceImpl(ThreadLocale threadLocale, Map<String,AssetFactory> configuration, SymbolSource symbolSource, org.slf4j.Logger logger, OperationTracker tracker)
AssetSourceImpl(ThreadLocale threadLocale, Map<String,AssetFactory> configuration, SymbolSource symbolSource, org.slf4j.Logger logger, OperationTracker tracker, Request request)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
clearCacheWhenResourcesChange(ResourceChangeTracker tracker)
Asset
getAsset(Resource baseResource, String path, Locale locale)
Finds the asset.Asset
getClasspathAsset(String path)
Obtains a classpath asset in the current locale (as defined by theThreadLocale
service).Asset
getClasspathAsset(String path, Locale locale)
Convenience for finding assets on the classpath.Asset
getComponentAsset(ComponentResources resources, String path, String libraryName)
Gets an asset that is used with, or injected into, a component, that will be exposed to the client.Asset
getContextAsset(String path, Locale locale)
Convenience for finding assets in the context.Asset
getExpandedAsset(String path)
As withAssetSource.getUnlocalizedAsset(String)
, but symbols in the path are expanded}.Asset
getUnlocalizedAsset(String path)
Find an asset but does not attempt to localize it.Resource
resourceForPath(String path)
Finds the asset, either on the classpath or (if prefixed), within the indicated domain.-
Methods inherited from class org.apache.tapestry5.commons.internal.util.LockSupport
acquireReadLock, downgradeWriteLockToReadLock, releaseReadLock, releaseWriteLock, takeWriteLock, upgradeReadLockToWriteLock
-
-
-
-
Constructor Detail
-
AssetSourceImpl
public AssetSourceImpl(ThreadLocale threadLocale, Map<String,AssetFactory> configuration, SymbolSource symbolSource, org.slf4j.Logger logger, OperationTracker tracker)
-
AssetSourceImpl
public AssetSourceImpl(ThreadLocale threadLocale, Map<String,AssetFactory> configuration, SymbolSource symbolSource, org.slf4j.Logger logger, OperationTracker tracker, Request request)
-
-
Method Detail
-
clearCacheWhenResourcesChange
@PostInjection public void clearCacheWhenResourcesChange(ResourceChangeTracker tracker)
-
getClasspathAsset
public Asset getClasspathAsset(String path)
Description copied from interface:AssetSource
Obtains a classpath asset in the current locale (as defined by theThreadLocale
service).- Specified by:
getClasspathAsset
in interfaceAssetSource
- Parameters:
path
- relative to the classpath root- Returns:
- the asset
-
getClasspathAsset
public Asset getClasspathAsset(String path, Locale locale)
Description copied from interface:AssetSource
Convenience for finding assets on the classpath.- Specified by:
getClasspathAsset
in interfaceAssetSource
- Parameters:
path
- path to the base resource, relative to classpath rootlocale
- to localize the resource to- Returns:
- the asset
-
getContextAsset
public Asset getContextAsset(String path, Locale locale)
Description copied from interface:AssetSource
Convenience for finding assets in the context.- Specified by:
getContextAsset
in interfaceAssetSource
- Parameters:
path
- path relative to the base resource (the context root)locale
- to localize the resource to, or null for the locale for the current request- Returns:
- the asset
-
getAsset
public Asset getAsset(Resource baseResource, String path, Locale locale)
Description copied from interface:AssetSource
Finds the asset. The path may either be a simple file name or a relative path (relative to the base resource) or it may have a prefix, such as "context:" or "classpath:", in which case it is treated as a complete path within the indicated domain. The resulting Resource is then localized (to the provided Locale) and returned as an Asset. The AssetSource caches its results, so a single Asset instance may be shared among many different components.- Specified by:
getAsset
in interfaceAssetSource
- Parameters:
baseResource
- base resource for computing relative paths, or null to search the classpathpath
- relative to the base resourcelocale
- locale to localize the final resource to, or null for the thread's current locale- Returns:
- the asset
-
resourceForPath
public Resource resourceForPath(String path)
Description copied from interface:AssetSource
Finds the asset, either on the classpath or (if prefixed), within the indicated domain. The result is not localized. The underlying Asset may not exist.- Specified by:
resourceForPath
in interfaceAssetSource
- Parameters:
path
- to the resource to provide as an Asset- Returns:
- Resource for the path (the Resource may not exist)
-
getExpandedAsset
public Asset getExpandedAsset(String path)
Description copied from interface:AssetSource
As withAssetSource.getUnlocalizedAsset(String)
, but symbols in the path are expanded}.- Specified by:
getExpandedAsset
in interfaceAssetSource
-
getComponentAsset
public Asset getComponentAsset(ComponentResources resources, String path, String libraryName)
Description copied from interface:AssetSource
Gets an asset that is used with, or injected into, a component, that will be exposed to the client. This encapsulates the new, in 5.4, standard that assets should all be stored in (sub-folders of)META-INF/assets/library-name/
. This is the preferred location in 5.4, with compatibility for 5.3 that allows assets to be stored on the classpath alongside Java classes and server-only resources such as templates and message catalogs. When resolving a resource in a component that is subclass, the point of injection is the class which contains the injecting annotation (e.g.,Inject
withPath
, orImport
). In other words, the library name for the library containing the class, rather than the library name of the instantiated subclass (which can be different).- Specified by:
getComponentAsset
in interfaceAssetSource
- Parameters:
resources
- resources, used to identify starting location of asset (if path does not include a asset prefix).path
- path to the resource; either fully qualified (with an asset prefix such as "context:"), or relative to the component's library asset folder (the 5.4 and beyond way), or the to the component's Java class file (the 5.3 and earlier way, still supported until at least 5.5). Symbols in the path are expanded.libraryName
- The name of the library containing the component, as perComponentModel.getLibraryName()
. For a subclass, the libraryName must reflect the name of the library for the parent class that forms the basis of injection.- Returns:
- the Asset
-
getUnlocalizedAsset
public Asset getUnlocalizedAsset(String path)
Description copied from interface:AssetSource
Find an asset but does not attempt to localize it. If the path has no prefix, it is assumed to be on the classpath.- Specified by:
getUnlocalizedAsset
in interfaceAssetSource
-
-