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 @ 40557

History | View | Annotate | Download (7.23 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.operation.GeometryOperationException;
43
import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
44
import org.gvsig.fmap.geom.primitive.Point;
45
import org.gvsig.tools.dataTypes.DataTypes;
46
import org.gvsig.tools.dispose.DisposableIterator;
47

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

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

    
58
    private static final int NUM_DECIMALS = 5;
59

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

    
70
        featureStore.beginEditingGroup(operationName);
71

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

    
76
        String realFieldName = getFieldName(featureStore, fieldName, 0);
77
        EditableFeatureAttributeDescriptor editableFeatureAttributeDescriptor =
78
            editableFeatureType.add(realFieldName, DataTypes.DOUBLE);
79
        editableFeatureAttributeDescriptor.setPrecision(NUM_DECIMALS);
80
        editableFeatureAttributeDescriptor
81
            .setSize(TableOperations.MAX_FIELD_LENGTH);
82

    
83
        featureStore.update(editableFeatureType);
84

    
85
        DisposableIterator disposableIterator = null;
86
        FeatureSet featureSet = null;
87
        try {
88
            // Adding the attribute value
89
            featureSet = featureStore.getFeatureSet();
90
            disposableIterator = featureSet.fastIterator();
91
            while (disposableIterator.hasNext()) {
92
                Feature feature = (Feature) disposableIterator.next();
93
                EditableFeature editableFeature = feature.getEditable();
94
                editableFeature.setDouble(realFieldName, (Double) feature
95
                    .getDefaultGeometry().invokeOperation(operationName, null));
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().equals(fullName)) {
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
        editableFeatureAttributeDescriptor.setPrecision(NUM_DECIMALS);
158
        editableFeatureAttributeDescriptor
159
            .setSize(TableOperations.MAX_FIELD_LENGTH);
160

    
161
        String realYFieldName = getFieldName(featureStore, yFieldName, 0);
162
        editableFeatureAttributeDescriptor =
163
            editableFeatureType.add(realYFieldName, DataTypes.DOUBLE);
164
        editableFeatureAttributeDescriptor.setPrecision(NUM_DECIMALS);
165
        editableFeatureAttributeDescriptor
166
            .setSize(TableOperations.MAX_FIELD_LENGTH);
167

    
168
        featureStore.update(editableFeatureType);
169

    
170
        // Adding the attribute value
171
        FeatureSet featureSet = featureStore.getFeatureSet();
172
        DisposableIterator disposableIterator = featureSet.fastIterator();
173
        while (disposableIterator.hasNext()) {
174
            Feature feature = (Feature) disposableIterator.next();
175
            EditableFeature editableFeature = feature.getEditable();
176
            editableFeature.setDouble(realXFieldName,
177
                ((Point) feature.getDefaultGeometry()).getX());
178
            editableFeature.setDouble(realYFieldName,
179
                ((Point) feature.getDefaultGeometry()).getY());
180
            featureSet.update(editableFeature);
181
        }
182

    
183
        featureSet.dispose();
184

    
185
        if (!isEditing) {
186
            featureStore.finishEditing();
187
        }
188

    
189
    }
190

    
191
}