blob: bc1bf6dbc723fed4b0671ba5fc1d2d7c6e55f572 [file] [log] [blame]
/*
* Copyright (c) 2010-2012, 2016 Eike Stepper (Berlin, Germany) 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:
* Martin Fluegge - initial API and implementation
*/
package org.eclipse.emf.cdo.dawn.examples.acore.diagram.part;
import org.eclipse.emf.cdo.dawn.editors.IDawnEditor;
import org.eclipse.emf.cdo.dawn.editors.IDawnEditorSupport;
import org.eclipse.emf.cdo.dawn.gmf.editors.impl.DawnGMFEditorSupport;
import org.eclipse.emf.cdo.dawn.ui.DawnEditorInput;
import org.eclipse.emf.cdo.ui.CDOEditorInput;
import org.eclipse.emf.cdo.view.CDOView;
import org.eclipse.net4j.util.transaction.TransactionException;
import org.eclipse.emf.common.ui.URIEditorInput;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.gmf.runtime.diagram.ui.resources.editor.document.AbstractDocumentProvider;
import org.eclipse.jface.dialogs.ErrorDialog;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IFileEditorInput;
/**
* @author Martin Fluegge
*/
public class DawnAcoreDiagramEditor extends AcoreDiagramEditor implements IDawnEditor
{
public static String ID = "org.eclipse.emf.cdo.dawn.examples.acore.diagram.part.DawnAcoreDiagramEditor";
private IDawnEditorSupport dawnEditorSupport;
public DawnAcoreDiagramEditor()
{
super();
AcoreDiagramEditorPlugin.getInstance().logInfo("CDO Editor ist starting");
setDocumentProvider(new DawnAcoreDocumentProvider());
setDawnEditorSupport(new DawnGMFEditorSupport(this));
}
@Override
public void setInput(IEditorInput input)
{
AcoreDiagramEditorPlugin.getInstance().logInfo("Setting input for DawnAcoreDiagramEditor (" + input + ")");
try
{
doSetInput(input, true);
}
catch (CoreException x)
{
x.printStackTrace(System.err);
String title = x.getMessage();
String msg = x.getMessage();
Shell shell = getSite().getShell();
ErrorDialog.openError(shell, title, msg, x.getStatus());
}
dawnEditorSupport.setView(((DawnEditorInput)input).getView());
}
@Override
protected void initializeGraphicalViewer()
{
super.initializeGraphicalViewer();
dawnEditorSupport.registerListeners();
}
@Override
public void doSave(IProgressMonitor monitor)
{
try
{
dawnEditorSupport.setDirty(false);
updateState(getEditorInput());
validateState(getEditorInput());
performSave(false, monitor);
}
catch (TransactionException e)
{
if (e.getMessage().contains("conflict"))
{
MessageDialog.openError(Display.getDefault().getActiveShell(), "conflict", "Your Resource is in conflict and cannot be committed");
}
else
{
throw e;
}
}
}
@Override
public boolean isDirty()
{
return dawnEditorSupport.isDirty();
}
public String getContributorID()
{
return ID;
}
/**
* Have to override this method to change the the DocuemtnProvider behavior.
*/
@Override
protected void setDocumentProvider(IEditorInput input)
{
if (input instanceof IFileEditorInput || input instanceof URIEditorInput || input instanceof CDOEditorInput)
{
setDocumentProvider(getDocumentProvider());
}
else
{
super.setDocumentProvider(input);
}
}
@Override
public void dispose()
{
try
{
super.dispose();
}
finally
{
dawnEditorSupport.close();
}
}
/**
* @since 1.0
*/
public CDOView getView()
{
return dawnEditorSupport.getView();
}
public void setDirty()
{
dawnEditorSupport.setDirty(true);
((AbstractDocumentProvider)getDocumentProvider()).changed(getEditorInput());
}
public void setDawnEditorSupport(IDawnEditorSupport dawnEditorSupport)
{
this.dawnEditorSupport = dawnEditorSupport;
}
public IDawnEditorSupport getDawnEditorSupport()
{
return dawnEditorSupport;
}
}