source: josm/trunk/src/org/openstreetmap/josm/gui/datatransfer/RelationMemberTransferable.java@ 13724

Last change on this file since 13724 was 12663, checked in by Don-vip, 7 years ago

see #15182 - move NameFormatter* from gui to data.osm

File size: 4.5 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.gui.datatransfer;
3
4import java.awt.datatransfer.DataFlavor;
5import java.awt.datatransfer.Transferable;
6import java.awt.datatransfer.UnsupportedFlavorException;
7import java.io.Serializable;
8import java.util.ArrayList;
9import java.util.Arrays;
10import java.util.Collection;
11import java.util.Collections;
12import java.util.HashSet;
13
14import org.openstreetmap.josm.data.osm.DefaultNameFormatter;
15import org.openstreetmap.josm.data.osm.OsmPrimitive;
16import org.openstreetmap.josm.data.osm.RelationMember;
17import org.openstreetmap.josm.data.osm.RelationMemberData;
18import org.openstreetmap.josm.gui.datatransfer.data.PrimitiveTransferData;
19import org.openstreetmap.josm.tools.CheckParameterUtil;
20
21/**
22 * Transferable objects for {@link RelationMemberData}.
23 * @since 9368
24 */
25public class RelationMemberTransferable implements Transferable {
26
27 /**
28 * A wrapper for a collection of {@link RelationMemberData}.
29 */
30 public static final class Data implements Serializable {
31 private static final long serialVersionUID = -8432393711635811029L;
32 private final Collection<RelationMemberData> relationMemberDatas;
33
34 private Data(Collection<RelationMemberData> primitiveData) {
35 CheckParameterUtil.ensureThat(primitiveData instanceof Serializable, "primitiveData must be instanceof Serializable");
36 this.relationMemberDatas = primitiveData;
37 }
38
39 /**
40 * Returns the contained {@link RelationMemberData}
41 * @return the contained {@link RelationMemberData}
42 */
43 public Collection<RelationMemberData> getRelationMemberData() {
44 return Collections.unmodifiableCollection(relationMemberDatas);
45 }
46
47 /**
48 * Gets the Data for the given list of members.
49 * @param members The collection. The order is preserved.
50 * @return The data.
51 */
52 public static Data getData(Collection<RelationMember> members) {
53 final Collection<RelationMemberData> r = new ArrayList<>(members.size());
54 for (RelationMember member : members) {
55 r.add(new RelationMemberData(member.getRole(), member.getType(), member.getUniqueId()));
56 }
57 return new Data(r);
58 }
59 }
60
61 /**
62 * Data flavor for {@link RelationMemberData} which is wrapped in {@link Data}.
63 */
64 public static final DataFlavor RELATION_MEMBER_DATA = new DataFlavor(Data.class, "Relation member");
65 private final Collection<RelationMember> members;
66
67 /**
68 * Constructs a new {@code RelationMemberTransferable}.
69 * @param members list of relation members
70 */
71 public RelationMemberTransferable(Collection<RelationMember> members) {
72 this.members = new ArrayList<>(members);
73 }
74
75 @Override
76 public DataFlavor[] getTransferDataFlavors() {
77 return new DataFlavor[]{RELATION_MEMBER_DATA, PrimitiveTransferData.DATA_FLAVOR, DataFlavor.stringFlavor};
78 }
79
80 @Override
81 public boolean isDataFlavorSupported(DataFlavor flavor) {
82 return Arrays.asList(getTransferDataFlavors()).contains(flavor);
83 }
84
85 @Override
86 public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException {
87 if (DataFlavor.stringFlavor.equals(flavor)) {
88 return getStringData();
89 } else if (RELATION_MEMBER_DATA.equals(flavor)) {
90 return getRelationMemberData();
91 } else if (PrimitiveTransferData.DATA_FLAVOR.equals(flavor)) {
92 return getPrimitiveData();
93 }
94 throw new UnsupportedFlavorException(flavor);
95 }
96
97 private PrimitiveTransferData getPrimitiveData() {
98 Collection<OsmPrimitive> primitives = new HashSet<>();
99 for (RelationMember member : members) {
100 primitives.add(member.getMember());
101 }
102 return PrimitiveTransferData.getData(primitives);
103 }
104
105 protected String getStringData() {
106 final StringBuilder sb = new StringBuilder();
107 for (RelationMember member : members) {
108 sb.append(member.getType())
109 .append(' ').append(member.getUniqueId())
110 .append(' ').append(member.getRole())
111 .append(" # ").append(member.getMember().getDisplayName(DefaultNameFormatter.getInstance()))
112 .append('\n');
113 }
114 return sb.toString().replace("\u200E", "").replace("\u200F", "");
115 }
116
117 protected Data getRelationMemberData() {
118 return Data.getData(members);
119 }
120}
Note: See TracBrowser for help on using the repository browser.