/******************************************************************************* * <copyright> * * Copyright (c) 2005, 2012 SAP AG. * 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: * SAP AG - initial API, implementation and documentation * mwenz - Bug 329523 - Add notification of DiagramTypeProvider after saving a diagram * Bug 336488 - DiagramEditor API * cbrand - Bug 376585 - Clean-up deprecations in Graphiti * mwenz - Bug 393074 - Save Editor Progress Monitor Argument * fvelasco - Bug 412838 - Check for read-only resources before saving * * </copyright> * *******************************************************************************/ package org.eclipse.graphiti.ui.internal.services; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.ecore.resource.ResourceSet; import org.eclipse.emf.transaction.TransactionalEditingDomain; import org.eclipse.graphiti.mm.pictograms.Diagram; import org.eclipse.jface.viewers.IStructuredSelection; /** * Provides EMF Services, in particular with respect to {@link EObject}, * {@link URI}, {@link ResourceSet}, and {@link TransactionalEditingDomain}. * * @noimplement This interface is not intended to be implemented by clients. * @noextend This class is not intended to be subclassed by clients. */ public interface IEmfService extends org.eclipse.graphiti.ui.services.IEmfService{ /** * Returns the human readable name of a given object or the EMF id if no * name can be found. The method tries to access a modeled attribute "name" * or "id" in this order. If no attribute with this name is modeled, the * first attribute whose value is a String or * {@link TranslatableTextFragment} is returned, otherwise <code>null</code> * . * * @param obj * the object to get a name for * @return the value of attribute "name" or the EMF id if no attribute * "name" exists * */ public abstract String getObjectName(final Object obj); /** * Tries to convert the given object to a {@link EObject} * <ul> * <li>using {@link #adaptObject(Object, Class)},</li> * <li>unwrapping an {@link IStructuredSelection}.</li> * </ul> * * @param object * the object to convert * @return the target object or <code>null</code> * * @see #getEObject(Object) */ public abstract EObject getEObject(Object object); /** * Returns the Eclipse file for the given {@link EObject}'s {@link Resource} * . * * Note that the file is <code>null</code> for objects in * <ul> * <li>archives,</li> * <li>closed projects,</li> * <li>not yet persisted resources or not yet persisted EObjects in already * persisted resources. In this respect this methods behaves asymmetric to * the handle-only resource APIs like {@link IProject#getFile(String)}.</li> * </ul> * * @param object * the model object to get the file for * @return the partition file or <code>null</code> under the mentioned * circumstances * * @see #getFile(URI) */ public abstract IFile getFile(EObject object); /** * Returns the Eclipse file for the given {@link URI}. * * Note that the file is <code>null</code> for objects in * <ul> * <li>archives,</li> * <li>closed projects,</li> * <li>not yet persisted resources or not yet persisted EObjects in already * persisted resources. In this respect this methods behaves asymmetric to * the handle-only resource APIs like {@link IProject#getFile(String)}.</li> * </ul> * * @param uri * the URI to get the file for * @return the file or <code>null</code> under the mentioned circumstances * * @see #getFile(EObject) * * @since 0.9 */ public abstract IFile getFile(URI uri); /** * Creates an extended string presentation of the given {@link EObject}, * including its type and attributes * * @param o * the object to create a string presentation for * @param result * the string buffer to store the result into * @return the same string buffer as <code>result</code> per convenience * * @see #toString(EObject) */ public abstract StringBuilder toString(final EObject o, final StringBuilder result); /** * If given file is a valid emf resource and it contains a diagram as first * root element, this methods return the diagram. Otherwise this method * returns null. * * @param file * a valid emf (diagram) resource * @return diagram or null */ public abstract Diagram getDiagramFromFile(IFile file, ResourceSet resourceSet); /** * Retrieves the workspace-local string location of the given {@link IFile}, * constructs a potentially normalized platform resource {@link URI} from it * and returns it. * * @param file * The file to construct the URI for * @param resourceSet * The {@link ResourceSet} to use for the normalization (can be * <code>null</code>, in this case no normalization is done). * @return The platform resource URI for the given file. */ public abstract URI getFileURI(IFile file); /** * Maps the fileURI to an URI which points directly to the Diagram Object. * This methods assumes the Diagram object is the first root object in the * given file. * * @param diagramFileUri * URI of the diagramFile * @return URI of the diagram */ public abstract URI mapDiagramFileUriToDiagramUri(URI diagramFileUri); }