Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.plugin / org.gvsig.geometrymeasurement.app / org.gvsig.geometrymeasurement.app.mainplugin / src / main / java / org / gvsig / geometrymeasurement / app / extension / utils / Operations.java @ 44868

History | View | Annotate | Download (6.9 KB)

1
/**
2
 * gvSIG. Desktop Geographic Information System.
3
 *
4
 * Copyright (C) 2007-2013 gvSIG Association.
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 3
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
 * For any additional information, do not hesitate to contact us
22
 * at info AT gvsig.com, or visit our website www.gvsig.com.
23
 */
24
package org.gvsig.geometrymeasurement.app.extension.utils;
25

    
26
import java.util.Iterator;
27

    
28
import org.slf4j.Logger;
29
import org.slf4j.LoggerFactory;
30

    
31
import org.gvsig.app.project.documents.table.TableOperations;
32
import org.gvsig.fmap.dal.exception.DataException;
33
import org.gvsig.fmap.dal.feature.EditableFeature;
34
import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
35
import org.gvsig.fmap.dal.feature.EditableFeatureType;
36
import org.gvsig.fmap.dal.feature.Feature;
37
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
38
import org.gvsig.fmap.dal.feature.FeatureSet;
39
import org.gvsig.fmap.dal.feature.FeatureStore;
40
import org.gvsig.fmap.dal.feature.FeatureType;
41
import org.gvsig.fmap.dal.feature.exception.NeedEditingModeException;
42
import org.gvsig.fmap.geom.Geometry;
43
import org.gvsig.fmap.geom.operation.GeometryOperationException;
44
import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
45
import org.gvsig.fmap.geom.primitive.Point;
46
import org.gvsig.tools.dataTypes.DataTypes;
47
import org.gvsig.tools.dispose.DisposableIterator;
48

    
49
/**
50
 * Andami extension to show PerimeterMeasurementExtension in the application.
51
 * 
52
 * @author gvSIG Team
53
 * @version $Id$
54
 */
55
public class Operations {
56

    
57
    private static final Logger LOG = LoggerFactory.getLogger(Operations.class);
58

    
59
    private static final int NUM_DECIMALS = 5;
60

    
61
    public void addDoubleFieldFromOperation(FeatureStore featureStore,
62
        String fieldName, String operationName) throws DataException,
63
        GeometryOperationNotSupportedException, GeometryOperationException {
64
        boolean isEditing = false;
65
        if (featureStore.isEditing()) {
66
            isEditing = true;
67
        } else {
68
            featureStore.edit();
69
        }
70

    
71
        featureStore.beginEditingGroup(operationName);
72

    
73
        // Adding the new attribute type
74
        FeatureType featureType = featureStore.getDefaultFeatureType();
75
        EditableFeatureType editableFeatureType = featureType.getEditable();
76

    
77
        String realFieldName = getFieldName(featureStore, fieldName, 0);
78
        EditableFeatureAttributeDescriptor editableFeatureAttributeDescriptor =
79
            editableFeatureType.add(realFieldName, DataTypes.DOUBLE);
80

    
81
        featureStore.update(editableFeatureType);
82

    
83
        DisposableIterator disposableIterator = null;
84
        FeatureSet featureSet = null;
85
        try {
86
            // Adding the attribute value
87
            featureSet = featureStore.getFeatureSet();
88
            disposableIterator = featureSet.fastIterator();
89
            while (disposableIterator.hasNext()) {
90
                Feature feature = (Feature) disposableIterator.next();
91
                EditableFeature editableFeature = feature.getEditable();
92
                Geometry geom = feature.getDefaultGeometry();
93
                if( geom!=null ) {
94
                    editableFeature.setDouble(realFieldName, (Double) geom.invokeOperation(operationName, null));
95
                }
96
                featureSet.update(editableFeature);
97
            }
98
        } finally {
99
            if (disposableIterator != null) {
100
                disposableIterator.dispose();
101
            }
102
            if (featureSet != null) {
103
                featureSet.dispose();
104
            }
105
            try {
106
                featureStore.endEditingGroup();
107
            } catch (NeedEditingModeException e) {
108
                LOG.error("Exception endEditingGroup", e);
109
            }
110
        }
111

    
112
        if (!isEditing) {
113
            featureStore.finishEditing();
114
        }
115
    }
116

    
117
    public String getFieldName(FeatureStore featureStore, String fieldName,
118
        int index) throws DataException {
119
        String fullName = fieldName;
120
        if (index != 0) {
121
            fullName = fullName + index;
122
        }
123
        @SuppressWarnings("unchecked")
124
        Iterator<FeatureAttributeDescriptor> it =
125
            featureStore.getDefaultFeatureType().iterator();
126
        while (it.hasNext()) {
127
            FeatureAttributeDescriptor featureAttributeDescriptor = it.next();
128
            if (featureAttributeDescriptor.getName().toUpperCase().equals(fullName.toUpperCase())) {
129
                return getFieldName(featureStore, fieldName, index + 1);
130
            }
131
        }
132
        return fullName;
133
    }
134

    
135
    /**
136
     * @param featureStore
137
     * @param string
138
     * @param string2
139
     * @throws DataException
140
     */
141
    public void addXYPoints(FeatureStore featureStore, String xFieldName,
142
        String yFieldName) throws DataException {
143
        boolean isEditing = false;
144
        if (featureStore.isEditing()) {
145
            isEditing = true;
146
        } else {
147
            featureStore.edit();
148
        }
149

    
150
        // Adding the new attribute type
151
        FeatureType featureType = featureStore.getDefaultFeatureType();
152
        EditableFeatureType editableFeatureType = featureType.getEditable();
153

    
154
        String realXFieldName = getFieldName(featureStore, xFieldName, 0);
155
        EditableFeatureAttributeDescriptor editableFeatureAttributeDescriptor =
156
            editableFeatureType.add(realXFieldName, DataTypes.DOUBLE);
157

    
158
        String realYFieldName = getFieldName(featureStore, yFieldName, 0);
159
        editableFeatureAttributeDescriptor =
160
            editableFeatureType.add(realYFieldName, DataTypes.DOUBLE);
161

    
162
        featureStore.update(editableFeatureType);
163

    
164
        // Adding the attribute value
165
        FeatureSet featureSet = featureStore.getFeatureSet();
166
        DisposableIterator disposableIterator = featureSet.fastIterator();
167
        while (disposableIterator.hasNext()) {
168
            Feature feature = (Feature) disposableIterator.next();
169
            EditableFeature editableFeature = feature.getEditable();
170
            Geometry geom = feature.getDefaultGeometry();
171
            if( geom!=null ) {
172
                editableFeature.setDouble(realXFieldName,((Point)geom).getX());
173
                editableFeature.setDouble(realYFieldName,((Point)geom).getY());
174
            }
175
            featureSet.update(editableFeature);
176
        }
177

    
178
        featureSet.dispose();
179

    
180
        if (!isEditing) {
181
            featureStore.finishEditing();
182
        }
183

    
184
    }
185

    
186
}