Search in sources :

Example 1 with ServerApi

use of org.sonarsource.sonarlint.core.serverapi.ServerApi in project sonarlint-core by SonarSource.

the class ConnectedSonarLintEngineImpl method getActiveRuleDetails.

@Override
public CompletableFuture<ConnectedRuleDetails> getActiveRuleDetails(EndpointParams endpoint, HttpClient client, String ruleKey, @Nullable String projectKey) {
    var allRulesDefinitionsByKey = analysisContext.get().allRulesDefinitionsByKey;
    var ruleDefFromPlugin = allRulesDefinitionsByKey.get(ruleKey);
    if (ruleDefFromPlugin != null && (globalConfig.getExtraPluginsPathsByKey().containsKey(ruleDefFromPlugin.getLanguage().getPluginKey()) || projectKey == null)) {
        // if no project key, or for rules from extra plugins there will be no rules metadata in the storage
        return CompletableFuture.completedFuture(new DefaultRuleDetails(ruleKey, ruleDefFromPlugin.getName(), ruleDefFromPlugin.getHtmlDescription(), ruleDefFromPlugin.getSeverity(), ruleDefFromPlugin.getType(), ruleDefFromPlugin.getLanguage(), ""));
    }
    if (projectKey != null) {
        var analyzerConfiguration = projectStorage.getAnalyzerConfiguration(projectKey);
        var storageActiveRule = analyzerConfiguration.getRuleSetByLanguageKey().values().stream().flatMap(s -> s.getRules().stream()).filter(r -> r.getRuleKey().equals(ruleKey)).findFirst();
        if (storageActiveRule.isPresent()) {
            var activeRuleFromStorage = storageActiveRule.get();
            var serverSeverity = activeRuleFromStorage.getSeverity();
            if (StringUtils.isNotBlank(activeRuleFromStorage.getTemplateKey())) {
                var templateRuleDefFromPlugin = Optional.ofNullable(allRulesDefinitionsByKey.get(activeRuleFromStorage.getTemplateKey())).orElseThrow(() -> new IllegalStateException("Unable to find rule definition for rule template " + activeRuleFromStorage.getTemplateKey()));
                return new ServerApi(new ServerApiHelper(endpoint, client)).rules().getRule(ruleKey).thenApply(serverRule -> new DefaultRuleDetails(ruleKey, serverRule.getName(), serverRule.getHtmlDesc(), serverSeverity, templateRuleDefFromPlugin.getType(), templateRuleDefFromPlugin.getLanguage(), serverRule.getHtmlNote()));
            } else {
                if (ruleDefFromPlugin == null) {
                    throw new IllegalStateException("Unable to find rule definition for rule " + ruleKey);
                }
                return new ServerApi(new ServerApiHelper(endpoint, client)).rules().getRule(ruleKey).thenApply(serverRule -> new DefaultRuleDetails(ruleKey, ruleDefFromPlugin.getName(), ruleDefFromPlugin.getHtmlDescription(), serverSeverity != null ? serverSeverity : ruleDefFromPlugin.getSeverity(), ruleDefFromPlugin.getType(), ruleDefFromPlugin.getLanguage(), serverRule.getHtmlNote()));
            }
        }
    }
    throw new IllegalStateException("Unable to find rule details for '" + ruleKey + "'");
}
Also used : ClientLogOutput(org.sonarsource.sonarlint.core.commons.log.ClientLogOutput) FileMatcher(org.sonarsource.sonarlint.core.container.storage.FileMatcher) Language(org.sonarsource.sonarlint.core.commons.Language) GlobalUpdateStatusReader(org.sonarsource.sonarlint.core.container.storage.GlobalUpdateStatusReader) DefaultClientIssue(org.sonarsource.sonarlint.core.client.api.common.analysis.DefaultClientIssue) IssueStoreReader(org.sonarsource.sonarlint.core.container.storage.IssueStoreReader) SonarLintRuleDefinition(org.sonarsource.sonarlint.core.rule.extractor.SonarLintRuleDefinition) Version(org.sonarsource.sonarlint.core.commons.Version) StringUtils(org.apache.commons.lang3.StringUtils) ProjectStorageStatus(org.sonarsource.sonarlint.core.client.api.connected.ProjectStorageStatus) ServerApiHelper(org.sonarsource.sonarlint.core.serverapi.ServerApiHelper) AnalyzeCommand(org.sonarsource.sonarlint.core.analysis.command.AnalyzeCommand) Map(java.util.Map) ConnectedRuleDetails(org.sonarsource.sonarlint.core.client.api.connected.ConnectedRuleDetails) GlobalStores(org.sonarsource.sonarlint.core.container.storage.GlobalStores) Path(java.nio.file.Path) ActiveRule(org.sonarsource.sonarlint.core.analysis.api.ActiveRule) ConnectedSonarLintEngine(org.sonarsource.sonarlint.core.client.api.connected.ConnectedSonarLintEngine) EndpointParams(org.sonarsource.sonarlint.core.serverapi.EndpointParams) StringUtils.trimToNull(org.apache.commons.lang3.StringUtils.trimToNull) StorageException(org.sonarsource.sonarlint.core.client.api.exceptions.StorageException) StorageFileExclusions(org.sonarsource.sonarlint.core.container.storage.StorageFileExclusions) Predicate(java.util.function.Predicate) DefaultRuleDetails(org.sonarsource.sonarlint.core.container.storage.DefaultRuleDetails) PluginInstancesRepository(org.sonarsource.sonarlint.core.plugin.commons.PluginInstancesRepository) Collection(java.util.Collection) ServerActiveRule(org.sonarsource.sonarlint.core.serverapi.rules.ServerActiveRule) Set(java.util.Set) ServerProject(org.sonarsource.sonarlint.core.serverapi.component.ServerProject) ProjectListDownloader(org.sonarsource.sonarlint.core.container.connected.update.ProjectListDownloader) Collectors(java.util.stream.Collectors) List(java.util.List) SonarLintWrappedException(org.sonarsource.sonarlint.core.client.api.exceptions.SonarLintWrappedException) AnalysisEngineConfiguration(org.sonarsource.sonarlint.core.analysis.api.AnalysisEngineConfiguration) HttpClient(org.sonarsource.sonarlint.core.commons.http.HttpClient) Optional(java.util.Optional) FilenameUtils(org.apache.commons.io.FilenameUtils) IssueStoreFactory(org.sonarsource.sonarlint.core.container.connected.IssueStoreFactory) AnalysisResults(org.sonarsource.sonarlint.core.analysis.api.AnalysisResults) GlobalStorageUpdateExecutor(org.sonarsource.sonarlint.core.container.connected.update.perform.GlobalStorageUpdateExecutor) Configuration(org.sonarsource.sonarlint.core.plugin.commons.PluginInstancesRepository.Configuration) HashMap(java.util.HashMap) CompletableFuture(java.util.concurrent.CompletableFuture) ConnectedAnalysisConfiguration(org.sonarsource.sonarlint.core.client.api.connected.ConnectedAnalysisConfiguration) ServerIssue(org.sonarsource.sonarlint.core.client.api.connected.ServerIssue) AnalysisEngine(org.sonarsource.sonarlint.core.analysis.AnalysisEngine) ProjectStorageStatusReader(org.sonarsource.sonarlint.core.container.storage.ProjectStorageStatusReader) AtomicReference(java.util.concurrent.atomic.AtomicReference) Function(java.util.function.Function) Supplier(java.util.function.Supplier) ConnectedGlobalConfiguration(org.sonarsource.sonarlint.core.client.api.connected.ConnectedGlobalConfiguration) ArrayList(java.util.ArrayList) HashSet(java.util.HashSet) IssueListener(org.sonarsource.sonarlint.core.client.api.common.analysis.IssueListener) ProjectStoragePaths.encodeForFs(org.sonarsource.sonarlint.core.container.storage.ProjectStoragePaths.encodeForFs) UpdateResult(org.sonarsource.sonarlint.core.client.api.connected.UpdateResult) LocalStorageSynchronizer(org.sonarsource.sonarlint.core.storage.LocalStorageSynchronizer) ProjectStorageUpdateExecutor(org.sonarsource.sonarlint.core.container.connected.update.perform.ProjectStorageUpdateExecutor) Issue(org.sonarsource.sonarlint.core.analysis.api.Issue) Objects.requireNonNull(java.util.Objects.requireNonNull) ProjectStorage(org.sonarsource.sonarlint.core.storage.ProjectStorage) IssueStorePaths(org.sonarsource.sonarlint.core.container.connected.update.IssueStorePaths) ProjectStoragePaths(org.sonarsource.sonarlint.core.container.storage.ProjectStoragePaths) DownloadException(org.sonarsource.sonarlint.core.client.api.exceptions.DownloadException) Nullable(javax.annotation.Nullable) ProjectBranches(org.sonarsource.sonarlint.core.client.api.connected.ProjectBranches) AnalysisConfiguration(org.sonarsource.sonarlint.core.analysis.api.AnalysisConfiguration) ProjectBinding(org.sonarsource.sonarlint.core.client.api.connected.ProjectBinding) StorageReader(org.sonarsource.sonarlint.core.container.storage.StorageReader) PluginDetails(org.sonarsource.sonarlint.core.client.api.common.PluginDetails) ClientProgressMonitor(org.sonarsource.sonarlint.core.commons.progress.ClientProgressMonitor) PluginsStorage(org.sonarsource.sonarlint.core.storage.PluginsStorage) ServerApi(org.sonarsource.sonarlint.core.serverapi.ServerApi) PartialUpdaterFactory(org.sonarsource.sonarlint.core.container.storage.partialupdate.PartialUpdaterFactory) Paths(java.nio.file.Paths) GlobalStorageStatus(org.sonarsource.sonarlint.core.client.api.connected.GlobalStorageStatus) ProgressMonitor(org.sonarsource.sonarlint.core.commons.progress.ProgressMonitor) DefaultRuleDetails(org.sonarsource.sonarlint.core.container.storage.DefaultRuleDetails) ServerApi(org.sonarsource.sonarlint.core.serverapi.ServerApi) ServerApiHelper(org.sonarsource.sonarlint.core.serverapi.ServerApiHelper)

