/******************************************************************************* * Copyright (c) 2009 Andrey Loskutov. * 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 * Contributor: Andrey Loskutov - initial API and implementation *******************************************************************************/ package de.loskutov.anyedit.actions; import org.eclipse.jface.action.IAction; import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.ITextViewer; import org.eclipse.jface.text.TextViewer; import org.eclipse.jface.viewers.ISelectionProvider; import org.eclipse.ui.IEditorActionDelegate; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IViewPart; import org.eclipse.ui.part.IPage; import org.eclipse.ui.part.PageBookView; import de.loskutov.anyedit.ui.editor.AbstractEditor; import de.loskutov.anyedit.ui.editor.EditorPropertyTester; import de.loskutov.anyedit.util.EclipseUtils; /** * @author Andrey */ public abstract class AbstractOpenAction extends AbstractAction implements IEditorActionDelegate { public AbstractOpenAction() { super(); } @Override public final void setActiveEditor(IAction action, IEditorPart targetEditor) { if(targetEditor == null){ return; } setEditor(new AbstractEditor(targetEditor)); } @Override public void run(IAction action) { super.run(action); if (getViewPart() != null) { // view Action IViewPart vp = getViewPart(); if (vp instanceof PageBookView) { doPageBookViewAction((PageBookView) vp); return; } TextViewer viewer = EclipseUtils.getAdapter(vp, TextViewer.class); if(viewer != null) { runWithViewer(viewer); } ISelectionProvider sp = vp.getViewSite().getSelectionProvider(); if(sp instanceof ITextViewer){ runWithViewer((ITextViewer) sp); } } else { // editor action if (getEditor() != null) { AbstractEditor currEditor = getEditor(); IDocument doc = currEditor.getDocument(); handleAction(doc, currEditor.getSelectionProvider(), currEditor.getInput()); } } } /** * @param viewer */ protected void runWithViewer(ITextViewer viewer) { if(viewer == null){ return; } ISelectionProvider selProvider = viewer.getSelectionProvider(); IDocument doc = viewer.getDocument(); handleAction(doc, selProvider, null); } /** * @param cv */ private void doPageBookViewAction(PageBookView cv){ IPage page = cv.getCurrentPage(); runWithViewer(EditorPropertyTester.getViewer(page)); } protected abstract void handleAction( IDocument doc, ISelectionProvider selectionProvider, IEditorInput currentInput); }