// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.gui.dialogs.relation.actions; import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.openstreetmap.josm.data.osm.OsmPrimitive; import org.openstreetmap.josm.data.osm.Relation; import org.openstreetmap.josm.gui.ConditionalOptionPaneUtil; import org.openstreetmap.josm.gui.dialogs.relation.GenericRelationEditor; import org.openstreetmap.josm.gui.dialogs.relation.GenericRelationEditor.AddAbortException; import org.openstreetmap.josm.gui.dialogs.relation.MemberTable; import org.openstreetmap.josm.gui.dialogs.relation.MemberTableModel; import org.openstreetmap.josm.gui.dialogs.relation.IRelationEditor; import org.openstreetmap.josm.gui.dialogs.relation.SelectionTable; import org.openstreetmap.josm.gui.dialogs.relation.SelectionTableModel; import org.openstreetmap.josm.gui.layer.OsmDataLayer; /** * Abstract superclass of "Add from selection" actions. * @since 9496 */ abstract class AddFromSelectionAction extends AbstractRelationEditorAction { protected final SelectionTable selectionTable; protected final SelectionTableModel selectionTableModel; protected AddFromSelectionAction(MemberTable memberTable, MemberTableModel memberTableModel, SelectionTable selectionTable, SelectionTableModel selectionTableModel, String actionMapKey, OsmDataLayer layer, IRelationEditor editor) { super(memberTable, memberTableModel, actionMapKey, layer, editor); this.selectionTable = selectionTable; this.selectionTableModel = selectionTableModel; } protected boolean isPotentialDuplicate(OsmPrimitive primitive) { return memberTableModel.hasMembersReferringTo(Collections.singleton(primitive)); } protected List<OsmPrimitive> filterConfirmedPrimitives(List<OsmPrimitive> primitives) throws AddAbortException { if (primitives == null || primitives.isEmpty()) return primitives; List<OsmPrimitive> ret = new ArrayList<>(); ConditionalOptionPaneUtil.startBulkOperation("add_primitive_to_relation"); for (OsmPrimitive primitive : primitives) { if (primitive instanceof Relation && editor.getRelation() != null && editor.getRelation().equals(primitive)) { GenericRelationEditor.warnOfCircularReferences(primitive); continue; } if (isPotentialDuplicate(primitive)) { if (GenericRelationEditor.confirmAddingPrimitive(primitive)) { ret.add(primitive); } continue; } else { ret.add(primitive); } } ConditionalOptionPaneUtil.endBulkOperation("add_primitive_to_relation"); return ret; } }