001// License: GPL. For details, see LICENSE file. 002package org.openstreetmap.josm.data.osm; 003 004import java.util.Collection; 005import java.util.Collections; 006import java.util.Optional; 007 008import org.openstreetmap.josm.actions.mapmode.DrawAction; 009import org.openstreetmap.josm.gui.MainApplication; 010import org.openstreetmap.josm.gui.MapFrame; 011import org.openstreetmap.josm.gui.layer.OsmDataLayer; 012 013/** 014 * Global OSM dataset registry. 015 * @since 14143 016 */ 017public final class OsmDataManager implements IOsmDataManager { 018 019 private OsmDataManager() { 020 // hide constructor 021 } 022 023 private static class InstanceHolder { 024 static final OsmDataManager INSTANCE = new OsmDataManager(); 025 } 026 027 /** 028 * Returns the unique instance. 029 * @return the unique instance 030 */ 031 public static OsmDataManager getInstance() { 032 return InstanceHolder.INSTANCE; 033 } 034 035 @Override 036 public Collection<OsmPrimitive> getInProgressSelection() { 037 MapFrame map = MainApplication.getMap(); 038 if (map != null && map.mapMode instanceof DrawAction) { 039 return ((DrawAction) map.mapMode).getInProgressSelection(); 040 } else { 041 DataSet ds = MainApplication.getLayerManager().getActiveDataSet(); 042 if (ds == null) return Collections.emptyList(); 043 return ds.getSelected(); 044 } 045 } 046 047 @Override 048 public Collection<? extends IPrimitive> getInProgressISelection() { 049 MapFrame map = MainApplication.getMap(); 050 if (map != null && map.mapMode instanceof DrawAction) { 051 return ((DrawAction) map.mapMode).getInProgressSelection(); 052 } else { 053 OsmData<?, ?, ?, ?> ds = MainApplication.getLayerManager().getActiveData(); 054 if (ds == null) return Collections.emptyList(); 055 return ds.getSelected(); 056 } 057 } 058 059 @Override 060 public DataSet getEditDataSet() { 061 return MainApplication.getLayerManager().getEditDataSet(); 062 } 063 064 @Override 065 public DataSet getActiveDataSet() { 066 return MainApplication.getLayerManager().getActiveDataSet(); 067 } 068 069 @Override 070 public void setActiveDataSet(DataSet ds) { 071 Optional<OsmDataLayer> layer = MainApplication.getLayerManager().getLayersOfType(OsmDataLayer.class).stream() 072 .filter(l -> l.data.equals(ds)).findFirst(); 073 if (layer.isPresent()) { 074 MainApplication.getLayerManager().setActiveLayer(layer.get()); 075 } 076 } 077 078 @Override 079 public boolean containsDataSet(DataSet ds) { 080 return MainApplication.getLayerManager().getLayersOfType(OsmDataLayer.class).stream().anyMatch(l -> l.data.equals(ds)); 081 } 082}