/**************************************************************************** * Copyright (c) 2004 Composent, Inc. 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: * Composent, Inc. - initial API and implementation *****************************************************************************/ package org.eclipse.ecf.internal.example.collab.ui; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IMarker; import org.eclipse.core.runtime.CoreException; import org.eclipse.ecf.example.collab.share.EclipseCollabSharedObject; import org.eclipse.ui.IEditorDescriptor; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IEditorRegistry; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PartInitException; import org.eclipse.ui.editors.text.EditorsUI; import org.eclipse.ui.part.FileEditorInput; import org.eclipse.ui.texteditor.ITextEditor; public class EditorHelper { IWorkbenchWindow window = null; public EditorHelper(IWorkbenchWindow window) { this.window = window; } protected IWorkbenchWindow getWorkbenchWindow() { return window; } public IEditorPart openEditorForFile(IFile file) throws PartInitException { final IWorkbenchPage page = getWorkbenchWindow().getActivePage(); final IEditorInput input = new FileEditorInput(file); // try to find an open editor with this input IEditorPart part = page.findEditor(input); if (part != null) { // found one, activate it page.activate(part); } else { // no editor found, open a new one final String editorId = getEditorIdForFile(file); part = page.openEditor(input, editorId); } return part; } protected ITextEditor openTextEditorForFile(IFile file) throws PartInitException { final IEditorPart editor = openEditorForFile(file); if (editor != null && (editor instanceof ITextEditor)) { return (ITextEditor) editor; } else return null; } public void openAndSelectForFile(IFile file, int offset, int length) throws PartInitException { final ITextEditor textEditor = openTextEditorForFile(file); if (textEditor == null) return; setTextEditorSelection(textEditor, offset, length); } protected IMarker createMarkerForFile(IFile file, EclipseCollabSharedObject.SharedMarker marker) throws CoreException { final IMarker m = file.createMarker(EclipseCollabSharedObject.SHARED_MARKER_TYPE); m.setAttribute(IMarker.SEVERITY, IMarker.SEVERITY_INFO); final Integer offset = marker.getOffset(); final Integer length = marker.getLength(); final int start = ((offset == null) ? 0 : marker.getOffset().intValue()); m.setAttribute(IMarker.CHAR_START, start); final int end = start + ((length == null) ? 0 : marker.getOffset().intValue()); m.setAttribute(IMarker.CHAR_END, end); return m; } public void openAndAddMarkerForFile(IFile file, EclipseCollabSharedObject.SharedMarker marker) throws PartInitException, CoreException { final IWorkbenchPage page = getWorkbenchWindow().getActivePage(); final IEditorInput input = new FileEditorInput(file); // try to find an open editor with this input IEditorPart part = page.findEditor(input); if (part != null) { // found one, activate it page.activate(part); } else { // no editor found, open a new one final String editorId = getEditorIdForFile(file); part = page.openEditor(input, editorId); } createMarkerForFile(file, marker); } protected void setTextEditorSelection(ITextEditor textEditor, int offset, int length) { textEditor.selectAndReveal(offset, length); } protected String getEditorIdForFile(IFile file) { final IWorkbench wb = getWorkbenchWindow().getWorkbench(); final IEditorRegistry er = wb.getEditorRegistry(); final IEditorDescriptor desc = er.getDefaultEditor(file.getName()); if (desc != null) return desc.getId(); else return EditorsUI.DEFAULT_TEXT_EDITOR_ID; } }