source: josm/trunk/src/org/openstreetmap/josm/gui/datatransfer/LayerTransferable.java@ 13652

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

fix #13341 - refactor construction of data flavors, specify classloader to use

File size: 2.7 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.IOException;
8import java.util.ArrayList;
9import java.util.Collections;
10import java.util.List;
11
12import org.openstreetmap.josm.gui.layer.Layer;
13import org.openstreetmap.josm.gui.layer.LayerManager;
14
15/**
16 * This class allows to transfer multiple layers in the current JOSM instance.
17 * @author Michael Zangl
18 * @since 10605
19 */
20public class LayerTransferable implements Transferable {
21
22 /**
23 * A wrapper for a collection of {@link Layer}.
24 */
25 public static class Data {
26 private final LayerManager manager;
27 private final List<Layer> layers;
28
29 /**
30 * Create a new data object
31 * @param manager The layer manager the layers are from.
32 * @param layers The layers.
33 */
34 public Data(LayerManager manager, List<Layer> layers) {
35 super();
36 this.manager = manager;
37 this.layers = new ArrayList<>(layers);
38 }
39
40 /**
41 * Gets the layer manager the layers belong to.
42 * @return The layer manager. It may be <code>null</code>
43 */
44 public LayerManager getManager() {
45 return manager;
46 }
47
48 /**
49 * Gets the list of layers that were copied.
50 * @return The layers.
51 */
52 public List<Layer> getLayers() {
53 return Collections.unmodifiableList(layers);
54 }
55
56 @Override
57 public String toString() {
58 return "Data [layers=" + layers + ']';
59 }
60 }
61
62 /**
63 * Data flavor for {@link Layer}s which are wrapped in {@link Data}.
64 */
65 public static final DataFlavor LAYER_DATA = ClipboardUtils.newDataFlavor(Data.class, "Layers");
66
67 private final Data data;
68
69 /**
70 * Create a new data object
71 * @param manager The layer manager the layers are from.
72 * @param layers The layers.
73 */
74 public LayerTransferable(LayerManager manager, List<Layer> layers) {
75 this.data = new Data(manager, layers);
76 }
77
78 @Override
79 public DataFlavor[] getTransferDataFlavors() {
80 return new DataFlavor[] {LAYER_DATA};
81 }
82
83 @Override
84 public boolean isDataFlavorSupported(DataFlavor flavor) {
85 return LAYER_DATA.equals(flavor);
86 }
87
88 @Override
89 public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException {
90 if (!isDataFlavorSupported(flavor)) {
91 throw new UnsupportedFlavorException(flavor);
92 } else {
93 return data;
94 }
95 }
96}
Note: See TracBrowser for help on using the repository browser.