Statistics
| Revision:

root / branches / v2_0_0_prep / applications / appgvSIG / src / org / gvsig / app / project / documents / table / FeatureTableOperations.java @ 29598

History | View | Annotate | Download (5.65 KB)

1
package org.gvsig.app.project.documents.table;
2

    
3
import java.awt.Component;
4
import java.text.ParseException;
5
import java.util.ArrayList;
6
import java.util.Iterator;
7

    
8
import javax.swing.JOptionPane;
9

    
10
import org.gvsig.andami.PluginServices;
11
import org.gvsig.andami.messages.NotificationManager;
12
import org.gvsig.app.project.documents.table.gui.CreateNewAttributePanel;
13
import org.gvsig.fmap.dal.DataTypes;
14
import org.gvsig.fmap.dal.exception.DataException;
15
import org.gvsig.fmap.dal.feature.DisposableIterator;
16
import org.gvsig.fmap.dal.feature.EditableFeature;
17
import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
18
import org.gvsig.fmap.dal.feature.EditableFeatureType;
19
import org.gvsig.fmap.dal.feature.Feature;
20
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
21
import org.gvsig.fmap.dal.feature.FeatureSelection;
22
import org.gvsig.fmap.dal.feature.FeatureStore;
23
import org.gvsig.fmap.data.feature.swing.FeatureTable;
24

    
25
/**
26
 * Feature Table Operations.
27
 *
28
 * @author Vicente Caballero Navarro
29
 *
30
 */
31
public class FeatureTableOperations {
32
        public static final int MAX_FIELD_LENGTH = 254;
33
        private static FeatureTableOperations fto=null;
34
        private FeatureStore featureStore;
35
        private ArrayList<Feature> selectedFeatures=new ArrayList<Feature>();
36
        private boolean cutting=false;
37

    
38
        public static FeatureTableOperations getInstance(){
39
                if (fto==null){
40
                        fto=new FeatureTableOperations();
41
                }
42
                return fto;
43
        }
44

    
45
        public void setStore(FeatureStore store) {
46
                featureStore=store;
47
        }
48

    
49
        public void copyFeatures() throws DataException {
50
                cutting=false;
51
                copy();
52
        }
53

    
54
        public boolean hasSelection() {
55
                return !selectedFeatures.isEmpty();
56
        }
57

    
58
        public void pasteFeatures() throws DataException {
59
                if (cutting){
60
                        delete();
61
                        cutting=false;
62
                }
63
                Iterator<Feature> features=selectedFeatures.iterator();
64
                while (features.hasNext()) {
65
                        Feature feature = features.next();
66
                        featureStore.insert(feature.getEditable());
67
                }
68
        }
69

    
70
        public void cutFeatures() throws DataException {
71
                cutting=true;
72
                copy();
73
        }
74
        private void copy() throws DataException{
75
                DisposableIterator features = null;
76
                try {
77
                        features = ((FeatureSelection) featureStore.getSelection())
78
                                        .iterator();
79
                        selectedFeatures.clear();
80
                        while (features.hasNext()) {
81
                                Feature feature = (Feature) features.next();
82
                                selectedFeatures.add(feature);
83
                        }
84
                } finally {
85
                        if (features != null) {
86
                                features.dispose();
87
                        }
88
                }
89
        }
90
        private void delete() throws DataException{
91
                Iterator<Feature> features=selectedFeatures.iterator();
92
                while (features.hasNext()) {
93
                        Feature feature = features.next();
94
                        featureStore.delete(feature);
95
                }
96
        }
97
        public void deleteFeatures() throws DataException{
98
                DisposableIterator features = null;
99
                try {
100
                        features = ((FeatureSelection) featureStore.getSelection())
101
                                        .iterator();
102
                        while (features.hasNext()) {
103
                                Feature feature = (Feature) features.next();
104
                                featureStore.delete(feature);
105
                        }
106
                } finally {
107
                        if (features != null) {
108
                                features.dispose();
109
                        }
110
                }
111
        }
112
        public void insertNewFeature() throws DataException {
113
//                if (getModel().getAssociatedTable()!=null){
114
//                        JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(),"No se puede a?adir una fila a una tabla asociada a una capa.");
115
//                        return;
116
//                }
117
                EditableFeature feature = featureStore.createNewFeature();
118
                featureStore.insert(feature);
119
        }
120
        public void deleteAttributes(FeatureTable table) throws DataException {
121
                EditableFeatureType eft = featureStore.getDefaultFeatureType().getEditable();
122
                FeatureAttributeDescriptor[] selecteds =table.getSelectedColumnsAttributeDescriptor();
123
                for (int i = 0; i < selecteds.length; i++) {
124
                        eft.remove(selecteds[i].getName());
125
                }
126
                featureStore.update(eft);
127
        }
128

    
129
        public void insertAttributes(FeatureTable table) throws DataException {
130
                EditableFeatureType eft = featureStore.getDefaultFeatureType().getEditable();
131

    
132
                try {
133
                        CreateNewAttributePanel panelNewField = new CreateNewAttributePanel();
134

    
135
                        EditableFeatureAttributeDescriptor ead = panelNewField
136
                        .loadFieldDescription(eft);
137
                        if (ead == null) {
138
                                return;
139
                        }
140
                        if (ead.getDataType() == DataTypes.STRING
141
                                        && ead.getSize() > MAX_FIELD_LENGTH) {
142
                                NotificationManager.showMessageInfo( PluginServices.getText(this,
143
                                "max_length_is")
144
                                + ":" + MAX_FIELD_LENGTH, null);
145
                                ead.setSize(MAX_FIELD_LENGTH);
146
                        }
147
                        PluginServices.getMDIManager().closeWindow(
148
                                        panelNewField);
149
                } catch (ParseException e2) {
150
                        NotificationManager.addError(e2);
151
                }
152
                featureStore.update(eft);
153

    
154
        }
155

    
156
        public void renameAttributes(FeatureTable table) throws DataException {
157
                EditableFeatureType eft = featureStore.getDefaultFeatureType().getEditable();
158
                FeatureAttributeDescriptor[] selecteds =table.getSelectedColumnsAttributeDescriptor();
159

    
160
                for (int i = selecteds.length - 1; i >= 0; i--) {
161
                        String newName = JOptionPane
162
                        .showInputDialog(
163
                                        (Component) PluginServices
164
                                        .getMDIManager()
165
                                        .getActiveWindow(),
166
                                        PluginServices
167
                                        .getText(this,
168
                                                        "please_insert_new_field_name"),
169
                                                        selecteds[i].getName());
170
                        if (newName == null) {
171
                                return;
172
                        }
173
                        if (eft.getIndex(newName) != -1) {
174
                                NotificationManager.showMessageInfo(
175
                                                PluginServices.getText(this,
176
                                                "field_already_exists"),
177
                                                null);
178
                                return;
179
                        }
180
                        FeatureAttributeDescriptor ad = (FeatureAttributeDescriptor) eft
181
                        .get(selecteds[i].getName());
182
                        eft.remove(ad.getName());
183
                        EditableFeatureAttributeDescriptor ead = eft
184
                        .add(newName, ad.getDataType(), ad
185
                                        .getSize());
186
                        ead.setPrecision(ad.getPrecision());
187
                }
188

    
189
                featureStore.update(eft);
190
        }
191

    
192

    
193
}