Statistics
| Revision:

root / branches / dal_time_support / libraries / libFMap_dal / src / org / gvsig / fmap / dal / feature / spi / DefaultFeatureProvider.java @ 34629

History | View | Annotate | Download (6.04 KB)

1
/* gvSIG. Geographic Information System of the Valencian Government
2
 *
3
 * Copyright (C) 2007-2008 Infrastructures and Transports Department
4
 * of the Valencian Government (CIT)
5
 *
6
 * This program is free software; you can redistribute it and/or
7
 * modify it under the terms of the GNU General Public License
8
 * as published by the Free Software Foundation; either version 2
9
 * of the License, or (at your option) any later version.
10
 *
11
 * This program is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 * GNU General Public License for more details.
15
 *
16
 * You should have received a copy of the GNU General Public License
17
 * along with this program; if not, write to the Free Software
18
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19
 * MA  02110-1301, USA.
20
 *
21
 */
22

    
23
/*
24
 * AUTHORS (In addition to CIT):
25
 * 2008 {{Company}}   {{Task}}
26
 */
27

    
28
package org.gvsig.fmap.dal.feature.spi;
29

    
30
import org.gvsig.fmap.dal.feature.EditableFeatureType;
31
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
32
import org.gvsig.fmap.dal.feature.FeatureType;
33
import org.gvsig.fmap.geom.Geometry;
34
import org.gvsig.fmap.geom.primitive.Envelope;
35

    
36
/**
37
 * Default implementation for {@link FeatureProvider}
38
 *
39
 */
