/*******************************************************************************
* Copyright (c) 2015 IBM Corportation, Red Hat 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:
* Mickael Istria (Red Hat Inc.) - extracted from IDE.getEditorDescription
*******************************************************************************/
package org.eclipse.ui.internal.ide.registry;
import org.eclipse.ui.IEditorDescriptor;
import org.eclipse.ui.IEditorRegistry;
import org.eclipse.ui.ide.IDE;
import org.eclipse.ui.ide.IUnassociatedEditorStrategy;
import org.eclipse.ui.internal.ide.IDEWorkbenchPlugin;
/**
* Strategy for unassociated file types:
* <ol>
* <li>The operating system is consulted to determine if an in-place component
* editor is available (e.g. OLE editor on Win32 platforms).</li>
* <li>The operating system is consulted to determine if an external editor is
* available.</li>
* <li>The workbench editor registry is consulted to determine if the default
* text editor is available.</li></li>
* </ol>
* This is the default strategy, as it mimics the legacy behavior of IDE before
* {@link IUnassociatedEditorStrategy} got introduced.
*
* @since 3.12
*/
public final class SystemEditorOrTextEditorStrategy implements IUnassociatedEditorStrategy {
/**
* Id of the extension. Defined in plugin.xml and may be used as value for
* preference {@link IDE#UNASSOCIATED_EDITOR_STRATEGY_PREFERENCE_KEY}
*/
public static final String EXTENSION_ID = "org.eclipse.ui.ide.systemEditorThenTextEditor"; //$NON-NLS-1$
@Override
public IEditorDescriptor getEditorDescriptor(String name, IEditorRegistry editorReg) {
IEditorDescriptor editorDesc = null;
// next check the OS for in-place editor (OLE on Win32)
if (editorReg.isSystemInPlaceEditorAvailable(name)) {
editorDesc = editorReg.findEditor(IEditorRegistry.SYSTEM_INPLACE_EDITOR_ID);
}
// next check with the OS for an external editor
if (editorDesc == null && editorReg.isSystemExternalEditorAvailable(name)) {
editorDesc = editorReg.findEditor(IEditorRegistry.SYSTEM_EXTERNAL_EDITOR_ID);
}
// next lookup the default text editor
if (editorDesc == null) {
editorDesc = editorReg.findEditor(IDEWorkbenchPlugin.DEFAULT_TEXT_EDITOR_ID);
}
return editorDesc;
}
}