private ApplicationDTO buildApplicationDTO()

in jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/AriesJaxrsServiceRuntime.java [957:1051]


    private ApplicationDTO buildApplicationDTO(
        ApplicationRuntimeInformation ari) {

        ApplicationDTO applicationDTO = new ApplicationDTO(){};

        applicationDTO.name = getServiceName(
            ari._cachingServiceReference::getProperty);
        applicationDTO.base = _whiteboard.getApplicationBase(
            ari._cachingServiceReference::getProperty);
        applicationDTO.serviceId =
            (Long)ari._cachingServiceReference.getProperty("service.id");

        applicationDTO.resourceDTOs = getApplicationEndpointsStream(
            applicationDTO.name).toArray(
                ResourceDTO[]::new
            );

        applicationDTO.extensionDTOs = getApplicationExtensionsStream(
            applicationDTO.name).toArray(
                ExtensionDTO[]::new
            );

        Map<String, Set<ExtensionDTO>> nameBoundExtensions =
            new HashMap<>();

        Map<ExtensionDTO, Set<ResourceDTO>> extensionResources =
            new HashMap<>();

        for (ExtensionDTO extensionDTO : applicationDTO.extensionDTOs) {
            if (extensionDTO.nameBindings == null) {
                continue;
            }

            for (String nameBinding : extensionDTO.nameBindings) {
                Set<ExtensionDTO> extensionDTOS =
                    nameBoundExtensions.computeIfAbsent(
                        nameBinding,
                        __ -> new HashSet<>()
                );

                extensionDTOS.add(extensionDTO);
            }
        }

        for (ResourceDTO resourceDTO : applicationDTO.resourceDTOs) {
            for (ResourceMethodInfoDTO resourceMethodInfo :
                resourceDTO.resourceMethods) {

                if (resourceMethodInfo.nameBindings == null) {
                    continue;
                }

                for (String nameBinding : resourceMethodInfo.nameBindings) {
                    Set<ExtensionDTO> extensionDTOS = nameBoundExtensions.get(
                        nameBinding);

                    if (extensionDTOS != null) {
                        for (ExtensionDTO extensionDTO : extensionDTOS) {
                            Set<ResourceDTO> resourceDTOS =
                                extensionResources.computeIfAbsent(
                                    extensionDTO, __ -> new HashSet<>());

                            resourceDTOS.add(resourceDTO);
                        }
                    }
                }
            }
        }

        extensionResources.forEach(
            (extensionDTO, resourceDTOS) ->
                extensionDTO.filteredByName = resourceDTOS.toArray(
                    new ResourceDTO[0])
        );

        CxfJaxrsServiceRegistrator cxfJaxRsServiceRegistrator =
            ari._cxfJaxRsServiceRegistrator;

        Bus bus = cxfJaxRsServiceRegistrator.getBus();
        Iterable<Class<?>> resourceClasses =
            cxfJaxRsServiceRegistrator.getStaticResourceClasses();

        ArrayList<ResourceMethodInfoDTO> resourceMethodInfoDTOS =
            new ArrayList<>();

        for (Class<?> resourceClass : resourceClasses) {
            resourceMethodInfoDTOS.addAll(
                ClassIntrospector.getResourceMethodInfos(resourceClass, bus));
        }

        applicationDTO.resourceMethods = resourceMethodInfoDTOS.toArray(
            new ResourceMethodInfoDTO[0]);

        return applicationDTO;
    }