private PublishPlanTemplateDTO CreatePlanTemplateDTO(PlanTemplateCM planTemplate)
 {
     return(new PublishPlanTemplateDTO
     {
         Name = planTemplate.Name,
         Description = planTemplate.Description,
         ParentPlanId = Guid.Parse(planTemplate.ParentPlanId),
         PlanContents = planTemplate.PlanContents
     });
 }
예제 #2
0
        private Document ConvertToSearchDocument(PlanTemplateCM cm)
        {
            var document = new Document()
            {
                { "parentPlanId", cm.ParentPlanId.ToString() },
                { "name", cm.Name },
                { "description", cm.Description },
                { "owner", cm.OwnerName }
            };

            return(document);
        }
        public async Task Generate(PlanTemplateCM planTemplate, string fr8AccountId)
        {
            var storage = await _tagGenerator.GetTags(planTemplate, fr8AccountId);

            foreach (var tag in storage.WebServiceTemplateTags)
            {
                var tags           = tag.TagsWithIcons.Select(x => x.Key).ToArray();
                var pageName       = GeneratePageNameFromTags(tags);
                var pageDefinition = _pageDefinitionService.Get(x => x.PageName == pageName && x.Type == PageType).FirstOrDefault() ?? new PageDefinitionDO
                {
                    PageName = pageName,
                    Tags     = tags,
                    Type     = PageType,
                    Title    = tag.Title
                };
                if (!pageDefinition.PlanTemplatesIds.Contains(planTemplate.ParentPlanId))
                {
                    pageDefinition.PlanTemplatesIds.Add(planTemplate.ParentPlanId);
                }
                pageDefinition.Url = new Uri($"{_templateGenerator.BaseUrl}/{pageName}");
                _pageDefinitionService.CreateOrUpdate(pageDefinition);
                var relatedPageDefinitions = _pageDefinitionService.GetAll().Where(x => x.PlanTemplatesIds.Contains(planTemplate.ParentPlanId));
                var curPageDefinition      = relatedPageDefinitions.FirstOrDefault(x => x.PageName == pageName);
                var curRelatedPlans        = new List <PublishPlanTemplateDTO>();
                foreach (var planTemplateId in curPageDefinition.PlanTemplatesIds)
                {
                    var planDto = _planTemplateService.GetPlanTemplateDTO(fr8AccountId, Guid.Parse(planTemplateId)).Result;
                    if (planDto != null)
                    {
                        curRelatedPlans.Add(planDto);
                    }
                }
                var relatedPlans = new List <Tuple <string, string, string> >();
                foreach (var publishPlanTemplateDTO in curRelatedPlans)
                {
                    relatedPlans.Add(new
                                     Tuple <string, string, string>(
                                         publishPlanTemplateDTO.Name,
                                         publishPlanTemplateDTO.Description ?? publishPlanTemplateDTO.Name,
                                         CloudConfigurationManager.GetSetting("HubApiUrl") +
                                         "plan_templates/createplan/?id=" + publishPlanTemplateDTO.ParentPlanId));
                }
                await _templateGenerator.Generate(new PlanCategoryTemplate(), pageName, new Dictionary <string, object>
                {
                    ["Name"]         = pageName,
                    ["Tags"]         = tag.TagsWithIcons,
                    ["RelatedPlans"] = relatedPlans
                });
            }
        }
 private PlanTemplateCM CreatePlanTemplateCM(PublishPlanTemplateDTO dto,
                                             PlanTemplateCM existing, Fr8AccountDO account)
 {
     return(new PlanTemplateCM()
     {
         Name = dto.Name,
         Description = dto.Description,
         ParentPlanId = dto.ParentPlanId.ToString(),
         PlanContents = dto.PlanContents,
         Version = existing?.Version ?? 1,
         OwnerId = account.Id,
         OwnerName = account.UserName
     });
 }
