Statistics
| Revision:

root / trunk / extensions / extCAD / src / com / iver / cit / gvsig / gui / cad / panels / JPanelFieldDefinition.java @ 6117

History | View | Annotate | Download (8.28 KB)

1 4364 fjp
package com.iver.cit.gvsig.gui.cad.panels;
2
3 4380 fjp
import java.awt.BorderLayout;
4 6010 caballero
import java.awt.Component;
5 4385 fjp
import java.sql.Types;
6 4380 fjp
7
import javax.swing.DefaultCellEditor;
8
import javax.swing.JButton;
9
import javax.swing.JComboBox;
10 4364 fjp
import javax.swing.JLabel;
11 6010 caballero
import javax.swing.JOptionPane;
12 4380 fjp
import javax.swing.JPanel;
13 4367 fjp
import javax.swing.JScrollPane;
14
import javax.swing.JTable;
15 4380 fjp
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 4364 fjp
21 4584 caballero
import com.iver.andami.PluginServices;
22 4385 fjp
import com.iver.cit.gvsig.fmap.drivers.FieldDescription;
23
24 4380 fjp
import jwizardcomponent.JWizardComponents;
25
import jwizardcomponent.JWizardPanel;
26
27 4364 fjp
/**
28
 * @author fjp
29 4584 caballero
 *
30 4364 fjp
 * Panel para que el usuario seleccione el driver que va a utilizar para
31
 * crear un tema desde cero.
32
 *
33
 */
34
public class JPanelFieldDefinition extends JWizardPanel {
35
36
37 4367 fjp
        private JLabel jLabel = null;
38
        private JScrollPane jScrollPane = null;
39
        private JTable jTable = null;
40 4380 fjp
        private JPanel jPanelEast = null;
41
        private JButton jButtonAddField = null;
42
        private JButton jButtonDeleteField = null;
43 4367 fjp
44
45 4380 fjp
        public JPanelFieldDefinition(JWizardComponents wizardComponents) {
46
                super(wizardComponents, null);
47 4364 fjp
                initialize();
48
                // TODO Auto-generated constructor stub
49
        }
50
51 4584 caballero
52 4380 fjp
        /* (non-Javadoc)
53
         * @see jwizardcomponent.JWizardPanel#next()
54
         */
55
        public void next() {
56
                // TODO Auto-generated method stub
57 6010 caballero
                DefaultTableModel tm=(DefaultTableModel) jTable.getModel();
58
                boolean valid=true;
59
                for (int i = 0;i<tm.getRowCount();i++) {
60
                        String s=(String)tm.getValueAt(0,i);
61
                        valid=validate(s);
62
63
                }
64
                if (valid)
65
                        super.next();
66 5747 fjp
                /* getWizardComponents().getFinishButton().setVisible(true);
67 5178 caballero
                if (!((FileBasedPanel)getWizardComponents().getWizardPanel(2)).getPath().equals(""))
68
                        getWizardComponents().getFinishButton().setEnabled(true);
69
                else
70 5747 fjp
                        getWizardComponents().getFinishButton().setEnabled(false); */
71 4380 fjp
        }
72
73
74 6010 caballero
        private boolean validate(String s) {
75
                boolean valid=true;
76
                if (s.indexOf(" ")!=-1) {
77
                        valid=false;
78
                        JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(),
79
                                        PluginServices.getText(this,"no_puede_continuar")+"\n"+
80
                                        PluginServices.getText(this,"field")+" : "+s+"\n"+
81
                                        PluginServices.getText(this,"contiene_espacios_en_blanco"));
82
                }
83
                return valid;
84
        }
85
86
87 4364 fjp
        /**
88
         * This method initializes this
89 4584 caballero
         *
90 4364 fjp
         */
91
        private void initialize() {
92 4367 fjp
        jLabel = new JLabel();
93 4584 caballero
        jLabel.setText(PluginServices.getText(this,"define_fields"));
94 4380 fjp
        this.setLayout(new BorderLayout(5,5));
95 4367 fjp
        this.setSize(new java.awt.Dimension(437,232));
96 4380 fjp
        this.add(jLabel, java.awt.BorderLayout.NORTH);
97
        this.add(getJScrollPane(), java.awt.BorderLayout.CENTER);
98
        this.add(getJPanelEast(), java.awt.BorderLayout.EAST);
99 4364 fjp
        }
