source: josm/trunk/src/org/openstreetmap/josm/gui/dialogs/relation/actions/AddFromSelectionAction.java@ 9496

Last change on this file since 9496 was 9496, checked in by Don-vip, 8 years ago

massive refactoring of GenericRelationEditor. As JDialog cannot be instantiated in headless mode, extract all actions to separate classes in new package gui.dialogs.relation.actions in order to test them with JUnit

File size: 2.8 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.gui.dialogs.relation.actions;
3
4import java.util.ArrayList;
5import java.util.Collections;
6import java.util.List;
7
8import org.openstreetmap.josm.data.osm.OsmPrimitive;
9import org.openstreetmap.josm.data.osm.Relation;
10import org.openstreetmap.josm.gui.ConditionalOptionPaneUtil;
11import org.openstreetmap.josm.gui.dialogs.relation.GenericRelationEditor;
12import org.openstreetmap.josm.gui.dialogs.relation.GenericRelationEditor.AddAbortException;
13import org.openstreetmap.josm.gui.dialogs.relation.MemberTable;
14import org.openstreetmap.josm.gui.dialogs.relation.MemberTableModel;
15import org.openstreetmap.josm.gui.dialogs.relation.RelationAware;
16import org.openstreetmap.josm.gui.dialogs.relation.SelectionTable;
17import org.openstreetmap.josm.gui.dialogs.relation.SelectionTableModel;
18import org.openstreetmap.josm.gui.layer.OsmDataLayer;
19
20/**
21 * Abstract superclass of "Add from selection" actions.
22 * @since 9496
23 */
24abstract class AddFromSelectionAction extends AbstractRelationEditorAction {
25
26 protected final SelectionTable selectionTable;
27 protected final SelectionTableModel selectionTableModel;
28
29 protected AddFromSelectionAction(MemberTable memberTable, MemberTableModel memberTableModel, SelectionTable selectionTable,
30 SelectionTableModel selectionTableModel, String actionMapKey, OsmDataLayer layer, RelationAware editor) {
31 super(memberTable, memberTableModel, actionMapKey, layer, editor);
32 this.selectionTable = selectionTable;
33 this.selectionTableModel = selectionTableModel;
34 }
35
36 protected boolean isPotentialDuplicate(OsmPrimitive primitive) {
37 return memberTableModel.hasMembersReferringTo(Collections.singleton(primitive));
38 }
39
40 protected List<OsmPrimitive> filterConfirmedPrimitives(List<OsmPrimitive> primitives) throws AddAbortException {
41 if (primitives == null || primitives.isEmpty())
42 return primitives;
43 List<OsmPrimitive> ret = new ArrayList<>();
44 ConditionalOptionPaneUtil.startBulkOperation("add_primitive_to_relation");
45 for (OsmPrimitive primitive : primitives) {
46 if (primitive instanceof Relation && editor.getRelation() != null && editor.getRelation().equals(primitive)) {
47 GenericRelationEditor.warnOfCircularReferences(primitive);
48 continue;
49 }
50 if (isPotentialDuplicate(primitive)) {
51 if (GenericRelationEditor.confirmAddingPrimitive(primitive)) {
52 ret.add(primitive);
53 }
54 continue;
55 } else {
56 ret.add(primitive);
57 }
58 }
59 ConditionalOptionPaneUtil.endBulkOperation("add_primitive_to_relation");
60 return ret;
61 }
62}
Note: See TracBrowser for help on using the repository browser.