Changeset 10604 in josm for trunk/src/org/openstreetmap/josm/gui/datatransfer/PrimitiveTransferable.java
- Timestamp:
- 2016-07-23T14:54:19+02:00 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/gui/datatransfer/PrimitiveTransferable.java
r9969 r10604 5 5 import java.awt.datatransfer.Transferable; 6 6 import java.awt.datatransfer.UnsupportedFlavorException; 7 import java.io.Serializable;8 7 import java.util.ArrayList; 9 import java.util.Collection; 8 import java.util.Arrays; 9 import java.util.List; 10 10 11 import org.openstreetmap.josm.data.osm.OsmPrimitive ;11 import org.openstreetmap.josm.data.osm.OsmPrimitiveType; 12 12 import org.openstreetmap.josm.data.osm.PrimitiveData; 13 import org.openstreetmap.josm.gui. DefaultNameFormatter;14 import org.openstreetmap.josm. tools.CheckParameterUtil;13 import org.openstreetmap.josm.gui.datatransfer.data.PrimitiveTransferData; 14 import org.openstreetmap.josm.gui.datatransfer.data.TagTransferData; 15 15 16 16 /** 17 * Transferable objects for {@link Primitive Data}.17 * Transferable objects for {@link PrimitiveTransferData} objects 18 18 * @since 9369 19 * @since 10604 Complete rework 19 20 */ 20 21 public class PrimitiveTransferable implements Transferable { 21 22 22 23 /** 23 * A wrapper for a collection of {@link PrimitiveData}.24 * The flavors that are available for normal primitives. 24 25 */ 25 public static final class Data implements Serializable { 26 private static final long serialVersionUID = -1485089993600213704L; 27 private final Collection<PrimitiveData> primitiveData; 28 29 private Data(Collection<PrimitiveData> primitiveData) { 30 CheckParameterUtil.ensureThat(primitiveData instanceof Serializable, "primitiveData must be instanceof Serializable"); 31 this.primitiveData = primitiveData; 32 } 33 34 /** 35 * Returns the contained {@link PrimitiveData} 36 * @return the contained {@link PrimitiveData} 37 */ 38 public Collection<PrimitiveData> getPrimitiveData() { 39 return primitiveData; 40 } 41 } 42 43 /** 44 * Data flavor for {@link PrimitiveData} which is wrapped in {@link Data}. 45 */ 46 public static final DataFlavor PRIMITIVE_DATA = new DataFlavor(Data.class, Data.class.getName()); 47 private final Collection<? extends OsmPrimitive> primitives; 26 private static final List<DataFlavor> PRIMITIVE_FLAVORS = Arrays.asList(PrimitiveTransferData.DATA_FLAVOR, 27 TagTransferData.FLAVOR, DataFlavor.stringFlavor); 28 private final PrimitiveTransferData primitives; 48 29 49 30 /** … … 51 32 * @param primitives collection of OSM primitives 52 33 */ 53 public PrimitiveTransferable( Collection<? extends OsmPrimitive>primitives) {34 public PrimitiveTransferable(PrimitiveTransferData primitives) { 54 35 this.primitives = primitives; 55 36 } … … 57 38 @Override 58 39 public DataFlavor[] getTransferDataFlavors() { 59 return new DataFlavor[]{PRIMITIVE_DATA, DataFlavor.stringFlavor}; 40 ArrayList<DataFlavor> flavors = new ArrayList<>(PRIMITIVE_FLAVORS); 41 return flavors.toArray(new DataFlavor[flavors.size()]); 60 42 } 61 43 62 44 @Override 63 45 public boolean isDataFlavorSupported(DataFlavor flavor) { 64 return flavor == PRIMITIVE_DATA; 46 DataFlavor[] flavors = getTransferDataFlavors(); 47 for (DataFlavor f : flavors) { 48 if (flavor.equals(f)) { 49 return true; 50 } 51 } 52 return false; 65 53 } 66 54 … … 69 57 if (DataFlavor.stringFlavor.equals(flavor)) { 70 58 return getStringData(); 71 } else if (PRIMITIVE_DATA.equals(flavor)) { 72 return getPrimitiveData(); 59 } else if (PrimitiveTransferData.DATA_FLAVOR.equals(flavor)) { 60 return primitives; 61 } else if (TagTransferData.FLAVOR.equals(flavor)) { 62 return new TagTransferData(primitives.getDirectlyAdded()); 63 } else { 64 throw new UnsupportedFlavorException(flavor); 73 65 } 74 throw new UnsupportedFlavorException(flavor);75 66 } 76 67 77 68 protected String getStringData() { 78 69 final StringBuilder sb = new StringBuilder(); 79 for ( OsmPrimitive primitive : primitives) {80 sb.append(primitive.getType())81 .append(' ').append(primitive.getUniqueId())82 .append(" # ").append(primitive.getDisplayName(DefaultNameFormatter.getInstance()))83 .append('\n');70 for (PrimitiveData primitive : primitives.getAll()) { 71 if (sb.length() > 0) { 72 sb.append("\n"); 73 } 74 sb.append(OsmPrimitiveType.from(primitive).getAPIName()).append(' ').append(primitive.getId()); 84 75 } 85 76 return sb.toString().replace("\u200E", "").replace("\u200F", ""); 86 77 } 87 88 protected Data getPrimitiveData() {89 final Collection<PrimitiveData> r = new ArrayList<>(primitives.size());90 for (OsmPrimitive primitive : primitives) {91 r.add(primitive.save());92 }93 return new Data(r);94 }95 78 }
Note:
See TracChangeset
for help on using the changeset viewer.