Class ForwardingDocumentProvider

java.lang.Object
org.eclipse.ui.editors.text.ForwardingDocumentProvider
All Implemented Interfaces:
IStorageDocumentProvider, IDocumentProvider, IDocumentProviderExtension, IDocumentProviderExtension2, IDocumentProviderExtension3, IDocumentProviderExtension4, IDocumentProviderExtension5

A forwarding document provider is a document provider that forwards all requests to a known parent document provider. The only functional addition of the forwarding document provider is that it ensures that all documents provided to clients are appropriately set up.

This document provider should be used by editors that directly or indirectly work with a TextFileDocumentProvider and do not accept that they may be provided with documents which do not contain the partitioning they work on. This can happen either because of a plug-in configuration error or when a user associates a file name or file extension with an existing text editor and the file buffer infrastructure does not recognize that file name or file extension to be of the same file type the editor works on. Thus, the document provided for the files with that name or extension may not be set up in the way the editor expects it. The ForwardingDocumentProvider compensates for that situation.

Editors that directly work with a TextFileDocumentProvider can now use a ForwardingDocumentProvider instead and configure a TextFileDocumentProvider as its parent provider. Editors that indirectly work with a TextFileDocumentProvider, e.g. never set a document provider explicitly, should explicitly set a ForwardingDocumentProvider as document provider. In this case the forwarding document provider may not be shared between editors.

