/// <summary>
        /// Download MarketplaceAsset assettype = Projects
        /// </summary>
        /// <param name="assets"></param>
        /// <returns></returns>
        public void DownloadProjects(IWorkflowsQueryService client)
        {
            List<StoreActivitiesDC> request = this.projects.Select(item =>
            {
                return new StoreActivitiesDC
                {
                    Name = item.Name,
                    Version = item.Version,
                    Incaller = Environment.UserName,
                    IncallerVersion = Assembly.GetExecutingAssembly().GetName().Version.ToString(),
                };
            }).ToList<StoreActivitiesDC>();

            foreach (StoreActivitiesDC item in request)
            {
                if (IsCancelDownload)
                {
                    CancelDownload();
                    return;
                }
                var result = client.StoreActivitiesGet(item);
                if (result.Any())
                {
                    StoreActivitiesDC dc = result[0];
                    ActivityAssemblyItem assembly = new ActivityAssemblyItem { Name = dc.ActivityLibraryName, Version = System.Version.Parse(dc.Version) };
                    List<ActivityAssemblyItem> references = Caching.CacheAndDownloadAssembly(client, Caching.ComputeDependencies(client, assembly));
                    this.SaveProjectsToLocal(dc, references);
                    currentDownloadingNumber++;
                    SetDownloadProgress();
                }
            }
        }
        /// <summary>
        /// Gets the Workflow Template Activity Item based on the Selected Workflow Template, and its dependencies
        /// </summary>
        /// <returns>The Activity Item that will have the XAML required to create the workflow from the specified Workflow Template</returns>
        private WorkflowItem GetWorkflowTemplateActivityExecute(IWorkflowsQueryService client)
        {
            WorkflowItem workflowActivityTemplateItem = null;
            List<StoreActivitiesDC> storeActivitiesList = null;
            ActivityAssemblyItem workflowActivityTemplateItemAssembly = null;
            StoreActivitiesDC targetDC = null;
            ActivityLibraryDC targetLibrary = null;
            List<ActivityLibraryDC> activityLibraryList;

            // Throw if nothing selected. CanExecute should prevent this.
            if (null == SelectedWorkflowTemplateItem)
                throw new ArgumentNullException();
            // Create the Activity request
            var requestActivity = new StoreActivitiesDC()
                                                    {
                                                        Incaller = Assembly.GetExecutingAssembly().GetName().Name,
                                                        IncallerVersion = Assembly.GetExecutingAssembly().GetName().Version.ToString(),
                                                        Id = SelectedWorkflowTemplateItem.WorkflowTemplateId
                                                    };

            // Get the List of Activities that qualify, should only be one
            storeActivitiesList = client.StoreActivitiesGet(requestActivity);
            storeActivitiesList[0].StatusReply.CheckErrors();
            if (null != storeActivitiesList)
            {
                // Get the first or one and only StoreActivity
                targetDC = storeActivitiesList.First();
                // We have to get the Activity Library associated with the Store Activity
                if (0 != targetDC.ActivityLibraryId)
                {
                    List<ActivityAssemblyItem> references = new List<ActivityAssemblyItem>();
                    Utility.DoTaskWithBusyCaption("Loading...",() =>
                    {
                        // Create the Library request
                        var requestLibrary = new ActivityLibraryDC
                        {
                            Incaller = Assembly.GetExecutingAssembly().GetName().Name,
                            IncallerVersion = Assembly.GetExecutingAssembly().GetName().Version.ToString(),
                            Id = targetDC.ActivityLibraryId
                        };
                        // Get the list
                        try
                        {
                            activityLibraryList = client.ActivityLibraryGet(requestLibrary);
                        }

                        catch (FaultException<ServiceFault> ex)
                        {
                            throw new CommunicationException(ex.Detail.ErrorMessage);
                        }
                        catch (FaultException<ValidationFault> ex)
                        {
                            throw new BusinessValidationException(ex.Detail.ErrorMessage);
                        }
                        catch (Exception ex)
                        {
                            throw new CommunicationException(ex.Message);
                        }

                        // Get the First one or null, should only be one
                        targetLibrary = activityLibraryList.FirstOrDefault();
                        workflowActivityTemplateItemAssembly = DataContractTranslator.ActivityLibraryDCToActivityAssemblyItem(targetLibrary);

                        // download dependencies
                        references = Caching.CacheAndDownloadAssembly(client, Caching.ComputeDependencies(client, workflowActivityTemplateItemAssembly));
                    });

                    workflowActivityTemplateItem = DataContractTranslator.StoreActivitiyDCToWorkflowItem(targetDC, workflowActivityTemplateItemAssembly, references);
                    workflowActivityTemplateItem.WorkflowType = SelectedWorkflowTemplateItem.WorkflowTypeName;
                    workflowActivityTemplateItem.IsOpenFromServer = false;
                }
            }
            return workflowActivityTemplateItem;   // Return the ActivityItem
        }