christian@0: /* christian@0: * Postarc christian@0: * christian@0: * Author: christian@0: * Christian Lins christian@0: * christian@0: * Copyright: christian@0: * Copyright (C) 2012 Intevation GmbH christian@0: * christian@0: * This program is free software: you can redistribute it and/or modify christian@0: * it under the terms of the GNU Lesser General Public License as published by christian@0: * the Free Software Foundation, either version 3 of the License, or christian@0: * (at your option) any later version. christian@0: * christian@0: * This program is distributed in the hope that it will be useful, christian@0: * but WITHOUT ANY WARRANTY; without even the implied warranty of christian@0: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the christian@0: * GNU General Public License for more details. christian@0: * christian@0: * You should have received a copy of the GNU Lesser General Public License christian@0: * along with this program. If not, see . christian@0: */ christian@0: christian@0: using System; christian@0: using System.Collections.Generic; christian@0: using System.Linq; christian@0: using System.Text; christian@0: using ESRI.ArcGIS.Geodatabase; christian@0: using ESRI.ArcGIS.Geometry; christian@0: using ESRI.ArcGIS.esriSystem; christian@0: using Npgsql; christian@0: using NpgsqlTypes; christian@0: using System.Runtime.InteropServices; christian@0: using System.Diagnostics; christian@0: using Postarc.Geodatabase; christian@0: christian@0: namespace Postarc.Feature christian@0: { christian@0: [Guid("77FB1E58-69A9-4bac-AFB6-76F0F85D3B75"), ClassInterface(ClassInterfaceType.None)] christian@0: public class FeatureClass : christian@0: IDataset, IDatasetEdit, IDatasetEditInfo, christian@0: IFeatureClass, christian@0: IGeoDataset, christian@0: //IModelInfo, christian@0: ISchemaLock, christian@0: ISubtypes, christian@0: ITable /* inherits IClass */, ITableCapabilities, christian@0: ITopology, christian@0: IValidation, IValidation2 christian@0: { christian@0: private string browseName = "BrowseName"; christian@0: private string clsid = "{77FB1E58-69A9-4bac-AFB6-76F0F85D3B75}"; christian@0: private IFields fields = new FieldsClass(); christian@0: private string shapeFieldName = "shape"; christian@0: private esriGeometryType shapeType = esriGeometryType.esriGeometryPoint; christian@0: christian@0: protected PostGISConnection connection; christian@0: protected ISpatialReference spatialReference = FeatureLayer.CreateGeographicSpatialReference(); christian@0: protected string tableName; christian@0: protected Workspace workspace = new Workspace(); christian@0: christian@0: internal PostGISConnection PostGISConnection christian@0: { christian@0: get christian@0: { christian@0: return this.connection; christian@0: } christian@0: } christian@0: christian@0: /// christian@0: /// Name of the PostGIS table behind this FeatureClass. christian@0: /// christian@0: internal string TableName christian@0: { christian@0: get christian@0: { christian@0: return this.tableName; christian@0: } christian@0: } christian@0: christian@0: public FeatureClass(esriGeometryType shapeType) christian@0: { christian@0: this.shapeType = shapeType; christian@0: christian@0: IFieldEdit field = new FieldClass(); christian@0: field.Name_2 = "OID"; christian@0: field.Type_2 = esriFieldType.esriFieldTypeOID; christian@0: AddField(field); christian@0: christian@0: field = new FieldClass(); christian@0: field.Name_2 = ShapeFieldName; christian@0: field.Type_2 = esriFieldType.esriFieldTypeGeometry; christian@0: AddField(field as IField); christian@0: christian@0: field = new FieldClass(); christian@0: field.Name_2 = "test"; christian@0: field.Type_2 = esriFieldType.esriFieldTypeInteger; christian@0: // AddField(field as IField); christian@0: } christian@0: christian@0: public FeatureClass(PostGISConnection conn, string tableName) christian@0: { christian@0: this.connection = conn; christian@0: this.tableName = tableName; christian@0: christian@0: LoadFieldDefinitionFromTable(); christian@0: } christian@0: christian@0: /// christian@0: /// christian@0: /// christian@0: /// christian@0: protected internal int NextOID() christian@0: { christian@0: NpgsqlConnection conn = this.connection.Open(); christian@0: NpgsqlCommand cmd = new NpgsqlCommand( christian@0: "SELECT Max(" + FeatureCursor.POSTARC_OID_COLUMN + ") FROM " + tableName, conn); christian@0: int maxOID = Convert.ToInt32(cmd.ExecuteScalar()); christian@0: conn.Close(); christian@0: return maxOID + 1; christian@0: } christian@0: christian@0: protected internal void LoadFieldDefinitionFromTable() christian@0: { christian@0: NpgsqlConnection conn = this.connection.Open(); christian@0: christian@0: NpgsqlCommand cmd = new NpgsqlCommand("SELECT * FROM " + tableName + " LIMIT 1", conn); christian@0: NpgsqlDataReader cur = cmd.ExecuteReader(); christian@0: for (int n = 0; n < cur.FieldCount; n++) christian@0: { christian@0: NpgsqlDbType type = cur.GetFieldNpgsqlDbType(n); christian@0: string name = cur.GetName(n); christian@0: if (name.Equals(FeatureCursor.POSTARC_OID_COLUMN, StringComparison.OrdinalIgnoreCase)) christian@0: { christian@0: name = FeatureCursor.ARCGIS_OID_COLUMN; christian@0: AddField(name, type, true); christian@0: } christian@0: else if (name.Equals(FeatureCursor.POSTARC_SHAPE_COLUMN, StringComparison.OrdinalIgnoreCase)) christian@0: { christian@0: type = NpgsqlDbType.Point; christian@0: AddField(name, type); christian@0: } christian@0: else christian@0: { christian@0: AddField(name, type); christian@0: } christian@0: } christian@0: conn.Close(); christian@0: } christian@0: christian@0: protected void AddField(string name, NpgsqlDbType type, bool isOID = false) christian@0: { christian@0: esriFieldType esriType = esriFieldType.esriFieldTypeBlob; christian@0: switch (type) christian@0: { christian@0: case NpgsqlDbType.Bigint: christian@0: case NpgsqlDbType.Integer: christian@0: if (isOID) christian@0: { christian@0: esriType = esriFieldType.esriFieldTypeOID; christian@0: AddField(name, esriType, false); christian@0: } christian@0: else christian@0: { christian@0: esriType = esriFieldType.esriFieldTypeInteger; christian@0: AddField(name, esriType); christian@0: } christian@0: break; christian@0: case NpgsqlDbType.Point: christian@0: esriType = esriFieldType.esriFieldTypeGeometry; christian@0: this.shapeType = esriGeometryType.esriGeometryPoint; christian@0: this.shapeFieldName = name; christian@0: AddField(name, esriType, true, true); christian@0: break; christian@0: case NpgsqlDbType.Varchar: christian@0: esriType = esriFieldType.esriFieldTypeString; christian@0: AddField(name, esriType, true, false, 255); christian@0: break; christian@0: } christian@0: } christian@0: christian@0: protected void AddField( christian@0: string name, christian@0: esriFieldType type, christian@0: bool editable = true, christian@0: bool isGeometry = false, christian@0: int length = 4) christian@0: { christian@0: IFieldEdit field = new FieldClass(); christian@0: field.Name_2 = name; christian@0: field.Type_2 = type; christian@0: field.AliasName_2 = name; christian@0: field.Editable_2 = editable; christian@0: if (isGeometry) christian@0: { christian@0: field.GeometryDef_2 = new Point() as IGeometryDef; christian@0: Debug.Assert(field.GeometryDef != null); christian@0: } christian@0: field.Length_2 = length; christian@0: AddField(field as IField); christian@0: } christian@0: christian@0: public void AddField(IField field) christian@0: { christian@0: IFieldsEdit fields = this.fields as IFieldsEdit; christian@0: fields.AddField(field); christian@0: } christian@0: christian@0: public void AddIndex(IIndex Index) christian@0: { christian@0: christian@0: } christian@0: christian@0: public string AliasName christian@0: { christian@0: get christian@0: { christian@0: return "AliasName"; christian@0: } christian@0: } christian@0: christian@0: public IField AreaField christian@0: { christian@0: get christian@0: { christian@0: return null; // null is correct when ShapeType is point christian@0: } christian@0: } christian@0: christian@0: public UID CLSID christian@0: { christian@0: get christian@0: { christian@0: UID uid = new UID(); christian@0: uid.Value = clsid; christian@0: return uid; christian@0: } christian@0: } christian@0: christian@0: /// christian@0: /// Calls CreateFeatureBuffer() christian@0: /// christian@0: /// christian@0: public IFeature CreateFeature() christian@0: { christian@0: Debug.WriteLine("PostGISFeatureClass::CreateFeature()"); christian@0: return CreateFeatureBuffer() as IFeature; christian@0: } christian@0: christian@0: /// christian@0: /// Creates a new Postarc.Feature.Feature instance as IFeatureBuffer. christian@0: /// christian@0: /// christian@0: public IFeatureBuffer CreateFeatureBuffer() christian@0: { christian@0: Debug.WriteLine("PostGISFeatureClass::CreateFeatureBuffer()"); christian@0: int oidIdx = fields.FindField(FeatureCursor.ARCGIS_OID_COLUMN); christian@0: object[] row = new object[fields.FieldCount]; christian@0: row[oidIdx] = NextOID(); christian@0: return new Feature(this, fields, oidIdx, row); christian@0: } christian@0: christian@0: public void DeleteField(IField Field) christian@0: { christian@0: christian@0: } christian@0: christian@0: public void DeleteIndex(IIndex Index) christian@0: { christian@0: christian@0: } christian@0: christian@0: public ESRI.ArcGIS.esriSystem.UID EXTCLSID christian@0: { christian@0: get christian@0: { christian@0: return null; christian@0: } christian@0: } christian@0: christian@0: public object Extension christian@0: { christian@0: get christian@0: { christian@0: return new DummyClassExtension() as IClassExtension; christian@0: } christian@0: } christian@0: christian@0: public IPropertySet ExtensionProperties christian@0: { christian@0: get christian@0: { christian@0: Debug.WriteLine("PostGISFeatureClass::ExtensionProperties"); christian@0: return new PropertySetClass(); christian@0: } christian@0: } christian@0: christian@0: public int FeatureClassID christian@0: { christian@0: get christian@0: { christian@0: return GetHashCode(); // TODO: Return unique ID for this feature class christian@0: } christian@0: } christian@0: christian@0: public int FeatureCount(IQueryFilter QueryFilter) christian@0: { christian@0: NpgsqlConnection conn = this.connection.Open(); christian@0: NpgsqlCommand cmd = new NpgsqlCommand("SELECT Count(*) FROM " + tableName, conn); christian@0: int cnt = Convert.ToInt32(cmd.ExecuteScalar()); christian@0: conn.Close(); christian@0: return cnt; christian@0: } christian@0: christian@0: public IFeatureDataset FeatureDataset christian@0: { christian@0: get christian@0: { christian@0: return new Postarc.Geodatabase.FeatureDataset(this); christian@0: } christian@0: } christian@0: christian@0: public esriFeatureType FeatureType christian@0: { christian@0: get christian@0: { christian@0: return esriFeatureType.esriFTSimple; christian@0: } christian@0: } christian@0: christian@0: public IFields Fields christian@0: { christian@0: get christian@0: { christian@0: return fields; christian@0: } christian@0: } christian@0: christian@0: public int FindField(string Name) christian@0: { christian@0: return this.fields.FindField(Name); christian@0: } christian@0: christian@0: public IFeature GetFeature(int oid) christian@0: { christian@0: QueryFilterClass filter = new QueryFilterClass(); christian@0: filter.WhereClause = "OID in (" + oid + ")"; christian@0: IFeatureCursor cur = Search(filter, false); christian@0: return cur.NextFeature(); christian@0: } christian@0: christian@0: public IFeatureCursor GetFeatures(object fids, bool recycling) christian@0: { christian@0: QueryFilterClass filter = new QueryFilterClass(); christian@0: StringBuilder buf = new StringBuilder(); christian@0: buf.Append(FeatureCursor.POSTARC_OID_COLUMN); christian@0: buf.Append(" in ("); christian@0: int[] oids = (int[])fids; christian@0: for (int n = 0; n < oids.Length; n++) christian@0: { christian@0: buf.Append(oids[n]); christian@0: if (n != oids.Length - 1) christian@0: buf.Append(","); christian@0: } christian@0: buf.Append(")"); christian@0: filter.WhereClause = buf.ToString(); christian@0: christian@0: return new FeatureCursor(this, this.connection, filter); christian@0: } christian@0: christian@0: public bool HasOID christian@0: { christian@0: get christian@0: { christian@0: return true; christian@0: } christian@0: } christian@0: christian@0: public IIndexes Indexes christian@0: { christian@0: get christian@0: { christian@0: return null; christian@0: } christian@0: } christian@0: christian@0: public IFeatureCursor Insert(bool useBuffering) christian@0: { christian@0: return null; christian@0: } christian@0: christian@0: ICursor ITable.Insert(bool useBuffering) christian@0: { christian@0: return null; christian@0: } christian@0: christian@0: public IField LengthField christian@0: { christian@0: get christian@0: { christian@0: return null; christian@0: } christian@0: } christian@0: christian@0: public string OIDFieldName christian@0: { christian@0: get christian@0: { christian@0: return "OID"; christian@0: } christian@0: } christian@0: christian@0: public int ObjectClassID christian@0: { christian@0: get christian@0: { christian@0: return -1; christian@0: } christian@0: } christian@0: christian@0: public IFeatureCursor Search(IQueryFilter filter, bool recycling) christian@0: { christian@0: return new FeatureCursor(this, this.connection, filter); christian@0: } christian@0: christian@0: ICursor ITable.Search(IQueryFilter filter, bool recycling) christian@0: { christian@0: return Search(filter, recycling) as ICursor; christian@0: } christian@0: christian@0: public ISelectionSet Select( christian@0: IQueryFilter queryFilter, christian@0: esriSelectionType selType, christian@0: esriSelectionOption selOption, christian@0: IWorkspace selectionContainer) christian@0: { christian@0: Postarc.Geodatabase.SelectionSet sel = new Postarc.Geodatabase.SelectionSet(this); christian@0: IFeatureCursor cur = Search(queryFilter, false); christian@0: IFeature feature; christian@0: while ((feature = cur.NextFeature()) != null) christian@0: { christian@0: sel.Add(feature.OID); christian@0: } christian@0: //return sel as ISelectionSet; christian@0: return null; christian@0: } christian@0: christian@0: public string ShapeFieldName christian@0: { christian@0: get christian@0: { christian@0: return this.shapeFieldName; christian@0: } christian@0: } christian@0: christian@0: internal int ShapeFieldIndex christian@0: { christian@0: get christian@0: { christian@0: return Fields.FindField(shapeFieldName); christian@0: } christian@0: } christian@0: christian@0: public esriGeometryType ShapeType christian@0: { christian@0: get christian@0: { christian@0: return this.shapeType; christian@0: } christian@0: } christian@0: christian@0: public IFeatureCursor Update(IQueryFilter filter, bool recycling) christian@0: { christian@0: return null; christian@0: } christian@0: christian@0: ICursor ITable.Update(IQueryFilter filter, bool recycling) christian@0: { christian@0: return null; christian@0: } christian@0: christian@0: public IEnumRelationshipClass get_RelationshipClasses(esriRelRole role) christian@0: { christian@0: Debug.WriteLine("FeatureClass::get_RelationshipClasses(): FIXME"); christian@0: return null; // TODO: ? christian@0: } christian@0: christian@0: public string BrowseName christian@0: { christian@0: get christian@0: { christian@0: return this.browseName; christian@0: } christian@0: set christian@0: { christian@0: this.browseName = value; christian@0: } christian@0: } christian@0: christian@0: public bool CanCopy() christian@0: { christian@0: return false; christian@0: } christian@0: christian@0: public bool CanDelete() christian@0: { christian@0: return false; christian@0: } christian@0: christian@0: public bool CanRename() christian@0: { christian@0: return false; christian@0: } christian@0: christian@0: public string Category christian@0: { christian@0: get christian@0: { christian@0: return "PostGIS"; christian@0: } christian@0: } christian@0: christian@0: public IDataset Copy(string copyName, IWorkspace copyWorkspace) christian@0: { christian@0: return null; christian@0: } christian@0: christian@0: public void Delete() christian@0: { christian@0: christian@0: } christian@0: christian@0: public IName FullName christian@0: { christian@0: get christian@0: { christian@0: return new FeatureClassName(); christian@0: } christian@0: } christian@0: christian@0: public string Name christian@0: { christian@0: get christian@0: { christian@0: return "PostGIS FeatureClass"; christian@0: } christian@0: } christian@0: christian@0: public IPropertySet PropertySet christian@0: { christian@0: get christian@0: { christian@0: return null; christian@0: } christian@0: } christian@0: christian@0: public void Rename(string name) christian@0: { christian@0: } christian@0: christian@0: public IEnumDataset Subsets christian@0: { christian@0: get christian@0: { christian@0: return null; christian@0: } christian@0: } christian@0: christian@0: public esriDatasetType Type christian@0: { christian@0: get christian@0: { christian@0: return esriDatasetType.esriDTFeatureClass; christian@0: } christian@0: } christian@0: christian@0: /// christian@0: /// Returns the associated Postarc.Feature.Workspace instance of this christian@0: /// FeatureClass. christian@0: /// christian@0: public IWorkspace Workspace christian@0: { christian@0: get christian@0: { christian@0: return this.workspace as IWorkspace; christian@0: } christian@0: } christian@0: christian@0: /// christian@0: /// From IDatasetEdit christian@0: /// christian@0: /// christian@0: public bool IsBeingEdited() christian@0: { christian@0: return this.workspace.IsBeingEdited(); christian@0: } christian@0: christian@0: public void AlterAliasName(string Name) christian@0: { christian@0: christian@0: } christian@0: christian@0: public void AlterClassExtensionCLSID(UID ClassExtensionCLSID, IPropertySet classExtensionProperties) christian@0: { christian@0: christian@0: } christian@0: christian@0: public void AlterDefaultValue(string FieldName, object Value) christian@0: { christian@0: christian@0: } christian@0: christian@0: public void AlterDomain(string FieldName, IDomain Domain) christian@0: { christian@0: christian@0: } christian@0: christian@0: public void AlterFieldAliasName(string FieldName, string AliasName) christian@0: { christian@0: christian@0: } christian@0: christian@0: public void AlterFieldModelName(string FieldName, string ModelName) christian@0: { christian@0: christian@0: } christian@0: christian@0: public void AlterInstanceCLSID(UID InstanceCLSID) christian@0: { christian@0: christian@0: } christian@0: christian@0: public void AlterModelName(string Name) christian@0: { christian@0: christian@0: } christian@0: christian@0: public int RegisterAsObjectClass(string suggestedOIDFieldName, string configKeyword) christian@0: { christian@0: return 0; // FIXME christian@0: } christian@0: christian@0: christian@0: public void AlterClassExtensionProperties(IPropertySet classExtensionProperties) christian@0: { christian@0: christian@0: } christian@0: christian@0: public void AddGlobalID(string FieldName) christian@0: { christian@0: christian@0: } christian@0: christian@0: public void DeleteGlobalID() christian@0: { christian@0: christian@0: } christian@0: christian@0: /* public int AllowableComponents christian@0: { christian@0: get christian@0: { christian@0: return 0; // FIXME christian@0: } christian@0: } christian@0: christian@0: public void Analyze(int tableComponents) christian@0: { christian@0: christian@0: }*/ christian@0: christian@0: public bool CanEdit christian@0: { christian@0: get christian@0: { christian@0: // TODO: Check for write access to PostGIS table christian@0: return true; christian@0: } christian@0: } christian@0: christian@0: christian@0: public bool CanRedo christian@0: { christian@0: get christian@0: { christian@0: return false; christian@0: } christian@0: } christian@0: christian@0: public bool CanUndo christian@0: { christian@0: get christian@0: { christian@0: return false; christian@0: } christian@0: } christian@0: christian@0: /// christian@0: /// IFeatureClassLoad.LoadOnlyMode: Indicates if the featureclass is in load only mode. christian@0: /// christian@0: /*public bool LoadOnlyMode christian@0: { christian@0: get christian@0: { christian@0: return true; //FIXME christian@0: } christian@0: set christian@0: { christian@0: christian@0: } christian@0: }*/ christian@0: christian@0: /* christian@0: public void UpdateExtent() christian@0: { christian@0: christian@0: }*/ christian@0: christian@0: /* christian@0: public void RemoveFeature(IFeature Feature) christian@0: { christian@0: christian@0: } christian@0: christian@0: public void RemoveFeatures(ISet features) christian@0: { christian@0: christian@0: } christian@0: christian@0: public void WriteFeature(IFeature Feature) christian@0: { christian@0: christian@0: } christian@0: christian@0: public void WriteFeatures(ISet features) christian@0: { christian@0: christian@0: }*/ christian@0: christian@0: public IEnvelope Extent christian@0: { christian@0: get christian@0: { christian@0: IPoint point = new PointClass(); christian@0: point.PutCoords(0, 0); christian@0: ITopologicalOperator topOp = point as ITopologicalOperator; christian@0: IGeometry buf = topOp.Buffer(100); christian@0: return buf.Envelope; christian@0: } christian@0: } christian@0: christian@0: public ISpatialReference SpatialReference christian@0: { christian@0: get christian@0: { christian@0: return spatialReference; christian@0: } christian@0: } christian@0: christian@0: christian@0: /*public IGeodataXform GeodataXform christian@0: { christian@0: get christian@0: { christian@0: return null; //FIXME christian@0: } christian@0: } christian@0: christian@0: public IEnvelope NativeExtent christian@0: { christian@0: get christian@0: { christian@0: return null; //FIXME christian@0: } christian@0: } christian@0: christian@0: public ISpatialReference NativeSpatialReference christian@0: { christian@0: get christian@0: { christian@0: return null; // FIXME christian@0: } christian@0: }*/ christian@0: christian@0: public string ModelName christian@0: { christian@0: get christian@0: { christian@0: return "ModelName"; //FIXME christian@0: } christian@0: set christian@0: { christian@0: christian@0: } christian@0: } christian@0: christian@0: christian@0: public IGeometricNetwork GeometricNetwork christian@0: { christian@0: get christian@0: { christian@0: return null; // FIXME christian@0: } christian@0: } christian@0: christian@0: public esriNetworkClassAncillaryRole NetworkAncillaryRole christian@0: { christian@0: get christian@0: { christian@0: return esriNetworkClassAncillaryRole.esriNCARNone; //FIXME christian@0: } christian@0: } christian@0: christian@0: public int get_FieldToWeightMapping(int FieldIndex) christian@0: { christian@0: return 0;//FIXME christian@0: } christian@0: christian@0: public bool CanBypassStoreMethod() christian@0: { christian@0: return false; christian@0: } christian@0: christian@0: public bool CanBypassEditSession() christian@0: { christian@0: return false; christian@0: } christian@0: christian@0: public void ChangeSchemaLock(esriSchemaLock schemaLock) christian@0: { christian@0: christian@0: } christian@0: christian@0: public void GetCurrentSchemaLocks(out IEnumSchemaLockInfo schemaLockInfo) christian@0: { christian@0: schemaLockInfo = null; // FIXME christian@0: } christian@0: christian@0: public void AddSubtype(int SubtypeCode, string SubtypeName) christian@0: { christian@0: christian@0: } christian@0: christian@0: public int DefaultSubtypeCode christian@0: { christian@0: get christian@0: { christian@0: return 0; //FIXME christian@0: } christian@0: set christian@0: { christian@0: christian@0: } christian@0: } christian@0: christian@0: public void DeleteSubtype(int SubtypeCode) christian@0: { christian@0: christian@0: } christian@0: christian@0: public bool HasSubtype christian@0: { christian@0: get christian@0: { christian@0: return false; christian@0: } christian@0: } christian@0: christian@0: public int SubtypeFieldIndex christian@0: { christian@0: get christian@0: { christian@0: Debug.WriteLine("FeatureClass::SubtypeFieldIndex::get"); christian@0: return 0; //FIXME christian@0: } christian@0: } christian@0: christian@0: public string SubtypeFieldName christian@0: { christian@0: get christian@0: { christian@0: return ""; christian@0: } christian@0: set christian@0: { christian@0: christian@0: } christian@0: } christian@0: christian@0: public IEnumSubtype Subtypes christian@0: { christian@0: get christian@0: { christian@0: Debug.WriteLine("FeatureClass::Subtypes(): FIXME"); christian@0: return null; //FIXME christian@0: } christian@0: } christian@0: christian@0: public object get_DefaultValue(int subtypeCode, string fieldName) christian@0: { christian@0: return null; // FIXME christian@0: } christian@0: christian@0: public IDomain get_Domain(int subtypeCode, string fieldName) christian@0: { christian@0: Debug.WriteLine("FeatureClass::get_Domain(): FIXME " + fieldName); christian@0: return null; //FIXME christian@0: } christian@0: christian@0: public string get_SubtypeName(int subtypeCode) christian@0: { christian@0: return ""; //FIXME christian@0: } christian@0: christian@0: public void set_DefaultValue(int ubtypeCode, string fieldName, object value) christian@0: { christian@0: christian@0: } christian@0: christian@0: public void set_Domain(int ubtypeCode, string fieldName, IDomain domain) christian@0: { christian@0: christian@0: } christian@0: christian@0: public IRow CreateRow() christian@0: { christian@0: Debug.WriteLine("PostGISFeatureClass::CreateRow()"); christian@0: return CreateRowBuffer() as IRow; christian@0: } christian@0: christian@0: public IRowBuffer CreateRowBuffer() christian@0: { christian@0: Debug.WriteLine("PostGISFeatureClass::CreateRowBuffer()"); christian@0: return CreateFeature() as IRowBuffer; christian@0: } christian@0: christian@0: public void DeleteSearchedRows(IQueryFilter queryFilter) christian@0: { christian@0: christian@0: } christian@0: christian@0: public IRow GetRow(int oid) christian@0: { christian@0: Debug.WriteLine("PostGISFeatureClass::GetRow"); christian@0: ICursor cur = GetRows(new int[] { oid }, false); christian@0: return cur.NextRow(); christian@0: } christian@0: christian@0: public ICursor GetRows(object oids_obj, bool recycling) christian@0: { christian@0: Debug.WriteLine("PostGISFeatureClass::GetRows"); christian@0: return (ICursor)GetFeatures(oids_obj, recycling); christian@0: } christian@0: christian@0: public int RowCount(IQueryFilter queryFilter) christian@0: { christian@0: return FeatureCount(queryFilter); christian@0: } christian@0: christian@0: public void UpdateSearchedRows(IQueryFilter queryFilter, IRowBuffer buffer) christian@0: { christian@0: christian@0: } christian@0: christian@0: /// christian@0: /// From ITableCapabilities christian@0: /// christian@0: public bool CanSelect christian@0: { christian@0: get christian@0: { christian@0: return true; christian@0: } christian@0: } christian@0: christian@0: public void AddClass(IClass classToAdd, double Weight, int XYRank, int ZRank, bool EventNotificationOnValidate) christian@0: { christian@0: christian@0: } christian@0: christian@0: public ITopologyGraph Cache christian@0: { christian@0: get christian@0: { christian@0: return null; //FIXME christian@0: } christian@0: } christian@0: christian@0: public double ClusterTolerance christian@0: { christian@0: get christian@0: { christian@0: return 0.0001; // FIXME christian@0: } christian@0: } christian@0: christian@0: public int MaximumGeneratedErrorCount christian@0: { christian@0: get christian@0: { christian@0: return 0; // FIXME christian@0: } christian@0: } christian@0: christian@0: public void RemoveClass(IClass classToRemove) christian@0: { christian@0: christian@0: } christian@0: christian@0: public esriTopologyState State christian@0: { christian@0: get christian@0: { christian@0: return esriTopologyState.esriTSUnanalyzed; // FIXME christian@0: } christian@0: } christian@0: christian@0: public int TopologyID christian@0: { christian@0: get christian@0: { christian@0: return 0; //FIXME christian@0: } christian@0: } christian@0: christian@0: public IEnvelope ValidateTopology(IEnvelope areaToValidate) christian@0: { christian@0: return null; //FIXME christian@0: } christian@0: christian@0: public IPolygon get_DirtyArea(IPolygon location) christian@0: { christian@0: return null; //FIXME christian@0: } christian@0: christian@0: public void AddRule(IRule Rule) christian@0: { christian@0: christian@0: } christian@0: christian@0: public void DeleteRule(IRule Rule) christian@0: { christian@0: christian@0: } christian@0: christian@0: public IEnumRule Rules christian@0: { christian@0: get christian@0: { christian@0: return null; // FIXME christian@0: } christian@0: } christian@0: christian@0: public ISelectionSet Validate(IQueryFilter Selection, IWorkspace Workspace) christian@0: { christian@0: return null; christian@0: } christian@0: christian@0: public ISelectionSet ValidateSelection(ISelectionSet Selection, IWorkspace Workspace) christian@0: { christian@0: return null; // FIXME christian@0: } christian@0: christian@0: public ISet ValidateSet(ISet Selection) christian@0: { christian@0: return null; christian@0: } christian@0: christian@0: public IEnumRule get_RulesByField(string FieldName) christian@0: { christian@0: return null; christian@0: } christian@0: christian@0: public IEnumRule get_RulesBySubtypeCode(int SubtypeCode) christian@0: { christian@0: return null; christian@0: } christian@0: christian@0: public void AlterRule(IRule Rule) christian@0: { christian@0: christian@0: } christian@0: } christian@0: }