Class JCRLocalGoogleDrive
java.lang.Object
org.exoplatform.services.cms.clouddrives.CloudDrive
org.exoplatform.services.cms.clouddrives.jcr.JCRLocalCloudDrive
org.exoplatform.services.cms.clouddrives.gdrive.JCRLocalGoogleDrive
- All Implemented Interfaces:
org.exoplatform.services.cms.clouddrives.CloudDriveSecurity,org.exoplatform.services.cms.clouddrives.CloudDriveStorage,org.exoplatform.services.cms.clouddrives.oauth2.UserTokenRefreshListener
public class JCRLocalGoogleDrive
extends org.exoplatform.services.cms.clouddrives.jcr.JCRLocalCloudDrive
implements org.exoplatform.services.cms.clouddrives.oauth2.UserTokenRefreshListener
JCR local storage for Google Drive. Created by The eXo Platform SAS.
- Version:
- $Id: JCRLocalGoogleDrive.java 00000 Sep 13, 2012 pnedonosko $
- Author:
- Peter Nedonosko
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprotected classConnect algorithm for Google Drive.protected classThe Class FileAPI.protected classSync algorithm for Google Drive.Nested classes/interfaces inherited from class org.exoplatform.services.cms.clouddrives.jcr.JCRLocalCloudDrive
org.exoplatform.services.cms.clouddrives.jcr.JCRLocalCloudDrive.AbstractCommand, org.exoplatform.services.cms.clouddrives.jcr.JCRLocalCloudDrive.AbstractFileAPI, org.exoplatform.services.cms.clouddrives.jcr.JCRLocalCloudDrive.CommandCallable, org.exoplatform.services.cms.clouddrives.jcr.JCRLocalCloudDrive.ConnectCommand, org.exoplatform.services.cms.clouddrives.jcr.JCRLocalCloudDrive.DriveState, org.exoplatform.services.cms.clouddrives.jcr.JCRLocalCloudDrive.ExoJCREnvironment, org.exoplatform.services.cms.clouddrives.jcr.JCRLocalCloudDrive.ExoJCRSettings, org.exoplatform.services.cms.clouddrives.jcr.JCRLocalCloudDrive.FileChange, org.exoplatform.services.cms.clouddrives.jcr.JCRLocalCloudDrive.JCRListener, org.exoplatform.services.cms.clouddrives.jcr.JCRLocalCloudDrive.NoConnectCommand, org.exoplatform.services.cms.clouddrives.jcr.JCRLocalCloudDrive.NoSyncCommand, org.exoplatform.services.cms.clouddrives.jcr.JCRLocalCloudDrive.SyncCommand, org.exoplatform.services.cms.clouddrives.jcr.JCRLocalCloudDrive.SyncFilesCommandNested classes/interfaces inherited from class org.exoplatform.services.cms.clouddrives.CloudDrive
org.exoplatform.services.cms.clouddrives.CloudDrive.Command, org.exoplatform.services.cms.clouddrives.CloudDrive.CommandProgress, org.exoplatform.services.cms.clouddrives.CloudDrive.FilesState, org.exoplatform.services.cms.clouddrives.CloudDrive.ListenerSupportNested classes/interfaces inherited from interface org.exoplatform.services.cms.clouddrives.CloudDriveStorage
org.exoplatform.services.cms.clouddrives.CloudDriveStorage.Change<R extends Object> -
Field Summary
Fields inherited from class org.exoplatform.services.cms.clouddrives.jcr.JCRLocalCloudDrive
accentsConverter, actionDrive, ALREADY_DONE, COMMAND_CHANGES_CHUNK, commandEnv, CURRENT_LOCALFORMAT, currentChangeId, currentConnect, currentSync, delayedSyncFiles, driveCommands, DUMMY_DATA, ECD_CLOUDDRIVE, ECD_CLOUDFILE, ECD_CLOUDFILERESOURCE, ECD_CLOUDFOLDER, ECD_IGNORED, ECD_LOCALFORMAT, EXO_DATETIME, EXO_MODIFY, EXO_THUMBNAIL, EXO_THUMBNAILS, EXO_TRASHFOLDER, fileAPI, fileChanges, fileChangeSequencer, fileCopies, fileHistory, fileRemovals, fileSynchronizers, fileTrash, finder, HISTORY_EXPIRATION, HISTORY_MAX_LENGTH, jcrListener, mimeTypes, MIX_REFERENCEABLE, MIX_VERSIONABLE, noConnect, noSync, NT_FILE, NT_FOLDER, NT_RESOURCE, NT_UNSTRUCTURED, repository, rootNodeHolder, rootSystemNodeHolder, rootUUID, rootWorkspace, sessionProviders, state, syncFilesMessages, syncLock, updating, user, USER_NODEPATH, USER_SESSIONPROVIDER, USER_WORKSPACE, workerExecutorFields inherited from class org.exoplatform.services.cms.clouddrives.CloudDrive
listeners, LOG -
Constructor Summary
ConstructorsModifierConstructorDescriptionprotectedJCRLocalGoogleDrive(org.exoplatform.services.cms.clouddrives.gdrive.GoogleDriveConnector.API apiBuilder, GoogleProvider provider, javax.jcr.Node driveNode, org.exoplatform.services.jcr.ext.app.SessionProviderService sessionProviders, org.exoplatform.services.cms.clouddrives.jcr.NodeFinder finder, org.exoplatform.services.cms.clouddrives.utils.ExtendedMimeTypeResolver mimeTypes) Create drive by loading it from local JCR node.protectedJCRLocalGoogleDrive(GoogleUser user, javax.jcr.Node driveNode, org.exoplatform.services.jcr.ext.app.SessionProviderService sessionProviders, org.exoplatform.services.cms.clouddrives.jcr.NodeFinder finder, org.exoplatform.services.cms.clouddrives.utils.ExtendedMimeTypeResolver mimeTypes) Create newly connecting drive. -
Method Summary
Modifier and TypeMethodDescriptionprotected booleancheckAccessScope(org.exoplatform.services.cms.clouddrives.CloudDriveAccessException cause) ThrowRefreshAccessExceptionif currently coded scope doesn't match the one used by the drive access tokens.protected org.exoplatform.services.cms.clouddrives.CloudFileAPIprotected Stringprotected longfileSize(com.google.api.services.drive.model.File gf) Google Drive manages consumed size differently for uploaded (stored in content) and native documents.protected org.exoplatform.services.cms.clouddrives.jcr.JCRLocalCloudDrive.ConnectCommandprotected org.exoplatform.services.cms.clouddrives.jcr.JCRLocalCloudDrive.SyncCommandgetUser()protected voidinitDrive(javax.jcr.Node driveNode) protected booleanCheck if currently coded scope match the one used by the drive access tokens.protected booleanisEditableType(String mimeType) Checks if is editable type of file type.protected static GoogleUserloadUser(org.exoplatform.services.cms.clouddrives.gdrive.GoogleDriveConnector.API apiBuilder, GoogleProvider provider, javax.jcr.Node driveNode) Load user from the drive Node.protected List<com.google.api.services.drive.model.ParentReference>mergeParents(String parentId, List<com.google.api.services.drive.model.ParentReference> cloudParents, Collection<String> localParentIds) Merge file's local and cloud parents (local changes has precedence).voidonUserTokenRefresh(org.exoplatform.services.cms.clouddrives.oauth2.UserToken token) voidprotected Longprotected voidprotected voidsaveChangeId(Long id) protected voidupdateAccess(org.exoplatform.services.cms.clouddrives.CloudUser newUser) Methods inherited from class org.exoplatform.services.cms.clouddrives.jcr.JCRLocalCloudDrive
addJCRListener, addUpdating, await, checkNotTrashed, cleanName, cleanRemoved, cleanup, cleanUpdated, commitChanges, configure, connect, copyFile, create, currentUserName, disconnect, ensureSame, fileNode, findNode, findNodes, fixNameConflict, getChangeId, getConnectDate, getCurentCommand, getFile, getFileContent, getFilePreview, getId, getInitDate, getLink, getLocalUser, getOrCleanFileNode, getPath, getState, getTitle, getWorkspace, hasChange, hasFile, hasRemoved, hasUpdated, ignore, initCommon, initCopy, initFile, initFolder, initRemove, initUpdating, isConnected, isDrive, isDrive, isIgnored, isInDrive, isInTrash, isLocal, isNew, isNewOrUpdating, isPrivilegedUser, isSameDrive, isSharingSupported, isUpdating, link, listFiles, listFiles, loadHistory, localChange, migrateName, moveFile, nextChangeId, nodeName, openFile, openFolder, parentPath, previewLink, readFile, readNode, readNodes, removeJCRListener, removeLinks, removeLinks, removeNode, removeUpdating, rollback, rollbackAllChanges, rootNode, rootNode, saveChanges, savedChanges, session, setChangeId, shareFile, size, synchronize, systemSession, thumbnailLink, title, unignore, unshareFileMethods inherited from class org.exoplatform.services.cms.clouddrives.CloudDrive
addListener, initCreated, removeListener, toString
-
Constructor Details
-
JCRLocalGoogleDrive
protected JCRLocalGoogleDrive(GoogleUser user, javax.jcr.Node driveNode, org.exoplatform.services.jcr.ext.app.SessionProviderService sessionProviders, org.exoplatform.services.cms.clouddrives.jcr.NodeFinder finder, org.exoplatform.services.cms.clouddrives.utils.ExtendedMimeTypeResolver mimeTypes) throws org.exoplatform.services.cms.clouddrives.CloudDriveException, javax.jcr.RepositoryException Create newly connecting drive.- Parameters:
user- the userdriveNode- the drive nodesessionProviders- the session providersfinder- the findermimeTypes- the mime types- Throws:
org.exoplatform.services.cms.clouddrives.CloudDriveException- the cloud drive exceptionjavax.jcr.RepositoryException- the repository exception
-
JCRLocalGoogleDrive
protected JCRLocalGoogleDrive(org.exoplatform.services.cms.clouddrives.gdrive.GoogleDriveConnector.API apiBuilder, GoogleProvider provider, javax.jcr.Node driveNode, org.exoplatform.services.jcr.ext.app.SessionProviderService sessionProviders, org.exoplatform.services.cms.clouddrives.jcr.NodeFinder finder, org.exoplatform.services.cms.clouddrives.utils.ExtendedMimeTypeResolver mimeTypes) throws javax.jcr.RepositoryException, GoogleDriveException, org.exoplatform.services.cms.clouddrives.CloudDriveException Create drive by loading it from local JCR node.- Parameters:
apiBuilder-GoogleDriveConnector.APIAPI builderprovider-GoogleProviderdriveNode-Noderoot of the drivesessionProviders- the session providersfinder- the findermimeTypes- the mime types- Throws:
javax.jcr.RepositoryException- if local storage errorGoogleDriveException- if error communicating with Google Drive servicesorg.exoplatform.services.cms.clouddrives.CloudDriveException- if cannot load tokens stored locally
-
-
Method Details
-
loadUser
protected static GoogleUser loadUser(org.exoplatform.services.cms.clouddrives.gdrive.GoogleDriveConnector.API apiBuilder, GoogleProvider provider, javax.jcr.Node driveNode) throws javax.jcr.RepositoryException, GoogleDriveException, org.exoplatform.services.cms.clouddrives.CloudDriveException Load user from the drive Node.- Parameters:
apiBuilder-GoogleDriveConnector.APIAPI builderprovider-GoogleProviderdriveNode-Noderoot of the drive- Returns:
GoogleUser- Throws:
javax.jcr.RepositoryException- the repository exceptionGoogleDriveException- the google drive exceptionorg.exoplatform.services.cms.clouddrives.CloudDriveException- the cloud drive exception
-
getUser
- Specified by:
getUserin classorg.exoplatform.services.cms.clouddrives.CloudDrive
-
onUserTokenRefresh
public void onUserTokenRefresh(org.exoplatform.services.cms.clouddrives.oauth2.UserToken token) throws org.exoplatform.services.cms.clouddrives.CloudDriveException - Specified by:
onUserTokenRefreshin interfaceorg.exoplatform.services.cms.clouddrives.oauth2.UserTokenRefreshListener- Throws:
org.exoplatform.services.cms.clouddrives.CloudDriveException
-
onUserTokenRemove
public void onUserTokenRemove() throws org.exoplatform.services.cms.clouddrives.CloudDriveException- Specified by:
onUserTokenRemovein interfaceorg.exoplatform.services.cms.clouddrives.oauth2.UserTokenRefreshListener- Throws:
org.exoplatform.services.cms.clouddrives.CloudDriveException
-
refreshAccess
protected void refreshAccess() throws GoogleDriveException, org.exoplatform.services.cms.clouddrives.RefreshAccessException- Specified by:
refreshAccessin classorg.exoplatform.services.cms.clouddrives.CloudDrive- Throws:
GoogleDriveExceptionorg.exoplatform.services.cms.clouddrives.RefreshAccessException
-
updateAccess
protected void updateAccess(org.exoplatform.services.cms.clouddrives.CloudUser newUser) throws org.exoplatform.services.cms.clouddrives.CloudDriveException, javax.jcr.RepositoryException - Specified by:
updateAccessin classorg.exoplatform.services.cms.clouddrives.CloudDrive- Throws:
org.exoplatform.services.cms.clouddrives.CloudDriveExceptionjavax.jcr.RepositoryException
-
isAccessScopeMatch
protected boolean isAccessScopeMatch() throws javax.jcr.RepositoryException, org.exoplatform.services.cms.clouddrives.DriveRemovedExceptionCheck if currently coded scope match the one used by the drive access tokens.- Returns:
- true, if is access scope match
- Throws:
javax.jcr.RepositoryException- the repository exceptionorg.exoplatform.services.cms.clouddrives.DriveRemovedException- the drive removed exception
-
checkAccessScope
protected boolean checkAccessScope(org.exoplatform.services.cms.clouddrives.CloudDriveAccessException cause) throws javax.jcr.RepositoryException, org.exoplatform.services.cms.clouddrives.RefreshAccessException, org.exoplatform.services.cms.clouddrives.DriveRemovedException ThrowRefreshAccessExceptionif currently coded scope doesn't match the one used by the drive access tokens.- Parameters:
cause-CloudDriveAccessException- Returns:
falseif access coded and currently used access scopes match, otherwiseRefreshAccessExceptionwill be thrown with given causeCloudDriveAccessException- Throws:
javax.jcr.RepositoryException- the repository exceptionorg.exoplatform.services.cms.clouddrives.RefreshAccessException- the refresh access exceptionorg.exoplatform.services.cms.clouddrives.DriveRemovedException- the drive removed exception
-
readChangeId
protected Long readChangeId() throws javax.jcr.RepositoryException, org.exoplatform.services.cms.clouddrives.CloudDriveException- Specified by:
readChangeIdin classorg.exoplatform.services.cms.clouddrives.jcr.JCRLocalCloudDrive- Throws:
javax.jcr.RepositoryExceptionorg.exoplatform.services.cms.clouddrives.CloudDriveException
-
saveChangeId
protected void saveChangeId(Long id) throws org.exoplatform.services.cms.clouddrives.CloudDriveException, javax.jcr.RepositoryException - Specified by:
saveChangeIdin classorg.exoplatform.services.cms.clouddrives.jcr.JCRLocalCloudDrive- Throws:
org.exoplatform.services.cms.clouddrives.CloudDriveExceptionjavax.jcr.RepositoryException
-
initDrive
protected void initDrive(javax.jcr.Node driveNode) throws org.exoplatform.services.cms.clouddrives.CloudDriveException, javax.jcr.RepositoryException - Overrides:
initDrivein classorg.exoplatform.services.cms.clouddrives.jcr.JCRLocalCloudDrive- Throws:
org.exoplatform.services.cms.clouddrives.CloudDriveExceptionjavax.jcr.RepositoryException
-
getConnectCommand
protected org.exoplatform.services.cms.clouddrives.jcr.JCRLocalCloudDrive.ConnectCommand getConnectCommand() throws org.exoplatform.services.cms.clouddrives.DriveRemovedException, javax.jcr.RepositoryException- Specified by:
getConnectCommandin classorg.exoplatform.services.cms.clouddrives.jcr.JCRLocalCloudDrive- Throws:
org.exoplatform.services.cms.clouddrives.DriveRemovedExceptionjavax.jcr.RepositoryException
-
getSyncCommand
protected org.exoplatform.services.cms.clouddrives.jcr.JCRLocalCloudDrive.SyncCommand getSyncCommand() throws org.exoplatform.services.cms.clouddrives.DriveRemovedException, org.exoplatform.services.cms.clouddrives.SyncNotSupportedException, javax.jcr.RepositoryException- Specified by:
getSyncCommandin classorg.exoplatform.services.cms.clouddrives.jcr.JCRLocalCloudDrive- Throws:
org.exoplatform.services.cms.clouddrives.DriveRemovedExceptionorg.exoplatform.services.cms.clouddrives.SyncNotSupportedExceptionjavax.jcr.RepositoryException
-
createFileAPI
protected org.exoplatform.services.cms.clouddrives.CloudFileAPI createFileAPI() throws org.exoplatform.services.cms.clouddrives.DriveRemovedException, org.exoplatform.services.cms.clouddrives.SyncNotSupportedException, javax.jcr.RepositoryException- Specified by:
createFileAPIin classorg.exoplatform.services.cms.clouddrives.jcr.JCRLocalCloudDrive- Throws:
org.exoplatform.services.cms.clouddrives.DriveRemovedExceptionorg.exoplatform.services.cms.clouddrives.SyncNotSupportedExceptionjavax.jcr.RepositoryException
-
mergeParents
protected List<com.google.api.services.drive.model.ParentReference> mergeParents(String parentId, List<com.google.api.services.drive.model.ParentReference> cloudParents, Collection<String> localParentIds) Merge file's local and cloud parents (local changes has precedence). -
editLink
protected String editLink(String fileLink, String type, javax.jcr.Node fileNode) throws javax.jcr.RepositoryException - Overrides:
editLinkin classorg.exoplatform.services.cms.clouddrives.jcr.JCRLocalCloudDrive- Throws:
javax.jcr.RepositoryException
-
fileSize
protected long fileSize(com.google.api.services.drive.model.File gf) Google Drive manages consumed size differently for uploaded (stored in content) and native documents. File stored in content has a size, but native document has usage of quota only.- Parameters:
gf-File- Returns:
- file size or consumed quota if the size not available
-
isEditableType
Checks if is editable type of file type.- Parameters:
mimeType- the mime type- Returns:
- true, if is editable type
-