using System.Collections; using System.Collections.Generic; using System.Xml.Serialization; using KGIS.Plugin.LayerProperty.Enum; using KGIS.Plugin.LayerProperty.Interface; using KGIS.Plugin.LayerProperty.Utils; namespace KGIS.Plugin.LayerProperty.Model { public abstract class AbstractTable { public class Collections : IEnumerable, IEnumerable { private IList mList; public int Count { get { return this.mList.Count; } } public AbstractField this[int index] { get { return this.mList[index]; } } public AbstractField this[long fieldid] { get { foreach (AbstractField current in this.mList) { if (current.ID == fieldid) { return current; } } return null; } } public AbstractField this[string name] { get { foreach (AbstractField current in this.mList) { if (current.Name == name) { return current; } } return null; } } public Collections() { this.mList = new List(); } public IEnumerator GetEnumerator() { foreach (AbstractField current in this.mList) { yield return current; } yield break; } IEnumerator IEnumerable.GetEnumerator() { foreach (AbstractField current in this.mList) { yield return current; } yield break; } public void Add(AbstractField item) { this.mList.Add(item); } internal bool Remove(AbstractField item) { return this.mList.Remove(item); } internal void Clear() { this.mList.Clear(); } internal bool Exist(AbstractField item) { return this[item.Name] != null; } } private AbstractTable.Collections collections; private DataSourceGeneric dataSource; private long id; private string name; private string aliasName; private string category; private string description; [XmlIgnore] public AbstractTable.Collections Collection { get { return this.collections; } set { this.collections = value; } } [XmlIgnore] public DataSourceGeneric DataSource { get { return this.dataSource; } set { this.dataSource = value; } } [XmlElement] public long ID { get { return this.id; } set { this.id = value; } } [XmlAttribute] public string Name { get { return this.name; } set { this.name = value; } } [XmlAttribute] public string AliasName { get { return this.aliasName; } set { this.aliasName = value; } } [XmlAttribute] public string Category { get { return this.category; } set { this.category = value; } } [XmlAttribute] public string Description { get { return this.description; } set { this.description = value; } } protected void Clear() { this.collections.Clear(); } protected bool Remove(AbstractField field) { return this.collections.Remove(field); } protected bool Add(AbstractField field) { if (!this.Exist(field)) { this.collections.Add(field); return true; } return false; } protected bool Exist(AbstractField field) { return this.collections.Exist(field); } protected AbstractTable() { this.collections = new AbstractTable.Collections(); } public AbstractTable(DataSourceGeneric dataSource, string name, string aliasName, string category, string description) { this.collections = new AbstractTable.Collections(); this.DataSource = dataSource; this.name = name; this.aliasName = aliasName; this.category = category; this.description = description; } public abstract AbstractField Create(string name, string aliasName, DBDataType dbType, IKgisDictionary dictionary, FieldKeyType fieldKeyType, string defaultValue, int length, string description); public override string ToString() { if (this.aliasName == null || this.aliasName.Equals("")) { return this.name; } return this.aliasName; } } }