org.alfresco.repo.content
Class AbstractContentStore

java.lang.Object
  extended by org.alfresco.repo.content.AbstractContentStore
All Implemented Interfaces:
ContentStore
Direct Known Subclasses:
FileContentStore, HttpAlfrescoStore, ReplicatingContentStore

public abstract class AbstractContentStore
extends java.lang.Object
implements ContentStore

Base class providing support for different types of content stores.

Since content URLs have to be consistent across all stores for reasons of replication and backup, the most important functionality provided is the generation of new content URLs and the checking of existing URLs.

Implementations must override either of the getWriter methods; AbstractContentStore.getWriter(ContentContext) or AbstractContentStore.getWriterInternal(ContentReader, String).

See Also:
AbstractContentStore.getWriter(ContentReader, String), AbstractContentStore.getWriterInternal(ContentReader, String)

Nested Class Summary
 
Nested classes/interfaces inherited from interface org.alfresco.repo.content.ContentStore
ContentStore.ContentUrlHandler
 
Field Summary
 
Fields inherited from interface org.alfresco.repo.content.ContentStore
NEW_CONTENT_CONTEXT, PROTOCOL_DELIMITER
 
Constructor Summary
AbstractContentStore()
           
 
Method Summary
 boolean delete(java.lang.String contentUrl)
          Override if the derived class supports the operation.
 boolean exists(java.lang.String contentUrl)
          Simple implementation that uses the reader's exists method as its implementation.
protected  org.alfresco.util.Pair getContentUrlParts(java.lang.String contentUrl)
          Splits the content URL into its component parts as separated by protocol delimiter.
 java.lang.String getRootLocation()
          Get the location where the store is rooted.
 long getSpaceFree()
          Calcualates the remaing free space in the underlying store.
 long getSpaceTotal()
          Calculates the total storage space of the underlying store.
 long getSpaceUsed()
          Calculates the total size of stored content, excluding any other data in the underlying storage.
 long getTotalSize()
          Uses AbstractContentStore.getSpaceUsed(), which is the equivalent method.
 void getUrls(ContentStore.ContentUrlHandler handler)
          Get all URLs for the store, regardless of creation time.
 void getUrls(java.util.Date createdAfter, java.util.Date createdBefore, ContentStore.ContentUrlHandler handler)
          Override to provide an implementation.
 org.alfresco.service.cmr.repository.ContentWriter getWriter(ContentContext context)
          An implementation that does some sanity checking before requesting a writer from the store.
 org.alfresco.service.cmr.repository.ContentWriter getWriter(org.alfresco.service.cmr.repository.ContentReader existingContentReader, java.lang.String newContentUrl)
          Shortcut method to ContentStore.getWriter(ContentContext).
protected  org.alfresco.service.cmr.repository.ContentWriter getWriterInternal(org.alfresco.service.cmr.repository.ContentReader existingContentReader, java.lang.String newContentUrl)
          Implement to supply a store-specific writer for the given existing content and optional target content URL.
 boolean isContentUrlSupported(java.lang.String contentUrl)
          Override this method to supply a efficient and direct check of the URL supplied.
static boolean isValidContentUrl(java.lang.String contentUrl)
          Checks that the content conforms to the format protocol://identifier as specified in the contract of the ContentStore interface.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface org.alfresco.repo.content.ContentStore
getReader, isWriteSupported
 

Constructor Detail

AbstractContentStore

public AbstractContentStore()
Method Detail

isValidContentUrl

public static final boolean isValidContentUrl(java.lang.String contentUrl)
Checks that the content conforms to the format protocol://identifier as specified in the contract of the ContentStore interface.

Parameters:
contentUrl - the content URL to check
Returns:
Returns true if the content URL is valid
Since:
2.1

getContentUrlParts

protected org.alfresco.util.Pair getContentUrlParts(java.lang.String contentUrl)
Splits the content URL into its component parts as separated by protocol delimiter.

Parameters:
contentUrl - the content URL to split
Returns:
Returns the protocol and identifier portions of the content URL, both of which will not be null
Throws:
UnsupportedContentUrlException - if the content URL is invalid
Since:
2.1

isContentUrlSupported

public boolean isContentUrlSupported(java.lang.String contentUrl)
Override this method to supply a efficient and direct check of the URL supplied. The default implementation checks whether ContentStore.getReader(String) throws the UnsupportedContentUrlException exception.

Specified by:
isContentUrlSupported in interface ContentStore
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

delete

public boolean delete(java.lang.String contentUrl)
Override if the derived class supports the operation.

