Ticket #6251: mutidownload.patch

File mutidownload.patch, 3.2 KB (added by akks, 2 years ago)

ability to download multible objects by ID

  • org/openstreetmap/josm/gui/widgets/OsmIdTextField.java

     
    11// License: GPL. For details, see LICENSE file. 
    22package org.openstreetmap.josm.gui.widgets; 
    33 
     4import java.util.Arrays; 
     5import java.util.StringTokenizer; 
    46import static org.openstreetmap.josm.tools.I18n.tr; 
    57 
    68import javax.swing.JTextField; 
     
    2123        return validator.getOsmId(); 
    2224    } 
    2325 
     26    public int[] getOsmIds() { 
     27        return validator.getOsmIds(); 
     28    } 
     29 
    2430    /** 
    2531     * Validator for a changeset ID entered in a {@see JTextComponent}. 
    2632     * 
     
    3743 
    3844        @Override 
    3945        public boolean isValid() { 
    40             return getOsmId() > 0; 
     46            return getOsmId() > 0 || getOsmIds()!=null; 
    4147        } 
    4248 
    4349        @Override 
     
    6066                return 0; 
    6167            } 
    6268        } 
     69 
     70        public int[] getOsmIds() { 
     71            String value  = getComponent().getText(); 
     72            if (value == null || value.trim().length() == 0) return null; 
     73            try { 
     74                //String[] parts = value.split("[,\\.\\s\\t\\n]+"); 
     75                StringTokenizer st = new StringTokenizer(value,",.+/ \t\n"); 
     76                int ids[]=new int[st.countTokens()]; 
     77                int j=0; String s; 
     78                while (st.hasMoreTokens()) { 
     79                    s = st.nextToken(); 
     80                    // convert tokens to int skipping v-words (version v2 etc) 
     81                    if (s.charAt(0)!='v') ids[j++]=Integer.parseInt(s); 
     82                    } 
     83                return Arrays.copyOf(ids, j); 
     84            } catch(NumberFormatException e) { 
     85                return null; 
     86            } 
     87        } 
    6388    } 
    6489} 
  • org/openstreetmap/josm/actions/DownloadPrimitiveAction.java

     
    9292        Main.pref.putInteger("downloadprimitive.lasttype", cbType.getSelectedIndex()); 
    9393        Main.pref.put("downloadprimitive.referrers", referrers.isSelected()); 
    9494        Main.pref.put("download.newlayer", layer.isSelected()); 
    95         int id = tfId.getOsmId(); 
    96         if(id <= 0) 
     95        int ids[] = tfId.getOsmIds(); 
     96        if(ids == null) 
    9797            JOptionPane.showMessageDialog( 
    9898                    Main.parent, 
    99                     tr("Invalid ID specified. Cannot download object."), 
     99                    tr("Invalid ID specified. Single ID or any list can be entered\n" 
     100                    + " Cannot download object."), 
    100101                    tr("Information"), 
    101102                    JOptionPane.INFORMATION_MESSAGE 
    102103            ); 
    103         else 
    104             download(layer.isSelected(), cbType.getType(), id, referrers.isSelected()); 
     104        else for (int i=0;i<ids.length;i++) { 
     105            download(layer.isSelected(), cbType.getType(), ids[i], referrers.isSelected()); 
     106            } 
    105107    } 
    106108 
    107109    /**