/**
  * Register a module name and type with its Maven coordinates.
  *
  * @param type module type
  * @param name module name
  * @param coordinates Maven coordinates for the module artifact
  * @param force if {@code true}, overwrites a pre-existing registration
  */
 @RequestMapping(value = "/{type}/{name}", method = RequestMethod.POST)
 @ResponseStatus(HttpStatus.CREATED)
 public void register(
     @PathVariable("type") ArtifactType type,
     @PathVariable("name") String name,
     @RequestParam("coordinates") String coordinates,
     @RequestParam(value = "force", defaultValue = "false") boolean force) {
   Assert.isTrue(type != ArtifactType.library, "Only modules are supported by this endpoint");
   if (!force && registry.find(name, type) != null) {
     return;
   }
   registry.save(new ArtifactRegistration(name, type, ArtifactCoordinates.parse(coordinates)));
 }
  /**
   * Retrieve detailed information about a particular module.
   *
   * @param type module type
   * @param name module name
   * @return detailed module information
   */
  @RequestMapping(value = "/{type}/{name}", method = RequestMethod.GET)
  @ResponseStatus(HttpStatus.OK)
  public DetailedModuleRegistrationResource info(
      @PathVariable("type") ArtifactType type, @PathVariable("name") String name) {
    Assert.isTrue(type != ArtifactType.library, "Only modules are supported by this endpoint");
    ArtifactRegistration registration = registry.find(name, type);
    if (registration == null) {
      return null;
    }
    DetailedModuleRegistrationResource result =
        new DetailedModuleRegistrationResource(moduleAssembler.toResource(registration));
    Resource resource = moduleResolver.resolve(adapt(registration.getCoordinates()));

    List<ConfigurationMetadataProperty> properties =
        moduleConfigurationMetadataResolver.listProperties(resource);
    for (ConfigurationMetadataProperty property : properties) {
      result.addOption(property);
    }
    return result;
  }