~halega/+junk/sharpdevelop

« back to all changes in this revision

Viewing changes to src/AddIns/Misc/PackageManagement/Project/Src/PackageReferenceInstaller.cs

  • Committer: sk
  • Date: 2011-09-10 05:17:57 UTC
  • Revision ID: halega@halega.com-20110910051757-qfouz1llya9m6boy
4.1.0.7915 Release Candidate 1

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
 
2
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
 
3
 
 
4
using System;
 
5
using System.Collections.Generic;
 
6
using ICSharpCode.SharpDevelop.Project;
 
7
using NuGet;
 
8
 
 
9
namespace ICSharpCode.PackageManagement
 
10
{
 
11
        public class PackageReferenceInstaller : IPackageReferenceInstaller
 
12
        {
 
13
                IPackageActionRunner packageActionRunner;
 
14
                IPackageManagementProjectFactory projectFactory;
 
15
                IPackageRepositoryCache packageRepositoryCache;
 
16
                
 
17
                public PackageReferenceInstaller(IPackageRepositoryCache packageRepositoryCache)
 
18
                        : this(
 
19
                                packageRepositoryCache,
 
20
                                PackageManagementServices.PackageActionRunner,
 
21
                                new PackageManagementProjectFactory(PackageManagementServices.PackageManagementEvents))
 
22
                {
 
23
                }
 
24
                
 
25
                public PackageReferenceInstaller(
 
26
                        IPackageRepositoryCache packageRepositoryCache,
 
27
                        IPackageActionRunner packageActionRunner,
 
28
                        IPackageManagementProjectFactory projectFactory)
 
29
                {
 
30
                        this.packageRepositoryCache = packageRepositoryCache;
 
31
                        this.packageActionRunner = packageActionRunner;
 
32
                        this.projectFactory = projectFactory;
 
33
                }
 
34
                
 
35
                public void InstallPackages(
 
36
                        IEnumerable<PackageReference> packageReferences,
 
37
                        MSBuildBasedProject project)
 
38
                {
 
39
                        List<InstallPackageAction> actions = GetInstallPackageActions(packageReferences, project);
 
40
                        packageActionRunner.Run(actions);
 
41
                }
 
42
                
 
43
                List<InstallPackageAction> GetInstallPackageActions(
 
44
                        IEnumerable<PackageReference> packageReferences,
 
45
                        MSBuildBasedProject project)
 
46
                {
 
47
                        var actions = new List<InstallPackageAction>();
 
48
                        
 
49
                        IPackageManagementProject packageManagementProject = CreatePackageManagementProject(project);
 
50
                        foreach (PackageReference packageReference in packageReferences) {
 
51
                                InstallPackageAction action = CreateInstallPackageAction(packageManagementProject, packageReference);
 
52
                                actions.Add(action);
 
53
                        }
 
54
                        
 
55
                        return actions;
 
56
                }
 
57
                
 
58
                IPackageManagementProject CreatePackageManagementProject(MSBuildBasedProject project)
 
59
                {
 
60
                        IPackageRepository repository = packageRepositoryCache.CreateAggregateRepository();
 
61
                        return projectFactory.CreateProject(repository, project);
 
62
                }
 
63
                
 
64
                InstallPackageAction CreateInstallPackageAction(
 
65
                        IPackageManagementProject project,
 
66
                        PackageReference packageReference)
 
67
                {
 
68
                        InstallPackageAction action = project.CreateInstallPackageAction();
 
69
                        action.PackageId = packageReference.Id;
 
70
                        action.PackageVersion = packageReference.Version;
 
71
                        return action;
 
72
                }
 
73
        }
 
74
}