protected virtual bool ResolveTemplate(DbItem item, DataStorage dataStorage)
{
if (item.TemplateID == TemplateIDs.Template)
{
return true;
}
if (item.TemplateID == TemplateIDs.BranchTemplate)
{
return true;
}
if (this.ResolveBranch(item, dataStorage))
{
return true;
}
if (dataStorage.GetFakeTemplate(item.TemplateID) != null)
{
return true;
}
if (!ID.IsNullOrEmpty(item.TemplateID))
{
return false;
}
var fingerprint = string.Concat(item.Fields.Select(f => f.Name));
// find an item with a generated template that has a matching fields set
var sourceItem = dataStorage.GetFakeItems()
.Where(si => si.TemplateID != TemplateIDs.Template)
.Where(si => dataStorage.GetFakeTemplate(si.TemplateID) != null)
.Where(si => dataStorage.GetFakeTemplate(si.TemplateID).Generated)
.FirstOrDefault(si => string.Concat(si.Fields.Select(f => f.Name)) == fingerprint);
if (sourceItem == null)
{
return false;
}
// reuse the template
item.TemplateID = sourceItem.TemplateID;
return true;
}