/*******************************************************************************
* Copyright (c) 2007, 2008 Spring IDE Developers
* 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:
* Spring IDE Developers - initial API and implementation
*******************************************************************************/
package org.springframework.ide.eclipse.beans.mylyn.ui;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.resources.IResource;
import org.eclipse.jface.text.TextSelection;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.mylyn.context.core.ContextCore;
import org.eclipse.mylyn.context.core.IInteractionElement;
import org.eclipse.mylyn.context.ui.AbstractContextUiBridge;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IEditorReference;
import org.eclipse.ui.IFileEditorInput;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.PlatformUI;
import org.eclipse.wst.xml.ui.internal.tabletree.XMLMultiPageEditorPart;
import org.springframework.ide.eclipse.beans.core.BeansCorePlugin;
import org.springframework.ide.eclipse.beans.core.internal.model.BeansModelUtils;
import org.springframework.ide.eclipse.beans.core.model.IBeansModel;
import org.springframework.ide.eclipse.beans.ui.BeansUIUtils;
import org.springframework.ide.eclipse.core.model.IModelElement;
import org.springframework.ide.eclipse.core.model.IResourceModelElement;
/**
* {@link AbstractContextUiBridge} that integrates the {@link IBeansModel} with
* Mylyn in the UI.
* @author Christian Dupuis
* @since 2.0
*/
@SuppressWarnings("restriction")
public class BeansContextUIBridge extends AbstractContextUiBridge {
private static final String CONTENT_TYPE = "spring_beans";
public BeansContextUIBridge() {
new BeansUserInteractionMonitor();
}
@Override
public boolean acceptsEditor(IEditorPart editorPart) {
return editorPart instanceof XMLMultiPageEditorPart;
}
@Override
public void close(IInteractionElement element) {
try {
IWorkbenchPage page = PlatformUI.getWorkbench()
.getActiveWorkbenchWindow().getActivePage();
if (page != null) {
IEditorReference[] references = page.getEditorReferences();
for (int i = 0; i < references.length; i++) {
IEditorPart part = references[i].getEditor(false);
if (part != null && part instanceof XMLMultiPageEditorPart) {
XMLMultiPageEditorPart editor = (XMLMultiPageEditorPart) part;
IEditorInput editorInput = editor.getEditorInput();
if (editorInput != null
&& editorInput instanceof IFileEditorInput) {
IResource resource = ((IFileEditorInput) editorInput)
.getFile();
IModelElement modelElement = BeansModelUtils
.getResourceModelElement(resource);
if (modelElement != null
&& element.getHandleIdentifier().equals(
modelElement.getElementID())) {
editor.dispose();
}
}
}
}
}
}
catch (Throwable t) {
}
}
@Override
public List<TreeViewer> getContentOutlineViewers(IEditorPart editorPart) {
if (editorPart == null)
return null;
List<TreeViewer> viewers = new ArrayList<TreeViewer>();
return viewers;
}
@Override
public String getContentType() {
return CONTENT_TYPE;
}
@Override
public IInteractionElement getElement(IEditorInput editorInput) {
if (editorInput != null && editorInput instanceof IFileEditorInput) {
IResource resource = ((IFileEditorInput) editorInput).getFile();
IModelElement modelElement = BeansModelUtils
.getResourceModelElement(resource);
String handle = ContextCore.getStructureBridge(
modelElement).getHandleIdentifier(modelElement);
return ContextCore.getContextManager().getElement(handle);
}
return null;
}
@Override
public Object getObjectForTextSelection(TextSelection textSelection,
IEditorPart editorPart) {
if (textSelection != null) {
}
return null;
}
@Override
public void open(IInteractionElement element) {
String handle = element.getHandleIdentifier();
IModelElement modelElement = BeansCorePlugin.getModel().getElement(
handle);
if (modelElement != null
&& modelElement instanceof IResourceModelElement) {
BeansUIUtils.openInEditor((IResourceModelElement) modelElement);
}
}
}