blob: 68c9b6db214410ac7eb64836b2d12ac7051062a8 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2008-2011 Chair for Applied Software Engineering,
* Technische Universitaet Muenchen.
* 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:
******************************************************************************/
package org.eclipse.emf.emfstore.common.model;
import java.util.Map;
import java.util.Set;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.emfstore.common.model.util.ProjectChangeObserver;
/**
* <!-- begin-user-doc --> A representation of the model object ' <em><b>Project</b></em>'.
*
* @implements IAdaptable <!-- end-user-doc -->
*
* <p>
* The following features are supported:
* <ul>
* <li>{@link org.eclipse.emf.emfstore.common.model.Project#getModelElements <em>Model Elements</em>}</li>
* <li>{@link org.eclipse.emf.emfstore.common.model.Project#getCutElements <em>Cut Elements</em>}</li>
* </ul>
* </p>
*
* @see org.eclipse.emf.emfstore.common.model.ModelPackage#getProject()
* @model
* @generated
*/
public interface Project extends EObject, IAdaptable {
/**
* Returns the value of the '<em><b>Model Elements</b></em>' containment reference list.
* The list contents are of type {@link org.eclipse.emf.ecore.EObject}.
* <!-- begin-user-doc -->
* <p>
* If the meaning of the '<em>Model Elements</em>' containment reference list isn't clear, there really should be
* more of a description here...
* </p>
* <!-- end-user-doc -->
*
* @return the value of the '<em>Model Elements</em>' containment reference list.
* @see org.eclipse.emf.emfstore.common.model.ModelPackage#getProject_ModelElements()
* @model containment="true" resolveProxies="true" ordered="false"
* @generated
*/
EList<EObject> getModelElements();
/**
* Initializes the ID caches of the project.
*/
void initCaches();
/**
* Initializes the ID caches of the project with the given mappings.
*/
void initCaches(Map<EObject, ModelElementId> eObjectToIdMap, Map<ModelElementId, EObject> idToEObjectMap);
/**
* Returns the value of the '<em><b>Cut Elements</b></em>' containment reference list.
* The list contents are of type {@link org.eclipse.emf.ecore.EObject}.
* <!-- begin-user-doc -->
* <p>
* If the meaning of the '<em>Cut Elements</em>' containment reference list isn't clear, there really should be more
* of a description here...
* </p>
* <!-- end-user-doc -->
*
* @return the value of the '<em>Cut Elements</em>' containment reference list.
* @see org.eclipse.emf.emfstore.common.model.ModelPackage#getProject_CutElements()
* @model containment="true" resolveProxies="true"
* @generated
*/
EList<EObject> getCutElements();
/**
* Retrieve a list of ALL model elements of a certain type in project.
*
* @param <T> a subtype of model element
* @param modelElementClass the eclass (must be a subtype of model element)
* @param list a list of model elements, can be emtpy, but must be of the same type as the modelElementClass
* indicates.
* @param subclasses whether to also include all subclasses of the given EClass in the list
* @return a list of model elements of the given type
* @generated NOT
*/
<T extends EObject> EList<T> getAllModelElementsbyClass(EClass modelElementClass, EList<T> list, Boolean subclasses);
/**
* Retrieve a list of ALL model elements of a certain type in project.
*
* @param <T> a subtype of model element
* @param modelElementClass the eclass (must be a subtype of model element)
* @param list a list of model elements, can be emtpy, but must be of the same type as the modelElementClass
* indicates.
* @return a list of model elements of the given type
* @generated NOT
*/
<T extends EObject> EList<T> getAllModelElementsbyClass(EClass modelElementClass, EList<T> list);
/**
* Retrieve a list of model elements of a certain type in project that are directly contained in the project.
*
* @param <T> a subtype of model element
* @param modelElementClass the eclass (must be a subtype of model element)
* @param list a list of model elements, can be emtpy, but must be of the same type as the modelElementClass
* indicates.
* @return a list of model elements of the given type
* @generated NOT
*/
<T extends EObject> EList<T> getModelElementsByClass(EClass modelElementClass, EList<T> list);
/**
* Returns whether the project contains the exact same instance of the model element.
*
* @param modelElement the model element
* @return true if the project contains the instance
*/
boolean containsInstance(EObject modelElement);
/**
* Get the model element with the given id from the project.
*
* @param modelElementId the model element id
* @return the model element or null if it is not in the project
*/
EObject getModelElement(ModelElementId modelElementId);
/**
* Add an observer to the project. Will be notified on project changes. See {@link ProjectChangeObserver}.
*
* @param projectChangeObserver the change observer
*/
void addProjectChangeObserver(ProjectChangeObserver projectChangeObserver);
/**
* Remove an observer to the project. See {@link ProjectChangeObserver}.
*
* @param projectChangeObserver the change observer
*/
void removeProjectChangeObserver(ProjectChangeObserver projectChangeObserver);
/**
* Delete an element from the Project including all its containments and cross references.
*
* @param modelElementImpl the model element to delete
*/
void deleteModelElement(EObject modelElementImpl);
/**
* Add a model element to the project.
*
* @param newModelElement the new model element
*/
void addModelElement(EObject newModelElement);
/**
* Adds the given model element to the project. The map hereby contains the IDs of the model element itself as well
* as those of the model element's children.
*
* @param newModelElement the model element to be added to the project
* @param idMap a map containing the ID of the model element and its children
*/
void addModelElement(EObject newModelElement, Map<EObject, ModelElementId> idMap);
/**
* Returns whether the project contains a model element with the same id.
*
* @param modelElementId the id
* @return true if the project contains such a model element
*/
boolean contains(ModelElementId modelElementId);
/**
* Get all model elements of a project.
*
* @return a set of model elements
*/
Set<EObject> getAllModelElements();
/**
* Get all model element IDs of this project.
*
* @return a set of model element IDs
*/
Set<ModelElementId> getAllModelElementIds();
/**
* Deletes a project by notifying all project change observers about the deletion.
*/
void delete();
/**
* Retrieve the {@link ModelElementId} for an EObject.
*
* @param eObject the eObject
* @return the {@link ModelElementId} or null if the model element isn't contained in the project
*/
ModelElementId getModelElementId(EObject eObject);
} // Project