Class BroadleafFileServiceImpl
- All Implemented Interfaces:
BroadleafFileService
This service provides a pluggable way to provide those services via FileServiceProvider implementations.
This service can be used by any component that needs to write files to an area shared by multiple application servers.
For example usage, see SiteMapGenerator. The Broadleaf CMS module also uses this component to load, store, and
manipulate images for the file-system.
Generally, the process to create a new asset in the shared file system is ...
1. Call initializeWorkArea() to get a temporary directory
2. Create files, directories, etc. using the FileWorkArea.filePathLocation as the root directory.
3. Once your file processing is complete, call #addOrUpdateResources(FileWorkArea, FileApplicationType) to
4. Call #closeWorkArea() to clear out the temporary files
- Author:
- bpolster
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected FileServiceProviderprotected BroadleafFileServiceExtensionManagerprotected Stringprotected List<FileServiceProvider>protected intprotected String -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidaddOrUpdateResource(FileWorkArea workArea, File file, boolean removeFilesFromWorkArea) Takes in a temporary work area and a single File and copies that files to the configured FileProvider's permanent storage.addOrUpdateResourceForPath(FileWorkArea workArea, File file, boolean removeFilesFromWorkArea) Takes in a temporary work area and a single File and copies that files to the configured FileProvider's permanent storage.voidaddOrUpdateResources(FileWorkArea workArea, boolean removeFilesFromWorkArea) Takes in a temporary work area and copies all of the files to the configured FileProvider's permanent storage.voidaddOrUpdateResources(FileWorkArea workArea, List<File> files, boolean removeFilesFromWorkArea) Takes in a temporary work area and a list of Files and copies them to the configured FileProvider's permanent storage.addOrUpdateResourcesForPaths(FileWorkArea workArea, boolean removeFilesFromWorkArea) Takes in a temporary work area and copies all of the files to the configured FileProvider's permanent storage.addOrUpdateResourcesForPaths(FileWorkArea workArea, List<File> files, boolean removeFilesFromWorkArea) Takes in a temporary work area and a list of Files and copies them to the configured FileProvider's permanent storage.protected voidbuildFileList(File file, Collection<File> fileList) Adds the file to the passed in Collection.protected Stringprotected voidcheckFiles(FileWorkArea workArea, List<File> fileList) booleanReturns true if the resource is available on the classpath.voidcloseWorkArea(FileWorkArea fwArea) Closes the passed in work area.protected StringgetBaseDirectory(boolean skipSite) Returns the baseDirectory for writing and reading files as the property assetFileSystemPath if it exists or java.tmp.io if that property has not been set.getClasspathResource(String name) Allows assets to be included in the Java classpath.getLocalResource(String resourceName) Checks for a resource in the temporary directory of the file-system.protected FilegetLocalResource(String resourceName, boolean skipSite) intgetResource(String name) Returns a File representing the passed in name.getResource(String name, Long localTimeout) Returns a File representing the resource.getSharedLocalResource(String resourceName) Checks for a resource in the temporary directory of the file-system.protected StringgetTempDirectory(String baseDirectory) Returns a directory that is unique for this work area.Create a file work area that can be used for further operations.protected org.springframework.core.io.ClassPathResourceprotected voidremoveLocalCacheFiles(String resourceName, String baseDirectory) booleanremoveResource(String resourceName) Removes the resource matching the passed in file name from the FileProviderprotected FileServiceProviderReturns the FileServiceProvider that can handle the passed in application type.voidsetDefaultFileServiceProvider(FileServiceProvider defaultFileServiceProvider) voidsetFileServiceProviders(List<FileServiceProvider> fileServiceProviders) voidsetMaxGeneratedDirectoryDepth(int maxGeneratedDirectoryDepth) voidsetTempFileSystemBaseDirectory(String tempFileSystemBaseDirectory)
-
Field Details
-
fileServiceProviders
-
defaultFileServiceProvider
-
tempFileSystemBaseDirectory
-
maxGeneratedDirectoryDepth
@Value("${asset.server.max.generated.file.system.directories}") protected int maxGeneratedDirectoryDepth -
fileServiceClasspathDirectory
-
extensionManager
-
-
Constructor Details
-
BroadleafFileServiceImpl
public BroadleafFileServiceImpl()
-
-
Method Details
-
initializeWorkArea
Create a file work area that can be used for further operations.- Specified by:
initializeWorkAreain interfaceBroadleafFileService- Returns:
-
closeWorkArea
Closes the passed in work area. This method will delete the work area (typically a directory on the file system and all items it encloses).- Specified by:
closeWorkAreain interfaceBroadleafFileService- Parameters:
fwArea- Area
-
getResource
Description copied from interface:BroadleafFileServiceReturns a File representing the passed in name. This method will always access the file via the FileProvider which might be a remote operation.- Specified by:
getResourcein interfaceBroadleafFileService- Parameters:
name- - fully qualified path to the resource- Returns:
-
getLocalResource
-
getLocalResource
Description copied from interface:BroadleafFileServiceChecks for a resource in the temporary directory of the file-system. Will check for a site-specific file.- Specified by:
getLocalResourcein interfaceBroadleafFileService- Returns:
-
getResource
Description copied from interface:BroadleafFileServiceReturns a File representing the resource. This method first checks the local temporary directory for the file. If it exists and has been modified within the timeout parameter, it will be returned. Otherwise, this method will make a call toBroadleafFileService.getResource(String).If the timeout parameter is null then if the resource exists locally, it will be returned.
- Specified by:
getResourcein interfaceBroadleafFileService- Parameters:
name- - fully qualified path to the resourcelocalTimeout- - timeframe that the temporary file is considered valid- Returns:
-
checkForResourceOnClassPath
Description copied from interface:BroadleafFileServiceReturns true if the resource is available on the classpath.- Specified by:
checkForResourceOnClassPathin interfaceBroadleafFileService- Returns:
-
lookupResourceOnClassPath
-
getClasspathResource
Description copied from interface:BroadleafFileServiceAllows assets to be included in the Java classpath.This method was designed to support an internal Broadleaf use case and may not have general applicability beyond that. For Broadleaf demo sites, many of the product images are shared across the demo sites.
Rather than copy those images, they are stored in a Jar file and shared by all of the sites.
- Specified by:
getClasspathResourcein interfaceBroadleafFileService- Parameters:
name- - fully qualified path to the resource- Returns:
-
removeResource
Removes the resource matching the passed in file name from the FileProvider- Specified by:
removeResourcein interfaceBroadleafFileService- Parameters:
resourceName- - fully qualified path to the resource
-
addOrUpdateResource
Takes in a temporary work area and a single File and copies that files to the configured FileProvider's permanent storage.
Passing in removeFilesFromWorkArea to true allows for more efficient file processing when using a local file system as it performs a move operation instead of a copy.
- Specified by:
addOrUpdateResourcein interfaceBroadleafFileService
-
addOrUpdateResourceForPath
public String addOrUpdateResourceForPath(FileWorkArea workArea, File file, boolean removeFilesFromWorkArea) Takes in a temporary work area and a single File and copies that files to the configured FileProvider's permanent storage.
Passing in removeFilesFromWorkArea to true allows for more efficient file processing when using a local file system as it performs a move operation instead of a copy.
- Specified by:
addOrUpdateResourceForPathin interfaceBroadleafFileService- Parameters:
workArea- the work area from the given filefile- the file to uploadremoveFilesFromWorkArea- whether or not the given file should be removed from workArea when it has been copied
-
addOrUpdateResources
Takes in a temporary work area and copies all of the files to the configured FileProvider's permanent storage.
Passing in removeFilesFromWorkArea to true allows for more efficient file processing when using a local file system as it performs a move operation instead of a copy.
- Specified by:
addOrUpdateResourcesin interfaceBroadleafFileService
-
addOrUpdateResourcesForPaths
public List<String> addOrUpdateResourcesForPaths(FileWorkArea workArea, boolean removeFilesFromWorkArea) Description copied from interface:BroadleafFileServiceTakes in a temporary work area and copies all of the files to the configured FileProvider's permanent storage.
Passing in removeFilesFromWorkArea to true allows for more efficient file processing when using a local file system as it performs a move operation instead of a copy.
- Specified by:
addOrUpdateResourcesForPathsin interfaceBroadleafFileService
-
addOrUpdateResources
public void addOrUpdateResources(FileWorkArea workArea, List<File> files, boolean removeFilesFromWorkArea) Description copied from interface:BroadleafFileServiceTakes in a temporary work area and a list of Files and copies them to the configured FileProvider's permanent storage.
Passing in removeFilesFromWorkArea to true allows for more efficient file processing when using a local file system as it performs a move operation instead of a copy.
- Specified by:
addOrUpdateResourcesin interfaceBroadleafFileService
-
addOrUpdateResourcesForPaths
public List<String> addOrUpdateResourcesForPaths(FileWorkArea workArea, List<File> files, boolean removeFilesFromWorkArea) Description copied from interface:BroadleafFileServiceTakes in a temporary work area and a list of Files and copies them to the configured FileProvider's permanent storage.
Passing in removeFilesFromWorkArea to true allows for more efficient file processing when using a local file system as it performs a move operation instead of a copy.
- Specified by:
addOrUpdateResourcesForPathsin interfaceBroadleafFileService- Parameters:
workArea- the work area for the given filesfiles- the files to copy to the provider's permanent storageremoveFilesFromWorkArea- whether or not the given files hsould be removed from the given workArea after they are uploaded
-
removeLocalCacheFiles
-
selectFileServiceProvider
Returns the FileServiceProvider that can handle the passed in application type.By default, this method returns the component configured at blFileServiceProvider
- Returns:
-
checkFiles
-
getBaseDirectory
Returns the baseDirectory for writing and reading files as the property assetFileSystemPath if it exists or java.tmp.io if that property has not been set. -
getTempDirectory
Returns a directory that is unique for this work area. -
buildThreadIdString
-
buildFileList
Adds the file to the passed in Collection. If the file is a directory, adds its children recursively. Otherwise, just adds the file to the list.- Parameters:
file-fileList-
-
getTempFileSystemBaseDirectory
-
setTempFileSystemBaseDirectory
-
getFileServiceProviders
-
setFileServiceProviders
-
getMaxGeneratedDirectoryDepth
public int getMaxGeneratedDirectoryDepth() -
setMaxGeneratedDirectoryDepth
public void setMaxGeneratedDirectoryDepth(int maxGeneratedDirectoryDepth) -
getDefaultFileServiceProvider
-
setDefaultFileServiceProvider
-