Revision 44740 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/DefaultFeatureAttributePanel.java
DefaultFeatureAttributePanel.java | ||
---|---|---|
1 | 1 |
package org.gvsig.fmap.dal.swing.impl.featuretype; |
2 | 2 |
|
3 |
import java.awt.Component; |
|
3 | 4 |
import java.awt.event.ActionEvent; |
5 |
import java.awt.event.ActionListener; |
|
4 | 6 |
import org.gvsig.fmap.dal.swing.featuretype.FeatureTypeAttributePanel; |
5 | 7 |
import java.awt.event.ItemEvent; |
8 |
import java.net.URL; |
|
6 | 9 |
import java.util.ArrayList; |
7 | 10 |
import java.util.List; |
8 | 11 |
import java.util.Objects; |
9 | 12 |
import javax.swing.DefaultComboBoxModel; |
13 |
import javax.swing.DefaultListCellRenderer; |
|
10 | 14 |
import javax.swing.DefaultListModel; |
15 |
import javax.swing.ImageIcon; |
|
11 | 16 |
import javax.swing.JButton; |
12 | 17 |
import javax.swing.JCheckBox; |
13 | 18 |
import javax.swing.JComboBox; |
14 | 19 |
import javax.swing.JComponent; |
20 |
import javax.swing.JLabel; |
|
15 | 21 |
import javax.swing.JList; |
16 | 22 |
import javax.swing.JOptionPane; |
23 |
import javax.swing.JScrollPane; |
|
17 | 24 |
import javax.swing.JTextField; |
25 |
import javax.swing.ListCellRenderer; |
|
18 | 26 |
import javax.swing.ListModel; |
19 | 27 |
import javax.swing.SwingUtilities; |
20 | 28 |
import javax.swing.event.ChangeEvent; |
21 | 29 |
import javax.swing.event.ListSelectionEvent; |
22 | 30 |
import javax.swing.text.JTextComponent; |
31 |
import org.apache.commons.io.FilenameUtils; |
|
23 | 32 |
import org.apache.commons.lang3.StringUtils; |
24 | 33 |
import org.cresques.cts.IProjection; |
25 | 34 |
import org.gvsig.expressionevaluator.Expression; |
... | ... | |
63 | 72 |
import org.gvsig.tools.dataTypes.DataType; |
64 | 73 |
import org.gvsig.tools.dataTypes.DataType.NumberPrecisionAndScale; |
65 | 74 |
import org.gvsig.tools.dataTypes.DataTypesManager; |
75 |
import org.gvsig.tools.dynobject.DynField; |
|
66 | 76 |
import org.gvsig.tools.dynobject.DynObjectValueItem; |
67 | 77 |
import org.gvsig.tools.i18n.I18nManager; |
68 | 78 |
import org.gvsig.tools.swing.api.ListElement; |
... | ... | |
71 | 81 |
import org.gvsig.tools.swing.api.pickercontroller.DatePickerController; |
72 | 82 |
import org.gvsig.tools.swing.api.pickercontroller.PickerController; |
73 | 83 |
import org.gvsig.tools.swing.api.threadsafedialogs.ThreadSafeDialogsManager; |
84 |
import org.gvsig.tools.swing.api.windowmanager.Dialog; |
|
85 |
import org.gvsig.tools.swing.api.windowmanager.WindowManager; |
|
86 |
import org.gvsig.tools.swing.api.windowmanager.WindowManager_v2; |
|
87 |
import org.gvsig.tools.swing.icontheme.IconTheme; |
|
74 | 88 |
import org.slf4j.Logger; |
75 | 89 |
import org.slf4j.LoggerFactory; |
76 | 90 |
|
... | ... | |
415 | 429 |
this.mode = FeatureTypePanel.MODE_SHOW_ONLY; |
416 | 430 |
DataTypesManager dataManager = ToolsLocator.getDataTypesManager(); |
417 | 431 |
this.fieldTypes = new ArrayList<>(); |
418 |
for (DataType dataType : dataManager) { |
|
419 |
fieldTypes.add( new ListElement<>(dataType.getName(), dataType.getType()) ); |
|
420 |
} |
|
432 |
fieldTypes.add( new ListElement<>("Decimal", DataTypes.DECIMAL) ); |
|
433 |
fieldTypes.add( new ListElement<>("Integer", DataTypes.INTEGER) ); |
|
434 |
fieldTypes.add( new ListElement<>("String", DataTypes.STRING) ); |
|
435 |
fieldTypes.add( new ListElement<>("Boolean", DataTypes.BOOLEAN) ); |
|
436 |
fieldTypes.add( new ListElement<>("Date/Time", DataTypes.TIMESTAMP) ); |
|
437 |
// for (DataType dataType : dataManager) { |
|
438 |
// fieldTypes.add( new ListElement<>(dataType.getName(), dataType.getType()) ); |
|
439 |
// } |
|
421 | 440 |
fieldTypes.sort((ListElement<Integer> o1, ListElement<Integer> o2) -> |
422 | 441 |
o1.toString().compareTo(o2.toString()) |
423 | 442 |
); |
... | ... | |
446 | 465 |
} |
447 | 466 |
|
448 | 467 |
private void initComponents() { |
449 |
ToolsSwingManager swingManager = ToolsSwingLocator.getToolsSwingManager(); |
|
450 |
ExpressionEvaluatorSwingManager evaluatorManager = ExpressionEvaluatorSwingLocator.getManager(); |
|
451 |
DataSwingManager dataSwingManager = DALSwingLocator.getSwingManager(); |
|
468 |
final ToolsSwingManager swingManager = ToolsSwingLocator.getToolsSwingManager(); |
|
469 |
final ExpressionEvaluatorSwingManager evaluatorManager = ExpressionEvaluatorSwingLocator.getManager(); |
|
470 |
final DataSwingManager dataSwingManager = DALSwingLocator.getSwingManager(); |
|
471 |
final I18nManager i18n = ToolsLocator.getI18nManager(); |
|
472 |
final DataTypesManager dataTypeManager = ToolsLocator.getDataTypesManager(); |
|
452 | 473 |
|
453 | 474 |
DefaultComboBoxModel<ListElement<Integer>> modelTypes = new DefaultComboBoxModel<>(); |
454 | 475 |
for (ListElement<Integer> element : fieldTypes) { |
455 | 476 |
modelTypes.addElement(element); |
456 | 477 |
} |
457 | 478 |
this.cboFieldType.setModel(modelTypes); |
479 |
this.cboFieldType.setRenderer(new DefaultListCellRenderer() { |
|
480 |
@Override |
|
481 |
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { |
|
482 |
JLabel label = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); |
|
483 |
label.setIcon(null); |
|
484 |
try { |
|
485 |
DataType dataType = dataTypeManager.get((int) value); |
|
486 |
IconTheme theme = ToolsSwingLocator.getIconThemeManager().getCurrent(); |
|
487 |
if (theme.exists(dataType.getIconName())) { |
|
488 |
label.setIcon(theme.get(dataType.getIconName())); |
|
489 |
} |
|
490 |
} catch(Exception ex) { |
|
491 |
// Do nothing, ignore |
|
492 |
} |
|
493 |
return label; |
|
494 |
} |
|
495 |
}); |
|
458 | 496 |
|
459 | 497 |
DefaultComboBoxModel<ListElement<Integer>> modelGeomTypes = new DefaultComboBoxModel<>(); |
460 | 498 |
for (ListElement<Integer> element : this.geometryTypes) { |
... | ... | |
639 | 677 |
dataProfilesModel.addElement(new ListElement<>(profile.getName(), profile.getID())); |
640 | 678 |
} |
641 | 679 |
this.cboDataProfile.setModel(dataProfilesModel); |
680 |
|
|
681 |
this.btnFieldType.addActionListener((ActionEvent e) -> { |
|
682 |
doDataTypeSelection(); |
|
683 |
}); |
|
684 |
|
|
685 |
DefaultComboBoxModel<ListElement<Integer>> relationTypeModel = new DefaultComboBoxModel<>(); |
|
686 |
relationTypeModel.addElement(new ListElement<>(i18n.getTranslation("_None"),DynField.RELATION_TYPE_NONE)); |
|
687 |
relationTypeModel.addElement(new ListElement<>(i18n.getTranslation("_Identity_1_1"),DynField.RELATION_TYPE_IDENTITY)); |
|
688 |
relationTypeModel.addElement(new ListElement<>(i18n.getTranslation("_Collaboration_1_1"),DynField.RELATION_TYPE_COLLABORATION)); |
|
689 |
relationTypeModel.addElement(new ListElement<>(i18n.getTranslation("_Composition_1_N"),DynField.RELATION_TYPE_COMPOSITION)); |
|
690 |
relationTypeModel.addElement(new ListElement<>(i18n.getTranslation("_Aggregate_1_N"),DynField.RELATION_TYPE_AGGREGATE)); |
|
691 |
this.cboRelationType.setModel(relationTypeModel); |
|
642 | 692 |
} |
643 | 693 |
|
644 | 694 |
@Override |
645 | 695 |
public JComponent asJComponent() { |
646 | 696 |
return this; |
647 | 697 |
} |
698 |
|
|
699 |
private void doDataTypeSelection() { |
|
700 |
final DataTypesManager dataManager = ToolsLocator.getDataTypesManager(); |
|
701 |
final I18nManager i18n = ToolsLocator.getI18nManager(); |
|
702 |
List<ListElement<Integer>> types = new ArrayList<>(); |
|
703 |
for (DataType dataType : dataManager) { |
|
704 |
types.add( new ListElement<>(dataType.getName(), dataType.getType()) ); |
|
705 |
} |
|
706 |
types.sort((ListElement<Integer> o1, ListElement<Integer> o2) -> |
|
707 |
o1.toString().compareTo(o2.toString()) |
|
708 |
); |
|
709 |
|
|
710 |
DefaultListModel<ListElement<Integer>> modelTypes = new DefaultListModel<>(); |
|
711 |
for (ListElement<Integer> element : types) { |
|
712 |
modelTypes.addElement(element); |
|
713 |
} |
|
714 |
final JList list = new JList(); |
|
715 |
list.setCellRenderer(new DefaultListCellRenderer() { |
|
716 |
@Override |
|
717 |
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { |
|
718 |
JLabel label = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); |
|
719 |
label.setIcon(null); |
|
720 |
try { |
|
721 |
DataType dataType = dataManager.get((int) value); |
|
722 |
IconTheme theme = ToolsSwingLocator.getIconThemeManager().getCurrent(); |
|
723 |
if (theme.exists(dataType.getIconName())) { |
|
724 |
label.setIcon(theme.get(dataType.getIconName())); |
|
725 |
} |
|
726 |
} catch(Exception ex) { |
|
727 |
// Do nothing, ignore |
|
728 |
} |
|
729 |
return label; |
|
730 |
} |
|
731 |
}); |
|
732 |
list.setModel(modelTypes); |
|
733 |
final JScrollPane scrollpanel = new JScrollPane(list); |
|
734 |
WindowManager_v2 winManager = (WindowManager_v2) ToolsSwingLocator.getWindowManager(); |
|
735 |
Dialog dialog = winManager.createDialog( |
|
736 |
scrollpanel, |
|
737 |
i18n.getTranslation("_Data_type_selection"), |
|
738 |
i18n.getTranslation("_Select_the_data_type"), |
|
739 |
WindowManager_v2.BUTTONS_OK_CANCEL |
|
740 |
); |
|
741 |
dialog.addActionListener((ActionEvent e) -> { |
|
742 |
if( dialog.getAction()==WindowManager_v2.BUTTON_OK ) { |
|
743 |
Integer type = (Integer) ListElement.getSelected(list); |
|
744 |
if( type!=null ) { |
|
745 |
ListElement.setSelected(cboFieldType, type); |
|
746 |
if( ListElement.getSelected(cboFieldType)==null ) { |
|
747 |
DataTypesManager dataTypeManager = ToolsLocator.getDataTypesManager(); |
|
748 |
DataType dataType = dataTypeManager.get(type); |
|
749 |
cboFieldType.addItem(new ListElement<>(dataType.getName(), dataType.getType())); |
|
750 |
ListElement.setSelected(cboFieldType, dataType.getType()); |
|
751 |
} |
|
752 |
} |
|
753 |
} |
|
754 |
}); |
|
755 |
dialog.show(WindowManager.MODE.DIALOG); |
|
756 |
} |
|
648 | 757 |
|
649 | 758 |
@Override |
650 | 759 |
public EditableFeatureAttributeDescriptor fetch(EditableFeatureAttributeDescriptor descriptor) { |
... | ... | |
673 | 782 |
descriptor.setScale(this.pickerScale.get(0)); |
674 | 783 |
descriptor.setDefaultValue(this.pickerDefaultValue.get()); |
675 | 784 |
descriptor.setDataProfileName((String) ListElement.getSelected(this.cboDataProfile)); |
785 |
descriptor.setRelationType((int) ListElement.getSelected(this.cboRelationType)); |
|
676 | 786 |
switch (descriptor.getType()) { |
677 | 787 |
case DataTypes.GEOMETRY: |
678 | 788 |
GeometryManager geomManager = GeometryLocator.getGeometryManager(); |
... | ... | |
916 | 1026 |
ListElement.setSelected(cboGeometryType, descriptor.getGeomType().getType()); |
917 | 1027 |
ListElement.setSelected(cboGeometrySubtype, descriptor.getGeomType().getSubType()); |
918 | 1028 |
} |
919 |
ListElement.setSelected(cboFieldType, descriptor.getType()); |
|
1029 |
ListElement.setSelected(cboFieldType, dataType.getType()); |
|
1030 |
if( ListElement.getSelected(cboFieldType)==null ) { |
|
1031 |
cboFieldType.addItem(new ListElement<>(dataType.getName(), dataType.getType())); |
|
1032 |
ListElement.setSelected(cboFieldType, dataType.getType()); |
|
1033 |
} |
|
1034 |
|
|
1035 |
ListElement.setSelected(cboRelationType, descriptor.getRelationType()); |
|
920 | 1036 |
|
921 | 1037 |
String profile = descriptor.getDataProfileName(); |
922 | 1038 |
if (StringUtils.isBlank(profile)) { |
... | ... | |
1235 | 1351 |
return StringUtils.defaultIfBlank(this.txtFieldName.getText(), null); |
1236 | 1352 |
} |
1237 | 1353 |
|
1354 |
@Override |
|
1355 |
public ImageIcon loadImage(String imageName) { |
|
1356 |
String name = FilenameUtils.getBaseName(imageName); |
|
1357 |
IconTheme theme = ToolsSwingLocator.getIconThemeManager().getCurrent(); |
|
1358 |
if (theme.exists(name)) { |
|
1359 |
return theme.get(name); |
|
1360 |
} |
|
1361 |
URL url = this.getClass().getResource(name + ".png"); |
|
1362 |
if (url == null) { |
|
1363 |
return null; |
|
1364 |
} |
|
1365 |
return new ImageIcon(url); |
|
1366 |
} |
|
1367 |
|
|
1238 | 1368 |
public static void selfRegister() { |
1369 |
String[][] iconNames = new String[][]{ |
|
1370 |
new String[]{"dalswing", "picker-datatype"},}; |
|
1371 |
IconTheme theme = ToolsSwingLocator.getIconThemeManager().getCurrent(); |
|
1372 |
for (String[] icon : iconNames) { |
|
1373 |
URL url = DefaultFeatureAttributeSelectionPanel.class.getResource(icon[1] + ".png"); |
|
1374 |
theme.registerDefault("DALSwing", icon[0], icon[1], null, url); |
|
1375 |
} |
|
1239 | 1376 |
|
1240 | 1377 |
} |
1241 | 1378 |
|
Also available in: Unified diff