/******************************************************************************* * Copyright (c) 2006-2012 * Software Technology Group, Dresden University of Technology * DevBoost GmbH, Berlin, Amtsgericht Charlottenburg, HRB 140026 * * 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: * Software Technology Group - TU Dresden, Germany; * DevBoost GmbH - Berlin, Germany * - initial API and implementation ******************************************************************************/ package org.reuseware.coconut.compositionprogram.diagram.util; import java.io.IOException; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.ecore.resource.ResourceSet; import org.eclipse.emf.transaction.RecordingCommand; import org.eclipse.emf.transaction.TransactionalEditingDomain; import org.eclipse.emf.transaction.util.TransactionUtil; import org.eclipse.gmf.runtime.diagram.core.services.ViewService; import org.eclipse.gmf.runtime.notation.Diagram; import org.reuseware.coconut.compositionprogram.CompositionProgram; import org.reuseware.coconut.compositionprogram.diagram.edit.parts.CompositionProgramEditPart; import org.reuseware.coconut.compositionprogram.diagram.part.CompositionprogramDiagramEditorPlugin; import org.reuseware.coconut.compositionprogram.diagram.part.CompositionprogramDiagramEditorUtil; import org.reuseware.coconut.ui.DiagramInitializer; /** * Diagram initializer for UCL files. */ public class UCLDiagramInitializer implements DiagramInitializer { /** * @param modelResource resource holding a composition program * * @return true if the given resource holds a <code>CompositionProgram</code> */ public boolean canInitializeDiagramFor(Resource modelResource) { return (!modelResource.getContents().isEmpty() && modelResource.getContents().get(0) instanceof CompositionProgram); } /** * @param modelResource resource holding a composition program * * @return resource holding a UCL diagram (UCLDI file) */ public Resource initializeDiagram(Resource modelResource) { final CompositionProgram root = (CompositionProgram) modelResource.getContents().get(0); final TransactionalEditingDomain eDomain = TransactionUtil.getEditingDomain(modelResource); final ResourceSet rs = modelResource.getResourceSet(); URI modelURI = modelResource.getURI(); URI diagramURI = modelURI.trimFileExtension().appendFileExtension("ucldi"); Resource diagramResource = rs.getResource(diagramURI, false); if (diagramResource == null) { diagramResource = rs.createResource(diagramURI); } if (eDomain != null) { final Resource resourceToModify = diagramResource; eDomain.getCommandStack().execute(new RecordingCommand(eDomain) { @Override protected void doExecute() { modifyResource(root, resourceToModify); } }); } else { modifyResource(root, diagramResource); } try { diagramResource.save(CompositionprogramDiagramEditorUtil .getSaveOptions()); } catch (IOException e) { e.printStackTrace(); } return diagramResource; } private void modifyResource(CompositionProgram root, Resource diagramResource) { diagramResource.getContents().clear(); Diagram diagram = ViewService.createDiagram( root, CompositionProgramEditPart.MODEL_ID, CompositionprogramDiagramEditorPlugin.DIAGRAM_PREFERENCES_HINT); diagram.setElement(root); diagramResource.getContents().add(diagram); } }