#develop (short for SharpDevelop) is a free IDE for .NET programming languages.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

111 lines
3.5 KiB

// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.Collections.Generic;
using System.Linq;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Project;
using NuGet;
namespace ICSharpCode.PackageManagement
{
public class PackageManagementSolution : IPackageManagementSolution
{
IRegisteredPackageRepositories registeredPackageRepositories;
IPackageManagementProjectService projectService;
IPackageManagementEvents packageManagementEvents;
IPackageManagementProjectFactory projectFactory;
public PackageManagementSolution(
IRegisteredPackageRepositories registeredPackageRepositories,
IPackageManagementEvents packageManagementEvents)
: this(
registeredPackageRepositories,
packageManagementEvents,
new PackageManagementProjectService(),
new PackageManagementProjectFactory(packageManagementEvents))
{
}
public PackageManagementSolution(
IRegisteredPackageRepositories registeredPackageRepositories,
IPackageManagementEvents packageManagementEvents,
IPackageManagementProjectService projectService,
IPackageManagementProjectFactory projectFactory)
{
this.registeredPackageRepositories = registeredPackageRepositories;
this.packageManagementEvents = packageManagementEvents;
this.projectFactory = projectFactory;
this.projectService = projectService;
}
public IPackageManagementProject GetActiveProject()
{
return GetActiveProject(ActivePackageRepository);
}
IPackageRepository ActivePackageRepository {
get { return registeredPackageRepositories.ActiveRepository; }
}
public IPackageManagementProject GetActiveProject(IPackageRepository sourceRepository)
{
MSBuildBasedProject activeProject = GetActiveMSBuildProject();
return CreateProject(sourceRepository, activeProject);
}
MSBuildBasedProject GetActiveMSBuildProject()
{
return projectService.CurrentProject as MSBuildBasedProject;
}
IPackageManagementProject CreateProject(IPackageRepository sourceRepository, MSBuildBasedProject project)
{
return projectFactory.CreateProject(sourceRepository, project);
}
IPackageRepository CreatePackageRepository(PackageSource source)
{
return registeredPackageRepositories.CreateRepository(source);
}
public IPackageManagementProject GetProject(PackageSource source, string projectName)
{
MSBuildBasedProject msbuildProject = GetMSBuildProject(projectName);
return CreateProject(source, msbuildProject);
}
MSBuildBasedProject GetMSBuildProject(string name)
{
foreach (IProject project in projectService.GetOpenProjects()) {
if (IsProjectNameMatch(project.Name, name)) {
return project as MSBuildBasedProject;
}
}
return null;
}
bool IsProjectNameMatch(string a, string b)
{
return String.Equals(a, b, StringComparison.InvariantCultureIgnoreCase);
}
IPackageManagementProject CreateProject(PackageSource source, MSBuildBasedProject project)
{
IPackageRepository sourceRepository = CreatePackageRepository(source);
return CreateProject(sourceRepository, project);
}
public IPackageManagementProject GetProject(IPackageRepository sourceRepository, string projectName)
{
MSBuildBasedProject msbuildProject = GetMSBuildProject(projectName);
return CreateProject(sourceRepository, msbuildProject);
}
public IEnumerable<IProject> GetMSBuildProjects()
{
return projectService.GetOpenProjects();
}
}
}