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 |
} |