Revision 44505 trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/java/org/gvsig/fmap/dal/swing/impl/featuretype/DefaultFeatureTypePanel.java
DefaultFeatureTypePanel.java | ||
---|---|---|
5 | 5 |
import java.awt.Dimension; |
6 | 6 |
import java.awt.event.ActionEvent; |
7 | 7 |
import java.awt.event.ActionListener; |
8 |
import java.util.Date; |
|
9 | 8 |
import java.util.Objects; |
10 | 9 |
import javax.swing.JComponent; |
11 | 10 |
import javax.swing.JOptionPane; |
... | ... | |
15 | 14 |
import javax.swing.event.TableModelEvent; |
16 | 15 |
import javax.swing.table.AbstractTableModel; |
17 | 16 |
import org.apache.commons.lang3.StringUtils; |
17 |
import org.gvsig.configurableactions.ConfigurableActionsMamager; |
|
18 |
import org.gvsig.expressionevaluator.ExpressionUtils; |
|
18 | 19 |
import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor; |
19 | 20 |
import org.gvsig.fmap.dal.feature.EditableFeatureType; |
20 | 21 |
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor; |
... | ... | |
28 | 29 |
import org.gvsig.tools.swing.api.ToolsSwingLocator; |
29 | 30 |
import org.gvsig.tools.swing.api.ToolsSwingManager; |
30 | 31 |
import org.gvsig.tools.swing.api.threadsafedialogs.ThreadSafeDialogsManager; |
32 |
import org.gvsig.tools.util.ToolsUtilLocator; |
|
31 | 33 |
import org.slf4j.Logger; |
32 | 34 |
import org.slf4j.LoggerFactory; |
33 | 35 |
|
... | ... | |
42 | 44 |
|
43 | 45 |
private static final Logger LOGGER = LoggerFactory.getLogger(DefaultFeatureTypePanel.class); |
44 | 46 |
private FeatureType originalFeatureType = null; |
45 |
|
|
47 |
|
|
46 | 48 |
private class FeatureTypeTableModel extends AbstractTableModel { |
47 | 49 |
|
48 | 50 |
private final FeatureType featureType; |
... | ... | |
142 | 144 |
} |
143 | 145 |
|
144 | 146 |
private DefaultFeatureTypeAttributePanel descriptorPanel; |
145 |
private FeatureType featureType; |
|
146 |
private boolean editable;
|
|
147 |
private EditableFeatureType featureType;
|
|
148 |
private int mode;
|
|
147 | 149 |
private FeatureTypeTableModel tableModel; |
148 | 150 |
private FeatureStore store; |
149 | 151 |
private int currentRow; |
... | ... | |
152 | 154 |
private ChangeListenerHelper changeListenerHelper; |
153 | 155 |
|
154 | 156 |
public DefaultFeatureTypePanel() { |
155 |
this.editable = true;
|
|
157 |
this.mode = MODE_SHOW_ONLY;
|
|
156 | 158 |
this.currentRow = -1; |
157 | 159 |
this.fieldSelectionAllowed = true; |
158 | 160 |
this.initComponents(); |
... | ... | |
161 | 163 |
@SuppressWarnings("Convert2Lambda") |
162 | 164 |
private void initComponents() { |
163 | 165 |
ToolsSwingManager swingManager = ToolsSwingLocator.getToolsSwingManager(); |
166 |
ConfigurableActionsMamager cfgActionsManager = ToolsUtilLocator.getConfigurableActionsMamager(); |
|
167 |
JComponent c = cfgActionsManager.getConfigurableActionsComponent(CONFIGURABLE_PANEL_ID, this); |
|
168 |
this.pnlCfgActions.setLayout(new BorderLayout(0,0)); |
|
169 |
this.pnlCfgActions.add(c, BorderLayout.CENTER); |
|
164 | 170 |
|
165 | 171 |
this.changeListenerHelper = swingManager.createChangeListenerHelper(); |
166 | 172 |
|
... | ... | |
288 | 294 |
this.descriptorPanel.put(descriptor); |
289 | 295 |
updateButtonState(); |
290 | 296 |
if( descriptor instanceof EditableFeatureAttributeDescriptor ) { |
291 |
this.btnFormFieldModify.setEnabled(this.editable);
|
|
297 |
this.btnFormFieldModify.setEnabled(this.mode==MODE_EDIT_ALL || this.mode==MODE_EDIT_ONLY_METADATA);
|
|
292 | 298 |
} else { |
293 | 299 |
this.btnFormFieldModify.setEnabled(false); |
294 | 300 |
} |
... | ... | |
296 | 302 |
|
297 | 303 |
private void updateButtonState() { |
298 | 304 |
this.descriptorPanel.setEnabled(true); |
299 |
this.descriptorPanel.setEditable(false);
|
|
305 |
this.descriptorPanel.setMode(MODE_SHOW_ONLY);
|
|
300 | 306 |
this.btnFormFieldAccept.setEnabled(false); |
301 | 307 |
this.btnFormFieldDiscard.setEnabled(false); |
302 |
this.btnFormFieldModify.setEnabled(this.editable); |
|
303 |
this.btnNew.setEnabled(this.editable); |
|
304 |
this.btnDelete.setEnabled(this.editable); |
|
308 |
|
|
309 |
switch(this.mode) { |
|
310 |
case MODE_EDIT_ALL: |
|
311 |
this.btnDelete.setEnabled(true); |
|
312 |
this.btnFormFieldModify.setEnabled(true); |
|
313 |
this.btnNew.setEnabled(true); |
|
314 |
this.tagsController.setEditable(true); |
|
315 |
this.txtLabel.setEditable(true); |
|
316 |
this.txtDescription.setEditable(true); |
|
317 |
break; |
|
318 |
case MODE_EDIT_ONLY_METADATA: |
|
319 |
this.btnDelete.setEnabled(this.descriptorPanel.isVirtualField()); |
|
320 |
this.btnFormFieldModify.setEnabled(true); |
|
321 |
this.btnNew.setEnabled(true); |
|
322 |
this.tagsController.setEditable(true); |
|
323 |
this.txtLabel.setEditable(true); |
|
324 |
this.txtDescription.setEditable(true); |
|
325 |
break; |
|
326 |
case MODE_SHOW_ONLY: |
|
327 |
this.btnDelete.setEnabled(false); |
|
328 |
this.btnFormFieldModify.setEnabled(false); |
|
329 |
this.btnNew.setEnabled(false); |
|
330 |
this.tagsController.setEditable(false); |
|
331 |
this.txtLabel.setEditable(false); |
|
332 |
this.txtDescription.setEditable(false); |
|
333 |
break; |
|
334 |
} |
|
305 | 335 |
} |
306 | 336 |
|
307 | 337 |
private void doFormFieldModify() { |
... | ... | |
311 | 341 |
} |
312 | 342 |
FeatureAttributeDescriptor descriptor = this.featureType.getAttributeDescriptor(row); |
313 | 343 |
this.descriptorPanel.put(descriptor); |
314 |
this.descriptorPanel.setEnabled(true);
|
|
315 |
this.btnFormFieldAccept.setEnabled(this.editable);
|
|
316 |
this.btnFormFieldDiscard.setEnabled(this.editable);
|
|
344 |
this.descriptorPanel.setEnabled(this.mode==MODE_EDIT_ALL || this.mode==MODE_EDIT_ONLY_METADATA);
|
|
345 |
this.btnFormFieldAccept.setEnabled(this.mode==MODE_EDIT_ALL || this.mode==MODE_EDIT_ONLY_METADATA);
|
|
346 |
this.btnFormFieldDiscard.setEnabled(this.mode==MODE_EDIT_ALL || this.mode==MODE_EDIT_ONLY_METADATA);
|
|
317 | 347 |
this.btnFormFieldModify.setEnabled(false); |
318 | 348 |
this.btnNew.setEnabled(false); |
319 | 349 |
this.btnDelete.setEnabled(false); |
320 | 350 |
if( descriptor instanceof EditableFeatureAttributeDescriptor ) { |
321 |
this.descriptorPanel.setEditable(this.editable);
|
|
351 |
this.descriptorPanel.setMode(this.mode);
|
|
322 | 352 |
} else { |
323 |
this.descriptorPanel.setEditable(false);
|
|
353 |
this.descriptorPanel.setMode(MODE_SHOW_ONLY);
|
|
324 | 354 |
} |
325 | 355 |
this.fieldSelectionAllowed = false; |
326 | 356 |
this.changeListenerHelper.fireEvent(); |
... | ... | |
382 | 412 |
} |
383 | 413 |
|
384 | 414 |
@Override |
385 |
public void setEditable(boolean editable) { |
|
386 |
this.editable = editable; |
|
387 |
this.btnNew.setEnabled(editable); |
|
388 |
this.btnDelete.setEnabled(editable); |
|
415 |
public int getMode() { |
|
416 |
return this.mode; |
|
417 |
} |
|
418 |
|
|
419 |
@Override |
|
420 |
public void setMode(int mode) { |
|
421 |
this.mode = mode; |
|
389 | 422 |
updateButtonState(); |
390 | 423 |
} |
391 | 424 |
|
392 | 425 |
@Override |
393 | 426 |
public EditableFeatureType fetch(EditableFeatureType type) { |
394 |
((DynStruct_v2)type).setLabel( |
|
395 |
StringUtils.defaultIfBlank(this.txtLabel.getText(), null) |
|
427 |
if( type == null ) { |
|
428 |
type = (EditableFeatureType) this.featureType.getCopy(); |
|
429 |
} else { |
|
430 |
type.removeAll(); |
|
431 |
type.addAll(this.featureType); |
|
432 |
} |
|
433 |
type.setLabel( |
|
434 |
StringUtils.defaultIfBlank(this.txtLabel.getText(), null) |
|
396 | 435 |
); |
397 |
((DynStruct_v2)type).setDescription(
|
|
398 |
StringUtils.defaultIfBlank(this.txtDescription.getText(), null)
|
|
436 |
type.setDescription(
|
|
437 |
StringUtils.defaultIfBlank(this.txtDescription.getText(), null) |
|
399 | 438 |
); |
400 |
this.tagsController.fetch(((DynStruct_v2)type).getTags());
|
|
439 |
this.tagsController.fetch(type.getTags());
|
|
401 | 440 |
return type; |
402 | 441 |
} |
403 | 442 |
|
404 | 443 |
@Override |
405 | 444 |
public void put(FeatureType type) { |
406 |
this.featureType = type;
|
|
445 |
this.featureType = null;
|
|
407 | 446 |
this.originalFeatureType = null; |
408 | 447 |
if (type == null) { |
409 | 448 |
this.store = null; |
... | ... | |
413 | 452 |
ftypeToCompare = type; |
414 | 453 |
} |
415 | 454 |
this.originalFeatureType = ftypeToCompare.getCopy(); |
455 |
this.featureType = (EditableFeatureType) type.getCopy(); |
|
416 | 456 |
// Nos quedamos una referencia para evitar que se destruya, ya que |
417 | 457 |
// el featureType se guarda solo una WeakReference. |
418 | 458 |
this.store = type.getStore(); |
... | ... | |
425 | 465 |
this.tagsController.set(((DynStruct_v2) type).getTags()); |
426 | 466 |
} |
427 | 467 |
if( !(type instanceof EditableFeatureType) ) { |
428 |
this.setEditable(false);
|
|
468 |
this.setMode(MODE_SHOW_ONLY);
|
|
429 | 469 |
} |
430 | 470 |
this.tableModel = new FeatureTypeTableModel(type); |
431 | 471 |
this.tblFields.setModel(this.tableModel); |
... | ... | |
443 | 483 |
DataTypes.STRING, |
444 | 484 |
50 |
445 | 485 |
); |
486 |
if( this.mode == MODE_EDIT_ONLY_METADATA ) { |
|
487 |
descriptor.setFeatureAttributeEmulator(ExpressionUtils.createExpression("NULL")); |
|
488 |
} |
|
446 | 489 |
this.tableModel.fireUpdateEvent(); |
447 | 490 |
int row = descriptor.getIndex(); |
448 | 491 |
this.tblFields.getSelectionModel().addSelectionInterval(row,row); |
Also available in: Unified diff