예제 #5
0
        public async Task CreateOrUpdate(PlanTemplateCM planTemplate)
        {
            using (var searchClient = CreateAzureSearchClient())
            {
                using (var indexClient = searchClient.Indexes.GetClient(GetPlanTemplateIndexName()))
                {
                    var document = ConvertToSearchDocument(planTemplate);

                    var batch = IndexBatch.New(
                        new IndexAction[]
                    {
                        IndexAction.MergeOrUpload(document)
                    }
                        );

                    await indexClient.Documents.IndexAsync(batch);
                }
            }
        }
예제 #6
0
        /// <summary>
        /// The result of this method is a a list of ActivityTemplateTag and WebServiceTemplateTag classes
        /// For a plan, that consists of activity named "A" of a webservice "Y"
        /// and of activity named "B" of a webservice "Z"
        /// the result would be:
        /// ActivityTemplateTag: A
        /// ActivityTemplateTag: B
        /// ActivityTemplateTag: A, B
        /// WebServiceTemplateTag: Y
        /// WebServiceTemplateTag: Z
        /// WebServiceTemplateTag: Y, Z
        /// </summary>
        public async Task <TemplateTagStorage> GetTags(PlanTemplateCM planTemplateCM, string fr8AccountId)
        {
            var result = new TemplateTagStorage();

            //requesting all activity templates
            //var hmacService = ObjectFactory.GetInstance<IHMACService>();
            //var client = ObjectFactory.GetInstance<IRestfulServiceClient>();

            //var uri = new Uri(CloudConfigurationManager.GetSetting("HubApiUrl") + "/activitytemplates");
            //var headers = await hmacService.GenerateHMACHeader(
            //    uri,
            //    "PlanDirectory",
            //    CloudConfigurationManager.GetSetting("PlanDirectorySecret"),
            //    fr8AccountId,
            //    null
            //);

            var activityCategories = _activity.GetAvailableActivityGroups();
            // await client.GetAsync<IEnumerable<ActivityTemplateCategoryDTO>>(
            //uri, headers: headers);

            var activityDict = activityCategories
                               .SelectMany(a => a.Activities)
                               .ToDictionary(k => $"{k.Name};{k.Version};{k.Terminal.Name}:{k.Terminal.Version}");

            //1. getting ids of used templates
            var plan = planTemplateCM.PlanContents;
            var usedActivityTemplatesIds = new HashSet <string>();

            if (plan.SubPlans != null)
            {
                foreach (var subplan in plan.SubPlans)
                {
                    CollectActivityTemplateIds(subplan, usedActivityTemplatesIds);
                }
            }

            if (usedActivityTemplatesIds.Count == 0)
            {
                return(new TemplateTagStorage());
            }

            //2. getting used templates
            var usedActivityTemplates = usedActivityTemplatesIds.Intersect(activityDict.Keys)
                                        .Select(k => activityDict[k])
                                        .Distinct(ActivityTemplateDTO.IdComparer)
                                        .OrderBy(a => a.Name)
                                        .ToList();

            if (usedActivityTemplates.Count != usedActivityTemplatesIds.Count)
            {
                throw new ApplicationException("Template references activity that is not registered in Hub");
            }
            //3. adding tags for activity templates
            var activityTemplatesCombinations = GetCombinations <ActivityTemplateDTO>(usedActivityTemplates);

            activityTemplatesCombinations.ForEach(a => result.ActivityTemplateTags.Add(new ActivityTemplateTag(a)));

            //4. adding tags for webservices
            var usedWebServices = usedActivityTemplates
                                  .SelectMany(x => x.Categories)
                                  .Where(a => !ActivityCategories.ActivityCategoryIds.Any(b => b == a.Id)) //remove "common" categories
                                  .Distinct(ActivityCategoryDTO.NameComparer)
                                  .OrderBy(b => b.Name)
                                  .ToList();

            var webServicesCombination = GetCombinations <ActivityCategoryDTO>(usedWebServices);

            webServicesCombination.ForEach(
                a => result.WebServiceTemplateTags.Add(new WebServiceTemplateTag(a))
                );

            return(result);
        }