Changeset 36173 in osm for applications/editors/josm


Ignore:
Timestamp:
2023-10-16T23:27:18+02:00 (15 months ago)
Author:
taylor.smock
Message:

See #23218: Use newer error_prone versions when compiling on java 11+

This should allow us to compile all plugins with Java 21 (specifically OpenData).

OpenData has some additional changes, since some of the new error_prone checks
blocked compilation.

Location:
applications/editors/josm/plugins
Files:
58 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/build-common.xml

    r36168 r36173  
    133133            <compilerarg value="-Xlint:deprecation"/>
    134134            <compilerarg value="-Xlint:unchecked"/>
    135             <compilerarg value="-Xplugin:ErrorProne -Xep:StringSplitter:OFF -Xep:ReferenceEquality:OFF -Xep:InsecureCryptoUsage:OFF -Xep:FutureReturnValueIgnored:OFF -Xep:JdkObsolete:OFF -Xep:EqualsHashCode:OFF -Xep:JavaUtilDate:OFF -Xep:DoNotCallSuggester:OFF -Xep:BanSerializableRead:OFF -Xep:RestrictedApiChecker:OFF"/>
     135            <compilerarg value="-Xplugin:ErrorProne -Xep:StringSplitter:OFF -Xep:ReferenceEquality:OFF -Xep:InsecureCryptoUsage:OFF -Xep:FutureReturnValueIgnored:OFF -Xep:JdkObsolete:OFF -Xep:EqualsHashCode:OFF -Xep:JavaUtilDate:OFF -Xep:DoNotCallSuggester:OFF -Xep:BanSerializableRead:OFF -Xep:RestrictedApiChecker:OFF" unless:set="isJava11"/>
     136            <compilerarg value="-Xplugin:ErrorProne -Xep:StringSplitter:OFF -Xep:ReferenceEquality:OFF -Xep:InsecureCryptoUsage:OFF -Xep:FutureReturnValueIgnored:OFF -Xep:JdkObsolete:OFF -Xep:EqualsHashCode:OFF -Xep:JavaUtilDate:OFF -Xep:DoNotCallSuggester:OFF -Xep:BanSerializableRead:OFF" if:set="isJava11"/>
    136137            <compilerarg line="-Xmaxwarns 1000"/>
    137138            <classpath refid="plugin.classpath"/>
     
    739740    </target>
    740741    <target name="resolve-tools" depends="init-ivy" description="Resolves tools using Apache Ivy">
     742        <ivy:settings file="${josm.ivysettings}"/>
    741743        <ivy:resolve file="${core.tools.ivy}"/>
    742744        <ivy:cachepath file="${core.tools.ivy}" pathid="errorprone.classpath" conf="errorprone"/>
  • applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/OdPlugin.java

    r36072 r36173  
    104104            loadModules();
    105105            // Add menu in EDT
    106             GuiHelper.runInEDT(() -> buildMenu());
     106            GuiHelper.runInEDT(this::buildMenu);
    107107        }).start();
    108108
     
    117117    }
    118118
    119     private JMenu getModuleMenu(Module module) {
     119    private static JMenu getModuleMenu(Module module) {
    120120        String moduleName = module.getDisplayedName();
    121121        if (moduleName == null || moduleName.isEmpty()) {
     
    141141                    JMenu endMenu = null;
    142142                    if (cat != null) {
    143                         if ((endMenu = catMenus.get(cat)) == null) {
    144                             catMenus.put(cat, endMenu = new JMenu(cat.getName()));
     143                        endMenu = catMenus.get(cat);
     144                        if (endMenu == null) {
     145                            endMenu = new JMenu(cat.getName());
     146                            catMenus.put(cat, endMenu);
    145147                            setMenuItemIcon(cat.getIcon(), endMenu);
    146148                            moduleMenu.add(endMenu);
     
    183185    }
    184186
    185     private void setMenuItemIcon(ImageIcon icon, JMenuItem menuItem) {
     187    private static void setMenuItemIcon(ImageIcon icon, JMenuItem menuItem) {
    186188        if (icon != null) {
    187189            if (icon.getIconHeight() != 16 || icon.getIconWidth() != 16) {
     
    195197    public void mapFrameInitialized(MapFrame oldFrame, MapFrame newFrame) {
    196198        if (newFrame != null) {
    197             newFrame.addToggleDialog(dialog = new OdDialog());
     199            dialog = new OdDialog();
     200            newFrame.addToggleDialog(dialog);
    198201        } else {
    199202            dialog = null;
     
    206209    }
    207210
    208     private void loadModules() {
     211    private static void loadModules() {
    209212        MainFrame parent = MainApplication.getMainFrame();
    210213        List<ModuleInformation> modulesToLoad = ModuleHandler.buildListOfModulesToLoad(parent);
  • applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/OdConstants.java

    r36072 r36173  
    22package org.openstreetmap.josm.plugins.opendata.core;
    33
     4import java.nio.charset.StandardCharsets;
    45import java.util.ArrayList;
    56import java.util.Collection;
     
    1415     * Encodings
    1516     */
    16     public static final String UTF8 = "UTF-8";
     17    public static final String UTF8 = StandardCharsets.UTF_8.name();
    1718    public static final String ISO8859_15 = "ISO-8859-15";
    1819    public static final String CP850 = "Cp850";
     
    5051    public static final String PREF_MODULES = "opendata.modules";
    5152    public static final String PREF_MODULES_SITES = "opendata.modules.sites";
    52     public static final String OSM_SITE = "https://svn.openstreetmap.org/applications/editors/josm/plugins/opendata/";
     53    public static final String OSM_SITE = "https://josm.openstreetmap.de/browser/osm/applications/editors/josm/plugins/opendata";
    5354    public static final String[] DEFAULT_MODULE_SITES = {OSM_SITE + "modules.txt%<?modules=>"};
    5455
  • applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/actions/DownloadDataAction.java

    r36072 r36173  
    44import java.awt.event.ActionEvent;
    55import java.net.URL;
     6import java.util.Locale;
    67
    78import javax.swing.Action;
     
    2122        CheckParameterUtil.ensureParameterNotNull(url, "url");
    2223        putValue(Action.NAME, name);
    23         putValue("toolbar", ("opendata_download_"+module.getDisplayedName()+"_"+name).toLowerCase().replace(" ", "_"));
     24        putValue("toolbar", ("opendata_download_"+module.getDisplayedName()+"_"+name).toLowerCase(Locale.ROOT).replace(" ", "_"));
    2425        this.url = url;
    2526    }
  • applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/actions/DownloadDataTask.java

    r36072 r36173  
    2626import org.openstreetmap.josm.plugins.opendata.core.modules.Module;
    2727import org.openstreetmap.josm.plugins.opendata.core.modules.ModuleHandler;
     28import org.openstreetmap.josm.tools.Logging;
    2829
    2930public class DownloadDataTask extends DownloadOsmTask {
     
    4647        this.handler = null;
    4748        for (Module module : ModuleHandler.moduleList) {
    48             for (AbstractDataSetHandler handler : module.getNewlyInstanciatedHandlers()) {
    49                 if (handler.acceptsUrl(url)) {
    50                     this.handler = handler;
     49            for (AbstractDataSetHandler moduleHandler : module.getNewlyInstanciatedHandlers()) {
     50                if (moduleHandler.acceptsUrl(url)) {
     51                    this.handler = moduleHandler;
    5152                    return true;
    5253                }
     
    113114            return new AskLicenseAgreementDialog(license).showDialog().getValue() == 1;
    114115        } catch (IOException e) {
     116            Logging.debug(e);
    115117            JOptionPane.showMessageDialog(MainApplication.getMainFrame(), tr("License URL not available: {0}", license.toString()));
    116118            return false;
  • applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/actions/OpenLinkAction.java

    r36072 r36173  
    1919public class OpenLinkAction extends JosmAction {
    2020
    21     private URL url;
     21    private final URL url;
    2222
    2323    public OpenLinkAction(URL url, String icon24Name, String title, String description) {
     
    3535            try {
    3636                Logging.error(e1.getLocalizedMessage());
     37                Logging.debug(e1);
    3738                int index = e1.getIndex();
    3839                if (index > -1) {
  • applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/AbstractDataSetHandler.java

    r36072 r36173  
    77import java.util.ArrayList;
    88import java.util.Collection;
     9import java.util.Collections;
    910import java.util.List;
    1011import java.util.regex.Pattern;
     
    8889    }
    8990
    90     private boolean acceptsFilename(String filename, String[] expected, String ... extensions) {
     91    private static boolean acceptsFilename(String filename, String[] expected, String ... extensions) {
    9192        if (filename != null) {
    9293            for (String expectedName : expected) {
     
    102103    }
    103104
    104     protected final boolean acceptsCsvFilename(String filename, String... expected) {
     105    protected static boolean acceptsCsvFilename(String filename, String... expected) {
    105106        return acceptsFilename(filename, expected, OdConstants.CSV_EXT);
    106107    }
    107108
    108     protected final boolean acceptsXlsFilename(String filename, String... expected) {
     109    protected static boolean acceptsXlsFilename(String filename, String... expected) {
    109110        return acceptsFilename(filename, expected, OdConstants.XLS_EXT);
    110111    }
    111112
    112     protected final boolean acceptsOdsFilename(String filename, String... expected) {
     113    protected static boolean acceptsOdsFilename(String filename, String... expected) {
    113114        return acceptsFilename(filename, expected, OdConstants.ODS_EXT);
    114115    }
    115116
    116     protected final boolean acceptsShpFilename(String filename, String... expected) {
     117    protected static boolean acceptsShpFilename(String filename, String... expected) {
    117118        return acceptsFilename(filename, expected, OdConstants.SHP_EXT);
    118119    }
    119120
    120     protected final boolean acceptsMifFilename(String filename, String... expected) {
     121    protected static boolean acceptsMifFilename(String filename, String... expected) {
    121122        return acceptsFilename(filename, expected, OdConstants.MIF_EXT);
    122123    }
    123124
    124     protected final boolean acceptsMifTabFilename(String filename, String... expected) {
     125    protected static boolean acceptsMifTabFilename(String filename, String... expected) {
    125126        return acceptsFilename(filename, expected, OdConstants.MIF_EXT, OdConstants.TAB_EXT);
    126127    }
    127128
    128     protected final boolean acceptsShpMifFilename(String filename, String... expected) {
     129    protected static boolean acceptsShpMifFilename(String filename, String... expected) {
    129130        return acceptsFilename(filename, expected, OdConstants.SHP_EXT, OdConstants.MIF_EXT);
    130131    }
    131132
    132     protected final boolean acceptsKmlFilename(String filename, String... expected) {
     133    protected static boolean acceptsKmlFilename(String filename, String... expected) {
    133134        return acceptsFilename(filename, expected, OdConstants.KML_EXT);
    134135    }
    135136
    136     protected final boolean acceptsKmzFilename(String filename, String... expected) {
     137    protected static boolean acceptsKmzFilename(String filename, String... expected) {
    137138        return acceptsFilename(filename, expected, OdConstants.KMZ_EXT);
    138139    }
    139140
    140     protected final boolean acceptsKmzShpFilename(String filename, String... expected) {
     141    protected static boolean acceptsKmzShpFilename(String filename, String... expected) {
    141142        return acceptsFilename(filename, expected, OdConstants.KMZ_EXT, OdConstants.SHP_EXT);
    142143    }
    143144
    144     protected final boolean acceptsKmzTabFilename(String filename, String... expected) {
     145    protected static boolean acceptsKmzTabFilename(String filename, String... expected) {
    145146        return acceptsFilename(filename, expected, OdConstants.KMZ_EXT, OdConstants.TAB_EXT);
    146147    }
    147148
    148     protected final boolean acceptsZipFilename(String filename, String... expected) {
     149    protected static boolean acceptsZipFilename(String filename, String... expected) {
    149150        return acceptsFilename(filename, expected, OdConstants.ZIP_EXT);
    150151    }
    151152
    152     protected final boolean accepts7ZipFilename(String filename, String... expected) {
     153    protected static boolean accepts7ZipFilename(String filename, String... expected) {
    153154        return acceptsFilename(filename, expected, OdConstants.SEVENZIP_EXT);
    154155    }
    155156
    156     protected final boolean acceptsCsvKmzFilename(String filename, String... expected) {
     157    protected static boolean acceptsCsvKmzFilename(String filename, String... expected) {
    157158        return acceptsFilename(filename, expected, OdConstants.CSV_EXT, OdConstants.KMZ_EXT);
    158159    }
    159160
    160     protected final boolean acceptsCsvKmzTabFilename(String filename, String... expected) {
     161    protected static boolean acceptsCsvKmzTabFilename(String filename, String... expected) {
    161162        return acceptsFilename(filename, expected, OdConstants.CSV_EXT, OdConstants.KMZ_EXT, OdConstants.TAB_EXT);
    162163    }
    163164
    164     protected final boolean acceptsCsvXlsFilename(String filename, String... expected) {
     165    protected static boolean acceptsCsvXlsFilename(String filename, String... expected) {
    165166        return acceptsFilename(filename, expected, OdConstants.CSV_EXT, OdConstants.XLS_EXT);
    166167    }
    167168
    168     protected final boolean acceptsGpkgFilename(String filename, String... expected) {
     169    protected static boolean acceptsGpkgFilename(String filename, String... expected) {
    169170        return acceptsFilename(filename, expected, OdConstants.GEOPACKAGE_EXT);
    170171    }
     
    238239
    239240    public List<Pair<String, URL>> getDataURLs() {
    240         return null;
     241        return Collections.emptyList();
    241242    }
    242243
     
    315316    }
    316317
    317     protected final void replace(IPrimitive p, String dataKey, String osmKey) {
     318    protected static void replace(IPrimitive p, String dataKey, String osmKey) {
    318319        addOrReplace(p, dataKey, osmKey, null, null, null, true);
    319320    }
    320321
    321     protected final void replace(IPrimitive p, String dataKey, String osmKey, ValueReplacer replacer) {
     322    protected static void replace(IPrimitive p, String dataKey, String osmKey, ValueReplacer replacer) {
    322323        addOrReplace(p, dataKey, osmKey, null, null, replacer, true);
    323324    }
    324325
    325     protected final void replace(IPrimitive p, String dataKey, String osmKey, String[] dataValues, String[] osmValues) {
     326    protected static void replace(IPrimitive p, String dataKey, String osmKey, String[] dataValues, String[] osmValues) {
    326327        addOrReplace(p, dataKey, osmKey, dataValues, osmValues, null, true);
    327328    }
    328329
    329     protected final void add(IPrimitive p, String dataKey, String osmKey, ValueReplacer replacer) {
     330    protected static void add(IPrimitive p, String dataKey, String osmKey, ValueReplacer replacer) {
    330331        addOrReplace(p, dataKey, osmKey, null, null, replacer, false);
    331332    }
    332333
    333     protected final void add(IPrimitive p, String dataKey, String osmKey, String[] dataValues, String[] osmValues) {
     334    protected static void add(IPrimitive p, String dataKey, String osmKey, String[] dataValues, String[] osmValues) {
    334335        addOrReplace(p, dataKey, osmKey, dataValues, osmValues, null, false);
    335336    }
    336337
    337     private void addOrReplace(IPrimitive p, String dataKey, String osmKey, String[] dataValues, String[] osmValues,
     338    private static void addOrReplace(IPrimitive p, String dataKey, String osmKey, String[] dataValues, String[] osmValues,
    338339            ValueReplacer replacer, boolean replace) {
    339340        String value = p.get(dataKey);
     
    358359    }
    359360
    360     private void doAddReplace(IPrimitive p, String dataKey, String osmKey, String osmValue, boolean replace) {
     361    private static void doAddReplace(IPrimitive p, String dataKey, String osmKey, String osmValue, boolean replace) {
    361362        if (replace) {
    362363            p.remove(dataKey);
     
    436437
    437438    public boolean acceptsUrl(String url) {
    438         URL dataURL = getDataURL();
    439         if (dataURL != null && url.equals(dataURL.toString())) {
     439        URL currentDataUrl = getDataURL();
     440        if (currentDataUrl != null && url.equals(currentDataUrl.toString())) {
    440441            return true;
    441442        }
  • applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/DataSetUpdater.java

    r36072 r36173  
    2626 * Data set updater.
    2727 */
    28 public abstract class DataSetUpdater {
     28public interface DataSetUpdater {
    2929
    30     public static final void updateDataSet(DataSet dataSet, AbstractDataSetHandler handler, File associatedFile) {
     30    static void updateDataSet(DataSet dataSet, AbstractDataSetHandler handler, File associatedFile) {
    3131        if (dataSet != null) {
    3232            if (handler != null) {
  • applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/at/AustrianGmlHandler.java

    r36072 r36173  
    1818        if (crsName != null && crsName.startsWith("AUT")) {
    1919            // CHECKSTYLE.OFF: LineLength
    20             if (crsName.equalsIgnoreCase("AUT-GK28")) {             // Gauß-Krüger, Meridianstreifen M28
     20            if ("AUT-GK28".equalsIgnoreCase(crsName)) {             // Gauß-Krüger, Meridianstreifen M28
    2121                return CRS.decode("EPSG:31281");
    2222
    23             } else if (crsName.equalsIgnoreCase("AUT-GK31")) {      // Gauß-Krüger, Meridianstreifen M31
     23            } else if ("AUT-GK31".equalsIgnoreCase(crsName)) {      // Gauß-Krüger, Meridianstreifen M31
    2424                return CRS.decode("EPSG:31282");
    2525
    26             } else if (crsName.equalsIgnoreCase("AUT-GK34")) {      // Gauß-Krüger, Meridianstreifen M34
     26            } else if ("AUT-GK34".equalsIgnoreCase(crsName)) {      // Gauß-Krüger, Meridianstreifen M34
    2727                return CRS.decode("EPSG:31283");
    2828
    29             } else if (crsName.equalsIgnoreCase("AUT-GK28-5")) {    // Gauß-Krüger, Meridianstreifen M28, ohne 5 Mio. im Hochwert
     29            } else if ("AUT-GK28-5".equalsIgnoreCase(crsName)) {    // Gauß-Krüger, Meridianstreifen M28, ohne 5 Mio. im Hochwert
    3030                return CRS.decode("EPSG:31251");
    3131
    32             } else if (crsName.equalsIgnoreCase("AUT-GK31-5")) {    // Gauß-Krüger, Meridianstreifen M31, ohne 5 Mio. im Hochwert
     32            } else if ("AUT-GK31-5".equalsIgnoreCase(crsName)) {    // Gauß-Krüger, Meridianstreifen M31, ohne 5 Mio. im Hochwert
    3333                return CRS.decode("EPSG:31252");
    3434
    35             } else if (crsName.equalsIgnoreCase("AUT-GK34-5")) {    // Gauß-Krüger, Meridianstreifen M34, ohne 5 Mio. im Hochwert
     35            } else if ("AUT-GK34-5".equalsIgnoreCase(crsName)) {    // Gauß-Krüger, Meridianstreifen M34, ohne 5 Mio. im Hochwert
    3636                return CRS.decode("EPSG:31253");
    3737
    38             } else if (crsName.equalsIgnoreCase("AUT-BM28")) {      // Bundesmeldenetz, Meridianstreifen M28
     38            } else if ("AUT-BM28".equalsIgnoreCase(crsName)) {      // Bundesmeldenetz, Meridianstreifen M28
    3939                return CRS.decode("EPSG:31288");
    4040
    41             } else if (crsName.equalsIgnoreCase("AUT-BM31")) {      // Bundesmeldenetz, Meridianstreifen M31
     41            } else if ("AUT-BM31".equalsIgnoreCase(crsName)) {      // Bundesmeldenetz, Meridianstreifen M31
    4242                return CRS.decode("EPSG:31289");
    4343
    44             } else if (crsName.equalsIgnoreCase("AUT-BM34")) {      // Bundesmeldenetz, Meridianstreifen M34
     44            } else if ("AUT-BM34".equalsIgnoreCase(crsName)) {      // Bundesmeldenetz, Meridianstreifen M34
    4545                return CRS.decode("EPSG:31290");
    4646
    47             } else if (crsName.equalsIgnoreCase("AUT-LM")) {        // Lambertsche Kegelprojektion (geogr. Breite des Koo.Ursprungs = 47°30')
     47            } else if ("AUT-LM".equalsIgnoreCase(crsName)) {        // Lambertsche Kegelprojektion (geogr. Breite des Koo.Ursprungs = 47°30')
    4848                return CRS.decode("EPSG:31287");
    4949
    50             } else if (crsName.equalsIgnoreCase("AUT-LL-BESSEL")) { // Geographische Koordinaten auf dem Bessel-Ellipsoid, Längenzählung nach Greenwich
     50            } else if ("AUT-LL-BESSEL".equalsIgnoreCase(crsName)) { // Geographische Koordinaten auf dem Bessel-Ellipsoid, Längenzählung nach Greenwich
    5151                // See http://josebatiz.com/granvision/Almap/Install/Data1/_B5694C166D6A4B5390B1E547C6A1FAF6
    5252                // FIXME
  • applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/be/BelgianDataSetHandler.java

    r36092 r36173  
    8787    public URL getNationalPortalURL() {
    8888        try {
    89             String nationalPortalPath = "";
     89            String nationalPortalPath;
    9090            String lang = Config.getPref().get("language");
    9191            if (lang == null || lang.isEmpty()) {
  • applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/gui/AskLicenseAgreementDialog.java

    r36072 r36173  
    1414        super(license, MainApplication.getMainFrame(), tr("License Agreement"), new String[] {tr("Accept"), "", tr("Refuse")});
    1515
    16         setToolTipTexts(new String[] {
    17                 tr("I understand and accept these terms and conditions"),
     16        setToolTipTexts(tr("I understand and accept these terms and conditions"),
    1817                tr("View the full text of this license"),
    19                 tr("I refuse these terms and conditions. Cancel download.")});
     18                tr("I refuse these terms and conditions. Cancel download."));
    2019    }
    2120}
  • applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/gui/ChooserLauncher.java

    r36072 r36173  
    1111public final class ChooserLauncher implements Runnable {
    1212
    13     private Projection proj = null;
     13    private Projection proj;
    1414    private final ProgressMonitor progressMonitor;
    1515
  • applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/gui/ModuleListPanel.java

    r36072 r36173  
    77import java.awt.GridBagLayout;
    88import java.awt.Insets;
    9 import java.awt.event.ActionEvent;
    10 import java.awt.event.ActionListener;
    119import java.util.List;
    1210
     
    1412import javax.swing.JLabel;
    1513import javax.swing.SwingConstants;
    16 import javax.swing.event.HyperlinkEvent;
    1714import javax.swing.event.HyperlinkEvent.EventType;
    18 import javax.swing.event.HyperlinkListener;
    1915
    2016import org.openstreetmap.josm.gui.widgets.HtmlPanel;
     
    2824 */
    2925public class ModuleListPanel extends VerticallyScrollablePanel {
    30     private ModulePreferencesModel model;
     26    private final ModulePreferencesModel model;
    3127
    3228    public ModuleListPanel() {
     
    4238    protected String formatModuleRemoteVersion(ModuleInformation pi) {
    4339        StringBuilder sb = new StringBuilder();
    44         if (pi.version == null || pi.version.trim().equals("")) {
     40        if (pi.version == null || pi.version.trim().isEmpty()) {
    4541            sb.append(tr("unknown"));
    4642        } else {
     
    5248    protected String formatModuleLocalVersion(ModuleInformation pi) {
    5349        if (pi == null) return tr("unknown");
    54         if (pi.localversion == null || pi.localversion.trim().equals(""))
     50        if (pi.localversion == null || pi.localversion.trim().isEmpty())
    5551            return tr("unknown");
    5652        return pi.localversion;
     
    106102            cbModule.setSelected(selected);
    107103            cbModule.setToolTipText(formatCheckboxTooltipText(pi));
    108             cbModule.addActionListener(new ActionListener() {
    109                 @Override
    110                 public void actionPerformed(ActionEvent e) {
    111                     model.setModuleSelected(pi.getName(), cbModule.isSelected());
    112                 }
    113             });
     104            cbModule.addActionListener(e -> model.setModuleSelected(pi.getName(), cbModule.isSelected()));
    114105            JLabel lblModule = new JLabel(
    115106                    tr("{0}: Version {1} (local: {2})", pi.getName(), remoteversion, localversion),
     
    130121            HtmlPanel description = new HtmlPanel();
    131122            description.setText(pi.getDescriptionAsHtml());
    132             description.getEditorPane().addHyperlinkListener(new HyperlinkListener() {
    133                 @Override
    134                 public void hyperlinkUpdate(HyperlinkEvent e) {
    135                     if (e.getEventType() == EventType.ACTIVATED) {
    136                         OpenBrowser.displayUrl(e.getURL().toString());
    137                     }
     123            description.getEditorPane().addHyperlinkListener(e -> {
     124                if (e.getEventType() == EventType.ACTIVATED) {
     125                    OpenBrowser.displayUrl(e.getURL().toString());
    138126                }
    139127            });
  • applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/gui/ModulePreference.java

    r36072 r36173  
    159159    @Override
    160160    public void addGui(final PreferenceTabbedPane gui) {
    161         GridBagConstraints gc = new GridBagConstraints();
    162         gc.weightx = 1.0;
    163         gc.weighty = 1.0;
    164         gc.anchor = GridBagConstraints.NORTHWEST;
    165         gc.fill = GridBagConstraints.BOTH;
    166161        OdPreferenceSetting settings = gui.getSetting(OdPreferenceSetting.class);
    167162        settings.tabPane.addTab(tr("Modules"), buildModuleListPanel());
     
    209204     */
    210205    public List<ModuleInformation> getModulesScheduledForUpdateOrDownload() {
    211         return model != null ? model.getModulesScheduledForUpdateOrDownload() : null;
     206        return model.getModulesScheduledForUpdateOrDownload();
    212207    }
    213208
  • applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/gui/ModulePreferencesModel.java

    r36072 r36173  
    66import java.util.Collection;
    77import java.util.Collections;
    8 import java.util.Comparator;
    98import java.util.HashMap;
    109import java.util.HashSet;
    1110import java.util.LinkedList;
    1211import java.util.List;
     12import java.util.Locale;
    1313import java.util.Set;
    1414
     
    1919import org.openstreetmap.josm.plugins.opendata.core.modules.ModuleInformation;
    2020import org.openstreetmap.josm.spi.preferences.Config;
     21import org.openstreetmap.josm.tools.Logging;
    2122
    2223public class ModulePreferencesModel extends ChangeNotifier {
     
    2425    private final ArrayList<ModuleInformation> displayedModules = new ArrayList<>();
    2526    private final HashMap<ModuleInformation, Boolean> selectedModulesMap = new HashMap<>();
    26     private Set<String> pendingDownloads = new HashSet<>();
     27    private final Set<String> pendingDownloads = new HashSet<>();
    2728    private String filterExpression;
    2829    private final Set<String> currentActiveModules;
     
    6263        Set<String> activeModules = new HashSet<>(getModules(Collections.emptyList()));
    6364        for (ModuleInformation pi: availableModules) {
    64             if (selectedModulesMap.get(pi) == null) {
    65                 if (activeModules.contains(pi.name)) {
    66                     selectedModulesMap.put(pi, true);
    67                 }
     65            if (selectedModulesMap.get(pi) == null && activeModules.contains(pi.name)) {
     66                selectedModulesMap.put(pi, true);
    6867            }
    6968        }
     
    9594        Set<String> activeModules = new HashSet<>(getModules(Collections.emptyList()));
    9695        for (ModuleInformation pi: availableModules) {
    97             if (selectedModulesMap.get(pi) == null) {
    98                 if (activeModules.contains(pi.name)) {
    99                     selectedModulesMap.put(pi, true);
    100                 }
     96            if (selectedModulesMap.get(pi) == null && activeModules.contains(pi.name)) {
     97                selectedModulesMap.put(pi, true);
    10198            }
    10299        }
     
    115112                continue;
    116113            }
    117             if (selectedModulesMap.get(pi)) {
     114            if (Boolean.TRUE.equals(selectedModulesMap.get(pi))) {
    118115                ret.add(pi);
    119116            }
     
    125122     * Replies the list of selected module information objects
    126123     *
    127      * @return the list of selected module information objects
     124     * @return the set of selected module information objects
    128125     */
    129126    public Set<String> getSelectedModuleNames() {
     
    139136     */
    140137    protected void sort() {
    141         Collections.sort(
    142                 availableModules,
    143                 new Comparator<ModuleInformation>() {
    144                     @Override
    145                     public int compare(ModuleInformation o1, ModuleInformation o2) {
    146                         String n1 = o1.getName() == null ? "" : o1.getName().toLowerCase();
    147                         String n2 = o2.getName() == null ? "" : o2.getName().toLowerCase();
    148                         return n1.compareTo(n2);
    149                     }
    150                 }
    151                 );
    152     }
    153 
    154     /**
    155      * Replies the list of module informations to display
    156      *
    157      * @return the list of module informations to display
     138        availableModules.sort((o1, o2) -> {
     139            String n1 = o1.getName() == null ? "" : o1.getName().toLowerCase(Locale.ROOT);
     140            String n2 = o2.getName() == null ? "" : o2.getName().toLowerCase(Locale.ROOT);
     141            return n1.compareTo(n2);
     142        });
     143    }
     144
     145    /**
     146     * Replies the list of module information to display
     147     *
     148     * @return the list of module information to display
    158149     */
    159150    public List<ModuleInformation> getDisplayedModules() {
     
    225216    }
    226217
    227     /**
     218    /*
    228219     * Initializes the model from preferences
    229220     */
     
    257248    }
    258249
    259     /**
     250    /*
    260251     * Replies the set of modules which have been added by the user to
    261252     * the set of activated modules.
     
    275266    }*/
    276267
    277     /**
     268    /*
    278269     * Replies the set of modules which have been removed by the user from
    279270     * the set of activated modules.
     
    294285    }*/
    295286
    296     /**
     287    /*
    297288     * Replies the set of module names which have been added by the user to
    298289     * the set of activated modules.
     
    350341                oldinfo.localversion = newinfo.version;
    351342            } catch (ModuleException e) {
    352                 e.printStackTrace();
     343                Logging.debug(e);
    353344            }
    354345        }
  • applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/gui/OdPreferenceSetting.java

    r36072 r36173  
    5858     * @return the collection of module site URLs from where module lists can be downloaded
    5959     */
    60     public static final Collection<String> getModuleSites() {
     60    public static Collection<String> getModuleSites() {
    6161        return Config.getPref().getList(OdConstants.PREF_MODULES_SITES, Arrays.asList(OdConstants.DEFAULT_MODULE_SITES));
    6262    }
     
    153153        //
    154154        final Runnable continuation = () -> {
    155             boolean requiresRestart = false;
    156             if (task != null && !task.isCanceled()) {
    157                 if (!task.getDownloadedModules().isEmpty()) {
    158                     requiresRestart = true;
    159                 }
    160             }
     155            boolean requiresRestart = task != null && !task.isCanceled() && !task.getDownloadedModules().isEmpty();
    161156
    162157            // build the messages. We only display one message, including the status
     
    200195        }
    201196
    202         return task == null ? result : false;
     197        return task == null && result;
    203198    }
    204199}
  • applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/gui/ProjectionChooser.java

    r36072 r36173  
    77import java.awt.Dimension;
    88import java.awt.GridBagLayout;
    9 import java.awt.event.ActionEvent;
    109import java.awt.event.ActionListener;
    1110
     
    4443     */
    4544    private JPanel projSubPrefPanel;
    46     private JPanel projSubPrefPanelWrapper = new JPanel(new GridBagLayout());
     45    private final JPanel projSubPrefPanelWrapper = new JPanel(new GridBagLayout());
    4746
    4847    private JLabel projectionCodeLabel;
    4948    private Component projectionCodeGlue;
    50     private JLabel projectionCode = new JLabel();
     49    private final JLabel projectionCode = new JLabel();
    5150    private JLabel projectionNameLabel;
    5251    private Component projectionNameGlue;
    53     private JLabel projectionName = new JLabel();
    54     private JLabel bounds = new JLabel();
     52    private final JLabel projectionName = new JLabel();
     53    private final JLabel bounds = new JLabel();
    5554
    5655    /**
     
    7776
    7877    public void addGui() {
     78        projectionCodeLabel = new JLabel(tr("Projection code"));
     79        projectionCodeGlue = GBC.glue(5, 0);
     80        projectionNameLabel = new JLabel(tr("Projection name"));
     81        projectionNameGlue = GBC.glue(5, 0);
    7982        projPanel.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
    8083        projPanel.setLayout(new GridBagLayout());
     
    8285        projPanel.add(GBC.glue(5, 0), GBC.std().fill(GBC.HORIZONTAL));
    8386        projPanel.add(projectionCombo, GBC.eop().fill(GBC.HORIZONTAL).insets(0, 5, 5, 5));
    84         projPanel.add(projectionCodeLabel = new JLabel(tr("Projection code")), GBC.std().insets(25, 5, 0, 5));
    85         projPanel.add(projectionCodeGlue = GBC.glue(5, 0), GBC.std().fill(GBC.HORIZONTAL));
     87        projPanel.add(projectionCodeLabel, GBC.std().insets(25, 5, 0, 5));
     88        projPanel.add(projectionCodeGlue, GBC.std().fill(GBC.HORIZONTAL));
    8689        projPanel.add(projectionCode, GBC.eop().fill(GBC.HORIZONTAL).insets(0, 5, 5, 5));
    87         projPanel.add(projectionNameLabel = new JLabel(tr("Projection name")), GBC.std().insets(25, 5, 0, 5));
    88         projPanel.add(projectionNameGlue = GBC.glue(5, 0), GBC.std().fill(GBC.HORIZONTAL));
     90        projPanel.add(projectionNameLabel, GBC.std().insets(25, 5, 0, 5));
     91        projPanel.add(projectionNameGlue, GBC.std().fill(GBC.HORIZONTAL));
    8992        projPanel.add(projectionName, GBC.eop().fill(GBC.HORIZONTAL).insets(0, 5, 5, 5));
    9093        projPanel.add(new JLabel(tr("Bounds")), GBC.std().insets(25, 5, 0, 5));
     
    9497
    9598        selectedProjectionChanged((ProjectionChoice) projectionCombo.getSelectedItem());
    96         projectionCombo.addActionListener(new ActionListener() {
    97             @Override
    98             public void actionPerformed(ActionEvent e) {
    99                 ProjectionChoice pc = (ProjectionChoice) projectionCombo.getSelectedItem();
    100                 selectedProjectionChanged(pc);
    101             }
     99        projectionCombo.addActionListener(e -> {
     100            ProjectionChoice pc = (ProjectionChoice) projectionCombo.getSelectedItem();
     101            selectedProjectionChanged(pc);
    102102        });
    103103        setContent(projPanel);
     
    110110            return;
    111111
    112         final ActionListener listener = new ActionListener() {
    113             @Override
    114             public void actionPerformed(ActionEvent e) {
    115                 updateMeta(pc);
    116             }
    117         };
     112        final ActionListener listener = e -> updateMeta(pc);
    118113
    119114        // Replace old panel with new one
  • applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/LambertCC9ZonesProjectionPatterns.java

    r36072 r36173  
    1414    static {
    1515        for (int i = 0; i < lambertCC9Zones.length; i++) {
    16             lambertCC9Zones[i] = Projections.getProjectionByCode("EPSG:"+Integer.toString(3942+i));
     16            lambertCC9Zones[i] = Projections.getProjectionByCode("EPSG:" + (3942 + i));
    1717        }
    1818    }
  • applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/NeptuneReader.java

    r36072 r36173  
    8686    private final Map<String, OsmPrimitive> tridentObjects = new HashMap<>();
    8787
    88     public static final boolean acceptsXmlNeptuneFile(File file) {
     88    public static boolean acceptsXmlNeptuneFile(File file) {
    8989        return acceptsXmlNeptuneFile(file, null);
    9090    }
    9191
    92     public static final boolean acceptsXmlNeptuneFile(File file, URL schemaURL) {
     92    public static boolean acceptsXmlNeptuneFile(File file, URL schemaURL) {
    9393
    9494        if (schemaURL == null) {
     
    105105                Logging.info(xmlFile.getSystemId() + " is valid");
    106106                return true;
    107             } catch (SAXException e) {
     107            } catch (SAXException | IOException e) {
    108108                Logging.error(xmlFile.getSystemId() + " is NOT valid");
    109109                Logging.error("Reason: " + e.getLocalizedMessage());
    110             } catch (IOException e) {
    111                 Logging.error(xmlFile.getSystemId() + " is NOT valid");
    112                 Logging.error("Reason: " + e.getLocalizedMessage());
     110                Logging.debug(e);
    113111            }
    114112        } catch (IOException e) {
     
    123121    }
    124122
    125     protected static final <T> T unmarshal(Class<T> docClass, InputStream inputStream) throws JAXBException {
     123    protected static <T> T unmarshal(Class<T> docClass, InputStream inputStream) throws JAXBException {
    126124        String packageName = docClass.getPackage().getName();
    127125        JAXBContext jc = JAXBContext.newInstance(packageName, NeptuneReader.class.getClassLoader());
     
    215213    }
    216214
    217     protected final <T extends TridentObjectType> T findTridentObject(List<T> list, String id) {
     215    protected static <T extends TridentObjectType> T findTridentObject(List<T> list, String id) {
    218216        for (T object : list) {
    219217            if (object.getObjectId().equals(id)) {
     
    343341                    Logging.warn("Cannot find StopPoint: "+grandchildId);
    344342                } else {
    345                     if (grandchild.getLongLatType().equals(LongLatTypeType.WGS_84)) {
     343                    if (grandchild.getLongLatType() == LongLatTypeType.WGS_84) {
    346344                        Node platform = createPlatform(grandchild);
    347345                        stopArea.addMember(new RelationMember(OSM_PLATFORM, platform));
     
    358356        if (areaCentroid == null) {
    359357            Logging.warn("Cannot find AreaCentroid: "+centroidId);
    360         } else if (!areaCentroid.getLongLatType().equals(LongLatTypeType.WGS_84)) {
     358        } else if (areaCentroid.getLongLatType() != LongLatTypeType.WGS_84) {
    361359            Logging.warn("Unsupported long/lat type: "+areaCentroid.getLongLatType());
    362360        } else {
  • applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/NetworkReader.java

    r36072 r36173  
    55
    66import java.io.File;
     7import java.io.IOException;
    78import java.io.InputStream;
    89import java.util.HashMap;
     10import java.util.Locale;
    911import java.util.Map;
    1012import java.util.regex.Matcher;
    1113import java.util.regex.Pattern;
     14
     15import javax.xml.stream.XMLStreamException;
    1216
    1317import org.openstreetmap.josm.data.osm.DataSet;
     
    1620import org.openstreetmap.josm.io.Compression;
    1721import org.openstreetmap.josm.io.GeoJSONReader;
     22import org.openstreetmap.josm.io.IllegalDataException;
    1823import org.openstreetmap.josm.io.OsmServerReader;
    1924import org.openstreetmap.josm.io.OsmTransferException;
     
    121126    }
    122127
    123     private Class<? extends AbstractReader> findReaderByExtension(String filename) {
    124         filename = filename.replace("\"", "").toLowerCase();
    125         for (String ext : FILE_AND_ARCHIVE_READERS.keySet()) {
    126             if (filename.endsWith("."+ext)) {
    127                 return FILE_AND_ARCHIVE_READERS.get(ext);
     128    private static Class<? extends AbstractReader> findReaderByExtension(String filename) {
     129        filename = filename.replace("\"", "").toLowerCase(Locale.ROOT);
     130        for (Map.Entry<String, Class<? extends AbstractReader>> entry : FILE_AND_ARCHIVE_READERS.entrySet()) {
     131            if (filename.endsWith("."+entry.getKey())) {
     132                return entry.getValue();
    128133            }
    129134        }
     
    142147    public DataSet parseOsm(ProgressMonitor progressMonitor) throws OsmTransferException {
    143148        InputStream in = null;
    144         ProgressMonitor instance = null;
     149        ProgressMonitor instance;
    145150        try {
    146151            in = getInputStreamRaw(url, progressMonitor);
     
    176181                return GeoJSONReader.parseDataSet(in, instance);
    177182            } else if (readerClass.equals(MifReader.class)) {
    178                 return MifReader.parseDataSet(in, null, handler, instance);
     183                return MifReader.parseDataSet(in, null, handler);
    179184            } else if (readerClass.equals(ShpReader.class)) {
    180185                return ShpReader.parseDataSet(in, null, handler, instance);
     
    192197                throw new IllegalArgumentException("Unsupported reader class: "+readerClass.getName());
    193198            }
    194         } catch (OsmTransferException e) {
    195             throw e;
    196         } catch (Exception e) {
     199        } catch (IOException | XMLStreamException | IllegalDataException e) {
    197200            if (cancel)
    198201                return null;
     
    205208                    in.close();
    206209                }
    207             } catch (Exception e) {
     210            } catch (IOException e) {
    208211                Logging.trace(e);
    209212            }
  • applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/OverpassApi.java

    r36072 r36173  
    4343    }
    4444
    45     public static final StringBuilder union(CharSequence... queries) {
     45    public static StringBuilder union(CharSequence... queries) {
    4646        StringBuilder result = new StringBuilder("<union>\n");
    4747        for (CharSequence query : queries) {
     
    5454    }
    5555
    56     public static final StringBuilder query(String bbox, OaQueryType type, CharSequence... conditions) {
     56    public static StringBuilder query(String bbox, OaQueryType type, CharSequence... conditions) {
    5757        StringBuilder result = new StringBuilder("<query type=\"").append(type).append("\" >\n");
    5858        if (bbox != null) {
     
    6868    }
    6969
    70     public static final String recurse(OaRecurseType type, String into) {
     70    public static String recurse(OaRecurseType type, String into) {
    7171        return "<recurse type=\""+type+"\" into=\""+into+"\"/>\n";
    7272    }
    7373
    74     public static final String recurse(OaRecurseType... types) {
    75         String result = "";
     74    public static String recurse(OaRecurseType... types) {
     75        StringBuilder result = new StringBuilder();
    7676        for (OaRecurseType type : types) {
    77             result += "<recurse type=\""+type+"\"/>\n";
     77            result.append("<recurse type=\"").append(type).append("\"/>\n");
    7878        }
    79         return result;
     79        return result.toString();
    8080    }
    8181
    82     public static final String print() {
     82    public static String print() {
    8383        return "<print mode=\"meta\"/>";
    8484    }
    8585
    86     public static final String hasKey(String key) {
     86    public static String hasKey(String key) {
    8787        return hasKey(key, null);
    8888    }
    8989
    90     public static final String hasKey(String key, String value) {
     90    public static String hasKey(String key, String value) {
    9191        return "<has-kv k=\""+key+"\" "+(value != null && !value.isEmpty() ? "v=\""+value+"\"" : "")+" />";
    9292    }
  • applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/ProjectionPatterns.java

    r36072 r36173  
    5252    }
    5353
    54     public static final Pattern getCoordinatePattern(String coor, String proj) {
     54    public static Pattern getCoordinatePattern(String coor, String proj) {
    5555        if (proj != null && !proj.isEmpty()) {
    5656            return Pattern.compile("(?:.*(?:"+coor+").*(?:"+proj+").*)|(?:.*("+proj+").*(?:"+coor+").*)", Pattern.CASE_INSENSITIVE);
  • applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/archive/ArchiveReader.java

    r36072 r36173  
    1212import java.util.HashMap;
    1313import java.util.List;
     14import java.util.Locale;
    1415import java.util.Map;
    1516
     
    154155                    instance = progressMonitor.createSubTaskMonitor(ProgressMonitor.ALL_TICKS, false);
    155156                }
    156                 final String lowerCaseName = f.getName().toLowerCase();
     157                final String lowerCaseName = f.getName().toLowerCase(Locale.ROOT);
    157158                if (lowerCaseName.endsWith(OdConstants.CSV_EXT)) {
    158159                    from = CsvReader.parseDataSet(in, handler, instance);
     
    168169                    from = ShpReader.parseDataSet(in, f, handler, instance);
    169170                } else if (lowerCaseName.endsWith(OdConstants.MIF_EXT)) {
    170                     from = MifReader.parseDataSet(in, f, handler, instance);
     171                    from = MifReader.parseDataSet(in, f, handler);
    171172                } else if (lowerCaseName.endsWith(OdConstants.TAB_EXT)) {
    172173                    from = TabReader.parseDataSet(in, f, handler, instance);
     
    190191        // Test file name to see if it may contain useful data
    191192        for (String ext : NetworkReader.FILE_READERS.keySet()) {
    192             if (entryName.toLowerCase().endsWith("."+ext)) {
     193            if (entryName.toLowerCase(Locale.ROOT).endsWith("."+ext)) {
    193194                candidates.add(file);
    194195                break;
  • applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/archive/DefaultArchiveHandler.java

    r36072 r36173  
    66public class DefaultArchiveHandler implements ArchiveHandler {
    77
    8     private boolean skipXsdValidation = false;
     8    private boolean skipXsdValidation;
    99   
    1010    @Override
  • applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/archive/ZipReader.java

    r36072 r36173  
    2727    private final ZipInputStream zis;
    2828
    29     private ZipEntry entry;
    30 
    3129    public ZipReader(InputStream in, AbstractDataSetHandler handler, boolean promptUser) {
    3230        super(handler, handler != null ? handler.getArchiveHandler() : null, promptUser);
     
    4644    @Override
    4745    protected void extractArchive(final File temp, final List<File> candidates) throws IOException, FileNotFoundException {
     46        ZipEntry entry;
    4847        while ((entry = zis.getNextEntry()) != null) {
    4948            Logging.debug("Extracting {0}", entry.getName());
     
    6362                try (FileOutputStream fos = new FileOutputStream(file)) {
    6463                    byte[] buffer = new byte[8192];
    65                     int count = 0;
     64                    int count;
    6665                    while ((count = zis.read(buffer, 0, buffer.length)) > 0) {
    6766                        fos.write(buffer, 0, count);
  • applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/AbstractMapInfoReader.java

    r36072 r36173  
    1212import java.util.ArrayList;
    1313import java.util.List;
     14import java.util.Locale;
    1415
    1516import org.openstreetmap.josm.data.osm.DataSet;
     
    5152    protected final File getDataFile(File headerFile, String extension) {
    5253        String filename = headerFile.getName().substring(0, headerFile.getName().lastIndexOf('.'));
    53         File dataFile = new File(headerFile.getParent() + File.separator + filename + extension.toUpperCase());
     54        File dataFile = new File(headerFile.getParent() + File.separator + filename + extension.toUpperCase(Locale.ROOT));
    5455        if (!dataFile.exists()) {
    55             dataFile = new File(headerFile.getParent() + File.separator + filename + extension.toLowerCase());
     56            dataFile = new File(headerFile.getParent() + File.separator + filename + extension.toLowerCase(Locale.ROOT));
    5657        }
    5758        return dataFile;
  • applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/DefaultGeographicHandler.java

    r36072 r36173  
    1010
    1111    private boolean useNodeMap = true;
    12     private boolean checkNodeProximity = false;
    13     private boolean preferMultipolygonToSimpleWay = false;
     12    private boolean checkNodeProximity;
     13    private boolean preferMultipolygonToSimpleWay;
    1414
    1515    @Override
  • applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/GeographicReader.java

    r36122 r36173  
    1818import java.util.TreeMap;
    1919
    20 import jakarta.json.JsonArray;
    21 import jakarta.json.JsonObject;
    22 import jakarta.json.JsonReader;
    23 import jakarta.json.spi.JsonProvider;
    2420import javax.swing.JOptionPane;
    2521
     
    6965import org.openstreetmap.josm.tools.Utils;
    7066
     67import jakarta.json.JsonArray;
     68import jakarta.json.JsonObject;
     69import jakarta.json.JsonReader;
     70import jakarta.json.spi.JsonProvider;
     71
    7172/**
    7273 * Superclass of geographic format readers (currently GML, GPKG, and SHP).
     
    181182        Way tempWay = new Way();
    182183        if (ls != null) {
    183             final List<Node> nodes = new ArrayList<>(ls.getNumPoints());
     184            final List<Node> lsNodes = new ArrayList<>(ls.getNumPoints());
    184185            // Build list of nodes
    185186            for (int i = 0; i < ls.getNumPoints(); i++) {
    186187                try {
    187                     nodes.add(createOrGetNode(ls.getPointN(i)));
     188                    lsNodes.add(createOrGetNode(ls.getPointN(i)));
    188189                } catch (TransformException | IllegalArgumentException e) {
    189190                    Logging.error("Exception for " + ls + ": " + e.getClass().getName() + ": " + e.getMessage());
    190191                }
    191192            }
    192             tempWay.setNodes(nodes);
     193            tempWay.setNodes(lsNodes);
    193194            // Find possible duplicated ways
    194195            if (tempWay.getNodesCount() > 0) {
  • applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/GeotoolsConverter.java

    r36076 r36173  
    276276
    277277    private static void readNonGeometricAttributes(Feature feature, OsmPrimitive primitive) {
    278         try {
    279             Collection<Property> properties = feature.getProperties();
    280             Map<String, String> tagMap = new LinkedHashMap<>(properties.size());
    281             for (Property prop : properties) {
    282                 if (!(prop instanceof GeometryAttribute)) {
    283                     Name name = prop.getName();
    284                     Object value = prop.getValue();
    285                     if (name != null && value != null) {
    286                         String sName = name.toString();
    287                         String sValue = value.toString();
    288                         if (value instanceof Date) {
    289                             sValue = new SimpleDateFormat("yyyy-MM-dd").format(value);
    290                         }
    291                         if (!sName.isEmpty() && !sValue.isEmpty()) {
    292                             tagMap.put(sName, sValue);
    293                             //primitive.put(sName, sValue);
    294                         }
    295                     }
    296                 }
    297             }
    298             primitive.putAll(tagMap);
    299         } catch (Exception e) {
    300             Logging.error(e);
    301         }
     278        Collection<Property> properties = feature.getProperties();
     279        Map<String, String> tagMap = new LinkedHashMap<>(properties.size());
     280        for (Property prop : properties) {
     281            if (!(prop instanceof GeometryAttribute)) {
     282                Name name = prop.getName();
     283                Object value = prop.getValue();
     284                if (name != null && value != null) {
     285                    String sName = name.toString();
     286                    String sValue = value.toString();
     287                    if (value instanceof Date) {
     288                        sValue = new SimpleDateFormat("yyyy-MM-dd").format(value);
     289                    }
     290                    if (!sName.isEmpty() && !sValue.isEmpty()) {
     291                        tagMap.put(sName, sValue);
     292                        //primitive.put(sName, sValue);
     293                    }
     294                }
     295            }
     296        }
     297        primitive.putAll(tagMap);
    302298    }
    303299}
  • applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/GeotoolsHandler.java

    r36025 r36173  
    5151        if (getCrsFor(sourceCRS.getName().getCode()) != null) {
    5252            return CRS.findMathTransform(getCrsFor(sourceCRS.getName().getCode()), targetCRS, lenient);
    53         } else if (sourceCRS instanceof AbstractDerivedCRS && sourceCRS.getName().getCode().equalsIgnoreCase("Lambert_Conformal_Conic")) {
     53        } else if (sourceCRS instanceof AbstractDerivedCRS && "Lambert_Conformal_Conic".equalsIgnoreCase(sourceCRS.getName().getCode())) {
    5454            List<MathTransform> result = new ArrayList<>();
    5555            AbstractDerivedCRS crs = (AbstractDerivedCRS) sourceCRS;
     
    9393                                        } catch (FactoryException e) {
    9494                                            Logging.error(e.getMessage());
     95                                            Logging.debug(e);
    9596                                        }
    9697                                    }
  • applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/GmlImporter.java

    r36072 r36173  
    44import static org.openstreetmap.josm.tools.I18n.tr;
    55
     6import java.io.IOException;
    67import java.io.InputStream;
     8
     9import javax.xml.stream.XMLStreamException;
    710
    811import org.openstreetmap.josm.actions.ExtensionFileFilter;
     
    2730        try {
    2831            return GmlReader.parseDataSet(in, handler, instance);
    29         } catch (Exception e) {
     32        } catch (IOException | XMLStreamException e) {
    3033            throw new IllegalDataException(e);
    3134        }
  • applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/GmlReader.java

    r36072 r36173  
    1818import org.opengis.geometry.MismatchedDimensionException;
    1919import org.opengis.referencing.FactoryException;
    20 import org.opengis.referencing.NoSuchAuthorityCodeException;
    2120import org.opengis.referencing.crs.CoordinateReferenceSystem;
    2221import org.opengis.referencing.operation.MathTransform;
     
    5554    private final GmlHandler gmlHandler;
    5655
    57     private XMLStreamReader parser;
     56    private final XMLStreamReader parser;
    5857
    5958    private int dim;
     
    8483        try {
    8584            return new GmlReader(parser, handler != null ? handler.getGmlHandler() : null).parseDoc(instance);
    86         } catch (Exception e) {
     85        } catch (XMLStreamException | GeoCrsException | FactoryException | GeoMathTransformException |
     86                 TransformException e) {
    8787            throw new IOException(e);
    8888        }
     
    110110    }
    111111
    112     private void findCRS(String srs) throws NoSuchAuthorityCodeException, FactoryException {
     112    private void findCRS(String srs) throws FactoryException {
    113113        Logging.info("Finding CRS for "+srs);
    114114        if (gmlHandler != null) {
     
    150150    UserCancelException, GeoMathTransformException, MismatchedDimensionException, TransformException {
    151151        Way way = null;
    152         Node node = null;
     152        Node node;
    153153        Map<String, StringBuilder> tags = new HashMap<>();
    154154        OsmPrimitive prim = null;
     
    195195                }
    196196            } else if (event == XMLStreamConstants.CHARACTERS && key != null) {
    197                 StringBuilder sb = tags.get(key);
    198                 if (sb == null) {
    199                     sb = new StringBuilder();
    200                     tags.put(key, sb);
    201                 }
     197                StringBuilder sb = tags.computeIfAbsent(key, k -> new StringBuilder());
    202198                sb.append(parser.getTextCharacters(), parser.getTextStart(), parser.getTextLength());
    203199            }
  • applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/KmlKmzImporter.java

    r36072 r36173  
    44import static org.openstreetmap.josm.tools.I18n.tr;
    55
     6import java.io.IOException;
    67import java.io.InputStream;
     8import java.util.Locale;
     9
     10import javax.xml.stream.XMLStreamException;
    711
    812import org.openstreetmap.josm.actions.ExtensionFileFilter;
     
    3034            throws IllegalDataException {
    3135        try {
    32             if (file != null && file.getName().toLowerCase().endsWith(OdConstants.KML_EXT)) {
     36            if (file != null && file.getName().toLowerCase(Locale.ROOT).endsWith(OdConstants.KML_EXT)) {
    3337                return KmlReader.parseDataSet(in, instance);
    3438            } else {
    3539                return KmzReader.parseDataSet(in, instance);
    3640            }
    37         } catch (Exception e) {
     41        } catch (IOException | XMLStreamException e) {
    3842            throw new IllegalDataException(e);
    3943        }
  • applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/KmlReader.java

    r36072 r36173  
    5454    // CHECKSTYLE.ON: SingleSpaceSeparator
    5555
    56     public static Pattern COLOR_PATTERN = Pattern.compile("\\p{XDigit}{8}");
    57 
    58     private XMLStreamReader parser;
    59     private Map<LatLon, Node> nodes = new HashMap<>();
     56    public static final Pattern COLOR_PATTERN = Pattern.compile("\\p{XDigit}{8}");
     57
     58    private final XMLStreamReader parser;
     59    private final Map<LatLon, Node> nodes = new HashMap<>();
    6060
    6161    public KmlReader(XMLStreamReader parser) {
     
    6565    public static DataSet parseDataSet(InputStream in, ProgressMonitor instance)
    6666            throws IOException, XMLStreamException, FactoryConfigurationError {
    67         InputStreamReader ir = UTFInputStreamReader.create(in);
    68         XMLStreamReader parser = XMLInputFactory.newInstance().createXMLStreamReader(ir);
    69         return new KmlReader(parser).parseDoc();
     67        try (InputStreamReader ir = UTFInputStreamReader.create(in)) {
     68            XMLStreamReader parser = XMLInputFactory.newInstance().createXMLStreamReader(ir);
     69            return new KmlReader(parser).parseDoc();
     70        }
    7071    }
    7172
     
    8081        while (parser.hasNext()) {
    8182            int event = parser.next();
    82             if (event == XMLStreamConstants.START_ELEMENT) {
    83                 if (parser.getLocalName().equals(KML_PLACEMARK)) {
    84                     parsePlaceMark(ds);
    85                 }
     83            if (event == XMLStreamConstants.START_ELEMENT && parser.getLocalName().equals(KML_PLACEMARK)) {
     84                parsePlaceMark(ds);
    8685            }
    8786        }
     
    129128                    }
    130129                } else if (parser.getLocalName().equals(KML_POLYGON)) {
    131                     ds.addPrimitive(relation = new Relation());
     130                    relation = new Relation();
     131                    ds.addPrimitive(relation);
    132132                    relation.put("type", "multipolygon");
    133133                    list.add(relation);
     
    138138                } else if (parser.getLocalName().equals(KML_LINEAR_RING)) {
    139139                    if (relation != null) {
    140                         ds.addPrimitive(way = new Way());
     140                        way = new Way();
     141                        ds.addPrimitive(way);
    141142                        wayNodes = new ArrayList<>();
    142143                        relation.addMember(new RelationMember(role, way));
     
    147148                    list.add(way);
    148149                } else if (parser.getLocalName().equals(KML_COORDINATES)) {
    149                     String[] tab = parser.getElementText().trim().split("\\s");
    150                     for (int i = 0; i < tab.length; i++) {
    151                         node = parseNode(ds, wayNodes, node, tab[i].split(","));
     150                    String[] tab = parser.getElementText().trim().split("\\s", Pattern.UNICODE_CHARACTER_CLASS);
     151                    for (String s : tab) {
     152                        node = parseNode(ds, wayNodes, node, s.split(","));
    152153                    }
    153154                } else if (parser.getLocalName().equals(KML_EXT_COORD)) {
    154                     node = parseNode(ds, wayNodes, node, parser.getElementText().trim().split("\\s"));
     155                    node = parseNode(ds, wayNodes, node, parser.getElementText().trim().split("\\s", Pattern.UNICODE_CHARACTER_CLASS));
    155156                    if (node != null && when > 0) {
    156157                        node.setRawTimestamp((int) when);
     
    158159                } else if (parser.getLocalName().equals(KML_WHEN)) {
    159160                    when = DateUtils.tsFromString(parser.getElementText().trim());
    160                 } else if (parser.getLocalName().equals(KML_EXT_LANG)) {
    161                     if (KML_NAME.equals(previousName)) {
    162                         tags.put(KML_NAME, parser.getElementText());
    163                     }
     161                } else if (parser.getLocalName().equals(KML_EXT_LANG) && KML_NAME.equals(previousName)) {
     162                    tags.put(KML_NAME, parser.getElementText());
    164163                }
    165164                previousName = parser.getLocalName();
     
    179178        }
    180179        for (OsmPrimitive p : list) {
    181             for (String key : tags.keySet()) {
    182                 p.put(key, tags.get(key));
    183             }
     180            p.putAll(tags);
    184181        }
    185182    }
     
    187184    private Node parseNode(DataSet ds, List<Node> wayNodes, Node node, String[] values) {
    188185        if (values.length >= 2) {
    189             LatLon ll = new LatLon(Double.valueOf(values[1]), Double.valueOf(values[0])).getRoundedToOsmPrecision();
    190             node = nodes.get(ll);
    191             if (node == null) {
    192                 ds.addPrimitive(node = new Node(ll));
    193                 nodes.put(ll, node);
    194                 if (values.length > 2 && !values[2].equals("0")) {
    195                     node.put("ele", values[2]);
     186            LatLon ll = new LatLon(Double.parseDouble(values[1]), Double.parseDouble(values[0])).getRoundedToOsmPrecision();
     187            node = nodes.computeIfAbsent(ll, latLon -> {
     188                Node tNode = new Node(latLon);
     189                ds.addPrimitive(tNode);
     190                if (values.length > 2 && !"0".equals(values[2])) {
     191                    tNode.put("ele", values[2]);
    196192                }
    197             }
     193                return tNode;
     194            });
    198195            if (wayNodes != null) {
    199196                wayNodes.add(node);
  • applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/KmzReader.java

    r36072 r36173  
    66import java.io.IOException;
    77import java.io.InputStream;
     8import java.util.Locale;
    89import java.util.zip.ZipEntry;
    910import java.util.zip.ZipInputStream;
     
    1516import org.openstreetmap.josm.gui.progress.ProgressMonitor;
    1617import org.openstreetmap.josm.io.AbstractReader;
    17 import org.openstreetmap.josm.io.IllegalDataException;
    1818import org.openstreetmap.josm.tools.Logging;
    1919
    20 public class KmzReader extends AbstractReader {
     20/**
     21 * Read kmz files
     22 */
     23public final class KmzReader extends AbstractReader {
    2124
    22     private ZipInputStream zis;
     25    private final ZipInputStream zis;
    2326
    24     public KmzReader(ZipInputStream zis) {
     27    /**
     28     * Create a new {@link KmzReader}
     29     * @param zis The stream to read
     30     */
     31    KmzReader(ZipInputStream zis) {
    2532        this.zis = zis;
    2633    }
    2734
     35    /**
     36     * Parse a dataset from a stream
     37     * @param in The stream to read
     38     * @param instance The progress monitor to update
     39     * @return The dataset
     40     * @throws IOException If there was an issue reading the stream
     41     * @throws XMLStreamException If there was an issue with the XML
     42     * @throws FactoryConfigurationError If there was an issue with creating the xml factory
     43     */
    2844    public static DataSet parseDataSet(InputStream in, ProgressMonitor instance)
    2945            throws IOException, XMLStreamException, FactoryConfigurationError {
     
    3349    @Override
    3450    protected DataSet doParseDataSet(InputStream source,
    35             ProgressMonitor progressMonitor) throws IllegalDataException {
     51            ProgressMonitor progressMonitor) {
    3652        return null;
    3753    }
     
    4561                return null;
    4662            }
    47         } while (!entry.getName().toLowerCase().endsWith(".kml"));
     63        } while (!entry.getName().toLowerCase(Locale.ROOT).endsWith(".kml"));
    4864        long size = entry.getSize();
    4965        byte[] buffer;
     
    5167            buffer = new byte[(int) size];
    5268            int off = 0;
    53             int count = 0;
     69            int count;
    5470            while ((count = zis.read(buffer, off, (int) size)) > 0) {
    5571                off += count;
  • applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/MifReader.java

    r36092 r36173  
    1616import java.nio.charset.Charset;
    1717import java.util.Arrays;
     18import java.util.Locale;
    1819
    1920import org.openstreetmap.josm.data.coor.EastNorth;
     
    2930import org.openstreetmap.josm.data.projection.Projections;
    3031import org.openstreetmap.josm.gui.progress.NullProgressMonitor;
    31 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
    3232import org.openstreetmap.josm.plugins.opendata.core.OdConstants;
    3333import org.openstreetmap.josm.plugins.opendata.core.datasets.AbstractDataSetHandler;
     
    6060    private File file;
    6161    private InputStream stream;
    62     private Charset charset;
    6362    private BufferedReader midReader;
    6463
     
    7170    private Relation region;
    7271    private Way polygon;
    73     private Node node;
    7472    private Way polyline;
    7573
    7674    // CoordSys clause
    7775    private String units;
    78     private Double originLon;
    79     private Double originLat;
    80     private Double stdP1;
    81     private Double stdP2;
    82     private Double scaleFactor;
    83     private Double falseEasting;
    84     private Double falseNorthing;
    85     private Double minx;
    86     private Double miny;
    87     private Double maxx;
    88     private Double maxy;
     76    private double originLon = Double.NaN;
     77    private double originLat = Double.NaN;
     78    private double stdP1 = Double.NaN;
     79    private double stdP2 = Double.NaN;
     80    private double scaleFactor = Double.NaN;
     81    private double falseEasting = Double.NaN;
     82    private double falseNorthing = Double.NaN;
     83    private double minx = Double.NaN;
     84    private double miny = Double.NaN;
     85    private double maxx = Double.NaN;
     86    private double maxy = Double.NaN;
    8987
    9088    // Region clause
     
    10098
    10199    public static DataSet parseDataSet(InputStream in, File file,
    102             AbstractDataSetHandler handler, ProgressMonitor instance) throws IOException {
    103         return new MifReader(handler).parse(in, file, instance, Charset.forName(OdConstants.ISO8859_15));
     100            AbstractDataSetHandler handler) throws IOException {
     101        return new MifReader(handler).parse(in, file, Charset.forName(OdConstants.ISO8859_15));
    104102    }
    105103
     
    108106    }
    109107
    110     private void parseUnique(String[] words) {
     108    private void parseUnique() {
    111109        // TODO
    112110        Logging.warn("TODO Unique: "+line);
    113111    }
    114112
    115     private void parseIndex(String[] words) {
     113    private void parseIndex() {
    116114        // TODO
    117115        Logging.warn("TODO Index: "+line);
     
    282280                        if (equals(originLat, 42.0+i) && equals(stdP1, 41.25+i) && equals(stdP2, 42.75+i)
    283281                                && equals(falseNorthing, (i+1)*1000000.0 + 200000.0)) {
    284                             josmProj = Projections.getProjectionByCode("EPSG:"+Integer.toString(3942 + i)); // LambertCC9Zones
     282                            josmProj = Projections.getProjectionByCode("EPSG:"+ (3942 + i)); // LambertCC9Zones
    285283                        }
    286284                    }
     
    293291
    294292        // TODO: handle cases with Affine declaration
    295         int index = parseAffineUnits(words);
     293        int index = parseAffineUnits();
    296294
    297295        // handle cases with Bounds declaration
     
    307305    private void parseCoordSysSyntax2(String[] words) {
    308306        // handle cases with Affine declaration
    309         int index = parseAffineUnits(words);
     307        int index = parseAffineUnits();
    310308
    311309        units = words[index+1];
     
    314312    }
    315313
    316     private int parseAffineUnits(String[] words) {
     314    private int parseAffineUnits() {
    317315        // TODO: handle affine units
    318         return 2+0;
     316        return 2;
    319317    }
    320318
     
    322320        if (index < words.length && "Bounds".equals(words[index])) {
    323321            // Useless parenthesis... "(minx, miny) (maxx, maxy)"
    324             minx = Double.valueOf(words[index+1].substring(1));
    325             miny = Double.valueOf(words[index+2].substring(0, words[index+2].length()-1));
    326             maxx = Double.valueOf(words[index+3].substring(1));
    327             maxy = Double.valueOf(words[index+4].substring(0, words[index+4].length()-1));
     322            minx = Double.parseDouble(words[index+1].substring(1));
     323            miny = Double.parseDouble(words[index+2].substring(0, words[index+2].length()-1));
     324            maxx = Double.parseDouble(words[index+3].substring(1));
     325            maxy = Double.parseDouble(words[index+4].substring(0, words[index+4].length()-1));
    328326            if (Logging.isTraceEnabled()) {
    329327                Logging.trace(Arrays.toString(words) + " -> "+minx+","+miny+","+maxx+","+maxy);
     
    336334            words[i] = words[i].replace(",", "");
    337335        }
    338         switch (words[1].toLowerCase()) {
     336        switch (words[1].toLowerCase(Locale.ROOT)) {
    339337        case "earth":
    340338            parseCoordSysSyntax1(words);
     
    369367    }
    370368
    371     private void parseTransform(String[] words) {
     369    private void parseTransform() {
    372370        // TODO
    373371        Logging.warn("TODO Transform: "+line);
     
    380378    }
    381379
    382     private void parseData(String[] words) {
     380    private void parseData() {
    383381        if (dataSet == null) {
    384382            dataSet = new DataSet();
     
    439437    }
    440438
    441     private void parseArc(String[] words) {
     439    private void parseArc() {
    442440        // TODO
    443441        Logging.warn("TODO Arc: "+line);
    444442    }
    445443
    446     private void parseText(String[] words) {
     444    private void parseText() {
    447445        // TODO
    448446        Logging.warn("TODO Text: "+line);
    449447    }
    450448
    451     private void parseRect(String[] words) {
     449    private void parseRect() {
    452450        // TODO
    453451        Logging.warn("TODO Rect: "+line);
    454452    }
    455453
    456     private void parseRoundRect(String[] words) {
     454    private void parseRoundRect() {
    457455        // TODO
    458456        Logging.warn("TODO RoundRect: "+line);
    459457    }
    460458
    461     private void parseEllipse(String[] words) {
     459    private void parseEllipse() {
    462460        // TODO
    463461        Logging.warn("TODO Ellipse: "+line);
     
    466464    private void initializeReaders(InputStream in, File f, Charset cs, int bufSize) throws IOException {
    467465        stream = in;
    468         charset = cs;
    469466        file = f;
    470467        Reader isr;
    471468        // Did you know ? new InputStreamReader(in, charset) has a non-configurable buffer of 8kb :(
    472469        if (bufSize < 8192) {
    473             isr = new InputStreamReaderUnbuffered(in, charset);
     470            isr = new InputStreamReaderUnbuffered(in, cs);
    474471        } else {
    475             isr = new InputStreamReader(in, charset);
     472            isr = new InputStreamReader(in, cs);
    476473        }
    477474        headerReader = new BufferedReader(isr, bufSize);
     
    479476            midReader.close();
    480477        }
    481         midReader = getDataReader(file, ".mid", charset);
    482     }
    483 
    484     private DataSet parse(InputStream in, File file, ProgressMonitor instance, Charset cs) throws IOException {
     478        midReader = getDataReader(file, ".mid", cs);
     479    }
     480
     481    private DataSet parse(InputStream in, File file, Charset cs) throws IOException {
    485482        try {
    486483            try {
     
    501498    @Override
    502499    protected void parseHeaderLine(String[] words) throws IOException {
    503         if (words[0].equalsIgnoreCase("Version")) {
     500        if ("Version".equalsIgnoreCase(words[0])) {
    504501            parseVersion(words);
    505         } else if (words[0].equalsIgnoreCase("Charset")) {
     502        } else if ("Charset".equalsIgnoreCase(words[0])) {
    506503            // Reinitialize readers with an efficient buffer value now we know for sure the good charset
    507504            initializeReaders(stream, file, parseCharset(words), 8192);
    508         } else if (words[0].equalsIgnoreCase("Delimiter")) {
     505        } else if ("Delimiter".equalsIgnoreCase(words[0])) {
    509506            parseDelimiter(words);
    510         } else if (words[0].equalsIgnoreCase("Unique")) {
    511             parseUnique(words);
    512         } else if (words[0].equalsIgnoreCase("Index")) {
    513             parseIndex(words);
    514         } else if (words[0].equalsIgnoreCase("CoordSys")) {
     507        } else if ("Unique".equalsIgnoreCase(words[0])) {
     508            parseUnique();
     509        } else if ("Index".equalsIgnoreCase(words[0])) {
     510            parseIndex();
     511        } else if ("CoordSys".equalsIgnoreCase(words[0])) {
    515512            parseCoordSys(words);
    516         } else if (words[0].equalsIgnoreCase("Transform")) {
    517             parseTransform(words);
    518         } else if (words[0].equalsIgnoreCase("Columns")) {
     513        } else if ("Transform".equalsIgnoreCase(words[0])) {
     514            parseTransform();
     515        } else if ("Columns".equalsIgnoreCase(words[0])) {
    519516            parseColumns(words);
    520         } else if (words[0].equalsIgnoreCase("Data")) {
    521             parseData(words);
     517        } else if ("Data".equalsIgnoreCase(words[0])) {
     518            parseData();
    522519        } else if (dataSet != null) {
    523520            if (state == State.START_POLYGON) {
     
    538535            } else if (state == State.READING_POINTS && numpts > 0) {
    539536                if (josmProj != null) {
    540                     node = createNode(words[0], words[1]);
     537                    Node node = createNode(words[0], words[1]);
    541538                    if (polygon != null) {
    542539                        polygon.addNode(node);
     
    547544                if (--numpts == 0) {
    548545                    if (numpolygons > -1) {
    549                         if (!polygon.isClosed()) {
     546                        if (polygon != null && !polygon.isClosed()) {
    550547                            polygon.addNode(polygon.firstNode());
    551548                        }
     
    565562                    }
    566563                }
    567             } else if (words[0].equalsIgnoreCase("Point")) {
     564            } else if ("Point".equalsIgnoreCase(words[0])) {
    568565                parsePoint(words);
    569             } else if (words[0].equalsIgnoreCase("Line")) {
     566            } else if ("Line".equalsIgnoreCase(words[0])) {
    570567                parseLine(words);
    571             } else if (words[0].equalsIgnoreCase("PLine")) {
     568            } else if ("PLine".equalsIgnoreCase(words[0])) {
    572569                parsePLine(words);
    573             } else if (words[0].equalsIgnoreCase("Region")) {
     570            } else if ("Region".equalsIgnoreCase(words[0])) {
    574571                parseRegion(words);
    575             } else if (words[0].equalsIgnoreCase("Arc")) {
    576                 parseArc(words);
    577             } else if (words[0].equalsIgnoreCase("Text")) {
    578                 parseText(words);
    579             } else if (words[0].equalsIgnoreCase("Rect")) {
    580                 parseRect(words);
    581             } else if (words[0].equalsIgnoreCase("RoundRect")) {
    582                 parseRoundRect(words);
    583             } else if (words[0].equalsIgnoreCase("Ellipse")) {
    584                 parseEllipse(words);
    585             } else if (words[0].equalsIgnoreCase("Pen")) {
    586                 // Do nothing
    587             } else if (words[0].equalsIgnoreCase("Brush")) {
    588                 // Do nothing
    589             } else if (words[0].equalsIgnoreCase("Center")) {
    590                 // Do nothing
    591             } else if (words[0].equalsIgnoreCase("Symbol")) {
    592                 // Do nothing
    593             } else if (words[0].equalsIgnoreCase("Font")) {
    594                 // Do nothing
    595             } else if (!words[0].isEmpty()) {
     572            } else if ("Arc".equalsIgnoreCase(words[0])) {
     573                parseArc();
     574            } else if ("Text".equalsIgnoreCase(words[0])) {
     575                parseText();
     576            } else if ("Rect".equalsIgnoreCase(words[0])) {
     577                parseRect();
     578            } else if ("RoundRect".equalsIgnoreCase(words[0])) {
     579                parseRoundRect();
     580            } else if ("Ellipse".equalsIgnoreCase(words[0])) {
     581                parseEllipse();
     582            } else if (!"Pen".equalsIgnoreCase(words[0])
     583                    && !"Brush".equalsIgnoreCase(words[0])
     584                    && !"Center".equalsIgnoreCase(words[0])
     585                    && !"Symbol".equalsIgnoreCase(words[0])
     586                    && !"Font".equalsIgnoreCase(words[0])
     587                    && !words[0].isEmpty()) {
     588                // Pen, Brush, Center, Symbol, and Font we currently ignore
    596589                Logging.warn("Line "+lineNum+". Unknown clause in data section: "+line);
    597590            }
     
    628621
    629622    private Node createNode(String x, String y) {
    630         Node node = new Node(josmProj.eastNorth2latlon(new EastNorth(Double.parseDouble(x), Double.parseDouble(y))));
    631         dataSet.addPrimitive(node);
    632         return node;
     623        Node newNode = new Node(josmProj.eastNorth2latlon(new EastNorth(Double.parseDouble(x), Double.parseDouble(y))));
     624        dataSet.addPrimitive(newNode);
     625        return newNode;
    633626    }
    634627
     
    639632     * @return {@code true} if {@code a} and {@code b} are equals
    640633     */
    641     public static boolean equals(Double a, Double b) {
     634    public static boolean equals(double a, double b) {
    642635        if (a == b) return true;
    643636        // If the difference is less than epsilon, treat as equal.
  • applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/MifTabImporter.java

    r36072 r36173  
    66import java.io.IOException;
    77import java.io.InputStream;
     8import java.util.Locale;
    89
    910import org.openstreetmap.josm.actions.ExtensionFileFilter;
     
    3132            throws IllegalDataException {
    3233        try {
    33             if (file != null && file.getName().toLowerCase().endsWith(OdConstants.MIF_EXT)) {
    34                 return MifReader.parseDataSet(in, file, handler, instance);
     34            if (file != null && file.getName().toLowerCase(Locale.ROOT).endsWith(OdConstants.MIF_EXT)) {
     35                return MifReader.parseDataSet(in, file, handler);
    3536            } else {
    3637                return TabReader.parseDataSet(in, file, handler, instance);
  • applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/ShpReader.java

    r36072 r36173  
    2525import org.locationtech.jts.geom.Point;
    2626import org.opengis.geometry.MismatchedDimensionException;
     27import org.opengis.referencing.FactoryException;
    2728import org.opengis.referencing.operation.TransformException;
    2829import org.openstreetmap.josm.data.osm.DataSet;
     
    112113            Logging.error(e);
    113114            throw e;
    114         } catch (Exception e) {
     115        } catch (FactoryException | GeoMathTransformException | TransformException | GeoCrsException e) {
    115116            Logging.error(e);
    116117            throw new IOException(e);
  • applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/TabFiles.java

    r36092 r36173  
    55
    66import java.io.File;
    7 import java.io.FilenameFilter;
    87import java.lang.reflect.Field;
    98import java.net.MalformedURLException;
    109import java.net.URL;
    11 import java.util.HashMap;
     10import java.util.EnumMap;
     11import java.util.Locale;
    1212import java.util.Map;
    1313import java.util.Map.Entry;
     
    5757    }
    5858
    59     private String baseName(Object obj) {
     59    private static String baseName(Object obj) {
    6060        if (obj instanceof URL) {
    6161            return toBase(((URL) obj).toExternalForm());
     
    6464    }
    6565
    66     private String toBase(String path) {
    67         return path.substring(0, path.toLowerCase().lastIndexOf(".tab"));
     66    private static String toBase(String path) {
     67        return path.substring(0, path.toLowerCase(Locale.ROOT).lastIndexOf(".tab"));
    6868    }
    6969
     
    8686            String extensionWithPeriod = type.extensionWithPeriod;
    8787            if (upperCase) {
    88                 extensionWithPeriod = extensionWithPeriod.toUpperCase();
     88                extensionWithPeriod = extensionWithPeriod.toUpperCase(Locale.ROOT);
    8989            } else {
    90                 extensionWithPeriod = extensionWithPeriod.toLowerCase();
     90                extensionWithPeriod = extensionWithPeriod.toLowerCase(Locale.ROOT);
    9191            }
    9292
     
    9797            } catch (MalformedURLException e) {
    9898                // shouldn't happen because the starting url was constructable
    99                 throw new RuntimeException(e);
     99                throw new JosmRuntimeException(e);
    100100            }
    101101            urls.put(type, newURL);
     
    108108        if (isLocal()) {
    109109            Set<Entry<ShpFileType, URL>> entries = urls.entrySet();
    110             Map<ShpFileType, URL> toUpdate = new HashMap<>();
     110            Map<ShpFileType, URL> toUpdate = new EnumMap<>(ShpFileType.class);
    111111            for (Entry<ShpFileType, URL> entry : entries) {
    112112                if (!exists(entry.getKey())) {
     
    121121    }
    122122
    123     private URL findExistingFile(URL value) {
     123    private static URL findExistingFile(URL value) {
    124124        final File file = URLs.urlToFile(value);
    125125        File directory = file.getParentFile();
    126126        if (directory != null && directory.exists()) {
    127             File[] files = directory.listFiles((FilenameFilter) (dir, name) -> file.getName().equalsIgnoreCase(name));
    128             if (files.length > 0) {
     127            File[] files = directory.listFiles((dir, name) -> file.getName().equalsIgnoreCase(name));
     128            if (files != null && files.length > 0) {
    129129                try {
    130130                    return files[0].toURI().toURL();
  • applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/TabReader.java

    r36072 r36173  
    8484        } catch (IOException e) {
    8585            Logging.error(e.getMessage());
     86            Logging.debug(e);
    8687        }
    8788        return ds;
     
    9091    @Override
    9192    protected void parseHeaderLine(String[] words) throws IOException {
    92         if (words[0].equalsIgnoreCase("!table")) {
     93        if ("!table".equalsIgnoreCase(words[0])) {
    9394            // Do nothing
    94         } else if (words[0].equalsIgnoreCase("!version")) {
     95        } else if ("!version".equalsIgnoreCase(words[0])) {
    9596            parseVersion(words);
    96         } else if (words[0].equalsIgnoreCase("!charset")) {
     97        } else if ("!charset".equalsIgnoreCase(words[0])) {
    9798            parseCharset(words);
    9899        } else if (numcolumns > 0) {
    99100            parseField(words);
    100         } else if (words[0].equalsIgnoreCase("Definition")) {
     101        } else if ("Definition".equalsIgnoreCase(words[0])) {
    101102            // Do nothing
    102         } else if (words[0].equalsIgnoreCase("Type")) {
     103        } else if ("Type".equalsIgnoreCase(words[0])) {
    103104            parseType(words);
    104         } else if (words[0].equalsIgnoreCase("Fields")) {
     105        } else if ("Fields".equalsIgnoreCase(words[0])) {
    105106            parseColumns(words);
    106107        } else if (!line.isEmpty()) {
     
    115116
    116117    private void parseType(String[] words) throws IllegalCharsetNameException, UnsupportedCharsetException {
    117         if (words[1].equalsIgnoreCase("NATIVE") && words[2].equalsIgnoreCase("Charset")) {
     118        if ("NATIVE".equalsIgnoreCase(words[1]) && "Charset".equalsIgnoreCase(words[2])) {
    118119            datCharset = parseCharset(words, 3);
    119120        } else {
  • applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/tabular/CsvReader.java

    r36072 r36173  
    77import java.io.InputStreamReader;
    88import java.nio.charset.Charset;
     9import java.nio.charset.StandardCharsets;
    910
    1011import org.openstreetmap.josm.data.osm.DataSet;
    1112import org.openstreetmap.josm.gui.progress.ProgressMonitor;
    1213import org.openstreetmap.josm.io.IllegalDataException;
    13 import org.openstreetmap.josm.plugins.opendata.core.OdConstants;
    1414import org.openstreetmap.josm.plugins.opendata.core.datasets.AbstractDataSetHandler;
    1515import org.openstreetmap.josm.plugins.opendata.core.util.OdUtils;
     
    3030    public CsvReader(CsvHandler handler, String defaultSep) {
    3131        super(handler);
    32         this.charset = handler != null && handler.getCharset() != null ? handler.getCharset() : Charset.forName(OdConstants.UTF8);
     32        this.charset = handler != null && handler.getCharset() != null ? handler.getCharset() : StandardCharsets.UTF_8;
    3333        this.sep = handler != null && handler.getSeparator() != null ? handler.getSeparator() : defaultSep;
    3434    }
  • applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/tabular/DefaultCsvHandler.java

    r36072 r36173  
    66public class DefaultCsvHandler extends DefaultSpreadSheetHandler implements CsvHandler {
    77
    8     private Charset charset = null;
    9     private String separator = null;
     8    private Charset charset;
     9    private String separator;
    1010   
    1111    @Override
  • applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/tabular/DefaultSpreadSheetHandler.java

    r36072 r36173  
    1414    private int sheetNumber = -1;
    1515    private int lineNumber = -1;
    16     private boolean handlesProjection = false;
     16    private boolean handlesProjection;
    1717   
    1818    private int xCol = -1;
  • applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/tabular/OdsDocument.java

    r36072 r36173  
    2525    }
    2626
    27     private InputSource getEntryInputSource(ZipInputStream zis) throws IOException {
     27    private static InputSource getEntryInputSource(ZipInputStream zis) throws IOException {
    2828        int n;
    2929        final byte[] buffer = new byte[4096];
     
    4646
    4747            while (!contentParsed && (entry = zis.getNextEntry()) != null) {
    48                 if (entry.getName().equals("content.xml")) {
     48                if ("content.xml".equals(entry.getName())) {
    4949                    rdr.setContentHandler(contentHandler);
    5050                    Logging.info("Parsing content.xml");
  • applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/tabular/SpreadSheetReader.java

    r36072 r36173  
    3636    private static final NumberFormat formatUK = NumberFormat.getInstance(Locale.UK);
    3737
    38     private static final String COOR = "(\\-?\\d+(?:[\\.,]\\d+)?)";
     38    private static final String COOR = "(-?\\d+(?:[.,]\\d+)?)";
    3939    // Lat/lon pattern with optional altitude and precision
    4040    private static final Pattern LATLON_PATTERN = Pattern.compile(
     
    4343    protected final SpreadSheetHandler handler;
    4444
    45     public SpreadSheetReader(SpreadSheetHandler handler) {
     45    protected SpreadSheetReader(SpreadSheetHandler handler) {
    4646        this.handler = handler;
    4747    }
     
    6868
    6969    public static class CoordinateColumns {
    70         public Projection proj = null;
     70        public Projection proj;
    7171        public int xCol = -1;
    7272        public int yCol = -1;
     
    8181    }
    8282
    83     private CoordinateColumns addCoorColIfNeeded(List<CoordinateColumns> columns, CoordinateColumns col) {
     83    private static CoordinateColumns addCoorColIfNeeded(List<CoordinateColumns> columns, CoordinateColumns col) {
    8484        if (col == null || col.isOk()) {
    85             columns.add(col = new CoordinateColumns());
     85            col = new CoordinateColumns();
     86            columns.add(col);
    8687        }
    8788        return col;
     
    101102        for (int i = 0; i < header.length; i++) {
    102103            for (ProjectionPatterns pp : OdConstants.PROJECTIONS) {
    103                 List<CoordinateColumns> columns = projColumns.get(pp);
    104                 if (columns == null) {
    105                     projColumns.put(pp, columns = new ArrayList<>());
    106                 }
     104                List<CoordinateColumns> columns = projColumns.computeIfAbsent(pp, k -> new ArrayList<>());
    107105                CoordinateColumns col = columns.isEmpty() ? null : columns.get(columns.size()-1);
    108106                if (pp.getXYPattern().matcher(header[i]).matches()) {
     
    123121        final List<CoordinateColumns> columns = new ArrayList<>();
    124122
    125         for (ProjectionPatterns pp : projColumns.keySet()) {
    126             for (CoordinateColumns col : projColumns.get(pp)) {
     123        for (Map.Entry<ProjectionPatterns, List<SpreadSheetReader.CoordinateColumns>> entry : projColumns.entrySet()) {
     124            for (CoordinateColumns col : entry.getValue()) {
    127125                if (col.isOk()) {
    128126                    columns.add(col);
    129127                    if (col.proj == null) {
    130                         col.proj = pp.getProjection(header[col.xCol], header[col.yCol]);
     128                        col.proj = entry.getKey().getProjection(header[col.xCol], header[col.yCol]);
    131129                    }
    132130                }
     
    166164        }
    167165
    168         String message = "";
     166        StringBuilder message = new StringBuilder();
    169167        for (CoordinateColumns c : columns) {
    170             if (!message.isEmpty()) {
    171                 message += "; ";
    172             }
    173             message += c.proj + "("+header[c.xCol]+", "+header[c.yCol]+")";
     168            if (message.length() != 0) {
     169                message.append("; ");
     170            }
     171            message.append(c.proj).append('(').append(header[c.xCol]).append(", ").append(header[c.yCol]).append(')');
    174172        }
    175173
     
    229227                        }
    230228                    }
    231                     if (!coordinate) {
    232                         if (!fields[i].isEmpty()) {
    233                             for (Node n : nodes.values()) {
    234                                 n.put(header[i], fields[i]);
    235                             }
     229                    if (!coordinate && !fields[i].isEmpty()) {
     230                        for (Node n : nodes.values()) {
     231                            n.put(header[i], fields[i]);
    236232                        }
    237233                    }
  • applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/tabular/XlsReader.java

    r36072 r36173  
    2222public class XlsReader extends SpreadSheetReader {
    2323
    24     private Workbook wb;
    2524    private Sheet sheet;
    2625    private int rowIndex;
     
    3938        Logging.info("Parsing XLS file");
    4039        try {
    41             wb = new HSSFWorkbook(new POIFSFileSystem(in));
     40            Workbook wb = new HSSFWorkbook(new POIFSFileSystem(in));
    4241            sheet = wb.getSheetAt(getSheetNumber());
    4342            rowIndex = 0;
  • applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/layers/OdDataLayer.java

    r36072 r36173  
    66import java.io.File;
    77import java.util.ArrayList;
     8import java.util.Arrays;
    89import java.util.Collection;
    910import java.util.List;
     
    120121    @Override
    121122    public Action[] getMenuEntries() {
    122         List<Action> result = new ArrayList<>();
    123         for (Action entry : super.getMenuEntries()) {
    124             result.add(entry);
    125         }
     123        List<Action> result = new ArrayList<>(Arrays.asList(super.getMenuEntries()));
    126124        if (this.handler != null) {
    127125            if (this.handler.getWikiURL() != null || this.handler.getLocalPortalURL() != null || this.handler.getNationalPortalURL() != null) {
  • applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/licenses/License.java

    r36092 r36173  
    55import java.net.URL;
    66import java.util.HashMap;
    7 import java.util.Iterator;
    87import java.util.Map;
    98
     
    2524        // Find URL for current language
    2625        String lang = OdUtils.getJosmLanguage();
    27         for (String l : map.keySet()) {
    28             if (lang.startsWith(l)) {
    29                 return map.get(l);
     26        for (Map.Entry<String, URL> entry : map.entrySet()) {
     27            if (lang.startsWith(entry.getKey())) {
     28                return entry.getValue();
    3029            }
    3130        }
     
    3635        }
    3736        // If not found, return first non-null url
    38         if (map.keySet().size() > 0) {
    39             for (Iterator<String> it = map.keySet().iterator(); it.hasNext();) {
    40                 url = map.get(it.next());
    41                 if (url != null) {
    42                     return url;
    43                 }
     37        if (!map.keySet().isEmpty()) {
     38            for (URL entryUrl : map.values()) {
     39                return entryUrl;
    4440            }
    4541        }
  • applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/modules/AbstractModule.java

    r36072 r36173  
    77import java.io.InputStream;
    88import java.util.ArrayList;
    9 import java.util.Collection;
    109import java.util.List;
     10import java.util.Objects;
    1111
    1212import org.openstreetmap.josm.data.preferences.sources.ExtendedSourceEntry;
     
    1818import org.openstreetmap.josm.tools.Logging;
    1919
     20/**
     21 * A common {@link Module} base implementation
     22 */
    2023public abstract class AbstractModule implements Module {
    2124
    2225    protected final List<Class<? extends AbstractDataSetHandler>> handlers = new ArrayList<>();
    2326
    24     private final List<AbstractDataSetHandler> instanciatedHandlers = new ArrayList<>();
     27    private final List<AbstractDataSetHandler> instantiatedHandlers = new ArrayList<>();
    2528
    2629    protected final ModuleInformation info;
    2730
    28     public AbstractModule(ModuleInformation info) {
     31    protected AbstractModule(ModuleInformation info) {
    2932        this.info = info;
    3033    }
     
    4851    public SourceProvider getMapPaintStyleSourceProvider() {
    4952        final List<SourceEntry> sources = new ArrayList<>();
    50         for (AbstractDataSetHandler handler : getInstanciatedHandlers()) {
     53        for (AbstractDataSetHandler handler : getInstantiatedHandlers()) {
    5154            ExtendedSourceEntry src;
    5255            if (handler != null && (src = handler.getMapPaintStyle()) != null) {
     
    5659                        + src.url.replace(OdConstants.PROTO_RSRC, "").replace('/', File.separatorChar);
    5760
    58                 int n = 0;
     61                int n;
    5962                byte[] buffer = new byte[4096];
    6063                try (InputStream in = getClass().getResourceAsStream(
    6164                        src.url.substring(OdConstants.PROTO_RSRC.length()-1));
    6265                     FileOutputStream out = new FileOutputStream(path)) {
     66                    Objects.requireNonNull(in);
    6367                    String dir = path.substring(0, path.lastIndexOf(File.separatorChar));
    6468                    if (new File(dir).mkdirs() && Logging.isDebugEnabled()) {
     
    7276                    sources.add(src);
    7377                } catch (IOException e) {
    74                     Logging.error(e.getMessage());
     78                    Logging.error(e);
    7579                }
    7680            }
    7781        }
    78         return sources.isEmpty() ? null : new SourceProvider() {
    79             @Override
    80             public Collection<SourceEntry> getSources() {
    81                 return sources;
    82             }
    83         };
     82        return sources.isEmpty() ? null : () -> sources;
    8483    }
    8584
     
    8786    public SourceProvider getPresetSourceProvider() {
    8887        final List<SourceEntry> sources = new ArrayList<>();
    89         for (AbstractDataSetHandler handler : getInstanciatedHandlers()) {
     88        for (AbstractDataSetHandler handler : getInstantiatedHandlers()) {
    9089            if (handler != null && handler.getTaggingPreset() != null) {
    9190                sources.add(handler.getTaggingPreset());
    9291            }
    9392        }
    94         return sources.isEmpty() ? null : new SourceProvider() {
    95             @Override
    96             public Collection<SourceEntry> getSources() {
    97                 return sources;
    98             }
    99         };
     93        return sources.isEmpty() ? null : () -> sources;
    10094    }
    10195
     
    115109    }
    116110
    117     private List<AbstractDataSetHandler> getInstanciatedHandlers() {
    118         if (instanciatedHandlers.isEmpty()) {
    119             instanciatedHandlers.addAll(getNewlyInstanciatedHandlers());
     111    private List<AbstractDataSetHandler> getInstantiatedHandlers() {
     112        if (instantiatedHandlers.isEmpty()) {
     113            instantiatedHandlers.addAll(getNewlyInstanciatedHandlers());
    120114        }
    121         return instanciatedHandlers;
     115        return instantiatedHandlers;
    122116    }
    123117}
  • applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/modules/ModuleDownloadTask.java

    r36072 r36173  
    3737    private final Collection<ModuleInformation> failed = new LinkedList<>();
    3838    private final Collection<ModuleInformation> downloaded = new LinkedList<>();
    39     //private Exception lastException;
    4039    private boolean canceled;
    4140    private HttpURLConnection downloadConnection;
     
    134133    @Override protected void realRun() throws SAXException, IOException {
    135134        File moduleDir = OdPlugin.getInstance().getModulesDirectory();
    136         if (!moduleDir.exists()) {
    137             if (!moduleDir.mkdirs()) {
    138                 //lastException = new ModuleDownloadException(tr("Failed to create module directory ''{0}''", moduleDir.toString()));
    139                 failed.addAll(toUpdate);
    140                 return;
    141             }
     135        if (!moduleDir.exists() && !moduleDir.mkdirs()) {
     136            failed.addAll(toUpdate);
     137            return;
    142138        }
    143139        getProgressMonitor().setTicksCount(toUpdate.size());
     
    150146                download(d, moduleFile);
    151147            } catch (ModuleDownloadException e) {
    152                 e.printStackTrace();
     148                Logging.error(e);
    153149                failed.add(d);
    154150                continue;
  • applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/modules/ModuleHandler.java

    r36072 r36173  
    1111import java.awt.Insets;
    1212import java.io.File;
    13 import java.io.FilenameFilter;
    1413import java.net.URL;
    1514import java.net.URLClassLoader;
     
    2322import java.util.LinkedList;
    2423import java.util.List;
     24import java.util.Locale;
    2525import java.util.Map;
    2626import java.util.Set;
     
    7676            sources.add(ModuleHandler.class.getClassLoader());
    7777        } catch (SecurityException ex) {
     78            Logging.trace(ex);
    7879            sources.add(ImageProvider.class.getClassLoader());
    7980        }
     
    103104        long tim = System.currentTimeMillis();
    104105        long last = Config.getPref().getLong("opendata.modulemanager.lastupdate", 0);
    105         Integer maxTime = Config.getPref().getInt("opendata.modulemanager.time-based-update.interval", 60);
     106        int maxTime = Config.getPref().getInt("opendata.modulemanager.time-based-update.interval", 60);
    106107        long d = (tim - last) / (24 * 60 * 60 * 1000L);
    107108        if ((last <= 0) || (maxTime <= 0)) {
     
    138139        //
    139140        String policy = Config.getPref().get(togglePreferenceKey, "ask");
    140         policy = policy.trim().toLowerCase();
    141         if (policy.equals("never")) {
     141        policy = policy.trim().toLowerCase(Locale.ROOT);
     142        if ("never".equals(policy)) {
    142143            if ("opendata.modulemanager.time-based-update.policy".equals(togglePreferenceKey)) {
    143144                Logging.info(tr("Skipping module update after elapsed update interval. Automatic update at startup is disabled."));
     
    146147        }
    147148
    148         if (policy.equals("always")) {
     149        if ("always".equals(policy)) {
    149150            if ("opendata.modulemanager.time-based-update.policy".equals(togglePreferenceKey)) {
    150151                Logging.info(tr("Running module update after elapsed update interval. Automatic update at startup is disabled."));
     
    153154        }
    154155
    155         if (!policy.equals("ask")) {
     156        if (!"ask".equals(policy)) {
    156157            Logging.warn(tr("Unexpected value ''{0}'' for preference ''{1}''. Assuming value ''ask''.", policy, togglePreferenceKey));
    157158        }
     
    252253            msg = null;
    253254        } catch (ModuleException e) {
    254             e.printStackTrace();
     255            Logging.debug(e);
    255256            if (e.getCause() instanceof ClassNotFoundException) {
    256257                msg = tr("<html>Could not load module {0} because the module<br>main class ''{1}'' was not found.<br>"
    257258                        + "Delete from preferences?</html>", module.name, module.className);
    258259            }
    259         } catch (Exception e) {
    260             Logging.error(e);
    261260        }
    262261        if (msg != null && confirmDisableModule(parent, msg, module.name)) {
     
    307306     *
    308307     * @param monitor the progress monitor. Defaults to {@link NullProgressMonitor#INSTANCE} if null.
    309      * @return the list of locally available module information
     308     * @return the map of locally available module information
    310309     *
    311310     */
     
    320319            try {
    321320                future.get();
    322             } catch (ExecutionException | InterruptedException e) {
     321            } catch (ExecutionException e) {
    323322                Logging.error(e);
    324                 return null;
     323                return Collections.emptyMap();
     324            } catch (InterruptedException e) {
     325                Logging.error(e);
     326                Thread.currentThread().interrupt();
     327                return Collections.emptyMap();
    325328            }
    326329            HashMap<String, ModuleInformation> ret = new HashMap<>();
     
    363366     *
    364367     * @param parent parent component
    365      * @return the set of modules to load (as set of module names)
     368     * @return the list of modules to load (as set of module names)
    366369     */
    367370    public static List<ModuleInformation> buildListOfModulesToLoad(Component parent) {
    368         Set<String> modules = new HashSet<>();
    369         modules.addAll(Config.getPref().getList(OdConstants.PREF_MODULES, new LinkedList<String>()));
     371        Set<String> modules = new HashSet<>(Config.getPref().getList(OdConstants.PREF_MODULES, new LinkedList<>()));
    370372        if (System.getProperty("josm."+OdConstants.PREF_MODULES) != null) {
    371373            modules.addAll(Arrays.asList(System.getProperty("josm."+OdConstants.PREF_MODULES).split(",")));
     
    387389
    388390    private static void alertFailedModuleUpdate(Component parent, Collection<ModuleInformation> modules) {
    389         StringBuffer sb = new StringBuffer();
     391        StringBuilder sb = new StringBuilder(150);
    390392        sb.append("<html>");
    391393        sb.append(trn(
     
    447449            } catch (ExecutionException e) {
    448450                Logging.warn(tr("Warning: failed to download module information list"));
    449                 e.printStackTrace();
     451                Logging.debug(e);
    450452                // don't abort in case of error, continue with downloading modules below
    451453            } catch (InterruptedException e) {
    452454                Logging.warn(tr("Warning: failed to download module information list"));
    453                 e.printStackTrace();
     455                Logging.debug(e);
     456                Thread.currentThread().interrupt();
     457                return Collections.emptyList();
    454458                // don't abort in case of error, continue with downloading modules below
    455459            }
     
    477481                    future.get();
    478482                } catch (ExecutionException e) {
    479                     e.printStackTrace();
     483                    Logging.debug(e);
    480484                    alertFailedModuleUpdate(parent, modulesToUpdate);
    481485                    return modules;
    482486                } catch (InterruptedException e) {
    483                     e.printStackTrace();
     487                    Logging.debug(e);
    484488                    alertFailedModuleUpdate(parent, modulesToUpdate);
     489                    Thread.currentThread().interrupt();
    485490                    return modules;
    486491                }
     
    540545     * Installs downloaded modules. Moves files with the suffix ".jar.new" to the corresponding
    541546     * ".jar" files.
    542      *
    543      * If {@code dowarn} is true, this methods emits warning messages on the console if a downloaded
    544      * but not yet installed module .jar can't be be installed. If {@code dowarn} is false, the
    545      * installation of the respective module is sillently skipped.
    546      *
    547      * @param dowarn if true, warning messages are displayed; false otherwise
    548      */
    549     public static void installDownloadedModules(boolean dowarn) {
     547     * <p>
     548     * If {@code doWarn} is true, this method emits warning messages on the console if a downloaded
     549     * but not yet installed module .jar can't be installed. If {@code doWarn} is false, the
     550     * installation of the respective module is silently skipped.
     551     *
     552     * @param doWarn if true, warning messages are displayed; false otherwise
     553     */
     554    public static void installDownloadedModules(boolean doWarn) {
    550555        File moduleDir = OdPlugin.getInstance().getModulesDirectory();
    551556        if (!moduleDir.exists() || !moduleDir.isDirectory() || !moduleDir.canWrite())
    552557            return;
    553558
    554         final File[] files = moduleDir.listFiles(new FilenameFilter() {
    555             @Override
    556             public boolean accept(File dir, String name) {
    557                 return name.endsWith(".jar.new");
    558             } });
    559 
    560         for (File updatedModule : files) {
    561             final String filePath = updatedModule.getPath();
    562             File module = new File(filePath.substring(0, filePath.length() - 4));
    563             String moduleName = updatedModule.getName().substring(0, updatedModule.getName().length() - 8);
    564             // CHECKSTYLE.OFF: LineLength
    565             if (module.exists()) {
    566                 if (!module.delete() && dowarn) {
     559        final File[] files = moduleDir.listFiles((dir, name) -> name.endsWith(".jar.new"));
     560
     561        if (files != null) {
     562            for (File updatedModule : files) {
     563                final String filePath = updatedModule.getPath();
     564                File module = new File(filePath.substring(0, filePath.length() - 4));
     565                String moduleName = updatedModule.getName().substring(0, updatedModule.getName().length() - 8);
     566                if (module.exists() && !module.delete() && doWarn) {
    567567                    Logging.warn(tr("Warning: failed to delete outdated module ''{0}''.", module.toString()));
    568                     Logging.warn(tr("Warning: failed to install already downloaded module ''{0}''. Skipping installation. JOSM is still going to load the old module version.", moduleName));
     568                    Logging.warn(tr("Warning: failed to install already downloaded module ''{0}''. Skipping installation." +
     569                            "JOSM is still going to load the old module version.", moduleName));
    569570                    continue;
    570571                }
    571             }
    572             if (!updatedModule.renameTo(module) && dowarn) {
    573                 Logging.warn(tr("Warning: failed to install module ''{0}'' from temporary download file ''{1}''. Renaming failed.", module.toString(), updatedModule.toString()));
    574                 Logging.warn(tr("Warning: failed to install already downloaded module ''{0}''. Skipping installation. JOSM is still going to load the old module version.", moduleName));
    575             }
    576             // CHECKSTYLE.ON: LineLength
    577         }
    578         return;
     572                if (!updatedModule.renameTo(module) && doWarn) {
     573                    Logging.warn(tr("Warning: failed to install module ''{0}'' from temporary download file ''{1}''. Renaming failed.",
     574                            module.toString(), updatedModule.toString()));
     575                    Logging.warn(tr("Warning: failed to install already downloaded module ''{0}''. Skipping installation." +
     576                            "JOSM is still going to load the old module version.", moduleName));
     577                }
     578            }
     579        }
    579580    }
    580581
    581582    private static class UpdateModulesMessagePanel extends JPanel {
    582583        private JMultilineLabel lblMessage;
    583         private JCheckBox cbDontShowAgain;
     584        private JCheckBox cbDoNotShowAgain;
    584585
    585586        protected void build() {
     
    591592            gc.weighty = 1.0;
    592593            gc.insets = new Insets(5, 5, 5, 5);
    593             add(lblMessage = new JMultilineLabel(""), gc);
     594            lblMessage = new JMultilineLabel("");
     595            add(lblMessage, gc);
    594596            lblMessage.setFont(lblMessage.getFont().deriveFont(Font.PLAIN));
    595597
     
    597599            gc.fill = GridBagConstraints.HORIZONTAL;
    598600            gc.weighty = 0.0;
    599             add(cbDontShowAgain = new JCheckBox(
    600                     tr("Do not ask again and remember my decision (go to Preferences->Modules to change it later)")), gc);
    601             cbDontShowAgain.setFont(cbDontShowAgain.getFont().deriveFont(Font.PLAIN));
     601            cbDoNotShowAgain = new JCheckBox(
     602                    tr("Do not ask again and remember my decision (go to Preferences->Modules to change it later)"));
     603            add(cbDoNotShowAgain, gc);
     604            cbDoNotShowAgain.setFont(cbDoNotShowAgain.getFont().deriveFont(Font.PLAIN));
    602605        }
    603606
     
    612615        public void initDontShowAgain(String preferencesKey) {
    613616            String policy = Config.getPref().get(preferencesKey, "ask");
    614             policy = policy.trim().toLowerCase();
    615             cbDontShowAgain.setSelected(!policy.equals("ask"));
     617            policy = policy.trim().toLowerCase(Locale.ROOT);
     618            cbDoNotShowAgain.setSelected(!"ask".equals(policy));
    616619        }
    617620
    618621        public boolean isRememberDecision() {
    619             return cbDontShowAgain.isSelected();
     622            return cbDoNotShowAgain.isSelected();
    620623        }
    621624    }
  • applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/modules/ModuleInformation.java

    r36072 r36173  
    1010import java.io.IOException;
    1111import java.io.InputStream;
     12import java.lang.reflect.InvocationTargetException;
    1213import java.net.MalformedURLException;
    1314import java.net.URL;
     
    1617import java.util.LinkedList;
    1718import java.util.List;
     19import java.util.Locale;
    1820import java.util.Map;
    1921import java.util.TreeMap;
     
    3840 */
    3941public class ModuleInformation {
    40     public File file = null;
    41     public String name = null;
    42     public String className = null;
    43     public String link = null;
    44     public String description = null;
    45     public String author = null;
    46     public String version = null;
    47     public String localversion = null;
    48     public String downloadlink = null;
     42    public File file;
     43    public String name;
     44    public String className;
     45    public String link;
     46    public String description;
     47    public String author;
     48    public String version;
     49    public String localversion;
     50    public String downloadlink;
    4951    public String iconPath;
    5052    public ImageIcon icon;
     
    5254    public final Map<String, String> attr = new TreeMap<>();
    5355
    54     /**
     56    /*
    5557     * Creates a module information object by reading the module information from
    5658     * the manifest in the module jar.
     
    7880        try (
    7981            FileInputStream fis = new FileInputStream(file);
    80             JarInputStream jar = new JarInputStream(fis);
     82            JarInputStream jar = new JarInputStream(fis)
    8183        ) {
    8284            Manifest manifest = jar.getManifest();
     
    139141    }
    140142
    141     @SuppressWarnings("unused")
    142143    private void scanManifest(Manifest manifest) {
    143144        String lang = LanguageInfo.getLanguageCodeManifest();
    144         Attributes attr = manifest.getMainAttributes();
    145         className = attr.getValue("Module-Class");
    146         String s = attr.getValue(lang+"Module-Link");
     145        Attributes manifestMainAttributes = manifest.getMainAttributes();
     146        className = manifestMainAttributes.getValue("Module-Class");
     147        String s = manifestMainAttributes.getValue(lang+"Module-Link");
    147148        if (s == null) {
    148             s = attr.getValue("Module-Link");
     149            s = manifestMainAttributes.getValue("Module-Link");
    149150        }
    150151        if (s != null) {
     
    157158        }
    158159        link = s;
    159         s = attr.getValue(lang+"Module-Description");
     160        s = manifestMainAttributes.getValue(lang+"Module-Description");
    160161        if (s == null) {
    161             s = attr.getValue("Module-Description");
     162            s = manifestMainAttributes.getValue("Module-Description");
    162163            if (s != null) {
    163164                s = tr(s);
     
    165166        }
    166167        description = s;
    167         version = attr.getValue("Module-Version");
    168         author = attr.getValue("Author");
    169         iconPath = attr.getValue("Module-Icon");
     168        version = manifestMainAttributes.getValue("Module-Version");
     169        author = manifestMainAttributes.getValue("Author");
     170        iconPath = manifestMainAttributes.getValue("Module-Icon");
    170171        if (iconPath != null && file != null) {
    171172            // extract icon from the module jar file
     
    180181        }
    181182
    182         String classPath = attr.getValue(Attributes.Name.CLASS_PATH);
     183        String classPath = manifestMainAttributes.getValue(Attributes.Name.CLASS_PATH);
    183184        if (classPath != null) {
    184185            for (String entry : classPath.split(" ")) {
     
    193194            }
    194195        }
    195         for (Object o : attr.keySet()) {
    196             this.attr.put(o.toString(), attr.getValue(o.toString()));
     196        for (Object o : manifestMainAttributes.keySet()) {
     197            this.attr.put(o.toString(), manifestMainAttributes.getValue(o.toString()));
    197198        }
    198199    }
     
    205206     */
    206207    public String getDescriptionAsHtml() {
    207         StringBuilder sb = new StringBuilder();
     208        StringBuilder sb = new StringBuilder(32);
    208209        sb.append("<html><body>");
    209210        sb.append(description == null ? tr("no description available") : description);
     
    212213        }
    213214        if (downloadlink != null && !downloadlink.startsWith(OdConstants.OSM_SITE+"dist/")) {
    214             sb.append("<p>&nbsp;</p><p>"+tr("<b>Module provided by an external source:</b> {0}", downloadlink)+"</p>");
     215            sb.append("<p>&nbsp;</p><p>").append(tr("<b>Module provided by an external source:</b> {0}", downloadlink)).append("</p>");
    215216        }
    216217        sb.append("</body></html>");
     
    228229        try {
    229230            return klass.getConstructor(ModuleInformation.class).newInstance(this);
    230         } catch (Exception t) {
     231        } catch (NoSuchMethodException | InstantiationException | IllegalAccessException | InvocationTargetException t) {
    231232            throw new ModuleException(name, t);
    232233        }
     
    246247        try {
    247248            return (Class<? extends Module>) Class.forName(className, true, classLoader);
    248         } catch (Exception t) {
     249        } catch (ClassNotFoundException t) {
    249250            throw new ModuleException(name, t);
    250251        }
     
    282283        if (this.version == null && referenceVersion != null)
    283284            return true;
    284         if (this.version != null && !this.version.equals(referenceVersion))
    285             return true;
    286         return false;
    287     }
    288 
    289     /**
    290      * Replies true if this this module should be updated/downloaded because either
     285        return this.version != null && !this.version.equals(referenceVersion);
     286    }
     287
     288    /**
     289     * Replies true if this module should be updated/downloaded because either
    291290     * it is not available locally (its local version is null) or its local version is
    292291     * older than the available version on the server.
     
    303302        if (filter == null) return true;
    304303        if (value == null) return false;
    305         return value.toLowerCase().contains(filter.toLowerCase());
     304        return value.toLowerCase(Locale.ROOT).contains(filter.toLowerCase(Locale.ROOT));
    306305    }
    307306
  • applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/modules/ModuleListParser.java

    r36072 r36173  
    99import java.io.InputStream;
    1010import java.io.InputStreamReader;
    11 import java.io.UnsupportedEncodingException;
     11import java.nio.charset.StandardCharsets;
    1212import java.util.LinkedList;
    1313import java.util.List;
     
    1515/**
    1616 * A parser for the module list provided by an opendata Module Download Site.
    17  *
     17 * <p>
    1818 * See <a href="https://svn.openstreetmap.org/applications/editors/josm/plugins/opendata/modules.txt">OSM SVN</a>
    1919 * for a sample of the document. The format is a custom format, kind of mix of CSV and RFC822 style
     
    3535        try {
    3636            return new ModuleInformation(
    37                     new ByteArrayInputStream(manifest.getBytes("utf-8")),
     37                    new ByteArrayInputStream(manifest.getBytes(StandardCharsets.UTF_8)),
    3838                    name.substring(0, name.length() - 4),
    3939                    url
    4040                    );
    41         } catch (UnsupportedEncodingException e) {
    42             throw new ModuleListParseException(tr("Failed to create module information from manifest for module ''{0}''", name), e);
    4341        } catch (ModuleException e) {
    4442            throw new ModuleListParseException(tr("Failed to create module information from manifest for module ''{0}''", name), e);
     
    4846    /**
    4947     * Parses a module information document and replies a list of module information objects.
    50      *
     48     * <p>
    5149     * See <a href="https://svn.openstreetmap.org/applications/editors/josm/plugins/opendata/modules.txt">OSM SVN</a>
    5250     * for a sample of the document. The format is a custom format, kind of mix of CSV and RFC822 style
     
    5957    public List<ModuleInformation> parse(InputStream in) throws ModuleListParseException {
    6058        List<ModuleInformation> ret = new LinkedList<>();
    61         BufferedReader r = null;
     59        BufferedReader r;
    6260        try {
    63             r = new BufferedReader(new InputStreamReader(in, "utf-8"));
     61            r = new BufferedReader(new InputStreamReader(in, StandardCharsets.UTF_8));
    6462            String name = null;
    6563            String url = null;
     
    7876                    line = line.substring(1);
    7977                    if (line.length() > 70) {
    80                         manifest.append(line.substring(0, 70)).append("\n");
     78                        manifest.append(line, 0, 70).append("\n");
    8179                        line = " " + line.substring(70);
    8280                    }
  • applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/modules/ReadLocalModuleInformationTask.java

    r36072 r36173  
    66import java.io.File;
    77import java.io.FileInputStream;
    8 import java.io.FilenameFilter;
    98import java.io.IOException;
    109import java.util.ArrayList;
     
    2524 * This is an asynchronous task for reading module information from the files
    2625 * in the local module repositories.
    27  *
     26 * <p>
    2827 * It scans the files in the local modules repository (see {@link OdPlugin#getModulesDirectory()}
    2928 * and extracts module information from three kind of files:
     
    3635 */
    3736public class ReadLocalModuleInformationTask extends PleaseWaitRunnable {
    38     private Map<String, ModuleInformation> availableModules;
     37    private final Map<String, ModuleInformation> availableModules;
    3938    private boolean canceled;
    4039
     
    7877    protected void scanSiteCacheFiles(ProgressMonitor monitor, File modulesDirectory) {
    7978        File[] siteCacheFiles = modulesDirectory.listFiles(
    80                 new FilenameFilter() {
    81                     @Override
    82                     public boolean accept(File dir, String name) {
    83                         return name.matches("^([0-9]+-)?site.*\\.txt$");
    84                     }
    85                 }
    86                 );
     79                (dir, name) -> name.matches("^([0-9]+-)?site.*\\.txt$")
     80        );
    8781        if (siteCacheFiles == null || siteCacheFiles.length == 0)
    8882            return;
     
    9690            } catch (ModuleListParseException e) {
    9791                Logging.warn(tr("Warning: Failed to scan file ''{0}'' for module information. Skipping.", fname));
    98                 e.printStackTrace();
     92                Logging.debug(e);
    9993            }
    10094            monitor.worked(1);
     
    10498    protected void scanIconCacheFiles(ProgressMonitor monitor, File modulesDirectory) {
    10599        File[] siteCacheFiles = modulesDirectory.listFiles(
    106                 new FilenameFilter() {
    107                     @Override
    108                     public boolean accept(File dir, String name) {
    109                         return name.matches("^([0-9]+-)?site.*modules-icons\\.zip$");
    110                     }
    111                 }
    112                 );
     100                (dir, name) -> name.matches("^([0-9]+-)?site.*modules-icons\\.zip$")
     101        );
    113102        if (siteCacheFiles == null || siteCacheFiles.length == 0)
    114103            return;
     
    133122    protected void scanModuleFiles(ProgressMonitor monitor, File modulesDirectory) {
    134123        File[] moduleFiles = modulesDirectory.listFiles(
    135                 new FilenameFilter() {
    136                     @Override
    137                     public boolean accept(File dir, String name) {
    138                         return name.endsWith(".jar") || name.endsWith(".jar.new");
    139                     }
    140                 }
    141                 );
     124                (dir, name) -> name.endsWith(".jar") || name.endsWith(".jar.new")
     125        );
    142126        if (moduleFiles == null || moduleFiles.length == 0)
    143127            return;
     
    157141            } catch (ModuleException e) {
    158142                Logging.warn(tr("Warning: Failed to scan file ''{0}'' for module information. Skipping.", fname));
    159                 e.printStackTrace();
     143                Logging.debug(e);
    160144            }
    161145            monitor.worked(1);
  • applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/modules/ReadRemoteModuleInformationTask.java

    r36072 r36173  
    77import java.io.ByteArrayInputStream;
    88import java.io.File;
    9 import java.io.FileOutputStream;
    10 import java.io.FilenameFilter;
    119import java.io.IOException;
    1210import java.io.InputStream;
     
    1513import java.io.OutputStreamWriter;
    1614import java.io.PrintWriter;
    17 import java.io.UnsupportedEncodingException;
    1815import java.net.HttpURLConnection;
    1916import java.net.MalformedURLException;
    2017import java.net.URL;
     18import java.nio.charset.StandardCharsets;
     19import java.nio.file.Files;
    2120import java.util.Arrays;
    2221import java.util.Collection;
     
    157156                connection.setRequestProperty("Accept-Charset", "utf-8");
    158157            }
    159             try (BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"))) {
     158            try (BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8))) {
    160159                String line;
    161160                while ((line = in.readLine()) != null) {
     
    164163                return sb.toString();
    165164            }
    166         } catch (MalformedURLException e) {
    167             if (canceled) return null;
    168             e.printStackTrace();
    169             return null;
    170165        } catch (IOException e) {
    171166            if (canceled) return null;
    172             e.printStackTrace();
     167            Logging.debug(e);
    173168            return null;
    174169        } finally {
     
    205200            try (
    206201                    InputStream in = connection.getInputStream();
    207                     OutputStream out = new FileOutputStream(destFile)
     202                    OutputStream out = Files.newOutputStream(destFile.toPath())
    208203                    ) {
    209204                byte[] buffer = new byte[8192];
     
    212207                }
    213208            }
    214         } catch (MalformedURLException e) {
    215             if (canceled) return;
    216             e.printStackTrace();
    217             return;
    218209        } catch (IOException e) {
    219210            if (canceled) return;
    220             e.printStackTrace();
     211            Logging.debug(e);
    221212            return;
    222213        } finally {
     
    249240        try {
    250241            File moduleDir = OdPlugin.getInstance().getModulesDirectory();
    251             if (!moduleDir.exists()) {
    252                 if (!moduleDir.mkdirs()) {
    253                     Logging.warn(tr("Warning: failed to create module directory ''{0}''. Cannot cache module list from module site ''{1}''.",
    254                             moduleDir.toString(), site));
    255                 }
     242            if (!moduleDir.exists() && !moduleDir.mkdirs()) {
     243                Logging.warn(tr("Warning: failed to create module directory ''{0}''. Cannot cache module list from module site ''{1}''.",
     244                        moduleDir.toString(), site));
    256245            }
    257246            File cacheFile = createSiteCacheFile(moduleDir, site, CacheType.PLUGIN_LIST);
    258247            getProgressMonitor().subTask(tr("Writing module list to local cache ''{0}''", cacheFile.toString()));
    259             try (PrintWriter writer = new PrintWriter(new OutputStreamWriter(new FileOutputStream(cacheFile), "utf-8"))) {
     248            try (OutputStream fileOutputStream = Files.newOutputStream(cacheFile.toPath());
     249                 PrintWriter writer = new PrintWriter(new OutputStreamWriter(fileOutputStream, StandardCharsets.UTF_8))) {
    260250                writer.write(list);
    261251            }
     
    275265        try {
    276266            getProgressMonitor().subTask(tr("Parsing module list from site ''{0}''", site));
    277             InputStream in = new ByteArrayInputStream(doc.getBytes("UTF-8"));
     267            InputStream in = new ByteArrayInputStream(doc.getBytes(StandardCharsets.UTF_8));
    278268            availableModules.addAll(new ModuleListParser().parse(in));
    279         } catch (UnsupportedEncodingException e) {
    280             Logging.error(tr("Failed to parse module list document from site ''{0}''. Skipping site. Exception was: {1}", site, e.toString()));
    281             e.printStackTrace();
    282269        } catch (ModuleListParseException e) {
    283270            Logging.error(tr("Failed to parse module list document from site ''{0}''. Skipping site. Exception was: {1}", site, e.toString()));
    284             e.printStackTrace();
     271            Logging.debug(e);
    285272        }
    286273    }
     
    296283        for (String location : ModuleInformation.getModuleLocations()) {
    297284            File[] f = new File(location).listFiles(
    298                     new FilenameFilter() {
    299                         @Override
    300                         public boolean accept(File dir, String name) {
    301                             return name.matches("^([0-9]+-)?site.*\\.txt$") ||
    302                                     name.matches("^([0-9]+-)?site.*-icons\\.zip$");
    303                         }
    304                     }
    305                     );
     285                    (dir, name) -> name.matches("^([0-9]+-)?site.*\\.txt$") ||
     286                            name.matches("^([0-9]+-)?site.*-icons\\.zip$")
     287            );
    306288            if (f != null && f.length > 0) {
    307289                siteCacheFiles.addAll(Arrays.asList(f));
  • applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/util/NamesFrUtils.java

    r36072 r36173  
    55import java.io.IOException;
    66import java.io.InputStreamReader;
     7import java.nio.charset.StandardCharsets;
    78import java.util.Arrays;
    89import java.util.HashMap;
    910import java.util.List;
     11import java.util.Locale;
    1012import java.util.Map;
    1113
     
    2123public abstract class NamesFrUtils {
    2224
    23     private static Map<String, String> dictionary = initDictionary();
    24 
    25     public static final String checkDictionary(String value) {
    26         String result = "";
     25    private static final Map<String, String> dictionary = initDictionary();
     26
     27    public static String checkDictionary(String value) {
     28        StringBuilder result = new StringBuilder();
    2729        for (String word : value.split(" ")) {
    28             if (!result.isEmpty()) {
    29                 result += " ";
     30            if (result.length() != 0) {
     31                result.append(' ');
    3032            }
    31             result += dictionary.containsKey(word) ? dictionary.get(word) : word;
    32         }
    33         return result;
     33            result.append(dictionary.getOrDefault(word, word));
     34        }
     35        return result.toString();
    3436    }
    3537
     
    3739        Map<String, String> result = new HashMap<>();
    3840        try (BufferedReader reader = new BufferedReader(new InputStreamReader(
    39                 SimpleDataSetHandler.class.getResourceAsStream(OdConstants.DICTIONARY_FR), OdConstants.UTF8))) {
     41                SimpleDataSetHandler.class.getResourceAsStream(OdConstants.DICTIONARY_FR), StandardCharsets.UTF_8))) {
    4042            String line = reader.readLine(); // Skip first line
    4143            Logging.trace(line);
     
    5052    }
    5153
    52     public static final String getStreetLabel(String label) {
     54    public static String getStreetLabel(String label) {
    5355        if (label == null) {
    54             return label;
     56            return null;
    5557        } else if (label.startsWith("All")) {
    5658            return "Allée";
    57         } else if (label.equals("Autoroute")) {
     59        } else if ("Autoroute".equals(label)) {
    5860            return label;
    5961        } else if (label.startsWith("Anc")) {
     
    6365        } else if (label.startsWith("Barr")) {
    6466            return "Barrière";
    65         } else if (label.equals("Bd") || label.equals("Boulevard")) {
     67        } else if ("Bd".equals(label) || "Boulevard".equals(label)) {
    6668            return "Boulevard";
    6769        } else if (label.startsWith("Bret")) {
    6870            return "Bretelle";
    69         } else if (label.equals("Bre")) {
     71        } else if ("Bre".equals(label)) {
    7072            return "Bré";
    71         } else if (label.equals("Caminot")) {
    72             return label;
    73         } else if (label.equals("Carrefour")) {
    74             return label;
    75         } else if (label.equals("Carré")) {
     73        } else if ("Caminot".equals(label)) {
     74            return label;
     75        } else if ("Carrefour".equals(label)) {
     76            return label;
     77        } else if ("Carré".equals(label)) {
    7678            return label;
    7779        } else if (label.startsWith("Chemine")) {
     
    8183        } else if (label.startsWith("Cit")) {
    8284            return "Cité";
    83         } else if (label.equals("Clos")) {
    84             return label;
    85         } else if (label.equals("Cote") || label.equals("Côte")) {
     85        } else if ("Clos".equals(label)) {
     86            return label;
     87        } else if ("Cote".equals(label) || "Côte".equals(label)) {
    8688            return "Côte";
    87         } else if (label.equals("Cours")) {
     89        } else if ("Cours".equals(label)) {
    8890            return label;
    8991        } else if (label.startsWith("Dep") || label.startsWith("Dép")) {
     
    9193        } else if (label.startsWith("Dom")) {
    9294            return "Domaine";
    93         } else if (label.equals("Dsc") || label.startsWith("Desc")) {
     95        } else if ("Dsc".equals(label) || label.startsWith("Desc")) {
    9496            return "Descente";
    95         } else if (label.equals("Esp") || label.startsWith("Espl")) {
     97        } else if ("Esp".equals(label) || label.startsWith("Espl")) {
    9698            return "Esplanade";
    9799        } else if (label.startsWith("Espa")) {
    98100            return "Espace";
    99         } else if (label.equals("Giratoire")) {
    100             return label;
    101         } else if (label.equals("Grande-rue")) {
    102             return label;
    103         } else if (label.equals("Hameau")) {
    104             return label;
    105         } else if (label.startsWith("Imp") || label.equals("Ipasse")) {
     101        } else if ("Giratoire".equals(label)) {
     102            return label;
     103        } else if ("Grande-rue".equals(label)) {
     104            return label;
     105        } else if ("Hameau".equals(label)) {
     106            return label;
     107        } else if (label.startsWith("Imp") || "Ipasse".equals(label)) {
    106108            return "Impasse";
    107109        } else if (label.startsWith("Itin")) {
    108110            return "Itinéraire";
    109         } else if (label.equals("Jardin")) {
    110             return label;
    111         } else if (label.startsWith("L'") || label.equals("La") || label.equals("Le") || label.equals("Les") ||
    112                 label.equals("Saint")) { // Lieux-dits
     111        } else if ("Jardin".equals(label)) {
     112            return label;
     113        } else if (label.startsWith("L'") || "La".equals(label) || "Le".equals(label) || "Les".equals(label) ||
     114                "Saint".equals(label)) { // Lieux-dits
    113115            return label;
    114116        } else if (label.startsWith("Lot")) {
    115117            return "Lotissement";
    116         } else if (label.equals("Mail")) {
    117             return label;
    118         } else if (label.equals("Mas")) {
     118        } else if ("Mail".equals(label)) {
     119            return label;
     120        } else if ("Mas".equals(label)) {
    119121            return label;
    120122        } else if (label.startsWith("Nat")) {
    121123            return "Nationale";
    122         } else if (label.equals("Parc")) {
    123             return label;
    124         } else if (label.equals("Passerelle")) {
     124        } else if ("Parc".equals(label)) {
     125            return label;
     126        } else if ("Passerelle".equals(label)) {
    125127            return label;
    126128        } else if (label.startsWith("Pas")) {
    127129            return "Passage";
    128         } else if (label.equals("Pch") || label.startsWith("Petit-chem")) {
     130        } else if ("Pch".equals(label) || label.startsWith("Petit-chem")) {
    129131            return "Petit-chemin";
    130         } else if (label.equals("Petit") || label.equals("Petite")) {
    131             return label;
    132         } else if (label.equals("Petite-allée")) {
    133             return label;
    134         } else if (label.equals("Petite-rue")) {
    135             return label;
    136         } else if (label.equals("Plan")) {
     132        } else if ("Petit".equals(label) || "Petite".equals(label)) {
     133            return label;
     134        } else if ("Petite-allée".equals(label)) {
     135            return label;
     136        } else if ("Petite-rue".equals(label)) {
     137            return label;
     138        } else if ("Plan".equals(label)) {
    137139            return label;
    138140        } else if (label.startsWith("Pl")) {
    139141            return "Place";
    140         } else if (label.equals("Pont")) {
    141             return label;
    142         } else if (label.equals("Port")) {
    143             return label;
    144         } else if (label.equals("Porte")) {
     142        } else if ("Pont".equals(label)) {
     143            return label;
     144        } else if ("Port".equals(label)) {
     145            return label;
     146        } else if ("Porte".equals(label)) {
    145147            return label;
    146148        } else if (label.startsWith("Prom")) {
    147149            return "Promenade";
    148         } else if (label.equals("Prv") || label.startsWith("Parv")) {
     150        } else if ("Prv".equals(label) || label.startsWith("Parv")) {
    149151            return "Parvis";
    150152        } else if (label.startsWith("Qu")) {
    151153            return "Quai";
    152         } else if (label.equals("Rampe")) {
     154        } else if ("Rampe".equals(label)) {
    153155            return label;
    154156        } else if (label.startsWith("Res") || label.startsWith("Rés")) {
    155157            return "Résidence";
    156         } else if (label.equals("Rocade")) {
    157             return label;
    158         } else if (label.equals("Rpt") || label.startsWith("Ron")) {
     158        } else if ("Rocade".equals(label)) {
     159            return label;
     160        } else if ("Rpt".equals(label) || label.startsWith("Ron")) {
    159161            return "Rond-Point";
    160         } else if (label.equals("Rte") || label.equals("Route")) {
     162        } else if ("Rte".equals(label) || "Route".equals(label)) {
    161163            return "Route";
    162         } else if (label.equals("Rue") || label.equals("Rued")) {
     164        } else if ("Rue".equals(label) || "Rued".equals(label)) {
    163165            return "Rue";
    164         } else if (label.equals("Sentier")) {
     166        } else if ("Sentier".equals(label)) {
    165167            return label;
    166168        } else if (label.startsWith("Sq")) {
    167169            return "Square";
    168         } else if (label.equals("Théâtre")) {
     170        } else if ("Théâtre".equals(label)) {
    169171            return "Théâtre";
    170172        } else if (label.startsWith("Tra")) {
    171173            return "Traverse";
    172         } else if (label.equals("Vieux")) {
    173             return label;
    174         } else if (label.equals("Voie")) {
    175             return label;
    176         } else if (label.equals("Zone")) {
     174        } else if ("Vieux".equals(label)) {
     175            return label;
     176        } else if ("Voie".equals(label)) {
     177            return label;
     178        } else if ("Zone".equals(label)) {
    177179            return label;
    178180        } else {
     
    182184    }
    183185
    184     public static final String checkStreetName(OsmPrimitive p, String key) {
     186    public static String checkStreetName(OsmPrimitive p, String key) {
    185187        String value = null;
    186188        if (p != null) {
     
    189191                value = WordUtils.capitalizeFully(value);
    190192                // Cas particuliers
    191                 if (value.equals("Boulingrin")) { // square Boulingrin, mal formé
     193                if ("Boulingrin".equals(value)) { // square Boulingrin, mal formé
    192194                    value = "Sq Boulingrin";
    193195                } else if (value.matches("A[0-9]+")) { // Autoroutes sans le mot "Autoroute"
    194196                    value = "Autoroute "+value;
    195                 } else if (value.equals("All A61")) { // A61 qualifiée d'Allée ?
     197                } else if ("All A61".equals(value)) { // A61 qualifiée d'Allée ?
    196198                    value = "Autoroute A61";
    197199                } else if (value.startsWith("Che Vieux Che")) { // "Che" redondant
     
    210212                String[] words = value.split(" ");
    211213                if (words.length > 0) {
    212                     value = "";
     214                    final StringBuilder stringBuilder = new StringBuilder();
    213215                    List<String> list = Arrays.asList(words);
    214216                    words[0] = getStreetLabel(words[0]);
    215                     if (words[0].equals("Ancien") && words.length > 1 && words[1].equals("Che")) {
     217                    if ("Ancien".equals(words[0]) && words.length > 1 && "Che".equals(words[1])) {
    216218                        words[1] = "Chemin";
    217219                    }
    218220                    for (int i = 0; i < words.length; i++) {
    219221                        if (i > 0) {
    220                             value += " ";
     222                            stringBuilder.append(' ');
    221223                            // Prénoms/Noms propres abrégés
    222                             if (words[i].equals("A") && list.contains("Bernard")) {
     224                            if ("A".equals(words[i]) && list.contains("Bernard")) {
    223225                                words[i] = "Arnaud";
    224                             } else if (words[i].equals("A") && list.contains("Passerieu")) {
     226                            } else if ("A".equals(words[i]) && list.contains("Passerieu")) {
    225227                                words[i] = "Ariste";
    226                             } else if (words[i].equals("A") && list.contains("Bougainville")) {
     228                            } else if ("A".equals(words[i]) && list.contains("Bougainville")) {
    227229                                words[i] = "Antoine";
    228                             } else if (words[i].equals("Ch") && list.contains("Leconte")) {
     230                            } else if ("Ch".equals(words[i]) && list.contains("Leconte")) {
    229231                                words[i] = "Charles";
    230                             } else if (words[i].equals("Frs") && list.contains("Dugua")) {
     232                            } else if ("Frs".equals(words[i]) && list.contains("Dugua")) {
    231233                                words[i] = "François";
    232                             } else if (words[i].equals("G") && list.contains("Latecoere")) {
     234                            } else if ("G".equals(words[i]) && list.contains("Latecoere")) {
    233235                                words[i] = "Georges";
    234                             } else if (words[i].equals("H") && list.contains("Lautrec")) {
     236                            } else if ("H".equals(words[i]) && list.contains("Lautrec")) {
    235237                                words[i] = "Henri";
    236                             } else if (words[i].equals("J") && list.contains("Dieulafoy")) {
     238                            } else if ("J".equals(words[i]) && list.contains("Dieulafoy")) {
    237239                                words[i] = "Jane";
    238                             } else if (words[i].equals("J") && (list.contains("Champollion") || list.contains("Stanislas"))) {
     240                            } else if ("J".equals(words[i]) && (list.contains("Champollion") || list.contains("Stanislas"))) {
    239241                                words[i] = "Jean";
    240                             } else if (words[i].equals("L") && list.contains("Zamenhof")) {
     242                            } else if ("L".equals(words[i]) && list.contains("Zamenhof")) {
    241243                                words[i] = "Ludwik";
    242                             } else if (words[i].equals("L") && list.contains("Sacha")) {
     244                            } else if ("L".equals(words[i]) && list.contains("Sacha")) {
    243245                                words[i] = "Lucien";
    244246                                if (!list.contains("Et")) {
    245247                                    words[i] += " et";
    246248                                }
    247                             } else if (words[i].equals("L") && (list.contains("Vauquelin") || list.contains("Bougainville"))) {
     249                            } else if ("L".equals(words[i]) && (list.contains("Vauquelin") || list.contains("Bougainville"))) {
    248250                                words[i] = "Louis";
    249                             } else if (words[i].equals("M") && list.contains("Dieulafoy")) {
     251                            } else if ("M".equals(words[i]) && list.contains("Dieulafoy")) {
    250252                                words[i] = "Marcel";
    251                             } else if (words[i].equals("M") && list.contains("Arifat")) {
     253                            } else if ("M".equals(words[i]) && list.contains("Arifat")) {
    252254                                words[i] = "Marie";
    253                             } else if (words[i].equals("N") && list.contains("Djamena")) {
     255                            } else if ("N".equals(words[i]) && list.contains("Djamena")) {
    254256                                words[i] = "N'";
    255                             } else if (words[i].equals("Oo")) {
     257                            } else if ("Oo".equals(words[i])) {
    256258                                words[i] = "Oô";
    257                             } else if (words[i].equals("Ph") && list.contains("Ravary")) {
     259                            } else if ("Ph".equals(words[i]) && list.contains("Ravary")) {
    258260                                words[i] = "Philippe";
    259                             } else if (words[i].equals("R") && list.contains("Folliot")) {
     261                            } else if ("R".equals(words[i]) && list.contains("Folliot")) {
    260262                                words[i] = "Raphaël";
    261                             } else if (words[i].equals("W") && list.contains("Booth")) {
     263                            } else if ("W".equals(words[i]) && list.contains("Booth")) {
    262264                                words[i] = "William";
    263265                            // Mots de liaison non couverts par le dictionnaire
    264                             } else if (words[i].equals("A")) {
     266                            } else if ("A".equals(words[i])) {
    265267                                words[i] = "à";
    266                             } else if (words[i].equals("D") || words[i].equals("L")) {
    267                                 words[i] = words[i].toLowerCase()+"'";
    268                             } else if (words[i].equals("La") || words[i].equals("Le")) {
    269                                 words[i] = words[i].toLowerCase();
     268                            } else if ("D".equals(words[i]) || "L".equals(words[i])) {
     269                                words[i] = words[i].toLowerCase(Locale.FRENCH)+"'";
     270                            } else if ("La".equals(words[i]) || "Le".equals(words[i])) {
     271                                words[i] = words[i].toLowerCase(Locale.FRENCH);
    270272                            }
    271273                        }
    272                         value += words[i];
     274                        stringBuilder.append(words[i]);
    273275                    }
     276                    value = stringBuilder.toString();
    274277                }
    275278                // Ponctuation
  • applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/util/OdUtils.java

    r36072 r36173  
    33
    44import java.io.File;
    5 import java.io.FilenameFilter;
    65import java.io.IOException;
    76import java.nio.file.Files;
     
    2423    private static final String TEMP_DIR_PREFIX = "josm_opendata_temp_";
    2524
    26     public static final boolean isMultipolygon(OsmPrimitive p) {
    27         return p instanceof Relation && ((Relation) p).isMultipolygon();
     25    public static boolean isMultipolygon(OsmPrimitive p) {
     26        return p instanceof Relation && p.isMultipolygon();
    2827    }
    2928
    30     public static final String[] stripQuotesAndExtraChars(String[] split, String sep) {
     29    public static String[] stripQuotesAndExtraChars(String[] split, String sep) {
    3130        List<String> result = new ArrayList<>();
    3231        boolean append = false;
     
    3736                    append = false;
    3837                }
    39                 result.set(index, result.get(index)+sep+split[i].replaceAll("\"", ""));
     38                result.set(index, result.get(index)+sep+split[i].replace("\"", ""));
    4039            } else if (split[i].startsWith("\"")) {
    4140                if (!(split[i].endsWith("\"") && StringUtils.countMatches(split[i], "\"") % 2 == 0)) {
    4241                    append = true;
    4342                }
    44                 result.add(split[i].replaceAll("\"", ""));
     43                result.add(split[i].replace("\"", ""));
    4544            } else {
    4645                result.add(split[i]);
     
    5453    }
    5554
    56     public static final ImageIcon getImageIcon(String iconName) {
     55    public static ImageIcon getImageIcon(String iconName) {
    5756        return getImageIcon(iconName, false);
    5857    }
    5958
    60     public static final ImageIcon getImageIcon(String iconName, boolean optional) {
     59    public static ImageIcon getImageIcon(String iconName, boolean optional) {
    6160        return getImageProvider(iconName, optional).get();
    6261    }
    6362
    64     public static final ImageProvider getImageProvider(String iconName) {
     63    public static ImageProvider getImageProvider(String iconName) {
    6564        return getImageProvider(iconName, false);
    6665    }
    6766
    68     public static final ImageProvider getImageProvider(String iconName, boolean optional) {
     67    public static ImageProvider getImageProvider(String iconName, boolean optional) {
    6968        return new ImageProvider(iconName).setOptional(optional);
    7069    }
    7170
    72     public static final String getJosmLanguage() {
     71    public static String getJosmLanguage() {
    7372        String lang = Config.getPref().get("language");
    7473        if (lang == null || lang.isEmpty()) {
     
    7877    }
    7978
    80     public static final double convertMinuteSecond(double minute, double second) {
     79    public static double convertMinuteSecond(double minute, double second) {
    8180        return (minute/60.0) + (second/3600.0);
    8281    }
    8382
    84     public static final double convertDegreeMinuteSecond(double degree, double minute, double second) {
     83    public static double convertDegreeMinuteSecond(double degree, double minute, double second) {
    8584        return degree + convertMinuteSecond(minute, second);
    8685    }
    8786
    88     public static final File createTempDir() throws IOException {
     87    public static File createTempDir() throws IOException {
    8988        return Files.createTempDirectory(TEMP_DIR_PREFIX).toFile();
    9089    }
    9190
    92     public static final void deleteDir(File dir) {
     91    public static void deleteDir(File dir) {
    9392        for (File file : dir.listFiles()) {
    9493            if (!file.delete()) {
     
    101100    }
    102101
    103     public static final void deletePreviousTempDirs() {
     102    public static void deletePreviousTempDirs() {
    104103        File tmpDir = new File(System.getProperty("java.io.tmpdir"));
    105104        if (tmpDir.exists() && tmpDir.isDirectory()) {
    106             for (File dir : tmpDir.listFiles(new FilenameFilter() {
    107                 @Override
    108                 public boolean accept(File dir, String name) {
    109                     return name.startsWith(TEMP_DIR_PREFIX);
    110                 }
    111             })) {
     105            for (File dir : tmpDir.listFiles((dir, name) -> name.startsWith(TEMP_DIR_PREFIX))) {
    112106                deleteDir(dir);
    113107            }
  • applications/editors/josm/plugins/opendata/test/unit/org/openstreetmap/josm/plugins/opendata/core/io/geographic/MifReaderTest.java

    r36072 r36173  
    4747        File file = new File(TestUtils.getRegressionDataFile(9592, "bg.mif"));
    4848        try (InputStream is = new FileInputStream(file)) {
    49             NonRegFunctionalTests.testGeneric("#9592", MifReader.parseDataSet(is, file, newHandler("EPSG:32635"), null));
     49            NonRegFunctionalTests.testGeneric("#9592", MifReader.parseDataSet(is, file, newHandler("EPSG:32635")));
    5050        }
    5151    }
Note: See TracChangeset for help on using the changeset viewer.