X-Git-Url: http://secure.phpeclipse.com diff --git a/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/editors/SQLContentOutlinePage.java b/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/editors/SQLContentOutlinePage.java new file mode 100644 index 0000000..c32788e --- /dev/null +++ b/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/editors/SQLContentOutlinePage.java @@ -0,0 +1,155 @@ +package com.quantum.editors; + +import java.util.List; +import java.util.StringTokenizer; + +import com.quantum.ImageStore; +import com.quantum.sql.parser.SQLParser; + +import org.eclipse.jface.text.DocumentEvent; +import org.eclipse.jface.text.IDocument; +import org.eclipse.jface.text.IDocumentListener; +import org.eclipse.jface.viewers.ILabelProvider; +import org.eclipse.jface.viewers.ILabelProviderListener; +import org.eclipse.jface.viewers.ITreeContentProvider; +import org.eclipse.jface.viewers.TreeViewer; +import org.eclipse.jface.viewers.Viewer; +import org.eclipse.swt.graphics.Image; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.ui.IEditorInput; +import org.eclipse.ui.views.contentoutline.ContentOutlinePage; + + +/** + * @author BC + */ +public class SQLContentOutlinePage extends ContentOutlinePage { + + class LabelProviderImpl implements ILabelProvider { + public Image getImage(Object element) { + return ImageStore.getImage(ImageStore.SCRIPT); + } + + public String getText(Object element) { + if (element != null && element instanceof String) { + StringTokenizer tokenizer = new StringTokenizer((String) element); + + String token = tokenizer.hasMoreTokens() ? tokenizer.nextToken() : ""; + + if ("select".equalsIgnoreCase(token) + || "update".equalsIgnoreCase(token) + || "insert".equalsIgnoreCase(token) + || "delete".equalsIgnoreCase(token) + || "grant".equalsIgnoreCase(token)) { + return token; + } else if (tokenizer.hasMoreTokens()) { + return token + " " + tokenizer.nextToken(); + } else { + return token; + } + } else { + return element == null ? "" : element.toString(); + } + } + + public void addListener(ILabelProviderListener listener) { + } + + public void dispose() { + } + + public boolean isLabelProperty(Object element, String property) { + return false; + } + + public void removeListener(ILabelProviderListener listener) { + } + } + + class ContentProviderImpl implements ITreeContentProvider { + + public Object[] getElements(Object inputElement) { + if (inputElement != null && inputElement instanceof IDocument) { + String text = ((IDocument) inputElement).get(); + List sql = SQLParser.parse(text); + return sql.toArray(); + } else { + return null; + } + } + + public void dispose() { + } + + public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { + } + + public Object[] getChildren(Object parentElement) { + return null; + } + + public Object getParent(Object element) { + return null; + } + + public boolean hasChildren(Object element) { + return false; + } + } + + private IDocumentListener listener; + + private final SQLDocumentProvider documentProvider; + private IEditorInput editorInput; + /** + * @param documentProvider + * @param editor + */ + public SQLContentOutlinePage(SQLDocumentProvider documentProvider, SQLEditor editor) { + this.documentProvider = documentProvider; + } + + + + public void createControl(Composite parent) { + super.createControl(parent); + + final TreeViewer treeViewer = getTreeViewer(); + + IDocument document = this.documentProvider.getDocument(this.editorInput); + if (document != null) { + treeViewer.setLabelProvider(new LabelProviderImpl()); + treeViewer.setContentProvider(new ContentProviderImpl()); + treeViewer.setInput(document); + + this.listener = new IDocumentListener() { + + public void documentAboutToBeChanged(DocumentEvent event) { + } + + public void documentChanged(DocumentEvent event) { + treeViewer.refresh(); + } + }; + document.addDocumentListener(this.listener); + } + } + /** + * @param editorInput + */ + public void setInput(IEditorInput editorInput) { + this.editorInput = editorInput; + } + + + public void dispose() { + if (this.listener != null) { + IDocument document = this.documentProvider.getDocument(this.editorInput); + if (document != null) { + document.removeDocumentListener(this.listener); + this.listener = null; + } + } + super.dispose(); + } +}