Interface ContentStore
-
@AlfrescoPublicApi public interface ContentStore
Provides low-level retrieval of contentreaders
andwriters
.Implementations of this interface should be soley responsible for providing persistence and retrieval of the content against a
content URL
.Content URLs must consist of a prefix or protocol followed by an implementation-specific identifier. See
TimeBasedFileContentUrlProvider
andVolumeAwareContentUrlProvider
implementations ofFileContentUrlProvider
For example, default content URL format for file stores is store://year/month/day/hour/minute/GUID.bin
- store://: prefix identifying an Alfresco content stores regardless of the persistence mechanism.
- year: year
- month: 1-based month of the year
- day: 1-based day of the month
- hour: 0-based hour of the day
- minute: 0-based minute of the hour
- GUID: A unique identifier
Where the store cannot handle a particular content URL request, the
UnsupportedContentUrlException
must be generated. This will allow various implementations to provide fallback code to other stores where possible.Where a store cannot serve a particular request because the functionality is just not available, the
UnsupportedOperationException
should be thrown. Once again, there may be fallback handling provided for these situations.- Since:
- 1.0
- Author:
- Derek Hulley
-
-
Field Summary
Fields Modifier and Type Field Description static ContentContext
NEW_CONTENT_CONTEXT
An empty content context used to retrieve completely new content.static String
PROTOCOL_DELIMITER
The delimiter that must be found in all URLS, i.e ://
-
Method Summary
All Methods Instance Methods Abstract Methods Default Methods Deprecated Methods Modifier and Type Method Description boolean
delete(String contentUrl)
Deletes the content at the given URL.boolean
exists(String contentUrl)
Check for the existence of content in the store.ContentReader
getReader(String contentUrl)
Get the accessor with which to read from the content at the given URL.String
getRootLocation()
Get the location where the store is rooted.long
getSpaceFree()
Calculates the remaning free space in the underlying store.long
getSpaceTotal()
Calculates the total storage space of the underlying store.ContentWriter
getWriter(ContentContext context)
Get an accessor with which to write content to a location within the store.default boolean
isContentDirectUrlEnabled()
Checks if the store supports the retrieving of direct access URLs.default boolean
isContentDirectUrlEnabled(String contentUrl)
Checks if the store supports the retrieving of a direct access URL for the given node.boolean
isContentUrlSupported(String contentUrl)
Check if the content URL format is supported by the store.boolean
isWriteSupported()
Check if the store supports write requests.default DirectAccessUrl
requestContentDirectUrl(String contentUrl, boolean attachment, String fileName)
Deprecated.default DirectAccessUrl
requestContentDirectUrl(String contentUrl, boolean attachment, String fileName, Long validFor)
Deprecated.default DirectAccessUrl
requestContentDirectUrl(String contentUrl, boolean attachment, String fileName, String mimetype)
Gets a presigned URL to directly access the content.default DirectAccessUrl
requestContentDirectUrl(String contentUrl, boolean attachment, String fileName, String mimetype, Long validFor)
Gets a presigned URL to directly access the content.
-
-
-
Field Detail
-
NEW_CONTENT_CONTEXT
static final ContentContext NEW_CONTENT_CONTEXT
An empty content context used to retrieve completely new content.- See Also:
getWriter(ContentContext)
-
PROTOCOL_DELIMITER
static final String PROTOCOL_DELIMITER
The delimiter that must be found in all URLS, i.e ://- See Also:
- Constant Field Values
-
-
Method Detail
-
isContentUrlSupported
boolean isContentUrlSupported(String contentUrl)
Check if the content URL format is supported by the store.- Parameters:
contentUrl
- the content URL to check- Returns:
- Returns true if none of the other methods on the store
will throw an
UnsupportedContentUrlException
when given this URL. - Since:
- 2.1
-
isWriteSupported
boolean isWriteSupported()
Check if the store supports write requests.- Returns:
- Return true is the store supports write operations
- Since:
- 2.1
-
getSpaceFree
long getSpaceFree()
Calculates the remaning free space in the underlying store.NOTE: For efficiency, some implementations may provide a guess.
Implementations should focus on calculating a size value quickly, rather than accurately.
- Returns:
- Returns the total, possibly approximate, free space (in bytes) available to the store or -1 if no size data is available.
- Since:
- 3.3.3
-
getSpaceTotal
long getSpaceTotal()
Calculates the total storage space of the underlying store.NOTE: For efficiency, some implementations may provide a guess.
Implementations should focus on calculating a size value quickly, rather than accurately.
- Returns:
- Returns the total, possibly approximate, size (in bytes) of the underlying store or -1 if no size data is available.
- Since:
- 3.3.3
-
getRootLocation
String getRootLocation()
Get the location where the store is rooted. The format of the returned value will depend on the specific implementation of the store.- Returns:
- Returns the store's root location or . if no information is available
-
exists
boolean exists(String contentUrl)
Check for the existence of content in the store.The implementation of this may be more efficient than first getting a reader to
check for existence
, although that check should also be performed.- Parameters:
contentUrl
- the path to the content- Returns:
- Returns true if the content exists, otherwise false if the content doesn't exist or if the URL is not applicable to this store.
- Throws:
org.alfresco.repo.content.UnsupportedContentUrlException
- if the content URL supplied is not supported by the storeContentIOException
- if an IO error occurs- See Also:
ContentReader.exists()
-
getReader
ContentReader getReader(String contentUrl)
Get the accessor with which to read from the content at the given URL. The reader is stateful and can only be used once.- Parameters:
contentUrl
- the path to where the content is located- Returns:
- Returns a read-only content accessor for the given URL. There may be no content at the given URL, but the reader must still be returned.
- Throws:
org.alfresco.repo.content.UnsupportedContentUrlException
- if the content URL supplied is not supported by the storeContentIOException
- if an IO error occurs- See Also:
exists(String)
,ContentReader.exists()
,org.alfresco.repo.content.EmptyContentReader
-
getWriter
ContentWriter getWriter(ContentContext context)
Get an accessor with which to write content to a location within the store. The writer is stateful and can only be used once. The location may be specified but must, in that case, be a valid and unused URL.The store will ensure that the
new content URL
will be valid for all subsequent read attempts.By supplying a reader to existing content, the store implementation may enable random access. The store implementation can enable this by copying the existing content into the new location before supplying a writer onto the new content.
- Parameters:
context
- the context of content.- Returns:
- Returns a write-only content accessor
- Throws:
UnsupportedOperationException
- if the store is unable to provide the informationUnsupportedContentUrlException
- if the content URL supplied is not supported by the storeContentExistsException
- if the content URL is already in useContentIOException
- if an IO error occurs- See Also:
ContentAccessor.addListener(ContentStreamListener)
,ContentAccessor.getContentUrl()
-
delete
boolean delete(String contentUrl)
Deletes the content at the given URL.A delete cannot be forced since it is much better to have the file remain longer than desired rather than deleted prematurely.
- Parameters:
contentUrl
- the URL of the content to delete- Returns:
- Returns true if the content was deleted (either by this or another operation), otherwise false. If the content no longer exists, then true is returned.
- Throws:
UnsupportedOperationException
- if the store is unable to perform the actionUnsupportedContentUrlException
- if the content URL supplied is not supported by the storeContentIOException
- if an error occurs if an IO error occurs
-
isContentDirectUrlEnabled
default boolean isContentDirectUrlEnabled()
Checks if the store supports the retrieving of direct access URLs.- Returns:
true
if direct access URLs retrieving is supported,false
otherwise
-
isContentDirectUrlEnabled
default boolean isContentDirectUrlEnabled(String contentUrl)
Checks if the store supports the retrieving of a direct access URL for the given node.- Parameters:
contentUrl
- theURL
of the content for which to request a direct accessURL
- Returns:
true
if direct access URLs retrieving is supported for the node,false
otherwise
-
requestContentDirectUrl
@Deprecated default DirectAccessUrl requestContentDirectUrl(String contentUrl, boolean attachment, String fileName)
Deprecated.Gets a presigned URL to directly access the content. It is up to the actual store implementation if it can fulfil this request with an expiry time or not.- Parameters:
contentUrl
- A content storeURL
attachment
-true
if an attachment URL is requested,false
for an embeddedURL
.fileName
- File name of the content- Returns:
- A direct access
URL
object for the content - Throws:
UnsupportedOperationException
- if the store is unable to provide the information
-
requestContentDirectUrl
default DirectAccessUrl requestContentDirectUrl(String contentUrl, boolean attachment, String fileName, String mimetype)
Gets a presigned URL to directly access the content. It is up to the actual store implementation if it can fulfil this request with an expiry time or not.- Parameters:
contentUrl
- A content storeURL
attachment
-true
if an attachment URL is requested,false
for an embeddedURL
.fileName
- File name of the content- Returns:
- A direct access
URL
object for the content - Throws:
UnsupportedOperationException
- if the store is unable to provide the information
-
requestContentDirectUrl
@Deprecated default DirectAccessUrl requestContentDirectUrl(String contentUrl, boolean attachment, String fileName, Long validFor)
Deprecated.Gets a presigned URL to directly access the content. It is up to the actual store implementation if it can fulfil this request with an expiry time or not.- Parameters:
contentUrl
- A content storeURL
attachment
-true
if an attachment URL is requested,false
for an embeddedURL
.fileName
- File name of the contentvalidFor
- The time at which the direct accessURL
will expire.- Returns:
- A direct access
URL
object for the content. - Throws:
UnsupportedOperationException
- if the store is unable to provide the information
-
requestContentDirectUrl
default DirectAccessUrl requestContentDirectUrl(String contentUrl, boolean attachment, String fileName, String mimetype, Long validFor)
Gets a presigned URL to directly access the content. It is up to the actual store implementation if it can fulfil this request with an expiry time or not.- Parameters:
contentUrl
- A content storeURL
attachment
-true
if an attachment URL is requested,false
for an embeddedURL
.fileName
- File name of the contentmimetype
- Mimetype of the contentvalidFor
- The time at which the direct accessURL
will expire.- Returns:
- A direct access
URL
object for the content. - Throws:
UnsupportedOperationException
- if the store is unable to provide the information
-
-