kopia lustrzana https://github.com/JOSM/MapWithAI
This allows for continuous download of areas
Downloading data from OSM will trigger a download of MapWithAI data, if continous download is enabled (per MapWithAI layer basis, don't currently want to create another pref key). Signed-off-by: Taylor Smock <taylor.smock@kaart.com>pull/1/head
rodzic
17959a4020
commit
4b0a07bb2f
|
@ -112,7 +112,6 @@ compile against min JOSM:
|
|||
- ./gradlew compileJava_minJosm
|
||||
dependencies:
|
||||
- assemble
|
||||
allow_failure: true
|
||||
|
||||
compile against latest JOSM:
|
||||
stage: test
|
||||
|
|
|
@ -127,6 +127,7 @@ jacocoTestCoverageVerification {
|
|||
|
||||
josm {
|
||||
manifest {
|
||||
oldVersionDownloadLink 15542, "v1.0.3", new URL("https://gokaart.gitlab.io/JOSM_MapWithAI/dist/v1.0.3/mapwithai.jar")
|
||||
oldVersionDownloadLink 15233, "v0.2.9", new URL("https://gokaart.gitlab.io/JOSM_MapWithAI/dist/v0.2.9/mapwithai.jar")
|
||||
}
|
||||
i18n {
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
# The minimum JOSM version this plugin is compatible with (can be any numeric version
|
||||
plugin.main.version = 15542
|
||||
plugin.main.version = 15609
|
||||
# The JOSM version this plugin is currently compiled against
|
||||
# Please make sure this version is available at https://josm.openstreetmap.de/download
|
||||
# The special values "latest" and "tested" are also possible here, but not recommended.
|
||||
plugin.compile.version = 15603
|
||||
plugin.compile.version = 15609
|
||||
plugin.canloadatruntime = true
|
||||
plugin.author = Taylor Smock <incoming+gokaart/JOSM_MapWithAI@incoming.gitlab.com>
|
||||
plugin.class = org.openstreetmap.josm.plugins.mapwithai.MapWithAIPlugin
|
||||
|
|
|
@ -17,7 +17,6 @@ import javax.swing.JMenu;
|
|||
import javax.swing.JMenuItem;
|
||||
|
||||
import org.openstreetmap.josm.actions.JosmAction;
|
||||
import org.openstreetmap.josm.data.Version;
|
||||
import org.openstreetmap.josm.data.validation.OsmValidator;
|
||||
import org.openstreetmap.josm.gui.MainApplication;
|
||||
import org.openstreetmap.josm.gui.MainMenu;
|
||||
|
@ -27,6 +26,7 @@ import org.openstreetmap.josm.gui.preferences.PreferenceSetting;
|
|||
import org.openstreetmap.josm.io.remotecontrol.RequestProcessor;
|
||||
import org.openstreetmap.josm.plugins.Plugin;
|
||||
import org.openstreetmap.josm.plugins.PluginInformation;
|
||||
import org.openstreetmap.josm.plugins.mapwithai.backend.DownloadListener;
|
||||
import org.openstreetmap.josm.plugins.mapwithai.backend.MapWithAIAction;
|
||||
import org.openstreetmap.josm.plugins.mapwithai.backend.MapWithAIDataUtils;
|
||||
import org.openstreetmap.josm.plugins.mapwithai.backend.MapWithAILayer;
|
||||
|
@ -160,8 +160,7 @@ public final class MapWithAIPlugin extends Plugin implements Destroyable {
|
|||
|
||||
destroyables.forEach(Destroyable::destroy);
|
||||
DownloadDialog.removeDownloadSource(mapWithAIDownloadReader);
|
||||
if (Version.getInstance().getVersion() >= 15603) {
|
||||
OsmValidator.removeTest(RoutingIslandsTest.class);
|
||||
}
|
||||
OsmValidator.removeTest(RoutingIslandsTest.class);
|
||||
DownloadListener.destroyAll();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,65 @@
|
|||
// License: GPL. For details, see LICENSE file.
|
||||
package org.openstreetmap.josm.plugins.mapwithai.backend;
|
||||
|
||||
import java.lang.ref.WeakReference;
|
||||
import java.util.Collection;
|
||||
import java.util.HashSet;
|
||||
import java.util.Objects;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.openstreetmap.josm.data.Bounds;
|
||||
import org.openstreetmap.josm.data.osm.DataSet;
|
||||
import org.openstreetmap.josm.data.osm.DataSourceChangeEvent;
|
||||
import org.openstreetmap.josm.data.osm.DataSourceListener;
|
||||
import org.openstreetmap.josm.data.osm.event.DataSourceAddedEvent;
|
||||
import org.openstreetmap.josm.tools.Destroyable;
|
||||
|
||||
/**
|
||||
* This class listens for download events, and then gets new data
|
||||
*
|
||||
* @author Taylor Smock
|
||||
*
|
||||
*/
|
||||
public final class DownloadListener implements DataSourceListener, Destroyable {
|
||||
|
||||
private WeakReference<DataSet> ds;
|
||||
private static final Collection<DownloadListener> LISTENERS = new HashSet<>();
|
||||
|
||||
public DownloadListener(DataSet dataSet) {
|
||||
ds = new WeakReference<>(Objects.requireNonNull(dataSet, "DataSet cannot be null"));
|
||||
ds.get().addDataSourceListener(this);
|
||||
LISTENERS.add(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dataSourceChange(DataSourceChangeEvent event) {
|
||||
if (event instanceof DataSourceAddedEvent) {
|
||||
MapWithAILayer layer = MapWithAIDataUtils.getLayer(false);
|
||||
if (layer == null) {
|
||||
destroy();
|
||||
return;
|
||||
}
|
||||
if (layer.downloadContinuous()) {
|
||||
MapWithAIDataUtils.getMapWithAIData(layer, event.getAdded().stream().map(ev -> ev.bounds)
|
||||
.map(Bounds::toBBox).collect(Collectors.toList()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void destroy() {
|
||||
if (ds.get() != null) {
|
||||
// Should be added, so no exception should be thrown
|
||||
ds.get().removeDataSourceListener(this);
|
||||
ds.clear();
|
||||
LISTENERS.remove(this);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Destroy all download listeners for MapWithAI
|
||||
*/
|
||||
public static void destroyAll() {
|
||||
LISTENERS.forEach(DownloadListener::destroy);
|
||||
}
|
||||
}
|
|
@ -47,6 +47,7 @@ public class MapWithAIAction extends JosmAction {
|
|||
.collect(Collectors.toList());
|
||||
final OsmDataLayer layer = getOsmLayer(osmLayers);
|
||||
if ((layer != null) && MapWithAIDataUtils.getMapWithAIData(MapWithAIDataUtils.getLayer(true), layer)) {
|
||||
new DownloadListener(layer.getDataSet());
|
||||
final Notification notification = createMessageDialog();
|
||||
if (notification != null) {
|
||||
notification.show();
|
||||
|
|
|
@ -3,7 +3,10 @@ package org.openstreetmap.josm.plugins.mapwithai.backend;
|
|||
|
||||
import static org.openstreetmap.josm.tools.I18n.tr;
|
||||
|
||||
import java.awt.Component;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
@ -11,8 +14,10 @@ import java.util.concurrent.locks.Lock;
|
|||
import java.util.concurrent.locks.ReentrantLock;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import javax.swing.AbstractAction;
|
||||
import javax.swing.Action;
|
||||
import javax.swing.Icon;
|
||||
import javax.swing.JCheckBoxMenuItem;
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.SwingConstants;
|
||||
|
@ -25,6 +30,7 @@ import org.openstreetmap.josm.data.osm.DownloadPolicy;
|
|||
import org.openstreetmap.josm.data.osm.OsmPrimitive;
|
||||
import org.openstreetmap.josm.data.osm.UploadPolicy;
|
||||
import org.openstreetmap.josm.gui.MainApplication;
|
||||
import org.openstreetmap.josm.gui.layer.Layer;
|
||||
import org.openstreetmap.josm.gui.layer.MainLayerManager.ActiveLayerChangeEvent;
|
||||
import org.openstreetmap.josm.gui.layer.MainLayerManager.ActiveLayerChangeListener;
|
||||
import org.openstreetmap.josm.gui.layer.OsmDataLayer;
|
||||
|
@ -43,6 +49,7 @@ public class MapWithAILayer extends OsmDataLayer implements ActiveLayerChangeLis
|
|||
private Integer maximumAddition;
|
||||
private String url;
|
||||
private Boolean switchLayers;
|
||||
private boolean continuousDownload;
|
||||
private final Lock lock;
|
||||
|
||||
/**
|
||||
|
@ -114,7 +121,12 @@ public class MapWithAILayer extends OsmDataLayer implements ActiveLayerChangeLis
|
|||
public Action[] getMenuEntries() {
|
||||
final List<Action> actions = Arrays.asList(super.getMenuEntries()).stream()
|
||||
.filter(action -> !(action instanceof LayerSaveAction) && !(action instanceof LayerSaveAsAction))
|
||||
.collect(Collectors.toList());
|
||||
.collect(Collectors.toCollection(ArrayList::new));
|
||||
if (actions.isEmpty()) {
|
||||
actions.add(new ContinuousDownloadAction(this));
|
||||
} else {
|
||||
actions.add(actions.size() - 2, new ContinuousDownloadAction(this));
|
||||
}
|
||||
return actions.toArray(new Action[0]);
|
||||
}
|
||||
|
||||
|
@ -205,4 +217,41 @@ public class MapWithAILayer extends OsmDataLayer implements ActiveLayerChangeLis
|
|||
SwingUtilities.invokeLater(() -> getDataSet().setSelected(selection));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return {@code true} indicates that we should attempt to keep it in sync with
|
||||
* the data layer(s)
|
||||
*/
|
||||
public boolean downloadContinuous() {
|
||||
return continuousDownload;
|
||||
}
|
||||
|
||||
private class ContinuousDownloadAction extends AbstractAction implements LayerAction {
|
||||
private static final long serialVersionUID = -3528632887550700527L;
|
||||
private final MapWithAILayer layer;
|
||||
|
||||
public ContinuousDownloadAction(MapWithAILayer layer) {
|
||||
super(tr("Continuous download"));
|
||||
new ImageProvider("download").getResource().attachImageIcon(this, true);
|
||||
this.layer = layer;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
layer.continuousDownload = !layer.continuousDownload;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean supportLayers(List<Layer> layers) {
|
||||
return layers.stream().allMatch(MapWithAILayer.class::isInstance);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Component createMenuComponent() {
|
||||
JCheckBoxMenuItem item = new JCheckBoxMenuItem(this);
|
||||
item.setSelected(layer.continuousDownload);
|
||||
return item;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
Ładowanie…
Reference in New Issue