Statistics
| Revision:

root / branches / v2_0_0_prep / libraries / org.gvsig.newlayer / org.gvsig.newlayer.lib / org.gvsig.newlayer.lib.impl / src / main / java / org / gvsig / newlayer / impl / FeatureTypePanel.java @ 36721

History | View | Annotate | Download (19.4 KB)

1
package org.gvsig.newlayer.impl;
2

    
3
import java.awt.BorderLayout;
4
import java.awt.Component;
5
import java.awt.event.ActionEvent;
6
import java.awt.event.ActionListener;
7
import java.util.ArrayList;
8
import java.util.Iterator;
9
import java.util.List;
10

    
11
import javax.swing.ComboBoxModel;
12
import javax.swing.DefaultCellEditor;
13
import javax.swing.JButton;
14
import javax.swing.JCheckBox;
15
import javax.swing.JComboBox;
16
import javax.swing.JLabel;
17
import javax.swing.JPanel;
18
import javax.swing.JScrollPane;
19
import javax.swing.JTable;
20
import javax.swing.ListSelectionModel;
21
import javax.swing.UIManager;
22
import javax.swing.event.ListDataListener;
23
import javax.swing.event.ListSelectionEvent;
24
import javax.swing.event.ListSelectionListener;
25
import javax.swing.table.DefaultTableModel;
26
import javax.swing.table.TableCellRenderer;
27
import javax.swing.table.TableColumn;
28

    
29
import org.cresques.cts.IProjection;
30
import org.gvsig.app.gui.panels.CRSSelectPanel;
31
import org.gvsig.app.gui.panels.crs.ISelectCrsPanel;
32
import org.gvsig.fmap.dal.DALLocator;
33
import org.gvsig.fmap.dal.DataManager;
34
import org.gvsig.fmap.dal.DataServerExplorer;
35
import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
36
import org.gvsig.fmap.dal.feature.EditableFeatureType;
37
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
38
import org.gvsig.fmap.geom.DataTypes;
39
import org.gvsig.fmap.geom.Geometry;
40
import org.gvsig.gui.beans.wizard.panel.NotContinueWizardException;
41
import org.gvsig.gui.beans.wizard.panel.OptionPanel;
42
import org.gvsig.i18n.Messages;
43
import org.gvsig.newlayer.NewLayerService;
44
import org.gvsig.newlayer.NewLayerWizard;
45
import org.gvsig.tools.dataTypes.DataType;
46
import org.gvsig.tools.swing.api.ToolsSwingLocator;
47
import org.gvsig.tools.swing.api.windowmanager.WindowManager;
48
import org.slf4j.Logger;
49
import org.slf4j.LoggerFactory;
50

    
51
public class FeatureTypePanel extends JPanel implements OptionPanel {
52

    
53
        /**
54
         * 
55
         */
56
        private static final long serialVersionUID = 263541873998597624L;
57
        private NewLayerWizard wizard;
58
        private static final Logger logger = LoggerFactory
59
                        .getLogger(FeatureTypePanel.class);
60

    
61
        private JLabel jLabel = null;
62
        private JScrollPane jScrollPane = null;
63
        protected JTable jTable = null;
64
        private JPanel jPanelEast = null;
65
        private JButton jButtonAddField = null;
66
        private JButton jButtonDeleteField = null;
67
        protected int MAX_FIELD_LENGTH = 254;
68
        private List removedFields;
69

    
70
        private DataServerExplorer explorer = null;
71

    
72
        public FeatureTypePanel(NewLayerWizard wizard) {
73
                this.wizard = wizard;
74
                removedFields = new ArrayList<String>();
75
        }
76

    
77
        private void initializeComponents() {
78
                jLabel = new JLabel();
79
                jLabel.setText(Messages.getText("define_fields"));
80
                this.setLayout(new BorderLayout(5, 5));
81
                this.setSize(new java.awt.Dimension(499, 232));
82
                this.add(jLabel, java.awt.BorderLayout.NORTH);
83
                this.add(getJScrollPane(), java.awt.BorderLayout.CENTER);
84
                this.add(getJPanelEast(), java.awt.BorderLayout.EAST);
85

    
86
        }
87

    
88
        /**
89
         * This method initializes jScrollPane
90
         * 
91
         * @return javax.swing.JScrollPane
92
         */
93
        private JScrollPane getJScrollPane() {
94
                if (jScrollPane == null) {
95
                        jScrollPane = new JScrollPane();
96
                        jScrollPane.setViewportView(getJTable());
97
                }
98
                return jScrollPane;
99
        }
100

    
101
        /**
102
         * This method initializes jTable
103
         * 
104
         * @return javax.swing.JTable
105
         */
106
        private JTable getJTable() {
107
                if (jTable == null) {
108
                        jTable = new JTable();
109

    
110
                        DefaultTableModel tm = (DefaultTableModel) jTable.getModel();
111
                        tm.addColumn(Messages.getText("field"));
112

    
113
                        tm.addColumn(Messages.getText("type"));
114
                        tm.addColumn(Messages.getText("length"));
115
                        tm.addColumn(Messages.getText("geomType"));
116
                        tm.addColumn(Messages.getText("geomSubtype"));
117
                        tm.addColumn(Messages.getText("CRS"));
118
                        tm.addColumn(Messages.getText("primaryKey"));
119
                        tm.addColumn(Messages.getText("mandatory"));
120

    
121
                        // Ask to be notified of selection changes.
122
                        ListSelectionModel rowSM = jTable.getSelectionModel();
123
                        rowSM.addListSelectionListener(new ListSelectionListener() {
124
                                public void valueChanged(ListSelectionEvent e) {
125
                                        // Ignore extra messages.
126
                                        if (e.getValueIsAdjusting())
127
                                                return;
128

    
129
                                        ListSelectionModel lsm = (ListSelectionModel) e.getSource();
130
                                        if (lsm.isSelectionEmpty()) {
131
                                                // no rows are selected
132
                                                jButtonDeleteField.setEnabled(false);
133
                                        } else {
134
                                                jButtonDeleteField.setEnabled(true);
135
                                        }
136
                                }
137
                        });
138
                        jTable.getColumn(Messages.getText("field")).setWidth(180);
139

    
140
                        // Rellenado de la tabla
141
                        EditableFeatureType featureType = this.wizard.getService()
142
                                        .getFeatureType();
143
                        if (featureType != null) {
144
                                int row = 0;
145
                                Iterator it = featureType.iterator();
146
                                while (it.hasNext()) {
147
                                        FeatureAttributeDescriptor descriptor = (FeatureAttributeDescriptor) it
148
                                                        .next();
149
                                        tm.setValueAt(descriptor.getName(), row, 0);
150
                                        tm.setValueAt(descriptor.getType(), row, 1);
151
                                        tm.setValueAt(descriptor.getSize(), row, 2);
152
                                        tm.setValueAt(descriptor.getGeometryType(), row, 3);
153
                                        tm.setValueAt(descriptor.getGeometrySubType(), row, 4);
154
                                        tm.setValueAt(descriptor.getSRS(), row, 5);
155
                                        tm.setValueAt(descriptor.isPrimaryKey(), row, 6);
156
                                        tm.setValueAt(descriptor.isMandatory(), row, 7);
157
                                }
158
                        }
159

    
160
                }
161
                return jTable;
162
        }
163

    
164
        /**
165
         * This method initializes jPanelWest
166
         * 
167
         * @return javax.swing.JPanel
168
         */
169
        private JPanel getJPanelEast() {
170
                if (jPanelEast == null) {
171
                        jPanelEast = new JPanel();
172
                        jPanelEast.setLayout(null);
173
                        jPanelEast.setPreferredSize(new java.awt.Dimension(170, 100));
174
                        jPanelEast.add(getJButtonAddField(), null);
175
                        jPanelEast.add(getJButtonDeleteField(), null);
176
                }
177
                return jPanelEast;
178
        }
179

    
180
        /**
181
         * This method initializes jButtonAddField
182
         * 
183
         * @return javax.swing.JButton
184
         */
185
        private JButton getJButtonAddField() {
186
                if (jButtonAddField == null) {
187
                        jButtonAddField = new JButton();
188
                        jButtonAddField.setText(Messages.getText("add_field"));
189
                        jButtonAddField.setLocation(new java.awt.Point(7, 5));
190
                        jButtonAddField.setSize(new java.awt.Dimension(145, 23));
191
                        jButtonAddField.setPreferredSize(new java.awt.Dimension(100, 26));
192
                        jButtonAddField
193
                                        .addActionListener(new java.awt.event.ActionListener() {
194
                                                public void actionPerformed(java.awt.event.ActionEvent e) {
195
                                                        DefaultTableModel tm = (DefaultTableModel) jTable
196
                                                                        .getModel();
197

    
198
                                                        // Figure out a suitable field name
199
                                                        ArrayList fieldNames = new ArrayList();
200
                                                        for (int i = 0; i < jTable.getRowCount(); i++) {
201
                                                                fieldNames.add(tm.getValueAt(i, 0));
202
                                                        }
203
                                                        String[] currentFieldNames = (String[]) fieldNames
204
                                                                        .toArray(new String[0]);
205
                                                        String newField = Messages.getText("field")
206
                                                                        .replaceAll(" +", "_");
207
                                                        int index = 0;
208
                                                        for (int i = 0; i < currentFieldNames.length; i++) {
209
                                                                if (currentFieldNames[i].startsWith(newField)) {
210
                                                                        try {
211
                                                                                index = Integer
212
                                                                                                .parseInt(currentFieldNames[i]
213
                                                                                                                .replaceAll(newField,
214
                                                                                                                                ""));
215
                                                                        } catch (Exception ex) { /* we don't care */
216
                                                                        }
217
                                                                }
218
                                                        }
219
                                                        String newFieldName = newField + (++index);
220

    
221
                                                        // Esto lo a?ado aqu? porque si no tiene registros,
222
                                                        // no hace caso. (Por eso no
223
                                                        // lo pongo en getJTable()
224
                                                        TableColumn typeColumn = jTable.getColumnModel()
225
                                                                        .getColumn(1);
226
                                                        DataManager dataManager = DALLocator
227
                                                                        .getDataManager();
228
                                                        ComboModelDataType model = new ComboModelDataType(
229
                                                                        dataManager.getDataTypes());
230
                                                        JComboBox comboBox = new JComboBox(model);
231
                                                        typeColumn.setCellEditor(new DefaultCellEditor(
232
                                                                        comboBox));
233

    
234
                                                        TableColumn widthColumn = jTable.getColumnModel()
235
                                                                        .getColumn(2);
236

    
237
                                                        TableColumn geomTypeColumn = jTable
238
                                                                        .getColumnModel().getColumn(3);
239
                                                        ComboModelGeomType geomTypeModel = new ComboModelGeomType(
240
                                                                        getGeomTypes());
241
                                                        JComboBox geomTypeComboBox = new JComboBox(
242
                                                                        geomTypeModel);
243
                                                        geomTypeColumn.setCellEditor(new DefaultCellEditor(
244
                                                                        geomTypeComboBox));
245

    
246
                                                        TableColumn geomSubTypeColumn = jTable
247
                                                                        .getColumnModel().getColumn(4);
248
                                                        ComboModelGeomType geomSubTypeModel = new ComboModelGeomType(
249
                                                                        getGeomSubtypes());
250
                                                        JComboBox geomSubTypeComboBox = new JComboBox(
251
                                                                        geomSubTypeModel);
252
                                                        geomSubTypeColumn
253
                                                                        .setCellEditor(new DefaultCellEditor(
254
                                                                                        geomSubTypeComboBox));
255

    
256
                                                        TableColumn crsColumn = jTable.getColumnModel()
257
                                                                        .getColumn(5);
258
                                                        crsColumn.setCellEditor(new ButtonEditor(
259
                                                                        new JCheckBox()));
260
                                                        ButtonRenderer crsButtonRenderer = new ButtonRenderer();
261
                                                        crsColumn.setCellRenderer(crsButtonRenderer);
262

    
263
                                                        TableColumn primaryKeyColumn = jTable
264
                                                                        .getColumnModel().getColumn(6);
265
                                                        JCheckBox primaryKeyCheckBox = new JCheckBox();
266
                                                        primaryKeyColumn
267
                                                                        .setCellEditor(new DefaultCellEditor(
268
                                                                                        primaryKeyCheckBox));
269
                                                        CheckBoxRenderer primaryKeyCheckBoxRenderer = new CheckBoxRenderer();
270
                                                        primaryKeyColumn
271
                                                                        .setCellRenderer(primaryKeyCheckBoxRenderer);
272

    
273
                                                        TableColumn mandatoryColumn = jTable
274
                                                                        .getColumnModel().getColumn(7);
275
                                                        JCheckBox mandatoryCheckBox = new JCheckBox();
276
                                                        mandatoryColumn
277
                                                                        .setCellEditor(new DefaultCellEditor(
278
                                                                                        mandatoryCheckBox));
279
                                                        CheckBoxRenderer mandatoryCheckBoxRenderer = new CheckBoxRenderer();
280
                                                        mandatoryColumn
281
                                                                        .setCellRenderer(mandatoryCheckBoxRenderer);
282

    
283
                                                        // Add a new row
284
                                                        Object[] newRow = new Object[tm.getColumnCount()];
285
                                                        newRow[0] = newFieldName;
286
                                                        newRow[1] = model.getElementAt(0);
287
                                                        newRow[2] = "20";
288
                                                        newRow[3] = geomTypeModel.getElementAt(0);
289
                                                        newRow[4] = geomSubTypeModel.getElementAt(0);
290
                                                        // Por defecto, la proyeccion de la vista
291
                                                        newRow[5] = wizard.getService().getMapContext()
292
                                                                        .getProjection();
293
                                                        newRow[6] = primaryKeyCheckBox.isSelected();
294
                                                        newRow[7] = mandatoryCheckBox.isSelected();
295
                                                        tm.addRow(newRow);
296
                                                }
297
                                        });
298

    
299
                }
300
                return jButtonAddField;
301
        }
302

    
303
        private class ComboItemDataType {
304
                private DataType dataType;
305

    
306
                public ComboItemDataType(DataType dataType) {
307
                        this.dataType = dataType;
308
                }
309

    
310
                @Override
311
                public String toString() {
312
                        return this.dataType.getName();
313
                }
314
        }
315

    
316
        private class ComboModelDataType implements ComboBoxModel {
317

    
318
                private List<ComboItemDataType> dataTypes;
319
                private ComboItemDataType selected;
320

    
321
                public ComboModelDataType(List<DataType> dataTypes) {
322
                        this.dataTypes = new ArrayList<ComboItemDataType>();
323
                        for (Iterator iterator = dataTypes.iterator(); iterator.hasNext();) {
324
                                DataType dataType = (DataType) iterator.next();
325
                                this.dataTypes.add(new ComboItemDataType(dataType));
326
                        }
327
                }
328

    
329
                public void addListDataListener(ListDataListener arg0) {
330
                        // DO NOTHING
331
                }
332

    
333
                public Object getElementAt(int arg0) {
334
                        return this.dataTypes.get(arg0);
335
                }
336

    
337
                public int getSize() {
338
                        return this.dataTypes.size();
339
                }
340

    
341
                public void removeListDataListener(ListDataListener arg0) {
342
                        // DO NOTHING
343
                }
344

    
345
                public Object getSelectedItem() {
346
                        return this.selected;
347
                }
348

    
349
                public void setSelectedItem(Object anItem) {
350
                        this.selected = (ComboItemDataType) anItem;
351
                }
352

    
353
        }
354

    
355
        class ButtonRenderer extends JButton implements TableCellRenderer {
356

    
357
                /**
358
                 * 
359
                 */
360
                private static final long serialVersionUID = -573793294070515376L;
361

    
362
                public ButtonRenderer() {
363
                        setOpaque(true);
364
                }
365

    
366
                public Component getTableCellRendererComponent(JTable table,
367
                                Object value, boolean isSelected, boolean hasFocus, int row,
368
                                int column) {
369
                        if (isSelected) {
370
                                setForeground(table.getSelectionForeground());
371
                                setBackground(table.getSelectionBackground());
372
                        } else {
373
                                setForeground(table.getForeground());
374
                                setBackground(UIManager.getColor("Button.background"));
375
                        }
376
                        setText((value == null) ? "" : ((IProjection) value).getFullCode());
377
                        return this;
378
                }
379
        }
380

    
381
        class ButtonEditor extends DefaultCellEditor {
382
                /**
383
                 * 
384
                 */
385
                private static final long serialVersionUID = -2820892672026188802L;
386

    
387
                protected JButton button;
388

    
389
                private String label;
390

    
391
                private boolean isPushed;
392

    
393
                private Object value;
394

    
395
                public ButtonEditor(JCheckBox checkBox) {
396
                        super(checkBox);
397
                        button = new JButton();
398
                        button.setOpaque(true);
399
                        button.addActionListener(new ActionListener() {
400
                                public void actionPerformed(ActionEvent e) {
401
                                        fireEditingStopped();
402
                                }
403
                        });
404
                }
405

    
406
                public Component getTableCellEditorComponent(JTable table,
407
                                Object value, boolean isSelected, int row, int column) {
408
                        if (isSelected) {
409
                                button.setForeground(table.getSelectionForeground());
410
                                button.setBackground(table.getSelectionBackground());
411
                        } else {
412
                                button.setForeground(table.getForeground());
413
                                button.setBackground(table.getBackground());
414
                        }
415
                        label = (value == null) ? "" : ((IProjection) value).getFullCode();// .toString();
416
                        button.setText(label);
417
                        isPushed = true;
418
                        this.value = value;
419
                        return button;
420
                }
421

    
422
                public Object getCellEditorValue() {
423
                        IProjection curProj = (IProjection) this.value;
424
                        if (isPushed) {
425
                                ISelectCrsPanel csSelect = CRSSelectPanel.getUIFactory()
426
                                                .getSelectCrsPanel(curProj, true);
427
                                WindowManager wm = ToolsSwingLocator.getWindowManager();
428
                                wm.showWindow((JPanel) csSelect, "Projection",
429
                                                WindowManager.MODE.DIALOG);
430
                                curProj = csSelect.getProjection();
431
                        }
432
                        isPushed = false;
433
                        return curProj;
434
                }
435

    
436
                public boolean stopCellEditing() {
437
                        isPushed = false;
438
                        return super.stopCellEditing();
439
                }
440

    
441
                protected void fireEditingStopped() {
442
                        super.fireEditingStopped();
443
                }
444
        }
445

    
446
        private class ComboItemGeomType {
447
                private int type;
448
                private String name;
449

    
450
                public ComboItemGeomType(String name, int type) {
451
                        this.type = type;
452
                        this.name = name;
453
                }
454

    
455
                @Override
456
                public String toString() {
457
                        return this.name;
458
                }
459
        }
460

    
461
        private class ComboModelGeomType implements ComboBoxModel {
462

    
463
                private List<ComboItemGeomType> geomTypes;
464
                private ComboItemGeomType selected;
465

    
466
                public ComboModelGeomType(List<ComboItemGeomType> geomTypes) {
467
                        this.geomTypes = geomTypes;
468
                }
469

    
470
                public void addListDataListener(ListDataListener arg0) {
471
                        // DO NOTHING
472
                }
473

    
474
                public Object getElementAt(int arg0) {
475
                        return this.geomTypes.get(arg0);
476
                }
477

    
478
                public int getSize() {
479
                        return this.geomTypes.size();
480
                }
481

    
482
                public void removeListDataListener(ListDataListener arg0) {
483
                        // DO NOTHING
484
                }
485

    
486
                public Object getSelectedItem() {
487
                        return this.selected;
488
                }
489

    
490
                public void setSelectedItem(Object anItem) {
491
                        this.selected = (ComboItemGeomType) anItem;
492
                }
493

    
494
        }
495

    
496
        private List<ComboItemGeomType> getGeomTypes() {
497
                List<ComboItemGeomType> geomTypes = new ArrayList<ComboItemGeomType>();
498
                geomTypes
499
                                .add(new ComboItemGeomType("GEOMETRY", Geometry.TYPES.GEOMETRY));
500
                geomTypes.add(new ComboItemGeomType("POINT", Geometry.TYPES.POINT));
501
                geomTypes.add(new ComboItemGeomType("CURVE", Geometry.TYPES.CURVE));
502
                geomTypes.add(new ComboItemGeomType("SURFACE", Geometry.TYPES.SURFACE));
503
                geomTypes.add(new ComboItemGeomType("SOLID", Geometry.TYPES.SOLID));
504
                geomTypes.add(new ComboItemGeomType("AGGREGATE",
505
                                Geometry.TYPES.AGGREGATE));
506
                geomTypes.add(new ComboItemGeomType("MULTIPOINT",
507
                                Geometry.TYPES.MULTIPOINT));
508
                geomTypes.add(new ComboItemGeomType("MULTICURVE",
509
                                Geometry.TYPES.MULTICURVE));
510
                geomTypes.add(new ComboItemGeomType("MULTISURFACE",
511
                                Geometry.TYPES.MULTISURFACE));
512
                geomTypes.add(new ComboItemGeomType("MULTISOLID",
513
                                Geometry.TYPES.MULTISOLID));
514

    
515
                return geomTypes;
516
        }
517

    
518
        private List<ComboItemGeomType> getGeomSubtypes() {
519
                List<ComboItemGeomType> geomSubtypes = new ArrayList<ComboItemGeomType>();
520
                geomSubtypes.add(new ComboItemGeomType("GEOM2D",
521
                                Geometry.SUBTYPES.GEOM2D));
522
                geomSubtypes.add(new ComboItemGeomType("GEOM2DM",
523
                                Geometry.SUBTYPES.GEOM2DM));
524
                geomSubtypes.add(new ComboItemGeomType("GEOM3D",
525
                                Geometry.SUBTYPES.GEOM3D));
526
                geomSubtypes.add(new ComboItemGeomType("GEOM3DM",
527
                                Geometry.SUBTYPES.GEOM3DM));
528
                geomSubtypes.add(new ComboItemGeomType("UNKNOWN",
529
                                Geometry.SUBTYPES.UNKNOWN));
530
                return geomSubtypes;
531
        }
532

    
533
        class CheckBoxRenderer extends JCheckBox implements TableCellRenderer {
534

    
535
                /**
536
                 * 
537
                 */
538
                private static final long serialVersionUID = 5093448776058027505L;
539

    
540
                CheckBoxRenderer() {
541
                        setHorizontalAlignment(JLabel.CENTER);
542
                }
543

    
544
                public Component getTableCellRendererComponent(JTable table,
545
                                Object value, boolean isSelected, boolean hasFocus, int row,
546
                                int column) {
547
                        if (isSelected) {
548
                                setForeground(table.getSelectionForeground());
549
                                setBackground(table.getSelectionBackground());
550
                        } else {
551
                                setForeground(table.getForeground());
552
                                setBackground(table.getBackground());
553
                        }
554
                        setSelected((value != null && ((Boolean) value).booleanValue()));
555
                        return this;
556
                }
557
        }
558

    
559
        /**
560
         * This method initializes jButton
561
         * 
562
         * @return javax.swing.JButton
563
         */
564
        private JButton getJButtonDeleteField() {
565
                if (jButtonDeleteField == null) {
566
                        jButtonDeleteField = new JButton();
567
                        jButtonDeleteField.setText(Messages.getText("delete_field"));
568
                        jButtonDeleteField.setLocation(new java.awt.Point(7, 33));
569
                        jButtonDeleteField.setSize(new java.awt.Dimension(145, 23));
570
                        jButtonDeleteField.setEnabled(false);
571
                        jButtonDeleteField
572
                                        .addActionListener(new java.awt.event.ActionListener() {
573
                                                public void actionPerformed(java.awt.event.ActionEvent e) {
574
                                                        int[] selecteds = jTable.getSelectedRows();
575
                                                        DefaultTableModel tm = (DefaultTableModel) jTable
576
                                                                        .getModel();
577

    
578
                                                        for (int i = selecteds.length - 1; i >= 0; i--) {
579
                                                                removedFields.add((String) tm.getValueAt(i, 0));
580
                                                                tm.removeRow(selecteds[i]);
581
                                                        }
582
                                                }
583
                                        });
584
                }
585
                return jButtonDeleteField;
586
        }
587

    
588
        public String getPanelTitle() {
589
                return Messages.getText("fields_definitions");
590
        }
591

    
592
        public void nextPanel() throws NotContinueWizardException {
593
                fillFeatureType();
594
        }
595

    
596
        private void fillFeatureType() {
597
                /*
598
                 * Coge los datos del formulario y los guarda en
599
                 * this.service.getFeatureType()
600
                 */
601
                NewLayerService service = this.wizard.getService();
602
                EditableFeatureType featureType = service.getFeatureType();
603

    
604
                for (Iterator iterator = removedFields.iterator(); iterator.hasNext();) {
605
                        String name = (String) iterator.next();
606
                        featureType.remove(name);
607
                }
608
                removedFields.clear();
609

    
610
                DefaultTableModel tm = (DefaultTableModel) jTable.getModel();
611
                for (int i = 0; i < tm.getRowCount(); i++) {
612
                        DataType dataType = ((ComboItemDataType) tm.getValueAt(i, 1)).dataType;
613

    
614
                        int fieldLength = Integer.parseInt((String) tm.getValueAt(i, 2));
615
                        // TODO: HACERLO BIEN
616
                        if (dataType.getType() == DataTypes.DOUBLE) {
617
                                fieldLength = 5;
618
                        }
619
                        // FIXME: Arreglar lo que pasa si en el siguiente panel volvemos
620
                        // hacia atras, y en este volvemos a ir hacia adelante
621
                        String fieldName = (String) tm.getValueAt(i, 0);
622
                        EditableFeatureAttributeDescriptor attrDescriptor = (EditableFeatureAttributeDescriptor) featureType
623
                                        .getAttributeDescriptor(fieldName);
624
                        if (attrDescriptor != null) {
625
                                featureType.remove(attrDescriptor);
626
                        }
627
                        EditableFeatureAttributeDescriptor efad1 = featureType.add(
628
                                        (String) tm.getValueAt(i, 0), dataType.getType(),
629
                                        fieldLength);
630
                        if (dataType.getType() == DataTypes.GEOMETRY) {
631
                                efad1.setGeometryType(((ComboItemGeomType) tm.getValueAt(i, 3)).type);
632
                                efad1.setGeometrySubType(((ComboItemGeomType) tm.getValueAt(i,
633
                                                4)).type);
634
                                efad1.setIsPrimaryKey(((Boolean) tm.getValueAt(i, 6))
635
                                                .booleanValue());
636
                                efad1.setAllowNull(!((Boolean) tm.getValueAt(i, 7))
637
                                                .booleanValue());
638
                                efad1.setSRS((IProjection) tm.getValueAt(i, 5));
639
                        }
640
                }
641
        }
642

    
643
        public void lastPanel() {
644
                // TODO Auto-generated method stub
645
                logger.info("FeatureTypePanel: lastPanel");
646
        }
647

    
648
        public void updatePanel() {
649
                initializeComponents();
650

    
651
        }
652

    
653
        public JPanel getJPanel() {
654
                return this;
655
        }
656

    
657
}