/* * Copyright (c) 2011, 2012, 2015 Eike Stepper (Berlin, Germany) 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: * Martin Fluegge - initial API and implementation */ package org.eclipse.emf.cdo.dawn.examples.acore.graphiti.util; import org.eclipse.emf.cdo.dawn.examples.acore.AClass; import org.eclipse.emf.cdo.dawn.examples.acore.ACoreRoot; import org.eclipse.emf.cdo.dawn.examples.acore.AInterface; import org.eclipse.emf.cdo.dawn.examples.acore.AcoreFactory; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.ecore.resource.ResourceSet; import org.eclipse.emf.edit.domain.EditingDomain; import org.eclipse.emf.transaction.RecordingCommand; import org.eclipse.emf.transaction.TransactionalEditingDomain; import org.eclipse.graphiti.mm.pictograms.Diagram; import org.eclipse.graphiti.mm.pictograms.PictogramLink; import org.eclipse.graphiti.mm.pictograms.PictogramsFactory; import java.io.IOException; /** * @author Martin Fluegge */ public class DawnGraphitiAcoreResourceUtil { /** * In our example the root of the semantic model is an AcoreRoot. This method ensures that AcoreRoot is wiredn to the * Diagram element if needed. */ public static void wireDomainModel(final Diagram diagram, final ResourceSet resourceSet, EditingDomain domain) { domain.getCommandStack().execute(new RecordingCommand((TransactionalEditingDomain)domain) { @Override protected void doExecute() { PictogramLink link = diagram.getLink(); if (link == null) { link = PictogramsFactory.eINSTANCE.createPictogramLink(); diagram.setLink(link); } EList<EObject> businessObjects = link.getBusinessObjects(); if (businessObjects.size() == 0) { // create AcoreRoot ACoreRoot acoreRoot = AcoreFactory.eINSTANCE.createACoreRoot(); Resource modelResource = resourceSet.getResources().get(0); if (modelResource.equals(diagram.eResource())) { modelResource = resourceSet.getResources().get(1); } modelResource.getContents().add(acoreRoot); link.getBusinessObjects().add(acoreRoot); try { diagram.eResource().save(null); modelResource.save(null); } catch (IOException ex) { throw new RuntimeException(ex); } } } }); } public static void addToModelResource(EObject element, ResourceSet resourceSet) { Resource resource = resourceSet.getResources().get(0); if (resource.getContents().size() > 0 && resource.getContents().get(0) instanceof Diagram) { // wrong resource resource = resourceSet.getResources().get(1); } if (resource.getContents().size() > 0) { ACoreRoot acoreRoot = (ACoreRoot)resource.getContents().get(0); addElement(element, acoreRoot); } // else // { // ACoreRoot acoreRoot = AcoreFactory.eINSTANCE.createACoreRoot(); // resource.getContents().add(acoreRoot); // addElement(element, acoreRoot); // } } private static void addElement(EObject element, ACoreRoot acoreRoot) { if (acoreRoot instanceof ACoreRoot) { if (element instanceof AClass) { acoreRoot.getClasses().add((AClass)element); } else if (element instanceof AInterface) { acoreRoot.getInterfaces().add((AInterface)element); } } } }