]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.ui/src/org/simantics/ui/dnd/ResourceTransferUtils.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.ui / src / org / simantics / ui / dnd / ResourceTransferUtils.java
1 /*******************************************************************************\r
2  * Copyright (c) 2007, 2010 Association for Decentralized Information Management\r
3  * in Industry THTH ry.\r
4  * All rights reserved. This program and the accompanying materials\r
5  * are made available under the terms of the Eclipse Public License v1.0\r
6  * which accompanies this distribution, and is available at\r
7  * http://www.eclipse.org/legal/epl-v10.html\r
8  *\r
9  * Contributors:\r
10  *     VTT Technical Research Centre of Finland - initial API and implementation\r
11  *******************************************************************************/\r
12 package org.simantics.ui.dnd;\r
13 \r
14 import java.awt.datatransfer.DataFlavor;\r
15 import java.awt.datatransfer.StringSelection;\r
16 import java.awt.datatransfer.Transferable;\r
17 import java.awt.datatransfer.UnsupportedFlavorException;\r
18 import java.io.IOException;\r
19 \r
20 import org.eclipse.swt.dnd.TextTransfer;\r
21 import org.eclipse.swt.dnd.TransferData;\r
22 import org.simantics.db.Session;\r
23 import org.simantics.db.common.ResourceArray;\r
24 import org.simantics.db.exception.DatabaseException;\r
25 import org.simantics.db.service.SerialisationSupport;\r
26 import org.simantics.utils.ui.workbench.StringMemento;\r
27 \r
28 /**\r
29  * @author Toni Kalajainen\r
30  */\r
31 public class ResourceTransferUtils {\r
32 \r
33     public static String createStringTransferable(Session s, ResourceArray resources[])\r
34     throws DatabaseException\r
35     {\r
36         return createStringTransferable(s, resources, null);\r
37     }\r
38 \r
39     public static String createStringTransferable(Session s, ResourceArray resources[], String purpose)\r
40     throws DatabaseException\r
41     {\r
42         SerialisationSupport support = s.getService(SerialisationSupport.class);\r
43         StringMemento memento = new StringMemento();\r
44         ResourceTransferData transferData = new ResourceTransferData(s, resources);\r
45         transferData.setPurpose(purpose);\r
46         transferData.writeToMemento(support, memento);\r
47         String strData = memento.toString();\r
48         return strData;\r
49     }\r
50 \r
51     public static String createStringTransferable(SerialisationSupport serializer, ResourceTransferData transferData)\r
52     throws DatabaseException\r
53     {\r
54         StringMemento memento = new StringMemento();\r
55         transferData.writeToMemento(serializer, memento);\r
56         String strData = memento.toString();\r
57         return strData;\r
58     }\r
59 \r
60     public static Transferable createAwtTransferable(SerialisationSupport serializer, ResourceTransferData transferData)\r
61     throws DatabaseException\r
62     {\r
63         String strData = createStringTransferable(serializer, transferData);\r
64         return new StringSelection(strData);\r
65     }\r
66 \r
67     public static TransferData createSwtTextTransferData(SerialisationSupport serializer, ResourceTransferData transferable)\r
68     throws DatabaseException\r
69     {\r
70         String strData = createStringTransferable(serializer, transferable);\r
71         TransferData transferData = new TransferData();\r
72         TextTransfer.getInstance().javaToNative(strData, transferData);\r
73         return transferData;\r
74     }\r
75 \r
76     public static ResourceTransferData readStringTransferable(SerialisationSupport serializer, String strData)\r
77     throws IllegalArgumentException, DatabaseException\r
78     {\r
79         StringMemento sm = new StringMemento(strData);\r
80         ResourceTransferData result = new ResourceTransferData();\r
81         result.readFromMemento(serializer, sm);\r
82         return result;\r
83     }\r
84 \r
85     public static ResourceTransferData readAwtTransferable(SerialisationSupport serializer, Transferable transferable)\r
86     throws UnsupportedFlavorException, IOException, IllegalArgumentException, DatabaseException\r
87     {\r
88         if (!transferable.isDataFlavorSupported(DataFlavor.stringFlavor))\r
89             throw new UnsupportedFlavorException(DataFlavor.stringFlavor);\r
90 \r
91         String dropData = (String) transferable.getTransferData(DataFlavor.stringFlavor);\r
92         ResourceTransferData result = readStringTransferable(serializer, dropData);\r
93         return result;\r
94     }\r
95 \r
96     public static ResourceTransferData readSwtTextTransferable(SerialisationSupport serializer, TransferData transferData)\r
97     throws IOException, IllegalArgumentException, DatabaseException\r
98     {\r
99         if (!TextTransfer.getInstance().isSupportedType(transferData))\r
100             throw new IllegalArgumentException("argument is not text transfer");\r
101         String dropData = TextTransfer.getInstance().nativeToJava(transferData).toString();\r
102         ResourceTransferData result = readStringTransferable(serializer, dropData);\r
103         return result;\r
104     }\r
105 \r
106 }\r