Statistics
| Revision:

root / org.gvsig.toolbox / trunk / org.gvsig.toolbox / org.gvsig.toolbox.core / src / main / java / es / unex / sextante / dataObjects / AbstractVectorLayer.java @ 341

History | View | Annotate | Download (3.95 KB)

1

    
2

    
3
package es.unex.sextante.dataObjects;
4

    
5
import java.awt.geom.Rectangle2D;
6
import java.util.ArrayList;
7
import java.util.List;
8

    
9
import com.vividsolutions.jts.geom.Envelope;
10

    
11
import es.unex.sextante.dataObjects.vectorFilters.IVectorLayerFilter;
12
import es.unex.sextante.exceptions.IteratorException;
13
import org.gvsig.fmap.dal.feature.FeatureStore;
14

    
15

    
16
/**
17
 * A convenience class which implements some of the methods of the IVectorLayer interface. Extending this class is recommended
18
 * instead of implementing the interface directly
19
 * 
20
 * @author volaya
21
 * 
22
 */
23
public abstract class AbstractVectorLayer
24
         implements
25
            IVectorLayer {
26

    
27
   private int                                 m_iShapesCount;
28
   private boolean                             m_bShapesCountAndExtentCalculated = false;
29
   private Rectangle2D                         m_Extent;
30
   private final ArrayList<IVectorLayerFilter> m_Filters                         = new ArrayList<IVectorLayerFilter>();
31

    
32

    
33
   @Override
34
   public abstract Object getBaseDataObject();
35

    
36

    
37
   @Override
38
   public String[] getFieldNames() {
39

    
40
      final String[] names = new String[getFieldCount()];
41

    
42
      for (int i = 0; i < names.length; i++) {
43
         names[i] = getFieldName(i);
44
      }
45

    
46
      return names;
47

    
48
   }
49

    
50

    
51
   @Override
52
   public int getFieldIndexByName(final String sFieldName) {
53

    
54
      for (int i = 0; i < this.getFieldCount(); i++) {
55
         final String sName = getFieldName(i);
56
         if (sName.equalsIgnoreCase(sFieldName)) {
57
            return i;
58
         }
59
      }
60

    
61
      return -1;
62

    
63
   }
64

    
65

    
66
   @Override
67
   public Class[] getFieldTypes() {
68

    
69
      final Class[] types = new Class[getFieldCount()];
70

    
71
      for (int i = 0; i < types.length; i++) {
72
         types[i] = getFieldType(i);
73
      }
74

    
75
      return types;
76

    
77
   }
78

    
79

    
80
   @Override
81
   public String toString() {
82

    
83
      return this.getName();
84

    
85
   }
86

    
87

    
88
   @Override
89
   public void addFeature(final IFeature feature) {
90

    
91
      addFeature(feature.getGeometry(), feature.getRecord().getValues());
92

    
93
   }
94

    
95

    
96
   @Override
97
   public int getShapesCount() {
98

    
99
      if (!m_bShapesCountAndExtentCalculated) {
100
         calculateShapesCountAndExtent();
101
      }
102
      return m_iShapesCount;
103

    
104
   }
105

    
106

    
107
   @Override
108
   public Rectangle2D getFullExtent() {
109

    
110
      if (!m_bShapesCountAndExtentCalculated) {
111
         calculateShapesCountAndExtent();
112
      }
113
      return m_Extent;
114

    
115
   }
116

    
117

    
118
   private void calculateShapesCountAndExtent() {
119

    
120
      Envelope envelope = null;
121
      final IFeatureIterator iter = iterator();
122
      m_iShapesCount = 0;
123

    
124
      while (iter.hasNext()) {
125
         IFeature feature;
126
         try {
127
            feature = iter.next();
128
         }
129
         catch (final IteratorException e) {
130
            m_Extent = new Rectangle2D.Double(0, 0, 0, 0);
131
            m_iShapesCount = 0;
132
            return;
133
         }
134
         if (m_iShapesCount == 0) {
135
            envelope = feature.getGeometry().getEnvelopeInternal();
136
         }
137
         else {
138
            envelope.expandToInclude(feature.getGeometry().getEnvelopeInternal());
139
         }
140
         m_iShapesCount++;
141
      }
142

    
143
      if (m_iShapesCount == 0) {
144
         m_Extent = new Rectangle2D.Double();
145
      }
146
      else {
147
         m_Extent = new Rectangle2D.Double(envelope.getMinX(), envelope.getMinY(), envelope.getWidth(), envelope.getHeight());
148
      }
149

    
150
      m_bShapesCountAndExtentCalculated = true;
151

    
152
   }
153

    
154

    
155
   @Override
156
   public void addFilter(final IVectorLayerFilter filter) {
157

    
158
      m_Filters.add(filter);
159
      m_bShapesCountAndExtentCalculated = false;
160

    
161
   }
162

    
163

    
164
   @Override
165
   public void removeFilters() {
166

    
167
      m_Filters.clear();
168
      m_bShapesCountAndExtentCalculated = false;
169

    
170
   }
171

    
172

    
173
   @Override
174
   public List<IVectorLayerFilter> getFilters() {
175

    
176
      return m_Filters;
177

    
178
   }
179

    
180
    @Override
181
    public FeatureStore getFeatureStore() {
182
        return null;
183
    }
184

    
185
}