1
2
3
4
5
6
7
8
9
10
11
12
13 package com.eviware.soapui.support.dnd.handlers;
14
15 import java.awt.dnd.DnDConstants;
16
17 import com.eviware.soapui.SoapUI;
18 import com.eviware.soapui.model.ModelItem;
19 import com.eviware.soapui.support.dnd.DropType;
20 import com.eviware.soapui.support.dnd.ModelItemDropHandler;
21
22 public abstract class AbstractModelItemDropHandler<T1 extends ModelItem, T2 extends ModelItem> implements ModelItemDropHandler<ModelItem>
23 {
24 private final Class<T1> sourceClass;
25 private final Class<T2> targetClass;
26
27 protected AbstractModelItemDropHandler( Class<T1> sourceClass, Class<T2> targetClass )
28 {
29 this.sourceClass = sourceClass;
30 this.targetClass = targetClass;
31 }
32
33 @SuppressWarnings("unchecked")
34 public boolean canDrop( ModelItem source, ModelItem target, int dropAction, int dropType )
35 {
36 try
37 {
38 if( sourceClass.isAssignableFrom( source.getClass() ) &&
39 targetClass.isAssignableFrom( target.getClass() ))
40 {
41 T1 sourceItem = ( T1 ) source;
42 T2 targetItem = ( T2 ) target;
43
44
45
46
47 if( (dropAction & DnDConstants.ACTION_COPY) != 0 )
48 return canCopy( sourceItem, targetItem, dropType );
49
50 if( (dropAction & DnDConstants.ACTION_MOVE) != 0 )
51 return canMove( sourceItem, targetItem, dropType );
52 }
53 }
54 catch( Exception e )
55 {
56 SoapUI.logError( e );
57 }
58
59 return false;
60 }
61
62 private boolean canMove( T1 sourceItem, T2 targetItem, int dropType )
63 {
64 switch( dropType)
65 {
66 case DropType.BEFORE : return canMoveBefore( sourceItem, targetItem );
67 case DropType.AFTER : return canMoveAfter( sourceItem, targetItem );
68 case DropType.ON : return canMoveOn( sourceItem, targetItem );
69 }
70
71 return false;
72 }
73
74 private boolean canCopy( T1 sourceItem, T2 targetItem, int dropType )
75 {
76 switch( dropType)
77 {
78 case DropType.BEFORE : return canCopyBefore( sourceItem, targetItem );
79 case DropType.AFTER : return canCopyAfter( sourceItem, targetItem );
80 case DropType.ON : return canCopyOn( sourceItem, targetItem );
81 }
82
83 return false;
84 }
85
86 abstract boolean canCopyBefore( T1 source, T2 target );
87
88 abstract boolean canMoveBefore( T1 source, T2 target );
89
90 abstract boolean canMoveOn( T1 source, T2 target );
91
92 abstract boolean canCopyOn( T1 source, T2 target );
93
94 abstract boolean copyBefore( T1 source, T2 target );
95
96 abstract boolean moveBefore( T1 source, T2 target );
97
98 abstract boolean moveOn( T1 source, T2 target );
99
100 abstract boolean canCopyAfter( T1 source, T2 target );
101
102 abstract boolean canMoveAfter( T1 source, T2 target );
103
104 abstract boolean copyAfter( T1 source, T2 target );
105
106 abstract boolean copyOn( T1 source, T2 target );
107
108 abstract boolean moveAfter( T1 source, T2 target );
109
110 abstract String getCopyBeforeInfo( T1 source, T2 target );
111
112 abstract String getMoveBeforeInfo( T1 source, T2 target );
113
114 abstract String getCopyOnInfo( T1 source, T2 target );
115
116 abstract String getMoveOnInfo( T1 source, T2 target );
117
118 abstract String getCopyAfterInfo( T1 source, T2 target );
119
120 abstract String getMoveAfterInfo( T1 source, T2 target );
121
122 @SuppressWarnings("unchecked")
123 public String getDropInfo( ModelItem source, ModelItem target, int dropAction, int dropType )
124 {
125 try
126 {
127 if( sourceClass.isAssignableFrom( source.getClass() ) &&
128 targetClass.isAssignableFrom( target.getClass() ))
129 {
130 T1 sourceItem = ( T1 ) source;
131 T2 targetItem = ( T2 ) target;
132
133 if( (dropAction & DnDConstants.ACTION_COPY) != 0 )
134 return getCopyInfo( sourceItem, targetItem, dropType );
135
136 if( (dropAction & DnDConstants.ACTION_MOVE) != 0 )
137 return getMoveInfo( sourceItem, targetItem, dropType );
138 }
139 }
140 catch( Exception e )
141 {
142 SoapUI.logError( e );
143 }
144
145 return null;
146 }
147
148 private String getMoveInfo( T1 sourceItem, T2 targetItem, int dropType )
149 {
150 switch( dropType )
151 {
152 case DropType.BEFORE : return getMoveBeforeInfo( sourceItem, targetItem );
153 case DropType.AFTER : return getMoveAfterInfo( sourceItem, targetItem );
154 case DropType.ON : return getMoveOnInfo( sourceItem, targetItem );
155 }
156
157 return null;
158 }
159
160 private String getCopyInfo( T1 sourceItem, T2 targetItem, int dropType )
161 {
162 switch( dropType )
163 {
164 case DropType.BEFORE : return getCopyBeforeInfo( sourceItem, targetItem );
165 case DropType.AFTER : return getCopyAfterInfo( sourceItem, targetItem );
166 case DropType.ON : return getCopyOnInfo( sourceItem, targetItem );
167 }
168
169 return null;
170 }
171
172 @SuppressWarnings("unchecked")
173 public boolean drop( ModelItem source, ModelItem target, int dropAction, int dropType )
174 {
175 try
176 {
177 if( sourceClass.isAssignableFrom( source.getClass() ) &&
178 targetClass.isAssignableFrom( target.getClass() ))
179 {
180 T1 sourceItem = ( T1 ) source;
181 T2 targetItem = ( T2 ) target;
182
183 if( (dropAction & DnDConstants.ACTION_COPY) != 0 && canCopy( sourceItem, targetItem, dropType ) )
184 return copy( sourceItem, targetItem, dropType );
185
186 if( (dropAction & DnDConstants.ACTION_MOVE) != 0 && canMove( sourceItem, targetItem, dropType ) )
187 return move( sourceItem, targetItem, dropType );
188 }
189 }
190 catch( Exception e )
191 {
192 SoapUI.logError( e );
193 }
194
195 return false;
196 }
197
198 private boolean move( T1 sourceItem, T2 targetItem, int dropType )
199 {
200 switch( dropType )
201 {
202 case DropType.BEFORE : return moveBefore( sourceItem, targetItem );
203 case DropType.AFTER : return moveAfter( sourceItem, targetItem );
204 case DropType.ON : return moveOn( sourceItem, targetItem );
205 }
206
207 return false;
208 }
209
210 private boolean copy( T1 sourceItem, T2 targetItem, int dropType )
211 {
212 switch( dropType )
213 {
214 case DropType.BEFORE : return copyBefore( sourceItem, targetItem );
215 case DropType.AFTER : return copyAfter( sourceItem, targetItem );
216 case DropType.ON : return copyOn( sourceItem, targetItem );
217 }
218
219 return false;
220 }
221
222 }