Example #1
0
        /// <summary>
        /// Gets the used items of source item.
        /// </summary>
        /// <param name="client">Tridion client object.</param>
        /// <param name="tcmItem">Item TCM id.</param>
        /// <param name="itemTypes">The item types.</param>
        /// <returns></returns>
        public static List <string> GetUsedItems(IAlchemyCoreServiceClient client, string tcmItem, ItemType[] itemTypes = null)
        {
            UsedItemsFilterData filter = new UsedItemsFilterData();

            filter.BaseColumns = ListBaseColumns.Id;
            if (itemTypes != null)
            {
                filter.ItemTypes = itemTypes;
            }

            List <string> items = client.GetListXml(tcmItem, filter).ToList().Select(x => x.TcmId).ToList();

            return(items);
        }
Example #2
0
        private void AddUsedSchemas(SchemaData mainSchema, IList <SchemaData> allSchemas)
        {
            log.Info($"Called AddUsedSchemas to find dependent schemas for {mainSchema.Title} - total number of schemas found so far: {allSchemas.Count()}");
            UsedItemsFilterData filter = new UsedItemsFilterData
            {
                ItemTypes = new ItemType[] { ItemType.Category }
            };
            XElement list           = Client.GetListXml(mainSchema.Id, filter);
            var      usedCategories = list.Descendants();

            if (usedCategories.Count() > 0)
            {
                foreach (var elmt in usedCategories)
                {
                    CategoryData cat = (CategoryData)Client.Read(elmt.Attribute("ID").Value, new ReadOptions());
                    if (cat.KeywordMetadataSchema != null && cat.KeywordMetadataSchema.IdRef != "tcm:0-0-0")
                    {
                        if (!allSchemas.Select(s => s.Id).Contains(cat.KeywordMetadataSchema.IdRef))
                        {
                            SchemaData s = Client.Read(cat.KeywordMetadataSchema.IdRef, new ReadOptions()) as SchemaData;
                            allSchemas.Add(s);
                            AddUsedSchemas(s, allSchemas);
                        }
                    }
                }
            }
            filter = new UsedItemsFilterData
            {
                ItemTypes = new ItemType[] { ItemType.Schema }
            };
            list = Client.GetListXml(mainSchema.Id, filter);
            var unprocessedSchemas = list.Descendants().Where(i => !(allSchemas.Select(s => s.Id).Contains(i.Attribute("ID").Value)));

            if (unprocessedSchemas.Count() > 0)
            {
                IEnumerable <SchemaData> usedSchemas = GetConvertibleSchemas(unprocessedSchemas);
                //allSchemas = allSchemas.Union(usedSchemas).ToList();
                allSchemas.AddRange(usedSchemas.Where(p => !allSchemas.Any(p2 => p2.Id == p.Id)));
                foreach (SchemaData usedSchema in usedSchemas)
                {
                    AddUsedSchemas(usedSchema, allSchemas);
                }
            }
        }
Example #3
0
        private void ConvertTemplate(TemplateData template)
        {
            _log.Debug($"Converting template {template.Title}");
            ViewDefinition viewDefinition;

            if (this.ContainsView(template.Id))
            {
                _log.Debug($"schema {template.Title} was already in the model registry");
                viewDefinition = Views.First(m => m.TcmUri == template.Id);
            }
            else
            {
                _log.Debug($"creating new ViewDefinition for template {template.Title}");
                viewDefinition        = new ViewDefinition();
                viewDefinition.Title  = template.Title;
                viewDefinition.TcmUri = template.Id;
                if (string.IsNullOrEmpty(template.Metadata))
                {
                    viewDefinition.ViewName = MakeCsName(template.Title, true);
                }
                else
                {
                    viewDefinition.ViewName = GetFieldValue(template.Metadata, "view");
                }

                if (template is ComponentTemplateData)
                {
                    viewDefinition.ViewPurpose = ViewPurpose.Entity;
                    UsedItemsFilterData filter = new UsedItemsFilterData()
                    {
                        ItemTypes = new[] { ItemType.Schema }
                    };

                    var associatedSchemas = Client.GetList(template.Id, filter).Cast <SchemaData>();

                    var allAssociatedModels = associatedSchemas?.Select(s => ModelRegistry.GetViewModelDefinition(s.Id)).Where(a => a.Purpose == SchemaPurpose.Component);

                    if (allAssociatedModels.Count() > 1)
                    {
                        _log.Warn($"found component template {template.Title} ({template.Id}) with multiple associated schemas. We will use the base class {Config.BaseClasses.FirstOrDefault()} instead");
                        viewDefinition.ModelTypeName = Config.BaseClasses.FirstOrDefault();
                        //_log.Info($"Template {template.Title} is linked to more than one schema. We need to merge models before we can continue");
                        //var mergedModel = ModelRegistry.MergeModelDefinitions(allAssociatedModels);
                        //viewDefinition.AssociatedModelDefinition = mergedModel;
                        //viewDefinition.ModelTypeName = mergedModel.TypeName;
                    }
                    else if (allAssociatedModels.Count() == 0)
                    {
                        _log.Warn($"found component template {template.Title} ({template.Id}) without any associated schema. We will use the base class {Config.BaseClasses.FirstOrDefault()} instead");
                        viewDefinition.ModelTypeName = Config.BaseClasses.FirstOrDefault();
                    }
                    else
                    {
                        viewDefinition.AssociatedModelDefinition = allAssociatedModels.First();
                        viewDefinition.ModelTypeName             = viewDefinition.AssociatedModelDefinition.TypeName;
                    }
                }
                else // this is a page template, so it has its own associated model definition
                {
                    viewDefinition.AssociatedModelDefinition = ModelRegistry.GetViewModelDefinition(template.Id);
                    viewDefinition.ModelTypeName             = viewDefinition.AssociatedModelDefinition.TypeName;
                    viewDefinition.ViewPurpose = ViewPurpose.Page;
                }
            }

            currentView = viewDefinition;

            if (this.ContainsView(template.Id))
            {
                Views.Add(viewDefinition);
            }
            else
            {
                Views.Add(viewDefinition);
            }
        }
 private static List<string> GetUsedItems(string tcmItem)
 {
     UsedItemsFilterData filter = new UsedItemsFilterData();
     filter.BaseColumns = ListBaseColumns.Id;
     List<string> items = Client.GetListXml(tcmItem, filter).ToList().Select(x => x.TcmId).ToList();
     return items;
 }