Statistics
| Revision:

svn-gvsig-desktop / branches / v2_0_0_prep / extensions / extOracleSpatial / src / org / gvsig / oraclespatial / gui / RepeatedFieldDefinitionPanel.java @ 29563

History | View | Annotate | Download (10.3 KB)

1
package org.gvsig.oraclespatial.gui;
2

    
3
import java.awt.BorderLayout;
4
import java.awt.Component;
5
import java.util.ArrayList;
6

    
7
import javax.swing.DefaultCellEditor;
8
import javax.swing.JButton;
9
import javax.swing.JComboBox;
10
import javax.swing.JLabel;
11
import javax.swing.JOptionPane;
12
import javax.swing.JPanel;
13
import javax.swing.JScrollPane;
14
import javax.swing.JTable;
15
import javax.swing.ListSelectionModel;
16
import javax.swing.event.ListSelectionEvent;
17
import javax.swing.event.ListSelectionListener;
18
import javax.swing.table.DefaultTableModel;
19
import javax.swing.table.TableColumn;
20
import javax.swing.table.TableModel;
21

    
22
import jwizardcomponent.JWizardComponents;
23
import jwizardcomponent.JWizardPanel;
24

    
25
import org.gvsig.fmap.dal.feature.FeatureType;
26

    
27
import com.iver.andami.PluginServices;
28

    
29
/**
30
 * @author fjp
31
 * 
32
 *         Panel para que el usuario defina los campos de la nueva tabla
33
 * 
34
 */
