/******************************************************************************* * 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.ui.editor; import java.io.File; import java.net.URI; import org.eclipse.core.runtime.IAdapterFactory; import org.eclipse.jdt.internal.ui.javaeditor.IClassFileEditorInput; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IURIEditorInput; import org.eclipse.ui.editors.text.ILocationProvider; import org.eclipse.ui.texteditor.ITextEditor; import de.loskutov.anyedit.compare.ContentWrapper; import de.loskutov.anyedit.util.EclipseUtils; public class EditorAdapterFactory implements IAdapterFactory { @Override public Object getAdapter(Object adaptableObject, Class adapterType) { if(adaptableObject instanceof IURIEditorInput) { IURIEditorInput editorInput = (IURIEditorInput) adaptableObject; if(adapterType == File.class) { URI uri = editorInput.getURI(); return EclipseUtils.getLocalFile(uri); } } // "Unnamed editor" support, see org.eclipse.ui.internal.editors.text.NonExistingFileEditorInput if(adaptableObject instanceof ILocationProvider) { // ILocationProvider provider = (ILocationProvider) adaptableObject; // if(adapterType == File.class) { // IPath path = provider.getPath(provider); // return path == null ? null : path.toFile(); // } IEditorPart activeEditor = EclipseUtils.getActiveEditor(); if(activeEditor instanceof ITextEditor) { if(adapterType == ContentWrapper.class) { AbstractEditor editor = new AbstractEditor(activeEditor); ContentWrapper content = new ContentWrapper(activeEditor.getTitle(), ContentWrapper.UNKNOWN_CONTENT_TYPE, editor); content.setModifiable(true); return content; } } } if(adaptableObject instanceof IClassFileEditorInput) { IEditorPart activeEditor = EclipseUtils.getActiveEditor(); if(activeEditor instanceof ITextEditor) { if(adapterType == ContentWrapper.class) { AbstractEditor editor = new AbstractEditor(activeEditor); ContentWrapper content = new ContentWrapper(activeEditor.getTitle(), "java", editor); content.setModifiable(false); return content; } } } return null; } @Override public Class[] getAdapterList() { return new Class[] {File.class, ContentWrapper.class}; } }