Example 2 with ServerApi

use of org.sonarsource.sonarlint.core.serverapi.ServerApi in project sonarlint-core by SonarSource.

the class ConnectionValidator method validateConnection.

public CompletableFuture<ValidationResult> validateConnection() {
    var serverChecker = new ServerVersionAndStatusChecker(helper);
    var authChecker = new AuthenticationChecker(helper);
    return serverChecker.checkVersionAndStatusAsync().thenApply(check -> {
        var validateCredentials = authChecker.validateCredentials();
        var organizationKey = helper.getOrganizationKey();
        if (validateCredentials.success() && organizationKey.isPresent()) {
            var organization = new ServerApi(helper).organization().fetchOrganization(organizationKey.get(), new ProgressMonitor(null));
            if (organization.isEmpty()) {
                return new DefaultValidationResult(false, "No organizations found for key: " + organizationKey.get());
            }
        }
        return validateCredentials;
    }).exceptionally(e -> new DefaultValidationResult(false, e.getCause().getMessage()));
}
Also used : AuthenticationChecker(org.sonarsource.sonarlint.core.serverapi.authentication.AuthenticationChecker) ServerVersionAndStatusChecker(org.sonarsource.sonarlint.core.serverapi.system.ServerVersionAndStatusChecker) ServerOrganization(org.sonarsource.sonarlint.core.serverapi.organization.ServerOrganization) ValidationResult(org.sonarsource.sonarlint.core.serverapi.system.ValidationResult) Optional(java.util.Optional) CompletableFuture(java.util.concurrent.CompletableFuture) ServerApiHelper(org.sonarsource.sonarlint.core.serverapi.ServerApiHelper) ProgressMonitor(org.sonarsource.sonarlint.core.commons.progress.ProgressMonitor) ServerApi(org.sonarsource.sonarlint.core.serverapi.ServerApi) DefaultValidationResult(org.sonarsource.sonarlint.core.serverapi.system.DefaultValidationResult) ProgressMonitor(org.sonarsource.sonarlint.core.commons.progress.ProgressMonitor) ServerVersionAndStatusChecker(org.sonarsource.sonarlint.core.serverapi.system.ServerVersionAndStatusChecker) AuthenticationChecker(org.sonarsource.sonarlint.core.serverapi.authentication.AuthenticationChecker) DefaultValidationResult(org.sonarsource.sonarlint.core.serverapi.system.DefaultValidationResult) ServerApi(org.sonarsource.sonarlint.core.serverapi.ServerApi)

