Ticket #6251: mutidownload.patch

File mutidownload.patch, 3.2 KB (added by akks, 10 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    /**