[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Newsgroup Home]
[news.eclipse.modeling.gmf] Re: Programmatically create and open a GMF diagram

"task" is one of my EObjects, i juste add an Element to another one.

I've made 2 functions to do the creation and the opening of the diagram



	public Diagram createDiagram(XXX xxx){
		//create the diagram
		int diagramVID = ProcessVisualIDRegistry.getDiagramVisualID(xxx);
		if (diagramVID != FormEditPart.VISUAL_ID) {
			// error
		}
		Diagram diagram = ViewService.createDiagram(xxx,
				XXXEditPart.MODEL_ID,
				XXXDiagramEditorPlugin.DIAGRAM_PREFERENCES_HINT);
		xxx.eResource().getContents().add(diagram);

		// save the ressource
		try {
			xxx.eResource().save(XXXDiagramEditorUtil.getSaveOptions());
		} catch (IOException e) {
			XXXDiagramEditorPlugin.getInstance().logError(
					"Save operation failed for: " + xxx.eResource(), e); //$NON-NLS-1$
		}
		refresh();
		return diagram;
	}
	

	public void openDiagram(XXX xxx){
		//open the diagram

		try {
               //find the diagram in the resource
			Diagram diag = null;
			EList<EObject> resources = xxx.eResource().getContents();
			for (EObject eObject : resources) {
				if(eObject instanceof Diagram){
					if(((Diagram)eObject).getElement()!=null  && ((Diagram)eObject).getElement().equals(xxx)){
						diag = (Diagram)eObject;
						break;
					}
				}
			}
                  //open it
			URI uri = EcoreUtil.getURI(diag);
			IWorkbenchPage page = PlatformUI.getWorkbench()
			.getActiveWorkbenchWindow().getActivePage();
			page.openEditor(new URIEditorInput(uri,xxx.getName()), XXXDiagramEditor.ID);
			
			
		} catch (PartInitException e) {
			XXXDiagramEditorPlugin.getInstance().logError(
					"Unable to open editor", e); //$NON-NLS-1$
		}

It's better to execute them in a command.

tell me if you have troubles with it