40
public class DefaultFeatureProvider implements FeatureProvider {
41

    
42
        protected FeatureType featureType;
43
        protected boolean[] nulls;
44
        protected Object[] values;
45
        protected Geometry defaultGeometry;
46
        protected Envelope envelope;
47
        private Object oid;
48
        private boolean isNew=false;
49

    
50
        public DefaultFeatureProvider(FeatureType type) {
51
                if (type instanceof EditableFeatureType) {
52
                        throw new IllegalArgumentException("type can't by editable.");
53
                }
54
                this.featureType = type;
55
                this.values = new Object[featureType.size()];
56
                this.nulls = new boolean[featureType.size()];
57

    
58
                this.envelope = null;
59
                this.defaultGeometry = null;
60
                this.oid = null;
61
        }
62

    
63
        public DefaultFeatureProvider(FeatureType type, Object oid) {
64
                this(type);
65
                this.oid = oid;
66
        }
67

    
68
        /*
69
         * (non-Javadoc)
70
         *
71
         * @see org.gvsig.fmap.dal.feature.spi.FeatureProvider#set(int,
72
         * java.lang.Object)
73
         */
74
        public void set(int i, Object value) {
75
                if (featureType.getDefaultGeometryAttributeIndex() == i) {
76
                        defaultGeometry = (Geometry) value;
77
                        envelope = null;
78
                }
79
                if (value == null) {
80
                        nulls[i] = true;
81
                        values[i] = featureType.getAttributeDescriptor(i).getDefaultValue();
82
                } else {
83
                        values[i] = value;
84
                        nulls[i] = false;
85
                }
86
        }
87

    
88
        /*
89
         * (non-Javadoc)
90
         *
91
         * @see org.gvsig.fmap.dal.feature.spi.FeatureProvider#set(java.lang.String,
92
         * java.lang.Object)
93
         */
94
        public void set(String name, Object value) {
95
                set(featureType.getIndex(name), value);
96
        }
97

    
98
        /*
99
         * (non-Javadoc)
100
         *
101
         * @see org.gvsig.fmap.dal.feature.spi.FeatureProvider#get(int)
102
         */
103
        public Object get(int i) {
104
                return values[i];
105
        }
106

    
107
        /*
108
         * (non-Javadoc)
109
         *
110
         * @see org.gvsig.fmap.dal.feature.spi.FeatureProvider#get(java.lang.String)
111
         */
112
        public Object get(String name) {
113
                FeatureAttributeDescriptor featureAttributeDescriptor = featureType.getAttributeDescriptor(name);
114
                if (featureAttributeDescriptor.getFeatureAttributeGetter() != null){
115
                    return featureAttributeDescriptor.getFeatureAttributeGetter().getter(values[featureAttributeDescriptor.getIndex()]);
116
                }
117
                return values[featureAttributeDescriptor.getIndex()];
118
        }
119

    
120
        /*
121
         * (non-Javadoc)
122
         *
123
         * @see org.gvsig.fmap.dal.feature.spi.FeatureProvider#getType()
124
         */
125
        public FeatureType getType() {
126
                return featureType;
127
        }
128

    
129
        /*
130
         * (non-Javadoc)
131
         *
132
         * @see org.gvsig.fmap.dal.feature.spi.FeatureProvider#getCopy()
133
         */
134
        public FeatureProvider getCopy() {
135
                DefaultFeatureProvider data = new DefaultFeatureProvider(
136
                                this.getType());
137
                return getCopy(data);
138
        }
139

    
140
        /**
141
         * Copy values from current instance to <code>data</code>
142
         */
143
        protected FeatureProvider getCopy(DefaultFeatureProvider data) {
144
                data.oid = this.oid;
145
                System.arraycopy(this.values, 0, data.values, 0, this.values.length);
146
                data.defaultGeometry = this.defaultGeometry;
147
                data.envelope = this.envelope;
148
                data.isNew=this.isNew;
149
                return data;
150
        }
151

    
152
        /*
153
         * (non-Javadoc)
154
         * 
155
         * @see org.gvsig.fmap.dal.feature.spi.FeatureProvider#getDefaultEnvelope()
156
         */
157
        public Envelope getDefaultEnvelope() {
158
                if (envelope == null && defaultGeometry != null) {
159
                        envelope = defaultGeometry.getEnvelope();
160
                }
161
                return envelope;
162
        }
163

    
164
        /*
165
         * (non-Javadoc)
166
         * 
167
         * @see org.gvsig.fmap.dal.feature.spi.FeatureProvider#getDefaultGeometry()
168
         */
169
        public Geometry getDefaultGeometry() {
170
                return this.defaultGeometry;
171
        }
172

    
173
        /*
174
         * (non-Javadoc)
175
         * 
176
         * @see
177
         * org.gvsig.fmap.dal.feature.spi.FeatureProvider#setDefaultEnvelope(org
178
         * .gvsig.fmap.geom.primitive.Envelope)
179
         */
180
        public void setDefaultEnvelope(Envelope envelope) {
181
                this.envelope = envelope;
182
        }
183

    
184
        /*
185
         * (non-Javadoc)
186
         * 
187
         * @see
188
         * org.gvsig.fmap.dal.feature.spi.FeatureProvider#setDefaultGeometry(org
189
         * .gvsig.fmap.geom.Geometry)
190
         */
191
        public void setDefaultGeometry(Geometry geom) {
192
                int i = featureType.getDefaultGeometryAttributeIndex();
193
                defaultGeometry = geom;
194
                envelope = null;
195
                values[i] = geom;
196
        }
197

    
198
        /*
199
         * (non-Javadoc)
200
         * 
201
         * @see org.gvsig.fmap.dal.feature.spi.FeatureProvider#isNull(int)
202
         */
203
        public boolean isNull(int i) {
204
                return nulls[i];
205
        }
206

    
207
        /*
208
         * (non-Javadoc)
209
         * 
210
         * @see
211
         * org.gvsig.fmap.dal.feature.spi.FeatureProvider#isNull(java.lang.String)
212
         */
213
        public boolean isNull(String name) {
214
                int i = featureType.getIndex(name);
215
                return isNull(i);
216
        }
217

    
218
        /*
219
         * (non-Javadoc)
220
         * 
221
         * @see org.gvsig.fmap.dal.feature.spi.FeatureProvider#getOID()
222
         */
223
        public Object getOID() {
224
                return this.oid;
225
        }
226

    
227
        /*
228
         * (non-Javadoc)
229
         * 
230
         * @see
231
         * org.gvsig.fmap.dal.feature.spi.FeatureProvider#setOID(java.lang.Object)
232
         */
233
        public void setOID(Object oid) {
234
                this.oid = oid;
235
        }
236

    
237
        /*
238
         * (non-Javadoc)
239
         * 
240
         * @see org.gvsig.fmap.dal.feature.spi.FeatureProvider#isNew()
241
         */
242
        public boolean isNew(){
243
                return isNew;
244
        }
245

    
246
        /*
247
         * (non-Javadoc)
248
         * 
249
         * @see org.gvsig.fmap.dal.feature.spi.FeatureProvider#setNew(boolean)
250
         */
251
        public void setNew(boolean isNew){
252
                this.isNew=isNew;
253
        }
254
}