Statistics
| Revision:

svn-gvsig-desktop / branches / Mobile_Compatible_Hito_1 / libFMap_mobile_shp_driver / src-file / org / gvsig / data / datastores / vectorial / file / shp / ShpFeature.java @ 21865

History | View | Annotate | Download (4.51 KB)

1
package org.gvsig.data.datastores.vectorial.file.shp;
2

    
3
import java.text.DateFormat;
4
import java.text.ParseException;
5
import java.util.Date;
6
import java.util.List;
7
import java.util.Locale;
8

    
9
import org.gvsig.data.DataException;
10
import org.gvsig.data.ReadException;
11
import org.gvsig.data.datastores.vectorial.file.dbf.utils.DbaseFile;
12
import org.gvsig.data.vectorial.AbstractFeature;
13
import org.gvsig.data.vectorial.Feature;
14
import org.gvsig.data.vectorial.FeatureAttributeDescriptor;
15
import org.gvsig.data.vectorial.FeatureID;
16
import org.gvsig.data.vectorial.FeatureType;
17
import org.gvsig.data.vectorial.IsNotFeatureSettingException;
18
import org.gvsig.fmap.geom.Geometry;
19
import org.gvsig.fmap.geom.primitive.Envelope;
20

    
21
public class ShpFeature extends AbstractFeature {
22

    
23
        protected static Locale ukLocale = new Locale("en", "UK");
24

    
25
        private SHPStore store;
26

    
27
        private long featureIndex;
28

    
29
        ShpFeature(FeatureType featureType, SHPStore store, long featureIndex) throws ReadException {
30
                super(featureType);
31
                this.store = store;
32
                this.featureIndex = featureIndex;
33
        }
34

    
35
        void load(Geometry geometry) throws ReadException, IsNotFeatureSettingException {
36
                for (int i = 0; i < featureType.size(); i++) {
37
                        FeatureAttributeDescriptor descriptor = (FeatureAttributeDescriptor) featureType
38
                                        .get(i);
39
                        String fieldType = descriptor.getDataType();
40
                        if (fieldType.equals(FeatureAttributeDescriptor.TYPE_GEOMETRY)) {
41
                                setGeometry(i, geometry);
42
                        }
43
                }
44
        }
45

    
46
        void load(DbaseFile dbf, Geometry geometry) throws ReadException, IsNotFeatureSettingException {
47
                
48
                loading();
49
                
50
                for (int i = 0; i < featureType.size(); i++) {
51
                        FeatureAttributeDescriptor descriptor = (FeatureAttributeDescriptor) featureType
52
                                        .get(i);
53
                        String fieldType = descriptor.getDataType();
54
                        if (fieldType.equals(FeatureAttributeDescriptor.TYPE_GEOMETRY)) {
55
                                this.setGeometry(i, geometry);
56
                        }
57
                        if (dbf.getFieldCount() <= i)
58
                                return;
59
                        String value = dbf.getStringFieldValue((int) this.featureIndex, i);
60
                        value = value.trim();
61

    
62
                        if (fieldType.equals(FeatureAttributeDescriptor.TYPE_STRING)) {
63
                                this.set(i, value);
64
                        } else if (fieldType
65
                                        .equals(FeatureAttributeDescriptor.TYPE_DOUBLE)) {
66
                                try {
67
                                        Double.parseDouble(value);
68
                                } catch (NumberFormatException e) {
69
                                        value = "0";
70
                                }
71
                                this.set(i, Double.parseDouble(value));
72
                        } else if (fieldType.equals(FeatureAttributeDescriptor.TYPE_INT)) {
73
                                this.set(i, Integer.parseInt(value));
74
                        } else if (fieldType.equals(FeatureAttributeDescriptor.TYPE_FLOAT)) {
75
                                this.set(i, Float.parseFloat(value));
76
                        } else if (fieldType.equals(FeatureAttributeDescriptor.TYPE_LONG)) {
77
                                this.set(i, Long.parseLong(value));
78
                        } else if (fieldType
79
                                        .equals(FeatureAttributeDescriptor.TYPE_BOOLEAN)) {
80
                                this.set(i, Boolean.valueOf(value));
81
                        } else if (fieldType.equals(FeatureAttributeDescriptor.TYPE_BYTE)) {
82
                                this.set(i, Byte.parseByte(value));
83
                        } else if (fieldType.equals(FeatureAttributeDescriptor.TYPE_DATE)) {
84
                                String year = value.substring(0, 4);
85
                                String month = value.substring(4, 6);
86
                                String day = value.substring(6, 8);
87
                                DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT,
88
                                                ukLocale);
89
                                /*
90
                                 * Calendar c = Calendar.getInstance(); c.clear();
91
                                 * c.set(Integer.parseInt(year), Integer.parseInt(month),
92
                                 * Integer.parseInt(day)); c.set(Calendar.MILLISECOND, 0);
93
                                 */
94
                                String strAux = month + "/" + day + "/" + year;
95
                                Date dat = null;
96
                                try {
97
                                        dat = df.parse(strAux);
98
                                } catch (ParseException e) {
99
                                        throw new ReadException(this.store.getName(), e);
100
                                }
101
                                this.set(i, dat);
102
                        } else {
103
                                this.set(i, null);
104
                        }
105
                }
106

    
107
                stopLoading();
108
        }
109

    
110
        public FeatureID getID() {
111
                return new ShpFeatureID(this.store, featureIndex);
112
        }
113

    
114
        public Envelope getExtent() {
115
                return store.getBoundingBox(featureIndex);
116
        }
117

    
118
        public List getAllSRS() {
119
                // TODO Auto-generated method stub
120
                return null;
121
        }
122

    
123
        public String getDefaultSRS() {
124
                // TODO Auto-generated method stub
125
                return null;
126
        }
127

    
128
        protected Feature cloneFeature() throws DataException {
129
                try {
130
                        return new ShpFeature(this.featureType,(SHPStore)this.store,this.featureIndex);
131
                } catch (ReadException e) {
132
                        throw new IsNotFeatureSettingException("Clone");
133
                }
134
        }
135

    
136
        // public int[] getGeometryTypes() {
137
        // IGeometry geometry= (IGeometry)getDefaultGeometry();
138
        // if (geometry!=null)
139
        // return new int[]{geometry.getGeometryType()};
140
        // return null;
141
        // }
142
        
143
        public int[] getGeometryTypes() {
144
                Geometry geometry= (Geometry)getDefaultGeometry();
145
                if (geometry!=null)
146
                        return new int[]{geometry.getType()};
147
                return null;
148
        }
149
}