private void SetPropertyDefaults(DefinedContentItem item, IContent contentItem) { foreach (PropertyDefault property in item.PropertyDefaults) { if (!string.IsNullOrEmpty(property.PropertyAlias) && !string.IsNullOrEmpty(property.Value)) { string propertyValue = ""; switch (property.ValueType) { case PropertyDefaultValueType.Key: propertyValue = GetId(property.Value).ToString(); break; case PropertyDefaultValueType.StaticValue: propertyValue = property.Value; break; default: throw new Exception("Unknown property default value type for property " + property.PropertyAlias + " on key " + item.Key); } contentItem.SetValue(property.PropertyAlias, propertyValue); } } }
public static DefinedContentModel CoreItemToViewModel(DefinedContentItem item) { return(new DefinedContentModel() { Key = item.Key, ResolveType = GetViewResolveType(item.ResolveType), ResolveValue = item.ResolveValue, ParentKey = item.Parent, ParentResolveType = GetViewResolveType(item.ParentType.Value), DefinedContentParent = item.Parent == "" ? "-1" : item.Parent, CreateConfig = new CreateModel() { Enabled = item.ItemType == DefinedContentItemType.CreateAndResolve, Name = item.Name, ContentTypeAlias = item.ContentTypeAlias, PropertyMapping = item.PropertyDefaults.Select(p => new PropertyMapping { Alias = p.PropertyAlias, Value = p.Value, IsKey = p.ValueType == PropertyDefaultValueType.Key }) } }); }
public static DefinedContentModel CoreItemToViewModel(DefinedContentItem item) { return new DefinedContentModel() { Key = item.Key, ResolveType = GetViewResolveType(item.ResolveType), ResolveValue = item.ResolveValue, ParentKey = item.Parent, ParentResolveType = GetViewResolveType(item.ParentType.Value), DefinedContentParent = item.Parent == "" ? "-1" : item.Parent, CreateConfig = new CreateModel() { Enabled = item.ItemType == DefinedContentItemType.CreateAndResolve, Name = item.Name, ContentTypeAlias = item.ContentTypeAlias, PropertyMapping = item.PropertyDefaults.Select(p => new PropertyMapping { Alias = p.PropertyAlias, Value = p.Value, IsKey = p.ValueType == PropertyDefaultValueType.Key }) } }; }
private int?CreateItem(DefinedContentItem item) { if (item.CanCreate()) { this.CreatedItems.Add(item); int?parentId = ResolveParent(item); if (!parentId.HasValue) //Can't create until the parent has been created / resolved. { this.AwaitingResolution.Add(item); return(null); } if (this.AwaitingResolution.Contains(item)) { this.AwaitingResolution.Remove(item); } IContent createdContent = _contentService.CreateContentWithIdentity(item.Name, parentId.Value, item.ContentTypeAlias); this.CreatedItems.Add(item); return(createdContent.Id); } throw new Exception("Not enough information provided to create item with key. Need docTypeId, name, parent and ParentType." + item.Key); }
/// <summary> /// Determines the correct method for resolve the parent node and adds the first matched child node id to the cache. /// </summary> /// <param name="item">Defined Content Item to match</param> private void ResolveNodeId(DefinedContentItem item) { int?nodeId = null; switch (item.ResolveType) { case ResolutionType.ContentId: nodeId = ResolveItemById(item); break; case ResolutionType.Key: nodeId = ResolveItemByKey(item); break; case ResolutionType.XPath: nodeId = ResolveItemByXPath(item); break; default: throw new InvalidOperationException("Unknown parentType in Key " + item.Key); } if (nodeId.HasValue) { AddStaticItemToCache(item, nodeId.Value); } }
public void AddStaticItemToCache(DefinedContentItem item, int resolvedNodeId) { if (this.KeyToNodeIdCache.ContainsKey(item.Key)) { throw new Exception("Duplicate key detected " + item.Key); } this.KeyToNodeIdCache.TryAdd(item.Key, new StaticCacheItem(item, resolvedNodeId)); }
public void AddRelativeItemToCache(DefinedContentItem item) { if (this.KeyToNodeIdCache.ContainsKey(item.Key)) { throw new Exception("Duplicate key detected " + item.Key); } this.KeyToNodeIdCache.TryAdd(item.Key, new RelativeCacheItem(item)); }
/// <summary> /// Builds the defined content cache from already loaded XML configs. /// </summary> protected void BuildCache(List <DefinedContentItem> contentItems) { for (int i = 0; i < contentItems.Count; i++) { DefinedContentItem item = contentItems[i]; ResolveNodeId(item); if (item.Children.Count > 0) { BuildCache(item.Children); } } }
private int?ResolveParent(DefinedContentItem item) { switch (item.ParentType) { case ResolutionType.ContentId: return(ResolveParentById(item)); case ResolutionType.Key: return(ResolveParentByKey(item)); case ResolutionType.XPath: return(ResolveParentByXPath(item)); } throw new Exception("Unknown ResolutionType " + item.ParentType.Value.ToString()); }
private int?ResolveParentById(DefinedContentItem item, bool errorOnNotExists = true) { IPublishedContent resolvedNode = Umbraco.TypedContent(item.Parent); if (resolvedNode == null) { if (errorOnNotExists) { throw new Exception("Cannot resolve parent node id for key " + item.Key + ". Invalid node id " + item.Parent); } return(null); } return(resolvedNode.Id); }
/// <summary> /// Resolves a parent using XPath and adds the first matched child node id to the cache. /// </summary> /// <param name="item">Defined Content Item to match</param> private int?ResolveItemByXPath(DefinedContentItem item) { if (item.ResolveValue.Contains("$currentPage")) { AddRelativeItemToCache(item); return(null); } int?resolvedNode = XPathResolver.ResolveStatic(item.ResolveValue, false); if (!resolvedNode.HasValue) { return(CreateItem(item)); } else { return(resolvedNode.Value); } }
/// <summary> /// Resolves a node id by looking up another key /// </summary> /// <param name="item">Defined Content Item to match</param> private int?ResolveItemByKey(DefinedContentItem item) { int?nodeId = AttemptGetId(item.ResolveValue); if (!nodeId.HasValue) { if (!this.AwaitingResolution.Contains(item)) { this.AwaitingResolution.Add(item); } return(null); } if (this.AwaitingResolution.Contains(item)) { this.AwaitingResolution.Remove(item); } return(this.KeyToNodeIdCache[item.ResolveValue].ResolveId()); }
private void RecursivelyLoadDirectory(DirectoryInfo configDirectory, DefinedContentItem parent = null) { var configFile = new FileInfo(configDirectory.FullName + "\\" + Constants.CONFIG_FILE_NAME); string configFilePath = configDirectory.FullName + "\\" + Constants.CONFIG_FILE_NAME; DefinedContentItem item = null; if (System.IO.File.Exists(configFilePath)) { XmlSerializer serializer = new XmlSerializer(typeof(DefinedContentItem)); using (FileStream fs = System.IO.File.OpenRead(configFilePath)) { item = (DefinedContentItem)serializer.Deserialize(fs); item.FilePath = configFilePath; if (string.IsNullOrEmpty(item.Parent) && parent != null) { item.Parent = parent.Key; } if (parent == null) { this.ContentItems.Add(item); } else { parent.Children.Add(item); } } } var subDirs = configDirectory.GetDirectories(); foreach (var subDir in subDirs) { RecursivelyLoadDirectory(subDir, item); } }
public void AddRelativeItemToCache(DefinedContentItem item) { if (this.KeyToNodeIdCache.ContainsKey(item.Key)) throw new Exception("Duplicate key detected " + item.Key); this.KeyToNodeIdCache.TryAdd(item.Key, new RelativeCacheItem(item)); }
public void AddStaticItemToCache(DefinedContentItem item, int resolvedNodeId) { if (this.KeyToNodeIdCache.ContainsKey(item.Key)) throw new Exception("Duplicate key detected " + item.Key); this.KeyToNodeIdCache.TryAdd(item.Key, new StaticCacheItem(item, resolvedNodeId)); }
private int? ResolveParentById(DefinedContentItem item, bool errorOnNotExists = true) { IPublishedContent resolvedNode = Umbraco.TypedContent(item.Parent); if (resolvedNode == null) { if (errorOnNotExists) throw new Exception("Cannot resolve parent node id for key " + item.Key + ". Invalid node id " + item.Parent); return null; } return resolvedNode.Id; }
private int? CreateItem(DefinedContentItem item) { if (item.CanCreate()) { this.CreatedItems.Add(item); int? parentId = ResolveParent(item); if (!parentId.HasValue) //Can't create until the parent has been created / resolved. { this.AwaitingResolution.Add(item); return null; } if (this.AwaitingResolution.Contains(item)) this.AwaitingResolution.Remove(item); IContent createdContent = _contentService.CreateContentWithIdentity(item.Name, parentId.Value, item.ContentTypeAlias); this.CreatedItems.Add(item); return createdContent.Id; } throw new Exception("Not enough information provided to create item with key. Need docTypeId, name, parent and ParentType." + item.Key); }
/// <summary> /// Resolves a node id by looking up another key /// </summary> /// <param name="item">Defined Content Item to match</param> private int? ResolveItemByKey(DefinedContentItem item) { int? nodeId = AttemptGetId(item.ResolveValue); if (!nodeId.HasValue) { if (!this.AwaitingResolution.Contains(item)) this.AwaitingResolution.Add(item); return null; } if (this.AwaitingResolution.Contains(item)) this.AwaitingResolution.Remove(item); return this.KeyToNodeIdCache[item.ResolveValue].ResolveId(); }
private void RecursivelyLoadDirectory(DirectoryInfo configDirectory, DefinedContentItem parent = null) { var configFile = new FileInfo(configDirectory.FullName + "\\" + Constants.CONFIG_FILE_NAME); string configFilePath = configDirectory.FullName + "\\" + Constants.CONFIG_FILE_NAME; DefinedContentItem item = null; if (System.IO.File.Exists(configFilePath)) { XmlSerializer serializer = new XmlSerializer(typeof(DefinedContentItem)); using (FileStream fs = System.IO.File.OpenRead(configFilePath)) { item = (DefinedContentItem)serializer.Deserialize(fs); item.FilePath = configFilePath; if (string.IsNullOrEmpty(item.Parent) && parent != null) item.Parent = parent.Key; if (parent == null) this.ContentItems.Add(item); else parent.Children.Add(item); } } var subDirs = configDirectory.GetDirectories(); foreach (var subDir in subDirs) { RecursivelyLoadDirectory(subDir, item); } }
/// <summary> /// Determines the correct method for resolve the parent node and adds the first matched child node id to the cache. /// </summary> /// <param name="item">Defined Content Item to match</param> private void ResolveNodeId(DefinedContentItem item) { int? nodeId = null; switch (item.ResolveType) { case ResolutionType.ContentId: nodeId = ResolveItemById(item); break; case ResolutionType.Key: nodeId = ResolveItemByKey(item); break; case ResolutionType.XPath: nodeId = ResolveItemByXPath(item); break; default: throw new InvalidOperationException("Unknown parentType in Key " + item.Key); } if (nodeId.HasValue) AddStaticItemToCache(item, nodeId.Value); }
private int?ResolveParentByKey(DefinedContentItem item) { return(AttemptGetId(item.Parent)); }
/// <summary> /// Resolves a parent using XPath and adds the first matched child node id to the cache. /// </summary> /// <param name="item">Defined Content Item to match</param> private int? ResolveItemByXPath(DefinedContentItem item) { if (item.ResolveValue.Contains("$currentPage")) { AddRelativeItemToCache(item); return null; } int? resolvedNode = XPathResolver.ResolveStatic(item.ResolveValue, false); if (!resolvedNode.HasValue) return CreateItem(item); else return resolvedNode.Value; }
private int?ResolveParentByXPath(DefinedContentItem item) { return(XPathResolver.ResolveStatic(item.Parent)); }
private int? ResolveParent(DefinedContentItem item) { switch (item.ParentType) { case ResolutionType.ContentId: return ResolveParentById(item); case ResolutionType.Key: return ResolveParentByKey(item); case ResolutionType.XPath: return ResolveParentByXPath(item); } throw new Exception("Unknown ResolutionType " + item.ParentType.Value.ToString()); }
private int? ResolveParentByXPath(DefinedContentItem item) { return XPathResolver.ResolveStatic(item.Parent); }
private int? ResolveParentByKey(DefinedContentItem item) { return AttemptGetId(item.Parent); }
public RelativeCacheItem(DefinedContentItem item) : base(item) { }
public CacheItem(DefinedContentItem item) { this.Key = item.Key; this.DefinedContentItem = item; }
public StaticCacheItem(DefinedContentItem item, int resolvedId) : base(item) { this.StaticId = resolvedId; }