using System;
using System.Data;
using Core.Gis.GeoApi.Extensions.Feature;
using Core.Gis.GeoApi.Geometries;
namespace Core.GIS.SharpMap.Data
{
///
/// Represents a row of data in a FeatureDataTable.
///
// [System.Diagnostics.DebuggerStepThrough()]
[Serializable]
public class FeatureDataRow : DataRow, IFeature, IComparable
{
private IGeometry geometry;
private IFeatureAttributeCollection attributes;
//private FeatureDataTable tableFeatureTable;
internal FeatureDataRow(DataRowBuilder rb) : base(rb) {}
///
/// The geometry of the current feature
///
public IGeometry Geometry
{
get
{
return geometry;
}
set
{
IGeometry oldGeometry = geometry;
geometry = value;
FeatureDataRowChangeEventArgs e = new FeatureDataRowChangeEventArgs(this, DataRowAction.Change);
e.OldGeometry = oldGeometry;
((FeatureDataTable) Table).OnFeatureDataRowGeometryChanged(e);
}
}
public IFeatureAttributeCollection Attributes
{
get
{
return attributes;
}
set
{
attributes = value;
}
}
public override bool Equals(object obj)
{
if (ReferenceEquals(null, obj))
{
return false;
}
if (ReferenceEquals(this, obj))
{
return true;
}
if (obj.GetType() != GetType())
{
return false;
}
return Equals((FeatureDataRow) obj);
}
public override int GetHashCode()
{
return ItemArray.GetHashCode();
}
public int CompareTo(object obj)
{
FeatureDataRow row = (FeatureDataRow) obj;
return Table.Rows.IndexOf(this).CompareTo(Table.Rows.IndexOf(row));
}
public object Clone()
{
throw new NotImplementedException();
}
protected bool Equals(FeatureDataRow other)
{
var thisItems = ItemArray;
var otherItems = other.ItemArray;
if (thisItems.Length != otherItems.Length)
{
return false;
}
for (int i = 0; i < otherItems.Length; i++)
{
if (!Equals(thisItems[i], otherItems[i]))
{
return false;
}
}
return true;
}
}
}