Example 3 with ServerApi

use of org.sonarsource.sonarlint.core.serverapi.ServerApi in project sonarlint-core by SonarSource.

the class LocalStorageSynchronizerTests method should_not_synchronize_when_server_is_down.

@Test
void should_not_synchronize_when_server_is_down(@TempDir Path tmpDir) {
    mockServer.addStringResponse("/api/system/status", "{\"id\": \"1\", \"status\": \"DOWN\", \"version\": \"1\"}");
    var synchronizer = new LocalStorageSynchronizer(Set.of(Language.JS), emptySet(), new PluginsStorage(tmpDir), new ProjectStorage(tmpDir));
    synchronizer.synchronize(new ServerApi(mockServer.serverApiHelper()), Set.of("projectKey"), progressMonitor);
    var storageFile = tmpDir.resolve("70726f6a6563744b6579/analyzer_config.pb");
    assertThat(storageFile).doesNotExist();
}
Also used : ServerApi(org.sonarsource.sonarlint.core.serverapi.ServerApi) Test(org.junit.jupiter.api.Test)

Example 4 with ServerApi

use of org.sonarsource.sonarlint.core.serverapi.ServerApi in project sonarlint-core by SonarSource.

the class ConnectedModeTest method getProject.

@Test
public void getProject() {
    var api = new ServerApi(endpointParams(ORCHESTRATOR), sqHttpClient()).component();
    assertThat(api.getProject("foo")).isNotPresent();
    assertThat(api.getProject(PROJECT_KEY_RUBY)).isPresent();
}
Also used : ServerApi(org.sonarsource.sonarlint.core.serverapi.ServerApi) Test(org.junit.Test)

