blob: ae1bfb92cd9c9be117d336f3687652e1d4911d42 [file] [log] [blame]
/*
* 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);
}
}
}
}