Ignore:
Timestamp:
2009-08-31T14:40:43+02:00 (15 years ago)
Author:
guggis
Message:

applied #2907: patch by xeen: Add duplicate detection to WMS Plugin Preferences
fixed #3298: WMS -Warn if URL is not correct

Location:
applications/editors/josm/plugins/wmsplugin/src/wmsplugin
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/wmsplugin/src/wmsplugin/WMSGrabber.java

    r17403 r17407  
    3434
    3535public class WMSGrabber extends Grabber {
     36        public static boolean isUrlWithPatterns(String url) {
     37                return  url != null && url.contains("{") && url.contains("}");
     38        }
     39       
    3640    protected String baseURL;
    3741    private final boolean urlWithPatterns;
     
    4145        this.baseURL = layer.baseURL;
    4246        /* URL containing placeholders? */
    43         urlWithPatterns = baseURL != null && baseURL.contains("{") && baseURL.contains("}");
     47        urlWithPatterns = isUrlWithPatterns(baseURL);
    4448    }
    4549
     
    104108                + getProjection(baseURL, false)
    105109                + "&width=" + wi + "&height=" + ht;
     110                if (!(baseURL.endsWith("&") || baseURL.endsWith("?"))) {
     111                        System.out.println(tr("Warning: The base URL ''{0}'' for a WMS service doesn't have a trailing '&' or a trailing '?'.", baseURL));
     112                        System.out.println(tr("Warning: Fetching WMS tiles is likely to fail. Please check you preference settings."));
     113                        System.out.println(tr("Warning: The complete URL is ''{0}''.", str));
     114                }
    106115        }
    107116        return new URL(str.replace(" ", "%20"));
  • applications/editors/josm/plugins/wmsplugin/src/wmsplugin/WMSLayer.java

    r17397 r17407  
    6565        private ExecutorService executor = null;
    6666
     67        /** set to true if this layer uses an invalid base url */
     68        private boolean usesInvalidUrl = false;
     69        /** set to true if the user confirmed to use an potentially invalid WMS base url */
     70        private boolean isInvalidUrlConfirmed = false;
     71       
    6772        public WMSLayer() {
    6873                this(tr("Blank Layer"), null, null);
     
    8489
    8590                executor = Executors.newFixedThreadPool(3);
     91                if (!baseURL.startsWith("html:") && !WMSGrabber.isUrlWithPatterns(baseURL)) {
     92                        if (!(baseURL.endsWith("&") || baseURL.endsWith("?"))) {
     93                                if (!confirmMalformedUrl(baseURL)) {
     94                                        System.out.println(tr("Warning: WMS layer deactivated because of malformed base url ''{0}''", baseURL));
     95                                        usesInvalidUrl = true;
     96                                        setName(getName() + tr("(deactivated)"));
     97                                        return;
     98                                } else {
     99                                        isInvalidUrlConfirmed = true;
     100                                }
     101                        }
     102                }
    86103        }
    87104
    88105        @Override
    89         public void destroy() {
     106        public void destroy() { 
    90107                try {
    91                         executor.shutdown();
     108                        executor.shutdownNow();
    92109                        // Might not be initalized, so catch NullPointer as well
    93                 } catch(Exception x) {}
     110                } catch(Exception x) {
     111                        x.printStackTrace();
     112                }
    94113        }
    95114
     
    138157        @Override public void paint(Graphics g, final MapView mv) {
    139158                if(baseURL == null) return;
     159                if (usesInvalidUrl && !isInvalidUrlConfirmed) return;
    140160
    141161                if( !startstop.isSelected() || (pixelPerDegree / getPPD() > minZoom) ){ //don't download when it's too outzoomed
     
    155175        }
    156176
     177        protected boolean confirmMalformedUrl(String url) {
     178                if (isInvalidUrlConfirmed)
     179                        return true;
     180                String msg  = tr("<html>The base URL<br>"
     181                                        + "''{0}''<br>"
     182                                        + "for this WML layer does neither end with a ''&'' nor with a ''?''.<br>"
     183                                        + "This is likely to lead to invalid WMS request. You should check your<br>"
     184                                        + "preference settings.<br>"
     185                                        + "Do you want to fetch WMS tiles anyway?",                                     
     186                                        url);
     187                String [] options = new String[] {
     188                        tr("Yes, fetch images"),
     189                        tr("No, abort")
     190                };
     191                int ret = JOptionPane.showOptionDialog(
     192                                Main.parent,
     193                                msg,
     194                                tr("Invalid URL?"),
     195                                JOptionPane.YES_NO_OPTION,
     196                                JOptionPane.WARNING_MESSAGE,
     197                                null,
     198                                options, options[1]
     199                );
     200                switch(ret) {
     201                case JOptionPane.YES_OPTION: return true;
     202                default: return false;
     203                }
     204        }
    157205        protected void downloadAndPaintVisible(Graphics g, final MapView mv){
     206                if (usesInvalidUrl)
     207                        return;
    158208                ProjectionBounds bounds = mv.getProjectionBounds();
    159209                int bminx= (int)Math.floor ((bounds.min.east() * pixelPerDegree ) / ImageSize );
     
    170220                        );
    171221                        return;
    172                 }
    173 
     222                }               
     223               
    174224                for(int x = bminx; x<bmaxx; ++x) {
    175225                        for(int y = bminy; y<bmaxy; ++y){
  • applications/editors/josm/plugins/wmsplugin/src/wmsplugin/WMSPreferenceEditor.java

    r17390 r17407  
    2828
    2929public class WMSPreferenceEditor implements PreferenceSetting {
    30     private Map<String,String> orig;
    3130    private DefaultTableModel model;
    3231    private JComboBox browser;
     
    5453        };
    5554        JScrollPane scrolldef = new JScrollPane(listdef);
    56         p.add(scrolldef, GBC.eol().insets(0,5,0,0).fill(GBC.BOTH));
     55        // scrolldef is added after the buttons so it's clearer the buttons
     56        // control the top list and not the default one
    5757        scrolldef.setPreferredSize(new Dimension(200,200));
    5858
     
    100100        });
    101101
    102         JButton copy = new JButton(tr("Copy Default"));
     102        JButton copy = new JButton(tr("Copy Selected Default(s)"));
    103103        buttonPanel.add(copy, GBC.std().insets(0,5,0,0));
    104104        copy.addActionListener(new ActionListener(){
    105105            public void actionPerformed(ActionEvent e) {
    106                 Integer line = listdef.getSelectedRow();
    107                 if (line == -1)
     106                int[] lines = listdef.getSelectedRows();
     107                if (lines.length == 0) {
    108108                    JOptionPane.showMessageDialog(
    109109                                gui,
    110                                 tr("Please select the row to copy."),
     110                                tr("Please select at least one row to copy."),
    111111                                tr("Information"),
    112112                                JOptionPane.INFORMATION_MESSAGE
    113113                                );
    114                 else
    115                 {
    116                     model.addRow(new String[]{modeldef.getValueAt(line, 0).toString(),
    117                     modeldef.getValueAt(line, 1).toString()});
     114                    return;
     115                }
     116               
     117                outer: for(int i = 0; i < lines.length; i++) {
     118                        String c1 = modeldef.getValueAt(lines[i], 0).toString();
     119                        String c2 = modeldef.getValueAt(lines[i], 1).toString();
     120                       
     121                        // Check if an entry with exactly the same values already
     122                        // exists
     123                        for(int j = 0; j < model.getRowCount(); j++) {
     124                                if(c1.equals(model.getValueAt(j, 0).toString())
     125                                                && c2.equals(model.getValueAt(j, 1).toString())) {
     126                                        // Select the already existing row so the user has
     127                                        // some feedback in case an entry exists
     128                                        list.getSelectionModel().setSelectionInterval(j, j);
     129                                        list.scrollRectToVisible(list.getCellRect(j, 0, true));
     130                                        continue outer;
     131                                }
     132                        }
     133                       
     134                        model.addRow(new String[] {c1, c2});
     135                        int lastLine = model.getRowCount() - 1;
     136                        list.getSelectionModel().setSelectionInterval(lastLine, lastLine);
     137                        list.scrollRectToVisible(list.getCellRect(lastLine, 0, true));
    118138                }
    119139            }
     
    122142        p.add(buttonPanel);
    123143        p.add(Box.createHorizontalGlue(), GBC.eol().fill(GBC.HORIZONTAL));
     144        // Add default item list
     145        p.add(scrolldef, GBC.eol().insets(0,5,0,0).fill(GBC.BOTH));       
     146       
    124147        browser = new JComboBox(new String[]{
    125148        "webkit-image {0}",
Note: See TracChangeset for help on using the changeset viewer.