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

Last change on this file since 16438 was 16438, checked in by simon04, 4 years ago

see #19251 - Java 8: use Stream

File size: 4.3 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.stream.Collectors;
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 return new Data(members.stream()
54 .map(m -> new RelationMemberData(m.getRole(), m.getType(), m.getUniqueId()))
55 .collect(Collectors.toList()));
56 }
57 }
58
59 /**
60 * Data flavor for {@link RelationMemberData} which is wrapped in {@link Data}.
61 */
62 public static final DataFlavor RELATION_MEMBER_DATA = new DataFlavor(Data.class, "Relation member");
63 private final Collection<RelationMember> members;
64
65 /**
66 * Constructs a new {@code RelationMemberTransferable}.
67 * @param members list of relation members
68 */
69 public RelationMemberTransferable(Collection<RelationMember> members) {
70 this.members = new ArrayList<>(members);
71 }
72
73 @Override
74 public DataFlavor[] getTransferDataFlavors() {
75 return new DataFlavor[]{RELATION_MEMBER_DATA, PrimitiveTransferData.DATA_FLAVOR, DataFlavor.stringFlavor};
76 }
77
78 @Override
79 public boolean isDataFlavorSupported(DataFlavor flavor) {
80 return Arrays.asList(getTransferDataFlavors()).contains(flavor);
81 }
82
83 @Override
84 public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException {
85 if (DataFlavor.stringFlavor.equals(flavor)) {
86 return getStringData();
87 } else if (RELATION_MEMBER_DATA.equals(flavor)) {
88 return getRelationMemberData();
89 } else if (PrimitiveTransferData.DATA_FLAVOR.equals(flavor)) {
90 return getPrimitiveData();
91 }
92 throw new UnsupportedFlavorException(flavor);
93 }
94
95 private PrimitiveTransferData getPrimitiveData() {
96 Collection<OsmPrimitive> primitives = members.stream().map(RelationMember::getMember).collect(Collectors.toSet());
97 return PrimitiveTransferData.getData(primitives);
98 }
99
100 protected String getStringData() {
101 final StringBuilder sb = new StringBuilder();
102 for (RelationMember member : members) {
103 sb.append(member.getType())
104 .append(' ').append(member.getUniqueId())
105 .append(' ').append(member.getRole())
106 .append(" # ").append(member.getMember().getDisplayName(DefaultNameFormatter.getInstance()))
107 .append('\n');
108 }
109 return sb.toString().replace("\u200E", "").replace("\u200F", "");
110 }
111
112 protected Data getRelationMemberData() {
113 return Data.getData(members);
114 }
115}
Note: See TracBrowser for help on using the repository browser.