You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by jo...@apache.org on 2009/04/27 11:17:15 UTC

svn commit: r768903 - /incubator/uima/sandbox/trunk/CasEditorEclipsePlugin/src/main/java/org/apache/uima/caseditor/editor/AnnotationEditor.java

Author: joern
Date: Mon Apr 27 09:17:14 2009
New Revision: 768903

URL: http://svn.apache.org/viewvc?rev=768903&view=rev
Log:
UIMA-1335

Modified:
    incubator/uima/sandbox/trunk/CasEditorEclipsePlugin/src/main/java/org/apache/uima/caseditor/editor/AnnotationEditor.java

Modified: incubator/uima/sandbox/trunk/CasEditorEclipsePlugin/src/main/java/org/apache/uima/caseditor/editor/AnnotationEditor.java
URL: http://svn.apache.org/viewvc/incubator/uima/sandbox/trunk/CasEditorEclipsePlugin/src/main/java/org/apache/uima/caseditor/editor/AnnotationEditor.java?rev=768903&r1=768902&r2=768903&view=diff
==============================================================================
--- incubator/uima/sandbox/trunk/CasEditorEclipsePlugin/src/main/java/org/apache/uima/caseditor/editor/AnnotationEditor.java (original)
+++ incubator/uima/sandbox/trunk/CasEditorEclipsePlugin/src/main/java/org/apache/uima/caseditor/editor/AnnotationEditor.java Mon Apr 27 09:17:14 2009
@@ -30,6 +30,7 @@
 import org.apache.uima.cas.Type;
 import org.apache.uima.cas.TypeSystem;
 import org.apache.uima.cas.text.AnnotationFS;
+import org.apache.uima.caseditor.CasEditorPlugin;
 import org.apache.uima.caseditor.editor.action.DeleteFeatureStructureAction;
 import org.apache.uima.caseditor.editor.annotation.DrawingStyle;
 import org.apache.uima.caseditor.editor.annotation.EclipseAnnotationPeer;
@@ -43,6 +44,12 @@
 import org.apache.uima.caseditor.editor.util.AnnotationSelection;
 import org.apache.uima.caseditor.editor.util.FeatureStructureTransfer;
 import org.apache.uima.caseditor.editor.util.Span;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceChangeEvent;
+import org.eclipse.core.resources.IResourceChangeListener;
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.core.resources.IResourceDeltaVisitor;
+import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.jface.action.Action;
 import org.eclipse.jface.action.IAction;
@@ -86,6 +93,7 @@
 import org.eclipse.ui.IWorkbenchPart;
 import org.eclipse.ui.IWorkbenchWindow;
 import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.part.FileEditorInput;
 import org.eclipse.ui.texteditor.IStatusField;
 import org.eclipse.ui.texteditor.ITextEditorActionDefinitionIds;
 import org.eclipse.ui.texteditor.IWorkbenchActionDefinitionIds;
@@ -414,6 +422,51 @@
     }
   }
 
+  /**
+   * Listens for resource remove/delete event, if the input file for the
+   * editor is removed the editor will be closed.
+   */
+  private class CloseEditorListener implements IResourceChangeListener {
+
+    private AnnotationEditor editor;
+    
+    public CloseEditorListener(AnnotationEditor editor) {
+      this.editor = editor;
+    }
+    
+    public void resourceChanged(IResourceChangeEvent event) {
+      IResourceDelta delta = event.getDelta();
+      try {
+        IResourceDeltaVisitor visitor = new IResourceDeltaVisitor() {
+          public boolean visit(IResourceDelta delta) throws CoreException {
+            if (delta.getFlags() != IResourceDelta.MARKERS
+                    && delta.getResource().getType() == IResource.FILE) {
+              if (delta.getKind() == IResourceDelta.REMOVED) {
+                IResource resource = delta.getResource();
+
+                IEditorInput input = editor.getEditorInput();
+
+                if (input instanceof FileEditorInput) {
+                  FileEditorInput fileInput = (FileEditorInput) input;
+
+                  if (resource.equals(fileInput.getFile())) {
+                    editor.close(false);
+                  }
+                }
+              }
+            }
+
+            return true;
+          }
+        };
+
+        delta.accept(visitor);
+      } catch (CoreException e) {
+        CasEditorPlugin.log(e);
+      }
+    }
+  }
+  
   private Type mAnnotationMode;
 
   /**
@@ -442,6 +495,8 @@
 
   private DocumentListener mAnnotationSynchronizer;
 
+  private CloseEditorListener closeEditorListener;
+  
   /**
    * Creates an new AnnotationEditor object.
    */
@@ -620,6 +675,11 @@
     mDocument = (AnnotationDocument) getDocumentProvider().getDocument(input);
 
     if (mDocument != null) {
+      
+      closeEditorListener = new CloseEditorListener(this);
+      ResourcesPlugin.getWorkspace().addResourceChangeListener(
+              closeEditorListener, IResourceChangeEvent.POST_CHANGE);
+      
     	// mAnnotationModel = getDocumentProvider().getAnnotationModel(input);
 
       mAnnotationSynchronizer = new DocumentListener();
@@ -949,6 +1009,11 @@
       document.removeChangeListener(mAnnotationSynchronizer);
     }
     
+    if (closeEditorListener != null) {
+      ResourcesPlugin.getWorkspace()
+              .removeResourceChangeListener(closeEditorListener);
+    }
+    
     super.dispose();
   }