blob: 5cf834ae65ddad0fa19f5fd78d0796cb12484711 [file] [log] [blame]
/*******************************************************************************
* <copyright>
*
* Copyright (c) 2005, 2010 SAP AG.
* 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:
* SAP AG - initial API, implementation and documentation
* Bug 336488 - DiagramEditor API
* pjpaulin - Bug 352120 - Eliminated assumption that diagram is in an IEditorPart
* pjpaulin - Bug 352120 - Now uses IDiagramContainerUI interface
*
* </copyright>
*
*******************************************************************************/
package org.eclipse.graphiti.ui.internal.editor;
import org.eclipse.core.resources.IFile;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.workspace.util.WorkspaceSynchronizer;
import org.eclipse.graphiti.ui.editor.DiagramBehavior;
import org.eclipse.graphiti.ui.editor.IDiagramEditorInput;
/**
* Manages changes done to the resources tied to the diagram outside of the
* editor's TransactionalEditingDomain.
*/
public class DomainModelWorkspaceSynchronizerDelegate implements WorkspaceSynchronizer.Delegate {
private DiagramBehavior diagramBehavior;
/**
* The DiagramEditorBehavior reacts on a setResourceChanged(true) if he gets
* activated.
*/
public DomainModelWorkspaceSynchronizerDelegate(DiagramBehavior diagramBehavior) {
this.diagramBehavior = diagramBehavior;
}
public void dispose() {
diagramBehavior = null;
}
public boolean handleResourceChanged(Resource resource) {
IFile file = WorkspaceSynchronizer.getUnderlyingFile(resource);
// Since we cannot get timestamp information, we have to be pessimistic
if (file == null){
diagramBehavior.getUpdateBehavior().setResourceChanged(true);
return true;
}
// if file does not exist the getLocalTimeStamp method will return
// NULL_TIMESTAMP and we will also get a refresh
if (file.getLocalTimeStamp() != resource.getTimeStamp()) {
diagramBehavior.getUpdateBehavior().setResourceChanged(true);
return true;
}
return true;
}
public boolean handleResourceDeleted(Resource resource) {
// This will lead to an unload of the resource, which is quite what we want.
// As a follow up of the unload the editor is closed.
return false;
}
public boolean handleResourceMoved(Resource resource, URI newURI) {
// Handle rename or move of resource.
// ((ResourceSetImpl)
// (ResourceSetimpl(deb.getEditingDomain().getResourceSet())).getURIResourceMap().remove(resource.getURI());
// Map<URI, Resource> uriResourceMap = ((ResourceSetImpl)deb.getEditingDomain().getResourceSet()).getURIResourceMap();
resource.setURI(newURI);
IDiagramEditorInput editorInput = diagramBehavior.getDiagramContainer().getDiagramEditorInput();
if (editorInput != null) {
((IDiagramEditorInput) editorInput).updateUri(newURI);
}
diagramBehavior.refreshContent();
return true;
}
}