1 5 package org.terracotta.dso.views; 6 7 import org.eclipse.core.resources.IFile; 8 import org.eclipse.core.resources.IProject; 9 import org.eclipse.core.resources.IResource; 10 import org.eclipse.core.resources.IResourceChangeEvent; 11 import org.eclipse.core.resources.IResourceChangeListener; 12 import org.eclipse.core.resources.IResourceDelta; 13 import org.eclipse.core.resources.IResourceDeltaVisitor; 14 import org.eclipse.core.resources.ResourcesPlugin; 15 import org.eclipse.core.runtime.CoreException; 16 import org.eclipse.core.runtime.IPath; 17 import org.eclipse.jdt.core.IField; 18 import org.eclipse.jdt.core.IJavaElement; 19 import org.eclipse.jdt.core.IJavaProject; 20 import org.eclipse.jdt.core.IMember; 21 import org.eclipse.jdt.core.IMethod; 22 import org.eclipse.jdt.core.IType; 23 import org.eclipse.jdt.core.JavaCore; 24 import org.eclipse.jdt.core.JavaModelException; 25 import org.eclipse.jdt.internal.ui.JavaPlugin; 26 import org.eclipse.jdt.internal.ui.dnd.DelegatingDropAdapter; 27 import org.eclipse.jdt.internal.ui.util.SelectionUtil; 28 import org.eclipse.jdt.internal.ui.viewsupport.SelectionProviderMediator; 29 import org.eclipse.jdt.internal.ui.viewsupport.StatusBarUpdater; 30 import org.eclipse.jdt.ui.IContextMenuConstants; 31 import org.eclipse.jface.action.Action; 32 import org.eclipse.jface.action.IMenuListener; 33 import org.eclipse.jface.action.IMenuManager; 34 import org.eclipse.jface.action.IStatusLineManager; 35 import org.eclipse.jface.action.IToolBarManager; 36 import org.eclipse.jface.util.TransferDropTargetListener; 37 import org.eclipse.jface.viewers.DoubleClickEvent; 38 import org.eclipse.jface.viewers.IDoubleClickListener; 39 import org.eclipse.jface.viewers.ISelection; 40 import org.eclipse.jface.viewers.ISelectionChangedListener; 41 import org.eclipse.jface.viewers.SelectionChangedEvent; 42 import org.eclipse.jface.viewers.StructuredSelection; 43 import org.eclipse.jface.viewers.StructuredViewer; 44 import org.eclipse.swt.SWT; 45 import org.eclipse.swt.dnd.DND; 46 import org.eclipse.swt.dnd.DropTarget; 47 import org.eclipse.swt.dnd.Transfer; 48 import org.eclipse.swt.events.KeyAdapter; 49 import org.eclipse.swt.events.KeyEvent; 50 import org.eclipse.swt.events.KeyListener; 51 import org.eclipse.swt.widgets.Composite; 52 import org.eclipse.swt.widgets.Display; 53 import org.eclipse.ui.IActionBars; 54 import org.eclipse.ui.IPartListener; 55 import org.eclipse.ui.IWorkbenchPart; 56 import org.eclipse.ui.IWorkbenchWindow; 57 import org.eclipse.ui.PlatformUI; 58 import org.eclipse.ui.actions.ActionContext; 59 import org.eclipse.ui.actions.ActionFactory; 60 import org.eclipse.ui.part.ViewPart; 61 import org.eclipse.ui.views.navigator.LocalSelectionTransfer; 62 import org.terracotta.dso.ConfigurationHelper; 63 import org.terracotta.dso.IConfigurationListener; 64 import org.terracotta.dso.JdtUtils; 65 import org.terracotta.dso.TcPlugin; 66 import org.terracotta.dso.actions.ActionUtil; 67 import org.terracotta.dso.editors.ConfigurationEditor; 68 69 import com.terracottatech.config.QualifiedClassName; 70 import com.terracottatech.config.QualifiedFieldName; 71 import com.terracottatech.config.TcConfigDocument.TcConfig; 72 73 public class ConfigViewPart extends ViewPart 74 implements ISelectionChangedListener, 75 IPartListener, 76 IMenuListener, 77 IConfigurationListener, 78 IDoubleClickListener, 79 IResourceChangeListener, 80 IResourceDeltaVisitor 81 { 82 public static final String ID_CONFIG_VIEW_PART = "org.terracotta.dso.ui.views.configView"; 83 private static TcPlugin fPlugin = TcPlugin.getDefault(); 84 ConfigViewer fConfigViewer; 85 TcConfig fConfig; 86 ConfigRefreshAction fRefreshAction; 87 DeleteAction fDeleteAction; 88 IncludeActionGroup fIncludeActionGroup; 89 LockActionGroup fLockActionGroup; 90 private ConfigSelectionProvider fSelectionProviderMediator; 91 IJavaProject m_javaProject; 92 93 private static String REFRESH = ActionFactory.REFRESH.getId(); 94 private static String DELETE = ActionFactory.DELETE.getId(); 95 96 public ConfigViewPart() { 97 super(); 98 fPlugin.addConfigurationListener(this); 99 } 100 101 public void createPartControl(Composite parent) { 102 createViewer(parent); 103 initDragAndDrop(parent); 104 105 fSelectionProviderMediator = new ConfigSelectionProvider(new StructuredViewer[] {fConfigViewer}); 106 IStatusLineManager slManager = getViewSite().getActionBars().getStatusLineManager(); 107 fSelectionProviderMediator.addSelectionChangedListener(new StatusBarUpdater(slManager)); 108 getSite().setSelectionProvider(fSelectionProviderMediator); 109 110 fConfigViewer.initContextMenu(this, getSite(), fSelectionProviderMediator); 111 fConfigViewer.addDoubleClickListener(this); 112 113 makeActions(); 114 fillViewMenu(); 115 getSite().getPage().addPartListener(this); 116 ResourcesPlugin.getWorkspace().addResourceChangeListener(this); 117 } 118 119 public void menuAboutToShow(IMenuManager menu) { 120 fillConfigViewerContextMenu(menu); 121 } 122 123 private void createViewer(Composite parent) { 124 fConfigViewer = new ConfigViewer(parent, this); 125 126 fConfigViewer.addKeyListener(createKeyListener()); 127 fConfigViewer.addSelectionChangedListener(this); 128 } 129 130 private void initDragAndDrop(Composite parent) { 131 addDropAdapters(fConfigViewer); 132 133 DropTarget dropTarget = new DropTarget(parent, DND.DROP_LINK | DND.DROP_DEFAULT); 134 dropTarget.setTransfer(new Transfer[] {LocalSelectionTransfer.getInstance()}); 135 dropTarget.addDropListener(new ConfigTransferDropAdapter(this, fConfigViewer)); 136 } 137 138 private void addDropAdapters(StructuredViewer viewer) { 139 Transfer[] transfers = new Transfer[] {LocalSelectionTransfer.getInstance()}; 140 int ops = DND.DROP_LINK | DND.DROP_DEFAULT; 141 142 TransferDropTargetListener[] dropListeners = new TransferDropTargetListener[] { 143 new ConfigTransferDropAdapter(this, viewer) 144 }; 145 viewer.addDropSupport(ops, transfers, new DelegatingDropAdapter(dropListeners)); 146 } 147 148 protected void fillConfigViewerContextMenu(IMenuManager menu) { 149 JavaPlugin.createStandardGroups(menu); 150 151 menu.appendToGroup(IContextMenuConstants.GROUP_SHOW, fRefreshAction); 152 if(fDeleteAction.canActionBeAdded()) { 153 menu.appendToGroup(IContextMenuConstants.GROUP_SHOW, fDeleteAction); 154 } 155 156 fIncludeActionGroup.setContext(new ActionContext(getSelection())); 157 fIncludeActionGroup.fillContextMenu(menu); 158 fIncludeActionGroup.setContext(null); 159 160 fLockActionGroup.setContext(new ActionContext(getSelection())); 161 fLockActionGroup.fillContextMenu(menu); 162 fLockActionGroup.setContext(null); 163 } 164 165 public void setConfig(final TcConfig config) { 166 getSite().getShell().getDisplay().asyncExec(new Runnable () { 167 public void run() { 168 String configPath = ""; 169 170 if(config == null) { 171 m_javaProject = null; 172 } else { 173 IProject project = m_javaProject.getProject(); 174 IFile configFile = TcPlugin.getDefault().getConfigurationFile(project); 175 configPath = project.getName() + IPath.SEPARATOR + configFile.getProjectRelativePath().toOSString(); 176 } 177 178 setTitleToolTip(configPath); 179 setContentDescription(configPath); 180 181 fConfigViewer.setConfig(fConfig = config); 182 fRefreshAction.setEnabled(config != null); 183 fDeleteAction.setEnabled(config != null && fDeleteAction.canActionBeAdded()); 184 } 185 }); 186 } 187 188 private void updateView() { 189 fConfigViewer.refresh(); 190 fConfigViewer.expandAll(); 191 } 192 193 private KeyListener createKeyListener() { 194 KeyListener keyListener = new KeyAdapter() { 195 public void keyReleased(KeyEvent event) { 196 handleKeyEvent(event); 197 } 198 }; 199 200 return keyListener; 201 } 202 203 protected void handleKeyEvent(KeyEvent event) { 204 if(event.stateMask == 0) { 205 if(event.keyCode == SWT.F5) { 206 if((fRefreshAction != null) && fRefreshAction.isEnabled()) { 207 fRefreshAction.run(); 208 return; 209 } 210 } else if(event.keyCode == Action.findKeyCode("DELETE")) { 211 if((fDeleteAction != null) && fDeleteAction.isEnabled()) { 212 fDeleteAction.run(); 213 return; 214 } 215 } 216 217 } 218 } 219 220 private void makeActions() { 221 fRefreshAction = new ConfigRefreshAction(this); 222 fDeleteAction = new DeleteAction(this); 223 fIncludeActionGroup = new IncludeActionGroup(this); 224 fLockActionGroup = new LockActionGroup(this); 225 } 226 227 private void fillViewMenu() { 228 IActionBars actionBars = getViewSite().getActionBars(); 229 IMenuManager viewMenu = actionBars.getMenuManager(); 230 IToolBarManager toolBar = actionBars.getToolBarManager(); 231 232 actionBars.setGlobalActionHandler(REFRESH, fRefreshAction); 233 actionBars.setGlobalActionHandler(DELETE, fDeleteAction); 234 235 toolBar.add(fRefreshAction); 236 toolBar.add(fDeleteAction); 237 238 viewMenu.add(fRefreshAction); 239 viewMenu.add(fDeleteAction); 240 241 fIncludeActionGroup.fillActionBars(actionBars); 242 fLockActionGroup.fillActionBars(actionBars); 243 } 244 245 public void refresh() { 246 updateView(); 247 } 248 249 void removeSelectedItem() { 250 ISelection sel = getSelection(); 251 252 if(!sel.isEmpty()) { 253 if(sel instanceof StructuredSelection) { 254 IProject project = m_javaProject.getProject(); 255 ConfigurationHelper configHelper = fPlugin.getConfigurationHelper(project); 256 StructuredSelection ss = (StructuredSelection)sel; 257 Object [] objects = ss.toArray(); 258 259 for(int i = objects.length-1; i >= 0; i--) { 260 Object obj = objects[i]; 261 262 if(obj instanceof RootWrapper) { 263 RootWrapper wrapper = (RootWrapper)obj; 264 wrapper.remove(); 265 } else if(obj instanceof LockWrapper) { 266 LockWrapper wrapper = (LockWrapper)obj; 267 wrapper.remove(); 268 } else if(obj instanceof BootClassWrapper) { 269 BootClassWrapper wrapper = (BootClassWrapper)obj; 270 wrapper.remove(); 271 } else if(obj instanceof TransientFieldWrapper) { 272 TransientFieldWrapper wrapper = (TransientFieldWrapper)obj; 273 wrapper.remove(); 274 } else if(obj instanceof DistributedMethodWrapper) { 275 DistributedMethodWrapper wrapper = (DistributedMethodWrapper)obj; 276 wrapper.remove(); 277 } else if(obj instanceof IncludeWrapper) { 278 IncludeWrapper wrapper = (IncludeWrapper)obj; 279 wrapper.remove(); 280 } else if(obj instanceof ExcludeWrapper) { 281 ExcludeWrapper wrapper = (ExcludeWrapper)obj; 282 wrapper.remove(); 283 } 284 } 285 configHelper.persistConfiguration(); 286 } 287 } 288 } 289 290 void addRoot(IField field) { 291 if(m_javaProject != null) { 292 IProject project = m_javaProject.getProject(); 293 ConfigurationHelper configHelper = fPlugin.getConfigurationHelper(project); 294 configHelper.ensureRoot(field); 295 } 296 } 297 298 void addInclude(IJavaElement element) { 299 if(m_javaProject != null) { 300 IProject project = m_javaProject.getProject(); 301 ConfigurationHelper configHelper = fPlugin.getConfigurationHelper(project); 302 configHelper.ensureAdaptable(element); 303 } 304 } 305 306 void setIncludeExpression(String classExpression) { 307 ISelection selection = getSelection(); 308 Object element = SelectionUtil.getSingleElement(selection); 309 310 if(element instanceof IncludeWrapper) { 311 IncludeWrapper wrapper = (IncludeWrapper)element; 312 wrapper.setClassExpression(classExpression); 313 314 IProject project = m_javaProject.getProject(); 315 ConfigurationHelper configHelper = fPlugin.getConfigurationHelper(project); 316 ConfigurationEditor editor = configHelper.getConfigurationEditor(); 317 318 fPlugin.removeConfigurationListener(this); 319 if(editor != null) { 320 editor.updateInstrumentedClassesPanel(); 321 } 322 configHelper.persistConfiguration(); 323 fPlugin.addConfigurationListener(this); 324 325 fConfigViewer.update(element, null); 326 } 327 } 328 329 void setHonorTransient(boolean honor) { 330 ISelection selection = getSelection(); 331 Object element = SelectionUtil.getSingleElement(selection); 332 333 if(element instanceof IncludeWrapper) { 334 IncludeWrapper wrapper = (IncludeWrapper)element; 335 wrapper.setHonorTransient(honor); 336 337 IProject project = m_javaProject.getProject(); 338 ConfigurationHelper configHelper = fPlugin.getConfigurationHelper(project); 339 ConfigurationEditor editor = configHelper.getConfigurationEditor(); 340 341 fPlugin.removeConfigurationListener(this); 342 if(editor != null) { 343 editor.updateInstrumentedClassesPanel(); 344 } 345 configHelper.persistConfiguration(); 346 fPlugin.addConfigurationListener(this); 347 } 348 } 349 350 void setOnLoad(OnLoadAction action, String handler) { 351 ISelection selection = getSelection(); 352 Object element = SelectionUtil.getSingleElement(selection); 353 354 if(element instanceof IncludeWrapper) { 355 IncludeWrapper wrapper = (IncludeWrapper)element; 356 357 if(action.isNoop()) { 358 wrapper.unsetOnLoad(); 359 } else if(action.isExecute()) { 360 wrapper.setOnLoadExecute(handler); 361 } else if(action.isMethod()) { 362 wrapper.setOnLoadMethod(handler); 363 } 364 365 IProject project = m_javaProject.getProject(); 366 ConfigurationHelper configHelper = fPlugin.getConfigurationHelper(project); 367 ConfigurationEditor editor = configHelper.getConfigurationEditor(); 368 369 fPlugin.removeConfigurationListener(this); 370 if(editor != null) { 371 editor.updateInstrumentedClassesPanel(); 372 } 373 configHelper.persistConfiguration(); 374 fPlugin.addConfigurationListener(this); 375 } 376 } 377 378 void addExclude(IJavaElement element) { 379 if(m_javaProject != null) { 380 IProject project = m_javaProject.getProject(); 381 ConfigurationHelper configHelper = fPlugin.getConfigurationHelper(project); 382 configHelper.ensureExcluded(element); 383 } 384 } 385 386 void setLockExpression(String classExpression) { 387 ISelection selection = getSelection(); 388 Object element = SelectionUtil.getSingleElement(selection); 389 390 if(element instanceof LockWrapper) { 391 LockWrapper wrapper = (LockWrapper)element; 392 wrapper.setMethodExpression(classExpression); 393 394 IProject project = m_javaProject.getProject(); 395 ConfigurationHelper configHelper = fPlugin.getConfigurationHelper(project); 396 ConfigurationEditor editor = configHelper.getConfigurationEditor(); 397 398 fPlugin.removeConfigurationListener(this); 399 if(editor != null) { 400 editor.updateLocksPanel(); 401 } 402 configHelper.persistConfiguration(); 403 fPlugin.addConfigurationListener(this); 404 405 fConfigViewer.update(element, null); 406 } 407 } 408 409 void setLockLevel(LockLevelAction action) { 410 ISelection selection = getSelection(); 411 Object element = SelectionUtil.getSingleElement(selection); 412 413 if(element instanceof LockWrapper) { 414 LockWrapper wrapper = (LockWrapper)element; 415 416 wrapper.setLevel(action.getLevel()); 417 418 IProject project = m_javaProject.getProject(); 419 ConfigurationHelper configHelper = fPlugin.getConfigurationHelper(project); 420 ConfigurationEditor editor = configHelper.getConfigurationEditor(); 421 422 fPlugin.removeConfigurationListener(this); 423 if(editor != null) { 424 editor.updateLocksPanel(); 425 } 426 configHelper.persistConfiguration(); 427 fPlugin.addConfigurationListener(this); 428 } 429 } 430 431 void addTransientField(IField field) { 432 if(m_javaProject != null) { 433 IProject project = m_javaProject.getProject(); 434 ConfigurationHelper configHelper = fPlugin.getConfigurationHelper(project); 435 configHelper.ensureTransient(field); 436 } 437 } 438 439 void addDistributedMethod(IMethod method) { 440 if(m_javaProject != null) { 441 IProject project = m_javaProject.getProject(); 442 ConfigurationHelper configHelper = fPlugin.getConfigurationHelper(project); 443 configHelper.ensureDistributedMethod(method); 444 } 445 } 446 447 void addAdditionalBootJarClass(IType type) { 448 if(m_javaProject != null) { 449 IProject project = m_javaProject.getProject(); 450 ConfigurationHelper configHelper = fPlugin.getConfigurationHelper(project); 451 configHelper.ensureBootJarClass(type); 452 } 453 } 454 455 void addAutolock(IJavaElement element) { 456 if(m_javaProject != null) { 457 IProject project = m_javaProject.getProject(); 458 ConfigurationHelper configHelper = fPlugin.getConfigurationHelper(project); 459 configHelper.ensureAutolocked(element); 460 } 461 } 462 463 void addNamedLock(IJavaElement element) { 464 if(m_javaProject != null) { 465 IProject project = m_javaProject.getProject(); 466 ConfigurationHelper configHelper = fPlugin.getConfigurationHelper(project); 467 configHelper.ensureNameLocked(element); 468 } 469 } 470 471 public void setFocus() { 472 fConfigViewer.setFocus(); 473 } 474 475 IType getType(String typeName) { 476 if(m_javaProject != null) { 477 try { 478 return JdtUtils.findType(m_javaProject, typeName); 479 } catch(JavaModelException jme) {} 480 } 481 return null; 482 } 483 484 IField getField(String fieldName) { 485 if(fieldName != null && m_javaProject != null) { 486 IProject project = m_javaProject.getProject(); 487 ConfigurationHelper configHelper = fPlugin.getConfigurationHelper(project); 488 return configHelper.getField(fieldName); 489 } 490 491 return null; 492 } 493 494 public void selectionChanged(SelectionChangedEvent event) { 495 ISelection sel = event.getSelection(); 496 497 fDeleteAction.setEnabled(fDeleteAction.canActionBeAdded()); 498 499 if(!sel.isEmpty()) { 500 if(sel instanceof StructuredSelection) { 501 StructuredSelection ss = (StructuredSelection)sel; 502 503 if(ss.size() == 1) { 504 Object obj = ss.getFirstElement(); 505 IMember member = null; 506 507 if(obj instanceof RootWrapper) { 508 member = getField(((RootWrapper)obj).getFieldName()); 509 } else if(obj instanceof QualifiedFieldName) { 510 member = getField(((QualifiedFieldName)obj).getStringValue()); 511 } else if(obj instanceof QualifiedClassName) { 512 member = getType(((QualifiedClassName)obj).getStringValue()); 513 } else if(obj instanceof BootClassWrapper) { 514 member = getType(((BootClassWrapper)obj).getClassName()); 515 } else if(obj instanceof TransientFieldWrapper) { 516 member = getField(((TransientFieldWrapper)obj).getFieldName()); 517 } 518 519 if(member != null) { 520 ConfigUI.jumpToMember(member); 521 } 522 } 523 } 524 } 525 } 526 527 public void dispose() { 528 ResourcesPlugin.getWorkspace().removeResourceChangeListener(this); 529 if(fIncludeActionGroup != null) { 530 fIncludeActionGroup.dispose(); 531 } 532 if(fLockActionGroup != null) { 533 fLockActionGroup.dispose(); 534 } 535 fPlugin.removeConfigurationListener(this); 536 getViewSite().getPage().removePartListener(this); 537 super.dispose(); 538 } 539 540 public TcConfig getConfig() { 541 if(m_javaProject != null) { 542 return fPlugin.getConfiguration(m_javaProject.getProject()); 543 } 544 return null; 545 } 546 547 protected ISelection getSelection() { 548 StructuredViewer viewerInFocus= fSelectionProviderMediator.getViewerInFocus(); 549 if(viewerInFocus != null) { 550 return viewerInFocus.getSelection(); 551 } 552 return StructuredSelection.EMPTY; 553 } 554 555 private class ConfigSelectionProvider extends SelectionProviderMediator { 556 public ConfigSelectionProvider(StructuredViewer[] viewers) { 557 super(viewers, null); 558 } 559 560 public ISelection getSelection() { 561 ISelection selection = super.getSelection(); 562 if(false && !selection.isEmpty()) { 563 return ConfigUI.convertSelection(selection); 564 } 565 return selection; 566 } 567 } 568 569 private void initFromJavaProject(IJavaProject javaProject) { 570 if(javaProject == null || !javaProject.equals(m_javaProject)) { 571 TcConfig config = null; 572 573 if((m_javaProject = javaProject) != null) { 574 IProject project = javaProject.getProject(); 575 576 if(TcPlugin.getDefault().hasTerracottaNature(project)) { 577 config = fPlugin.getConfiguration(project); 578 } 579 } 580 setConfig(config); 581 } 582 } 583 584 public void partActivated(IWorkbenchPart part) { 585 if(part != this) { 586 IWorkbenchWindow window = part.getSite().getWorkbenchWindow(); 587 588 if(window != null) { 589 ISelection selection = window.getSelectionService().getSelection(); 590 591 if(selection != null) { 592 initFromJavaProject(ActionUtil.locateSelectedJavaProject(selection)); 593 } else { 594 } 596 } 597 } 598 } 599 600 public void partBroughtToTop(IWorkbenchPart part) {} 601 public void partClosed(IWorkbenchPart part) {} 602 public void partDeactivated(IWorkbenchPart part) {} 603 604 public void partOpened(IWorkbenchPart part) { 605 if(part == this) { 606 IWorkbenchWindow window = part.getSite().getWorkbenchWindow(); 607 608 if(window != null) { 609 ISelection selection = window.getSelectionService().getSelection(); 610 611 if(selection != null) { 612 initFromJavaProject(ActionUtil.locateSelectedJavaProject(selection)); 613 } else { 614 } 616 } 617 } 618 } 619 620 public void configurationChanged(IProject project) { 621 if(TcPlugin.getDefault().hasTerracottaNature(project)) { 622 if(m_javaProject != null && m_javaProject.getProject().equals(project)) { 623 m_javaProject = JavaCore.create(project); 624 setConfig(fPlugin.getConfiguration(project)); 625 } 626 } else { 627 setConfig(null); 628 } 629 } 630 631 public void doubleClick(DoubleClickEvent event) {} 632 633 public boolean visit(IResourceDelta delta) { 634 if(fConfigViewer == null || 635 fConfigViewer.getTree().isDisposed() || 636 PlatformUI.getWorkbench().isClosing()) { 637 return false; 638 } 639 640 final IProject project; 641 if((project = isAffected(delta)) != null) { 642 Display.getDefault().asyncExec(new Runnable () { 643 public void run() { 644 m_javaProject = JavaCore.create(project); 645 setConfig(fPlugin.getConfiguration(project)); 646 } 647 }); 648 return false; 649 } 650 651 return true; 652 } 653 654 private IProject isAffected(IResourceDelta delta) { 655 IResource res = delta.getResource(); 656 IProject project = null; 657 658 if(res instanceof IProject) { 659 if(delta.getKind() == IResourceDelta.ADDED || 660 (delta.getFlags() & IResourceDelta.DESCRIPTION) != 0) 661 { 662 project = (IProject)delta.getResource(); 663 return TcPlugin.getDefault().hasTerracottaNature(project) ? project : null; 664 } 665 } 666 667 IResourceDelta[] children = delta.getAffectedChildren(); 668 for(int i = 0; i < children.length; i++) { 669 if((project = isAffected(children[i])) != null) { 670 return project; 671 } 672 } 673 674 return null; 675 } 676 677 public void resourceChanged(final IResourceChangeEvent event){ 678 switch(event.getType()) { 679 case IResourceChangeEvent.POST_CHANGE: 680 try { 681 event.getDelta().accept(this); 682 } catch(CoreException ce) { 683 ce.printStackTrace(); 684 } 685 break; 686 case IResourceChangeEvent.PRE_DELETE: 687 case IResourceChangeEvent.PRE_CLOSE: { 688 setConfig(null); 689 break; 690 } 691 } 692 } 693 } 694
| Popular Tags
|