Ignore:
Timestamp:
2018-03-19T00:48:34+01:00 (20 months ago)
Author:
Don-vip
Message:

fix recent Sonar issues

Location:
trunk/src/org/openstreetmap/josm/gui/preferences/projection
Files:
1 added
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/gui/preferences/projection/CodeProjectionChoice.java

    r13515 r13544  
    44import static org.openstreetmap.josm.tools.I18n.tr;
    55
    6 import java.awt.Dimension;
    7 import java.awt.GridBagLayout;
    86import java.awt.event.ActionListener;
    97import java.io.Serializable;
    10 import java.util.ArrayList;
    118import java.util.Collection;
    129import java.util.Collections;
    1310import java.util.Comparator;
    14 import java.util.List;
    15 import java.util.Locale;
    1611import java.util.regex.Matcher;
    1712import java.util.regex.Pattern;
    1813
    1914import javax.swing.JPanel;
    20 import javax.swing.JScrollPane;
    21 import javax.swing.JTable;
    22 import javax.swing.event.DocumentEvent;
    23 import javax.swing.event.DocumentListener;
    24 import javax.swing.event.ListSelectionEvent;
    25 import javax.swing.event.ListSelectionListener;
    26 import javax.swing.table.AbstractTableModel;
    2715
    2816import org.openstreetmap.josm.data.projection.Projection;
    2917import org.openstreetmap.josm.data.projection.Projections;
    30 import org.openstreetmap.josm.gui.widgets.JosmTextField;
    31 import org.openstreetmap.josm.tools.GBC;
    3218
    3319/**
     
    4430    public CodeProjectionChoice() {
    4531        super(tr("By Code (EPSG)"), /* NO-ICON */ "core:code");
    46     }
    47 
    48     private static class CodeSelectionPanel extends JPanel implements ListSelectionListener, DocumentListener {
    49 
    50         private final JosmTextField filter = new JosmTextField(30);
    51         private final ProjectionCodeModel model = new ProjectionCodeModel();
    52         private JTable table;
    53         private final List<String> data;
    54         private final List<String> filteredData;
    55         private static final String DEFAULT_CODE = "EPSG:3857";
    56         private String lastCode = DEFAULT_CODE;
    57         private final transient ActionListener listener;
    58 
    59         CodeSelectionPanel(String initialCode, ActionListener listener) {
    60             this.listener = listener;
    61             data = new ArrayList<>(Projections.getAllProjectionCodes());
    62             data.sort(new CodeComparator());
    63             filteredData = new ArrayList<>(data);
    64             build();
    65             setCode(initialCode != null ? initialCode : DEFAULT_CODE);
    66             table.getSelectionModel().addListSelectionListener(this);
    67         }
    68 
    69         /**
    70          * List model for the filtered view on the list of all codes.
    71          */
    72         private class ProjectionCodeModel extends AbstractTableModel {
    73             @Override
    74             public int getRowCount() {
    75                 return filteredData.size();
    76             }
    77 
    78             @Override
    79             public String getValueAt(int index, int column) {
    80                 if (index >= 0 && index < filteredData.size()) {
    81                     String code = filteredData.get(index);
    82                     switch (column) {
    83                         case 0: return code;
    84                         case 1: return Projections.getProjectionByCode(code).toString();
    85                         default: break;
    86                     }
    87                 }
    88                 return null;
    89             }
    90 
    91             @Override
    92             public int getColumnCount() {
    93                 return 2;
    94             }
    95 
    96             @Override
    97             public String getColumnName(int column) {
    98                 switch (column) {
    99                     case 0: return tr("Projection code");
    100                     case 1: return tr("Projection name");
    101                     default: return super.getColumnName(column);
    102                 }
    103             }
    104         }
    105 
    106         private void build() {
    107             filter.setColumns(40);
    108             filter.getDocument().addDocumentListener(this);
    109 
    110             table = new JTable(model);
    111             table.setAutoCreateRowSorter(true);
    112             JScrollPane scroll = new JScrollPane(table);
    113             scroll.setPreferredSize(new Dimension(200, 214));
    114 
    115             this.setLayout(new GridBagLayout());
    116             this.add(filter, GBC.eol().weight(1.0, 0.0));
    117             this.add(scroll, GBC.eol().fill(GBC.HORIZONTAL));
    118         }
    119 
    120         public String getCode() {
    121             int idx = table.getSelectedRow();
    122             if (idx == -1)
    123                 return lastCode;
    124             return filteredData.get(table.convertRowIndexToModel(table.getSelectedRow()));
    125         }
    126 
    127         public final void setCode(String code) {
    128             int idx = filteredData.indexOf(code);
    129             if (idx != -1) {
    130                 selectRow(idx);
    131             }
    132         }
    133 
    134         private void selectRow(int idx) {
    135             table.setRowSelectionInterval(idx, idx);
    136             ensureRowIsVisible(idx);
    137         }
    138 
    139         private void ensureRowIsVisible(int idx) {
    140             table.scrollRectToVisible(table.getCellRect(idx, 0, true));
    141         }
    142 
    143         @Override
    144         public void valueChanged(ListSelectionEvent e) {
    145             listener.actionPerformed(null);
    146             lastCode = getCode();
    147         }
    148 
    149         @Override
    150         public void insertUpdate(DocumentEvent e) {
    151             updateFilter();
    152         }
    153 
    154         @Override
    155         public void removeUpdate(DocumentEvent e) {
    156             updateFilter();
    157         }
    158 
    159         @Override
    160         public void changedUpdate(DocumentEvent e) {
    161             updateFilter();
    162         }
    163 
    164         private void updateFilter() {
    165             filteredData.clear();
    166             String filterTxt = filter.getText().trim().toLowerCase(Locale.ENGLISH);
    167             for (String code : data) {
    168                 if (code.toLowerCase(Locale.ENGLISH).contains(filterTxt)
    169                  || Projections.getProjectionByCode(code).toString().toLowerCase(Locale.ENGLISH).contains(filterTxt)) {
    170                     filteredData.add(code);
    171                 }
    172             }
    173             model.fireTableDataChanged();
    174             int idx = filteredData.indexOf(lastCode);
    175             if (idx == -1) {
    176                 table.clearSelection();
    177                 if (table.getModel().getRowCount() > 0) {
    178                     ensureRowIsVisible(0);
    179                 }
    180             } else {
    181                 selectRow(idx);
    182             }
    183         }
    18432    }
    18533
Note: See TracChangeset for help on using the changeset viewer.