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.UserTokenRefreshListenerJCR 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 Classes Modifier and Type Class Description protected classJCRLocalGoogleDrive.ConnectConnect algorithm for Google Drive.protected classJCRLocalGoogleDrive.FileAPIThe Class FileAPI.protected classJCRLocalGoogleDrive.SyncSync 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.SyncFilesCommand
-
Nested 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.ListenerSupport
-
Nested 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, workerExecutor
-
-
Constructor Summary
Constructors Modifier Constructor Description protectedJCRLocalGoogleDrive(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
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description protected 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.CloudFileAPIcreateFileAPI()protected StringeditLink(String fileLink, String type, javax.jcr.Node fileNode)protected 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.ConnectCommandgetConnectCommand()protected org.exoplatform.services.cms.clouddrives.jcr.JCRLocalCloudDrive.SyncCommandgetSyncCommand()GoogleUsergetUser()protected voidinitDrive(javax.jcr.Node driveNode)protected booleanisAccessScopeMatch()Check 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)voidonUserTokenRemove()protected LongreadChangeId()protected voidrefreshAccess()protected 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, unshareFile
-
-
-
-
Constructor Detail
-
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.CloudDriveExceptionCreate 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 Detail
-
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
public GoogleUser 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.DriveRemovedExceptionThrowRefreshAccessExceptionif 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
protected boolean isEditableType(String mimeType)
Checks if is editable type of file type.- Parameters:
mimeType- the mime type- Returns:
- true, if is editable type
-
-