Search in sources :

Example 16 with PluginInfo

use of org.sonar.core.platform.PluginInfo in project sonarqube by SonarSource.

the class ServerPluginRepository method isCompatible.

@VisibleForTesting
static boolean isCompatible(PluginInfo plugin, SonarRuntime runtime, Map<String, PluginInfo> allPluginsByKeys) {
    if (Strings.isNullOrEmpty(plugin.getMainClass()) && Strings.isNullOrEmpty(plugin.getBasePlugin())) {
        LOG.warn("Plugin {} [{}] is ignored because entry point class is not defined", plugin.getName(), plugin.getKey());
        return false;
    }
    if (!plugin.isCompatibleWith(runtime.getApiVersion().toString())) {
        throw MessageException.of(format("Plugin %s [%s] requires at least SonarQube %s", plugin.getName(), plugin.getKey(), plugin.getMinimalSqVersion()));
    }
    if (!Strings.isNullOrEmpty(plugin.getBasePlugin()) && !allPluginsByKeys.containsKey(plugin.getBasePlugin())) {
        // it extends a plugin that is not installed
        LOG.warn("Plugin {} [{}] is ignored because its base plugin [{}] is not installed", plugin.getName(), plugin.getKey(), plugin.getBasePlugin());
        return false;
    }
    for (PluginInfo.RequiredPlugin requiredPlugin : plugin.getRequiredPlugins()) {
        PluginInfo installedRequirement = allPluginsByKeys.get(requiredPlugin.getKey());
        if (installedRequirement == null) {
            // it requires a plugin that is not installed
            LOG.warn("Plugin {} [{}] is ignored because the required plugin [{}] is not installed", plugin.getName(), plugin.getKey(), requiredPlugin.getKey());
            return false;
        }
        Version installedRequirementVersion = installedRequirement.getVersion();
        if (installedRequirementVersion != null && requiredPlugin.getMinimalVersion().compareToIgnoreQualifier(installedRequirementVersion) > 0) {
            // it requires a more recent version
            LOG.warn("Plugin {} [{}] is ignored because the version {} of required plugin [{}] is not supported", plugin.getName(), plugin.getKey(), requiredPlugin.getKey(), requiredPlugin.getMinimalVersion());
            return false;
        }
    }
    return true;
}
Also used : Version(org.sonar.updatecenter.common.Version) PluginInfo(org.sonar.core.platform.PluginInfo) PluginInfo.jarToPluginInfo(org.sonar.core.platform.PluginInfo.jarToPluginInfo) VisibleForTesting(com.google.common.annotations.VisibleForTesting)

Example 17 with PluginInfo

use of org.sonar.core.platform.PluginInfo in project sonarqube by SonarSource.

the class InstalledAction method handle.

@Override
public void handle(Request request, Response response) throws Exception {
    userSession.checkIsSystemAdministrator();
    Collection<PluginInfo> pluginInfoList = searchPluginInfoList();
    JsonWriter jsonWriter = response.newJsonWriter();
    jsonWriter.setSerializeEmptys(false);
    jsonWriter.beginObject();
    List<String> additionalFields = request.paramAsStrings(WebService.Param.FIELDS);
    writePluginInfoList(jsonWriter, pluginInfoList, additionalFields == null ? Collections.<String>emptyList() : additionalFields);
    jsonWriter.endObject();
    jsonWriter.close();
}
Also used : PluginInfo(org.sonar.core.platform.PluginInfo) JsonWriter(org.sonar.api.utils.text.JsonWriter)

Example 18 with PluginInfo

use of org.sonar.core.platform.PluginInfo in project sonarqube by SonarSource.

the class PendingAction method writePlugins.

