1 4 package org.terracotta.dso.views; 5 6 import org.eclipse.core.resources.IProject; 7 import org.eclipse.jdt.core.IClassFile; 8 import org.eclipse.jdt.core.ICompilationUnit; 9 import org.eclipse.jdt.core.IField; 10 import org.eclipse.jdt.core.IJavaElement; 11 import org.eclipse.jdt.core.IMethod; 12 import org.eclipse.jdt.core.IType; 13 import org.eclipse.jdt.core.JavaModelException; 14 import org.eclipse.jdt.internal.ui.packageview.SelectionTransferDropAdapter; 15 import org.eclipse.jdt.internal.ui.util.SelectionUtil; 16 import org.eclipse.jface.dialogs.MessageDialog; 17 import org.eclipse.jface.viewers.ISelection; 18 import org.eclipse.jface.viewers.StructuredViewer; 19 import org.eclipse.swt.dnd.DND; 20 import org.eclipse.swt.dnd.DropTargetEvent; 21 import org.eclipse.swt.widgets.Display; 22 import org.eclipse.swt.widgets.Shell; 23 import org.terracotta.dso.TcPlugin; 24 25 class ConfigTransferDropAdapter extends SelectionTransferDropAdapter { 26 private static final int OPERATION = DND.DROP_LINK; 27 private ConfigViewPart fPart; 28 29 public ConfigTransferDropAdapter(ConfigViewPart viewPart, StructuredViewer viewer) { 30 super(viewer); 31 setFullWidthMatchesItem(false); 32 fPart = viewPart; 33 } 34 35 public void validateDrop(Object target, DropTargetEvent event, int operation) { 36 event.detail= DND.DROP_NONE; 37 initializeSelection(); 38 39 IJavaElement inputElement = getInputElement(getSelection()); 40 if (inputElement != null) { 41 switch(inputElement.getElementType()) { 42 case IJavaElement.FIELD: 43 if(target instanceof RootsWrapper || 44 target instanceof RootWrapper || 45 target instanceof TransientFieldsWrapper || 46 target instanceof TransientFieldWrapper) { 47 event.detail = OPERATION; 48 } 49 break; 50 case IJavaElement.PACKAGE_DECLARATION: 51 case IJavaElement.PACKAGE_FRAGMENT: 52 if(target instanceof AutolocksWrapper || 53 target instanceof AutolockWrapper || 54 target instanceof NamedLocksWrapper || 55 target instanceof NamedLockWrapper || 56 target instanceof IncludesWrapper || 57 target instanceof IncludeWrapper || 58 target instanceof ExcludesWrapper || 59 target instanceof ExcludeWrapper) { 60 event.detail = OPERATION; 61 } 62 break; 63 case IJavaElement.METHOD: 64 if(target instanceof DistributedMethodsWrapper || 65 target instanceof DistributedMethodWrapper || 66 target instanceof AutolocksWrapper || 67 target instanceof AutolockWrapper || 68 target instanceof NamedLocksWrapper || 69 target instanceof NamedLockWrapper) { 70 event.detail = OPERATION; 71 } 72 break; 73 case IJavaElement.CLASS_FILE: 74 case IJavaElement.COMPILATION_UNIT: 75 case IJavaElement.TYPE: 76 if(target instanceof AdditionalBootJarClassesWrapper || 77 target instanceof AutolocksWrapper || 78 target instanceof AutolockWrapper || 79 target instanceof NamedLocksWrapper || 80 target instanceof NamedLockWrapper || 81 target instanceof IncludesWrapper || 82 target instanceof IncludeWrapper || 83 target instanceof ExcludesWrapper || 84 target instanceof ExcludeWrapper) { 85 event.detail = OPERATION; 86 } 87 break; 88 } 89 } 90 } 91 92 public boolean isEnabled(DropTargetEvent event) { 93 return true; 94 } 95 96 public void drop(Object target, DropTargetEvent event) { 97 IJavaElement input = getInputElement(getSelection()); 98 IProject project = input.getJavaProject().getProject(); 99 TcPlugin plugin = TcPlugin.getDefault(); 100 101 if(plugin.getConfiguration(project) == TcPlugin.BAD_CONFIG) { 102 Shell shell = Display.getDefault().getActiveShell(); 103 String title = "Terracotta Plugin"; 104 String msg = "The configuration source is not parsable and cannot be\n used until these errors are resolved."; 105 106 MessageDialog.openWarning(shell, title, msg); 107 try { 108 plugin.openConfigurationEditor(project); 109 } catch(Exception e) { 110 } 112 return; 113 } 114 115 switch(input.getElementType()) { 116 case IJavaElement.FIELD: 117 if(target instanceof RootsWrapper || 118 target instanceof RootWrapper) { 119 fPart.addRoot((IField)input); 120 } else if(target instanceof TransientFieldsWrapper || 121 target instanceof TransientFieldWrapper) { 122 fPart.addTransientField((IField)input); 123 } 124 break; 125 case IJavaElement.PACKAGE_DECLARATION: 126 case IJavaElement.PACKAGE_FRAGMENT: 127 if(target instanceof AutolocksWrapper || 128 target instanceof AutolockWrapper) { 129 fPart.addAutolock(input); 130 } else if(target instanceof NamedLocksWrapper || 131 target instanceof NamedLockWrapper) { 132 fPart.addNamedLock(input); 133 } else if(target instanceof IncludesWrapper || 134 target instanceof IncludeWrapper) { 135 fPart.addInclude(input); 136 } else if(target instanceof ExcludesWrapper || 137 target instanceof ExcludeWrapper) { 138 fPart.addExclude(input); 139 } 140 break; 141 case IJavaElement.METHOD: 142 if(target instanceof DistributedMethodsWrapper || 143 target instanceof DistributedMethodWrapper) { 144 fPart.addDistributedMethod((IMethod)input); 145 } else if(target instanceof AutolocksWrapper || 146 target instanceof AutolockWrapper) { 147 fPart.addAutolock(input); 148 } else if(target instanceof NamedLocksWrapper || 149 target instanceof NamedLockWrapper) { 150 fPart.addNamedLock(input); 151 } 152 break; 153 case IJavaElement.CLASS_FILE: 154 try { 155 if(target instanceof AdditionalBootJarClassesWrapper) { 156 fPart.addAdditionalBootJarClass(((IClassFile)input).getType()); 157 } else if(target instanceof AutolocksWrapper || 158 target instanceof AutolockWrapper) { 159 fPart.addAutolock(input); 160 } else if(target instanceof NamedLocksWrapper || 161 target instanceof NamedLockWrapper) { 162 fPart.addNamedLock(input); 163 } else if(target instanceof IncludesWrapper || 164 target instanceof IncludeWrapper) { 165 fPart.addInclude(input); 166 } else if(target instanceof ExcludesWrapper || 167 target instanceof ExcludeWrapper) { 168 fPart.addExclude(input); 169 } 170 } catch(JavaModelException jme) {} 171 break; 172 case IJavaElement.COMPILATION_UNIT: 173 if(target instanceof AdditionalBootJarClassesWrapper) { 174 fPart.addAdditionalBootJarClass(((ICompilationUnit)input).findPrimaryType()); 175 } else if(target instanceof AutolocksWrapper || 176 target instanceof AutolockWrapper) { 177 fPart.addAutolock(input); 178 } else if(target instanceof NamedLocksWrapper || 179 target instanceof NamedLockWrapper) { 180 fPart.addNamedLock(input); 181 } else if(target instanceof IncludesWrapper || 182 target instanceof IncludeWrapper) { 183 fPart.addInclude(input); 184 } else if(target instanceof ExcludesWrapper || 185 target instanceof ExcludeWrapper) { 186 fPart.addExclude(input); 187 } 188 break; 189 case IJavaElement.TYPE: 190 if(target instanceof AdditionalBootJarClassesWrapper) { 191 fPart.addAdditionalBootJarClass((IType)input); 192 } else if(target instanceof AutolocksWrapper || 193 target instanceof AutolockWrapper) { 194 fPart.addAutolock(input); 195 } else if(target instanceof NamedLocksWrapper || 196 target instanceof NamedLockWrapper) { 197 fPart.addNamedLock(input); 198 } else if(target instanceof IncludesWrapper || 199 target instanceof IncludeWrapper) { 200 fPart.addInclude(input); 201 } else if(target instanceof ExcludesWrapper || 202 target instanceof ExcludeWrapper) { 203 fPart.addExclude(input); 204 } 205 break; 206 } 207 } 208 209 private static IJavaElement getInputElement(ISelection selection) { 210 Object single = SelectionUtil.getSingleElement(selection); 211 if (single == null) 212 return null; 213 return getCandidate(single); 214 } 215 216 public static IJavaElement getCandidate(Object input) { 217 if(!(input instanceof IJavaElement)) { 218 return null; 219 } 220 return (IJavaElement)input; 221 } 222 } 223
| Popular Tags
|