Ticket #18494: 18494.2.patch
| File 18494.2.patch, 4.9 KB (added by , 6 years ago) |
|---|
-
src/org/openstreetmap/josm/actions/downloadtasks/DownloadGpsTask.java
15 15 import org.openstreetmap.josm.data.Bounds; 16 16 import org.openstreetmap.josm.data.Bounds.ParseMethod; 17 17 import org.openstreetmap.josm.data.ProjectionBounds; 18 import org.openstreetmap.josm.data.gpx.GpxConstants; 18 19 import org.openstreetmap.josm.data.gpx.GpxData; 19 20 import org.openstreetmap.josm.gui.MainApplication; 20 21 import org.openstreetmap.josm.gui.PleaseWaitRunnable; … … 43 44 private DownloadTask downloadTask; 44 45 private GpxLayer gpxLayer; 45 46 46 protected String newLayerName;47 protected String url; 47 48 48 49 @Override 49 50 public String[] getPatterns() { … … 67 68 @Override 68 69 public Future<?> loadUrl(DownloadParams settings, String url, ProgressMonitor progressMonitor) { 69 70 CheckParameterUtil.ensureParameterNotNull(url, "url"); 71 this.url = url; 70 72 final Optional<String> mappedUrl = Stream.of(GpxUrlPattern.USER_TRACE_ID, GpxUrlPattern.EDIT_TRACE_ID) 71 73 .map(p -> Pattern.compile(p.pattern()).matcher(url)) 72 74 .filter(Matcher::matches) … … 80 82 .anyMatch(p -> url.matches(p.pattern()))) { 81 83 downloadTask = new DownloadTask(settings, 82 84 new OsmServerLocationReader(url), progressMonitor); 83 // Extract .gpx filename from URL to set the new layer name84 Matcher matcher = Pattern.compile(GpxUrlPattern.EXTERNAL_GPX_FILE.pattern()).matcher(url);85 newLayerName = matcher.matches() ? matcher.group(1) : null;86 85 // We need submit instead of execute so we can wait for it to finish and get the error 87 86 // message if necessary. If no one calls getErrorMessage() it just behaves like execute. 88 87 return MainApplication.worker.submit(downloadTask); … … 138 137 rememberDownloadedData(rawData); 139 138 if (rawData == null) 140 139 return; 141 String name = newLayerName != null ? newLayerName : tr("Downloaded GPX Data");140 String name = getLayerName(); 142 141 143 142 GpxImporterData layers = GpxImporter.loadLayers(rawData, reader.isGpxParsedProperly(), name, 144 143 tr("Markers from {0}", name)); … … 150 149 layers.getPostLayerTask().run(); 151 150 } 152 151 152 private String getLayerName() { 153 final String name; 154 // Extract .gpx filename from URL to set the new layer name 155 Matcher matcher = Pattern.compile(GpxUrlPattern.EXTERNAL_GPX_FILE.pattern()).matcher(url); 156 final String newLayerName = matcher.matches() ? matcher.group(1) : null; 157 158 if (Config.getPref().getBoolean("gpx.prefermetadataname", false)) { 159 if (rawData != null && rawData.getString(GpxConstants.META_NAME) != null 160 && !rawData.getString(GpxConstants.META_NAME).trim().isEmpty()) { 161 name = rawData.getString(GpxConstants.META_NAME); 162 } else if (newLayerName != null) { 163 name = newLayerName; 164 } else { 165 name = tr("Downloaded GPX Data"); 166 } 167 } else { 168 if (newLayerName != null) { 169 name = newLayerName; 170 } else if (rawData != null && rawData.getString(GpxConstants.META_NAME) != null 171 && !rawData.getString(GpxConstants.META_NAME).trim().isEmpty()) { 172 name = rawData.getString(GpxConstants.META_NAME); 173 } else { 174 name = tr("Downloaded GPX Data"); 175 } 176 } 177 return name; 178 } 179 153 180 private <L extends Layer> L addOrMergeLayer(L layer, L mergeLayer) { 154 181 if (layer == null) return null; 155 182 if (newLayer || mergeLayer == null) { -
src/org/openstreetmap/josm/gui/layer/GpxLayer.java
106 106 * @param isLocal whether data is attached to a local file 107 107 */ 108 108 public GpxLayer(GpxData d, String name, boolean isLocal) { 109 super( d.getString(GpxConstants.META_NAME));109 super(name); 110 110 data = d; 111 111 data.addWeakChangeListener(dataChangeListener); 112 112 trackVisibility = new boolean[data.getTracks().size()]; 113 113 Arrays.fill(trackVisibility, true); 114 setName(name);115 114 isLocalFile = isLocal; 116 115 ExpertToggleAction.addExpertModeChangeListener(this, true); 117 116 }
