/**
* Copyright (c) 2012-2016 Marsha Chechik, Alessio Di Sandro, Michalis Famelis,
* Rick Salay.
* 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:
* Alessio Di Sandro - Implementation.
*/
package edu.toronto.cs.se.mmint.mid;
import edu.toronto.cs.se.mmint.mid.editor.Editor;
import edu.toronto.cs.se.mmint.mid.operator.Operator;
import edu.toronto.cs.se.mmint.mid.relationship.ModelRel;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.common.util.EMap;
import org.eclipse.emf.ecore.EObject;
/**
* <!-- begin-user-doc -->
* A representation of the model object '<em><b>MID</b></em>'.
* <!-- end-user-doc -->
*
* <!-- begin-model-doc -->
* The model management root.
* <!-- end-model-doc -->
*
* <p>
* The following features are supported:
* </p>
* <ul>
* <li>{@link edu.toronto.cs.se.mmint.mid.MID#getModels <em>Models</em>}</li>
* <li>{@link edu.toronto.cs.se.mmint.mid.MID#getEditors <em>Editors</em>}</li>
* <li>{@link edu.toronto.cs.se.mmint.mid.MID#getOperators <em>Operators</em>}</li>
* <li>{@link edu.toronto.cs.se.mmint.mid.MID#getExtendibleTable <em>Extendible Table</em>}</li>
* <li>{@link edu.toronto.cs.se.mmint.mid.MID#getLevel <em>Level</em>}</li>
* </ul>
*
* @see edu.toronto.cs.se.mmint.mid.MIDPackage#getMID()
* @model
* @generated
*/
public interface MID extends EObject {
/**
* Returns the value of the '<em><b>Models</b></em>' containment reference list.
* The list contents are of type {@link edu.toronto.cs.se.mmint.mid.Model}.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* <!-- begin-model-doc -->
* The list of managed model types or model instances.
* <!-- end-model-doc -->
* @return the value of the '<em>Models</em>' containment reference list.
* @see edu.toronto.cs.se.mmint.mid.MIDPackage#getMID_Models()
* @model containment="true"
* @generated
*/
EList<Model> getModels();
/**
* Returns the value of the '<em><b>Editors</b></em>' containment reference list.
* The list contents are of type {@link edu.toronto.cs.se.mmint.mid.editor.Editor}.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* <!-- begin-model-doc -->
* The list of managed editor types or editor instances.
* <!-- end-model-doc -->
* @return the value of the '<em>Editors</em>' containment reference list.
* @see edu.toronto.cs.se.mmint.mid.MIDPackage#getMID_Editors()
* @model containment="true"
* @generated
*/
EList<Editor> getEditors();
/**
* Returns the value of the '<em><b>Operators</b></em>' containment reference list.
* The list contents are of type {@link edu.toronto.cs.se.mmint.mid.operator.Operator}.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* <!-- begin-model-doc -->
* The list of managed operator types or operator instances.
* <!-- end-model-doc -->
* @return the value of the '<em>Operators</em>' containment reference list.
* @see edu.toronto.cs.se.mmint.mid.MIDPackage#getMID_Operators()
* @model containment="true"
* @generated
*/
EList<Operator> getOperators();
/**
* Returns the value of the '<em><b>Extendible Table</b></em>' map.
* The key is of type {@link java.lang.String},
* and the value is of type {@link edu.toronto.cs.se.mmint.mid.ExtendibleElement},
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* <!-- begin-model-doc -->
* The hash map for all element types or element instances in the MID, using the uri as key.
* <!-- end-model-doc -->
* @return the value of the '<em>Extendible Table</em>' map.
* @see edu.toronto.cs.se.mmint.mid.MIDPackage#getMID_ExtendibleTable()
* @model mapType="edu.toronto.cs.se.mmint.mid.EStringToExtendibleElementMap<org.eclipse.emf.ecore.EString, edu.toronto.cs.se.mmint.mid.ExtendibleElement>"
* @generated
*/
EMap<String, ExtendibleElement> getExtendibleTable();
/**
* Returns the value of the '<em><b>Level</b></em>' attribute.
* The literals are from the enumeration {@link edu.toronto.cs.se.mmint.mid.MIDLevel}.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* <!-- begin-model-doc -->
* The metalevel (types: TYPES; instances: INSTANCES).
* <!-- end-model-doc -->
* @return the value of the '<em>Level</em>' attribute.
* @see edu.toronto.cs.se.mmint.mid.MIDLevel
* @see #setLevel(MIDLevel)
* @see edu.toronto.cs.se.mmint.mid.MIDPackage#getMID_Level()
* @model required="true"
* @generated
*/
MIDLevel getLevel();
/**
* Sets the value of the '{@link edu.toronto.cs.se.mmint.mid.MID#getLevel <em>Level</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @param value the new value of the '<em>Level</em>' attribute.
* @see edu.toronto.cs.se.mmint.mid.MIDLevel
* @see #getLevel()
* @generated
*/
void setLevel(MIDLevel value);
/**
* <!-- begin-user-doc --> Checks whether this is a Type MID.
*
* @return True if this is a Type MID, false otherwise. <!-- end-user-doc -->
* @model kind="operation" required="true"
* annotation="http://www.eclipse.org/emf/2002/GenModel body='return this.getLevel() == MIDLevel.TYPES;'"
* @generated
*/
boolean isTypesLevel();
/**
* <!-- begin-user-doc --> Checks whether this is an Instance MID.
*
* @return True if this is an Instance MID, false otherwise. <!-- end-user-doc -->
* @model kind="operation" required="true"
* annotation="http://www.eclipse.org/emf/2002/GenModel body='return this.getLevel() == MIDLevel.INSTANCES;'"
* @generated
*/
boolean isInstancesLevel();
/**
* <!-- begin-user-doc --> Checks whether this is a Workflow MID.
*
* @return True if this is a Workflow MID, false otherwise. <!-- end-user-doc -->
* @model kind="operation" required="true"
* annotation="http://www.eclipse.org/emf/2002/GenModel body='return this.getLevel() == MIDLevel.WORKFLOWS;'"
* @generated
*/
boolean isWorkflowsLevel();
/**
* <!-- begin-user-doc --> Gets an extendible element from this MID.
*
* @param uri
* The uri of the element.
* @return The element, null if the uri is not found or found not to be of the desired class of elements.
* <!-- end-user-doc -->
* @model uriRequired="true"
* @generated
*/
<T extends ExtendibleElement> T getExtendibleElement(String uri);
/**
* <!-- begin-user-doc -->Gets the model rels contained in this MID.
*
* @return The model rels contained in this MID. <!-- end-user-doc -->
* @model kind="operation"
* annotation="http://www.eclipse.org/emf/2002/GenModel body='EList<ModelRel> modelRels = new BasicEList<>();\nfor (Model model : this.getModels()) {\n\tif (model instanceof ModelRel) {\n\t\tmodelRels.add((ModelRel) model);\n\t}\n}\nreturn modelRels;'"
* @generated
*/
EList<ModelRel> getModelRels();
} // MID