blob: db5cce12a1b69067ee30f05431b25d330774a4ea [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.graphiti.util;
import org.eclipse.emf.cdo.dawn.preferences.PreferenceConstants;
import org.eclipse.emf.cdo.dawn.transaction.DawnTransactionalEditingDomainImpl;
import org.eclipse.emf.cdo.dawn.util.connection.CDOConnectionUtil;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
import org.eclipse.emf.transaction.TransactionalCommandStack;
import org.eclipse.emf.transaction.TransactionalEditingDomain;
import org.eclipse.emf.transaction.impl.TransactionalEditingDomainImpl;
import org.eclipse.emf.workspace.WorkspaceEditingDomainFactory;
import org.eclipse.core.commands.operations.DefaultOperationHistory;
import org.eclipse.gef.EditPart;
import org.eclipse.graphiti.mm.pictograms.Diagram;
import org.eclipse.graphiti.mm.pictograms.PictogramElement;
import org.eclipse.graphiti.services.Graphiti;
import java.util.Collections;
import java.util.List;
/**
* @author Martin Fluegge
*/
public class DawnGraphitiUtil
{
public static TransactionalEditingDomain createResourceSetAndEditingDomain()
{
// TODO check if this is still needed here
CDOConnectionUtil.instance.init(PreferenceConstants.getRepositoryName(), PreferenceConstants.getProtocol(),
PreferenceConstants.getServerName());
CDOConnectionUtil.instance.getCurrentSession();
final ResourceSet resourceSet = new ResourceSetImpl();
@SuppressWarnings("restriction")
final TransactionalCommandStack workspaceCommandStack = new org.eclipse.graphiti.ui.internal.editor.GFWorkspaceCommandStackImpl(
new DefaultOperationHistory());
final TransactionalEditingDomainImpl editingDomain = new DawnTransactionalEditingDomainImpl(
new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE), workspaceCommandStack,
resourceSet);
WorkspaceEditingDomainFactory.INSTANCE.mapResourceSet(editingDomain);
return editingDomain;
}
/**
* This method tries to find an editpart for a given pictogram element. It recursivly searches all children for the
* given editpart if the model matches to pictogramElement.
*/
public static EditPart getEditpart(PictogramElement pictogramElement, EditPart part)
{
for (Object object : part.getChildren())
{
EditPart child = (EditPart)object;
if (child.getModel().equals(pictogramElement))
{
return child;
}
EditPart childEditPart = getEditpart(pictogramElement, child);
if (childEditPart != null)
{
return childEditPart;
}
}
return null;
}
public static List<PictogramElement> getPictgramElements(Diagram diagram, EObject element)
{
PictogramElement pictgramElement = getPictgramElement(element);
if (element instanceof PictogramElement)
{
return Collections.singletonList((PictogramElement)element);
}
if (pictgramElement != null)
{
return Collections.singletonList(pictgramElement);
}
return Graphiti.getLinkService().getPictogramElements(diagram, element);
}
/**
* Tries to retriev the pictogram element from a given element. If the element itself is a PictogramElement, the
* element will be returned. Otherwise all eContainers will be checked until a PictogramElement is found.
*/
public static PictogramElement getPictgramElement(EObject element)
{
if (element == null)
{
return null;
}
if (element instanceof PictogramElement)
{
return (PictogramElement)element;
}
EObject eContainer = element.eContainer();
if (eContainer instanceof PictogramElement)
{
return (PictogramElement)eContainer;
}
return getPictgramElement(eContainer);
}
}