public static PluginManifest CreatePluginManifest(IPackage package)
{
// The manifest properties supported by SonarQube are documented at
// http://docs.sonarqube.org/display/DEV/Build+plugin
PluginManifest pluginDefn = new PluginManifest();
pluginDefn.Description = GetValidManifestString(package.Description);
pluginDefn.Developers = GetValidManifestString(ListToString(package.Authors));
pluginDefn.Homepage = GetValidManifestString(package.ProjectUrl?.ToString());
pluginDefn.Key = PluginKeyUtilities.GetValidKey(package.Id);
if (!String.IsNullOrWhiteSpace(package.Title))
{
pluginDefn.Name = GetValidManifestString(package.Title);
}
else
{
// Process the package ID to replace dot separators with spaces for use as a fallback
pluginDefn.Name = GetValidManifestString(package.Id.Replace(".", " "));
}
// Fall back to using the authors if owners is empty
string organisation;
if (package.Owners.Any())
{
organisation = ListToString(package.Owners);
}
else
{
organisation = ListToString(package.Authors);
}
pluginDefn.Organization = GetValidManifestString(organisation);
pluginDefn.Version = GetValidManifestString(package.Version?.ToNormalizedString());
// The TermsConditionsUrl is only displayed in the "Update Center - Available" page
// i.e. for plugins that are available through the public Update Center.
// If the property has a value then the link will be displayed with a checkbox
// for acceptance.
// It is not used when plugins are directly dropped into the extensions\plugins
// folder of the SonarQube server.
pluginDefn.TermsConditionsUrl = GetValidManifestString(package.LicenseUrl?.ToString());
// Packages from the NuGet website may have friendly short licensenames heuristically assigned, but this requires a downcast
DataServicePackage dataServicePackage = package as DataServicePackage;
if (!String.IsNullOrWhiteSpace(dataServicePackage?.LicenseNames))
{
pluginDefn.License = GetValidManifestString(dataServicePackage.LicenseNames);
}
else
{
// Fallback - use a raw URL. Not as nice-looking in the UI, but acceptable.
pluginDefn.License = pluginDefn.TermsConditionsUrl;
}
return pluginDefn;
}