package org.zalando.intellij.swagger.ui.provider; import com.intellij.ide.browsers.OpenInBrowserRequest; import com.intellij.openapi.components.ServiceManager; import com.intellij.openapi.project.DumbAware; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiFile; import com.intellij.util.Url; import java.nio.file.Path; import java.util.Optional; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.builtInWebServer.BuiltInWebBrowserUrlProvider; import org.zalando.intellij.swagger.file.FileDetector; import org.zalando.intellij.swagger.service.SwaggerFileService; import org.zalando.intellij.swagger.service.SwaggerFilesUtils; public class SwaggerUiUrlProvider extends BuiltInWebBrowserUrlProvider implements DumbAware { private final FileDetector fileDetector = new FileDetector(); @Override public boolean canHandleElement(@NotNull OpenInBrowserRequest request) { final PsiFile file = request.getFile(); return fileDetector.isMainSwaggerFile(file) || fileDetector.isMainOpenApiFile(file); } @Nullable @Override protected Url getUrl(@NotNull OpenInBrowserRequest request, @NotNull VirtualFile file) { SwaggerFileService swaggerFileService = ServiceManager.getService(SwaggerFileService.class); Optional<Path> swaggerHTMLFolder = swaggerFileService.convertSwaggerToHtml(request.getVirtualFile()); return swaggerHTMLFolder.map(SwaggerFilesUtils::convertSwaggerLocationToUrl).orElse(null); } }