1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Luận văn thạc sĩ VNU automatisation de l’enchaînement des tâches exécutées sur des modèles

95 5 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Mémoire de fin d’études Automatisation des tâches exécutées par des modèles Institut de la Francophonie pour l’Informatique, Hanoi, Vietnam Nguyen Viet Hoa Promotion 13, IFI Institut National de Recherche en Informatique et en Automatique - INRIA Lille-Nord Europe Mémoire de fin d’études Master en informatique Option Systèmes et Réseaux Automatisation de l’enchnement des tâches exécutées sur des modèles Réalisé par : Nguyen Viet Hoa Promotion 13, IFI Sous la direction de : Cédric Dumoulin Lille-France, le 01 Juillet 2009 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Mémoire de fin d’études Automatisation des tâches exécutées par des modèles Nguyen Viet Hoa Promotion 13, IFI Remerciements Tout d’abord, je voudrais remercier mon encadrement direct, Cédric Dumoulin, pour sa responsabilité de mon stage et son aide de tout cœur dans ce stage De nombreux courriels et les discussions régulières avec lui m’ont aidés comprendre au fur et mesure le problốme Lintelligence dans la faỗon de sa direction ma ộgalement aidé mieux contrôler mes travaux et surmonter les difficultés Je tiens remercier particulièrement M Jean -Luc DEKEYSER, responsable de l’équipe - projet de m’avoir accueilli dans son équipe et de m’avoir aidé durant mon stage Je voudrais aussi adresser mes grands remerciements Alexis Muller et tous les professeurs, chercheurs de l’équipe DART, pour les discussions utiles avec eux pendant mon stage Et je tiens également remercier mes collègues, les stagiaires l’INRIA Lille, d’avoir partagé les difficultés de la vie au cours de mon stage Enfin, je remercie tous mes collègues, les professeurs et les personnels de l’IFI de m’avoir aidé au cours de mes études LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Mémoire de fin d’études Automatisation des tâches exécutées par des modèles Nguyen Viet Hoa Promotion 13, IFI Résumé L’équipe projet INRIA DaRT propose un environnement de conception GASPARD basé sur l’ingénierie dirigée par les modèles pour la conception de systốmes embarquộs hautes performances Les systốmes embarquộs sont conỗus un niveau d ’abstraction élevé l’aide du profil standard MARTE (Modeling and Analysis of Real -time and Embedded systems) En se basant sur l’Ingénierie Dirigée par les Modèles (IDM), les modèles MARTE sont raffinés vers des niveaux d’abstraction plus bas Cependant, dans le système Gaspard actuel, la définition de la chne de transformation est complexe, partant de modèles de hauts niveaux jusqu’à la production de code simulable, testable, vérifiable De plus, de la simulation et du refactoring sont appliqués manuel lement sur les modèles générés Il faut avoir donc une solution pour uniformiser toutes les tâches différentes : transformation, test, simulation, refactoring Et il faut avoir une solution pour définir facilement les chnes de tâches Dans ce stage on it proposer un métamodèle ainsi qu’un profil UML qui permet la modélisation des différentes tâches, leurs donnés d’entrée et de sortie, leurs dépendences, …Ensuite, on construit un moteur d’exécution qui permet l’exécution des tâches Mots-clés : IDM (Ingénierie Dirigée par les Modèles), Gaspard 2, Transformation entres des modèles, moteur d’exécution, Méta -modèle, EMF LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Mémoire de fin d’études Automatisation des tâches exécutées par des modèles Nguyen Viet Hoa Promotion 13, IFI Abstract The DaRT project-team main research topic is the co -design of embedded systems by a Model Driven Engineering (M DE) approach We propose an integrated development environment, called Gaspard 2, allowing the design of embedded systems using models at a high level of abstraction From these models, it is possible to automatically generate various codes and models than can be used for example for simulation Going from the models at a high level of abstraction to the code is done through a chain of model transformations using intermediate models In the actual Gaspard tool, the “transformation chain” definition is compl ex Furthermore, tools like simulators or refactoring are applied manually on generated models We would like to make uniform the different processes (transformation, test, simulation, refactoring) applied on models For that, we say that each process is a task applied on input models and eventually producing output models A task can depend on other tasks, or on the presence of input models to be executed Thus, we have a graph of task dependencies We want to be able to define easily such execution grap h with an appropriate model, and then execute a task Execution of a task can be conditioned by different input and output models, the dependencies…So we propose a Meta model allowing modeling such tasks, their dependencies, their input and outputting mode ls…and then implementing the engine allowing the execution of the tasks Key Words: MDE (Model Driven Engineering), Metamodel, Models transformation, Execution engine LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Mémoire de fin d’études Automatisation des tâches exécutées par des modèles Nguyen Viet Hoa Promotion 13, IFI TABLE DES MATIERES Remerciements Résumé Abstract TABLE DES MATIERES LISTE DES FIGURES Introduction 1.1 Contexte 1.2 Objectifs 1.3 Motivation 1.4 Contribution 1.5 Environnement du stage 10 1.6 Organisation du document 10 Etat de l’art 11 2.1 SPEM (Software Process Engineering Metamodel) 11 2.1.1 Modèle conceptuel du SPEM 13 2.1.2 Paquet Basic Elements 13 2.1.3 Paquet Process Structure 14 2.1.4 Paquet Process Lifecycle 16 2.1.5 Profil UML SPEM 16 2.2 UML4SPM (UML2.0-Based Language For Software Process Modeling) 17 2.2.1 Métamodèle UML4SPM 18 2.2.2 Le Package Process Structure 19 2.2.3 Le Package UML4SPM Foundation 20 2.2.4 Exécution des modèles de procédés UML4SPM 24 2.3 Le diagramme d’activité UML et le profil 26 2.4 SPEM et UML4SPM pour le système Gaspard 28 Le système Gaspard 31 Modèlisation UML des chnes d e transformation 34 4.1 Objectifs 34 4.2 Solution proposée 35 4.3 Un profil pour la spécification de processus 41 4.4 Le métamodèle d’execution 44 4.5 Implémentation 49 4.5.1 La transformation UML vers modèle 49 4.5.2 Le moteur d’execution 51 4.6 Mise en œuvre 52 Conclusion et Perspectives 54 Références 55 ANNEXE 57 Annexe : La Modélisation et l’exécution d’une chne 57 Annexe : Génération des classes Java partir le métamodèle 61 Annexe : La transformation QVTo 63 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Mémoire de fin d’études Automatisation des tâches exécutées par des modèles Nguyen Viet Hoa Promotion 13, IFI Annexe : L’interface d’utilisation et Initialisation de la première tâche 66 Annexe : Implantation de l’activité 72 Annexe : Implantation de l’action de transformation QVTo 80 Annexe : Implantation d’une tâche 85 Annexe : Implantation de la tâche de Java 90 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Mémoire de fin d’études Automatisation des tâches exécutées par des modèles Nguyen Viet Hoa Promotion 13, IFI LISTE DES FIGURES Figure SPEM_Foundation et SPEM_Extension 12 Figure Modèle conceptual du SPEM 13 Figure Paquet Basic Elements 14 Figure Structure d’un procédé du SPEM 15 Figure Paquet Process Lifec ycle 16 Figure Exemple des classes de base 17 Figure Hiérarchie de packages du métamodèle UML4SPM 18 Figure UML4SPM Process Structure Package 19 Figure UML4SPM Foundation Package 21 Figure 10 UML4SPM Software Activity extending UML 2.0 Activity 23 Figure 11 UML4SPM WorkProduct extending UML 2.0 Artifact 24 Figure 12 The Execution Model approach 26 Figure 13 Un exemple du diagramme d’activité UML 28 Figure 15 Solution proposée e n utilisant UML4SPM 31 Figure 17 L’enchnement de transformations dans Gaspard actuel 33 Figure 18 Notre Moteur d’exécution 35 Figure 20 L’interface d’utilisation 38 Figure 21 Une modélisation par notre solution 39 Figure 22 Une sous-chne de la chne au dessus 39 Figure 23 Une chne qui utilise le garde de branches conditionnelles 40 Figure 24 Le profil proposé 42 Figure 25 Un exemple de la modélisation de la chne de tâches 43 Figure 26 Métamodèle proposé pour les chnes de trans formations GASPARD 44 Figure 27 Création d’un nouveau diagramme d’activité 58 Figure 28 Modélisation d’une tâche de transformation QVTo 58 Figure 29 Modélisation d’une tâche Java 59 Figure 30 Un exemple de lancement d’un diagramme d’activité UML 60 Figure 31 Le résultat de l’exécution de la chne dans la figure 22 61 Figure 32 Créer un projet EMF 62 Figure 33 Importer le métamodèle 62 Figure 34 Générer les classes Java pour le métamodèle 63 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Mémoire de fin d’études Automatisation des tâches exécutées par des modèles Nguyen Viet Hoa Promotion 13, IFI Introduction 1.1 Contexte L’équipe projet DaRT propose un environnement de conception GASPARD basé sur l’ingénierie dirigée par les modèles pour la conception de systèmes embarqués hautes performances Les systốmes embarquộs sont conỗus un niveau dabstraction élevé l’aide du profil standard MARTE ( Modeling and Analysis of Real -time and Embedded systems) En se basant sur l’Ingénierie Dirigée par les Modèles (IDM), les modèles MARTE sont raffinés vers des niveaux d’abstraction plus bas En exploitant tout ce potentiel, GASPARD permet aux concepteurs de générer automatiquement du code pour la vérification formelle, la simulation et la synthèse de matériel partir de spécification haut niveau de systèmes embarqués hautes performances Cependant, dans le système Gaspard actuel, la définition de la chne de transformation est complexe, partant de modèles de hauts niveaux jusqu’à la production de code simulable, testable, vérifiable De plus, de la simulation et d u refactoring sont appliqués manuellement sur les modèles générés Il faut avoir donc une solution pour uniformiser toutes les tâches différentes : transformation, test, simulation Et il faut avoir une solution pour définir facilement les chnes de tâche s 1.2 Objectifs La tâche principale de mon stage est de trouver une solution pour faciliter la définition de chnes de tâches dans le système Gaspard, et ensuite, il faut créer un moteur d’exécution automatique toutes les tâches dans la chne définit On propose l’utilisation du diagramme d’activité UML associé un profil pour faciliter la modélisation de la chne de transformation On propose aussi un méta -modèle permettant la modélisation des tâches, leurs dépendances, leurs modèles d’entrées et de sorties Enfin, un moteur exécute automatiquement toutes les tâches dans la chne qui est LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Mémoire de fin d’études Automatisation des tâches exécutées par des modèles Nguyen Viet Hoa Promotion 13, IFI définit dans le diagramme d’activité Pour cela, il faut construire un programme (moteur) qui permet d’implémenter la solution proposée L’entrée de ce moteur est le d iagramme d’activité UML qui modélise les chnes de tâches différentes Ce moteur exécute toutes ces tâches en respectant le flux de tâches, le flux de donnée et les gardes des branches conditionnelles 1.3 Motivation Ce stage m’offre l’occasion d’enrichir m es connaissances dans le domaine de l’Ingénierie Dirigée par les Modèles (IDM) et de me familiariser avec les outils d’IDM comme EMF, Eclipse, Papyrus UML et QVT La proposition du métamodèle, et du profil UML ainsi que l’implémentation du moteur d’exécuti on m’ont permit d’acquérir des connaissances en IDM, modélisation, méta modélisation, transformation QVTo De plus, je pourrais acquérir des connaissances dans le domaine des systèmes embarqués et participer aux activités de recherche de l’équipe – projet DaRT 1.4 Contribution Au cours de ce stage, nous avons proposé une solution pour modéliser les chnes de transformation par l’utilisation de diagramme d’activité UML, et l’exécution automatique de ces chnes par un moteur d’exécution en Java Actuelleme nt, les transformations dans le système Gaspard sont exécutées de faỗon manuelle, mais la chaợne de transformations dans le systốme Gaspard est assez complexe, partant de modèles de hauts niveaux jusqu’à la production de code simulable, testable, vérifiabl e Avec la solution proposée, on peut définir facilement les chnes de transformations dans le système Gaspard en utilisant le diagramme d’activité UML ainsi que notre métamodèle et notre profil Grâce l’utilisation de diagramme d’activité UML et une interface graphique de notre moteur d’exécution, les utilisateurs peuvent modéliser aisément des chnes de tâches qui sont ensuite réalisés par notre moteur d’exécution LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Mémoire de fin d’études Automatisation des tâches exécutées par des modèles 1.5 Nguyen Viet Hoa Promotion 13, IFI Environnement du stage Le centre de recherche INRIA Lille - Nord Europe est un des huit centres de recherche de l'Institut National de Recherche en Informatique et en Automatique Le lieu de travail de ce stage se situe l’INRIA Lille – Nord Europe, au sein de l’équipe DaRT sous la responsabilité de Jean – Luc DEKEYSER - Responsable de l’équipe – projet et Cédric DUMOULIN - mtre de conférences DaRT est un Equipe -projet commune avec le LIFL (CNRS et Université des Sciences et Technologies de Lille) Ses activités de recherche concernent principalement les modèles parallélisme de nnées et les techniques de compilation 1.6 Organisation du document Le reste de ce document est organisé comme suit : Le chapitre a pour but de présenter les travaux concernés Dans cette partie, on présente les travaux concernés : SPEM (Software Process Engineering Metamodel) et UML4SPM (UML2.0-Based Language For Software Process Modeling) Et puis, on analyse les points forts et les points faibles des deux travaux SPEM et UML4SPM avec notre problème Dans le chapitre 3, on présente notre solution, le mét amodèle, le profil et le moteur d’exécution Dans le chapitre 4, on présente la conclusion et perspectives Enfin, on donne en annexes quelques fichiers de code importants pour mieux comprendre notre solution 10 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Mémoire de fin d’études Automatisation des tâches exécutées par des modèles Nguyen Viet Hoa Promotion 13, IFI * * An implementation of the model object ' QVT Task' * *

