Class DropboxTargetDao
DropboxApiCommands).
Object model. This DAO uses the "membership objects" model (like the Remedy DAO), not
the group-centric retrieveAllData model TrueFoundry uses. Groups, entities, and
memberships are retrieved through separate calls -- retrieveAllGroups(edu.internet2.middleware.grouper.app.provisioning.targetDao.TargetDaoRetrieveAllGroupsRequest),
retrieveAllEntities(edu.internet2.middleware.grouper.app.provisioning.targetDao.TargetDaoRetrieveAllEntitiesRequest), and retrieveMembershipsByGroup(edu.internet2.middleware.grouper.app.provisioning.targetDao.TargetDaoRetrieveMembershipsByGroupRequest) (with
retrieveAllMemberships(edu.internet2.middleware.grouper.app.provisioning.targetDao.TargetDaoRetrieveAllMembershipsRequest) looping all groups). Memberships are first-class objects whose
matching id is the native group_id + team_member_id pair: a Dropbox membership has
no id of its own. Plumbing/style (logging, timing in finally blocks, per-object
setProvisioned) mirrors TrueFoundryTargetDao.
Identity. The provisioning group id is the native Dropbox group_id (e.g.
"g:abc123"); the provisioning entity id is the native team_member_id (e.g. "dbmid:abc").
Matching against Grouper is configured on the externalId attribute of each. Memberships
therefore reference their group and entity purely by these native ids.
Admin roles. Dropbox admin roles are an optional overlay. The translator
(DropboxProvisioningTranslator) removes admin-role-folder groups from the set of target
groups (so they are never created as Dropbox groups) and instead stamps each entity with an
adminRole attribute (the highest tier the member earns, or DropboxProvisioningTranslator.MEMBER_ONLY). This DAO only ever reads, compares, or writes the
adminRole dimension when DropboxProvisionerConfiguration.isManageAdminRoles() is
true (an admin-role folder is configured). When it is false, the adminRole attribute is
stripped from retrieved entities (so it is not treated as a target attribute) and the admin-role
API is never called. Dropbox has no "list all roles" endpoint, so role NAME -> role_id
resolution goes through DropboxApiCommands.retrieveAdminRoleNameToId(String), whose
catalog is harvested while members are read.
Ignore filtering. Members whose email is in dropboxIgnoreUserEmails and groups
whose name is in dropboxIgnoreGroupNames are filtered out of the retrieve methods (the
same way TrueFoundry filters), so they are never created, updated, or deleted.
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptiondeleteEntity(TargetDaoDeleteEntityRequest targetDaoDeleteEntityRequest) Remove a Dropbox member from the team, honoring the configured wipe-data and keep-account flags.deleteGroup(TargetDaoDeleteGroupRequest targetDaoDeleteGroupRequest) Delete a Dropbox group by nativegroup_id(the underlying command polls for async completion if Dropbox defers the delete).deleteMemberships(TargetDaoDeleteMembershipsRequest targetDaoDeleteMembershipsRequest) Remove memberships, batched by nativegroup_idso each group is hit with a single groups/members/remove call referencing the nativeteam_member_ids.insertEntity(TargetDaoInsertEntityRequest targetDaoInsertEntityRequest) Invite/create a Dropbox team member, then capture the assigned nativeteam_member_idonto the target entity.insertGroup(TargetDaoInsertGroupRequest targetDaoInsertGroupRequest) Create a Dropbox team group, then capture its assigned nativegroup_idback onto the target group so memberships can reference it.insertMemberships(TargetDaoInsertMembershipsRequest targetDaoInsertMembershipsRequest) Add memberships, batched by nativegroup_idso each group is hit with a single groups/members/add call.booleanstart logging the source low level actionsstop logging and get the output only call this if you successfully started the loggingvoidregisterGrouperProvisionerDaoCapabilities(GrouperProvisionerDaoCapabilities grouperProvisionerDaoCapabilities) Declare exactly the operations this DAO implements so the provisioning framework drives the Dropbox target through the supported paths only.retrieveAllEntities(TargetDaoRetrieveAllEntitiesRequest targetDaoRetrieveAllEntitiesRequest) Retrieve every Dropbox team member, filtering out ignored emails.retrieveAllGroups(TargetDaoRetrieveAllGroupsRequest targetDaoRetrieveAllGroupsRequest) Retrieve every Dropbox team group, filtering out ignored group names.retrieveAllMemberships(TargetDaoRetrieveAllMembershipsRequest targetDaoRetrieveAllMembershipsRequest) Retrieve every membership across all (non-ignored) Dropbox groups by listing groups and then listing each group's members.retrieveEntity(TargetDaoRetrieveEntityRequest targetDaoRetrieveEntityRequest) Retrieve a single Dropbox member by search attribute, using the Dropbox get_info_v2 selector union.retrieveGroup(TargetDaoRetrieveGroupRequest targetDaoRetrieveGroupRequest) Retrieve a single Dropbox group by search attribute.retrieveMembershipsByGroup(TargetDaoRetrieveMembershipsByGroupRequest targetDaoRetrieveMembershipsByGroupRequest) Retrieve all memberships of one Dropbox group.updateEntity(TargetDaoUpdateEntityRequest targetDaoUpdateEntityRequest) Update a Dropbox member's profile and (when managed and changed) its admin role.updateGroup(TargetDaoUpdateGroupRequest targetDaoUpdateGroupRequest) Update the changed fields of a Dropbox group (selected by nativegroup_id).Methods inherited from class edu.internet2.middleware.grouper.app.provisioning.targetDao.GrouperProvisionerTargetDaoBase
addTargetDaoTimingInfo, deleteEntities, deleteGroups, deleteMembership, getGrouperProvisioner, getGrouperProvisionerDaoCapabilities, getTargetDaoTimingInfos, insertEntities, insertGroups, insertMembership, replaceGroupMemberships, retrieveAllData, retrieveEntities, retrieveGroups, retrieveIncrementalData, retrieveMembership, retrieveMemberships, retrieveMembershipsByEntities, retrieveMembershipsByEntity, retrieveMembershipsByGroups, retrievePerItemInParallel, sendChangesToTarget, sendEntityChangesToTarget, sendGroupChangesToTarget, sendMembershipChangesToTarget, setGrouperProvisioner, setGrouperProvisionerDaoCapabilities, setTargetDaoTimingInfos, updateEntities, updateGroups, updateMembership, updateMemberships
-
Constructor Details
-
DropboxTargetDao
public DropboxTargetDao()
-
-
Method Details
-
loggingStart
public boolean loggingStart()Description copied from class:GrouperProvisionerTargetDaoBasestart logging the source low level actions- Overrides:
loggingStartin classGrouperProvisionerTargetDaoBase- Returns:
- true if the logging was started (i.e. can be stopped), or false if already started (in which case somewhere up the stack with stop it so dont stop it)
-
loggingStop
Description copied from class:GrouperProvisionerTargetDaoBasestop logging and get the output only call this if you successfully started the logging- Overrides:
loggingStopin classGrouperProvisionerTargetDaoBase
-
retrieveAllGroups
public TargetDaoRetrieveAllGroupsResponse retrieveAllGroups(TargetDaoRetrieveAllGroupsRequest targetDaoRetrieveAllGroupsRequest) Retrieve every Dropbox team group, filtering out ignored group names. The nativegroup_idbecomes the provisioning group id; matching is onexternalId.- Overrides:
retrieveAllGroupsin classGrouperProvisionerTargetDaoBase
-
retrieveGroup
public TargetDaoRetrieveGroupResponse retrieveGroup(TargetDaoRetrieveGroupRequest targetDaoRetrieveGroupRequest) Retrieve a single Dropbox group by search attribute. Dropbox can fetch directly by nativegroup_id(the "id" attribute) via get_info; any other attribute (e.g.externalIdorname) requires listing all groups and matching, mirroring how Remedy/TrueFoundry handle non-native lookups.- Overrides:
retrieveGroupin classGrouperProvisionerTargetDaoBase- Returns:
- the target provisioning group or null if not found
-
retrieveAllEntities
public TargetDaoRetrieveAllEntitiesResponse retrieveAllEntities(TargetDaoRetrieveAllEntitiesRequest targetDaoRetrieveAllEntitiesRequest) Retrieve every Dropbox team member, filtering out ignored emails. As a side effect of the underlying members/list_v2 read, the admin-role catalog (name -> role_id) is harvested intoDropboxApiCommands.- Overrides:
retrieveAllEntitiesin classGrouperProvisionerTargetDaoBase- Returns:
-
retrieveEntity
public TargetDaoRetrieveEntityResponse retrieveEntity(TargetDaoRetrieveEntityRequest targetDaoRetrieveEntityRequest) Retrieve a single Dropbox member by search attribute, using the Dropbox get_info_v2 selector union. The Grouper attribute name is mapped to the matching Dropbox selector tag (externalId -> external_id,email -> email,id -> team_member_id).- Overrides:
retrieveEntityin classGrouperProvisionerTargetDaoBase- Returns:
- the target provisioning Entity or null if not found
-
insertGroup
public TargetDaoInsertGroupResponse insertGroup(TargetDaoInsertGroupRequest targetDaoInsertGroupRequest) Create a Dropbox team group, then capture its assigned nativegroup_idback onto the target group so memberships can reference it.- Overrides:
insertGroupin classGrouperProvisionerTargetDaoBase
-
updateGroup
public TargetDaoUpdateGroupResponse updateGroup(TargetDaoUpdateGroupRequest targetDaoUpdateGroupRequest) Update the changed fields of a Dropbox group (selected by nativegroup_id).- Overrides:
updateGroupin classGrouperProvisionerTargetDaoBase
-
deleteGroup
public TargetDaoDeleteGroupResponse deleteGroup(TargetDaoDeleteGroupRequest targetDaoDeleteGroupRequest) Delete a Dropbox group by nativegroup_id(the underlying command polls for async completion if Dropbox defers the delete).- Overrides:
deleteGroupin classGrouperProvisionerTargetDaoBase
-
insertEntity
public TargetDaoInsertEntityResponse insertEntity(TargetDaoInsertEntityRequest targetDaoInsertEntityRequest) Invite/create a Dropbox team member, then capture the assigned nativeteam_member_idonto the target entity. If admin roles are managed and the entity already carries a resolvedadminRole, the role is applied to the freshly created member as well.- Overrides:
insertEntityin classGrouperProvisionerTargetDaoBase
-
updateEntity
public TargetDaoUpdateEntityResponse updateEntity(TargetDaoUpdateEntityRequest targetDaoUpdateEntityRequest) Update a Dropbox member's profile and (when managed and changed) its admin role.Profile fields (
email,externalId,givenName,surname) that changed are pushed via set_profile_v2. Separately, when admin roles are managed and theadminRoleattribute changed, the role NAME is resolved to a Dropboxrole_idand applied via set_admin_permissions_v2 (member_only/blank means an empty role list, i.e. demote to a regular member).- Overrides:
updateEntityin classGrouperProvisionerTargetDaoBase
-
deleteEntity
public TargetDaoDeleteEntityResponse deleteEntity(TargetDaoDeleteEntityRequest targetDaoDeleteEntityRequest) Remove a Dropbox member from the team, honoring the configured wipe-data and keep-account flags.- Overrides:
deleteEntityin classGrouperProvisionerTargetDaoBase
-
retrieveMembershipsByGroup
public TargetDaoRetrieveMembershipsByGroupResponse retrieveMembershipsByGroup(TargetDaoRetrieveMembershipsByGroupRequest targetDaoRetrieveMembershipsByGroupRequest) Retrieve all memberships of one Dropbox group. The membership's provisioning group id is the nativegroup_id; its provisioning entity id is the nativeteam_member_id;accessType(member/owner) is carried as an attribute.- Overrides:
retrieveMembershipsByGroupin classGrouperProvisionerTargetDaoBase- Returns:
- the memberships
-
retrieveAllMemberships
public TargetDaoRetrieveAllMembershipsResponse retrieveAllMemberships(TargetDaoRetrieveAllMembershipsRequest targetDaoRetrieveAllMembershipsRequest) Retrieve every membership across all (non-ignored) Dropbox groups by listing groups and then listing each group's members. Dropbox has no single "all memberships" endpoint, so this loops the per-group endpoint -- the same dataretrieveMembershipsByGroup(edu.internet2.middleware.grouper.app.provisioning.targetDao.TargetDaoRetrieveMembershipsByGroupRequest)returns, aggregated.- Overrides:
retrieveAllMembershipsin classGrouperProvisionerTargetDaoBase
-
insertMemberships
public TargetDaoInsertMembershipsResponse insertMemberships(TargetDaoInsertMembershipsRequest targetDaoInsertMembershipsRequest) Add memberships, batched by nativegroup_idso each group is hit with a single groups/members/add call. The member is referenced by nativeteam_member_id; the optionalaccessTypeattribute selects member vs owner (defaults to member).- Overrides:
insertMembershipsin classGrouperProvisionerTargetDaoBase
-
deleteMemberships
public TargetDaoDeleteMembershipsResponse deleteMemberships(TargetDaoDeleteMembershipsRequest targetDaoDeleteMembershipsRequest) Remove memberships, batched by nativegroup_idso each group is hit with a single groups/members/remove call referencing the nativeteam_member_ids.- Overrides:
deleteMembershipsin classGrouperProvisionerTargetDaoBase
-
registerGrouperProvisionerDaoCapabilities
public void registerGrouperProvisionerDaoCapabilities(GrouperProvisionerDaoCapabilities grouperProvisionerDaoCapabilities) Declare exactly the operations this DAO implements so the provisioning framework drives the Dropbox target through the supported paths only.- Specified by:
registerGrouperProvisionerDaoCapabilitiesin classGrouperProvisionerTargetDaoBase
-