source: josm/trunk/src/org/openstreetmap/josm/gui/dialogs/relation/actions/PasteMembersAction.java@ 10420

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

sonar - squid:S1166 - Exception handlers should preserve the original exceptions

File size: 2.8 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.gui.dialogs.relation.actions;
3
4import static org.openstreetmap.josm.tools.I18n.tr;
5
6import java.awt.event.ActionEvent;
7import java.util.ArrayList;
8import java.util.List;
9
10import javax.swing.JOptionPane;
11
12import org.openstreetmap.josm.Main;
13import org.openstreetmap.josm.data.osm.DataSet;
14import org.openstreetmap.josm.data.osm.OsmPrimitive;
15import org.openstreetmap.josm.data.osm.PrimitiveData;
16import org.openstreetmap.josm.gui.dialogs.relation.GenericRelationEditor.AddAbortException;
17import org.openstreetmap.josm.gui.dialogs.relation.IRelationEditor;
18import org.openstreetmap.josm.gui.dialogs.relation.MemberTableModel;
19import org.openstreetmap.josm.gui.layer.OsmDataLayer;
20
21/**
22 * Paste members.
23 * @since 9496
24 */
25public class PasteMembersAction extends AddFromSelectionAction {
26
27 /**
28 * Constructs a new {@code PasteMembersAction}.
29 * @param memberTableModel member table model
30 * @param layer OSM data layer
31 * @param editor relation editor
32 */
33 public PasteMembersAction(MemberTableModel memberTableModel, OsmDataLayer layer, IRelationEditor editor) {
34 super(null, memberTableModel, null, null, null, layer, editor);
35 }
36
37 @Override
38 public void actionPerformed(ActionEvent e) {
39 try {
40 List<PrimitiveData> primitives = Main.pasteBuffer.getDirectlyAdded();
41 DataSet ds = layer.data;
42 List<OsmPrimitive> toAdd = new ArrayList<>();
43 boolean hasNewInOtherLayer = false;
44
45 for (PrimitiveData primitive: primitives) {
46 OsmPrimitive primitiveInDs = ds.getPrimitiveById(primitive);
47 if (primitiveInDs != null) {
48 toAdd.add(primitiveInDs);
49 } else if (!primitive.isNew()) {
50 OsmPrimitive p = primitive.getType().newInstance(primitive.getUniqueId(), true);
51 ds.addPrimitive(p);
52 toAdd.add(p);
53 } else {
54 hasNewInOtherLayer = true;
55 break;
56 }
57 }
58
59 if (hasNewInOtherLayer) {
60 JOptionPane.showMessageDialog(Main.parent,
61 tr("Members from paste buffer cannot be added because they are not included in current layer"));
62 return;
63 }
64
65 toAdd = filterConfirmedPrimitives(toAdd);
66 int index = memberTableModel.getSelectionModel().getMaxSelectionIndex();
67 if (index == -1) {
68 index = memberTableModel.getRowCount() - 1;
69 }
70 memberTableModel.addMembersAfterIdx(toAdd, index);
71
72 } catch (AddAbortException ex) {
73 Main.trace(ex);
74 }
75 }
76
77 @Override
78 protected void updateEnabledState() {
79 // Do nothing
80 }
81}
Note: See TracBrowser for help on using the repository browser.