package com.aptana.editor.php.internal.ui.editor;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.source.IAnnotationModel;
import org2.eclipse.php.internal.core.PHPVersion;
import com.aptana.editor.common.CompositeDocumentProvider;
import com.aptana.editor.html.HTMLSourceConfiguration;
import com.aptana.editor.php.core.IPHPVersionListener;
import com.aptana.editor.php.internal.core.IPHPConstants;
/**
* PHP document provider.
*
* @author Shalom Gibly <sgibly@aptana.com>
*/
public class PHPDocumentProvider extends CompositeDocumentProvider implements IPHPVersionListener
{
private PHPVersion phpVersion;
private IDocument document;
public PHPDocumentProvider()
{
super(IPHPConstants.CONTENT_TYPE_HTML_PHP, HTMLSourceConfiguration.getDefault(),
PHPSourceConfiguration.getDefault(), PHPPartitionerSwitchStrategy.getDefault());
}
/**
* Override the {@link #connect(Object)} to map the inner {@link IDocument} to a {@link PHPVersion}.<br>
* This is done to provide accurate PHP tokens coloring for each PHP version.
*/
@Override
public void connect(Object element) throws CoreException
{
super.connect(element);
this.document = getDocument(element);
PHPVersionDocumentManager.increaseDocumentCount(document);
if (phpVersion != null)
{
// This might occur when the file is renamed, for example.
PHPVersionDocumentManager.updateVersion(document, phpVersion);
}
}
/**
* Override the disconnect to unregister the document from the {@link PHPVersionDocumentManager}.
*/
@Override
public void disconnect(Object element)
{
PHPVersionDocumentManager.decreaseDocumentCount(document);
super.disconnect(element);
}
public void phpVersionChanged(PHPVersion newVersion)
{
this.phpVersion = newVersion;
if (document != null && newVersion != null)
{
PHPVersionDocumentManager.updateVersion(document, phpVersion);
}
}
/* (non-Javadoc)
* @see org.eclipse.ui.editors.text.TextFileDocumentProvider#createAnnotationModel(org.eclipse.core.resources.IFile)
*/
@Override
protected IAnnotationModel createAnnotationModel(IFile file)
{
return new SourceModuleAnnotationModel(file);
}
}