#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.
 
 
 
 
 
 

93 lines
2.4 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 ICSharpCode.SharpDevelop.Project;
using NuGet;
namespace ICSharpCode.PackageManagement
{
public abstract class ProcessPackageAction
{
IPackageManagementSolution solution;
IPackageManagementEvents packageManagementEvents;
public ProcessPackageAction(
IPackageManagementSolution solution,
IPackageManagementEvents packageManagementEvents)
{
this.solution = solution;
this.packageManagementEvents = packageManagementEvents;
}
public ISharpDevelopPackageManager PackageManager { get; set; }
public ILogger Logger { get; set; }
public IPackage Package { get; set; }
public Version PackageVersion { get; set; }
public string PackageId { get; set; }
public IPackageRepository PackageRepository { get; set; }
public PackageSource PackageSource { get; set; }
public MSBuildBasedProject Project { get; set; }
protected void OnParentPackageInstalled()
{
packageManagementEvents.OnParentPackageInstalled(Package);
}
protected void OnParentPackageUninstalled()
{
packageManagementEvents.OnParentPackageUninstalled(Package);
}
public void Execute()
{
BeforeExecute();
ExecuteCore();
}
protected virtual void BeforeExecute()
{
GetLoggerIfMissing();
CreatePackageManager();
ConfigurePackageManagerLogger();
GetPackageIfMissing();
}
protected virtual void ExecuteCore()
{
}
void GetLoggerIfMissing()
{
if (Logger == null) {
Logger = new PackageManagementLogger(packageManagementEvents);
}
}
void CreatePackageManager()
{
if (PackageRepository == null) {
PackageManager = solution.CreatePackageManager(PackageSource, Project);
} else {
PackageManager = solution.CreatePackageManagerForActiveProject(PackageRepository);
}
}
void ConfigurePackageManagerLogger()
{
PackageManager.Logger = Logger;
PackageManager.FileSystem.Logger = Logger;
IProjectManager projectManager = PackageManager.ProjectManager;
projectManager.Logger = Logger;
projectManager.Project.Logger = Logger;
}
void GetPackageIfMissing()
{
if (Package == null) {
Package = PackageManager.SourceRepository.FindPackage(PackageId, PackageVersion);
}
}
}
}