Since:
3.0
  • Constructor Details

    • ForwardingDocumentProvider

      public ForwardingDocumentProvider(String partitioning, IDocumentSetupParticipant documentSetupParticipant, IDocumentProvider parentProvider)
      Creates a new forwarding document provider with a fixed parent document provider. Calling setParentProvider(IDocumentProvider) does not have any effect on this object.
      Parameters:
      partitioning - the partitioning
      documentSetupParticipant - the document setup participant
      parentProvider - the parent document provider
    • ForwardingDocumentProvider

      public ForwardingDocumentProvider(String partitioning, IDocumentSetupParticipant documentSetupParticipant)
      Creates a new forwarding document provider with a dynamically changeable parent provider. Forwarding document providers created with that method are not allowed to be shared by multiple editors.
      Parameters:
      partitioning - the partitioning
      documentSetupParticipant - the document setup participant
  • Method Details

    • setParentProvider

      public void setParentProvider(IDocumentProvider parentProvider)
      Sets the parent document provider. This method has only an effect if the forwarding document provider has accordingly be created.
      Parameters:
      parentProvider - the new parent document provider
    • connect

      public void connect(Object element) throws CoreException
      Description copied from interface: IDocumentProvider
      Connects the given element to this document provider. This tells the provider that caller of this method is interested to work with the document provided for the given domain model element. By counting the invocations of this method and disconnect(Object) this provider can assume to know the correct number of clients working with the document provided for that domain model element.

      The given element must not be null.

      Specified by:
      connect in interface IDocumentProvider
      Parameters:
      element - the element
      Throws:
      CoreException - if the textual representation or the annotation model of the element could not be created
    • disconnect

      public void disconnect(Object element)
      Description copied from interface: IDocumentProvider
      Disconnects the given element from this document provider. This tells the provider that the caller of this method is no longer interested in working with the document provided for the given domain model element. By counting the invocations of connect(Object) and of this method this provider can assume to know the correct number of clients working with the document provided for that domain model element.

      The given element must not be null.

      Specified by:
      disconnect in interface IDocumentProvider
      Parameters:
      element - the element
    • getDocument

      public IDocument getDocument(Object element)
      Description copied from interface: IDocumentProvider
      Returns the document for the given element. Usually the document contains a textual presentation of the content of the element, or is the element itself.
      Specified by:
      getDocument in interface IDocumentProvider
      Parameters:
      element - the element, or null
      Returns:
      the document, or null if none
    • resetDocument

      public void resetDocument(Object element) throws CoreException
      Description copied from interface: IDocumentProvider
      Resets the given element's document to its last saved state. Element state listeners are notified both before (elementContentAboutToBeReplaced) and after (elementContentReplaced) the content is changed.
      Specified by:
      resetDocument in interface IDocumentProvider
      Parameters:
      element - the element, or null
      Throws:
      CoreException - if document could not be reset for the given element
    • saveDocument

      public void saveDocument(IProgressMonitor monitor, Object element, IDocument document, boolean overwrite) throws CoreException
      Description copied from interface: IDocumentProvider
      Saves the given document provided for the given element.
      Specified by:
      saveDocument in interface IDocumentProvider
      Parameters:
      monitor - a progress monitor to report progress and request cancelation
      element - the element, or null
      document - the document
      overwrite - indicates whether overwrite should be performed while saving the given element if necessary
      Throws:
      CoreException - if document could not be stored to the given element
    • getModificationStamp

      public long getModificationStamp(Object element)
      Description copied from interface: IDocumentProvider
      Returns the modification stamp of the given element.
      Specified by:
      getModificationStamp in interface IDocumentProvider
      Parameters:
      element - the element
      Returns:
      the modification stamp of the given element
    • getSynchronizationStamp

      public long getSynchronizationStamp(Object element)
      Description copied from interface: IDocumentProvider
      Returns the time stamp of the last synchronization of the given element and its provided document.
      Specified by:
      getSynchronizationStamp in interface IDocumentProvider
      Parameters:
      element - the element
      Returns:
      the synchronization stamp of the given element
    • isDeleted

      public boolean isDeleted(Object element)
      Description copied from interface: IDocumentProvider
      Returns whether the given element has been deleted.
      Specified by:
      isDeleted in interface IDocumentProvider
      Parameters:
      element - the element
      Returns:
      true if the element has been deleted
    • mustSaveDocument

      public boolean mustSaveDocument(Object element)
      Description copied from interface: IDocumentProvider
      Returns whether the document provided for the given element must be saved.
      Specified by:
      mustSaveDocument in interface IDocumentProvider
      Parameters:
      element - the element, or null
      Returns:
      true if the document must be saved, and false otherwise (including the element is null)
    • canSaveDocument

      public boolean canSaveDocument(Object element)
      Description copied from interface: IDocumentProvider
      Returns whether the document provided for the given element differs from its original state which would required that it be saved.
      Specified by:
      canSaveDocument in interface IDocumentProvider
      Parameters:
      element - the element, or null
      Returns:
      true if the document can be saved, and false otherwise (including the element is null)
    • getAnnotationModel

      public IAnnotationModel getAnnotationModel(Object element)
      Description copied from interface: IDocumentProvider
      Returns the annotation model for the given element.
      Specified by:
      getAnnotationModel in interface IDocumentProvider
      Parameters:
      element - the element, or null
      Returns:
      the annotation model, or null if none
    • aboutToChange

      public void aboutToChange(Object element)
      Description copied from interface: IDocumentProvider
      Informs this document provider about upcoming changes of the given element. The changes might cause change notifications specific for the type of the given element. If this provider manages a document for the given element, the document provider must not change the document because of the notifications received after aboutToChange has been and before changed is called. In this case, it is assumed that the document is already up to date, e.g., a save operation is a typical case.

      The concrete nature of the change notification depends on the concrete type of the given element. If the element is, e.g., an IResource the notification is a resource delta.

      Specified by:
      aboutToChange in interface IDocumentProvider
      Parameters:
      element - the element, or null
    • changed

      public void changed(Object element)
      Description copied from interface: IDocumentProvider
      Informs this document provider that the given element has been changed. All notifications have been sent out. If this provider manages a document for the given element, the document provider must from now on change the document on the receipt of change notifications. The concrete nature of the change notification depends on the concrete type of the given element. If the element is, e.g., an IResource the notification is a resource delta.
      Specified by:
      changed in interface IDocumentProvider
      Parameters:
      element - the element, or null
    • addElementStateListener

      public void addElementStateListener(IElementStateListener listener)
      Description copied from interface: IDocumentProvider
      Adds the given element state listener to this document provider. Has no effect if an identical listener is already registered.
      Specified by:
      addElementStateListener in interface IDocumentProvider
      Parameters:
      listener - the listener
    • removeElementStateListener

      public void removeElementStateListener(IElementStateListener listener)
      Description copied from interface: IDocumentProvider
      Removes the given element state listener from this document provider. Has no effect if an identical listener is not registered.
      Specified by:
      removeElementStateListener in interface IDocumentProvider
      Parameters:
      listener - the listener
    • isReadOnly

      public boolean isReadOnly(Object element)
      Description copied from interface: IDocumentProviderExtension
      Returns whether the document provider thinks that the given element is read-only. If this method returns true, saveDocument could fail. This method does not say anything about the document constructed from the given element. If the given element is not connected to this document provider, the return value is undefined. Document providers are allowed to use a cache to answer this question, i.e. there can be a difference between the "real" state of the element and the return value.
      Specified by:
      isReadOnly in interface IDocumentProviderExtension
      Parameters:
      element - the element
      Returns:
      true if the given element is read-only, false otherwise
    • isModifiable

      public boolean isModifiable(Object element)
      Description copied from interface: IDocumentProviderExtension
      Returns whether the document provider thinks that the given element can persistently be modified. This is orthogonal to isReadOnly as read-only elements may be modifiable and writable elements may not be modifiable. If the given element is not connected to this document provider, the result is undefined. Document providers are allowed to use a cache to answer this question, i.e. there can be a difference between the "real" state of the element and the return value.
      Specified by:
      isModifiable in interface IDocumentProviderExtension
      Parameters:
      element - the element
      Returns:
      true if the given element is modifiable, false otherwise
    • validateState

      public void validateState(Object element, Object computationContext) throws CoreException
      Description copied from interface: IDocumentProviderExtension
      Validates the state of the given element. This method may change the "real" state of the element. If using, it also updates the internal caches, so that this method may also change the results returned by isReadOnly and isModifiable. If the given element is not connected to this document provider, the effect is undefined.
      Specified by:
      validateState in interface IDocumentProviderExtension
      Parameters:
      element - the element
      computationContext - the context in which the computation is performed, e.g., a SWT shell
      Throws:
      CoreException - if validating fails
    • isStateValidated

      public boolean isStateValidated(Object element)
      Description copied from interface: IDocumentProviderExtension
      Returns whether the state of the given element has been validated.
      Specified by:
      isStateValidated in interface IDocumentProviderExtension
      Parameters:
      element - the element
      Returns:
      true if the state has been validated
    • updateStateCache

      public void updateStateCache(Object element) throws CoreException
      Description copied from interface: IDocumentProviderExtension
      Updates the state cache for the given element. This method may change the result returned by isReadOnly and isModifiable. If the given element is not connected to this document provider, the effect is undefined.
      Specified by:
      updateStateCache in interface IDocumentProviderExtension
      Parameters:
      element - the element
      Throws:
      CoreException - if validating fails
    • setCanSaveDocument

      public void setCanSaveDocument(Object element)
      Description copied from interface: IDocumentProviderExtension
      Marks the document managed for the given element as savable. I.e. canBeSaved(element) will return true afterwards.
      Specified by:
      setCanSaveDocument in interface IDocumentProviderExtension
      Parameters:
      element - the element
    • getStatus

      public IStatus getStatus(Object element)
      Description copied from interface: IDocumentProviderExtension
      Returns the status of the given element.
      Specified by:
      getStatus in interface IDocumentProviderExtension
      Parameters:
      element - the element
      Returns:
      the status of the given element
    • synchronize

      public void synchronize(Object element) throws CoreException
      Description copied from interface: IDocumentProviderExtension
      Synchronizes the document provided for the given element with the given element. After that call getSynchronizationTimeStamp and getModificationTimeStamp return the same value.
      Specified by:
      synchronize in interface IDocumentProviderExtension
      Parameters:
      element - the element
      Throws:
      CoreException - if the synchronization could not be performed
    • setProgressMonitor

      public void setProgressMonitor(IProgressMonitor progressMonitor)
      Description copied from interface: IDocumentProviderExtension2
      Sets this providers progress monitor.
      Specified by:
      setProgressMonitor in interface IDocumentProviderExtension2
      Parameters:
      progressMonitor - the progress monitor
    • getProgressMonitor

      public IProgressMonitor getProgressMonitor()
      Description copied from interface: IDocumentProviderExtension2
      Returns this providers progress monitor.
      Specified by:
      getProgressMonitor in interface IDocumentProviderExtension2
      Returns:
      IProgressMonitor
    • isSynchronized

      public boolean isSynchronized(Object element)
      Description copied from interface: IDocumentProviderExtension3
      Returns whether the information provided for the given element is in sync with the element.
      Specified by:
      isSynchronized in interface IDocumentProviderExtension3
      Parameters:
      element - the element
      Returns:
      true if the information is in sync with the element, false otherwise
    • isNotSynchronizedException

      public boolean isNotSynchronizedException(Object element, CoreException ex)
      Description copied from interface: IDocumentProviderExtension5
      Tells whether the given core exception is exactly the exception which is thrown for a non-synchronized element.
      Specified by:
      isNotSynchronizedException in interface IDocumentProviderExtension5
      Parameters:
      element - the element
      ex - the core exception
      Returns:
      true iff the given core exception is exactly the exception which is thrown for a non-synchronized element
    • getContentType

      public IContentType getContentType(Object element) throws CoreException
      Description copied from interface: IDocumentProviderExtension4
      Returns the content type of for the given element or null if none could be determined. If the element's document can be saved, the returned content type is determined by the document's current content.
      Specified by:
      getContentType in interface IDocumentProviderExtension4
      Parameters:
      element - the element
      Returns:
      the content type or null
      Throws:
      CoreException - if reading or accessing the underlying store fails
    • getDefaultEncoding

      public String getDefaultEncoding()
      Description copied from interface: IStorageDocumentProvider
      Returns the default character encoding used by this provider.
      Specified by:
      getDefaultEncoding in interface IStorageDocumentProvider
      Returns:
      the default character encoding used by this provider
    • getEncoding

      public String getEncoding(Object element)
      Description copied from interface: IStorageDocumentProvider
      Returns the character encoding for the given element, or null if the element is not managed by this provider.
      Specified by:
      getEncoding in interface IStorageDocumentProvider
      Parameters:
      element - the element
      Returns:
      the encoding for the given element
    • setEncoding

      public void setEncoding(Object element, String encoding)
      Description copied from interface: IStorageDocumentProvider
      Sets the encoding for the given element. If encoding is null the workbench's character encoding should be used.
      Specified by:
      setEncoding in interface IStorageDocumentProvider
      Parameters:
      element - the element
      encoding - the encoding to be used