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