annotate Postarc/Postarc/Feature/Feature.cs @ 0:1aca3d413885 tip

Initial import of Postarc
author Christian Lins <christian.lins@intevation.de>
date Fri, 05 Oct 2012 23:55:06 +0200
parents
children
rev   line source
0
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
1 /*
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
2 * Postarc
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
3 *
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
4 * Author:
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
5 * Christian Lins <christian.lins@intevation.de>
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
6 *
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
7 * Copyright:
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
8 * Copyright (C) 2012 Intevation GmbH <http://www.intevation.de/>
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
9 *
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
10 * This program is free software: you can redistribute it and/or modify
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
11 * it under the terms of the GNU Lesser General Public License as published by
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
12 * the Free Software Foundation, either version 3 of the License, or
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
13 * (at your option) any later version.
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
14 *
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
15 * This program is distributed in the hope that it will be useful,
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
18 * GNU General Public License for more details.
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
19 *
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
20 * You should have received a copy of the GNU Lesser General Public License
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
21 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
22 */
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
23
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
24 using System;
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
25 using System.Collections.Generic;
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
26 using System.Linq;
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
27 using System.Text;
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
28 using ESRI.ArcGIS.Geodatabase;
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
29 using Npgsql;
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
30 using ESRI.ArcGIS.Geometry;
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
31 using System.Diagnostics;
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
32
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
33 namespace Postarc.Feature
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
34 {
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
35 public class Feature : IFeature, IFeatureBuffer, IRow, IRowBuffer
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
36 {
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
37 protected FeatureClass featureClass;
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
38 protected IFields fields;
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
39 protected object[] row;
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
40 protected IWKTGeometry shape = new Point();
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
41
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
42 private int oidIdx = -1;
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
43
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
44 /// <summary>
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
45 /// Constructs a Feature from an existing row in a database table.
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
46 /// </summary>
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
47 /// <param name="featureClass"></param>
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
48 /// <param name="reader"></param>
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
49 /// <param name="oidIdx"></param>
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
50 /// <param name="fields"></param>
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
51 public Feature(FeatureClass featureClass, IFields fields, int oidIdx,
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
52 NpgsqlDataReader reader) : this(featureClass, fields, oidIdx)
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
53 {
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
54 this.row = new object[fields.FieldCount];
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
55 reader.GetValues(this.row);
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
56 LoadShapeFromRow();
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
57 }
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
58
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
59 protected Feature(FeatureClass featureClass, IFields fields, int oidIdx)
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
60 {
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
61 this.featureClass = featureClass;
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
62 this.fields = fields;
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
63 this.oidIdx = oidIdx;
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
64 }
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
65
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
66 protected int ShapeFieldIndex
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
67 {
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
68 get
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
69 {
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
70 return this.fields.FindField(featureClass.ShapeFieldName);
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
71 }
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
72 }
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
73
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
74 /// <summary>
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
75 /// Creates a new feature which is not yet written to a backend.
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
76 /// </summary>
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
77 /// <param name="featureClass"></param>
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
78 /// <param name="fields"></param>
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
79 /// <param name="oidIdx"></param>
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
80 /// <param name="row"></param>
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
81 public Feature(FeatureClass featureClass, IFields fields, int oidIdx,
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
82 object[] row) : this(featureClass, fields, oidIdx)
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
83 {
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
84 this.row = row;
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
85 LoadShapeFromRow();
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
86 }
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
87
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
88 protected void LoadShapeFromRow()
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
89 {
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
90 this.shape = new Point();
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
91 int shpIdx = ShapeFieldIndex;
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
92 if (shpIdx >= 0 && row[ShapeFieldIndex] != null)
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
93 {
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
94 this.shape.SetWKT(row[ShapeFieldIndex] as string);
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
95 }
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
96 }
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
97
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
98 public IObjectClass Class
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
99 {
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
100 get { throw new NotImplementedException(); }
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
101 }
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
102
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
103 public void Delete()
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
104 {
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
105 // TODO: Not implemented
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
106 }
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
107
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
108 public IEnvelope Extent
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
109 {
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
110 get
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
111 {
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
112 return this.Shape.Envelope;
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
113 }
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
114 }
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
115
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
116 public esriFeatureType FeatureType
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
117 {
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
118 get
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
119 {
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
120 return this.featureClass.FeatureType;
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
121 }
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
122 }
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
123
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
124 public IFields Fields
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
125 {
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
126 get
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
127 {
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
128 return this.fields;
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
129 }
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
130 }
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
131
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
132 public bool HasOID
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
133 {
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
134 get
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
135 {
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
136 return oidIdx >= 0;
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
137 }
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
138 }
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
139
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
140 public int OID
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
141 {
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
142 get
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
143 {
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
144 if (oidIdx >= 0)
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
145 {
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
146 int oid = Convert.ToInt32(this.row[oidIdx]);
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
147 return oid;
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
148 }
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
149 else
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
150 {
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
151 return -1;
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
152 }
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
153 }
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
154 }
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
155
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
156 public IGeometry Shape
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
157 {
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
158 get
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
159 {
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
160 return this.shape as IGeometry;
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
161 }
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
162 set
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
163 {
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
164 this.shape = value as IWKTGeometry;
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
165 }
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
166 }
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
167
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
168 public IGeometry ShapeCopy
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
169 {
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
170 get { throw new NotImplementedException(); }
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
171 }
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
172
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
173 /// <summary>
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
174 /// Writes the row to the backend. From IRow interface.
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
175 /// </summary>
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
176 public void Store()
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
177 {
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
178 StringBuilder sql = new StringBuilder();
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
179 NpgsqlConnection conn = featureClass.PostGISConnection.Open();
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
180 NpgsqlCommand cmd;
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
181
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
182 if (OID > 0)
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
183 { // Update existing row
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
184 sql.Append("UPDATE ");
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
185 sql.Append(featureClass.TableName);
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
186 sql.Append(" SET ");
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
187 for (int n = 0; n < this.row.Length; n++)
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
188 {
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
189 if (n != this.oidIdx)
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
190 {
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
191 sql.Append(Fields.get_Field(n).Name);
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
192 sql.Append(" = '");
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
193 if (n == featureClass.ShapeFieldIndex)
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
194 sql.Append(shape.GetWKT());
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
195 else
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
196 sql.Append(this.row[n]);
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
197 sql.Append("',");
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
198 }
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
199 }
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
200 sql.Replace(',',' ', sql.Length - 1, 1);
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
201 sql.Append(" WHERE ");
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
202 sql.Append(FeatureCursor.POSTARC_OID_COLUMN);
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
203 sql.Append(" = ");
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
204 sql.Append(OID);
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
205 }
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
206 else
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
207 { // Create new row
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
208 sql.Append("INSERT INTO ");
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
209 sql.Append(featureClass.TableName);
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
210 sql.Append(" (");
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
211 for (int n = 0; n < this.row.Length; n++)
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
212 {
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
213 if (n == this.oidIdx)
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
214 sql.Append(FeatureCursor.POSTARC_OID_COLUMN);
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
215 else
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
216 sql.Append(Fields.get_Field(n).Name);
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
217
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
218 if (n != Fields.FieldCount - 1)
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
219 sql.Append(",");
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
220 }
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
221 sql.Append(" ) SELECT ");
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
222 for (int n = 0; n < this.row.Length; n++)
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
223 {
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
224 if (n == this.oidIdx)
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
225 {
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
226 sql.Append("Max(");
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
227 sql.Append(FeatureCursor.POSTARC_OID_COLUMN);
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
228 sql.Append(") + 1");
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
229 }
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
230 else
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
231 {
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
232 sql.Append("'");
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
233 if (n == featureClass.ShapeFieldIndex)
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
234 {
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
235 sql.Append(shape.GetWKT());
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
236 }
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
237 else
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
238 {
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
239 sql.Append(this.row[n]);
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
240 }
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
241 sql.Append("'");
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
242 }
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
243 if (n != Fields.FieldCount - 1)
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
244 sql.Append(",");
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
245 }
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
246 sql.Append(" FROM ");
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
247 sql.Append(featureClass.TableName);
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
248 }
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
249
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
250 cmd = new NpgsqlCommand(sql.ToString(), conn);
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
251 int updatedRows = cmd.ExecuteNonQuery();
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
252 conn.Close();
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
253 Debug.WriteLine("Feature::Store: " + updatedRows + " rows affected");
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
254 }
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
255
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
256 public ITable Table
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
257 {
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
258 get
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
259 {
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
260 return this.featureClass;
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
261 }
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
262 }
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
263
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
264 public object get_Value(int index)
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
265 {
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
266 Debug.WriteLine("Feature::get_Value(" + index + "): "
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
267 + (row[index] != null ? row[index].GetType() + " " + row[index].ToString() : ""));
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
268
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
269 if (index == featureClass.ShapeFieldIndex)
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
270 {
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
271 return this.Shape;
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
272 }
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
273 else
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
274 {
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
275 return this.row[index];
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
276 }
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
277 }
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
278
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
279 public void set_Value(int index, object value)
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
280 {
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
281 Debug.WriteLine("Feature::set_Value(" + index + ", " + value + ")");
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
282 this.row[index] = value;
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
283 }
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
284 }
1aca3d413885 Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff changeset
285 }
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)