001// License: GPL. For details, see LICENSE file. 002package org.openstreetmap.josm.gui.layer.geoimage; 003 004import static org.openstreetmap.josm.tools.I18n.tr; 005 006import org.openstreetmap.josm.data.gpx.GpxData; 007import org.openstreetmap.josm.data.gpx.GpxDataContainer; 008import org.openstreetmap.josm.data.osm.DownloadPolicy; 009import org.openstreetmap.josm.data.osm.UploadPolicy; 010import org.openstreetmap.josm.data.osm.event.AbstractDatasetChangedEvent; 011import org.openstreetmap.josm.gui.layer.Layer; 012import org.openstreetmap.josm.gui.layer.OsmDataLayer; 013import org.openstreetmap.josm.gui.layer.gpx.ConvertFromGpxLayerAction; 014 015/** 016 * A support layer meant to be modified by the user to provide real-time images correlation. 017 * @since 18078 018 */ 019public final class CorrelationSupportLayer extends OsmDataLayer implements GpxDataContainer { 020 021 private static final String CORRELATION_PREFIX = "correlation:"; 022 023 private final GpxData gpxData = new GpxData(); 024 025 /** 026 * Constructs a new {@code CorrelationSupportLayer} with a default name 027 * @param fauxGpxData Faux GPX data to be modified using OSM editing tools 028 */ 029 public CorrelationSupportLayer(GpxData fauxGpxData) { 030 this(fauxGpxData, tr("Correlation support layer")); 031 } 032 033 /** 034 * Constructs a new {@code CorrelationSupportLayer} with a given name 035 * @param fauxGpxData Faux GPX data to be modified using OSM editing tools 036 * @param name layer name 037 */ 038 public CorrelationSupportLayer(GpxData fauxGpxData, String name) { 039 super(ConvertFromGpxLayerAction.convert(fauxGpxData, "list", CORRELATION_PREFIX), name, null); 040 data.setDownloadPolicy(DownloadPolicy.BLOCKED); 041 data.setUploadPolicy(UploadPolicy.BLOCKED); 042 rebuildGpxData(); 043 } 044 045 @Override 046 public GpxData toGpxData() { 047 GpxData gpxData = new GpxData(); 048 fillGpxData(gpxData, data, getAssociatedFile(), CORRELATION_PREFIX); 049 return gpxData; 050 } 051 052 @Override 053 public CorrelationSupportLayer duplicate(String newName) { 054 return new CorrelationSupportLayer(gpxData, newName); 055 } 056 057 private void rebuildGpxData() { 058 gpxData.beginUpdate(); 059 try { 060 gpxData.clear(); 061 fillGpxData(gpxData, data, null, CORRELATION_PREFIX); 062 } finally { 063 gpxData.endUpdate(); 064 } 065 } 066 067 @Override 068 public GpxData getGpxData() { 069 return gpxData; 070 } 071 072 @Override 073 public void processDatasetEvent(AbstractDatasetChangedEvent event) { 074 invalidate(); 075 rebuildGpxData(); 076 } 077 078 @Override 079 protected void setRequiresSaveToFile(boolean newValue) { 080 // Do nothing 081 } 082 083 @Override 084 protected void setRequiresUploadToServer(boolean newValue) { 085 // Do nothing 086 } 087 088 @Override 089 public boolean isMergable(Layer other) { 090 return false; 091 } 092 093 @Override 094 public boolean isDownloadable() { 095 return false; 096 } 097 098 @Override 099 public boolean isUploadable() { 100 return false; 101 } 102 103 @Override 104 public boolean requiresUploadToServer() { 105 return false; 106 } 107 108 @Override 109 public boolean requiresSaveToFile() { 110 return false; 111 } 112 113 @Override 114 public boolean isSavable() { 115 return false; 116 } 117}