35
public class RepeatedFieldDefinitionPanel extends JWizardPanel {
36

    
37
        private JLabel jLabel = null;
38
        private JScrollPane jScrollPane = null;
39
        private JTable jTable = null;
40
        private JPanel jPanelEast = null;
41
        private JButton jButtonAddField = null;
42
        private JButton jButtonDeleteField = null;
43
        private int MAX_FIELD_LENGTH = 254;
44

    
45
        /**
46
         * Constructor
47
         * 
48
         * @param wizardComponents
49
         */
50
        public RepeatedFieldDefinitionPanel(JWizardComponents wizardComponents) {
51
                super(wizardComponents, null);
52
                initialize();
53

    
54
        }
55

    
56
        /**
57
         * Get table model
58
         * 
59
         * @return
60
         */
61
        public TableModel getFieldsDescription() {
62
                return jTable.getModel();
63
        }
64

    
65
        /*
66
         * (non-Javadoc)
67
         * 
68
         * @see jwizardcomponent.JWizardPanel#next()
69
         */
70
        public void next() {
71
                DefaultTableModel tm = (DefaultTableModel) jTable.getModel();
72
                boolean valid = true;
73
                for (int i = 0; i < tm.getRowCount(); i++) {
74
                        String s = (String) tm.getValueAt(i, 0);
75
                        valid = validate(s);
76
                        String size = (String) tm.getValueAt(i, 2);
77
                        valid = valid && validateInteger(size);
78
                        if (!valid) {
79
                                return;
80
                        }
81
                        String type = (String) tm.getValueAt(i, 1);
82
                        int length = Integer.parseInt((String) tm.getValueAt(i, 2));
83
                        if (type.equals("String") && length > MAX_FIELD_LENGTH) {
84
                                JOptionPane.showMessageDialog(this, PluginServices.getText(
85
                                                this, "max_length_is")
86
                                                + ": "
87
                                                + MAX_FIELD_LENGTH
88
                                                + "\n"
89
                                                + PluginServices.getText(this, "length_of_field")
90
                                                + " '"
91
                                                + s
92
                                                + "' "
93
                                                + PluginServices.getText(this, "will_be_truncated"));
94
                                tm.setValueAt(String.valueOf(MAX_FIELD_LENGTH), i, 2);
95
                        }
96

    
97
                }
98

    
99
                // ensure no field name is used more than once
100
                ArrayList fieldNames = new ArrayList();
101
                for (int i = 0; i < jTable.getRowCount(); i++) {
102
                        if (fieldNames.contains(tm.getValueAt(i, 0))) {
103
                                valid = false;
104
                                JOptionPane.showMessageDialog(this, PluginServices.getText(
105
                                                this, "two_or_more_fields_with_the_same_name"));
106
                                break;
107
                        }
108
                        fieldNames.add(tm.getValueAt(i, 0));
109
                }
110

    
111
                if (valid)
112
                        super.next();
113

    
114
        }
115

    
116
        /**
117
         * 
118
         * @param size
119
         * @return
120
         */
121
        private boolean validateInteger(String size) {
122
                boolean valid = true;
123
                try {
124
                        Integer.parseInt(size);
125
                } catch (NumberFormatException e) {
126
                        valid = false;
127
                        JOptionPane.showMessageDialog((Component) PluginServices
128
                                        .getMainFrame(), PluginServices.getText(this,
129
                                        "no_puede_continuar")
130
                                        + "\n"
131
                                        + PluginServices.getText(this, "size")
132
                                        + " : "
133
                                        + size
134
                                        + "\n"
135
                                        + PluginServices.getText(this, "incorrect_value"));
136
                }
137
                return valid;
138
        }
139

    
140
        /**
141
         * 
142
         * @param s
143
         * @return
144
         */
145
        private boolean validate(String s) {
146
                boolean valid = true;
147
                if (s.equals("")) {
148
                        valid = false;
149
                        JOptionPane.showMessageDialog((Component) PluginServices
150
                                        .getMainFrame(), PluginServices.getText(this,
151
                                        "no_puede_continuar")
152
                                        + "\n"
153
                                        + PluginServices
154
                                                        .getText(this, "the_field_name_is_required"));
155
                }
156
                if (s.indexOf(" ") != -1) {
157
                        valid = false;
158
                        JOptionPane.showMessageDialog((Component) PluginServices
159
                                        .getMainFrame(), PluginServices.getText(this,
160
                                        "no_puede_continuar")
161
                                        + "\n"
162
                                        + PluginServices.getText(this, "field")
163
                                        + " : "
164
                                        + s
165
                                        + "\n"
166
                                        + PluginServices.getText(this,
167
                                                        "contiene_espacios_en_blanco"));
168
                }        
169
                return valid;
170
        }
171

    
172
        /**
173
         * This method initializes this
174
         * 
175
         */
176
        private void initialize() {
177
                jLabel = new JLabel();
178
                jLabel.setText(PluginServices.getText(this, "define_fields"));
179
                this.setLayout(new BorderLayout(5, 5));
180
                this.setSize(new java.awt.Dimension(499, 232));
181
                this.add(jLabel, java.awt.BorderLayout.NORTH);
182
                this.add(getJScrollPane(), java.awt.BorderLayout.CENTER);
183
                this.add(getJPanelEast(), java.awt.BorderLayout.EAST);
184
        }
185

    
186
        /**
187
         * This method initializes jScrollPane
188
         * 
189
         * @return javax.swing.JScrollPane
190
         */
191
        private JScrollPane getJScrollPane() {
192
                if (jScrollPane == null) {
193
                        jScrollPane = new JScrollPane();
194
                        jScrollPane.setViewportView(getJTable());
195
                }
196
                return jScrollPane;
197
        }
198

    
199
        /**
200
         * This method initializes jTable
201
         * 
202
         * @return javax.swing.JTable
203
         */
204
        private JTable getJTable() {
205
                if (jTable == null) {
206
                        jTable = new JTable();
207

    
208
                        DefaultTableModel tm = (DefaultTableModel) jTable.getModel();
209
                        tm.addColumn(PluginServices.getText(this, "field"));
210

    
211
                        // TableColumn fieldTypeColumn = new TableColumn(1);
212
                        // fieldTypeColumn.setHeaderValue("Type");
213
                        // jTable.addColumn(fieldTypeColumn);
214
                        tm.addColumn(PluginServices.getText(this, "type"));
215
                        // MIRAR EL C?DIGO DEL BOT?N DE A?ADIR CAMPO PARA VER EL CellEditor
216
                        // con comboBox
217

    
218
                        /*
219
                         * TableColumn fieldLengthColumn = new TableColumn(2);
220
                         * fieldLengthColumn.setHeaderValue("Length"); //
221
                         * fieldLengthColumn.setCellRenderer(new
222
                         * DefaultTableCellRenderer()); jTable.addColumn(fieldLengthColumn);
223
                         */
224
                        tm.addColumn(PluginServices.getText(this, "length"));
225

    
226
                        // Ask to be notified of selection changes.
227
                        ListSelectionModel rowSM = jTable.getSelectionModel();
228
                        rowSM.addListSelectionListener(new ListSelectionListener() {
229
                                public void valueChanged(ListSelectionEvent e) {
230
                                        // Ignore extra messages.
231
                                        if (e.getValueIsAdjusting())
232
                                                return;
233

    
234
                                        ListSelectionModel lsm = (ListSelectionModel) e.getSource();
235
                                        if (lsm.isSelectionEmpty()) {
236
                                                // no rows are selected
237
                                                jButtonDeleteField.setEnabled(false);
238
                                        } else {
239
                                                // int selectedRow = lsm.getMinSelectionIndex();
240
                                                // selectedRow is selected
241
                                                jButtonDeleteField.setEnabled(true);
242
                                        }
243
                                }
244
                        });
245
                        jTable.getColumn(PluginServices.getText(this, "field")).setWidth(
246
                                        180);
247

    
248
                }
249
                return jTable;
250
        }
251

    
252
        /**
253
         * This method initializes jPanelWest
254
         * 
255
         * @return javax.swing.JPanel
256
         */
257
        private JPanel getJPanelEast() {
258
                if (jPanelEast == null) {
259
                        jPanelEast = new JPanel();
260
                        jPanelEast.setLayout(null);
261
                        jPanelEast.setPreferredSize(new java.awt.Dimension(170, 100));
262
                        jPanelEast.add(getJButtonAddField(), null);
263
                        jPanelEast.add(getJButtonDeleteField(), null);
264
                }
265
                return jPanelEast;
266
        }
267

    
268
        /**
269
         * This method initializes jButtonAddField
270
         * 
271
         * @return javax.swing.JButton
272
         */
273
        private JButton getJButtonAddField() {
274
                if (jButtonAddField == null) {
275
                        jButtonAddField = new JButton();
276
                        jButtonAddField.setText(PluginServices.getText(this, "add_field"));
277
                        jButtonAddField.setLocation(new java.awt.Point(7, 5));
278
                        jButtonAddField.setSize(new java.awt.Dimension(145, 23));
279
                        jButtonAddField.setPreferredSize(new java.awt.Dimension(100, 26));
280
                        jButtonAddField
281
                                        .addActionListener(new java.awt.event.ActionListener() {
282
                                                public void actionPerformed(java.awt.event.ActionEvent e) {
283
                                                        DefaultTableModel tm = (DefaultTableModel) jTable
284
                                                                        .getModel();
285

    
286
                                                        // Figure out a suitable field name
287
                                                        ArrayList fieldNames = new ArrayList();
288
                                                        for (int i = 0; i < jTable.getRowCount(); i++) {
289
                                                                fieldNames.add(tm.getValueAt(i, 0));
290
                                                        }
291
                                                        String[] currentFieldNames = (String[]) fieldNames
292
                                                                        .toArray(new String[0]);
293
                                                        String newField = PluginServices.getText(this,
294
                                                                        "field").replaceAll(" +", "_");
295
                                                        int index = 0;
296
                                                        for (int i = 0; i < currentFieldNames.length; i++) {
297
                                                                if (currentFieldNames[i].startsWith(newField)) {
298
                                                                        try {
299
                                                                                index = Integer
300
                                                                                                .parseInt(currentFieldNames[i]
301
                                                                                                                .replaceAll(newField,
302
                                                                                                                                ""));
303
                                                                        } catch (Exception ex) { /* we don't care */
304
                                                                        }
305
                                                                }
306
                                                        }
307
                                                        String newFieldName = newField + (++index);
308

    
309
                                                        // Add a new row
310
                                                        Object[] newRow = new Object[tm.getColumnCount()];
311
                                                        newRow[0] = newFieldName;
312
                                                        newRow[1] = "String";
313
                                                        newRow[2] = "20";
314
                                                        tm.addRow(newRow);
315

    
316
                                                        // Esto lo a?ado aqu? porque si no tiene registros,
317
                                                        // no hace caso. (Por eso no
318
                                                        // lo pongo en getJTable()
319
                                                        TableColumn typeColumn = jTable.getColumnModel()
320
                                                                        .getColumn(1);
321
                                                        JComboBox comboBox = new JComboBox();
322
                                                        comboBox.addItem("Boolean");
323
                                                        comboBox.addItem("Date");
324
                                                        comboBox.addItem("Integer");
325
                                                        comboBox.addItem("Double");
326
                                                        comboBox.addItem("String");
327
                                                        typeColumn.setCellEditor(new DefaultCellEditor(
328
                                                                        comboBox));
329

    
330
                                                        TableColumn widthColumn = jTable.getColumnModel()
331
                                                                        .getColumn(2);
332

    
333
                                                        // tm.setValueAt("NewField", tm.getRowCount()-1, 0);
334
                                                }
335
                                        });
336

    
337
                }
338
                return jButtonAddField;
339
        }
340

    
341
        /**
342
         * This method initializes jButton
343
         * 
344
         * @return javax.swing.JButton
345
         */
346
        private JButton getJButtonDeleteField() {
347
                if (jButtonDeleteField == null) {
348
                        jButtonDeleteField = new JButton();
349
                        jButtonDeleteField.setText(PluginServices.getText(this,
350
                                        "delete_field"));
351
                        jButtonDeleteField.setLocation(new java.awt.Point(7, 33));
352
                        jButtonDeleteField.setSize(new java.awt.Dimension(145, 23));
353
                        jButtonDeleteField.setEnabled(false);
354
                        jButtonDeleteField
355
                                        .addActionListener(new java.awt.event.ActionListener() {
356
                                                public void actionPerformed(java.awt.event.ActionEvent e) {
357
                                                        int[] selecteds = jTable.getSelectedRows();
358
                                                        DefaultTableModel tm = (DefaultTableModel) jTable
359
                                                                        .getModel();
360

    
361
                                                        for (int i = selecteds.length - 1; i >= 0; i--)
362
                                                                tm.removeRow(selecteds[i]);
363
                                                }
364
                                        });
365
                }
366
                return jButtonDeleteField;
367
        }
368

    
369
}