package com.liferay.ide.velocity.ui.editor.outline;
import org.eclipse.jface.text.BadPositionCategoryException;
import org.eclipse.jface.text.DefaultPositionUpdater;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.IPositionUpdater;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.Viewer;
import com.liferay.ide.velocity.editor.VelocityEditor;
import com.liferay.ide.velocity.vaulttec.ui.model.ITreeNode;
/**
* DOCUMENT ME!
*
* @version $Revision: 7 $
* @author <a href="mailto:akmal.sarhan@gmail.com">Akmal Sarhan </a>
*/
public class VelocityOutlineContentProvider implements ITreeContentProvider
{
public static final String VELOCITY_TEMPLATE = "__velocity_template";
private VelocityEditor fEditor;
private IPositionUpdater fPositionUpdater;
public VelocityOutlineContentProvider(VelocityEditor anEditor)
{
fEditor = anEditor;
fPositionUpdater = new DefaultPositionUpdater(VELOCITY_TEMPLATE);
}
/*
* (non-Javadoc)
* @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer,
* java.lang.Object, java.lang.Object)
*/
public void inputChanged(Viewer aViewer, Object anOldInput, Object aNewInput)
{
if (anOldInput != aNewInput)
{
if (anOldInput != null)
{
IDocument document = fEditor.getDocumentProvider().getDocument(anOldInput);
if (document != null)
{
try
{
document.removePositionCategory(VELOCITY_TEMPLATE);
}
catch (BadPositionCategoryException e)
{
}
document.removePositionUpdater(fPositionUpdater);
}
}
if (aNewInput != null)
{
IDocument document = fEditor.getDocumentProvider().getDocument(aNewInput);
if (document != null)
{
document.addPositionCategory(VELOCITY_TEMPLATE);
document.addPositionUpdater(fPositionUpdater);
}
}
}
}
/*
* (non-Javadoc)
* @see org.eclipse.jface.viewers.IContentProvider#dispose()
*/
public void dispose()
{
}
/*
* (non-Javadoc)
* @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
*/
public Object[] getElements(Object inputElement)
{
return fEditor.getRootElements();
}
/*
* (non-Javadoc)
* @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java.lang.Object)
*/
public Object[] getChildren(Object anElement)
{
return (anElement instanceof ITreeNode) ? ((ITreeNode) anElement).getChildren() : ITreeNode.NO_CHILDREN;
}
/*
* (non-Javadoc)
* @see org.eclipse.jface.viewers.ITreeContentProvider#getParent(java.lang.Object)
*/
public Object getParent(Object anElement)
{
return (anElement instanceof ITreeNode) ? ((ITreeNode) anElement).getParent() : null;
}
/*
* (non-Javadoc)
* @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object)
*/
public boolean hasChildren(Object anElement)
{
return (anElement instanceof ITreeNode) ? ((ITreeNode) anElement).hasChildren() : false;
}
}