Methods requiring specific features of the file storage backend have been extracted from the FileStorageFileAccess interface into dedicated interfaces that can be implemented if applicable.

The following methods were moved from FileStorageFileAccess to FileStorageVersionedFileAccess, and only need to be implemented if versioning is supported:

String[] removeVersion(String folderId, String id, String[] versions) throws OXException;
TimedResult<File> getVersions(String folderId, String id) throws OXException;
TimedResult<File> getVersions(String folderId, String id, List<File.Field> fields) throws OXException;
TimedResult<File> getVersions(String folderId, String id, List<File.Field> fields, File.Field sort, SortDirection order) throws OXException;

The following method was moved from FileStorageFileAccess to FileStorageAndvancedSearchFileAccess, and only needs to be implemented if advanced searching by term is supported:

SearchIterator<File> search(List<String> folderIds, SearchTerm<?> searchTerm, List<Field> fields, File.Field sort, SortDirection order, int start, int end) throws OXException;

The following methods were moved from FileStorageFileAccess to FileStorageLockedFileAccess, and only need to be implemented if versioning is supported:

void unlock(String folderId, String id) throws OXException;
void lock(String folderId, String id, long diff) throws OXException;

Additionally, the marker interface FileStoragePersistentIDs is introduced to signal if the underlying file storage uses persistent folder- and file-IDs, i.e. identifiers don't change during rename operations.