Class GrouperAdobeProvisioningTargetNativeSync

java.lang.Object
edu.internet2.middleware.grouper.app.provisioning.GrouperProvisioningTargetNativeSync
edu.internet2.middleware.grouper.app.adobe.GrouperAdobeProvisioningTargetNativeSync

public class GrouperAdobeProvisioningTargetNativeSync extends GrouperProvisioningTargetNativeSync
Adobe-specific GrouperProvisioningTargetNativeSync: builds native target reporting beans for sync-back to the generic grouper_prov_group / grouper_prov_user tables.

Both groups and users are captured from the raw Adobe JSON (JSON Pointer paths, like SCIM), hooked at the API-commands seam (GrouperAdobeApiCommands.retrieveAdobeGroups and retrieveAdobeUsers/retrieveAdobeUser) where the full JSON node is in scope. This avoids losing any Adobe field that the GrouperAdobeGroup / GrouperAdobeUser typed beans do not model; operators can capture any JSON field via nativeAttributesGroups / nativeAttributesEntities with a name and optional JSON-Pointer path.

Groups additionally pair with canRetrieveGroup=false: Adobe has no by-id group endpoint, so the framework always reads all groups and the commands register every group. Users keep canRetrieveEntity=true (Adobe reads a single user by email), so only the capture site moved -- the routing is unchanged.

Memberships are still derived from the GrouperAdobeUser typed bean's groups set (captureMembershipsFromUser(edu.internet2.middleware.grouper.app.adobe.GrouperAdobeUser, java.util.Map<java.lang.String, java.lang.String>)); only the group/user object capture is JSON-based.

  • Constructor Details

    • GrouperAdobeProvisioningTargetNativeSync

      public GrouperAdobeProvisioningTargetNativeSync()
  • Method Details

    • getDefaultNativeAttributeConfigsEntities

      protected List<GrouperProvisioningNativeAttributeConfig> getDefaultNativeAttributeConfigsEntities()
      Description copied from class: GrouperProvisioningTargetNativeSync
      Per-protocol sensible-default attribute list for entities (users) when the operator hasn't configured nativeAttributesEntities. Override in protocol subclasses to return a curated list (e.g. SCIM core schema fields). Default is empty — for LDAP this means "no extra capture beyond what the regular target query returned," which is the historical behavior.
      Overrides:
      getDefaultNativeAttributeConfigsEntities in class GrouperProvisioningTargetNativeSync
    • getDefaultNativeAttributeConfigsGroups

      protected List<GrouperProvisioningNativeAttributeConfig> getDefaultNativeAttributeConfigsGroups()
      Description copied from class: GrouperProvisioningTargetNativeSync
      Per-protocol sensible-default attribute list for groups. See GrouperProvisioningTargetNativeSync.getDefaultNativeAttributeConfigsEntities().
      Overrides:
      getDefaultNativeAttributeConfigsGroups in class GrouperProvisioningTargetNativeSync
    • buildNativeGroupFromJson

      public GrouperProvisioningTargetNativeGroup buildNativeGroupFromJson(com.fasterxml.jackson.databind.JsonNode groupNode)
      Build a native group bean from the raw Adobe group JSON. targetId is read from /groupId; the attributes map is populated for each entry in GrouperProvisioningTargetNativeSync.effectiveNativeAttributeConfigsGroups() (operator-configured or default) by JSON Pointer. Returns null when the JSON is missing or has no groupId.
    • buildNativeUserFromJson

      public GrouperProvisioningTargetNativeUser buildNativeUserFromJson(com.fasterxml.jackson.databind.JsonNode userNode)
      Build a native user bean from the raw Adobe user JSON. targetId is read from /id; the attributes map is populated for each entry in GrouperProvisioningTargetNativeSync.effectiveNativeAttributeConfigsEntities() (operator-configured or default) by JSON Pointer. Returns null when the JSON is missing or has no id.
    • captureGroupJson

      public void captureGroupJson(com.fasterxml.jackson.databind.JsonNode groupNode)
      Build + record an Adobe group from its raw JSON. No-op when sync-back is off or id-less.
    • captureUserJson

      public void captureUserJson(com.fasterxml.jackson.databind.JsonNode userNode)
      Build + record an Adobe user from its raw JSON. No-op when sync-back is off or id-less.
    • captureMembershipsFromUser

      public void captureMembershipsFromUser(GrouperAdobeUser grouperAdobeUser, Map<String,String> groupNameToTargetId)
      Translate an Adobe user's groups set (group-name strings) into native membership beans against the supplied groupNameToTargetId index, and record them. No-op if reporting is off or the input is empty.
    • captureGroupJsonFromCurrentProvisioner

      public static void captureGroupJsonFromCurrentProvisioner(com.fasterxml.jackson.databind.JsonNode groupNode)
      Capture an Adobe group (from its raw JSON) against the current provisioner's sync. No-op if there's no current provisioner or the active provisioner isn't an Adobe one. Called from the commands seam (GrouperAdobeApiCommands.retrieveAdobeGroups) for every group in the org.
    • captureUserJsonFromCurrentProvisioner

      public static void captureUserJsonFromCurrentProvisioner(com.fasterxml.jackson.databind.JsonNode userNode)
      Capture an Adobe user (from its raw JSON) against the current provisioner's sync. No-op if there's no current provisioner or the active provisioner isn't an Adobe one. Called from the commands seam (GrouperAdobeApiCommands.retrieveAdobeUsers/retrieveAdobeUser).
    • captureMembershipsFromUserForCurrentProvisioner

      public static void captureMembershipsFromUserForCurrentProvisioner(GrouperAdobeUser grouperAdobeUser, Map<String,String> groupNameToTargetId)
      Translate an Adobe user's group-name memberships into native records against the supplied group-name → target-id index, and record them on the current provisioner.
    • captureMembershipInsertFromCurrentProvisioner

      public static void captureMembershipInsertFromCurrentProvisioner(String groupTargetId, String userTargetId)
      Write-track a successful Adobe membership add (associateUsersToGroup) against the current provisioner: record (groupTargetId, userTargetId) in the native membership map. No-op out of cycle or for a non-Adobe provisioner.
    • captureMembershipDeleteFromCurrentProvisioner

      public static void captureMembershipDeleteFromCurrentProvisioner(String groupTargetId, String userTargetId)
      Write-track a successful Adobe membership remove (disassociateUsersFromGroup) against the current provisioner: drop (groupTargetId, userTargetId) from the native membership map so the end-of-run flush deletes its grouper_prov_mship row.