public FlowToken Execute(
           EntityToken entityToken,
           ActionToken actionToken,
           FlowControllerServicesContainer flowControllerServicesContainer)
        {
            string currentConsoleId = flowControllerServicesContainer.
               GetService<IManagementConsoleMessageService>().CurrentConsoleId;
            if (entityToken is NugetRootEntityToken)
            {
                var dataEntityToken = entityToken as NugetRootEntityToken;

                string url = string.Format("/Composite/InstalledPackages/Composite.Integration.Nuget/views/NugetPackageManager.cshtml");
                ConsoleMessageQueueFacade.Enqueue(new OpenViewMessageQueueItem
                {
                    Url = url,
                    ViewId = Guid.NewGuid().ToString(),
                    ViewType = ViewType.Main,
                    Label = "loading..."
                }, currentConsoleId);
              
            }
            else if (entityToken is NugetPackageEntityToken)
            {
                var pm = new CompositePackageManager();
                var token = entityToken as NugetPackageEntityToken;
                IManagementConsoleMessageService managementConsoleMessageService = flowControllerServicesContainer.GetService<IManagementConsoleMessageService>();

                if(token.IsLocalPackage())
                {
                    try
                    {
                        pm.UninstallPackage(token.PackageId, new NuGet.SemanticVersion(token.Version),false,true);
                       
                    }catch(InvalidOperationException ex)
                    {
                       
   
                      //  ConsoleMessageQueueFacade.Enqueue(new MessageBoxMessageQueueItem { DialogType = DialogType.Question, Message = ex.Message, Title = "Package Manager" }, managementConsoleMessageService.CurrentConsoleId);
                        ConsoleMessageQueueFacade.Enqueue(new MessageBoxMessageQueueItem { DialogType = DialogType.Error, Message = ex.Message, Title = "Package Manager" }, managementConsoleMessageService.CurrentConsoleId);
                   //     ConsoleMessageQueueFacade.Enqueue(new MessageBoxMessageQueueItem { DialogType = DialogType.Message, Message = ex.Message, Title = "Package Manager" }, managementConsoleMessageService.CurrentConsoleId);
                   //     ConsoleMessageQueueFacade.Enqueue(new MessageBoxMessageQueueItem { DialogType = DialogType.Warning, Message = ex.Message, Title = "Package Manager" }, managementConsoleMessageService.CurrentConsoleId);
                 //       throw;
                    }
                }
                else if(token.IsRemotePackage())
                {
                    try
                    {


                        pm.InstallPackage(token.PackageId, new NuGet.SemanticVersion(token.Version));
                    }
                    catch(Exception ex)
                    {
                        ConsoleMessageQueueFacade.Enqueue(new MessageBoxMessageQueueItem { DialogType = DialogType.Error, Message = ex.Message, Title = "Package Manager" }, managementConsoleMessageService.CurrentConsoleId);
                    

                    }
                    finally
                    {
                        ConsoleMessageQueueFacade.Enqueue(new RefreshTreeMessageQueueItem { EntityToken = NugetEntityToken.InstalledEntityToken }, currentConsoleId);
                   
                    }
                
                }else if(token.IsUpdatePackage())
                {
                    pm.UpdatePackage(token.PackageId, true, false);

                    ConsoleMessageQueueFacade.Enqueue(new RefreshTreeMessageQueueItem { EntityToken = NugetEntityToken.InstalledEntityToken }, currentConsoleId);
                
                }
            }
            ConsoleMessageQueueFacade.Enqueue(new RefreshTreeMessageQueueItem { EntityToken = new NugetRootEntityToken()}, currentConsoleId);
            return null;
        }
        public IEnumerable<Element> GetChildren(EntityToken parentEntityToken,
                            Dictionary<string, string> piggybag)
        {
            if (parentEntityToken is NugetEntityToken && parentEntityToken.Id == "AvaliblePackages")
            {

                var pm = new CompositePackageManager();
                var locals = pm.LocalRepository.GetPackages().ToList().GroupBy(p=>p.Id)
                    .Select(key => key.OrderByDescending(p=>p.Version).First());
               
                
                var Updates = pm.SourceRepository.GetUpdates(locals, false, false).ToList();
                
                var CompositeNugetPackages = pm.SourceRepository.GetPackages().Where(p => p.Tags.IndexOf("composite-c1") != -1)
                    .AsEnumerable().Where(PackageExtensions.IsListed).GroupBy(p => p.Id)
                    .Select(key => key.OrderByDescending(p => p.Version).First());
                var NotInstalledCompositePackages = CompositeNugetPackages
                    .Where(p => !locals.Any(l => l.Id == p.Id));


                foreach (var p in Updates)
                {
                    yield return new Element(this.Context.CreateElementHandle(
                    NugetPackageEntityToken.UpdateablePackageEntityToken(p.Id,p.Version.ToString())))
                    {
                        VisualData = new ElementVisualizedData
                        {
                            Label = string.Format("{0} {1}", p.Id, p.Version),
                            ToolTip = string.Format("Update from version {0}",locals.First(lp=>p.Id==lp.Id).Version),
                            HasChildren = false,
                            Icon = CommonCommandIcons.Refresh
                        }
                    };
                }
                foreach (var p in NotInstalledCompositePackages)
                {
                    yield return new Element(this.Context.CreateElementHandle(
                        NugetPackageEntityToken.RemotePackageEntityToken(p.Id,p.Version.ToString())))
                    {
                        VisualData = new ElementVisualizedData
                        {
                            Label = string.Format("{0} {1}",p.Id ,p.Version),
                            ToolTip = "Nuget Sources",
                            HasChildren = false,
                            Icon = CommonCommandIcons.AddNew
                        }
                    };
                }
            }
            else if (parentEntityToken is NugetEntityToken && parentEntityToken.Id == "InstalledPackages")
            {
                var pm = new CompositePackageManager();

             


                foreach (var p in pm.LocalRepository.GetPackages())
                {                      
                   
                    yield return new Element(this.Context.CreateElementHandle(
                   NugetPackageEntityToken.LocalPackageEntityToken(p.Id,p.Version.ToString())))
                    {
                        VisualData = new ElementVisualizedData
                        {
                            Label = string.Format("{0} {1}", p.Id, p.Version),
                            ToolTip = "Nuget Sources",
                            HasChildren = false,
                            Icon = CommonElementIcons.Advanced
                        }
                    };

                }
            }
            else if (parentEntityToken is NugetRootEntityToken)
            {
             //   var pm = new CompositePackageManager();



                yield return new Element(this.Context.CreateElementHandle(
                  new NugetEntityToken("InstalledPackages")))
                {
                    VisualData = new ElementVisualizedData
                    {
                        Label = "Installed Packages",
                        ToolTip = "Already Installed Packages",
                        HasChildren = true,
                        Icon = CommonElementIcons.Folder
                    },
                };


                yield return new Element(this.Context.CreateElementHandle(
                  new NugetEntityToken("AvaliblePackages")))
                {
                    VisualData = new ElementVisualizedData
                    {
                        Label = "Avalible Packages",
                        ToolTip = "Avalible Packages",
                        HasChildren = true,
                        Icon = CommonElementIcons.Earth
                    },
                };

                yield return new Element(this.Context.CreateElementHandle(
                  new NugetEntityToken("Respositories")))
                {
                    VisualData = new ElementVisualizedData
                    {
                        Label = "Nuget Sources",
                        ToolTip = "Nuget Sources",
                        HasChildren = false,
                        Icon = CommonElementIcons.Advanced
                    }
                };


            }
        }