blob: 2162083db6d2ed0c05f2e5703b7aee97fc7cb3b4 [file] [log] [blame]
/******************************************************************************
* Copyright (c) 2005, 2007 IBM Corporation 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:
* IBM Corporation - initial API and implementation
****************************************************************************/
package org.eclipse.gmf.runtime.diagram.ui.resources.editor.parts;
import org.eclipse.gmf.runtime.diagram.ui.resources.editor.document.DocumentProviderRegistry;
import org.eclipse.gmf.runtime.diagram.ui.resources.editor.document.IDiagramDocument;
import org.eclipse.gmf.runtime.diagram.ui.resources.editor.document.IDiagramDocumentProvider;
import org.eclipse.gmf.runtime.diagram.ui.resources.editor.document.MEditingDomainElement;
import org.eclipse.gmf.runtime.diagram.ui.resources.editor.document.DocumentProviderRegistry.IDocumentProviderSelector;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorMatchingStrategy;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IEditorReference;
import org.eclipse.ui.PartInitException;
/**
* A matching strategy for <code>DiagramDocumentEditor</code>
*
* @author mgoyal
*
*/
public class DiagramDocumentEditorMatchingStrategy
implements IEditorMatchingStrategy {
/*
* (non-Javadoc)
*
* @see org.eclipse.ui.IEditorMatchingStrategy#matches(org.eclipse.ui.IEditorReference,
* org.eclipse.ui.IEditorInput)
*/
public boolean matches(IEditorReference editorRef, IEditorInput input) {
IEditorInput existingEditorInput;
IEditorPart editor = editorRef.getEditor(false);
try {
existingEditorInput = editorRef.getEditorInput();
} catch (PartInitException e) {
return false;
}
// If the ExistingEditorInput is same as the passed input,
// return true
if (existingEditorInput.equals(input))
return true;
else if (!(input instanceof MEditingDomainElement) && (editor instanceof DiagramDocumentEditor)) {
// If the input isn't an instanceof MEditingDomainElement, and the editor is instanceof DiagramDocumentEditor
// then don't match it, This indicates that the client shouldn't use this strategy for non-DiagramDocumentEditor.
IDiagramDocumentProvider docProvider = (IDiagramDocumentProvider) DocumentProviderRegistry
.getDefault().getDocumentProvider(input,
new IDocumentProviderSelector() {
public boolean select(String documentType) {
// Only checking of the interface name
return documentType.equals(IDiagramDocument.class
.getName());
}
});
if (docProvider != null) {
IEditorInput editorInput = docProvider
.createInputWithEditingDomain(input,
((DiagramDocumentEditor) editor).getEditingDomain());
return existingEditorInput.equals(editorInput);
}
}
return false;
}
}