source: josm/trunk/src/org/openstreetmap/josm/gui/datatransfer/OsmTransferHandler.java@ 13146

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

see #15182 - deprecate Main.main.panel. Replacement: gui.MainApplication.getMainPanel()

File size: 4.4 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.Arrays;
9import java.util.Collection;
10import java.util.Collections;
11
12import org.openstreetmap.josm.data.coor.EastNorth;
13import org.openstreetmap.josm.data.osm.OsmPrimitive;
14import org.openstreetmap.josm.gui.MainApplication;
15import org.openstreetmap.josm.gui.datatransfer.importers.AbstractOsmDataPaster;
16import org.openstreetmap.josm.gui.datatransfer.importers.FilePaster;
17import org.openstreetmap.josm.gui.datatransfer.importers.OsmLinkPaster;
18import org.openstreetmap.josm.gui.datatransfer.importers.PrimitiveDataPaster;
19import org.openstreetmap.josm.gui.datatransfer.importers.PrimitiveTagTransferPaster;
20import org.openstreetmap.josm.gui.datatransfer.importers.TagTransferPaster;
21import org.openstreetmap.josm.gui.datatransfer.importers.TextTagPaster;
22import org.openstreetmap.josm.gui.layer.OsmDataLayer;
23import org.openstreetmap.josm.tools.Logging;
24
25/**
26 * This transfer hanlder provides the ability to transfer OSM data. It allows you to receive files, primitives or tags.
27 * @author Michael Zangl
28 * @since 10604
29 */
30public class OsmTransferHandler extends AbstractStackTransferHandler {
31
32 private static final Collection<AbstractOsmDataPaster> SUPPORTED = Arrays.asList(
33 new FilePaster(), new PrimitiveDataPaster(),
34 new PrimitiveTagTransferPaster(),
35 new TagTransferPaster(), new OsmLinkPaster(), new TextTagPaster());
36
37 @Override
38 protected Collection<AbstractOsmDataPaster> getSupportedPasters() {
39 return Collections.unmodifiableCollection(SUPPORTED);
40 }
41
42 private boolean importTags(TransferSupport support, Collection<? extends OsmPrimitive> primitives) {
43 for (AbstractOsmDataPaster df : SUPPORTED) {
44 if (df.supports(support)) {
45 try {
46 if (df.importTagsOn(support, primitives)) {
47 return true;
48 }
49 } catch (UnsupportedFlavorException | IOException e) {
50 Logging.warn(e);
51 }
52 }
53 }
54 return super.importData(support);
55 }
56
57 /**
58 * Paste the current clipboard current at the given position
59 * @param editLayer The layer to paste on.
60 * @param mPosition The position to paste at. If it is <code>null</code>, the original position will be used.
61 */
62 public void pasteOn(OsmDataLayer editLayer, EastNorth mPosition) {
63 Transferable transferable = ClipboardUtils.getClipboardContent();
64 pasteOn(editLayer, mPosition, transferable);
65 }
66
67 /**
68 * Paste the given clipboard current at the given position
69 * @param editLayer The layer to paste on.
70 * @param mPosition The position to paste at. If it is <code>null</code>, the original position will be used.
71 * @param transferable The transferable to use.
72 */
73 public void pasteOn(OsmDataLayer editLayer, EastNorth mPosition, Transferable transferable) {
74 importData(new TransferSupport(MainApplication.getMainPanel(), transferable), editLayer, mPosition);
75 }
76
77 /**
78 * Paste the given tags on the primitives.
79 * @param primitives The primitives to paste on.
80 */
81 public void pasteTags(Collection<? extends OsmPrimitive> primitives) {
82 Transferable transferable = ClipboardUtils.getClipboardContent();
83 importTags(new TransferSupport(MainApplication.getMainPanel(), transferable), primitives);
84 }
85
86 /**
87 * Check if any primitive data or any other supported data is available in the clipboard.
88 * @return <code>true</code> if any flavor is supported.
89 */
90 public boolean isDataAvailable() {
91 try {
92 Collection<DataFlavor> available = Arrays.asList(ClipboardUtils.getClipboard().getAvailableDataFlavors());
93 for (AbstractOsmDataPaster s : SUPPORTED) {
94 if (s.supports(available)) {
95 return true;
96 }
97 }
98 } catch (IllegalStateException e) {
99 Logging.debug(e);
100 } catch (NullPointerException e) { // NOPMD
101 // JDK-6322854: On Linux/X11, NPE can happen for unknown reasons, on all versions of Java
102 Logging.error(e);
103 }
104 return false;
105 }
106}
Note: See TracBrowser for help on using the repository browser.