using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.Serialization;

namespace Motion6D
{
    [Serializable()]
    public class SerializablePosition : Position, ISerializable, CategoryTheory.ICategoryObject
    {

        #region Fields

        protected object obj;

        #endregion

        #region Ctor

        public SerializablePosition()
            : base()
        {
        }

        protected SerializablePosition(SerializationInfo info, StreamingContext context)
        {
            Parameters = info.GetValue("Parameters", typeof(object));
        }

        #endregion

        #region ISerializable Members

        void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context)
        {
            info.AddValue("Parameters", Parameters, typeof(object));

        }

        #endregion
        #region ICategoryObject Members

        CategoryTheory.ICategory CategoryTheory.ICategoryObject.Category
        {
            get { throw new Exception("The method or operation is not implemented."); }
        }

        CategoryTheory.ICategoryArrow CategoryTheory.ICategoryObject.Id
        {
            get { throw new Exception("The method or operation is not implemented."); }
        }

        #endregion

        #region IAssociatedObject Members

        object CategoryTheory.IAssociatedObject.Object
        {
            get
            {
                return obj;
            }
            set
            {
                obj = value;
            }
        }

        #endregion


        #region Overriden Mebers

        public override object Parameters
        {
            get
            {
                return base.Parameters;
            }
            set
            {
                if (!(value is ISerializable))
                {
                    throw new Exception("Object should be serialisable");
                }
                base.Parameters = value;
            }
        }

        #endregion


    }
}
