From Scorching Crane, 5 Years ago, written in Plain Text.
Embed
  1.    @Override
  2.     public Mono<ProvisioningPojo> processLaunchRequest(LaunchJwt launchJwt, String organizationId) {
  3.         return provisionLaunchUsers(launchJwt, organizationId)
  4.             .flatMap(provisioningPojo -> getNamesRolesAndContext(launchJwt)
  5.                 .map(namesRoleResponse -> Tuples.of(namesRoleResponse, provisioningPojo)))
  6.             .flatMap(tuple -> processContextFromNamesRolesResponse(tuple.getT1().getContext(), tuple.getT2())
  7.                 .map(provisioningPojo -> Tuples.of(tuple.getT1(), provisioningPojo)))
  8.             .flatMap(tuple -> this.provisionClass(tuple.getT1().getMembers(), tuple.getT2()));
  9.  
  10.     }
  11.  
  12.     /**
  13.      * Gets the names roles and context.
  14.      *
  15.      * @param launchJwt the launch jwt
  16.      * @return the names roles and context
  17.      */
  18.     private Mono<NamesRoleResponse> getNamesRolesAndContext(LaunchJwt launchJwt) {
  19.         NamesRoleService namesRoleService = launchJwt.getNamesRoleService();
  20.         if(Objects.nonNull(namesRoleService) && StringUtils.isNotBlank(namesRoleService.getContextMembershipsUrl())) {
  21.             String contextUrl = namesRoleService.getContextMembershipsUrl();
  22.             return configurationClient.getPlatformAccessToken(constructAuthInfo(launchJwt))
  23.                 .flatMap(oAuth2AccessToken -> namesAndRolesClient.getNamesAndRolesInfo(contextUrl, oAuth2AccessToken.getValue()));
  24.         }
  25.         else if (Objects.nonNull(launchJwt.getContext())) {
  26.             NamesRoleResponse namesRoleResponse = new NamesRoleResponse();
  27.             namesRoleResponse.setMembers(new ArrayList<Member>());
  28.             namesRoleResponse.setContext(constructCourseContext(launchJwt));
  29.             return Mono.just(namesRoleResponse);
  30.         }
  31.         return Mono.empty();
  32.     }
  33.  
  34.     private Mono<ProvisioningPojo> processContextFromNamesRolesResponse(CourseContext namesRoleCourseContext,
  35.                     ProvisioningPojo provisioningPojo) {
  36.         LOGGER.debug("processing context from names and roles API");
  37.  
  38.         Roster roster = constructRosterPojo(namesRoleCourseContext, provisioningPojo.getOrganizationId());
  39.         provisioningPojo.setRoster(roster);
  40.         return Mono.just(provisioningPojo);
  41.     }
  42.  
  43.     private Mono<ProvisioningPojo> provisionClass(List<Member> namesRoleMembers, ProvisioningPojo provisioningPojo) {
  44.  
  45.         return this.checkIfClassExists(provisioningPojo)
  46.             .flatMap(isClassPresent -> {
  47.                 if (isClassPresent) {
  48.                     return Mono.just(provisioningPojo);
  49.                 } else {
  50.                     return processMembersFromNamesRolesResponse(namesRoleMembers, provisioningPojo)
  51.                         .flatMap(this::createClassAndMapping);
  52.                 }
  53.             });
  54.     }
  55.  
  56.     private Mono<Boolean> checkIfClassExists(ProvisioningPojo provisioningPojo) {
  57.         Mono<String> cmsClassIdMono = emsClassMappingClient.classExistsForExternalClassId(provisioningPojo.getRoster().getExternalClassId())
  58.             .map(ExternalClassMappingData::getData)
  59.             .map(map -> map.entrySet().stream())
  60.             .map(Stream::findFirst)
  61.             .map(Optional::get)
  62.             .map(Entry::getValue)
  63.             .map(ExternalClassMapping::getClassId);
  64.  
  65.         return cmsClassIdMono
  66.             .flatMap(rosterServiceClient::getClassBySectionId)
  67.             .map(CMSClass::getData)
  68.             .map(ClassData::getSection)
  69.             .map(Section::getId)
  70.             .flatMap(cmsClassId -> {
  71.                 provisioningPojo.getRoster().setToolSectionId(cmsClassId);
  72.                 return Mono.just(Boolean.TRUE);
  73.             })
  74.             .switchIfEmpty(Mono.defer(() -> Mono.just(Boolean.FALSE)));
  75.     }
  76.  
  77.     private Mono<ProvisioningPojo> processMembersFromNamesRolesResponse(List<Member> namesRoleMembers, ProvisioningPojo provisioningPojo) {
  78.         LOGGER.debug("provisioning additional Teacher users from names and roles API ");
  79.  
  80.         Optional<Member> instructor = namesRoleMembers.stream()
  81.                 .filter(member -> RumbaRole.T.name()
  82.                         .equalsIgnoreCase(classProvisoningHelper.obtainRumbaRoleFromLTIRoles(member.getRoles())))
  83.                 .findFirst();
  84.  
  85.         if(provisioningPojo.getRole().equals(RumbaRole.S.name()) && instructor.isPresent()) {
  86.             MemberData memberData = constructMemberData(instructor.get(), provisioningPojo);
  87.             return provisioningService.enableUserProvisioning(memberData)
  88.                     .map(rumbaTeacherId -> {
  89.                         RosterMember rosterMember = new RosterMember();
  90.                         rosterMember.setUserId(instructor.get().getUserId());
  91.                         rosterMember.setRole(memberData.getRole());
  92.                         rosterMember.setExternalUserId(memberData.getExternalUserId());
  93.                         rosterMember.setToolUserId(rumbaTeacherId);
  94.                         provisioningPojo.getMembers().add(rosterMember);
  95.                         LOGGER.debug("provisioningPojo : {}", provisioningPojo);
  96.                         return provisioningPojo;
  97.                     });
  98.         }
  99.         return Mono.just(provisioningPojo);
  100.     }

Replies to Untitled rss

Title Name Language When
Re: Untitled Bulky Gorilla text 5 Years ago.