package org.eclipse.uml2.diagram.common.tests; import junit.framework.Assert; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.Path; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.gmf.runtime.diagram.ui.editparts.DiagramEditPart; import org.eclipse.gmf.runtime.diagram.ui.parts.IDiagramEditDomain; import org.eclipse.gmf.runtime.diagram.ui.parts.IDiagramWorkbenchPart; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.PartInitException; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.part.FileEditorInput; public abstract class UMLDiagramFacade { protected final String myDiagramFileExtension; protected abstract Resource createDiagram(URI diagramModelURI, URI domainModelURI); private Resource myDiagramResource; private Resource myModelResource; private IDiagramWorkbenchPart myDiagramWorkbenchPart; private String myProjectPath; public UMLDiagramFacade(String projectPath, String diagramFileExtension) { myProjectPath = projectPath; myDiagramFileExtension = diagramFileExtension; } public void create(String diagramName) { URI diagramModelURI = URI.createPlatformResourceURI(new Path(myProjectPath).append(diagramName + "." + myDiagramFileExtension).toOSString(), false); //$NON-NLS-1$ URI domainModelURI = URI.createPlatformResourceURI(new Path(myProjectPath).append(diagramName + ".uml").toOSString(), false); //$NON-NLS-1$ myDiagramResource = createDiagram(diagramModelURI, domainModelURI); } public void create() { create("test"); } public void open() throws PartInitException { String path = myDiagramResource.getURI().toPlatformString(true); IResource workspaceResource = ResourcesPlugin.getWorkspace().getRoot().findMember(new Path(path)); if (workspaceResource instanceof IFile) { IWorkbench workbench = PlatformUI.getWorkbench(); IWorkbenchPage page = workbench.getActiveWorkbenchWindow().getActivePage(); IEditorPart editorPart = page .openEditor(new FileEditorInput((IFile) workspaceResource), workbench.getEditorRegistry().getDefaultEditor(workspaceResource.getFullPath().toString()).getId()); myDiagramWorkbenchPart = (IDiagramWorkbenchPart) editorPart; } } public void close() { if (myDiagramWorkbenchPart != null && myDiagramWorkbenchPart instanceof IEditorPart) { IWorkbenchPage page = myDiagramWorkbenchPart.getSite().getPage(); page.closeEditor((IEditorPart) myDiagramWorkbenchPart, false); } myDiagramWorkbenchPart = null; myDiagramResource.unload(); myDiagramResource = null; if (myModelResource != null) { myModelResource.unload(); myModelResource = null; } } public IDiagramWorkbenchPart getDiagramWorkbenchPart() { return myDiagramWorkbenchPart; } public DiagramEditPart getDiagramEditPart() { Assert.assertNotNull(myDiagramWorkbenchPart); return myDiagramWorkbenchPart.getDiagramEditPart(); } public IDiagramEditDomain getDiagramEditDomain() { Assert.assertNotNull(myDiagramWorkbenchPart); return myDiagramWorkbenchPart.getDiagramEditDomain(); } public static void flushEventQueue() { Display display = Display.getDefault(); while (display.readAndDispatch()) { // do nothing } } }