100
101
102 4367 fjp
        /**
103 4584 caballero
         * This method initializes jScrollPane
104
         *
105
         * @return javax.swing.JScrollPane
106 4367 fjp
         */
107
        private JScrollPane getJScrollPane() {
108
                if (jScrollPane == null) {
109
                        jScrollPane = new JScrollPane();
110
                        jScrollPane.setViewportView(getJTable());
111
                }
112
                return jScrollPane;
113
        }
114 4364 fjp
115 4367 fjp
116
        /**
117 4584 caballero
         * This method initializes jTable
118
         *
119
         * @return javax.swing.JTable
120 4367 fjp
         */
121
        private JTable getJTable() {
122
                if (jTable == null) {
123
                        jTable = new JTable();
124 4380 fjp
                        DefaultTableModel tm = (DefaultTableModel) jTable.getModel();
125 4584 caballero
                        tm.addColumn(PluginServices.getText(this,"field"));
126
127 4380 fjp
                        // TableColumn fieldTypeColumn = new TableColumn(1);
128
                        // fieldTypeColumn.setHeaderValue("Type");
129
                        // jTable.addColumn(fieldTypeColumn);
130 4584 caballero
                        tm.addColumn(PluginServices.getText(this,"type"));
131 4380 fjp
                        // MIRAR EL C?DIGO DEL BOT?N DE A?ADIR CAMPO PARA VER EL CellEditor con comboBox
132
133 4584 caballero
134 4380 fjp
                        /* TableColumn fieldLengthColumn = new TableColumn(2);
135
                        fieldLengthColumn.setHeaderValue("Length");
136
                        // fieldLengthColumn.setCellRenderer(new DefaultTableCellRenderer());
137
                        jTable.addColumn(fieldLengthColumn); */
138 4584 caballero
                        tm.addColumn(PluginServices.getText(this,"length"));
139
140 4380 fjp
//                        Ask to be notified of selection changes.
141
                        ListSelectionModel rowSM = jTable.getSelectionModel();
142
                        rowSM.addListSelectionListener(new ListSelectionListener() {
143
                            public void valueChanged(ListSelectionEvent e) {
144
                                //Ignore extra messages.
145
                                if (e.getValueIsAdjusting()) return;
146
147
                                ListSelectionModel lsm =
148
                                    (ListSelectionModel)e.getSource();
149
                                if (lsm.isSelectionEmpty()) {
150
                                    //no rows are selected
151
                                        jButtonDeleteField.setEnabled(false);
152
                                } else {
153
                                    // int selectedRow = lsm.getMinSelectionIndex();
154
                                    //selectedRow is selected
155
                                        jButtonDeleteField.setEnabled(true);
156
                                }
157
                            }
158
                        });
159
160 4584 caballero
161 4367 fjp
                }
162
                return jTable;
163
        }
164
165
166 4380 fjp
        /**
167 4584 caballero
         * This method initializes jPanelWest
168
         *
169
         * @return javax.swing.JPanel
170 4380 fjp
         */
171
        private JPanel getJPanelEast() {
172
                if (jPanelEast == null) {
173
                        jPanelEast = new JPanel();
174
                        jPanelEast.setLayout(null);
175
                        jPanelEast.setPreferredSize(new java.awt.Dimension(100,100));
176
                        jPanelEast.add(getJButtonAddField(), null);
177
                        jPanelEast.add(getJButtonDeleteField(), null);
178
                }
179
                return jPanelEast;
180
        }
181 4367 fjp
182 4380 fjp
183
        /**
184 4584 caballero
         * This method initializes jButtonAddField
185
         *
186
         * @return javax.swing.JButton
187 4380 fjp
         */
