#region Using Statements
using System;

#endregion // Using Statements

// This file is part of the ANX.Framework created by the
// "ANX.Framework developer group" and released under the Ms-PL license.
// For details see: http://anxframework.codeplex.com/license

namespace ANX.Framework.Content
{
    [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field)]
    public sealed class ContentSerializerAttribute : Attribute
    {
        public string ElementName { get; set; }

        public bool FlattenContent { get; set; }

        public bool Optional { get; set; }

        private bool allowNull = true;
        public bool AllowNull
        {
            get { return this.allowNull; }
            set { this.allowNull = value; }
        }

        public bool SharedResource { get; set; }

        private string collectionItemName;
        public string CollectionItemName
        {
            get
            {
                if (string.IsNullOrEmpty(this.collectionItemName))
                {
                    return "Item";
                }
                return this.collectionItemName;
            }
            set
            {
                if (string.IsNullOrEmpty(value))
                {
                    throw new ArgumentNullException("value");
                }
                this.collectionItemName = value;
            }
        }

        public bool HasCollectionItemName
        {
            get
            {
                return !string.IsNullOrEmpty(this.collectionItemName);
            }
        }

        public ContentSerializerAttribute Clone()
        {
            return new ContentSerializerAttribute
            {
                ElementName = this.ElementName,
                FlattenContent = this.FlattenContent,
                Optional = this.Optional,
                allowNull = this.allowNull,
                SharedResource = this.SharedResource,
                collectionItemName = this.collectionItemName
            };
        }
    }
}