KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > terracotta > dso > views > ConfigViewPart


1 /*
2  * All content copyright (c) 2003-2006 Terracotta, Inc., except as may otherwise be noted in a separate copyright
3  * notice. All rights reserved.
4  */

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 JavaDoc 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 JavaDoc REFRESH = ActionFactory.REFRESH.getId();
94   private static String JavaDoc 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 JavaDoc () {
167       public void run() {
168         String JavaDoc 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 JavaDoc[] objects = ss.toArray();
258         
259         for(int i = objects.length-1; i >= 0; i--) {
260           Object JavaDoc 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 JavaDoc classExpression) {
307     ISelection selection = getSelection();
308     Object JavaDoc 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 JavaDoc 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 JavaDoc handler) {
351     ISelection selection = getSelection();
352     Object JavaDoc 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 JavaDoc classExpression) {
387     ISelection selection = getSelection();
388     Object JavaDoc 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 JavaDoc 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 JavaDoc 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 JavaDoc 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 JavaDoc 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           //setConfig(null);
595
}
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           //setConfig(null);
615
}
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 JavaDoc() {
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