Specified by:
delete in interface ContentStore
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:
java.lang.UnsupportedOperationException - always
Since:
2.1

getUrls

public final void getUrls(ContentStore.ContentUrlHandler handler)
                   throws org.alfresco.service.cmr.repository.ContentIOException
Description copied from interface: ContentStore
Get all URLs for the store, regardless of creation time.

Specified by:
getUrls in interface ContentStore
Throws:
org.alfresco.service.cmr.repository.ContentIOException - if an IO error occurs
See Also:
ContentStore.getUrls(Date, Date, ContentUrlHandler)

getUrls

public void getUrls(java.util.Date createdAfter,
                    java.util.Date createdBefore,
                    ContentStore.ContentUrlHandler handler)
             throws org.alfresco.service.cmr.repository.ContentIOException
Override to provide an implementation. If no implementation is supplied, then the store will not support cleaning of orphaned content binaries.

Specified by:
getUrls in interface ContentStore
Parameters:
createdAfter - all URLs returned must have been created after this date. May be null.
createdBefore - all URLs returned must have been created before this date. May be null.
handler - the callback that will passed each URL
Throws:
java.lang.UnsupportedOperationException - always
org.alfresco.service.cmr.repository.ContentIOException - if an error occurs

getWriterInternal

protected org.alfresco.service.cmr.repository.ContentWriter getWriterInternal(org.alfresco.service.cmr.repository.ContentReader existingContentReader,
                                                                              java.lang.String newContentUrl)
Implement to supply a store-specific writer for the given existing content and optional target content URL.

Parameters:
existingContentReader - a reader onto any content to initialize the new writer with
newContentUrl - an optional target for the new content
Throws:
UnsupportedContentUrlException - if the content URL supplied is not supported by the store
ContentExistsException - if the content URL is already in use
org.alfresco.service.cmr.repository.ContentIOException - if an IO error occurs
Since:
2.1

getWriter

public org.alfresco.service.cmr.repository.ContentWriter getWriter(ContentContext context)
An implementation that does some sanity checking before requesting a writer from the store. If this method is not overridden, then an implementation of AbstractContentStore.getWriterInternal(ContentReader, String) must be supplied.

Specified by:
getWriter in interface ContentStore
Parameters:
context - the context of content.
Returns:
Returns a write-only content accessor
Since:
2.1
See Also:
AbstractContentStore.getWriterInternal(ContentReader, String)

getWriter

public final org.alfresco.service.cmr.repository.ContentWriter getWriter(org.alfresco.service.cmr.repository.ContentReader existingContentReader,
                                                                         java.lang.String newContentUrl)
Description copied from interface: ContentStore
Shortcut method to ContentStore.getWriter(ContentContext).

Specified by:
getWriter in interface ContentStore
See Also:
ContentContext, ContentStore.getWriter(ContentContext)

exists

public boolean exists(java.lang.String contentUrl)
Simple implementation that uses the reader's exists method as its implementation. Override this method if a more efficient implementation is possible.

Specified by:
exists in interface ContentStore
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.
See Also:
ContentReader.exists()

getTotalSize

public final long getTotalSize()
Uses AbstractContentStore.getSpaceUsed(), which is the equivalent method. This method is now final in order to catch any implementations that should switch over to AbstractContentStore.getSpaceUsed().

Specified by:
getTotalSize in interface ContentStore
See Also:
ContentStore.getSpaceFree(), ContentStore.getSpaceTotal()

getSpaceUsed

public long getSpaceUsed()
Description copied from interface: ContentStore
Calculates the total size of stored content, excluding any other data in the underlying storage.

NOTE: Calculating this value can be time-consuming - use sparingly.

NOTE: For efficiency, some implementations may provide a guess. If not, this call could take a long time.

Specified by:
getSpaceUsed in interface ContentStore
Returns:
Returns -1 always

getSpaceFree

public long getSpaceFree()
Description copied from interface: ContentStore
Calcualates the remaing 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.

Specified by:
getSpaceFree in interface ContentStore
Returns:
Returns Long.MAX_VALUE always

getSpaceTotal

public long getSpaceTotal()
Description copied from interface: ContentStore
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.

Specified by:
getSpaceTotal in interface ContentStore
Returns:
Returns Long.MAX_VALUE always

getRootLocation

public java.lang.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.

Specified by:
getRootLocation in interface ContentStore
Returns:
Returns the store's root location or . if no information is available


Copyright © 2005 - 2010 Alfresco Software, Inc. All Rights Reserved.