using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Runtime.Serialization;
using System.Data.Common;
using CategoryTheory;
namespace DataSetService
{
/// <summary>
/// Arrow between data set provider and data set consumer
/// </summary>
[SerializableAttribute()]
public class DataSetArrow : ISerializable, ICategoryArrow, IRemovableObject
{
#region Fields
/// <summary>
/// Associated object
/// </summary>
protected object obj;
/// <summary>
/// Source
/// </summary>
protected IDataSetConsumer source;
/// <summary>
/// Target
/// </summary>
protected IDataSetProvider target;
#endregion
#region Constructors
/// <summary>
/// Default constructor
/// </summary>
public DataSetArrow()
{
}
/// <summary>
/// Deserialization constructor
/// </summary>
/// <param name="info">Serialization info</param>
/// <param name="context">Streaming context</param>
public DataSetArrow(SerializationInfo info, StreamingContext context)
{
}
#endregion
#region ISerializable Members
/// <summary>
/// ISerializable interface implementation
/// </summary>
/// <param name="info">Serialization info</param>
/// <param name="context">Streaming context</param>
public void GetObjectData(SerializationInfo info, StreamingContext context)
{
}
#endregion
#region ICategoryArrow Members
/// <summary>
/// The source of this arrow
/// </summary>
public ICategoryObject Source
{
get
{
return source as ICategoryObject;
}
set
{
source = value.GetSource<IDataSetConsumer>();
}
}
/// <summary>
/// The target of this arrow
/// </summary>
public ICategoryObject Target
{
get
{
return target as ICategoryObject;
}
set
{
target = value.GetTarget<IDataSetProvider>();
source.Factory = target.Factory;
source.Add(target.DataSet);
}
}
/// <summary>
/// The "is monomorhpism" sign
/// </summary>
public bool IsMonomorphism
{
get { throw new Exception("The method or operation is not implemented."); }
}
/// <summary>
/// The "is epimorhpism" sign
/// </summary>
public bool IsEpimorphism
{
get { throw new Exception("The method or operation is not implemented."); }
}
/// <summary>
/// The "is isomorhpism" sign
/// </summary>
public bool IsIsomorphism
{
get { throw new Exception("The method or operation is not implemented."); }
}
/// <summary>
/// Composes this arrow "f" with next arrow "g"
/// </summary>
/// <param name="category"> The category of arrow</param>
/// <param name="next"> The next arrow "g" </param>
/// <returns>Composition "fg" </returns>
public ICategoryArrow Compose(ICategory category, ICategoryArrow next)
{
throw new Exception("The method or operation is not implemented.");
}
#endregion
#region IAssociatedObject Members
/// <summary>
/// The associated object
/// </summary>
public object Object
{
get
{
return obj;
}
set
{
obj = value;
}
}
#endregion
#region IRemovableObject Members
/// <summary>
/// The post remove operation
/// </summary>
public void RemoveObject()
{
if (source != null & target != null)
{
if (target.DataSet != null)
{
source.Remove(target.DataSet);
}
}
}
#endregion
}
}