source: josm/trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTransferHandler.java@ 9379

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

see #12300 - suppress warnings

File size: 5.2 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.gui.dialogs.relation;
3
4import static org.openstreetmap.josm.tools.I18n.tr;
5
6import java.awt.datatransfer.Transferable;
7import java.awt.datatransfer.UnsupportedFlavorException;
8import java.io.IOException;
9import java.util.ArrayList;
10import java.util.Collection;
11
12import javax.swing.JComponent;
13import javax.swing.JTable;
14import javax.swing.TransferHandler;
15
16import org.openstreetmap.josm.Main;
17import org.openstreetmap.josm.data.osm.OsmPrimitive;
18import org.openstreetmap.josm.data.osm.PrimitiveData;
19import org.openstreetmap.josm.data.osm.RelationMember;
20import org.openstreetmap.josm.data.osm.RelationMemberData;
21import org.openstreetmap.josm.gui.datatransfer.PrimitiveTransferable;
22import org.openstreetmap.josm.gui.datatransfer.RelationMemberTransferable;
23import org.openstreetmap.josm.tools.Utils.Function;
24
25class MemberTransferHandler extends TransferHandler {
26
27 @Override
28 public int getSourceActions(JComponent c) {
29 return COPY_OR_MOVE;
30 }
31
32 @Override
33 protected Transferable createTransferable(JComponent c) {
34 final MemberTable source = (MemberTable) c;
35 return new RelationMemberTransferable(source.getMemberTableModel().getSelectedMembers());
36 }
37
38 @Override
39 public boolean canImport(TransferSupport support) {
40 support.setShowDropLocation(true);
41 return support.isDataFlavorSupported(RelationMemberTransferable.RELATION_MEMBER_DATA)
42 || support.isDataFlavorSupported(PrimitiveTransferable.PRIMITIVE_DATA);
43 }
44
45 @Override
46 public boolean importData(TransferSupport support) {
47 final MemberTable destination = (MemberTable) support.getComponent();
48 final int insertRow = ((JTable.DropLocation) support.getDropLocation()).getRow();
49
50 try {
51 if (support.isDataFlavorSupported(RelationMemberTransferable.RELATION_MEMBER_DATA)) {
52 importRelationMemberData(support, destination, insertRow);
53 } else if (support.isDataFlavorSupported(PrimitiveTransferable.PRIMITIVE_DATA)) {
54 importPrimitiveData(support, destination, insertRow);
55 }
56 } catch (Exception e) {
57 Main.warn(e);
58 return false;
59 }
60
61 return true;
62 }
63
64 protected void importRelationMemberData(TransferSupport support, final MemberTable destination, int insertRow)
65 throws UnsupportedFlavorException, IOException {
66 //noinspection unchecked
67 @SuppressWarnings("unchecked")
68 final Collection<RelationMemberData> memberData = (Collection<RelationMemberData>)
69 support.getTransferable().getTransferData(RelationMemberTransferable.RELATION_MEMBER_DATA);
70 importData(destination, insertRow, memberData, new Function<RelationMemberData, RelationMember>() {
71 @Override
72 public RelationMember apply(RelationMemberData member) {
73 final OsmPrimitive p = destination.getLayer().data.getPrimitiveById(member.getUniqueId(), member.getType());
74 if (p == null) {
75 Main.warn(tr("Cannot add {0} since it is not part of dataset", member));
76 return null;
77 } else {
78 return new RelationMember(member.getRole(), p);
79 }
80 }
81 });
82 }
83
84 protected void importPrimitiveData(TransferSupport support, final MemberTable destination, int insertRow)
85 throws UnsupportedFlavorException, IOException {
86 //noinspection unchecked
87 @SuppressWarnings("unchecked")
88 final Collection<PrimitiveData> data = (Collection<PrimitiveData>)
89 support.getTransferable().getTransferData(PrimitiveTransferable.PRIMITIVE_DATA);
90 importData(destination, insertRow, data, new Function<PrimitiveData, RelationMember>() {
91 @Override
92 public RelationMember apply(PrimitiveData data) {
93 final OsmPrimitive p = destination.getLayer().data.getPrimitiveById(data);
94 if (p == null) {
95 Main.warn(tr("Cannot add {0} since it is not part of dataset", data));
96 return null;
97 } else {
98 return destination.getMemberTableModel().getRelationMemberForPrimitive(p);
99 }
100 }
101 });
102 }
103
104 protected <T> void importData(MemberTable destination, int insertRow,
105 Collection<T> memberData, Function<T, RelationMember> toMemberFunction) {
106 final Collection<RelationMember> membersToAdd = new ArrayList<>(memberData.size());
107 for (T i : memberData) {
108 final RelationMember member = toMemberFunction.apply(i);
109 if (member != null) {
110 membersToAdd.add(member);
111 }
112 }
113 destination.getMemberTableModel().addMembersAtIndex(membersToAdd, insertRow);
114 }
115
116 @Override
117 protected void exportDone(JComponent sourceComponent, Transferable data, int action) {
118 if (action != MOVE) {
119 return;
120 }
121 final MemberTable source = (MemberTable) sourceComponent;
122 final MemberTableModel model = source.getMemberTableModel();
123 model.remove(source.getSelectedRows());
124 model.selectionChanged(null);
125 }
126}
Note: See TracBrowser for help on using the repository browser.