Revision 44085 trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/java/org/gvsig/fmap/dal/swing/impl/featuretype/DefaultFeatureTypePanel.java

View differences:

DefaultFeatureTypePanel.java
1 1
package org.gvsig.fmap.dal.swing.impl.featuretype;
2 2

  
3 3
import java.awt.BorderLayout;
4
import java.awt.Dimension;
5
import java.awt.event.ActionEvent;
6
import java.awt.event.ActionListener;
7
import java.util.Date;
4 8
import java.util.Objects;
5 9
import javax.swing.JComponent;
6 10
import javax.swing.event.ListSelectionEvent;
7 11
import javax.swing.event.ListSelectionListener;
12
import javax.swing.event.TableModelEvent;
8 13
import javax.swing.table.AbstractTableModel;
9 14
import javax.swing.table.TableModel;
15
import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
10 16
import org.gvsig.fmap.dal.feature.EditableFeatureType;
11 17
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
18
import org.gvsig.fmap.dal.feature.FeatureStore;
12 19
import org.gvsig.fmap.dal.feature.FeatureType;
20
import org.gvsig.tools.ToolsLocator;
21
import org.gvsig.tools.dataTypes.DataTypes;
22
import org.gvsig.tools.i18n.I18nManager;
13 23

  
14 24
/**
15 25
 *
......
29 39
          "Size",
30 40
          "Precision",
31 41
          "Default value",
32
          "Calcualed"
42
          "Calculated"
33 43
        };
34 44
        private final Class[] columnClasses = new Class[] {
35 45
          String.class,
......
112 122
        @Override
113 123
        public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
114 124
        }
115
        
125
    
126
        public void fireUpdateEvent() {
127
            this.fireTableChanged(new TableModelEvent(this));
128
        }
116 129
    }
117 130
    
118 131
    private DefaultFeatureTypeAttributePanel descriptorPanel;
119 132
    private FeatureType featureType;
133
    private boolean editable;
134
    private FeatureTypeTableModel tableModel;
135
    private FeatureStore store;
120 136
        
121 137
    public DefaultFeatureTypePanel() {
138
        this.editable = true;
122 139
        this.initComponents();
123 140
    }
124 141

  
125 142
    private void initComponents() {
126
        TableModel model = new FeatureTypeTableModel();
127
        this.tblFields.setModel(model);
143
        this.tableModel = new FeatureTypeTableModel();
144
        this.tblFields.setModel(this.tableModel);
128 145
        this.tblFields.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
129 146
            @Override
130 147
            public void valueChanged(ListSelectionEvent e) {
131
                doRowSelected();
148
                doFormFieldPut();
132 149
            }
133 150
        });
134 151
        this.descriptorPanel = new DefaultFeatureTypeAttributePanel();
135 152
        this.pnlField.setLayout(new BorderLayout());
136 153
        this.pnlField.add(this.descriptorPanel, BorderLayout.CENTER);
137 154
        this.descriptorPanel.setEnabled(false);
155

  
156
        this.btnFormFieldDiscard.addActionListener(new ActionListener() {
157
            @Override
158
            public void actionPerformed(ActionEvent e) {
159
                doFormFieldPut();
160
            }
161
        });
162
        this.btnFormFieldAccept.addActionListener(new ActionListener() {
163
            @Override
164
            public void actionPerformed(ActionEvent e) {
165
                doFormFieldFetch();
166
            }
167
        });
168
        this.btnNew.addActionListener(new ActionListener() {
169
            @Override
170
            public void actionPerformed(ActionEvent e) {
171
                doNewField();
172
            }
173
        });
174
        this.btnDelete.addActionListener(new ActionListener() {
175
            @Override
176
            public void actionPerformed(ActionEvent e) {
177
                doDeleteField();
178
            }
179
        });
180
        
181
        this.setPreferredSize(new Dimension(700, 500));
138 182
    }
139 183
       
140
    private void doRowSelected() {
184
    private void doFormFieldFetch() {
141 185
        int row = this.tblFields.getSelectedRow();
142 186
        if( row<0 ) {
143 187
            return;
144 188
        }
145 189
        FeatureAttributeDescriptor descriptor = this.featureType.getAttributeDescriptor(row);
190
        if( descriptor instanceof EditableFeatureAttributeDescriptor ) {
191
            this.descriptorPanel.fetch((EditableFeatureAttributeDescriptor) descriptor);
192
            this.tableModel.fireUpdateEvent();
193
        } 
194
    }
195
    
196
    private void doFormFieldPut() {
197
        int row = this.tblFields.getSelectedRow();
198
        if( row<0 ) {
199
            return;
200
        }
201
        FeatureAttributeDescriptor descriptor = this.featureType.getAttributeDescriptor(row);
146 202
        this.descriptorPanel.put(descriptor);
147 203
        this.descriptorPanel.setEnabled(true);
204
        if( descriptor instanceof EditableFeatureAttributeDescriptor ) {
205
            this.btnFormFieldAccept.setEnabled(this.editable);
206
            this.descriptorPanel.setEditable(this.editable);
207
        } else {
208
            this.btnFormFieldAccept.setEnabled(false);
209
            this.descriptorPanel.setEditable(false);
210
        }
148 211
    }
149 212
    
213
    
150 214
    @Override
151 215
    public JComponent asJComponent() {
152 216
        return this;
153 217
    }
154 218

  
155
    public void setReadonly(boolean readonly) {
156
        
219
    public void setEditable(boolean editable) {
220
        this.editable = editable;
221
        this.btnFormFieldAccept.setEnabled(editable);
222
        this.btnFormFieldDiscard.setEnabled(editable);
223
        this.btnNew.setEnabled(editable);
224
        this.btnDelete.setEnabled(editable);
225
        this.descriptorPanel.setEnabled(editable);
157 226
    }
158 227

  
159 228
    @Override
......
164 233
    @Override
165 234
    public void put(FeatureType type) {
166 235
        this.featureType = type;
167
        TableModel model = new FeatureTypeTableModel(type);
168
        this.tblFields.setModel(model);
236
        if( type == null ) {
237
            this.store = null;
238
        } else {
239
            // Nos quedamos una referencia para evitar que se destruya, ya que
240
            // el featureTyper se guarda solo una WeakReference.
241
            this.store = type.getStore(); 
242
        }
243
        if( !(type instanceof EditableFeatureType) ) {
244
            this.setEditable(false);
245
        }
246
        this.tableModel = new FeatureTypeTableModel(type);
247
        this.tblFields.setModel(this.tableModel);
169 248
        if( type.size()>0 ) {
170 249
            this.tblFields.getSelectionModel().setSelectionInterval(0, 0);
171 250
        }
172 251
    }
173 252

  
253
    private void doNewField() {
254
        EditableFeatureType eft = (EditableFeatureType)this.featureType;
255
        EditableFeatureAttributeDescriptor descriptor = eft.add(
256
                this.getNewFieldName(), 
257
                DataTypes.STRING
258
        );
259
        this.tableModel.fireUpdateEvent();
260
        int row = descriptor.getIndex();
261
        this.tblFields.getSelectionModel().addSelectionInterval(row,row);
262
    }
263
    
264
    private void doDeleteField() {
265
        int row = this.tblFields.getSelectedRow();
266
        if( row<0 ) {
267
            return;
268
        }
269
        FeatureAttributeDescriptor descriptor = this.featureType.getAttributeDescriptor(row);
270
        ((EditableFeatureType)this.featureType).remove(row);
271
        this.tableModel.fireUpdateEvent();
272
        if( row >= this.tblFields.getRowCount()) {
273
            row = this.tblFields.getRowCount()-1;
274
        }
275
        this.tblFields.getSelectionModel().addSelectionInterval(row,row);
276
    }
277
            
278
    private String getNewFieldName() {
279
        I18nManager i18n = ToolsLocator.getI18nManager();
280
        String prefix = i18n.getTranslation("_Field");
281
        String fieldName;
282
        for (int i = 1; i < 1000; i++) {
283
            fieldName = prefix +"-"+i;
284
            if( this.featureType.get(fieldName)==null ) {
285
                return fieldName;
286
            }
287
        }
288
        fieldName = prefix + "-" + (new Date()).getTime();
289
        return fieldName;
290
    }
291

  
174 292
}

Also available in: Unified diff