/******************************************************************************* | |
* Copyright (c) 2012 IBM Corporation and others. | |
* All rights reserved. This program and the accompanying materials | |
* are made available under the terms of the Eclipse Public License v1.0 | |
* which accompanies this distribution, and is available at | |
* http://www.eclipse.org/legal/epl-v10.html | |
* | |
* Contributors: | |
* IBM Corporation - initial API and implementation | |
*******************************************************************************/ | |
package org.eclipse.wst.sse.ui.internal.text; | |
import org.eclipse.jface.text.IAutoEditStrategy; | |
import org.eclipse.jface.text.IDocument; | |
import org.eclipse.ui.IEditorPart; | |
import org.eclipse.ui.IWorkbenchPage; | |
import org.eclipse.ui.IWorkbenchWindow; | |
import org.eclipse.ui.PlatformUI; | |
import org.eclipse.ui.texteditor.IDocumentProvider; | |
import org.eclipse.ui.texteditor.ITextEditor; | |
import org.eclipse.ui.texteditor.ITextEditorExtension3; | |
/** | |
* Abstract class providing functionality to verify if a document supports | |
* the smart insert mode. | |
* | |
*/ | |
public abstract class StructuredAutoEditStrategy implements IAutoEditStrategy { | |
/** | |
* Evaluates if the document should support smart insert mode | |
* @param document the document being edited | |
* @return false if the document belongs to an active editor whose smart insert mode is disabled; otherwise, true. | |
*/ | |
protected boolean supportsSmartInsert(IDocument document) { | |
Object editor = getActiveTextEditor(); | |
if (editor instanceof ITextEditor) { | |
ITextEditor textEditor = (ITextEditor) editor; | |
final IDocumentProvider provider = textEditor.getDocumentProvider(); | |
if (provider != null) { | |
if (document == provider.getDocument(textEditor.getEditorInput())) { | |
// Document belongs to the active editor | |
if (!((textEditor instanceof ITextEditorExtension3) && (((ITextEditorExtension3) textEditor).getInsertMode() == ITextEditorExtension3.SMART_INSERT))) { | |
return false; | |
} | |
} | |
} | |
} | |
return true; | |
} | |
/** | |
* Return the active text editor if possible, otherwise the active editor | |
* part. | |
* | |
* @return Object | |
*/ | |
private Object getActiveTextEditor() { | |
IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); | |
if (window != null) { | |
IWorkbenchPage page = window.getActivePage(); | |
if (page != null) { | |
IEditorPart editor = page.getActiveEditor(); | |
if (editor != null) { | |
if (editor instanceof ITextEditor) { | |
return editor; | |
} | |
ITextEditor textEditor = (ITextEditor) editor.getAdapter(ITextEditor.class); | |
if (textEditor != null) { | |
return textEditor; | |
} | |
return editor; | |
} | |
} | |
} | |
return null; | |
} | |
} |