blob: 2d110fb5ac7c39ca338c0fcdd90f1daee255930d [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 implementation
//------------------------------------------------------------------------------
/**
*
*/
package org.eclipse.epf.diagramming.base.parts;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.emf.transaction.impl.InternalTransactionalEditingDomain;
import org.eclipse.epf.diagram.core.bridge.ActivityDiagramAdapter;
import org.eclipse.epf.diagram.core.part.DiagramEditorInput;
import org.eclipse.epf.diagram.core.part.DiagramFileEditorInputProxy;
import org.eclipse.epf.diagramming.base.persistence.DiagramFileCreatorEx;
import org.eclipse.epf.diagramming.base.persistence.DiagramPersister;
import org.eclipse.epf.diagramming.base.persistence.DiagramService;
import org.eclipse.epf.diagramming.base.persistence.IDiagramService;
import org.eclipse.epf.library.edit.process.BreakdownElementWrapperItemProvider;
import org.eclipse.epf.uma.Activity;
import org.eclipse.epf.uma.MethodElement;
import org.eclipse.gef.commands.Command;
import org.eclipse.gmf.runtime.common.core.command.ICommand;
import org.eclipse.gmf.runtime.diagram.ui.commands.ICommandProxy;
import org.eclipse.gmf.runtime.diagram.ui.editparts.DiagramEditPart;
import org.eclipse.gmf.runtime.diagram.ui.parts.IDiagramWorkbenchPart;
import org.eclipse.gmf.runtime.notation.Diagram;
import org.eclipse.ui.IEditorDescriptor;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IFileEditorInput;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.ide.IDE;
/**
* Diagrm helper class (replacing the DiagramEditorUtil).
* @author Shashidhar Kannoori
*
*/
public final class DiagramHelper {
/**
* To open a diagram and create a file.
* @written
*/
public static void openDiagramEditor(IWorkbenchPage page, IEditorInput input, String diagramKind){
IProgressMonitor monitor = new NullProgressMonitor();
MethodElement methodElement = (MethodElement)((DiagramEditorInput)input).getMethodElement();
Diagram diagram = IDiagramService.eInstance.getDiagram((Activity)methodElement, diagramKind, false, new NullProgressMonitor());
IFile diagramFile = DiagramPersister.getFile(input) ;
if(diagramFile == null){
diagramFile = DiagramPersister.createNewDiagramFile(DiagramFileCreatorEx.getInstance(),
input, page.getWorkbenchWindow().getShell(),
monitor);
}
if(diagram == null){
diagram = IDiagramService.eInstance.createDiagram((Activity)methodElement, diagramKind, false);
//TODO: remove this save option
try{
DiagramPersister.saveDiagram(IDiagramService.eInstance.createEditingDomain(),
diagramFile, diagram, false);
}catch(Exception e){
e.printStackTrace();
}
}
DiagramFileEditorInputProxy diagramFileEditorInput = new DiagramFileEditorInputProxy(
diagramFile, (DiagramEditorInput)input, null);
if (diagramFile != null) {
DiagramEditPart editPart = openEditor(diagramFileEditorInput, page, monitor, true, true);
initialize((Diagram) editPart.getModel(), diagramFileEditorInput);
}
}
private static final DiagramEditPart openEditor(IFileEditorInput input,
IWorkbenchPage page,IProgressMonitor progressMonitor, boolean activate,
boolean determineContentType){
IEditorPart editorPart = null;
try {
//IWorkbenchPage page = dWindow.getActivePage();
IEditorPart parent = page.getActiveEditor();
if (page != null) {
//sanity checks
if (page == null) {
throw new IllegalArgumentException();
}
// open the editor on the file
IEditorDescriptor editorDesc = IDE.getEditorDescriptor(input.getFile(), determineContentType);
editorPart = page.openEditor(input, editorDesc.getId(),
activate);
if(editorPart != null && parent != null){
// set the parent.
}
}
input.getFile().refreshLocal(IResource.DEPTH_ZERO, null);
return ((IDiagramWorkbenchPart) editorPart).getDiagramEditPart();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static String getActivityDiagramKind(){
return DiagramService.AD_kind;
}
/**
*
* @param model
* @param diagramFileEditorInput
*/
private static void initialize(Diagram model, DiagramFileEditorInputProxy diagramFileEditorInput) {
BreakdownElementWrapperItemProvider wrapper = diagramFileEditorInput.getDiagramEditorInput().getWrapper();
ActivityDiagramAdapter adapter = wrapper != null ?
new ActivityDiagramAdapter(wrapper) :
new ActivityDiagramAdapter((Activity)diagramFileEditorInput.getDiagramEditorInput().getMethodElement());
adapter.setEditingDomain((InternalTransactionalEditingDomain) diagramFileEditorInput.getEditingDomain());
adapter.setSuppression(diagramFileEditorInput.getDiagramEditorInput().getSuppression());
model.getElement().eAdapters().add(adapter);
adapter.populateDiagram();
}
/**
* @generated
*/
public static Command getCommandWrapper(ICommand cmd) {
return new ICommandProxy(cmd);
}
}