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

View differences:

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