Changeset 13957 in josm
- Timestamp:
- 2018-06-18T21:53:59+02:00 (7 years ago)
- Location:
- trunk/src/org/openstreetmap/josm
- Files:
-
- 1 added
- 17 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/actions/CreateMultipolygonAction.java
r13486 r13957 168 168 } else if (multipolygonRelation.hasIncompleteMembers()) { 169 169 MainApplication.worker.submit(new DownloadRelationMemberTask(multipolygonRelation, 170 DownloadSelectedIncompleteMembersAction.buildSetOfIncompleteMembers(Collections.singleton(multipolygonRelation)), 170 Utils.filteredCollection( 171 DownloadSelectedIncompleteMembersAction.buildSetOfIncompleteMembers( 172 Collections.singleton(multipolygonRelation)), OsmPrimitive.class), 171 173 editLayer)); 172 174 } -
trunk/src/org/openstreetmap/josm/actions/OsmPrimitiveAction.java
r8512 r13957 11 11 * Interface used to enable/disable all primitive-related actions, even those registered by plugins. 12 12 * @since 5821 13 * @deprecated Use {@link IPrimitiveAction} instead 13 14 */ 15 @Deprecated 14 16 public interface OsmPrimitiveAction extends Action { 15 17 -
trunk/src/org/openstreetmap/josm/actions/relation/AbstractRelationAction.java
r13559 r13957 8 8 9 9 import org.openstreetmap.josm.Main; 10 import org.openstreetmap.josm.actions.OsmPrimitiveAction; 11 import org.openstreetmap.josm.data.osm.DataSet; 10 import org.openstreetmap.josm.actions.IPrimitiveAction; 12 11 import org.openstreetmap.josm.data.osm.DownloadPolicy; 13 import org.openstreetmap.josm.data.osm.OsmPrimitive; 14 import org.openstreetmap.josm.data.osm.Relation; 12 import org.openstreetmap.josm.data.osm.IPrimitive; 13 import org.openstreetmap.josm.data.osm.IRelation; 14 import org.openstreetmap.josm.data.osm.OsmData; 15 15 import org.openstreetmap.josm.io.OnlineResource; 16 16 import org.openstreetmap.josm.tools.SubclassFilteredCollection; … … 20 20 * to be disabled if the collection is empty 21 21 * @since 5793 22 * @since 13957 (signature) 22 23 */ 23 public abstract class AbstractRelationAction extends AbstractAction implements OsmPrimitiveAction {24 public abstract class AbstractRelationAction extends AbstractAction implements IPrimitiveAction { 24 25 /** relation collection */ 25 protected transient Collection< Relation> relations = Collections.<Relation>emptySet();26 protected transient Collection<IRelation<?>> relations = Collections.<IRelation<?>>emptySet(); 26 27 27 28 /** … … 30 31 * @return the relation contained in {@code primitives} 31 32 */ 32 protected static final Collection< Relation> getRelations(Collection<? extendsOsmPrimitive> primitives) {33 protected static final Collection<IRelation<?>> getRelations(Collection<? extends IPrimitive> primitives) { 33 34 if (primitives == null || primitives.isEmpty()) { 34 return Collections.< Relation>emptySet();35 return Collections.<IRelation<?>>emptySet(); 35 36 } else { 36 return new SubclassFilteredCollection<>(primitives, Relation.class::isInstance); 37 return new SubclassFilteredCollection<>(primitives, IRelation.class::isInstance); 37 38 } 38 39 } 39 40 40 41 @Override 41 public void setPrimitives(Collection<? extends OsmPrimitive> primitives) {42 public void setPrimitives(Collection<? extends IPrimitive> primitives) { 42 43 this.relations = getRelations(primitives); 43 44 updateEnabledState(); … … 55 56 return false; 56 57 } 57 DataSetds = relations.iterator().next().getDataSet();58 OsmData<?, ?, ?, ?> ds = relations.iterator().next().getDataSet(); 58 59 return !Main.isOffline(OnlineResource.OSM_API) 59 60 && ds != null && !ds.isLocked() && !DownloadPolicy.BLOCKED.equals(ds.getDownloadPolicy()); -
trunk/src/org/openstreetmap/josm/actions/relation/AddSelectionToRelations.java
r13925 r13957 14 14 import org.openstreetmap.josm.command.SequenceCommand; 15 15 import org.openstreetmap.josm.data.osm.DataSelectionListener; 16 import org.openstreetmap.josm.data.osm. DataSet;17 import org.openstreetmap.josm.data.osm.Osm Primitive;16 import org.openstreetmap.josm.data.osm.IPrimitive; 17 import org.openstreetmap.josm.data.osm.OsmData; 18 18 import org.openstreetmap.josm.data.osm.OsmUtils; 19 19 import org.openstreetmap.josm.data.osm.Relation; … … 23 23 import org.openstreetmap.josm.gui.util.GuiHelper; 24 24 import org.openstreetmap.josm.tools.ImageProvider; 25 import org.openstreetmap.josm.tools.Utils; 25 26 26 27 /** … … 40 41 public void actionPerformed(ActionEvent e) { 41 42 Collection<Command> cmds = new LinkedList<>(); 42 for (Relation orig : relations) { 43 for (Relation orig : Utils.filteredCollection(relations, Relation.class)) { 43 44 Command c = GenericRelationEditor.addPrimitivesToRelation(orig, MainApplication.getLayerManager().getActiveDataSet().getSelected()); 44 45 if (c != null) { … … 61 62 int size = relations.size(); 62 63 putValue(NAME, trn("Add selection to {0} relation", "Add selection to {0} relations", size, size)); 63 DataSetds = MainApplication.getLayerManager().getActiveDataSet();64 OsmData<?, ?, ?, ?> ds = MainApplication.getLayerManager().getActiveData(); 64 65 if (ds != null) { 65 66 selectionChanged(ds.getSelected()); … … 69 70 } 70 71 71 private void selectionChanged(final Collection<? extends OsmPrimitive> newSelection) {72 private void selectionChanged(final Collection<? extends IPrimitive> newSelection) { 72 73 GuiHelper.runInEDT(() -> setEnabled(newSelection != null && !newSelection.isEmpty() 73 74 && OsmUtils.isOsmCollectionEditable(relations))); -
trunk/src/org/openstreetmap/josm/actions/relation/DeleteRelationsAction.java
r13611 r13957 14 14 import org.openstreetmap.josm.gui.layer.OsmDataLayer; 15 15 import org.openstreetmap.josm.tools.ImageProvider; 16 import org.openstreetmap.josm.tools.Utils; 16 17 17 18 /** … … 46 47 if (!isEnabled()) 47 48 return; 48 deleteRelation(relations); 49 deleteRelation(Utils.filteredCollection(relations, Relation.class)); 49 50 } 50 51 -
trunk/src/org/openstreetmap/josm/actions/relation/DownloadMembersAction.java
r13486 r13957 8 8 import java.util.Collection; 9 9 10 import org.openstreetmap.josm.data.osm.OsmPrimitive; 10 import org.openstreetmap.josm.data.osm.IPrimitive; 11 import org.openstreetmap.josm.data.osm.Relation; 11 12 import org.openstreetmap.josm.gui.MainApplication; 12 13 import org.openstreetmap.josm.gui.dialogs.relation.DownloadRelationTask; 13 14 import org.openstreetmap.josm.tools.ImageProvider; 14 15 import org.openstreetmap.josm.tools.SubclassFilteredCollection; 16 import org.openstreetmap.josm.tools.Utils; 15 17 16 18 /** … … 33 35 public void actionPerformed(ActionEvent e) { 34 36 if (!isEnabled() || relations.isEmpty() || !MainApplication.isDisplayingMapView()) return; 35 MainApplication.worker.submit(new DownloadRelationTask(relations, MainApplication.getLayerManager().getEditLayer())); 37 MainApplication.worker.submit(new DownloadRelationTask( 38 Utils.filteredCollection(relations, Relation.class), MainApplication.getLayerManager().getEditLayer())); 36 39 } 37 40 38 41 @Override 39 public void setPrimitives(Collection<? extends OsmPrimitive> primitives) {42 public void setPrimitives(Collection<? extends IPrimitive> primitives) { 40 43 // selected non-new relations 41 44 this.relations = SubclassFilteredCollection.filter(getRelations(primitives), r -> !r.isNew()); -
trunk/src/org/openstreetmap/josm/actions/relation/DownloadSelectedIncompleteMembersAction.java
r13486 r13957 9 9 import java.util.Set; 10 10 11 import org.openstreetmap.josm.data.osm.IPrimitive; 12 import org.openstreetmap.josm.data.osm.IRelation; 11 13 import org.openstreetmap.josm.data.osm.OsmPrimitive; 12 14 import org.openstreetmap.josm.data.osm.Relation; … … 15 17 import org.openstreetmap.josm.tools.ImageProvider; 16 18 import org.openstreetmap.josm.tools.SubclassFilteredCollection; 19 import org.openstreetmap.josm.tools.Utils; 17 20 18 21 /** … … 22 25 public class DownloadSelectedIncompleteMembersAction extends AbstractRelationAction { 23 26 24 private transient Collection< OsmPrimitive> incompleteMembers;27 private transient Collection<IPrimitive> incompleteMembers; 25 28 26 29 /** … … 38 41 * @return The set of incomplete members of the given relations. 39 42 */ 40 public static Set< OsmPrimitive> buildSetOfIncompleteMembers(Collection<Relation> rels) {41 Set< OsmPrimitive> ret = new HashSet<>();42 for ( Relationr : rels) {43 public static Set<IPrimitive> buildSetOfIncompleteMembers(Collection<IRelation<?>> rels) { 44 Set<IPrimitive> ret = new HashSet<>(); 45 for (IRelation<?> r : rels) { 43 46 ret.addAll(SubclassFilteredCollection.filter(r.getIncompleteMembers(), osm -> !osm.isNew())); 44 47 } … … 50 53 if (!isEnabled() || relations.isEmpty() || !MainApplication.isDisplayingMapView()) return; 51 54 MainApplication.worker.submit(new DownloadRelationMemberTask( 52 relations, 53 incompleteMembers, 55 Utils.filteredCollection(relations, Relation.class), 56 Utils.filteredCollection(incompleteMembers, OsmPrimitive.class), 54 57 MainApplication.getLayerManager().getEditLayer())); 55 58 } 56 59 57 60 @Override 58 public void setPrimitives(Collection<? extends OsmPrimitive> primitives) {61 public void setPrimitives(Collection<? extends IPrimitive> primitives) { 59 62 // selected relations with incomplete members 60 this.relations = SubclassFilteredCollection.filter(getRelations(primitives), Relation::hasIncompleteMembers); 63 this.relations = SubclassFilteredCollection.filter(getRelations(primitives), IRelation::hasIncompleteMembers); 61 64 this.incompleteMembers = buildSetOfIncompleteMembers(relations); 62 65 updateEnabledState(); -
trunk/src/org/openstreetmap/josm/actions/relation/DuplicateRelationAction.java
r13453 r13957 6 6 import java.awt.event.ActionEvent; 7 7 8 import org.openstreetmap.josm.data.osm.IRelation; 8 9 import org.openstreetmap.josm.data.osm.Relation; 9 10 import org.openstreetmap.josm.gui.MainApplication; … … 45 46 if (!isEnabled() || relations.isEmpty()) 46 47 return; 47 Relation r = relations.iterator().next(); 48 duplicateRelationAndLaunchEditor(r); 48 IRelation<?> r = relations.iterator().next(); 49 if (r instanceof Relation) { 50 duplicateRelationAndLaunchEditor((Relation) r); 51 } 49 52 } 50 53 … … 52 55 protected void updateEnabledState() { 53 56 // only one selected relation can be edited 54 setEnabled(relations.size() == 1 && !relations.iterator().next().getDataSet().isLocked()); 57 setEnabled(relations.size() == 1 58 && relations.iterator().next() instanceof Relation 59 && !relations.iterator().next().getDataSet().isLocked()); 55 60 } 56 61 } -
trunk/src/org/openstreetmap/josm/actions/relation/EditRelationAction.java
r13611 r13957 13 13 14 14 import org.openstreetmap.josm.Main; 15 import org.openstreetmap.josm.data.osm.IRelation; 15 16 import org.openstreetmap.josm.data.osm.OsmPrimitive; 16 17 import org.openstreetmap.josm.data.osm.OsmUtils; … … 22 23 import org.openstreetmap.josm.spi.preferences.Config; 23 24 import org.openstreetmap.josm.tools.ImageProvider; 25 import org.openstreetmap.josm.tools.SubclassFilteredCollection; 26 import org.openstreetmap.josm.tools.Utils; 24 27 25 28 /** … … 71 74 @Override 72 75 public void actionPerformed(ActionEvent e) { 73 if (!isEnabled() || relations.isEmpty()) return; 74 if (relations.size() > Config.getPref().getInt("warn.open.maxrelations", 5) && 76 SubclassFilteredCollection<IRelation<?>, Relation> filteredRelations = Utils.filteredCollection(relations, Relation.class); 77 if (!isEnabled() || filteredRelations.isEmpty()) return; 78 if (filteredRelations.size() > Config.getPref().getInt("warn.open.maxrelations", 5) && 75 79 /* I18N english text for value 1 makes no real sense, never called for values <= maxrel (usually 5) */ 76 80 JOptionPane.OK_OPTION != JOptionPane.showConfirmDialog(Main.parent, 77 81 "<html>"+trn("You are about to open <b>{0}</b> different relation editor simultaneously.<br/>Do you want to continue?", 78 82 "You are about to open <b>{0}</b> different relation editors simultaneously.<br/>Do you want to continue?", 79 relations.size(),relations.size())+"</html>",83 filteredRelations.size(), filteredRelations.size())+"</html>", 80 84 tr("Confirmation"), JOptionPane.OK_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE)) { 81 85 return; 82 86 } 83 for (Relation r : relations) {87 for (Relation r : filteredRelations) { 84 88 launchEditor(r); 85 89 } … … 89 93 protected void updateEnabledState() { 90 94 boolean enabled = false; 91 if (OsmUtils.isOsmCollectionEditable(relations)) { 92 for (Relation r : relations) { 95 SubclassFilteredCollection<IRelation<?>, Relation> filteredRelations = Utils.filteredCollection(relations, Relation.class); 96 if (OsmUtils.isOsmCollectionEditable(filteredRelations)) { 97 for (Relation r : filteredRelations) { 93 98 if (!r.isDeleted()) { 94 99 enabled = true; -
trunk/src/org/openstreetmap/josm/actions/relation/ExportRelationToGpxAction.java
r13852 r13957 23 23 24 24 import org.openstreetmap.josm.actions.GpxExportAction; 25 import org.openstreetmap.josm.actions. OsmPrimitiveAction;25 import org.openstreetmap.josm.actions.IPrimitiveAction; 26 26 import org.openstreetmap.josm.data.gpx.GpxData; 27 27 import org.openstreetmap.josm.data.gpx.ImmutableGpxTrack; 28 28 import org.openstreetmap.josm.data.gpx.WayPoint; 29 import org.openstreetmap.josm.data.osm.IPrimitive; 29 30 import org.openstreetmap.josm.data.osm.Node; 30 import org.openstreetmap.josm.data.osm.OsmPrimitive;31 31 import org.openstreetmap.josm.data.osm.Relation; 32 32 import org.openstreetmap.josm.data.osm.RelationMember; … … 47 47 */ 48 48 public class ExportRelationToGpxAction extends GpxExportAction 49 implements OsmPrimitiveAction {49 implements IPrimitiveAction { 50 50 51 51 /** Enumeration of export variants */ … … 235 235 236 236 @Override 237 public void setPrimitives(Collection<? extends OsmPrimitive> primitives) {237 public void setPrimitives(Collection<? extends IPrimitive> primitives) { 238 238 relations = Collections.<Relation>emptySet(); 239 239 if (primitives != null && !primitives.isEmpty()) { -
trunk/src/org/openstreetmap/josm/actions/relation/SelectMembersAction.java
r13434 r13957 8 8 import java.util.Set; 9 9 10 import org.openstreetmap.josm.data.osm. OsmPrimitive;11 import org.openstreetmap.josm.data.osm.Relation; 10 import org.openstreetmap.josm.data.osm.IPrimitive; 11 import org.openstreetmap.josm.data.osm.IRelation; 12 12 import org.openstreetmap.josm.gui.MainApplication; 13 13 import org.openstreetmap.josm.tools.ImageProvider; … … 38 38 if (!isEnabled() || relations.isEmpty() || !MainApplication.isDisplayingMapView()) return; 39 39 40 Set< OsmPrimitive> members = new HashSet<>();41 for ( Relationr: relations) {40 Set<IPrimitive> members = new HashSet<>(); 41 for (IRelation<?> r: relations) { 42 42 members.addAll(r.getMemberPrimitivesList()); 43 43 } 44 44 if (add) { 45 MainApplication.getLayerManager().getActiveData Set().addSelected(members);45 MainApplication.getLayerManager().getActiveData().addSelected(members); 46 46 } else { 47 MainApplication.getLayerManager().getActiveData Set().setSelected(members);47 MainApplication.getLayerManager().getActiveData().setSelected(members); 48 48 } 49 49 } -
trunk/src/org/openstreetmap/josm/actions/relation/SelectRelationAction.java
r13434 r13957 6 6 import java.awt.event.ActionEvent; 7 7 8 import org.openstreetmap.josm.data.osm. DataSet;8 import org.openstreetmap.josm.data.osm.OsmData; 9 9 import org.openstreetmap.josm.gui.MainApplication; 10 10 import org.openstreetmap.josm.tools.ImageProvider; … … 34 34 public void actionPerformed(ActionEvent e) { 35 35 if (!isEnabled() || relations.isEmpty()) return; 36 DataSetds = MainApplication.getLayerManager().getActiveDataSet();36 OsmData<?, ?, ?, ?> ds = MainApplication.getLayerManager().getActiveData(); 37 37 if (ds == null) return; 38 38 if (add) { -
trunk/src/org/openstreetmap/josm/data/osm/IRelation.java
r13908 r13957 2 2 package org.openstreetmap.josm.data.osm; 3 3 4 import java.util.Collection; 5 import java.util.HashSet; 4 6 import java.util.List; 7 import java.util.Set; 8 9 import org.openstreetmap.josm.tools.Utils; 5 10 6 11 /** … … 93 98 return "multipolygon".equals(get("type")) || isBoundary(); 94 99 } 100 101 /** 102 * Returns an unmodifiable list of the {@link OsmPrimitive}s referred to by at least one member of this relation. 103 * @return an unmodifiable list of the primitives 104 * @since 13957 105 */ 106 default List<? extends IPrimitive> getMemberPrimitivesList() { 107 return Utils.transform(getMembers(), IRelationMember::getMember); 108 } 109 110 /** 111 * Replies a collection with the incomplete children this relation refers to. 112 * 113 * @return the incomplete children. Empty collection if no children are incomplete. 114 * @since 13957 115 */ 116 default Collection<? extends IPrimitive> getIncompleteMembers() { 117 Set<IPrimitive> ret = new HashSet<>(); 118 for (M rm : getMembers()) { 119 if (!rm.getMember().isIncomplete()) { 120 continue; 121 } 122 ret.add(rm.getMember()); 123 } 124 return ret; 125 } 95 126 } -
trunk/src/org/openstreetmap/josm/data/osm/OsmUtils.java
r13637 r13957 162 162 * @return {@code true} if the given collection is not empty and does not contain any primitive in a locked layer. 163 163 * @since 13611 164 * @since 13957 (signature) 164 165 */ 165 public static boolean isOsmCollectionEditable(Collection<? extends OsmPrimitive> collection) {166 public static boolean isOsmCollectionEditable(Collection<? extends IPrimitive> collection) { 166 167 return collection != null && !collection.isEmpty() 167 && collection.stream().map( OsmPrimitive::getDataSet).filter(Objects::nonNull).noneMatch(DataSet::isLocked);168 && collection.stream().map(IPrimitive::getDataSet).filter(Objects::nonNull).noneMatch(OsmData::isLocked); 168 169 } 169 170 } -
trunk/src/org/openstreetmap/josm/data/osm/Relation.java
r13908 r13957 405 405 * @return an unmodifiable list of the primitives 406 406 */ 407 @Override 407 408 public List<OsmPrimitive> getMemberPrimitivesList() { 408 409 return Utils.transform(getMembers(), RelationMember::getMember); … … 505 506 * @return the incomplete children. Empty collection if no children are incomplete. 506 507 */ 508 @Override 507 509 public Collection<OsmPrimitive> getIncompleteMembers() { 508 510 Set<OsmPrimitive> ret = new HashSet<>(); -
trunk/src/org/openstreetmap/josm/gui/PopupMenuHandler.java
r11386 r13957 13 13 import javax.swing.event.PopupMenuListener; 14 14 15 import org.openstreetmap.josm.actions. OsmPrimitiveAction;16 import org.openstreetmap.josm.data.osm. OsmPrimitive;15 import org.openstreetmap.josm.actions.IPrimitiveAction; 16 import org.openstreetmap.josm.data.osm.IPrimitive; 17 17 18 18 /** … … 23 23 24 24 // Set of enabled osm primitives actions 25 private final Set< OsmPrimitiveAction> primitiveActions = new HashSet<>();25 private final Set<IPrimitiveAction> primitiveActions = new HashSet<>(); 26 26 // Managed menu 27 27 private final JPopupMenu menu; … … 53 53 public JMenuItem addAction(Action a) { 54 54 if (a != null) { 55 if (a instanceof OsmPrimitiveAction) {56 primitiveActions.add(( OsmPrimitiveAction) a);55 if (a instanceof IPrimitiveAction) { 56 primitiveActions.add((IPrimitiveAction) a); 57 57 } 58 58 return menu.add(a); … … 69 69 public void removeAction(Action a) { 70 70 if (a != null) { 71 if (a instanceof OsmPrimitiveAction) {71 if (a instanceof IPrimitiveAction) { 72 72 primitiveActions.remove(a); 73 73 } … … 106 106 * @return All primitive actions that have been added. 107 107 * @see #addAction(Action) 108 * @since 13957 (signature) 108 109 */ 109 public Collection< OsmPrimitiveAction> getPrimitiveActions() {110 public Collection<IPrimitiveAction> getPrimitiveActions() { 110 111 return Collections.unmodifiableCollection(primitiveActions); 111 112 } … … 114 115 * Specifies the working set of primitives for all primitive actions. 115 116 * @param primitives The new working set of primitives. Can be null or empty 116 * @see OsmPrimitiveAction#setPrimitives 117 * @see IPrimitiveAction#setPrimitives 118 * @since 13957 (signature) 117 119 */ 118 public void setPrimitives(Collection<? extends OsmPrimitive> primitives) {119 for ( OsmPrimitiveAction action : primitiveActions) {120 public void setPrimitives(Collection<? extends IPrimitive> primitives) { 121 for (IPrimitiveAction action : primitiveActions) { 120 122 action.setPrimitives(primitives); 121 123 } -
trunk/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java
r13926 r13957 35 35 import org.openstreetmap.josm.Main; 36 36 import org.openstreetmap.josm.actions.ExpertToggleAction; 37 import org.openstreetmap.josm.actions. OsmPrimitiveAction;37 import org.openstreetmap.josm.actions.IPrimitiveAction; 38 38 import org.openstreetmap.josm.actions.relation.AddSelectionToRelations; 39 39 import org.openstreetmap.josm.actions.relation.DeleteRelationsAction; … … 50 50 import org.openstreetmap.josm.data.osm.DefaultNameFormatter; 51 51 import org.openstreetmap.josm.data.osm.IPrimitive; 52 import org.openstreetmap.josm.data.osm.IRelation; 53 import org.openstreetmap.josm.data.osm.OsmData; 52 54 import org.openstreetmap.josm.data.osm.OsmPrimitive; 53 55 import org.openstreetmap.josm.data.osm.Relation; … … 72 74 import org.openstreetmap.josm.gui.SideButton; 73 75 import org.openstreetmap.josm.gui.dialogs.relation.RelationEditor; 74 import org.openstreetmap.josm.gui.layer.Layer;75 76 import org.openstreetmap.josm.gui.layer.LayerManager.LayerAddEvent; 76 77 import org.openstreetmap.josm.gui.layer.LayerManager.LayerChangeListener; … … 79 80 import org.openstreetmap.josm.gui.layer.MainLayerManager.ActiveLayerChangeEvent; 80 81 import org.openstreetmap.josm.gui.layer.MainLayerManager.ActiveLayerChangeListener; 81 import org.openstreetmap.josm.gui.layer.OsmDataLayer;82 82 import org.openstreetmap.josm.gui.util.HighlightHelper; 83 83 import org.openstreetmap.josm.gui.widgets.CompileSearchTextDecorator; … … 90 90 import org.openstreetmap.josm.tools.Shortcut; 91 91 import org.openstreetmap.josm.tools.SubclassFilteredCollection; 92 import org.openstreetmap.josm.tools.Utils; 92 93 93 94 /** … … 100 101 implements DataSetListener, NavigatableComponent.ZoomChangeListener, ExpertToggleAction.ExpertModeChangeListener { 101 102 /** The display list. */ 102 private final JList< Relation> displaylist;103 private final JList<IRelation<?>> displaylist; 103 104 /** the list model used */ 104 105 private final RelationListModel model; … … 222 223 // inform all actions about list of relations they need 223 224 private void updateActionsRelationLists() { 224 List< Relation> sel = model.getSelectedRelations();225 List<IRelation<?>> sel = model.getSelectedRelations(); 225 226 popupMenuHandler.setPrimitives(sel); 226 227 … … 228 229 229 230 //update highlights 230 if (highlightEnabled && focused == displaylist && MainApplication.isDisplayingMapView() && highlightHelper.highlightOnly(sel)) { 231 if (highlightEnabled && focused == displaylist && MainApplication.isDisplayingMapView() 232 && highlightHelper.highlightOnly(Utils.filteredCollection(sel, Relation.class))) { 231 233 MainApplication.getMap().mapView.repaint(); 232 234 } … … 261 263 262 264 /** 263 * Initializes the relation list dialog from a layer. If <code>layer</code> is null264 * or if it isn't an {@link OsmDataLayer}the dialog is reset to an empty dialog.265 * Initializes the relation list dialog from a dataset. If <code>data</code> is null 266 * the dialog is reset to an empty dialog. 265 267 * Otherwise it is initialized with the list of non-deleted and visible relations 266 * in the layer'sdataset.268 * in the dataset. 267 269 * 268 * @param layer the layer. May be null. 269 */ 270 protected void initFromLayer(Layer layer) { 271 if (!(layer instanceof OsmDataLayer)) { 270 * @param data the dataset. May be null. 271 * @since 13957 272 */ 273 protected void initFromData(OsmData<?, ?, ?, ?> data) { 274 if (data == null) { 272 275 model.setRelations(null); 273 276 return; 274 277 } 275 OsmDataLayer l = (OsmDataLayer) layer; 276 model.setRelations(l.data.getRelations()); 278 model.setRelations(data.getRelations()); 277 279 model.updateTitle(); 278 280 updateActionsRelationLists(); … … 282 284 * @return The selected relation in the list 283 285 */ 284 private RelationgetSelected() {286 private IRelation<?> getSelected() { 285 287 if (model.getSize() == 1) { 286 288 displaylist.setSelectedIndex(0); … … 301 303 * Selects the relations in the list of relations. 302 304 * @param relations the relations to be selected 303 */ 304 public void selectRelations(Collection<Relation> relations) { 305 * @since 13957 (signature) 306 */ 307 public void selectRelations(Collection<? extends IRelation<?>> relations) { 305 308 if (relations == null || relations.isEmpty()) { 306 309 model.setSelectedRelations(null); … … 348 351 349 352 protected void editCurrentRelation() { 350 EditRelationAction.launchEditor(getSelected()); 353 IRelation<?> rel = getSelected(); 354 if (rel instanceof Relation) { 355 EditRelationAction.launchEditor((Relation) rel); 356 } 351 357 } 352 358 … … 412 418 * The list model for the list of relations displayed in the relation list dialog. 413 419 */ 414 private class RelationListModel extends AbstractListModel< Relation> {415 private final transient List< Relation> relations = new ArrayList<>();416 private transient List< Relation> filteredRelations;420 private class RelationListModel extends AbstractListModel<IRelation<?>> { 421 private final transient List<IRelation<?>> relations = new ArrayList<>(); 422 private transient List<IRelation<?>> filteredRelations; 417 423 private final DefaultListSelectionModel selectionModel; 418 424 private transient SearchCompiler.Match filter; … … 439 445 } 440 446 441 private boolean isValid( Relationr) {447 private boolean isValid(IRelation<?> r) { 442 448 return !r.isDeleted() && !r.isIncomplete(); 443 449 } 444 450 445 public void setRelations(Collection< Relation> relations) {446 List< Relation> sel = getSelectedRelations();451 public void setRelations(Collection<? extends IRelation<?>> relations) { 452 List<IRelation<?>> sel = getSelectedRelations(); 447 453 this.relations.clear(); 448 454 this.filteredRelations = null; … … 452 458 return; 453 459 } 454 for ( Relationr: relations) {460 for (IRelation<?> r: relations) { 455 461 if (isValid(r)) { 456 462 this.relations.add(r); … … 487 493 } 488 494 if (added) { 489 List< Relation> sel = getSelectedRelations();495 List<IRelation<?>> sel = getSelectedRelations(); 490 496 sort(); 491 497 updateFilteredRelations(); … … 520 526 } 521 527 if (size != relations.size()) { 522 List< Relation> sel = getSelectedRelations();528 List<IRelation<?>> sel = getSelectedRelations(); 523 529 sort(); 524 530 fireContentsChanged(this, 0, getSize()); … … 538 544 this.filter = filter; 539 545 updateFilteredRelations(); 540 List< Relation> sel = getSelectedRelations();546 List<IRelation<?>> sel = getSelectedRelations(); 541 547 fireContentsChanged(this, 0, getSize()); 542 548 setSelectedRelations(sel); … … 544 550 } 545 551 546 private List< Relation> getVisibleRelations() {552 private List<IRelation<?>> getVisibleRelations() { 547 553 return filteredRelations == null ? relations : filteredRelations; 548 554 } 549 555 550 private RelationgetVisibleRelation(int index) {556 private IRelation<?> getVisibleRelation(int index) { 551 557 if (index < 0 || index >= getVisibleRelations().size()) return null; 552 558 return getVisibleRelations().get(index); … … 554 560 555 561 @Override 556 public RelationgetElementAt(int index) {562 public IRelation<?> getElementAt(int index) { 557 563 return getVisibleRelation(index); 558 564 } … … 568 574 * 569 575 * @return the list of selected, non-new relations. 576 * @since 13957 (signature) 570 577 */ 571 public List< Relation> getSelectedRelations() {572 List< Relation> ret = new ArrayList<>();578 public List<IRelation<?>> getSelectedRelations() { 579 List<IRelation<?>> ret = new ArrayList<>(); 573 580 for (int i = 0; i < getSize(); i++) { 574 581 if (!selectionModel.isSelectedIndex(i)) { … … 584 591 * 585 592 * @param sel the list of selected relations 593 * @since 13957 (signature) 586 594 */ 587 public void setSelectedRelations(Collection< Relation> sel) {595 public void setSelectedRelations(Collection<? extends IRelation<?>> sel) { 588 596 selectionModel.setValueIsAdjusting(true); 589 597 selectionModel.clearSelection(); … … 592 600 resetFilter(); 593 601 } 594 for ( Relationr: sel) {602 for (IRelation<?> r: sel) { 595 603 Integer i = getVisibleRelationIndex(r); 596 604 if (i != null) { … … 602 610 } 603 611 604 private Integer getVisibleRelationIndex( Relationrel) {612 private Integer getVisibleRelationIndex(IRelation<?> rel) { 605 613 int i = getVisibleRelations().indexOf(rel); 606 614 if (i < 0) … … 655 663 public void popupMenuWillBecomeVisible(PopupMenuEvent e) { 656 664 for (JMenuItem mi: checkDisabled) { 657 mi.setVisible((( OsmPrimitiveAction) mi.getAction()).isEnabled());665 mi.setVisible(((IPrimitiveAction) mi.getAction()).isEnabled()); 658 666 659 667 Component sep = popupMenu.getComponent( … … 692 700 * Replies the list of selected relations. Empty list, if there are no selected relations. 693 701 * @return the list of selected, non-new relations. 694 */ 695 public Collection<Relation> getSelectedRelations() { 702 * @since 13957 (signature) 703 */ 704 public Collection<IRelation<?>> getSelectedRelations() { 696 705 return model.getSelectedRelations(); 697 706 } … … 725 734 @Override 726 735 public void relationMembersChanged(final RelationMembersChangedEvent event) { 727 List< Relation> sel = model.getSelectedRelations();736 List<IRelation<?>> sel = model.getSelectedRelations(); 728 737 model.sort(); 729 738 model.setSelectedRelations(sel); … … 737 746 return; 738 747 // trigger a sort of the relation list because the display name may have changed 739 List< Relation> sel = model.getSelectedRelations();748 List<IRelation<?>> sel = model.getSelectedRelations(); 740 749 model.sort(); 741 750 model.setSelectedRelations(sel); … … 745 754 @Override 746 755 public void dataChanged(DataChangedEvent event) { 747 initFrom Layer(MainApplication.getLayerManager().getActiveDataLayer());756 initFromData(MainApplication.getLayerManager().getActiveData()); 748 757 } 749 758
Note:
See TracChangeset
for help on using the changeset viewer.