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);
                }
            }
        }
Example #2
0
        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
                    })
                }
            });
        }
Example #3
0
        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());
        }
Example #10
0
        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);
        }
Example #11
0
        /// <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);
            }
        }
Example #12
0
        /// <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());
        }
Example #13
0
        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);
            }
        }
Example #14
0
		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));
		}
Example #15
0
		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));
		}
Example #16
0
		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;
		}
Example #17
0
		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);
		}
Example #18
0
		/// <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();
		}
Example #19
0
		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);
			}
		}
Example #20
0
		/// <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);
		}
Example #21
0
 private int?ResolveParentByKey(DefinedContentItem item)
 {
     return(AttemptGetId(item.Parent));
 }
Example #22
0
		/// <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;
		}
Example #23
0
 private int?ResolveParentByXPath(DefinedContentItem item)
 {
     return(XPathResolver.ResolveStatic(item.Parent));
 }
Example #24
0
		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());
		}
Example #25
0
		private int? ResolveParentByXPath(DefinedContentItem item)
		{
			return XPathResolver.ResolveStatic(item.Parent);
		}
Example #26
0
		private int? ResolveParentByKey(DefinedContentItem item)
		{
			return AttemptGetId(item.Parent);
		}
		public RelativeCacheItem(DefinedContentItem item)
			: base(item)
		{
		}
Example #28
0
		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);
				}
			}
		}
Example #29
0
 public CacheItem(DefinedContentItem item)
 {
     this.Key = item.Key;
     this.DefinedContentItem = item;
 }
 public RelativeCacheItem(DefinedContentItem item)
     : base(item)
 {
 }
		public StaticCacheItem(DefinedContentItem item, int resolvedId)
			: base(item)
		{
			this.StaticId = resolvedId;
		}
 public StaticCacheItem(DefinedContentItem item, int resolvedId)
     : base(item)
 {
     this.StaticId = resolvedId;
 }
Example #33
0
		public CacheItem(DefinedContentItem item)
		{
			this.Key = item.Key;
			this.DefinedContentItem = item;
		}