* The following features are implemented: *

    *
  • {@link MetaChain.impl.QVTTaskImpl#getQVTFile QVT File}
  • *
*

* * @generated */ public class QVTTaskImpl extends TransformationTaskImpl implements QVTTask { /** * The default value of the ' {@link #getQVTFile() QVT File} ' attribute * * * @see #getQVTFile() * @generated * @ordered */ protected static final String QVT_FILE_EDEFAULT = null; protected static final ResourceSet RESOURCE_SET = new ResourceSetImpl(); Thread th; /** * methode for run the qvt task */ public void fire(){ if (this.getToken()==0){ System.out.println(" beginning "+this.getName()+ " "); Resource.Factory.Registry INSTANCE.getExtensionToFactoryMap().put( UMLResource.FILE_EXTENSION, UMLResource.Factory INSTANCE); Object obj = null; for (TaskArgument ta : this.getTaskArgument()){ if (ta.getDirection() == Direction IN){ obj = ta.getIncoming().get(0).getSource().get(0).getData(); } } URI fileURI = URI.createPlatformResourceURI ("/chain.examples.tests/" + obj.toString().trim(), true); //call the transformation QVTo URI uri = URI.createPlatformResourceURI (this.getQVTFile(), 81 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Mémoire de fin d’études Automatisation des tâches exécutées par des modèles Nguyen Viet Hoa Promotion 13, IFI true); ModelContent[] modelContentArray = new ModelContent[1]; modelContentArray[0] = EmfUtil.loadModel(fileURI); try{ TransformationRunner.In input = new TransformationRunner.In(modelContentArray, new Context()); QvtInterpretedTransformation transformation = new QvtInterpretedTransformation(TransformationUtil getQvtModule(uri)); TransformationRunner.Out output = transformation.run(input) ; List outparams = output.getExtents() ; for (TaskArgument ta : this.getTaskArgument()){ if (ta.getDirection() == Direction OUT){ System.out.println("Output of this transformation : " + outparams.get(0).getAllRootElements() ); ta.setData(outparams.get(0).getAllRootElements() ); } } }catch (MdaException e) { // TODO Auto-generated catch block e.printStackTrace(); } for(ControlFlow f : this.getOutgoing()){ for (Task t : f.getTarget()) t.dataChanged(); } } } /** * The cached value of the ' {@link #getQVTFile() QVT File} ' attribute * * * @see #getQVTFile() * @generated * @ordered */ protected String qvtFile = QVT_FILE_EDEFAULT; /** * * * @generated */ protected QVTTaskImpl() { super(); 82 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Mémoire de fin d’études Automatisation des tâches exécutées par des modèles Nguyen Viet Hoa Promotion 13, IFI } /** * * * @generated */ @Override protected EClass eStaticClass() { return MetaChainPackage.Literals QVT_TASK; } /** * * * @generated */ public String getQVTFile() { return qvtFile; } /** * * * @generated */ public void setQVTFile(String newQVTFile) { String oldQVTFile = qvtFile; qvtFile = newQVTFile; if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.SET, MetaChainPackage.QVT_TASK QVT_FILE , oldQVTFile, qvtFile)); } /** * * * @generated */ @Override public Object eGet(int featureID, boolean resolve, boolean coreType) { switch (featureID) { case MetaChainPackage QVT_TASK QVT_FILE : return getQVTFile(); } return super.eGet(featureID, resolve, coreType); } /** * * * @generated */ @Override public void eSet(int featureID, Object newValue) { switch (featureID) { 83 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Mémoire de fin d’études Automatisation des tâches exécutées par des modèles Nguyen Viet Hoa Promotion 13, IFI case MetaChainPackage QVT_TASK QVT_FILE : setQVTFile((String)newValue); return; } super.eSet(featureID, newValue); } /** * * * @generated */ @Override public void eUnset(int featureID) { switch (featureID) { case MetaChainPackage QVT_TASK QVT_FILE : setQVTFile(QVT_FILE_EDEFAULT); return; } super.eUnset(featureID); } /** * * * @generated */ @Override public boolean eIsSet(int featureID) { switch (featureID) { case MetaChainPackage QVT_TASK QVT_FILE : return QVT_FILE_EDEFAULT == null ? qvtFile != null : !QVT_FILE_EDEFAULT.equals(qvtFile); } return super.eIsSet(featureID); } /** * * * @generated */ @Override public String toString() { if (eIsProxy()) return super.toString(); StringBuffer result = new StringBuffer(super.toString()); result.append(" (QVTFile: "); result.append(qvtFile); result.append(')'); return result.toString(); } } 84 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Mémoire de fin d’études Automatisation des tâches exécutées par des modèles Nguyen Viet Hoa Promotion 13, IFI Annexe : Implantation d’une tâche package MetaChain.impl; import java.util.ArrayList; import java.util.Collection; import java.util.List; import org.eclipse.m2m.internal.qvt.oml.library.IContext ; import MetaChain.ControlFlow; import MetaChain.MetaChainPackage; import MetaChain.Task; import MetaChain.TaskArgument; import MetaChain.Tasks; import org.eclipse.emf.common.notify.NotificationChain ; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.InternalEObject; import org.eclipse.emf.ecore.util.EObjectContainmentEList; import org.eclipse.emf.ecore.util.EObjectWithInverseResolvingEList; import org.eclipse.emf.ecore.util.InternalEList; /** * * An implementation of the model object ' Task' * *

* The following features are implemented: *

    *
  • {@link MetaChain.imp l.TaskImpl#getTaskArgument Task Argument}
  • *
  • {@link MetaChain.impl.TaskImpl#getOutgoing Outgoing}
  • *
  • {@link MetaChain.impl.TaskImpl#getIncoming Incoming}
  • *
*

* * @generated */ public abstract class TaskImpl extends NamedElementImpl implements Task,Runnable { /** * The cached value of the ' {@link #getTaskArgument() Task Argument} ' containment reference list * * * @see #getTaskArgument() * @generated * @ordered */ protected EList taskArgument; protected int Token = 1; /** * The cached value of the ' {@link #getOutgoing() Outgoing} ' reference list * * * @see #getOutgoing() * @generated 85 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Mémoire de fin d’études Automatisation des tâches exécutées par des modèles Nguyen Viet Hoa Promotion 13, IFI * @ordered */ protected EList outgoing; /** * The cached value of the ' {@link #getIncoming() Incoming} ' reference list * * * @see #getIncoming() * @generated * @ordered */ protected EList incoming; /** * * * @generated */ protected TaskImpl() { super(); } public void setToken(int t){ Token = t; } protected Thread th; protected List tasks = new ArrayList(); public void setTasks(List t){ tasks=t; } public List getTasks(){ return tasks; } public void run(){ this.fire(); th.stop(); } public void dataChanged(){ Token ; if (Token == 0) { th = new Thread(this); th.start(); } } public void fire(){ } /** 86 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Mémoire de fin d’études Automatisation des tâches exécutées par des modèles Nguyen Viet Hoa Promotion 13, IFI * * * @generated */ @Override protected EClass eStaticClas s() { return MetaChainPackage.Literals TASK; } public int getToken(){ return Token; } public EList getTaskArgument() { if (taskArgument == null) { taskArgument = new EObjectContainmentEList(TaskArgument class, this, MetaChainPackage.TASK TASK_ARGUMENT ); } return taskArgument; } /** * * * @generated */ public EList getOutgoing() { if (outgoing == null) { outgoing = new EObjectWithInverse ResolvingEList.ManyInverse(ControlFlow class, this, MetaChainPackage.TASK OUTGOING, MetaChainPackage CONTROL_FLOW SOURCE ); } return outgoing; } /** * * * @generated */ public EList getIncoming() { if (incoming == null) { incoming = new EObjectWithInverseResolvingEList.ManyInverse(ControlFlow class, this, MetaChainPackage.TASK INCOMING, MetaChainPackage CONTROL_FLOW TARGET ); } return incoming; } /** * * * @generated */ public void execute() { // TODO: implement this method 87 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Mémoire de fin d’études Automatisation des tâches exécutées par des modèles Nguyen Viet Hoa Promotion 13, IFI // Ensure that you remove @generated or mark it @generated NOT throw new UnsupportedOperationException(); } /** * * * @generated */ @SuppressWarnings("unchecked") @Override public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) { switch (featureID) { case MetaChainPackage.TASK OUTGOING: return ((InternalEList)(InternalEList)getOutgoing()).basicAdd(otherEnd, msgs); case MetaChainPackage TASK INCOMING: return ((InternalEList)(InternalEList)getIncoming()).bas icAdd(otherEnd, msgs); } return super.eInverseAdd(otherEnd, featureID, msgs); } /** * * * @generated */ @Override public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) { switch (featureID) { case MetaChainPackage TASK TASK_ARGUMENT : return ((InternalEList)getTaskArgument()).basicRemove(otherEnd, msgs); case MetaChainPackage TASK OUTGOING: return ((InternalEList)getOutgoin g()).basicRemove(otherEnd, msgs); case MetaChainPackage TASK INCOMING: return ((InternalEList)getIncoming()).basicRemove(otherEnd, msgs); } return super.eInverseRemove(otherEnd, featureID, msgs); } /** * * * @generated */ @Override public Object eGet(int featureID, boolean resolve, boolean coreType) { switch (featureID) { 88 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Mémoire de fin d’études Automatisation des tâches exécutées par des modèles Nguyen Viet Hoa Promotion 13, IFI case MetaChainPackage TASK TASK_ARGUMENT : return getTaskArgument(); case MetaChainPackage TASK OUTGOING: return getOutgoing(); case MetaChainPackage TASK INCOMING: return getIncoming(); } return super.eGet(featureID, resolve, coreType); } /** * * * @generated */ @SuppressWarnings("unchecked") @Override public void eSet(int featureID, Object newValue) { switch (featureID) { case MetaChainPackage TASK TASK_ARGUMENT : getTaskArgument().clear(); getTaskArgument().addAll((Collection

Ngày đăng: 06/12/2022, 15:44

Xem thêm:

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN