Revision 101 org.gvsig.wfs.app/trunk/org.gvsig.wfs.app/org.gvsig.wfs.app.mainplugin/src/main/java/org/gvsig/wfs/gui/panels/WFSSelectFeaturePanel.java

View differences:

WFSSelectFeaturePanel.java
150 150
 *
151 151
 *
152 152
 */
153

  
154

  
155 153
/**
156
 * <p>Panel where user can select a feature type to load as a WFS layer.</p>
157
 * 
154
 * <p>
155
 * Panel where user can select a feature type to load as a WFS layer.</p>
156
 *
158 157
 * @author Jorge Piera Llodr? (piera_jor@gva.es)
159 158
 * @author Pablo Piqueras Bartolom? (pablo.piqueras@iver.es)
160 159
 */
161 160
public class WFSSelectFeaturePanel extends AbstractWFSPanel {
162
	private static final long serialVersionUID = -3781080396069038450L;
163
	private JPanel featureListPanel = null;
164
	private JScrollPane jScrollPane = null;
165
	private LayerTable lstFeatures = null;
166
	private JTextField txtName = null;
167
	private JCheckBox chkExtendedNames = null;
168
	private JPanel layerNamePanel = null;
169
	private WFSSelectedFeature layerNode = null;
170
	private ListSelectionListener listSelectionListener = null;
171 161

  
172
	/**
173
	 * Creates a new WFS select feature panel.
174
	 */
175
	public WFSSelectFeaturePanel() {
176
		super();
177
		initialize();
178
	}
162
    private static final long serialVersionUID = -3781080396069038450L;
163
    private JPanel featureListPanel = null;
164
    private JScrollPane jScrollPane = null;
165
    private LayerTable lstFeatures = null;
166
    private JTextField txtName = null;
167
    private JCheckBox chkExtendedNames = null;
168
    private JPanel layerNamePanel = null;
169
    private WFSSelectedFeature layerNode = null;
170
    private ListSelectionListener listSelectionListener = null;
179 171

  
180
	/**
181
	 * This method initializes coveragesListPanel
182
	 *
183
	 * @return javax.swing.JPanel
184
	 */
185
	private JPanel getFeaturesListPanel() {
186
		if (featureListPanel == null) {
187
			java.awt.GridBagConstraints gridBagConstraints;
188
			featureListPanel = new JPanel();
189
			featureListPanel.setLayout(new java.awt.GridBagLayout());
190
			featureListPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(
191
					null, PluginServices.getText(this, "select_features"),
192
					javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
193
					javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
172
    /**
173
     * Creates a new WFS select feature panel.
174
     */
175
    public WFSSelectFeaturePanel() {
176
        super();
177
        initialize();
178
    }
194 179

  
195
			gridBagConstraints = new java.awt.GridBagConstraints();
196
			gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
197
			gridBagConstraints.weightx = 1.0;
198
			gridBagConstraints.weighty = 1.0;
199
			featureListPanel.add(getJScrollPane(), gridBagConstraints);
200
		}
180
    /**
181
     * This method initializes coveragesListPanel
182
     *
183
     * @return javax.swing.JPanel
184
     */
185
    private JPanel getFeaturesListPanel() {
186
        if (featureListPanel == null) {
187
            java.awt.GridBagConstraints gridBagConstraints;
188
            featureListPanel = new JPanel();
189
            featureListPanel.setLayout(new java.awt.GridBagLayout());
190
            featureListPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(
191
                    null, PluginServices.getText(this, "select_features"),
192
                    javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
193
                    javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
201 194

  
202
		return featureListPanel;
203
	}
195
            gridBagConstraints = new java.awt.GridBagConstraints();
196
            gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
197
            gridBagConstraints.weightx = 1.0;
198
            gridBagConstraints.weighty = 1.0;
199
            featureListPanel.add(getJScrollPane(), gridBagConstraints);
200
        }
204 201

  
205
	/**
206
	 * This method initializes jScrollPane
207
	 *
208
	 * @return javax.swing.JScrollPane
209
	 */
210
	private JScrollPane getJScrollPane() {
211
		if (jScrollPane == null) {
212
			jScrollPane = new JScrollPane();		
213
			jScrollPane.setViewportView(getLstFeatures());
214
			jScrollPane.setToolTipText(PluginServices.getText(jScrollPane, "feature_Selection_Info"));
215
		}
202
        return featureListPanel;
203
    }
216 204

  
217
		return jScrollPane;
218
	}
205
    /**
206
     * This method initializes jScrollPane
207
     *
208
     * @return javax.swing.JScrollPane
209
     */
210
    private JScrollPane getJScrollPane() {
211
        if (jScrollPane == null) {
212
            jScrollPane = new JScrollPane();
213
            jScrollPane.setViewportView(getLstFeatures());
214
            jScrollPane.setToolTipText(PluginServices.getText(jScrollPane, "feature_Selection_Info"));
215
        }
219 216

  
220
	/**
221
	 * This method initializes lstFeatures
222
	 *
223
	 * @return javax.swing.LayerTable
224
	 */
225
	public LayerTable getLstFeatures() {
226
		if (lstFeatures == null) {
227
			lstFeatures = new LayerTable();
228
			lstFeatures.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
229
			lstFeatures.getSelectionModel().addListSelectionListener(getListSelectionListener());
230
			lstFeatures.setToolTipText(PluginServices.getText(lstFeatures, "feature_Selection_Info"));
217
        return jScrollPane;
218
    }
231 219

  
232
			// Double-click -> click the 'Next' button
233
			lstFeatures.addMouseListener(new MouseAdapter() {
234
				/*
235
				 *  (non-Javadoc)
236
				 * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)
237
				 */
238
				public void mouseClicked(MouseEvent e) {
239
					if (e.getClickCount() == 2) {
240
						Object obj = getPanelGroup();
220
    /**
221
     * This method initializes lstFeatures
222
     *
223
     * @return javax.swing.LayerTable
224
     */
225
    public LayerTable getLstFeatures() {
226
        if (lstFeatures == null) {
227
            lstFeatures = new LayerTable();
228
            lstFeatures.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
229
            lstFeatures.getSelectionModel().addListSelectionListener(getListSelectionListener());
230
            lstFeatures.setToolTipText(PluginServices.getText(lstFeatures, "feature_Selection_Info"));
241 231

  
242
						if ((obj != null) && (obj instanceof WFSParamsPanel))
243
							((WFSParamsPanel)obj).doClickOnNextButton();
244
					}
245
				}			
246
			});
247
		}
232
            // Double-click -> click the 'Next' button
233
            lstFeatures.addMouseListener(new MouseAdapter() {
234
                /*
235
                 *  (non-Javadoc)
236
                 * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)
237
                 */
238
                public void mouseClicked(MouseEvent e) {
239
                    if (e.getClickCount() == 2) {
240
                        Object obj = getPanelGroup();
248 241

  
249
		return lstFeatures;
250
	}
251
	
242
                        if ((obj != null) && (obj instanceof WFSParamsPanel)) {
243
                            ((WFSParamsPanel) obj).doClickOnNextButton();
244
                        }
245
                    }
246
                }
247
            });
248
        }
249

  
250
        return lstFeatures;
251
    }
252

  
252 253
    public int getSelectedFeaturesCount() {
253 254

  
254 255
        if (lstFeatures == null) {
255 256
            return 0;
256 257
        }
257
        
258

  
258 259
        ListSelectionModel m = lstFeatures.getSelectionModel();
259 260
        if (m == null || m.isSelectionEmpty()) {
260 261
            return 0;
261 262
        } else {
262 263
            int resp = 0;
263 264
            for (int i = m.getMinSelectionIndex();
264
                i <= m.getMaxSelectionIndex();
265
                i++) {
265
                    i <= m.getMaxSelectionIndex();
266
                    i++) {
266 267

  
267 268
                if (m.isSelectedIndex(i)) {
268 269
                    resp++;
......
273 274

  
274 275
    }
275 276

  
276
	/**
277
	 * Creates the list selection listener for the layers list
278
	 * 
279
	 * @return the listener
280
	 */
281
	private ListSelectionListener getListSelectionListener(){
282
		if (listSelectionListener == null){
283
			listSelectionListener = new ListSelectionListener(){
284
				public void valueChanged(javax.swing.event.ListSelectionEvent e) {
285
					DefaultListSelectionModel model = (DefaultListSelectionModel) e.getSource();
286
					LayerTableModel t_model = ((LayerTableModel)lstFeatures.getModel());
287
					if (t_model.isUpdatingSelection())
288
						return;
277
    /**
278
     * Creates the list selection listener for the layers list
279
     *
280
     * @return the listener
281
     */
282
    private ListSelectionListener getListSelectionListener() {
283
        if (listSelectionListener == null) {
284
            listSelectionListener = new ListSelectionListener() {
285
                public void valueChanged(javax.swing.event.ListSelectionEvent e) {
286
                    DefaultListSelectionModel model = (DefaultListSelectionModel) e.getSource();
287
                    LayerTableModel t_model = ((LayerTableModel) lstFeatures.getModel());
288
                    if (t_model.isUpdatingSelection()) {
289
                        return;
290
                    }
289 291

  
290
					// With this condition we force to execute the updating only when a row has been selected by the user
291
					if ((model.getMinSelectionIndex() > -1) && (e.getValueIsAdjusting() == false)) {
292
						// Indicate that now we are loading a new layer
293
						IPanelGroup panelGroup = getPanelGroup();
292
                    // With this condition we force to execute the updating only when a row has been selected by the user
293
                    if ((model.getMinSelectionIndex() > -1) && (e.getValueIsAdjusting() == false)) {
294
                        // Indicate that now we are loading a new layer
295
                        IPanelGroup panelGroup = getPanelGroup();
294 296

  
295
						if (panelGroup == null)
296
							return;
297
                        if (panelGroup == null) {
298
                            return;
299
                        }
297 300

  
298
						/*
299
						if (((WFSParamsPanel)panelGroup).getFilterPanel() == null)
300
							return;
301
						*/
302
			
303
						refreshData();
304
					}
305
					
301
                        /*
302
                         if (((WFSParamsPanel)panelGroup).getFilterPanel() == null)
303
                         return;
304
                         */
305
                        refreshData();
306
                    }
307

  
306 308
                    // =============================================
307 309
                    // If zero selected, settings are invalid
308
					int n_sel = getSelectedFeaturesCount();
309
					if (n_sel == 0) {
310
	                       Object obj = getPanelGroup();
311
	                       if (obj != null && obj instanceof WFSParamsPanel) {
312
	                           obj = ((WFSParamsPanel) obj).getParent();
313
	                           if (obj instanceof WFSWizard) {
314
	                               ((WFSWizard) obj).callStateChanged(false); 
315
	                           }
316
	                       }
317
					}
318
					// =============================================
319
				}
320
			};	
321
		}
310
                    int n_sel = getSelectedFeaturesCount();
311
                    if (n_sel == 0) {
312
                        Object obj = getPanelGroup();
313
                        if (obj != null && obj instanceof WFSParamsPanel) {
314
                            obj = ((WFSParamsPanel) obj).getParent();
315
                            if (obj instanceof WFSWizard) {
316
                                ((WFSWizard) obj).callStateChanged(false);
317
                            }
318
                        }
319
                    }
320
                    // =============================================
321
                }
322
            };
323
        }
322 324

  
323
		return listSelectionListener;
324
	}
325
        return listSelectionListener;
326
    }
325 327

  
326
	/**
327
	 * This method initializes jTextField
328
	 *
329
	 * @return javax.swing.JTextField
330
	 */
331
	public JTextField getTxtName() {
332
		if (txtName == null) {
333
			txtName = new JTextField();
334
			txtName.setBounds(6, 19, 472, 20);
335
			txtName.setText(PluginServices.getText(this, "WFSLayer"));
336
			txtName.setEditable(false);
337
			txtName.setBackground(Color.WHITE);
338
			txtName.setToolTipText(PluginServices.getText(txtName, "feature_to_load"));
328
    /**
329
     * This method initializes jTextField
330
     *
331
     * @return javax.swing.JTextField
332
     */
333
    public JTextField getTxtName() {
334
        if (txtName == null) {
335
            txtName = new JTextField();
336
            txtName.setBounds(6, 19, 472, 20);
337
            txtName.setText(PluginServices.getText(this, "WFSLayer"));
338
            txtName.setEditable(false);
339
            txtName.setBackground(Color.WHITE);
340
            txtName.setToolTipText(PluginServices.getText(txtName, "feature_to_load"));
339 341

  
340
			txtName.getDocument().addDocumentListener(new DocumentListener() {
341
				/*
342
				 * (non-Javadoc)
343
				 * @see javax.swing.event.DocumentListener#changedUpdate(javax.swing.event.DocumentEvent)
344
				 */
345
				public void changedUpdate(DocumentEvent e) {
346
				}
342
            txtName.getDocument().addDocumentListener(new DocumentListener() {
343
                /*
344
                 * (non-Javadoc)
345
                 * @see javax.swing.event.DocumentListener#changedUpdate(javax.swing.event.DocumentEvent)
346
                 */
347
                public void changedUpdate(DocumentEvent e) {
348
                }
347 349

  
348
				/*
349
				 * (non-Javadoc)
350
				 * @see javax.swing.event.DocumentListener#insertUpdate(javax.swing.event.DocumentEvent)
351
				 */
352
				public void insertUpdate(DocumentEvent e) {
353
					IPanelGroup panelGroup = getPanelGroup();
350
                /*
351
                 * (non-Javadoc)
352
                 * @see javax.swing.event.DocumentListener#insertUpdate(javax.swing.event.DocumentEvent)
353
                 */
354
                public void insertUpdate(DocumentEvent e) {
355
                    IPanelGroup panelGroup = getPanelGroup();
354 356

  
355
					if (panelGroup == null)
356
						return;
357
                    if (panelGroup == null) {
358
                        return;
359
                    }
357 360

  
358
					((WFSParamsPanel)panelGroup).setApplicable(true);
359
				}
361
                    ((WFSParamsPanel) panelGroup).setApplicable(true);
362
                }
360 363

  
361
				/*
362
				 * (non-Javadoc)
363
				 * @see javax.swing.event.DocumentListener#removeUpdate(javax.swing.event.DocumentEvent)
364
				 */
365
				public void removeUpdate(DocumentEvent e) {
366
				}
367
			});
368
		}
364
                /*
365
                 * (non-Javadoc)
366
                 * @see javax.swing.event.DocumentListener#removeUpdate(javax.swing.event.DocumentEvent)
367
                 */
368
                public void removeUpdate(DocumentEvent e) {
369
                }
370
            });
371
        }
369 372

  
370
		return txtName;
371
	}
373
        return txtName;
374
    }
372 375

  
373
	/**
374
	 * This method initializes chkExtendedNames
375
	 *
376
	 * @return javax.swing.JCheckBox
377
	 */
378
	private JCheckBox getChkExtendedNames() {
379
		if (chkExtendedNames == null) {
380
			chkExtendedNames = new JCheckBox();
381
			chkExtendedNames.setText(PluginServices.getText(this, "show_layer_names"));
382
			chkExtendedNames.setBounds(10, 372, 382, 20);
383
			chkExtendedNames.addItemListener(new java.awt.event.ItemListener() {
384
				/*
385
				 * (non-Javadoc)
386
				 * @see java.awt.event.ItemListener#itemStateChanged(java.awt.event.ItemEvent)
387
				 */
388
				public void itemStateChanged(java.awt.event.ItemEvent e) {
389
					boolean b = chkExtendedNames.isSelected();
390
					getLstFeatures().setShowLayerNames(b);
391
					getLstFeatures().repaint();
392
				}
393
			});
394
		}
376
    /**
377
     * This method initializes chkExtendedNames
378
     *
379
     * @return javax.swing.JCheckBox
380
     */
381
    private JCheckBox getChkExtendedNames() {
382
        if (chkExtendedNames == null) {
383
            chkExtendedNames = new JCheckBox();
384
            chkExtendedNames.setText(PluginServices.getText(this, "show_layer_names"));
385
            chkExtendedNames.setBounds(10, 372, 382, 20);
386
            chkExtendedNames.addItemListener(new java.awt.event.ItemListener() {
387
                /*
388
                 * (non-Javadoc)
389
                 * @see java.awt.event.ItemListener#itemStateChanged(java.awt.event.ItemEvent)
390
                 */
391
                public void itemStateChanged(java.awt.event.ItemEvent e) {
392
                    boolean b = chkExtendedNames.isSelected();
393
                    getLstFeatures().setShowLayerNames(b);
394
                    getLstFeatures().repaint();
395
                }
396
            });
397
        }
395 398

  
396
		return chkExtendedNames;
397
	}
399
        return chkExtendedNames;
400
    }
398 401

  
399
	/**
400
	 * Set the selected layer node
401
	 * 
402
	 * @param layerNode the layer to select
403
	 */
404
	public void setSelectedFeature(WFSSelectedFeature layerNode){
405
		int index = -1;
402
    /**
403
     * Set the selected layer node
404
     *
405
     * @param layerNode the layer to select
406
     */
407
    public void setSelectedFeature(WFSSelectedFeature layerNode) {
408
        int index = -1;
406 409

  
407
		for (int i=0; i<getLstFeatures().getRowCount(); i++){
408
			WFSSelectedFeature node = (WFSSelectedFeature)getLstFeatures().getValueAt(i);
410
        for (int i = 0; i < getLstFeatures().getRowCount(); i++) {
411
            WFSSelectedFeature node = (WFSSelectedFeature) getLstFeatures().getValueAt(i);
409 412

  
410
			if (node != null && layerNode.getName().equals(node.getName())){
411
				index = i;
412
			}
413
		}
413
            if (node != null && layerNode.getName().equals(node.getName())) {
414
                index = i;
415
            }
416
        }
414 417

  
415
		if (index != -1){
416
			getLstFeatures().changeSelection(index, 0, false, false);
417
		}
418
	}
418
        if (index != -1) {
419
            getLstFeatures().changeSelection(index, 0, false, false);
420
        }
421
    }
419 422

  
420
	/**
421
	 * Refresh the features list
422
	 */
423
	public void refresh(WFSSelectedFeature layer) {
424
		// Unselects all features
425
		unselectAllFeatures();
423
    /**
424
     * Refresh the features list
425
     */
426
    public void refresh(WFSSelectedFeature layer) {
427
        // Unselects all features
428
        unselectAllFeatures();
426 429

  
427
		// Add the new features
428
		getLstFeatures().addFeatures(getSelectedFeatureManager().getLayerList());
430
        // Add the new features
431
        getLstFeatures().addFeatures(getSelectedFeatureManager().getLayerList());
429 432

  
430
		if (layer != null) {
431
			layerNode = layer;
432
			setLayerName(layer.getName());
433
			setSelectedFeature(layer);			
434
		}		
435
	}
433
        if (layer != null) {
434
            layerNode = layer;
435
            setLayerName(layer.getName());
436
            setSelectedFeature(layer);
437
        }
438
    }
436 439

  
437
	/**
438
	 * Refreshes the wizard components data each time a feature
439
	 * is selected. The <i>describeFeatureType</i> operation must be sent.
440
	 */
441
	public void refreshData() {
442
		WFSSelectedFeature lyr = (WFSSelectedFeature)getLstFeatures().getSelectedValue();
440
    /**
441
     * Refreshes the wizard components data each time a feature is selected. The
442
     * <i>describeFeatureType</i> operation must be sent.
443
     */
444
    public void refreshData() {
445
        WFSSelectedFeature lyr = (WFSSelectedFeature) getLstFeatures().getSelectedValue();
443 446

  
444
		try {
445
			getTxtName().setText(lyr.getTitle());
446
		} catch (NullPointerException e){
447
			getTxtName().setText(PluginServices.getText(this,"default_name"));
448
			NotificationManager.addError(PluginServices.getText(this,"default_name"), e);
449
		}
447
        try {
448
            getTxtName().setText(lyr.getTitle());
449
        } catch (NullPointerException e) {
450
            getTxtName().setText(PluginServices.getText(this, "default_name"));
451
            NotificationManager.addError(PluginServices.getText(this, "default_name"), e);
452
        }
450 453

  
451
		IPanelGroup panelGroup = getPanelGroup();
454
        IPanelGroup panelGroup = getPanelGroup();
452 455

  
453
		if (panelGroup == null)
454
			return;
456
        if (panelGroup == null) {
457
            return;
458
        }
455 459

  
456 460
        WFSParamsPanel wfspp = (WFSParamsPanel) panelGroup;
457
        
461

  
458 462
        String url = wfspp.getServerExplorer().getUrl();
459
		List sel_ver = null;
460
		
461
		try {
462
            sel_ver = WFSProtocolHandlerFactory.getRequestableVersions(url);
463
        List sel_ver = null;
464

  
465
        try {
466
            sel_ver = WFSProtocolHandlerFactory.getRequestableVersions(url,false);
463 467
            wfspp.refresh(lyr, sel_ver);
464 468
        } catch (Exception e) {
465 469
            ApplicationLocator.getManager().message(
466
                Messages.getText("_Unable_to_get_server_version"),
467
                JOptionPane.ERROR_MESSAGE);
470
                    Messages.getText("_Unable_to_get_server_version"),
471
                    JOptionPane.ERROR_MESSAGE);
468 472
        }
469
		
470 473

  
471
		repaint();
472
	}
474
        repaint();
475
    }
473 476

  
474
	/**
475
	 * This method initializes layerNamePanel
476
	 *
477
	 * @return javax.swing.JPanel
478
	 */
479
	private JPanel getLayerNamePanel() {
480
		if (layerNamePanel == null) {
481
			java.awt.GridBagConstraints gridBagConstraints;
482
			layerNamePanel = new JPanel();
483
			layerNamePanel.setLayout(new java.awt.GridBagLayout());
484
			layerNamePanel.setBorder(javax.swing.BorderFactory.createTitledBorder(
485
					null, PluginServices.getText(this, "layer_name"),
486
					javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
487
					javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));			
488
			gridBagConstraints = new java.awt.GridBagConstraints();
489
			gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
490
			gridBagConstraints.weightx = 1.0;
491
			layerNamePanel.add(getTxtName(), gridBagConstraints);
492
		}
477
    /**
478
     * This method initializes layerNamePanel
479
     *
480
     * @return javax.swing.JPanel
481
     */
482
    private JPanel getLayerNamePanel() {
483
        if (layerNamePanel == null) {
484
            java.awt.GridBagConstraints gridBagConstraints;
485
            layerNamePanel = new JPanel();
486
            layerNamePanel.setLayout(new java.awt.GridBagLayout());
487
            layerNamePanel.setBorder(javax.swing.BorderFactory.createTitledBorder(
488
                    null, PluginServices.getText(this, "layer_name"),
489
                    javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
490
                    javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
491
            gridBagConstraints = new java.awt.GridBagConstraints();
492
            gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
493
            gridBagConstraints.weightx = 1.0;
494
            layerNamePanel.add(getTxtName(), gridBagConstraints);
495
        }
493 496

  
494
		return layerNamePanel;
495
	}
497
        return layerNamePanel;
498
    }
496 499

  
497
	/**
498
	 * Gets the name of the layer (feature) selected.
499
	 *
500
	 * @return the layer name
501
	 */
502
	public String getLayerName() {
503
		if ((WFSSelectedFeature)getLstFeatures().getSelectedValue() != null){
504
			return ((WFSSelectedFeature)getLstFeatures().getSelectedValue()).getName();
505
		}
506
		return "";
507
	}
500
    /**
501
     * Gets the name of the layer (feature) selected.
502
     *
503
     * @return the layer name
504
     */
505
    public String getLayerName() {
506
        if ((WFSSelectedFeature) getLstFeatures().getSelectedValue() != null) {
507
            return ((WFSSelectedFeature) getLstFeatures().getSelectedValue()).getName();
508
        }
509
        return "";
510
    }
508 511

  
509
	/**
510
	 * Gets the name space of the layer (feature) selected.
511
	 *
512
	 * @return the name space
513
	 */
514
	public String getLayerNameSpace(){
515
		return ((WFSSelectedFeature)getLstFeatures().getSelectedValue()).getNameSpace();
516
	}
512
    /**
513
     * Gets the name space of the layer (feature) selected.
514
     *
515
     * @return the name space
516
     */
517
    public String getLayerNameSpace() {
518
        return ((WFSSelectedFeature) getLstFeatures().getSelectedValue()).getNameSpace();
519
    }
517 520

  
518
	/**
519
	 * Gets the selected feature.
520
	 * 
521
	 * @return the selected feature
522
	 */
523
	public WFSSelectedFeature getSelectedFeature() {
524
		WFSSelectedFeature selectedFeature = (WFSSelectedFeature)getLstFeatures().getSelectedValue();
521
    /**
522
     * Gets the selected feature.
523
     *
524
     * @return the selected feature
525
     */
526
    public WFSSelectedFeature getSelectedFeature() {
527
        WFSSelectedFeature selectedFeature = (WFSSelectedFeature) getLstFeatures().getSelectedValue();
525 528

  
526
		if (selectedFeature != null) {
527
			layerNode = selectedFeature;
528
		}
529
        if (selectedFeature != null) {
530
            layerNode = selectedFeature;
531
        }
529 532

  
530
		return layerNode;
531
	}
533
        return layerNode;
534
    }
532 535

  
533
	/**
534
	 * Sets the name of the feature selected.
535
	 * 
536
	 * @param name the name of the feature selected
537
	 */
538
	public void setLayerName(String name) {
539
		getTxtName().setText(name);
540
	}
536
    /**
537
     * Sets the name of the feature selected.
538
     *
539
     * @param name the name of the feature selected
540
     */
541
    public void setLayerName(String name) {
542
        getTxtName().setText(name);
543
    }
541 544

  
542
	/*
543
	 * (non-Javadoc)
544
	 * @see com.iver.cit.gvsig.gui.panels.AbstractWFSPanel#initialize()
545
	 */
546
	protected void initialize() {
547
		setLabel(PluginServices.getText(this, "feature"));
548
		setLabelGroup(PluginServices.getText(this, "wfs"));
549
		java.awt.GridBagConstraints gridBagConstraints;
550
		this.setLayout(new java.awt.GridBagLayout());
545
    /*
546
     * (non-Javadoc)
547
     * @see com.iver.cit.gvsig.gui.panels.AbstractWFSPanel#initialize()
548
     */
549
    protected void initialize() {
550
        setLabel(PluginServices.getText(this, "feature"));
551
        setLabelGroup(PluginServices.getText(this, "wfs"));
552
        java.awt.GridBagConstraints gridBagConstraints;
553
        this.setLayout(new java.awt.GridBagLayout());
551 554

  
552
		gridBagConstraints = new java.awt.GridBagConstraints();
553
		gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
554
		gridBagConstraints.weightx = 1.0;
555
		this.add(getLayerNamePanel(), gridBagConstraints);
555
        gridBagConstraints = new java.awt.GridBagConstraints();
556
        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
557
        gridBagConstraints.weightx = 1.0;
558
        this.add(getLayerNamePanel(), gridBagConstraints);
556 559

  
557
		gridBagConstraints = new java.awt.GridBagConstraints();
558
		gridBagConstraints.gridx = 0;
559
		gridBagConstraints.gridy = 1;
560
		gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
561
		gridBagConstraints.weightx = 1.0;
562
		gridBagConstraints.weighty = 1.0;
563
		this.add(getFeaturesListPanel(), gridBagConstraints);
560
        gridBagConstraints = new java.awt.GridBagConstraints();
561
        gridBagConstraints.gridx = 0;
562
        gridBagConstraints.gridy = 1;
563
        gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
564
        gridBagConstraints.weightx = 1.0;
565
        gridBagConstraints.weighty = 1.0;
566
        this.add(getFeaturesListPanel(), gridBagConstraints);
564 567

  
565
		gridBagConstraints = new java.awt.GridBagConstraints();
566
		gridBagConstraints.gridx = 0;
567
		gridBagConstraints.gridy = 2;
568
		gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
569
		gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
570
		gridBagConstraints.weightx = 1.0;
571
		this.add(getChkExtendedNames(), gridBagConstraints);		
568
        gridBagConstraints = new java.awt.GridBagConstraints();
569
        gridBagConstraints.gridx = 0;
570
        gridBagConstraints.gridy = 2;
571
        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
572
        gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
573
        gridBagConstraints.weightx = 1.0;
574
        this.add(getChkExtendedNames(), gridBagConstraints);
572 575

  
573
	}
576
    }
574 577

  
575
	/*
576
	 * (non-Javadoc)
577
	 * @see com.iver.cit.gvsig.gui.panels.AbstractWFSPanel#setReference(java.lang.Object)
578
	 */
579
	public void setReference(Object ref) {
580
		super.setReference(ref);
578
    /*
579
     * (non-Javadoc)
580
     * @see com.iver.cit.gvsig.gui.panels.AbstractWFSPanel#setReference(java.lang.Object)
581
     */
582
    public void setReference(Object ref) {
583
        super.setReference(ref);
581 584
		//		if (ref instanceof FLyrWFS){			
582
		//			getPanelGroup().setEnabledApplyButton(false);
583
		//		}		
584
	}	
585
        //			getPanelGroup().setEnabledApplyButton(false);
586
        //		}		
587
    }
585 588

  
586
	/**
587
	 * Updates the list with no feature selected.
588
	 */
589
	public void unselectAllFeatures() {
590
		// Reset the last row selection of the features table
591
		int numberOfFeatures = getLstFeatures().getRowCount();
589
    /**
590
     * Updates the list with no feature selected.
591
     */
592
    public void unselectAllFeatures() {
593
        // Reset the last row selection of the features table
594
        int numberOfFeatures = getLstFeatures().getRowCount();
592 595

  
593
		if (numberOfFeatures > 0) {			
594
			ListSelectionModel model = getLstFeatures().getSelectionModel();
595
			model.removeSelectionInterval(0, numberOfFeatures - 1); // whatever row selection
596
		}
597
	}
596
        if (numberOfFeatures > 0) {
597
            ListSelectionModel model = getLstFeatures().getSelectionModel();
598
            model.removeSelectionInterval(0, numberOfFeatures - 1); // whatever row selection
599
        }
600
    }
598 601

  
599
	/**
600
	 * Table with the information of all layers which could be selected from the server connected.
601
	 * 
602
	 * @author Pablo Piqueras Bartolom? (pablo.piqueras@iver.es)
603
	 * @author Jorge Piera Llodr? (piera_jor@gva.es)
604
	 */
605
	public class LayerTable extends JTable {
606
		private static final long serialVersionUID = 4700375945858283696L;
607
		private int headerSelected = -1; 
602
    /**
603
     * Table with the information of all layers which could be selected from the
604
     * server connected.
605
     *
606
     * @author Pablo Piqueras Bartolom? (pablo.piqueras@iver.es)
607
     * @author Jorge Piera Llodr? (piera_jor@gva.es)
608
     */
609
    public class LayerTable extends JTable {
608 610

  
609
		/**
610
		 * Creates a new instance of <code>LayerTable</code>
611
		 */
612
		public LayerTable() {
613
			super();
611
        private static final long serialVersionUID = 4700375945858283696L;
612
        private int headerSelected = -1;
614 613

  
615
			setModel(new LayerTableModel());
614
        /**
615
         * Creates a new instance of <code>LayerTable</code>
616
         */
617
        public LayerTable() {
618
            super();
616 619

  
617
			getTableHeader().setUI(new BasicTableHeaderSelectableUI());
620
            setModel(new LayerTableModel());
618 621

  
619
			getTableHeader().addMouseListener(new MouseAdapter() {
620
				/*
621
				 * (non-Javadoc)
622
				 * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)
623
				 */
624
				public void mouseClicked(MouseEvent e) {
625
					// Sorts according the selected column
626
					((LayerTableModel)getModel()).sort(getTableHeader().getColumnModel().getColumnIndexAtX(e.getX()));
627
				}
622
            getTableHeader().setUI(new BasicTableHeaderSelectableUI());
628 623

  
629
				/*
630
				 * (non-Javadoc)
631
				 * @see java.awt.event.MouseListener#mousePressed(java.awt.event.MouseEvent)
632
				 */
633
				public void mousePressed(MouseEvent e) {
634
					headerSelected = getTableHeader().getColumnModel().getColumnIndexAtX(e.getX());
635
					getTableHeader().repaint();
636
				}
624
            getTableHeader().addMouseListener(new MouseAdapter() {
625
                /*
626
                 * (non-Javadoc)
627
                 * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)
628
                 */
629
                public void mouseClicked(MouseEvent e) {
630
                    // Sorts according the selected column
631
                    ((LayerTableModel) getModel()).sort(getTableHeader().getColumnModel().getColumnIndexAtX(e.getX()));
632
                }
637 633

  
638
				/*
639
				 * (non-Javadoc)
640
				 * @see java.awt.event.MouseListener#mouseReleased(java.awt.event.MouseEvent)
641
				 */
642
				public void mouseReleased(MouseEvent e) {
643
					headerSelected = -1;
644
				}
645
			});
646
		}
634
                /*
635
                 * (non-Javadoc)
636
                 * @see java.awt.event.MouseListener#mousePressed(java.awt.event.MouseEvent)
637
                 */
638
                public void mousePressed(MouseEvent e) {
639
                    headerSelected = getTableHeader().getColumnModel().getColumnIndexAtX(e.getX());
640
                    getTableHeader().repaint();
641
                }
647 642

  
648
		/*
649
		 * (non-Javadoc)
650
		 * @see javax.swing.JTable#createDefaultColumnsFromModel()
651
		 */
652
		public void createDefaultColumnsFromModel() {
653
			TableModel m = getModel();
654
			if (m != null) {
655
				// Remove any current columns
656
				TableColumnModel cm = getColumnModel();
657
				while (cm.getColumnCount() > 0) {
658
					cm.removeColumn(cm.getColumn(0));
659
				}
643
                /*
644
                 * (non-Javadoc)
645
                 * @see java.awt.event.MouseListener#mouseReleased(java.awt.event.MouseEvent)
646
                 */
647
                public void mouseReleased(MouseEvent e) {
648
                    headerSelected = -1;
649
                }
650
            });
651
        }
660 652

  
661
				// Create new columns from the data model info
662
				for (int i = 0; i < m.getColumnCount(); i++) {
663
					TableColumn newColumn = new TableColumn(i);
653
        /*
654
         * (non-Javadoc)
655
         * @see javax.swing.JTable#createDefaultColumnsFromModel()
656
         */
657
        public void createDefaultColumnsFromModel() {
658
            TableModel m = getModel();
659
            if (m != null) {
660
                // Remove any current columns
661
                TableColumnModel cm = getColumnModel();
662
                while (cm.getColumnCount() > 0) {
663
                    cm.removeColumn(cm.getColumn(0));
664
                }
664 665

  
665
					// Special renderer for supporting selection of a particular column header
666
					newColumn.setHeaderRenderer(new DefaultTableSelectableCellRenderer());
667
					addColumn(newColumn);
668
				}
669
			}
670
		}
666
                // Create new columns from the data model info
667
                for (int i = 0; i < m.getColumnCount(); i++) {
668
                    TableColumn newColumn = new TableColumn(i);
671 669

  
672
		/**
673
		 * Gets the selected <i>WFS</i> layer.
674
		 * 
675
		 * @return node of the selected <i>WFS</i> layer
676
		 */
677
		public WFSSelectedFeature getSelectedValue() {
678
			int selectedRow = getSelectedRow();
679
			LayerTableModel model = (LayerTableModel)getModel();
670
                    // Special renderer for supporting selection of a particular column header
671
                    newColumn.setHeaderRenderer(new DefaultTableSelectableCellRenderer());
672
                    addColumn(newColumn);
673
                }
674
            }
675
        }
680 676

  
681
			return model.getLayerAt(selectedRow);
682
		}
677
        /**
678
         * Gets the selected <i>WFS</i> layer.
679
         *
680
         * @return node of the selected <i>WFS</i> layer
681
         */
682
        public WFSSelectedFeature getSelectedValue() {
683
            int selectedRow = getSelectedRow();
684
            LayerTableModel model = (LayerTableModel) getModel();
683 685

  
684
		/**
685
		 * Gets the layer at a row position.
686
		 * 
687
		 * @return node of the selected <i>WFS</i> layer
688
		 */
689
		public WFSSelectedFeature getValueAt(int position) {
690
			if (position < this.getRowCount()) {
691
				LayerTableModel model = (LayerTableModel)getModel();
686
            return model.getLayerAt(selectedRow);
687
        }
692 688

  
693
				return model.getLayerAt(position);			
694
			}
689
        /**
690
         * Gets the layer at a row position.
691
         *
692
         * @return node of the selected <i>WFS</i> layer
693
         */
694
        public WFSSelectedFeature getValueAt(int position) {
695
            if (position < this.getRowCount()) {
696
                LayerTableModel model = (LayerTableModel) getModel();
695 697

  
696
			return null;
697
		}
698
                return model.getLayerAt(position);
699
            }
698 700

  
699
		/**
700
		 * Adds the available features to load as a <i>WFS</i> layer.
701
		 * 
702
		 * @param features available features
703
		 */
704
		public void addFeatures(WFSSelectedFeature[] features) {
705
			LayerTableModel model = (LayerTableModel)getModel();
706
			model.deleteAllRows();
701
            return null;
702
        }
707 703

  
708
			for (int i=0 ; i < features.length ; i++){
709
				model.addRow(features[i]);			
710
			}	
711
		}	
704
        /**
705
         * Adds the available features to load as a <i>WFS</i> layer.
706
         *
707
         * @param features available features
708
         */
709
        public void addFeatures(WFSSelectedFeature[] features) {
710
            LayerTableModel model = (LayerTableModel) getModel();
711
            model.deleteAllRows();
712 712

  
713
		/**
714
		 * Shows the names of the features.
715
		 * 
716
		 * @param showFeatureNameType The showLayerNames to set.
717
		 */
718
		public void setShowLayerNames(boolean showFeatureNameType) {
719
			LayerTableModel model = (LayerTableModel)getModel();
720
			model.setShowedFeatureNameType(showFeatureNameType);
721
		}
713
            for (int i = 0; i < features.length; i++) {
714
                model.addRow(features[i]);
715
            }
716
        }
722 717

  
723
		/**
724
		 * Model of the <code>LayerTable</code> that stores the features available to load as a WFS layer.
725
		 * 
726
		 * @author Jorge Piera Llodr? (piera_jor@gva.es)
727
		 * @author Pablo Piqueras Bartolome (pablo.piqueras@iver.es)
728
		 */
729
		public class LayerTableModel extends AbstractTableModel {  
730
			private static final long serialVersionUID = 2722138264867593508L;
731
			private Vector<WFSSelectedFeature> layers = new Vector<WFSSelectedFeature>();
732
			private boolean showFeatureNameType = false;
733
			private WFSLayerStringComparator stringComparator;
734
			private boolean updatingSelection;
735
			private short previousColumnSorted;
718
        /**
719
         * Shows the names of the features.
720
         *
721
         * @param showFeatureNameType The showLayerNames to set.
722
         */
723
        public void setShowLayerNames(boolean showFeatureNameType) {
724
            LayerTableModel model = (LayerTableModel) getModel();
725
            model.setShowedFeatureNameType(showFeatureNameType);
726
        }
736 727

  
728
        /**
729
         * Model of the <code>LayerTable</code> that stores the features
730
         * available to load as a WFS layer.
731
         *
732
         * @author Jorge Piera Llodr? (piera_jor@gva.es)
733
         * @author Pablo Piqueras Bartolome (pablo.piqueras@iver.es)
734
         */
735
        public class LayerTableModel extends AbstractTableModel {
737 736

  
738
			/**
739
			 * Constructs an investment table model.
740
			 */
741
			public LayerTableModel(){  
742
				super();
737
            private static final long serialVersionUID = 2722138264867593508L;
738
            private Vector<WFSSelectedFeature> layers = new Vector<WFSSelectedFeature>();
739
            private boolean showFeatureNameType = false;
740
            private WFSLayerStringComparator stringComparator;
741
            private boolean updatingSelection;
742
            private short previousColumnSorted;
743 743

  
744
				// Alphabetical sort ordering support
745
				updatingSelection = false;
746
				previousColumnSorted = -1;
747
				Collator collator = Collator.getInstance(new Locale("en_EN"));		
748
				stringComparator = new WFSLayerStringComparator();
749
				stringComparator.setLocaleRules(stringComparator.new LocaleRules(true, collator));
750
				stringComparator.setCaseSensitive(false);
751
				stringComparator.setAscendingOrdering(true);
752
			}
744
            /**
745
             * Constructs an investment table model.
746
             */
747
            public LayerTableModel() {
748
                super();
753 749

  
750
                // Alphabetical sort ordering support
751
                updatingSelection = false;
752
                previousColumnSorted = -1;
753
                Collator collator = Collator.getInstance(new Locale("en_EN"));
754
                stringComparator = new WFSLayerStringComparator();
755
                stringComparator.setLocaleRules(stringComparator.new LocaleRules(true, collator));
756
                stringComparator.setCaseSensitive(false);
757
                stringComparator.setAscendingOrdering(true);
758
            }
754 759

  
755
			/*
756
			 *  (non-Javadoc)
757
			 * @see javax.swing.table.TableModel#getRowCount()
758
			 */
759
			public int getRowCount(){  
760
				return layers.size();		
761
			}
762 760

  
763
			/*
764
			 *  (non-Javadoc)
765
			 * @see javax.swing.table.TableModel#getColumnCount()
766
			 */
767
			public int getColumnCount(){  
768
				return 2;
769
			}
761
            /*
762
             *  (non-Javadoc)
763
             * @see javax.swing.table.TableModel#getRowCount()
764
             */
765
            public int getRowCount() {
766
                return layers.size();
767
            }
770 768

  
771
			/*
772
			 *  (non-Javadoc)
773
			 * @see javax.swing.table.TableModel#getValueAt(int, int)
774
			 */
775
			public Object getValueAt(int rowNumber, int columnNumber){  
776
				if (rowNumber < layers.size()) {
777
					WFSSelectedFeature layer = (WFSSelectedFeature)layers.get(rowNumber);
769
            /*
770
             *  (non-Javadoc)
771
             * @see javax.swing.table.TableModel#getColumnCount()
772
             */
773
            public int getColumnCount() {
774
                return 2;
775
            }
778 776

  
779
					if (columnNumber == 0) {
780
						return getLayerName(layer);
781
					} else {
782
					    if (layer.getGeometryField() != null){
783
					        return PluginServices.getText(this, layer.getGeometryField().getType());
784
					    }
785
						return "";
786
					}
787
				} else {
788
					return "";
789
				}
790
			}	
777
            /*
778
             *  (non-Javadoc)
779
             * @see javax.swing.table.TableModel#getValueAt(int, int)
780
             */
781
            public Object getValueAt(int rowNumber, int columnNumber) {
782
                if (rowNumber < layers.size()) {
783
                    WFSSelectedFeature layer = (WFSSelectedFeature) layers.get(rowNumber);
791 784

  
792
			/**
793
			 * Gets the layer name displaying the type name of the feature collection associated if it's needed.
794
			 * 
795
			 * @param layer a <i>WFS</i> layer 
796
			 * @return the layer name
797
			 */
798
			private String getLayerName(WFSSelectedFeature layer){
799
				if (showFeatureNameType){
800
					return "[" + layer.getName() + "] " + layer.getTitle(); 
801
				} else {
802
					return layer.getTitle();
803
				}
804
			}
785
                    if (columnNumber == 0) {
786
                        return getLayerName(layer);
787
                    } else {
788
                        if (layer.getGeometryField() != null) {
789
                            return PluginServices.getText(this, layer.getGeometryField().getType());
790
                        }
791
                        return "";
792
                    }
793
                } else {
794
                    return "";
795
                }
796
            }
805 797

  
806
			/**
807
			 * Gets the layer at the specified position.
808
			 * 
809
			 * @param rowNumber row position
810
			 * @return <i>WFS</i> layer node
811
			 */
812
			public WFSSelectedFeature getLayerAt(int rowNumber){
813
				try {
814
					if (rowNumber == -1)
815
						return null;
798
            /**
799
             * Gets the layer name displaying the type name of the feature
800
             * collection associated if it's needed.
801
             *
802
             * @param layer a <i>WFS</i> layer
803
             * @return the layer name
804
             */
805
            private String getLayerName(WFSSelectedFeature layer) {
806
                if (showFeatureNameType) {
807
                    return "[" + layer.getName() + "] " + layer.getTitle();
808
                } else {
809
                    return layer.getTitle();
810
                }
811
            }
816 812

  
817
					return (WFSSelectedFeature)layers.get(rowNumber);
818
				} catch (ArrayIndexOutOfBoundsException e) {
819
					NotificationManager.addError(e);
820
					return null;
821
				}
822
			}	
813
            /**
814
             * Gets the layer at the specified position.
815
             *
816
             * @param rowNumber row position
817
             * @return <i>WFS</i> layer node
818
             */
819
            public WFSSelectedFeature getLayerAt(int rowNumber) {
820
                try {
821
                    if (rowNumber == -1) {
822
                        return null;
823
                    }
823 824

  
824
			/**
825
			 * Adds a new layer to the table model, each table will be represented as a row.
826
			 *  
827
			 * @param layer a new <i>WFS</i> layer
828
			 */
829
			public void addRow(WFSSelectedFeature layer){
830
				layers.add(layer);
831
				fireTableRowsInserted(getRowCount(), getRowCount());
832
				fireTableRowsUpdated(0,getRowCount());
833
			}
825
                    return (WFSSelectedFeature) layers.get(rowNumber);
826
                } catch (ArrayIndexOutOfBoundsException e) {
827
                    NotificationManager.addError(e);
828
                    return null;
829
                }
830
            }
834 831

  
835
			/**
836
			 * Deletes all the table rows.
837
			 */
838
			public void deleteAllRows(){
839
				layers.clear();
840
				int rows = getRowCount();
832
            /**
833
             * Adds a new layer to the table model, each table will be
834
             * represented as a row.
835
             *
836
             * @param layer a new <i>WFS</i> layer
837
             */
838
            public void addRow(WFSSelectedFeature layer) {
839
                layers.add(layer);
840
                fireTableRowsInserted(getRowCount(), getRowCount());
841
                fireTableRowsUpdated(0, getRowCount());
842
            }
841 843

  
842
				if (rows >= 1){
843
					fireTableRowsDeleted(0, rows - 1);
844
				}		
845
			}	
844
            /**
845
             * Deletes all the table rows.
846
             */
847
            public void deleteAllRows() {
848
                layers.clear();
849
                int rows = getRowCount();
846 850

  
847
			/**
848
			 * Delete all the table rows
849
			 */
850
			public void deleteRow(int rowPosition){
851
				layers.remove(rowPosition);
852
				fireTableRowsDeleted(rowPosition, rowPosition);
853
				fireTableRowsUpdated(0,getRowCount());
854
			}	
851
                if (rows >= 1) {
852
                    fireTableRowsDeleted(0, rows - 1);
853
                }
854
            }
855 855

  
856
			/*
857
			 *  (non-Javadoc)
858
			 * @see javax.swing.table.TableModel#getColumnName(int)
859
			 */
860
			public String getColumnName(int columnIndex){
861
				if (columnIndex == 0){
862
					return PluginServices.getText(this, "layerName");
863
				}else{
864
					return PluginServices.getText(this, "layerType");
865
				}
866
			}
856
            /**
857
             * Delete all the table rows
858
             */
859
            public void deleteRow(int rowPosition) {
860
                layers.remove(rowPosition);
861
                fireTableRowsDeleted(rowPosition, rowPosition);
862
                fireTableRowsUpdated(0, getRowCount());
863
            }
867 864

  
868
			/**
869
			 * Gets if shows the feature name type.
870
			 * 
871
			 * @return <code>true</code> if shows the feature name type; <code>false</code> otherwise
872
			 */
873
			public boolean isShowedFeatureNameType() {
874
				return showFeatureNameType;
875
			}
865
            /*
866
             *  (non-Javadoc)
867
             * @see javax.swing.table.TableModel#getColumnName(int)
868
             */
869
            public String getColumnName(int columnIndex) {
870
                if (columnIndex == 0) {
871
                    return PluginServices.getText(this, "layerName");
872
                } else {
873
                    return PluginServices.getText(this, "layerType");
874
                }
875
            }
876 876

  
877
			/**
878
			 * Gets if shows the feature name type.
879
			 * 
880
			 * @param showFeatureNameType <code>true</code> if shows the feature name type; <code>false</code> otherwise
881
			 */
882
			public void setShowedFeatureNameType(boolean showFeatureNameType) {
883
				this.showFeatureNameType = showFeatureNameType;
877
            /**
878
             * Gets if shows the feature name type.
879
             *
880
             * @return <code>true</code> if shows the feature name type;
881
             * <code>false</code> otherwise
882
             */
883
            public boolean isShowedFeatureNameType() {
884
                return showFeatureNameType;
885
            }
884 886

  
885
				this.stringComparator.setShowFeatureNameType(showFeatureNameType);
886
			}
887
            /**
888
             * Gets if shows the feature name type.
889
             *
890
             * @param showFeatureNameType <code>true</code> if shows the feature
891
             * name type; <code>false</code> otherwise
892
             */
893
            public void setShowedFeatureNameType(boolean showFeatureNameType) {
894
                this.showFeatureNameType = showFeatureNameType;
887 895

  
888
			/**
889
			 * Sorts the rows of the table alphabetically.
890
			 * 
891
			 * @param column index of the column to sort. In this table there are only 2 columns.
892
			 */
893
			public void sort(int column) {
894
				// Orders the layer alphabetically according the Spanish alphabetically rules 
895
				switch(column) {
896
				case 0:
897
					stringComparator.setColumn(WFSLayerStringComparator.LAYER_NAME);
898
					break;
899
				case 1:
900
					stringComparator.setColumn(WFSLayerStringComparator.GEOMETRY_TYPE);
901
					break;
902
				}
896
                this.stringComparator.setShowFeatureNameType(showFeatureNameType);
897
            }
903 898

  
904
				if (previousColumnSorted != column)
905
					stringComparator.setAscendingOrdering(true);
899
            /**
900
             * Sorts the rows of the table alphabetically.
901
             *
902
             * @param column index of the column to sort. In this table there
903
             * are only 2 columns.
904
             */
905
            public void sort(int column) {
906
                // Orders the layer alphabetically according the Spanish alphabetically rules 
907
                switch (column) {
908
                    case 0:
909
                        stringComparator.setColumn(WFSLayerStringComparator.LAYER_NAME);
910
                        break;
911
                    case 1:
912
                        stringComparator.setColumn(WFSLayerStringComparator.GEOMETRY_TYPE);
913
                        break;
914
                }
906 915

  
907
				previousColumnSorted = (short) column;
916
                if (previousColumnSorted != column) {
917
                    stringComparator.setAscendingOrdering(true);
918
                }
908 919

  
909
				WFSSelectedFeature layer = getSelectedValue();
920
                previousColumnSorted = (short) column;
910 921

  
911
				Collections.sort(layers, stringComparator);
922
                WFSSelectedFeature layer = getSelectedValue();
912 923

  
913
				if (layer != null) {
914
					updatingSelection = true;
915
					unselectAllFeatures();
916
					int row = Collections.binarySearch(layers, layer, stringComparator);
924
                Collections.sort(layers, stringComparator);
917 925

  
918
					if (row != -1) {
919
						ListSelectionModel model = getSelectionModel();
920
						model.setLeadSelectionIndex(row);
921
					}
926
                if (layer != null) {
927
                    updatingSelection = true;
928
                    unselectAllFeatures();
929
                    int row = Collections.binarySearch(layers, layer, stringComparator);
922 930

  
923
					updatingSelection = false;
924
				}
925
				stringComparator.setAscendingOrdering(!stringComparator.isAscendingOrdering());
926
			}
931
                    if (row != -1) {
932
                        ListSelectionModel model = getSelectionModel();
933
                        model.setLeadSelectionIndex(row);
934
                    }
927 935

  
928
			/**
929
			 * Determines if now is updating the selection of the previous selected item.
930
			 * 
931
			 * @return <code>true</code> if now is updating the selection of the previous selected item; otherwise <code>false</code>
932
			 */
933
			public boolean isUpdatingSelection() {
934
				return updatingSelection;
935
			}
936
		}
936
                    updatingSelection = false;
937
                }
938
                stringComparator.setAscendingOrdering(!stringComparator.isAscendingOrdering());
939
            }
937 940

  
938
		/**
939
		 * <p>Enhances {@link BasicTableHeaderUI BasicTableHeaderUI} adding support for column head selection.</p>
940
		 * 
941
		 * @see BasicTableHeaderUI
942
		 *
943
		 * @version 29/01/2008
944
		 * @author Pablo Piqueras Bartolom? (pablo.piqueras@iver.es) 
945
		 */
946
		private class BasicTableHeaderSelectableUI extends BasicTableHeaderUI {
947
			/**
948
			 * Creates a new BasicTableHeaderSelectableUI object
949
			 */
950
			public BasicTableHeaderSelectableUI() {
951
				super();
952
			}
941
            /**
942
             * Determines if now is updating the selection of the previous
943
             * selected item.
944
             *
945
             * @return <code>true</code> if now is updating the selection of the
946
             * previous selected item; otherwise <code>false</code>
947
             */
948
            public boolean isUpdatingSelection() {
949
                return updatingSelection;
950
            }
951
        }
953 952

  
953
        /**
954
         * <p>
955
         * Enhances {@link BasicTableHeaderUI BasicTableHeaderUI} adding support
956
         * for column head selection.</p>
957
         *
958
         * @see BasicTableHeaderUI
959
         *
960
         * @version 29/01/2008
961
         * @author Pablo Piqueras Bartolom? (pablo.piqueras@iver.es)
962
         */
963
        private class BasicTableHeaderSelectableUI extends BasicTableHeaderUI {
964

  
965
            /**
966
             * Creates a new BasicTableHeaderSelectableUI object
967
             */
968
            public BasicTableHeaderSelectableUI() {
969
                super();
970
            }
971

  
954 972
			//
955
			// Some Paint Methods and support re-implemented
956
			//
973
            // Some Paint Methods and support re-implemented
974
            //
957 975

  
958
			/*
959
			 * (non-Javadoc)
960
			 * @see javax.swing.plaf.basic.BasicTableHeaderUI#paint(java.awt.Graphics, javax.swing.JComponent)
961
			 */
962
			public void paint(Graphics g, JComponent c) {
963
				if (header.getColumnModel().getColumnCount() <= 0) { 
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff