private PublishPlanTemplateDTO CreatePlanTemplateDTO(PlanTemplateCM planTemplate) { return(new PublishPlanTemplateDTO { Name = planTemplate.Name, Description = planTemplate.Description, ParentPlanId = Guid.Parse(planTemplate.ParentPlanId), PlanContents = planTemplate.PlanContents }); }
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 }); }
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); } } }
/// <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); }