Example 5 with ServerApi

use of org.sonarsource.sonarlint.core.serverapi.ServerApi in project sonarlint-core by SonarSource.

the class PluginsSynchronizerTests method should_not_synchronize_an_up_to_date_plugin.

@Test
void should_not_synchronize_an_up_to_date_plugin(@TempDir Path tmp) throws Exception {
    var dest = tmp.resolve("destDir");
    Files.createDirectory(dest);
    mockServer.addStringResponse("/api/plugins/installed", "{\"plugins\": [" + "{\"key\": \"java\", \"hash\": \"de5308f43260d357acc97712ce4c5475\", \"filename\": \"sonar-java-plugin-5.13.1.18282.jar\", \"sonarLintSupported\": true}" + "]}");
    mockServer.addStringResponse("/api/plugins/download?plugin=java", "content-java");
    underTest = new PluginsSynchronizer(Set.of(Language.JAVA), new PluginsStorage(dest), emptySet());
    underTest.synchronize(new ServerApi(mockServer.serverApiHelper()), new ProgressMonitor(null));
    mockServer.removeResponse("/api/plugins/download?plugin=java");
    var anyPluginUpdated = underTest.synchronize(new ServerApi(mockServer.serverApiHelper()), new ProgressMonitor(null));
    assertThat(anyPluginUpdated).isFalse();
}
Also used : ProgressMonitor(org.sonarsource.sonarlint.core.commons.progress.ProgressMonitor) ServerApi(org.sonarsource.sonarlint.core.serverapi.ServerApi) Test(org.junit.jupiter.api.Test)

Aggregations

ServerApi (org.sonarsource.sonarlint.core.serverapi.ServerApi)23 Test (org.junit.jupiter.api.Test)13 ProgressMonitor (org.sonarsource.sonarlint.core.commons.progress.ProgressMonitor)13 Test (org.junit.Test)5 HashMap (java.util.HashMap)3 ServerApiHelper (org.sonarsource.sonarlint.core.serverapi.ServerApiHelper)3 ArrayList (java.util.ArrayList)2 HashSet (java.util.HashSet)2 Optional (java.util.Optional)2 CompletableFuture (java.util.concurrent.CompletableFuture)2 Path (java.nio.file.Path)1 Paths (java.nio.file.Paths)1 Collection (java.util.Collection)1 List (java.util.List)1 Map (java.util.Map)1 Objects.requireNonNull (java.util.Objects.requireNonNull)1 Set (java.util.Set)1 AtomicReference (java.util.concurrent.atomic.AtomicReference)1 Function (java.util.function.Function)1 Predicate (java.util.function.Predicate)1