1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 package de.desy.acop.displayers.tools;
24
25 import java.awt.datatransfer.DataFlavor;
26 import java.awt.datatransfer.Transferable;
27 import java.awt.datatransfer.UnsupportedFlavorException;
28 import java.beans.PropertyVetoException;
29 import java.io.IOException;
30
31 import javax.swing.JComponent;
32
33 import com.cosylab.gui.displayers.DisplayerParameters;
34
35 import de.desy.acop.displayers.selector.AcopGraphParametersDialog;
36 import de.desy.acop.transport.ConnectionParameters;
37
38
39
40
41
42
43
44
45
46 public abstract class GraphParametersTransferHandler extends AbstractMDPTransferHandler{
47
48 private static final long serialVersionUID = 4277524441131938702L;
49 private AcopGraphParametersDialog graphDialog;
50
51
52
53
54
55
56
57
58
59
60
61 public GraphParametersTransferHandler(JComponent comp, boolean reciveEnabled, boolean exportEnabled, DataFlavor[] f, boolean resetFlavors) {
62 super(comp, reciveEnabled, exportEnabled, f, resetFlavors);
63 }
64
65 @Override
66 protected boolean importString(String string) throws PropertyVetoException {
67 ConnectionParameters cp = new ConnectionParameters(string);
68 return importDisplayerParameters(new AcopGraphParameters[]{new AcopGraphParameters(cp)});
69 }
70
71
72
73
74 @Override
75 public Object getTransferData(DataFlavor flavor)
76 throws UnsupportedFlavorException, IOException {
77 if (flavor instanceof AcopGraphParametersFlavor){
78 DisplayerParameters[] p = exportMultipleDisplayerParameters();
79 return p;
80 } else {
81 return super.getTransferData(flavor);
82 }
83 }
84
85
86
87
88
89 @Override
90 protected AcopDisplayerParameters convertParameters(AcopDisplayerParameters adp) {
91 if (graphDialog == null) {
92 graphDialog = new AcopGraphParametersDialog(displayer);
93 }
94 AcopGraphParameters p = graphDialog.showDialog(displayer,adp);
95
96 return p;
97 }
98
99
100
101
102
103 @Override
104 protected AcopDisplayerParameters convertParameters(ConnectionParameters adp) {
105 if (graphDialog == null) {
106 graphDialog = new AcopGraphParametersDialog(displayer);
107 }
108 return graphDialog.showDialog(displayer,adp);
109 }
110
111
112
113
114
115
116
117 protected AcopDisplayerParameters convertParameters(AcopGraphParameters agp) {
118 return agp;
119 }
120
121
122
123
124
125 @Override
126 protected DisplayerParameters[] castParameters(Object... parameters) {
127 if (parameters instanceof AcopGraphParameters[]) {
128 return (AcopGraphParameters[])parameters.getClass().cast(parameters);
129 } else if (parameters.length == 1 && parameters[0] instanceof AcopGraphParameters) {
130 return new AcopGraphParameters[] {(AcopGraphParameters)parameters[0]};
131 }
132 return super.castParameters(parameters);
133 }
134
135
136
137
138 @Override
139 public boolean importData(JComponent comp, Transferable t) {
140 try {
141 if (t.isDataFlavorSupported(AcopGraphParametersFlavor.FLAVOR)) {
142 Object drop = t.getTransferData(AcopGraphParametersFlavor.FLAVOR);
143
144 if (!(drop instanceof AcopGraphParameters[])) {
145 return false;
146 }
147
148 AcopGraphParameters[] p = (AcopGraphParameters[])drop;
149 for (int i = 0; i < p.length; i++) {
150 AcopDisplayerParameters a = convertParameters(p[i]);
151 if (a!=null) {
152 importDisplayerParameters(new AcopDisplayerParameters[]{a});
153 }
154 }
155 return true;
156 }
157 } catch (Exception e) {
158 e.printStackTrace();
159 }
160
161 if (super.importData(comp,t)) {
162 return true;
163 }
164 return false;
165 }
166
167
168
169
170
171 protected abstract AcopDisplayerParameters[] exportMultipleDisplayerParameters();
172
173 }