Ticket #16543: directdownload.patch

File directdownload.patch, 8.1 KB (added by reubot, 6 years ago)
  • src/org/openstreetmap/josm/plugins/directdownload/DirectDownload.java

     
    44import static org.openstreetmap.josm.tools.I18n.tr;
    55
    66import java.awt.event.ActionEvent;
     7import java.util.ArrayList;
     8import java.util.HashMap;
    79
    810import org.openstreetmap.josm.Main;
    911import org.openstreetmap.josm.actions.JosmAction;
    1012import org.openstreetmap.josm.data.gpx.GpxData;
     13import org.openstreetmap.josm.data.gpx.GpxTrack;
     14import org.openstreetmap.josm.data.gpx.GpxTrackSegment;
     15import org.openstreetmap.josm.data.gpx.GpxConstants;
     16import org.openstreetmap.josm.data.gpx.ImmutableGpxTrack;
    1117import org.openstreetmap.josm.gui.MainApplication;
    1218import org.openstreetmap.josm.gui.MainMenu;
    1319import org.openstreetmap.josm.gui.layer.GpxLayer;
     
    1622import org.openstreetmap.josm.plugins.PluginInformation;
    1723
    1824public class DirectDownload extends Plugin {
     25
    1926    private DownloadAction openaction;
    2027
    2128    /**
     
    4148            DownloadDataGui go = new DownloadDataGui();
    4249            go.setVisible(true);
    4350
    44             UserTrack track = go.getSelectedUserTrack();
     51            ArrayList<UserTrack> tracks = go.getSelectedUserTracks();
    4552
    46             if (!((go.getValue() == 1) && (track != null))) {
     53            if (!((go.getValue() == 1) && (tracks != null))) {
    4754                return;
    4855            }
    4956
    50             final GpxData data = new GpxServerReader().loadGpx(Long.parseLong(track.id));
    51             if (data == null) {
    52                 return;
    53             }
    54             final GpxLayer gpxLayer = new GpxLayer(data);
     57            for (UserTrack track: tracks) {
    5558
    56             if (data.hasRoutePoints() || data.hasTrackPoints()) {
    57                 MainApplication.getLayerManager().addLayer(gpxLayer);
    58             }
     59                GpxData data = new GpxServerReader().loadGpx(Long.parseLong(track.id));
     60                if (data == null) {
     61                    return;
     62                }
    5963
    60             if (Main.pref.getBoolean("marker.makeautomarkers", true) && !data.waypoints.isEmpty()) {
    61                 MarkerLayer ml = new MarkerLayer(data, tr("Markers from {0}", track.filename), null, gpxLayer);
    62                 if (ml.data.size() > 0) {
    63                     MainApplication.getLayerManager().addLayer(ml);
     64                for (GpxTrack trk : data.getTracks()) {
     65                    HashMap<String, Object> attrib = new HashMap<String, Object>(trk.getAttributes());
     66                    if (!trk.getAttributes().containsKey(GpxConstants.GPX_NAME)) {
     67                        System.out.println(track.filename);
     68                        attrib.put(GpxConstants.GPX_NAME, track.filename);
     69                    }
     70                    if (!trk.getAttributes().containsKey(GpxConstants.GPX_DESC)) {
     71                        System.out.println(track.description);
     72                        attrib.put(GpxConstants.GPX_DESC, track.description);
     73                    }
     74                    // replace the existing trace in the unmodifiable tracks
     75                    data.removeTrack(trk);
     76                    trk = new ImmutableGpxTrack(new ArrayList<GpxTrackSegment>(trk.getSegments()), attrib);
     77                    data.addTrack(trk);
    6478                }
     79
     80                final GpxLayer gpxLayer = new GpxLayer(data, (track.filename + " " + track.description).trim());
     81
     82                if (data.hasRoutePoints() || data.hasTrackPoints()) {
     83                    MainApplication.getLayerManager().addLayer(gpxLayer);
     84                }
     85
     86                if (Main.pref.getBoolean("marker.makeautomarkers", true) && !data.waypoints.isEmpty()) {
     87                    MarkerLayer ml = new MarkerLayer(data, tr("Markers from {0}", track.filename), null, gpxLayer);
     88                    if (ml.data.size() > 0) {
     89                        MainApplication.getLayerManager().addLayer(ml);
     90                    }
     91                }
    6592            }
    6693        }
    6794    }
  • src/org/openstreetmap/josm/plugins/directdownload/DownloadDataGui.java

     
    4747        columnmodel = new NamedResultTableColumnModel();
    4848        tblSearchResults = new JTable(model, columnmodel);
    4949        tblSearchResults.setSelectionModel(selectionModel);
    50         tblSearchResults.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
     50        tblSearchResults.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
    5151        JScrollPane scrollPane = new JScrollPane(tblSearchResults);
    52         scrollPane.setPreferredSize(new Dimension(800,300));
     52        scrollPane.setPreferredSize(new Dimension(800, 300));
    5353        panel.add(scrollPane, BorderLayout.CENTER);
    5454
    5555    model.setData(new UserTrackReader().getTrackList());
     
    8383            if (data == null) {
    8484                this.data.clear();
    8585            } else {
    86                 this.data  =new ArrayList<>(data);
     86                this.data = new ArrayList<>(data);
    8787            }
    8888            fireTableDataChanged();
    8989        }
    9090
     91        public ArrayList<UserTrack> getDataArrayList() {
     92            return data;
     93        }
     94
    9195        @Override
    9296        public boolean isCellEditable(int row, int column) {
    9397            return false;
     
    100104        }
    101105    }
    102106
     107    public ArrayList<UserTrack> getSelectedUserTracks() {
     108        ArrayList<UserTrack> DataArray = model.getDataArrayList();
     109        int[] selected = tblSearchResults.getSelectedRows();
     110        ArrayList<UserTrack> selectedTracks = new ArrayList<>(selected.length);
     111        for (int i = 0; i < selected.length; i++) {
     112            selectedTracks.add(DataArray.get(selected[i]));
     113        }
     114        return selectedTracks;
     115    }
     116
    103117    public UserTrack getSelectedUserTrack() {
    104118        return model.getSelectedUserTrack();
    105119    }
     
    134148            addColumn(col);
    135149
    136150            // column 3 - tags
    137         /*
     151
    138152            col = new TableColumn(3);
    139153            col.setHeaderValue(tr("Tags"));
    140154            col.setResizable(true);
     
    141155            col.setPreferredWidth(100);
    142156            col.setCellRenderer(renderer);
    143157            addColumn(col);
    144         */
     158
    145159        }
    146160
    147161        public NamedResultTableColumnModel() {
     
    153167
    154168        public NamedResultCellRenderer() {
    155169            setOpaque(true);
    156             setBorder(BorderFactory.createEmptyBorder(2,2,2,2));
     170            setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));
    157171        }
    158172
    159173        protected void reset() {
     
    172186        }
    173187
    174188        @Override
    175                 public Component getTableCellRendererComponent(JTable table, Object value,
     189        public Component getTableCellRendererComponent(JTable table, Object value,
    176190                boolean isSelected, boolean hasFocus, int row, int column) {
    177191
    178192            reset();
     
    190204            case 2:
    191205                setText(sr.description);
    192206                break;
    193         /*
     207
    194208            case 3:
    195209                setText(sr.tags);
    196210                break;
    197         */
     211
    198212            }
    199213            return this;
    200214        }
  • src/org/openstreetmap/josm/plugins/directdownload/UserTrackReader.java

     
    8989            if (qName.equals("description")) {
    9090                data.getFirst().description = cdata;
    9191            }
    92             /*
     92
    9393            else if (qName.equals("tag")) {
    94             data.getFirst().tags = cdata;
    95             cdata = new String();
     94                data.getFirst().tags = cdata;
     95                cdata = new String();
    9696            }
    97             */
     97
    9898        }
    9999
    100100        public List<UserTrack> getResult() {