private void writePlugins(JsonWriter json, Map<String, Plugin> compatiblePluginsByKey) {
    Collection<PluginInfo> uninstalledPlugins = installer.getUninstalledPlugins();
    Collection<PluginInfo> downloadedPlugins = pluginDownloader.getDownloadedPlugins();
    Collection<PluginInfo> installedPlugins = installer.getPluginInfos();
    MatchPluginKeys matchPluginKeys = new MatchPluginKeys(from(installedPlugins).transform(PluginInfoToKey.INSTANCE).toSet());
    Collection<PluginInfo> newPlugins = new ArrayList<>();
    Collection<PluginInfo> updatedPlugins = new ArrayList<>();
    for (PluginInfo pluginInfo : downloadedPlugins) {
        if (matchPluginKeys.apply(pluginInfo)) {
            updatedPlugins.add(pluginInfo);
        } else {
            newPlugins.add(pluginInfo);
        }
    }
    pluginWSCommons.writePluginInfoList(json, newPlugins, compatiblePluginsByKey, ARRAY_INSTALLING);
    pluginWSCommons.writePluginInfoList(json, updatedPlugins, compatiblePluginsByKey, ARRAY_UPDATING);
    pluginWSCommons.writePluginInfoList(json, uninstalledPlugins, compatiblePluginsByKey, ARRAY_REMOVING);
}
Also used : ArrayList(java.util.ArrayList) PluginInfo(org.sonar.core.platform.PluginInfo)

Example 19 with PluginInfo

use of org.sonar.core.platform.PluginInfo in project sonarqube by SonarSource.

the class GeneratePluginIndex method writeIndex.

void writeIndex(File indexFile) throws IOException {
    FileUtils.forceMkdir(indexFile.getParentFile());
    Writer writer = new OutputStreamWriter(new FileOutputStream(indexFile), StandardCharsets.UTF_8);
    try {
        for (PluginInfo pluginInfo : repository.getPluginInfos()) {
            writer.append(RemotePlugin.create(pluginInfo).marshal());
            writer.append(CharUtils.LF);
        }
        writer.flush();
    } finally {
        IOUtils.closeQuietly(writer);
    }
}
Also used : FileOutputStream(java.io.FileOutputStream) OutputStreamWriter(java.io.OutputStreamWriter) PluginInfo(org.sonar.core.platform.PluginInfo) Writer(java.io.Writer) OutputStreamWriter(java.io.OutputStreamWriter)

Example 20 with PluginInfo

use of org.sonar.core.platform.PluginInfo in project sonarqube by SonarSource.

the class DebtModelPluginRepositoryTest method test_component_initialization.

@Test
public void test_component_initialization() throws Exception {
    // we do have the "csharp-model.xml" file in src/test/resources
    PluginInfo csharpPluginMetadata = new PluginInfo("csharp");
    // but we don' have the "php-model.xml" one
    PluginInfo phpPluginMetadata = new PluginInfo("php");
    PluginRepository repository = mock(PluginRepository.class);
    when(repository.getPluginInfos()).thenReturn(Lists.newArrayList(csharpPluginMetadata, phpPluginMetadata));
    FakePlugin fakePlugin = new FakePlugin();
    when(repository.getPluginInstance(anyString())).thenReturn(fakePlugin);
    underTest = new DebtModelPluginRepository(repository, TEST_XML_PREFIX_PATH);
    // when
    underTest.start();
    // assert
    Collection<String> contributingPluginList = underTest.getContributingPluginList();
    assertThat(contributingPluginList.size()).isEqualTo(2);
    assertThat(contributingPluginList).containsOnly("technical-debt", "csharp");
}
Also used : PluginRepository(org.sonar.core.platform.PluginRepository) PluginInfo(org.sonar.core.platform.PluginInfo) Matchers.anyString(org.mockito.Matchers.anyString) Test(org.junit.Test)

Aggregations

PluginInfo (org.sonar.core.platform.PluginInfo)50 Test (org.junit.Test)23 File (java.io.File)9 Plugin (org.sonar.api.Plugin)7 PluginInfo.jarToPluginInfo (org.sonar.core.platform.PluginInfo.jarToPluginInfo)7 PluginRepository (org.sonar.core.platform.PluginRepository)5 ExplodedPlugin (org.sonar.core.platform.ExplodedPlugin)4 FileUtils.copyFile (org.apache.commons.io.FileUtils.copyFile)3 FileUtils.moveFile (org.apache.commons.io.FileUtils.moveFile)3 SonarRuntime (org.sonar.api.SonarRuntime)3 AnalysisMode (org.sonar.api.batch.AnalysisMode)3 ComponentContainer (org.sonar.core.platform.ComponentContainer)3 Version (org.sonar.updatecenter.common.Version)3 VisibleForTesting (com.google.common.annotations.VisibleForTesting)2 IOException (java.io.IOException)2 HashMap (java.util.HashMap)2 Map (java.util.Map)2 Before (org.junit.Before)2 ExtensionProvider (org.sonar.api.ExtensionProvider)2 JsonWriter (org.sonar.api.utils.text.JsonWriter)2