188
        private JButton getJButtonAddField() {
189
                if (jButtonAddField == null) {
190
                        jButtonAddField = new JButton();
191 4584 caballero
                        jButtonAddField.setText(PluginServices.getText(this,"add_field"));
192 4380 fjp
                        jButtonAddField.setBounds(new java.awt.Rectangle(7,5,85,23));
193
                        jButtonAddField.addActionListener(new java.awt.event.ActionListener() {
194
                                public void actionPerformed(java.awt.event.ActionEvent e) {
195
                                        // Add a new row
196
                                        DefaultTableModel tm = (DefaultTableModel) jTable.getModel();
197
                                        Object[] newRow = new Object[tm.getColumnCount()];
198 6010 caballero
                                        newRow[0] = PluginServices.getText(this,"field");
199 4380 fjp
                                        newRow[1] = "String";
200 4534 fjp
                                        newRow[2] = "20";
201 4380 fjp
                                        tm.addRow(newRow);
202 4584 caballero
203 4380 fjp
                                        // Esto lo a?ado aqu? porque si no tiene registros, no hace caso. (Por eso no
204
                                        // lo pongo en getJTable()
205
                                        TableColumn typeColumn = jTable.getColumnModel().getColumn(1);
206
                                        JComboBox comboBox = new JComboBox();
207
                                        comboBox.addItem("Boolean");
208
                                        comboBox.addItem("Date");
209
                                        comboBox.addItem("Integer");
210
                                        comboBox.addItem("Double");
211
                                        comboBox.addItem("String");
212
                                        typeColumn.setCellEditor(new DefaultCellEditor(comboBox));
213 4534 fjp
214
                                        TableColumn widthColumn = jTable.getColumnModel().getColumn(2);
215 4584 caballero
216 4380 fjp
                                        // tm.setValueAt("NewField", tm.getRowCount()-1, 0);
217
                                }
218
                        });
219 4584 caballero
220 4380 fjp
                }
221
                return jButtonAddField;
222
        }
223
224
225
        /**
226 4584 caballero
         * This method initializes jButton
227
         *
228
         * @return javax.swing.JButton
229 4380 fjp
         */
230
        private JButton getJButtonDeleteField() {
231
                if (jButtonDeleteField == null) {
232
                        jButtonDeleteField = new JButton();
233 4584 caballero
                        jButtonDeleteField.setText(PluginServices.getText(this,"delete_field"));
234 4380 fjp
                        jButtonDeleteField.setBounds(new java.awt.Rectangle(7,33,85,23));
235
                        jButtonDeleteField.setEnabled(false);
236
                        jButtonDeleteField.addActionListener(new java.awt.event.ActionListener() {
237
                                public void actionPerformed(java.awt.event.ActionEvent e) {
238
                                        int[] selecteds = jTable.getSelectedRows();
239
                                        DefaultTableModel tm = (DefaultTableModel) jTable.getModel();
240 4584 caballero
241 4380 fjp
                                        for (int i=selecteds.length-1; i >=0; i--)
242
                                                tm.removeRow(selecteds[i]);
243
                                }
244
                        });
245
                }
246
                return jButtonDeleteField;
247
        }
248
249
250 4385 fjp
        /**
251
         * Convierte lo que hay en la tabla en una definici?n de campos
252
         * adecuada para crear un LayerDefinition
253
         * @return
254
         */
255
        public FieldDescription[] getFieldsDescription() {
256
                DefaultTableModel tm = (DefaultTableModel) jTable.getModel();
257
                FieldDescription[] fieldsDesc = new FieldDescription[tm.getRowCount()];
258 4584 caballero
259 4385 fjp
                for (int i=0; i < tm.getRowCount(); i++)
260
                {
261
                        fieldsDesc[i] = new FieldDescription();
262
                        fieldsDesc[i].setFieldName((String) tm.getValueAt(i,0));
263
                        String strType = (String) tm.getValueAt(i,1);
264
                        if (strType.equals("String"))
265
                                fieldsDesc[i].setFieldType(Types.VARCHAR);
266
                        if (strType.equals("Double"))
267
                                fieldsDesc[i].setFieldType(Types.DOUBLE);
268
                        if (strType.equals("Integer"))
269
                                fieldsDesc[i].setFieldType(Types.INTEGER);
270
                        if (strType.equals("Boolean"))
271
                                fieldsDesc[i].setFieldType(Types.BOOLEAN);
272
                        if (strType.equals("Date"))
273
                                fieldsDesc[i].setFieldType(Types.DATE);
274 4534 fjp
                        int fieldLength = Integer.parseInt((String) tm.getValueAt(i,2));
275
                        fieldsDesc[i].setFieldLength(fieldLength);
276 4584 caballero
277 4385 fjp
                        // TODO: HACERLO BIEN
278
                        if (strType.equals("Double"))
279
                                fieldsDesc[i].setFieldDecimalCount(5);
280 4584 caballero
281 4385 fjp
                }
282 4584 caballero
283 4385 fjp
                return fieldsDesc;
284
        }
285 4380 fjp
286 4385 fjp
287
288 4364 fjp
}  //  @jve:decl-index=0:visual-constraint="10,10"