From 70f299cc2ffa9a3cf08e41d8195c8b5b6ea67ca6 Mon Sep 17 00:00:00 2001 From: Laurent Fainsin Date: Fri, 3 Dec 2021 08:24:06 +0100 Subject: [PATCH] feat: added petrinet from miniprojet --- test.game | 147 ++ workspace/fr.n7.petrinet.edit/.classpath | 7 + workspace/fr.n7.petrinet.edit/.project | 28 + .../fr.n7.petrinet.edit/META-INF/MANIFEST.MF | 16 + workspace/fr.n7.petrinet.edit/bin/.gitignore | 1 + .../fr.n7.petrinet.edit/build.properties | 10 + .../ctool16/CreateNetwork_nodes_Place.gif | Bin 0 -> 223 bytes .../CreateNetwork_nodes_Transition.gif | Bin 0 -> 223 bytes .../ctool16/CreateTransition_arcs_Arc.gif | Bin 0 -> 223 bytes .../icons/full/obj16/Arc.gif | Bin 0 -> 129 bytes .../icons/full/obj16/Network.gif | Bin 0 -> 129 bytes .../icons/full/obj16/Place.gif | Bin 0 -> 129 bytes .../icons/full/obj16/Transition.gif | Bin 0 -> 129 bytes .../fr.n7.petrinet.edit/plugin.properties | 37 + workspace/fr.n7.petrinet.edit/plugin.xml | 22 + .../petrinet/provider/ArcItemProvider.java | 213 ++ .../provider/NetworkItemProvider.java | 204 ++ .../petrinet/provider/NodeItemProvider.java | 147 ++ .../petrinet/provider/PetrinetEditPlugin.java | 89 + .../PetrinetItemProviderAdapterFactory.java | 271 +++ .../petrinet/provider/PlaceItemProvider.java | 155 ++ .../provider/TransitionItemProvider.java | 145 ++ workspace/fr.n7.petrinet.editor/.classpath | 7 + workspace/fr.n7.petrinet.editor/.project | 28 + .../META-INF/MANIFEST.MF | 19 + .../fr.n7.petrinet.editor/bin/.gitignore | 1 + .../fr.n7.petrinet.editor/build.properties | 10 + .../icons/full/obj16/PetrinetModelFile.gif | Bin 0 -> 346 bytes .../icons/full/wizban/NewPetrinet.gif | Bin 0 -> 2462 bytes .../fr.n7.petrinet.editor/plugin.properties | 53 + workspace/fr.n7.petrinet.editor/plugin.xml | 37 + .../PetrinetActionBarContributor.java | 424 ++++ .../petrinet/presentation/PetrinetEditor.java | 1823 +++++++++++++++++ .../presentation/PetrinetEditorPlugin.java | 91 + .../presentation/PetrinetModelWizard.java | 627 ++++++ workspace/fr.n7.petrinet.tests/.classpath | 7 + workspace/fr.n7.petrinet.tests/.project | 28 + .../fr.n7.petrinet.tests/META-INF/MANIFEST.MF | 16 + workspace/fr.n7.petrinet.tests/bin/.gitignore | 1 + .../fr.n7.petrinet.tests/build.properties | 8 + .../fr.n7.petrinet.tests/plugin.properties | 4 + .../src/petrinet/tests/ArcTest.java | 89 + .../src/petrinet/tests/NetworkTest.java | 89 + .../src/petrinet/tests/NodeTest.java | 55 + .../src/petrinet/tests/PetrinetAllTests.java | 46 + .../src/petrinet/tests/PetrinetExample.java | 121 ++ .../src/petrinet/tests/PetrinetTests.java | 46 + .../src/petrinet/tests/PlaceTest.java | 70 + .../src/petrinet/tests/TransitionTest.java | 70 + workspace/fr.n7.petrinet.toTINA.ui/.classpath | 7 + workspace/fr.n7.petrinet.toTINA.ui/.project | 28 + .../.settings/org.eclipse.jdt.core.prefs | 6 + .../META-INF/MANIFEST.MF | 20 + .../fr.n7.petrinet.toTINA.ui/build.properties | 7 + .../icons/default.gif | Bin 0 -> 534 bytes workspace/fr.n7.petrinet.toTINA.ui/plugin.xml | 22 + .../fr/n7/petrinet/toTINA/ui/Activator.java | 66 + .../toTINA/ui/common/GenerateAll.java | 86 + .../AcceleoGenerateToTINAAction.java | 116 ++ workspace/fr.n7.petrinet.toTINA/.classpath | 7 + workspace/fr.n7.petrinet.toTINA/.project | 50 + .../META-INF/MANIFEST.MF | 24 + .../fr.n7.petrinet.toTINA/bin/.gitignore | 1 + .../fr.n7.petrinet.toTINA/build.properties | 5 + .../src/fr/n7/petrinet/toTINA/Activator.java | 66 + .../fr/n7/petrinet/toTINA/main/ToTINA.java | 417 ++++ .../src/fr/n7/petrinet/toTINA/main/toTINA.mtl | 44 + .../fr.n7.petrinet.toTINA/tasks/toTINA.xml | 66 + .../tasks/toTINATarget.xml | 19 + workspace/fr.n7.petrinet/.classpath | 7 + workspace/fr.n7.petrinet/.project | 50 + workspace/fr.n7.petrinet/META-INF/MANIFEST.MF | 16 + workspace/fr.n7.petrinet/bin/.gitignore | 1 + workspace/fr.n7.petrinet/build.properties | 10 + workspace/fr.n7.petrinet/ko-net.xmi | 26 + workspace/fr.n7.petrinet/net.xmi | 22 + workspace/fr.n7.petrinet/petriNet.aird | 367 ++++ workspace/fr.n7.petrinet/petriNet.ecore | 34 + workspace/fr.n7.petrinet/petriNet.genmodel | 31 + workspace/fr.n7.petrinet/petriNet.ocl | 21 + workspace/fr.n7.petrinet/petriNet.png | Bin 0 -> 263236 bytes workspace/fr.n7.petrinet/plugin.properties | 4 + workspace/fr.n7.petrinet/plugin.xml | 17 + .../fr.n7.petrinet/src/petrinet/Arc.java | 119 ++ .../fr.n7.petrinet/src/petrinet/Network.java | 63 + .../fr.n7.petrinet/src/petrinet/Node.java | 71 + .../src/petrinet/PetrinetFactory.java | 69 + .../src/petrinet/PetrinetPackage.java | 669 ++++++ .../fr.n7.petrinet/src/petrinet/Place.java | 61 + .../src/petrinet/Transition.java | 38 + .../src/petrinet/impl/ArcImpl.java | 407 ++++ .../src/petrinet/impl/NetworkImpl.java | 237 +++ .../src/petrinet/impl/NodeImpl.java | 264 +++ .../petrinet/impl/PetrinetFactoryImpl.java | 128 ++ .../petrinet/impl/PetrinetPackageImpl.java | 374 ++++ .../src/petrinet/impl/PlaceImpl.java | 236 +++ .../src/petrinet/impl/TransitionImpl.java | 165 ++ .../petrinet/util/PetrinetAdapterFactory.java | 192 ++ .../src/petrinet/util/PetrinetSwitch.java | 196 ++ workspace/game.tests/test-bin/.gitignore | 2 + .../xtext/tests/.GameParsingTest.xtendbin | Bin 3332 -> 3332 bytes .../xtext/tests/.GameParsingTest.xtendbin | Bin 3332 -> 3332 bytes .../xtend-gen/xtext/tests/.gitignore | 3 + workspace/game/.gitignore | 1 + .../bin/xtext/AbstractGameRuntimeModule.class | Bin 12257 -> 7934 bytes .../game/bin/xtext/GameRuntimeModule.class | Bin 483 -> 303 bytes .../game/bin/xtext/GameStandaloneSetup.class | Bin 856 -> 469 bytes .../xtext/GameStandaloneSetupGenerated.class | Bin 2893 -> 2432 bytes workspace/game/bin/xtext/game/Action.class | Bin 947 -> 504 bytes .../game/AntiConditionConnaissance.class | Bin 570 -> 273 bytes workspace/game/bin/xtext/game/Chemin.class | Bin 1188 -> 761 bytes workspace/game/bin/xtext/game/Condition.class | Bin 667 -> 296 bytes .../xtext/game/ConditionConnaissance.class | Bin 558 -> 265 bytes .../game/bin/xtext/game/ConditionEt.class | Bin 747 -> 340 bytes .../game/bin/xtext/game/ConditionObjet.class | Bin 626 -> 340 bytes .../game/bin/xtext/game/ConditionTest.class | Bin 186 -> 155 bytes .../game/bin/xtext/game/Connaissance.class | Bin 830 -> 483 bytes .../game/bin/xtext/game/Description.class | Bin 648 -> 337 bytes .../game/bin/xtext/game/Explorateur.class | Bin 804 -> 397 bytes .../game/bin/xtext/game/GameFactory.class | Bin 1609 -> 1482 bytes .../bin/xtext/game/GamePackage$Literals.class | Bin 9444 -> 7320 bytes .../game/bin/xtext/game/GamePackage.class | Bin 13632 -> 6975 bytes .../game/bin/xtext/game/Interraction.class | Bin 930 -> 515 bytes workspace/game/bin/xtext/game/Jeu.class | Bin 1186 -> 791 bytes workspace/game/bin/xtext/game/Lieu.class | Bin 1161 -> 762 bytes workspace/game/bin/xtext/game/Objet.class | Bin 869 -> 522 bytes workspace/game/bin/xtext/game/Personne.class | Bin 817 -> 446 bytes .../game/bin/xtext/game/Territoire.class | Bin 756 -> 377 bytes .../game/bin/xtext/game/Transformation.class | Bin 847 -> 440 bytes .../game/bin/xtext/game/impl/ActionImpl.class | Bin 11241 -> 6099 bytes .../impl/AntiConditionConnaissanceImpl.class | Bin 4462 -> 2711 bytes .../game/bin/xtext/game/impl/CheminImpl.class | Bin 11166 -> 8629 bytes .../game/impl/ConditionConnaissanceImpl.class | Bin 4378 -> 2690 bytes .../bin/xtext/game/impl/ConditionEtImpl.class | Bin 5716 -> 2507 bytes .../bin/xtext/game/impl/ConditionImpl.class | Bin 4385 -> 2194 bytes .../xtext/game/impl/ConditionObjetImpl.class | Bin 5180 -> 3828 bytes .../xtext/game/impl/ConditionTestImpl.class | Bin 1148 -> 731 bytes .../xtext/game/impl/ConnaissanceImpl.class | Bin 8892 -> 5487 bytes .../bin/xtext/game/impl/DescriptionImpl.class | Bin 6863 -> 4478 bytes .../bin/xtext/game/impl/ExplorateurImpl.class | Bin 7168 -> 3906 bytes .../bin/xtext/game/impl/GameFactoryImpl.class | Bin 3805 -> 6498 bytes .../bin/xtext/game/impl/GamePackageImpl.class | Bin 12770 -> 17508 bytes .../xtext/game/impl/InterractionImpl.class | Bin 10978 -> 5749 bytes .../game/bin/xtext/game/impl/JeuImpl.class | Bin 12380 -> 6794 bytes .../game/bin/xtext/game/impl/LieuImpl.class | Bin 11299 -> 8185 bytes .../game/bin/xtext/game/impl/ObjetImpl.class | Bin 9106 -> 6134 bytes .../bin/xtext/game/impl/PersonneImpl.class | Bin 8658 -> 5175 bytes .../bin/xtext/game/impl/TerritoireImpl.class | Bin 6773 -> 3237 bytes .../xtext/game/impl/TransformationImpl.class | Bin 9279 -> 5085 bytes .../xtext/game/util/GameAdapterFactory.class | Bin 7381 -> 3267 bytes .../game/bin/xtext/game/util/GameSwitch.class | Bin 4953 -> 7922 bytes .../xtext/generator/.GameGenerator.xtendbin | Bin 2250 -> 2250 bytes .../bin/xtext/generator/GameGenerator.class | Bin 1197 -> 739 bytes .../bin/xtext/generator/GameGenerator.xtend | 25 - .../antlr/GameAntlrTokenFileProvider.class | Bin 989 -> 849 bytes .../bin/xtext/parser/antlr/GameParser.class | Bin 1896 -> 1762 bytes .../internal/InternalGameLexer$DFA12.class | Bin 6016 -> 3345 bytes .../antlr/internal/InternalGameLexer.class | Bin 12634 -> 17752 bytes .../antlr/internal/InternalGameParser.class | Bin 11253 -> 43092 bytes .../scoping/AbstractGameScopeProvider.class | Bin 599 -> 366 bytes .../bin/xtext/scoping/GameScopeProvider.class | Bin 507 -> 327 bytes .../serializer/GameSemanticSequencer.class | Bin 12266 -> 11411 bytes .../serializer/GameSyntacticSequencer.class | Bin 2713 -> 3266 bytes .../GameGrammarAccess$ActionElements.class | Bin 7460 -> 4096 bytes ...ss$AntiConditionConnaissanceElements.class | Bin 6145 -> 2488 bytes .../GameGrammarAccess$CheminElements.class | Bin 8688 -> 5608 bytes ...ameGrammarAccess$ComparateurElements.class | Bin 6308 -> 2590 bytes ...Access$ConditionConnaissanceElements.class | Bin 5823 -> 1991 bytes .../GameGrammarAccess$ConditionElements.class | Bin 7315 -> 3947 bytes ...ameGrammarAccess$ConditionEtElements.class | Bin 7243 -> 3846 bytes ...GrammarAccess$ConditionObjetElements.class | Bin 6477 -> 2850 bytes ...eGrammarAccess$ConditionTestElements.class | Bin 6107 -> 2329 bytes ...meGrammarAccess$ConnaissanceElements.class | Bin 6906 -> 3422 bytes ...ameGrammarAccess$DescriptionElements.class | Bin 6629 -> 3082 bytes ...ameGrammarAccess$ExplorateurElements.class | Bin 7161 -> 3740 bytes ...meGrammarAccess$InterractionElements.class | Bin 7174 -> 3753 bytes .../GameGrammarAccess$JeuElements.class | Bin 7787 -> 4483 bytes .../GameGrammarAccess$LieuElements.class | Bin 8228 -> 5051 bytes .../GameGrammarAccess$NomElements.class | Bin 5573 -> 1635 bytes .../GameGrammarAccess$ObjetElements.class | Bin 7133 -> 3705 bytes .../GameGrammarAccess$PersonneElements.class | Bin 6936 -> 3448 bytes ...GameGrammarAccess$TerritoireElements.class | Bin 7054 -> 3633 bytes ...GrammarAccess$TransformationElements.class | Bin 7106 -> 3656 bytes .../xtext/services/GameGrammarAccess.class | Bin 14369 -> 11816 bytes .../validation/AbstractGameValidator.class | Bin 1297 -> 859 bytes .../GameConfigurableIssueCodesProvider.class | Bin 1431 -> 1198 bytes .../bin/xtext/validation/GameValidator.class | Bin 496 -> 320 bytes .../xtext/generator/.GameGenerator.xtendbin | Bin 2250 -> 2250 bytes .../game/xtend-gen/xtext/generator/.gitignore | 3 + 189 files changed, 10223 insertions(+), 25 deletions(-) create mode 100644 test.game create mode 100755 workspace/fr.n7.petrinet.edit/.classpath create mode 100755 workspace/fr.n7.petrinet.edit/.project create mode 100755 workspace/fr.n7.petrinet.edit/META-INF/MANIFEST.MF create mode 100644 workspace/fr.n7.petrinet.edit/bin/.gitignore create mode 100755 workspace/fr.n7.petrinet.edit/build.properties create mode 100755 workspace/fr.n7.petrinet.edit/icons/full/ctool16/CreateNetwork_nodes_Place.gif create mode 100755 workspace/fr.n7.petrinet.edit/icons/full/ctool16/CreateNetwork_nodes_Transition.gif create mode 100755 workspace/fr.n7.petrinet.edit/icons/full/ctool16/CreateTransition_arcs_Arc.gif create mode 100755 workspace/fr.n7.petrinet.edit/icons/full/obj16/Arc.gif create mode 100755 workspace/fr.n7.petrinet.edit/icons/full/obj16/Network.gif create mode 100755 workspace/fr.n7.petrinet.edit/icons/full/obj16/Place.gif create mode 100755 workspace/fr.n7.petrinet.edit/icons/full/obj16/Transition.gif create mode 100755 workspace/fr.n7.petrinet.edit/plugin.properties create mode 100755 workspace/fr.n7.petrinet.edit/plugin.xml create mode 100755 workspace/fr.n7.petrinet.edit/src/petrinet/provider/ArcItemProvider.java create mode 100755 workspace/fr.n7.petrinet.edit/src/petrinet/provider/NetworkItemProvider.java create mode 100755 workspace/fr.n7.petrinet.edit/src/petrinet/provider/NodeItemProvider.java create mode 100755 workspace/fr.n7.petrinet.edit/src/petrinet/provider/PetrinetEditPlugin.java create mode 100755 workspace/fr.n7.petrinet.edit/src/petrinet/provider/PetrinetItemProviderAdapterFactory.java create mode 100755 workspace/fr.n7.petrinet.edit/src/petrinet/provider/PlaceItemProvider.java create mode 100755 workspace/fr.n7.petrinet.edit/src/petrinet/provider/TransitionItemProvider.java create mode 100755 workspace/fr.n7.petrinet.editor/.classpath create mode 100755 workspace/fr.n7.petrinet.editor/.project create mode 100755 workspace/fr.n7.petrinet.editor/META-INF/MANIFEST.MF create mode 100644 workspace/fr.n7.petrinet.editor/bin/.gitignore create mode 100755 workspace/fr.n7.petrinet.editor/build.properties create mode 100755 workspace/fr.n7.petrinet.editor/icons/full/obj16/PetrinetModelFile.gif create mode 100755 workspace/fr.n7.petrinet.editor/icons/full/wizban/NewPetrinet.gif create mode 100755 workspace/fr.n7.petrinet.editor/plugin.properties create mode 100755 workspace/fr.n7.petrinet.editor/plugin.xml create mode 100755 workspace/fr.n7.petrinet.editor/src/petrinet/presentation/PetrinetActionBarContributor.java create mode 100755 workspace/fr.n7.petrinet.editor/src/petrinet/presentation/PetrinetEditor.java create mode 100755 workspace/fr.n7.petrinet.editor/src/petrinet/presentation/PetrinetEditorPlugin.java create mode 100755 workspace/fr.n7.petrinet.editor/src/petrinet/presentation/PetrinetModelWizard.java create mode 100755 workspace/fr.n7.petrinet.tests/.classpath create mode 100755 workspace/fr.n7.petrinet.tests/.project create mode 100755 workspace/fr.n7.petrinet.tests/META-INF/MANIFEST.MF create mode 100644 workspace/fr.n7.petrinet.tests/bin/.gitignore create mode 100755 workspace/fr.n7.petrinet.tests/build.properties create mode 100755 workspace/fr.n7.petrinet.tests/plugin.properties create mode 100755 workspace/fr.n7.petrinet.tests/src/petrinet/tests/ArcTest.java create mode 100755 workspace/fr.n7.petrinet.tests/src/petrinet/tests/NetworkTest.java create mode 100755 workspace/fr.n7.petrinet.tests/src/petrinet/tests/NodeTest.java create mode 100755 workspace/fr.n7.petrinet.tests/src/petrinet/tests/PetrinetAllTests.java create mode 100755 workspace/fr.n7.petrinet.tests/src/petrinet/tests/PetrinetExample.java create mode 100755 workspace/fr.n7.petrinet.tests/src/petrinet/tests/PetrinetTests.java create mode 100755 workspace/fr.n7.petrinet.tests/src/petrinet/tests/PlaceTest.java create mode 100755 workspace/fr.n7.petrinet.tests/src/petrinet/tests/TransitionTest.java create mode 100755 workspace/fr.n7.petrinet.toTINA.ui/.classpath create mode 100755 workspace/fr.n7.petrinet.toTINA.ui/.project create mode 100755 workspace/fr.n7.petrinet.toTINA.ui/.settings/org.eclipse.jdt.core.prefs create mode 100755 workspace/fr.n7.petrinet.toTINA.ui/META-INF/MANIFEST.MF create mode 100755 workspace/fr.n7.petrinet.toTINA.ui/build.properties create mode 100755 workspace/fr.n7.petrinet.toTINA.ui/icons/default.gif create mode 100755 workspace/fr.n7.petrinet.toTINA.ui/plugin.xml create mode 100755 workspace/fr.n7.petrinet.toTINA.ui/src/fr/n7/petrinet/toTINA/ui/Activator.java create mode 100755 workspace/fr.n7.petrinet.toTINA.ui/src/fr/n7/petrinet/toTINA/ui/common/GenerateAll.java create mode 100755 workspace/fr.n7.petrinet.toTINA.ui/src/fr/n7/petrinet/toTINA/ui/popupMenus/AcceleoGenerateToTINAAction.java create mode 100755 workspace/fr.n7.petrinet.toTINA/.classpath create mode 100755 workspace/fr.n7.petrinet.toTINA/.project create mode 100755 workspace/fr.n7.petrinet.toTINA/META-INF/MANIFEST.MF create mode 100644 workspace/fr.n7.petrinet.toTINA/bin/.gitignore create mode 100755 workspace/fr.n7.petrinet.toTINA/build.properties create mode 100755 workspace/fr.n7.petrinet.toTINA/src/fr/n7/petrinet/toTINA/Activator.java create mode 100755 workspace/fr.n7.petrinet.toTINA/src/fr/n7/petrinet/toTINA/main/ToTINA.java create mode 100755 workspace/fr.n7.petrinet.toTINA/src/fr/n7/petrinet/toTINA/main/toTINA.mtl create mode 100755 workspace/fr.n7.petrinet.toTINA/tasks/toTINA.xml create mode 100755 workspace/fr.n7.petrinet.toTINA/tasks/toTINATarget.xml create mode 100755 workspace/fr.n7.petrinet/.classpath create mode 100755 workspace/fr.n7.petrinet/.project create mode 100755 workspace/fr.n7.petrinet/META-INF/MANIFEST.MF create mode 100644 workspace/fr.n7.petrinet/bin/.gitignore create mode 100755 workspace/fr.n7.petrinet/build.properties create mode 100755 workspace/fr.n7.petrinet/ko-net.xmi create mode 100755 workspace/fr.n7.petrinet/net.xmi create mode 100755 workspace/fr.n7.petrinet/petriNet.aird create mode 100755 workspace/fr.n7.petrinet/petriNet.ecore create mode 100755 workspace/fr.n7.petrinet/petriNet.genmodel create mode 100755 workspace/fr.n7.petrinet/petriNet.ocl create mode 100755 workspace/fr.n7.petrinet/petriNet.png create mode 100755 workspace/fr.n7.petrinet/plugin.properties create mode 100755 workspace/fr.n7.petrinet/plugin.xml create mode 100755 workspace/fr.n7.petrinet/src/petrinet/Arc.java create mode 100755 workspace/fr.n7.petrinet/src/petrinet/Network.java create mode 100755 workspace/fr.n7.petrinet/src/petrinet/Node.java create mode 100755 workspace/fr.n7.petrinet/src/petrinet/PetrinetFactory.java create mode 100755 workspace/fr.n7.petrinet/src/petrinet/PetrinetPackage.java create mode 100755 workspace/fr.n7.petrinet/src/petrinet/Place.java create mode 100755 workspace/fr.n7.petrinet/src/petrinet/Transition.java create mode 100755 workspace/fr.n7.petrinet/src/petrinet/impl/ArcImpl.java create mode 100755 workspace/fr.n7.petrinet/src/petrinet/impl/NetworkImpl.java create mode 100755 workspace/fr.n7.petrinet/src/petrinet/impl/NodeImpl.java create mode 100755 workspace/fr.n7.petrinet/src/petrinet/impl/PetrinetFactoryImpl.java create mode 100755 workspace/fr.n7.petrinet/src/petrinet/impl/PetrinetPackageImpl.java create mode 100755 workspace/fr.n7.petrinet/src/petrinet/impl/PlaceImpl.java create mode 100755 workspace/fr.n7.petrinet/src/petrinet/impl/TransitionImpl.java create mode 100755 workspace/fr.n7.petrinet/src/petrinet/util/PetrinetAdapterFactory.java create mode 100755 workspace/fr.n7.petrinet/src/petrinet/util/PetrinetSwitch.java create mode 100644 workspace/game.tests/test-bin/.gitignore create mode 100644 workspace/game.tests/xtend-gen/xtext/tests/.gitignore create mode 100644 workspace/game/.gitignore delete mode 100644 workspace/game/bin/xtext/generator/GameGenerator.xtend create mode 100644 workspace/game/xtend-gen/xtext/generator/.gitignore diff --git a/test.game b/test.game new file mode 100644 index 0000000..678a150 --- /dev/null +++ b/test.game @@ -0,0 +1,147 @@ +{ + "Explorateur": { + "taille": 3, + "connaissances": [], + "objets": [ + { + "nom": "tentative", + "qty": 3 + } + ] + }, + "Territoires": { + "Lieux": [ + { + "nom": "Énigme", + "description": "lieu de départ", + "deposable": "(false)", + "depart": "(true)", + "fin": "(false)", + "connaissances": [], + "personnes": [ + "Sphinx" + ], + "objets": [] + }, + { + "nom": "Succès", + "description": "lieu succès", + "deposable": "(false)", + "depart": "(false)", + "fin": "(true)", + "connaissances": [], + "personnes": [], + "objets": [] + }, + { + "nom": "Échec", + "description": "lieu échec", + "deposable": "(false)", + "depart": "(false)", + "fin": "(true)", + "connaissances": [], + "personnes": [], + "objets": [] + } + ], + "Chemins": [ + { + "lieu_in": "Énigme", + "lieu_out": "Succès", + "ouvert": "(true)", + "visible": "(connaissance_Réussite==1)", + "obligatoire": "(false)", + "connaissances_gift": [], + "objets_gift": [], + "objets_conso": [], + "descriptions": [ + { + "texte": "Le chemin de la victoire !", + "condition": "(true)" + } + ] + }, + { + "lieu_in": "Énigme", + "lieu_out": "Échec", + "ouvert": "(true)", + "visible": "(objet_tentatives==0)", + "obligatoire": "(false)", + "connaissances": [], + "objets": [], + "objets_conso": [], + "descriptions": [ + { + "texte": "Le chemin de la loose !", + "condition": "(true)" + } + ] + } + ] + }, + "Objets": [ + { + "nom": "tentative", + "taille": 1, + "visible": "(true)", + "descriptions": [ + { + "texte": "permet répondre une question du sphinx", + "condition": "(true)" + } + ] + } + ], + "Connaissances": [ + { + "nom": "Réussite", + "descriptions": [ + { + "nom": "Permet de se casser de là", + "condition": "(true)" + } + ] + } + ], + "Personnes": [ + { + "nom": "Sphinx", + "visible": "(true)", + "obligatoire": "(true)", + "interactions": [ + { + "connaissances_gift": [], + "objets_gift": [], + "visible": "(true)", + "actions": [ + { + "connaissances_gift": [ + "Réussite" + ], + "objets_gift": [], + "objets_conso": [ + { + "nom": "tentative", + "qty": 1 + } + ], + "visible": "(true)" + }, + { + "connaissances_gift": [], + "objets_gift": [], + "objets_conso": [ + { + "nom": "tentative", + "qty": 1 + } + ], + "visible": "(true)" + } + ] + } + ] + } + ], + "Transformations": [] +} \ No newline at end of file diff --git a/workspace/fr.n7.petrinet.edit/.classpath b/workspace/fr.n7.petrinet.edit/.classpath new file mode 100755 index 0000000..c3ba59e --- /dev/null +++ b/workspace/fr.n7.petrinet.edit/.classpath @@ -0,0 +1,7 @@ + + + + + + + diff --git a/workspace/fr.n7.petrinet.edit/.project b/workspace/fr.n7.petrinet.edit/.project new file mode 100755 index 0000000..1b5afe6 --- /dev/null +++ b/workspace/fr.n7.petrinet.edit/.project @@ -0,0 +1,28 @@ + + + fr.n7.petrinet.edit + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.pde.PluginNature + + diff --git a/workspace/fr.n7.petrinet.edit/META-INF/MANIFEST.MF b/workspace/fr.n7.petrinet.edit/META-INF/MANIFEST.MF new file mode 100755 index 0000000..b26fd94 --- /dev/null +++ b/workspace/fr.n7.petrinet.edit/META-INF/MANIFEST.MF @@ -0,0 +1,16 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: %pluginName +Bundle-SymbolicName: fr.n7.petrinet.edit;singleton:=true +Automatic-Module-Name: fr.n7.petrinet.edit +Bundle-Version: 1.0.0.qualifier +Bundle-ClassPath: . +Bundle-Activator: petrinet.provider.PetrinetEditPlugin$Implementation +Bundle-Vendor: %providerName +Bundle-Localization: plugin +Bundle-RequiredExecutionEnvironment: J2SE-1.5 +Export-Package: petrinet.provider +Require-Bundle: org.eclipse.core.runtime, + fr.n7.petrinet;visibility:=reexport, + org.eclipse.emf.edit;visibility:=reexport +Bundle-ActivationPolicy: lazy diff --git a/workspace/fr.n7.petrinet.edit/bin/.gitignore b/workspace/fr.n7.petrinet.edit/bin/.gitignore new file mode 100644 index 0000000..79b56a6 --- /dev/null +++ b/workspace/fr.n7.petrinet.edit/bin/.gitignore @@ -0,0 +1 @@ +/petrinet/ diff --git a/workspace/fr.n7.petrinet.edit/build.properties b/workspace/fr.n7.petrinet.edit/build.properties new file mode 100755 index 0000000..6e3e902 --- /dev/null +++ b/workspace/fr.n7.petrinet.edit/build.properties @@ -0,0 +1,10 @@ +# + +bin.includes = .,\ + icons/,\ + META-INF/,\ + plugin.xml,\ + plugin.properties +jars.compile.order = . +source.. = src/ +output.. = bin/ diff --git a/workspace/fr.n7.petrinet.edit/icons/full/ctool16/CreateNetwork_nodes_Place.gif b/workspace/fr.n7.petrinet.edit/icons/full/ctool16/CreateNetwork_nodes_Place.gif new file mode 100755 index 0000000000000000000000000000000000000000..03366e35d0f4e924f00d75427b8e77c4ba351237 GIT binary patch literal 223 zcmZ?wbhEHb6krfwIKsg2|NsB{_xIb|$1^Z6Tzau*)6JflXVMxDIQ;(~KR@37|9$(0 zhKAoizP`C}^#1<&mzGuTnyv;!TPG>6>ylsEBsH&6Y-Wk@zrXK+=+YZ#L@u~AUhdYV-ytnQX=it7-pV5JmtdHN&U@zlS({|Kb!Pi%buhurrs}= zoar2>F?;z5c9A}8}5D03R{UYJRqLb}R3lrSrZ?x3h&eb~oGCiLm Pr=}^ju_;?sk--`OVfbW5 literal 0 HcmV?d00001 diff --git a/workspace/fr.n7.petrinet.edit/icons/full/ctool16/CreateTransition_arcs_Arc.gif b/workspace/fr.n7.petrinet.edit/icons/full/ctool16/CreateTransition_arcs_Arc.gif new file mode 100755 index 0000000000000000000000000000000000000000..b3c69247d70a897cd1306ae54e0ad33e911447ed GIT binary patch literal 223 zcmZ?wbhEHb6krfwIKsg2|NsB{_xIb|$1^Z695`@b&YU?74GqO=KL7v6&yTnNf8QR+ z-LvOKPtVP?v@;G42X;+Y1EQ^yl-G61FKv>VS1C5LMEKv|_dxXb^LZfp^L+8|yUjq; zAVBda3nPf710q0nGO)%dDDA99YNmER{Un)7% zIZ$Kv@)PVLeOhx)opiHe&{4bZ?P4Ji)G+%+!iPmC+nE+7xXIsWskxo2b^2v`K0{7T NQ)**VwyGk7H2^>cVITki literal 0 HcmV?d00001 diff --git a/workspace/fr.n7.petrinet.edit/icons/full/obj16/Arc.gif b/workspace/fr.n7.petrinet.edit/icons/full/obj16/Arc.gif new file mode 100755 index 0000000000000000000000000000000000000000..90d10f9470787d1465c462197b85d1d3621f84e4 GIT binary patch literal 129 zcmZ?wbhEHb6krfw*vtS14M4Jip`qcxfddT<4GjN*-2XuK|Nmgte-L}loH;Seg|6F8S#PBzcr94?)kg2*G_|W{7fk zFD+|z`)6%1JVgHgMmfQ;H2m3y%w*(d{g0nSm?Ull=W6hg4cqDUv2b0PE)&T WR^GExlV5i^W2f7Zi9*7R4AuaSD>A77 literal 0 HcmV?d00001 diff --git a/workspace/fr.n7.petrinet.edit/icons/full/obj16/Place.gif b/workspace/fr.n7.petrinet.edit/icons/full/obj16/Place.gif new file mode 100755 index 0000000000000000000000000000000000000000..e4bc22dd17e82d9350631bd55ad9671957cdaf50 GIT binary patch literal 129 zcmZ?wbhEHb6krfw*vtS14M4Jip`qcxfddT<4GjN*-2XuK|Nmgt|Noa>?Adg)XXcr- zh64_YKUo+V7&sYpKsrHYFtF$uob+71*W&e;Zz}u`3thLHvffHb@LI6&tBu~rX=+!^ W%6nF7^6M^V>~uRaQAn7P!5RPwrZD0F literal 0 HcmV?d00001 diff --git a/workspace/fr.n7.petrinet.edit/icons/full/obj16/Transition.gif b/workspace/fr.n7.petrinet.edit/icons/full/obj16/Transition.gif new file mode 100755 index 0000000000000000000000000000000000000000..7bac4fd3808df6247660dfb8d76e15609f279841 GIT binary patch literal 129 zcmZ?wbhEHb6krfw*vtS14M4Jip`qcxfddT<4GjN*-2XuK|Nmgt|NndTyy)qp3@myECp}m1wRrvIn+pHKLf7r4thZ7UycR6{YNPjYn%Y&f W@}8BN{JP5-JKc^<6cT1+um%9tY%ntb literal 0 HcmV?d00001 diff --git a/workspace/fr.n7.petrinet.edit/plugin.properties b/workspace/fr.n7.petrinet.edit/plugin.properties new file mode 100755 index 0000000..5c86d9d --- /dev/null +++ b/workspace/fr.n7.petrinet.edit/plugin.properties @@ -0,0 +1,37 @@ +# + +pluginName = Petrinet Edit Support +providerName = www.example.org + +_UI_CreateChild_text = {0} +_UI_CreateChild_text2 = {1} {0} +_UI_CreateChild_text3 = {1} +_UI_CreateChild_tooltip = Create New {0} Under {1} Feature +_UI_CreateChild_description = Create a new child of type {0} for the {1} feature of the selected {2}. +_UI_CreateSibling_description = Create a new sibling of type {0} for the selected {2}, under the {1} feature of their parent. + +_UI_PropertyDescriptor_description = The {0} of the {1} + +_UI_Network_type = Network +_UI_Node_type = Node +_UI_Place_type = Place +_UI_Arc_type = Arc +_UI_Transition_type = Transition +_UI_Unknown_type = Object + +_UI_Unknown_datatype= Value + +_UI_Network_name_feature = Name +_UI_Network_nodes_feature = Nodes +_UI_Node_name_feature = Name +_UI_Place_tokens_feature = Tokens +_UI_Arc_weight_feature = Weight +_UI_Arc_outgoing_feature = Outgoing +_UI_Arc_target_feature = Target +_UI_Transition_arcs_feature = Arcs +_UI_Unknown_feature = Unspecified + +_UI_Node_network_feature = Network +_UI_Place_arcs_feature = Arcs +_UI_Arc_place_feature = Place +_UI_Arc_transition_feature = Transition diff --git a/workspace/fr.n7.petrinet.edit/plugin.xml b/workspace/fr.n7.petrinet.edit/plugin.xml new file mode 100755 index 0000000..bf46da9 --- /dev/null +++ b/workspace/fr.n7.petrinet.edit/plugin.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + diff --git a/workspace/fr.n7.petrinet.edit/src/petrinet/provider/ArcItemProvider.java b/workspace/fr.n7.petrinet.edit/src/petrinet/provider/ArcItemProvider.java new file mode 100755 index 0000000..4aa20a5 --- /dev/null +++ b/workspace/fr.n7.petrinet.edit/src/petrinet/provider/ArcItemProvider.java @@ -0,0 +1,213 @@ +/** + */ +package petrinet.provider; + + +import java.util.Collection; +import java.util.List; + +import org.eclipse.emf.common.notify.AdapterFactory; +import org.eclipse.emf.common.notify.Notification; + +import org.eclipse.emf.common.util.ResourceLocator; + +import org.eclipse.emf.edit.provider.ComposeableAdapterFactory; +import org.eclipse.emf.edit.provider.IEditingDomainItemProvider; +import org.eclipse.emf.edit.provider.IItemLabelProvider; +import org.eclipse.emf.edit.provider.IItemPropertyDescriptor; +import org.eclipse.emf.edit.provider.IItemPropertySource; +import org.eclipse.emf.edit.provider.IStructuredItemContentProvider; +import org.eclipse.emf.edit.provider.ITreeItemContentProvider; +import org.eclipse.emf.edit.provider.ItemPropertyDescriptor; +import org.eclipse.emf.edit.provider.ItemProviderAdapter; +import org.eclipse.emf.edit.provider.ViewerNotification; + +import petrinet.Arc; +import petrinet.PetrinetPackage; +import petrinet.Place; +import petrinet.Transition; + +/** + * This is the item provider adapter for a {@link petrinet.Arc} object. + * + * + * @generated + */ +public class ArcItemProvider + extends ItemProviderAdapter + implements + IEditingDomainItemProvider, + IStructuredItemContentProvider, + ITreeItemContentProvider, + IItemLabelProvider, + IItemPropertySource { + /** + * This constructs an instance from a factory and a notifier. + * + * + * @generated + */ + public ArcItemProvider(AdapterFactory adapterFactory) { + super(adapterFactory); + } + + /** + * This returns the property descriptors for the adapted class. + * + * + * @generated + */ + @Override + public List getPropertyDescriptors(Object object) { + if (itemPropertyDescriptors == null) { + super.getPropertyDescriptors(object); + + addWeightPropertyDescriptor(object); + addOutgoingPropertyDescriptor(object); + addPlacePropertyDescriptor(object); + } + return itemPropertyDescriptors; + } + + /** + * This adds a property descriptor for the Weight feature. + * + * + * @generated + */ + protected void addWeightPropertyDescriptor(Object object) { + itemPropertyDescriptors.add + (createItemPropertyDescriptor + (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(), + getResourceLocator(), + getString("_UI_Arc_weight_feature"), + getString("_UI_PropertyDescriptor_description", "_UI_Arc_weight_feature", "_UI_Arc_type"), + PetrinetPackage.Literals.ARC__WEIGHT, + true, + false, + false, + ItemPropertyDescriptor.INTEGRAL_VALUE_IMAGE, + null, + null)); + } + + /** + * This adds a property descriptor for the Outgoing feature. + * + * + * @generated + */ + protected void addOutgoingPropertyDescriptor(Object object) { + itemPropertyDescriptors.add + (createItemPropertyDescriptor + (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(), + getResourceLocator(), + getString("_UI_Arc_outgoing_feature"), + getString("_UI_PropertyDescriptor_description", "_UI_Arc_outgoing_feature", "_UI_Arc_type"), + PetrinetPackage.Literals.ARC__OUTGOING, + true, + false, + false, + ItemPropertyDescriptor.BOOLEAN_VALUE_IMAGE, + null, + null)); + } + + /** + * This adds a property descriptor for the Place feature. + * + * + * @generated + */ + protected void addPlacePropertyDescriptor(Object object) { + itemPropertyDescriptors.add + (createItemPropertyDescriptor + (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(), + getResourceLocator(), + getString("_UI_Arc_place_feature"), + getString("_UI_PropertyDescriptor_description", "_UI_Arc_place_feature", "_UI_Arc_type"), + PetrinetPackage.Literals.ARC__PLACE, + true, + false, + true, + null, + null, + null)); + } + + /** + * This returns Arc.gif. + * + * + * @generated + */ + @Override + public Object getImage(Object object) { + return overlayImage(object, getResourceLocator().getImage("full/obj16/Arc")); + } + + /** + * This returns the label text for the adapted class. + * + * + * @generated NOT + */ + @Override + public String getText(Object object) { + Arc arc = (Arc)object; + Transition transition = arc.getTransition(); + Place place = arc.getPlace(); + int weight = arc.getWeight(); + boolean outgoing = arc.isOutgoing(); + return (outgoing) ? + transition.getName() + " --" + weight + "--> " + place.getName(): + place.getName() + " --" + weight + "--> " + transition.getName(); + } + + + /** + * This handles model notifications by calling {@link #updateChildren} to update any cached + * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}. + * + * + * @generated NOT + */ + @Override + public void notifyChanged(Notification notification) { + updateChildren(notification); + + switch (notification.getFeatureID(Arc.class)) { + case PetrinetPackage.ARC__PLACE: + case PetrinetPackage.ARC__TRANSITION: + case PetrinetPackage.ARC__WEIGHT: + case PetrinetPackage.ARC__OUTGOING: + fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true)); + return; + } + super.notifyChanged(notification); + } + + /** + * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children + * that can be created under this object. + * + * + * @generated + */ + @Override + protected void collectNewChildDescriptors(Collection newChildDescriptors, Object object) { + super.collectNewChildDescriptors(newChildDescriptors, object); + } + + /** + * Return the resource locator for this item provider's resources. + * + * + * @generated + */ + @Override + public ResourceLocator getResourceLocator() { + return PetrinetEditPlugin.INSTANCE; + } + +} diff --git a/workspace/fr.n7.petrinet.edit/src/petrinet/provider/NetworkItemProvider.java b/workspace/fr.n7.petrinet.edit/src/petrinet/provider/NetworkItemProvider.java new file mode 100755 index 0000000..2894dbc --- /dev/null +++ b/workspace/fr.n7.petrinet.edit/src/petrinet/provider/NetworkItemProvider.java @@ -0,0 +1,204 @@ +/** + */ +package petrinet.provider; + + +import java.util.Collection; +import java.util.List; + +import org.eclipse.emf.common.notify.AdapterFactory; +import org.eclipse.emf.common.notify.Notification; + +import org.eclipse.emf.common.util.ResourceLocator; + +import org.eclipse.emf.ecore.EStructuralFeature; + +import org.eclipse.emf.edit.provider.ComposeableAdapterFactory; +import org.eclipse.emf.edit.provider.IEditingDomainItemProvider; +import org.eclipse.emf.edit.provider.IItemLabelProvider; +import org.eclipse.emf.edit.provider.IItemPropertyDescriptor; +import org.eclipse.emf.edit.provider.IItemPropertySource; +import org.eclipse.emf.edit.provider.IStructuredItemContentProvider; +import org.eclipse.emf.edit.provider.ITreeItemContentProvider; +import org.eclipse.emf.edit.provider.ItemPropertyDescriptor; +import org.eclipse.emf.edit.provider.ItemProviderAdapter; +import org.eclipse.emf.edit.provider.ViewerNotification; + +import petrinet.Network; +import petrinet.PetrinetFactory; +import petrinet.PetrinetPackage; + +/** + * This is the item provider adapter for a {@link petrinet.Network} object. + * + * + * @generated + */ +public class NetworkItemProvider + extends ItemProviderAdapter + implements + IEditingDomainItemProvider, + IStructuredItemContentProvider, + ITreeItemContentProvider, + IItemLabelProvider, + IItemPropertySource { + /** + * This constructs an instance from a factory and a notifier. + * + * + * @generated + */ + public NetworkItemProvider(AdapterFactory adapterFactory) { + super(adapterFactory); + } + + /** + * This returns the property descriptors for the adapted class. + * + * + * @generated + */ + @Override + public List getPropertyDescriptors(Object object) { + if (itemPropertyDescriptors == null) { + super.getPropertyDescriptors(object); + + addNamePropertyDescriptor(object); + } + return itemPropertyDescriptors; + } + + /** + * This adds a property descriptor for the Name feature. + * + * + * @generated + */ + protected void addNamePropertyDescriptor(Object object) { + itemPropertyDescriptors.add + (createItemPropertyDescriptor + (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(), + getResourceLocator(), + getString("_UI_Network_name_feature"), + getString("_UI_PropertyDescriptor_description", "_UI_Network_name_feature", "_UI_Network_type"), + PetrinetPackage.Literals.NETWORK__NAME, + true, + false, + false, + ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, + null, + null)); + } + + /** + * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an + * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or + * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}. + * + * + * @generated + */ + @Override + public Collection getChildrenFeatures(Object object) { + if (childrenFeatures == null) { + super.getChildrenFeatures(object); + childrenFeatures.add(PetrinetPackage.Literals.NETWORK__NODES); + } + return childrenFeatures; + } + + /** + * + * + * @generated + */ + @Override + protected EStructuralFeature getChildFeature(Object object, Object child) { + // Check the type of the specified child object and return the proper feature to use for + // adding (see {@link AddCommand}) it as a child. + + return super.getChildFeature(object, child); + } + + /** + * This returns Network.gif. + * + * + * @generated + */ + @Override + public Object getImage(Object object) { + return overlayImage(object, getResourceLocator().getImage("full/obj16/Network")); + } + + /** + * This returns the label text for the adapted class. + * + * + * @generated + */ + @Override + public String getText(Object object) { + String label = ((Network)object).getName(); + return label == null || label.length() == 0 ? + getString("_UI_Network_type") : + getString("_UI_Network_type") + " " + label; + } + + + /** + * This handles model notifications by calling {@link #updateChildren} to update any cached + * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}. + * + * + * @generated + */ + @Override + public void notifyChanged(Notification notification) { + updateChildren(notification); + + switch (notification.getFeatureID(Network.class)) { + case PetrinetPackage.NETWORK__NAME: + fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true)); + return; + case PetrinetPackage.NETWORK__NODES: + fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false)); + return; + } + super.notifyChanged(notification); + } + + /** + * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children + * that can be created under this object. + * + * + * @generated + */ + @Override + protected void collectNewChildDescriptors(Collection newChildDescriptors, Object object) { + super.collectNewChildDescriptors(newChildDescriptors, object); + + newChildDescriptors.add + (createChildParameter + (PetrinetPackage.Literals.NETWORK__NODES, + PetrinetFactory.eINSTANCE.createPlace())); + + newChildDescriptors.add + (createChildParameter + (PetrinetPackage.Literals.NETWORK__NODES, + PetrinetFactory.eINSTANCE.createTransition())); + } + + /** + * Return the resource locator for this item provider's resources. + * + * + * @generated + */ + @Override + public ResourceLocator getResourceLocator() { + return PetrinetEditPlugin.INSTANCE; + } + +} diff --git a/workspace/fr.n7.petrinet.edit/src/petrinet/provider/NodeItemProvider.java b/workspace/fr.n7.petrinet.edit/src/petrinet/provider/NodeItemProvider.java new file mode 100755 index 0000000..b8f95ba --- /dev/null +++ b/workspace/fr.n7.petrinet.edit/src/petrinet/provider/NodeItemProvider.java @@ -0,0 +1,147 @@ +/** + */ +package petrinet.provider; + + +import java.util.Collection; +import java.util.List; + +import org.eclipse.emf.common.notify.AdapterFactory; +import org.eclipse.emf.common.notify.Notification; + +import org.eclipse.emf.common.util.ResourceLocator; + +import org.eclipse.emf.edit.provider.ComposeableAdapterFactory; +import org.eclipse.emf.edit.provider.IEditingDomainItemProvider; +import org.eclipse.emf.edit.provider.IItemLabelProvider; +import org.eclipse.emf.edit.provider.IItemPropertyDescriptor; +import org.eclipse.emf.edit.provider.IItemPropertySource; +import org.eclipse.emf.edit.provider.IStructuredItemContentProvider; +import org.eclipse.emf.edit.provider.ITreeItemContentProvider; +import org.eclipse.emf.edit.provider.ItemPropertyDescriptor; +import org.eclipse.emf.edit.provider.ItemProviderAdapter; +import org.eclipse.emf.edit.provider.ViewerNotification; + +import petrinet.Node; +import petrinet.PetrinetPackage; + +/** + * This is the item provider adapter for a {@link petrinet.Node} object. + * + * + * @generated + */ +public class NodeItemProvider + extends ItemProviderAdapter + implements + IEditingDomainItemProvider, + IStructuredItemContentProvider, + ITreeItemContentProvider, + IItemLabelProvider, + IItemPropertySource { + /** + * This constructs an instance from a factory and a notifier. + * + * + * @generated + */ + public NodeItemProvider(AdapterFactory adapterFactory) { + super(adapterFactory); + } + + /** + * This returns the property descriptors for the adapted class. + * + * + * @generated + */ + @Override + public List getPropertyDescriptors(Object object) { + if (itemPropertyDescriptors == null) { + super.getPropertyDescriptors(object); + + addNamePropertyDescriptor(object); + } + return itemPropertyDescriptors; + } + + /** + * This adds a property descriptor for the Name feature. + * + * + * @generated + */ + protected void addNamePropertyDescriptor(Object object) { + itemPropertyDescriptors.add + (createItemPropertyDescriptor + (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(), + getResourceLocator(), + getString("_UI_Node_name_feature"), + getString("_UI_PropertyDescriptor_description", "_UI_Node_name_feature", "_UI_Node_type"), + PetrinetPackage.Literals.NODE__NAME, + true, + false, + false, + ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, + null, + null)); + } + + /** + * This returns the label text for the adapted class. + * + * + * @generated + */ + @Override + public String getText(Object object) { + String label = ((Node)object).getName(); + return label == null || label.length() == 0 ? + getString("_UI_Node_type") : + getString("_UI_Node_type") + " " + label; + } + + + /** + * This handles model notifications by calling {@link #updateChildren} to update any cached + * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}. + * + * + * @generated + */ + @Override + public void notifyChanged(Notification notification) { + updateChildren(notification); + + switch (notification.getFeatureID(Node.class)) { + case PetrinetPackage.NODE__NAME: + fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true)); + return; + } + super.notifyChanged(notification); + } + + /** + * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children + * that can be created under this object. + * + * + * @generated + */ + @Override + protected void collectNewChildDescriptors(Collection newChildDescriptors, Object object) { + super.collectNewChildDescriptors(newChildDescriptors, object); + } + + /** + * Return the resource locator for this item provider's resources. + * + * + * @generated + */ + @Override + public ResourceLocator getResourceLocator() { + return PetrinetEditPlugin.INSTANCE; + } + +} diff --git a/workspace/fr.n7.petrinet.edit/src/petrinet/provider/PetrinetEditPlugin.java b/workspace/fr.n7.petrinet.edit/src/petrinet/provider/PetrinetEditPlugin.java new file mode 100755 index 0000000..e093afa --- /dev/null +++ b/workspace/fr.n7.petrinet.edit/src/petrinet/provider/PetrinetEditPlugin.java @@ -0,0 +1,89 @@ +/** + */ +package petrinet.provider; + +import org.eclipse.emf.common.EMFPlugin; + +import org.eclipse.emf.common.util.ResourceLocator; + +/** + * This is the central singleton for the Petrinet edit plugin. + * + * + * @generated + */ +public final class PetrinetEditPlugin extends EMFPlugin { + /** + * Keep track of the singleton. + * + * + * @generated + */ + public static final PetrinetEditPlugin INSTANCE = new PetrinetEditPlugin(); + + /** + * Keep track of the singleton. + * + * + * @generated + */ + private static Implementation plugin; + + /** + * Create the instance. + * + * + * @generated + */ + public PetrinetEditPlugin() { + super + (new ResourceLocator [] { + }); + } + + /** + * Returns the singleton instance of the Eclipse plugin. + * + * + * @return the singleton instance. + * @generated + */ + @Override + public ResourceLocator getPluginResourceLocator() { + return plugin; + } + + /** + * Returns the singleton instance of the Eclipse plugin. + * + * + * @return the singleton instance. + * @generated + */ + public static Implementation getPlugin() { + return plugin; + } + + /** + * The actual implementation of the Eclipse Plugin. + * + * + * @generated + */ + public static class Implementation extends EclipsePlugin { + /** + * Creates an instance. + * + * + * @generated + */ + public Implementation() { + super(); + + // Remember the static instance. + // + plugin = this; + } + } + +} diff --git a/workspace/fr.n7.petrinet.edit/src/petrinet/provider/PetrinetItemProviderAdapterFactory.java b/workspace/fr.n7.petrinet.edit/src/petrinet/provider/PetrinetItemProviderAdapterFactory.java new file mode 100755 index 0000000..349dbe1 --- /dev/null +++ b/workspace/fr.n7.petrinet.edit/src/petrinet/provider/PetrinetItemProviderAdapterFactory.java @@ -0,0 +1,271 @@ +/** + */ +package petrinet.provider; + +import java.util.ArrayList; +import java.util.Collection; + +import org.eclipse.emf.common.notify.Adapter; +import org.eclipse.emf.common.notify.Notification; +import org.eclipse.emf.common.notify.Notifier; + +import org.eclipse.emf.edit.provider.ChangeNotifier; +import org.eclipse.emf.edit.provider.ComposeableAdapterFactory; +import org.eclipse.emf.edit.provider.ComposedAdapterFactory; +import org.eclipse.emf.edit.provider.IChangeNotifier; +import org.eclipse.emf.edit.provider.IDisposable; +import org.eclipse.emf.edit.provider.IEditingDomainItemProvider; +import org.eclipse.emf.edit.provider.IItemLabelProvider; +import org.eclipse.emf.edit.provider.IItemPropertySource; +import org.eclipse.emf.edit.provider.INotifyChangedListener; +import org.eclipse.emf.edit.provider.IStructuredItemContentProvider; +import org.eclipse.emf.edit.provider.ITreeItemContentProvider; + +import petrinet.util.PetrinetAdapterFactory; + +/** + * This is the factory that is used to provide the interfaces needed to support Viewers. + * The adapters generated by this factory convert EMF adapter notifications into calls to {@link #fireNotifyChanged fireNotifyChanged}. + * The adapters also support Eclipse property sheets. + * Note that most of the adapters are shared among multiple instances. + * + * + * @generated + */ +public class PetrinetItemProviderAdapterFactory extends PetrinetAdapterFactory implements ComposeableAdapterFactory, IChangeNotifier, IDisposable { + /** + * This keeps track of the root adapter factory that delegates to this adapter factory. + * + * + * @generated + */ + protected ComposedAdapterFactory parentAdapterFactory; + + /** + * This is used to implement {@link org.eclipse.emf.edit.provider.IChangeNotifier}. + * + * + * @generated + */ + protected IChangeNotifier changeNotifier = new ChangeNotifier(); + + /** + * This keeps track of all the supported types checked by {@link #isFactoryForType isFactoryForType}. + * + * + * @generated + */ + protected Collection supportedTypes = new ArrayList(); + + /** + * This constructs an instance. + * + * + * @generated + */ + public PetrinetItemProviderAdapterFactory() { + supportedTypes.add(IEditingDomainItemProvider.class); + supportedTypes.add(IStructuredItemContentProvider.class); + supportedTypes.add(ITreeItemContentProvider.class); + supportedTypes.add(IItemLabelProvider.class); + supportedTypes.add(IItemPropertySource.class); + } + + /** + * This keeps track of the one adapter used for all {@link petrinet.Network} instances. + * + * + * @generated + */ + protected NetworkItemProvider networkItemProvider; + + /** + * This creates an adapter for a {@link petrinet.Network}. + * + * + * @generated + */ + @Override + public Adapter createNetworkAdapter() { + if (networkItemProvider == null) { + networkItemProvider = new NetworkItemProvider(this); + } + + return networkItemProvider; + } + + /** + * This keeps track of the one adapter used for all {@link petrinet.Place} instances. + * + * + * @generated + */ + protected PlaceItemProvider placeItemProvider; + + /** + * This creates an adapter for a {@link petrinet.Place}. + * + * + * @generated + */ + @Override + public Adapter createPlaceAdapter() { + if (placeItemProvider == null) { + placeItemProvider = new PlaceItemProvider(this); + } + + return placeItemProvider; + } + + /** + * This keeps track of the one adapter used for all {@link petrinet.Arc} instances. + * + * + * @generated + */ + protected ArcItemProvider arcItemProvider; + + /** + * This creates an adapter for a {@link petrinet.Arc}. + * + * + * @generated + */ + @Override + public Adapter createArcAdapter() { + if (arcItemProvider == null) { + arcItemProvider = new ArcItemProvider(this); + } + + return arcItemProvider; + } + + /** + * This keeps track of the one adapter used for all {@link petrinet.Transition} instances. + * + * + * @generated + */ + protected TransitionItemProvider transitionItemProvider; + + /** + * This creates an adapter for a {@link petrinet.Transition}. + * + * + * @generated + */ + @Override + public Adapter createTransitionAdapter() { + if (transitionItemProvider == null) { + transitionItemProvider = new TransitionItemProvider(this); + } + + return transitionItemProvider; + } + + /** + * This returns the root adapter factory that contains this factory. + * + * + * @generated + */ + public ComposeableAdapterFactory getRootAdapterFactory() { + return parentAdapterFactory == null ? this : parentAdapterFactory.getRootAdapterFactory(); + } + + /** + * This sets the composed adapter factory that contains this factory. + * + * + * @generated + */ + public void setParentAdapterFactory(ComposedAdapterFactory parentAdapterFactory) { + this.parentAdapterFactory = parentAdapterFactory; + } + + /** + * + * + * @generated + */ + @Override + public boolean isFactoryForType(Object type) { + return supportedTypes.contains(type) || super.isFactoryForType(type); + } + + /** + * This implementation substitutes the factory itself as the key for the adapter. + * + * + * @generated + */ + @Override + public Adapter adapt(Notifier notifier, Object type) { + return super.adapt(notifier, this); + } + + /** + * + * + * @generated + */ + @Override + public Object adapt(Object object, Object type) { + if (isFactoryForType(type)) { + Object adapter = super.adapt(object, type); + if (!(type instanceof Class) || (((Class)type).isInstance(adapter))) { + return adapter; + } + } + + return null; + } + + /** + * This adds a listener. + * + * + * @generated + */ + public void addListener(INotifyChangedListener notifyChangedListener) { + changeNotifier.addListener(notifyChangedListener); + } + + /** + * This removes a listener. + * + * + * @generated + */ + public void removeListener(INotifyChangedListener notifyChangedListener) { + changeNotifier.removeListener(notifyChangedListener); + } + + /** + * This delegates to {@link #changeNotifier} and to {@link #parentAdapterFactory}. + * + * + * @generated + */ + public void fireNotifyChanged(Notification notification) { + changeNotifier.fireNotifyChanged(notification); + + if (parentAdapterFactory != null) { + parentAdapterFactory.fireNotifyChanged(notification); + } + } + + /** + * This disposes all of the item providers created by this factory. + * + * + * @generated + */ + public void dispose() { + if (networkItemProvider != null) networkItemProvider.dispose(); + if (placeItemProvider != null) placeItemProvider.dispose(); + if (arcItemProvider != null) arcItemProvider.dispose(); + if (transitionItemProvider != null) transitionItemProvider.dispose(); + } + +} diff --git a/workspace/fr.n7.petrinet.edit/src/petrinet/provider/PlaceItemProvider.java b/workspace/fr.n7.petrinet.edit/src/petrinet/provider/PlaceItemProvider.java new file mode 100755 index 0000000..fe7c895 --- /dev/null +++ b/workspace/fr.n7.petrinet.edit/src/petrinet/provider/PlaceItemProvider.java @@ -0,0 +1,155 @@ +/** + */ +package petrinet.provider; + + +import java.util.Collection; +import java.util.List; + +import org.eclipse.emf.common.notify.AdapterFactory; +import org.eclipse.emf.common.notify.Notification; + +import org.eclipse.emf.edit.provider.ComposeableAdapterFactory; +import org.eclipse.emf.edit.provider.IItemPropertyDescriptor; +import org.eclipse.emf.edit.provider.ItemPropertyDescriptor; +import org.eclipse.emf.edit.provider.ViewerNotification; + +import petrinet.PetrinetPackage; +import petrinet.Place; + +/** + * This is the item provider adapter for a {@link petrinet.Place} object. + * + * + * @generated + */ +public class PlaceItemProvider extends NodeItemProvider { + /** + * This constructs an instance from a factory and a notifier. + * + * + * @generated + */ + public PlaceItemProvider(AdapterFactory adapterFactory) { + super(adapterFactory); + } + + /** + * This returns the property descriptors for the adapted class. + * + * + * @generated + */ + @Override + public List getPropertyDescriptors(Object object) { + if (itemPropertyDescriptors == null) { + super.getPropertyDescriptors(object); + + addTokensPropertyDescriptor(object); + addArcsPropertyDescriptor(object); + } + return itemPropertyDescriptors; + } + + /** + * This adds a property descriptor for the Tokens feature. + * + * + * @generated + */ + protected void addTokensPropertyDescriptor(Object object) { + itemPropertyDescriptors.add + (createItemPropertyDescriptor + (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(), + getResourceLocator(), + getString("_UI_Place_tokens_feature"), + getString("_UI_PropertyDescriptor_description", "_UI_Place_tokens_feature", "_UI_Place_type"), + PetrinetPackage.Literals.PLACE__TOKENS, + true, + false, + false, + ItemPropertyDescriptor.INTEGRAL_VALUE_IMAGE, + null, + null)); + } + + /** + * This adds a property descriptor for the Arcs feature. + * + * + * @generated + */ + protected void addArcsPropertyDescriptor(Object object) { + itemPropertyDescriptors.add + (createItemPropertyDescriptor + (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(), + getResourceLocator(), + getString("_UI_Place_arcs_feature"), + getString("_UI_PropertyDescriptor_description", "_UI_Place_arcs_feature", "_UI_Place_type"), + PetrinetPackage.Literals.PLACE__ARCS, + true, + false, + true, + null, + null, + null)); + } + + /** + * This returns Place.gif. + * + * + * @generated + */ + @Override + public Object getImage(Object object) { + return overlayImage(object, getResourceLocator().getImage("full/obj16/Place")); + } + + /** + * This returns the label text for the adapted class. + * + * + * @generated NOT + */ + @Override + public String getText(Object object) { + String label = ((Place)object).getName(); + return label == null || label.length() == 0 ? + getString("_UI_Place_type") : + getString("_UI_Place_type") + " " + label + " (" + ((Place)object).getTokens() +")"; + } + + + /** + * This handles model notifications by calling {@link #updateChildren} to update any cached + * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}. + * + * + * @generated + */ + @Override + public void notifyChanged(Notification notification) { + updateChildren(notification); + + switch (notification.getFeatureID(Place.class)) { + case PetrinetPackage.PLACE__TOKENS: + fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true)); + return; + } + super.notifyChanged(notification); + } + + /** + * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children + * that can be created under this object. + * + * + * @generated + */ + @Override + protected void collectNewChildDescriptors(Collection newChildDescriptors, Object object) { + super.collectNewChildDescriptors(newChildDescriptors, object); + } + +} diff --git a/workspace/fr.n7.petrinet.edit/src/petrinet/provider/TransitionItemProvider.java b/workspace/fr.n7.petrinet.edit/src/petrinet/provider/TransitionItemProvider.java new file mode 100755 index 0000000..e3d92ab --- /dev/null +++ b/workspace/fr.n7.petrinet.edit/src/petrinet/provider/TransitionItemProvider.java @@ -0,0 +1,145 @@ +/** + */ +package petrinet.provider; + + +import java.util.Collection; +import java.util.List; + +import org.eclipse.emf.common.notify.AdapterFactory; +import org.eclipse.emf.common.notify.Notification; + +import org.eclipse.emf.ecore.EStructuralFeature; + +import org.eclipse.emf.edit.provider.IItemPropertyDescriptor; +import org.eclipse.emf.edit.provider.ViewerNotification; + +import petrinet.PetrinetFactory; +import petrinet.PetrinetPackage; +import petrinet.Transition; + +/** + * This is the item provider adapter for a {@link petrinet.Transition} object. + * + * + * @generated + */ +public class TransitionItemProvider extends NodeItemProvider { + /** + * This constructs an instance from a factory and a notifier. + * + * + * @generated + */ + public TransitionItemProvider(AdapterFactory adapterFactory) { + super(adapterFactory); + } + + /** + * This returns the property descriptors for the adapted class. + * + * + * @generated + */ + @Override + public List getPropertyDescriptors(Object object) { + if (itemPropertyDescriptors == null) { + super.getPropertyDescriptors(object); + + } + return itemPropertyDescriptors; + } + + /** + * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an + * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or + * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}. + * + * + * @generated + */ + @Override + public Collection getChildrenFeatures(Object object) { + if (childrenFeatures == null) { + super.getChildrenFeatures(object); + childrenFeatures.add(PetrinetPackage.Literals.TRANSITION__ARCS); + } + return childrenFeatures; + } + + /** + * + * + * @generated + */ + @Override + protected EStructuralFeature getChildFeature(Object object, Object child) { + // Check the type of the specified child object and return the proper feature to use for + // adding (see {@link AddCommand}) it as a child. + + return super.getChildFeature(object, child); + } + + /** + * This returns Transition.gif. + * + * + * @generated + */ + @Override + public Object getImage(Object object) { + return overlayImage(object, getResourceLocator().getImage("full/obj16/Transition")); + } + + /** + * This returns the label text for the adapted class. + * + * + * @generated + */ + @Override + public String getText(Object object) { + String label = ((Transition)object).getName(); + return label == null || label.length() == 0 ? + getString("_UI_Transition_type") : + getString("_UI_Transition_type") + " " + label; + } + + + /** + * This handles model notifications by calling {@link #updateChildren} to update any cached + * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}. + * + * + * @generated + */ + @Override + public void notifyChanged(Notification notification) { + updateChildren(notification); + + switch (notification.getFeatureID(Transition.class)) { + case PetrinetPackage.TRANSITION__ARCS: + fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false)); + return; + } + super.notifyChanged(notification); + } + + /** + * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children + * that can be created under this object. + * + * + * @generated + */ + @Override + protected void collectNewChildDescriptors(Collection newChildDescriptors, Object object) { + super.collectNewChildDescriptors(newChildDescriptors, object); + + newChildDescriptors.add + (createChildParameter + (PetrinetPackage.Literals.TRANSITION__ARCS, + PetrinetFactory.eINSTANCE.createArc())); + } + +} diff --git a/workspace/fr.n7.petrinet.editor/.classpath b/workspace/fr.n7.petrinet.editor/.classpath new file mode 100755 index 0000000..c3ba59e --- /dev/null +++ b/workspace/fr.n7.petrinet.editor/.classpath @@ -0,0 +1,7 @@ + + + + + + + diff --git a/workspace/fr.n7.petrinet.editor/.project b/workspace/fr.n7.petrinet.editor/.project new file mode 100755 index 0000000..e7fc4ca --- /dev/null +++ b/workspace/fr.n7.petrinet.editor/.project @@ -0,0 +1,28 @@ + + + fr.n7.petrinet.editor + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.pde.PluginNature + + diff --git a/workspace/fr.n7.petrinet.editor/META-INF/MANIFEST.MF b/workspace/fr.n7.petrinet.editor/META-INF/MANIFEST.MF new file mode 100755 index 0000000..699b7e3 --- /dev/null +++ b/workspace/fr.n7.petrinet.editor/META-INF/MANIFEST.MF @@ -0,0 +1,19 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: %pluginName +Bundle-SymbolicName: fr.n7.petrinet.editor;singleton:=true +Automatic-Module-Name: fr.n7.petrinet.editor +Bundle-Version: 1.0.0.qualifier +Bundle-ClassPath: . +Bundle-Activator: petrinet.presentation.PetrinetEditorPlugin$Implementation +Bundle-Vendor: %providerName +Bundle-Localization: plugin +Bundle-RequiredExecutionEnvironment: J2SE-1.5 +Export-Package: petrinet.presentation +Require-Bundle: org.eclipse.core.runtime, + org.eclipse.core.resources;visibility:=reexport, + fr.n7.petrinet.edit;visibility:=reexport, + org.eclipse.emf.ecore.xmi;visibility:=reexport, + org.eclipse.emf.edit.ui;visibility:=reexport, + org.eclipse.ui.ide;visibility:=reexport +Bundle-ActivationPolicy: lazy diff --git a/workspace/fr.n7.petrinet.editor/bin/.gitignore b/workspace/fr.n7.petrinet.editor/bin/.gitignore new file mode 100644 index 0000000..79b56a6 --- /dev/null +++ b/workspace/fr.n7.petrinet.editor/bin/.gitignore @@ -0,0 +1 @@ +/petrinet/ diff --git a/workspace/fr.n7.petrinet.editor/build.properties b/workspace/fr.n7.petrinet.editor/build.properties new file mode 100755 index 0000000..5fb0771 --- /dev/null +++ b/workspace/fr.n7.petrinet.editor/build.properties @@ -0,0 +1,10 @@ +# + +bin.includes = .,\ + icons/,\ + META-INF/,\ + plugin.xml,\ + plugin.properties +jars.compile.order = . +source.. = src/ +output.. = bin diff --git a/workspace/fr.n7.petrinet.editor/icons/full/obj16/PetrinetModelFile.gif b/workspace/fr.n7.petrinet.editor/icons/full/obj16/PetrinetModelFile.gif new file mode 100755 index 0000000000000000000000000000000000000000..689b7281906a8495692dabb9df11ed27df1f312f GIT binary patch literal 346 zcmZ?wbhEHb6krfwxXQrL(9jScAHRS9{{Q#qA2@IT$YuD?z`*by$o~Hy%=!;v&rCZ5 zlyY!z*fPNuh&J@wt?6-C-tDxg!+CD2>+~kK=5pV??4Nv1r&d>FfuT(G3bB{1o?@9t=yrxz(Yq! z@r24Hjh2de7kFDVe@3jASy{;Rs>=GN=R_f`cDZK)OCtn#a`HDthiFE*{cwNSC?DA+ zuA;)r+QQo;?#fiq%FzpH0zKg&cH302j$)SP}Ki|cX!5RS8Z+KS# literal 0 HcmV?d00001 diff --git a/workspace/fr.n7.petrinet.editor/icons/full/wizban/NewPetrinet.gif b/workspace/fr.n7.petrinet.editor/icons/full/wizban/NewPetrinet.gif new file mode 100755 index 0000000000000000000000000000000000000000..e976e0776d200e1ce72d13ee80784885faff018e GIT binary patch literal 2462 zcmd6m`8OMg8ivzyXM`x-QPZJfTAHHK&QR5AsWql$w2Ic!kg?USY8f{w=)@9er5!BYj=!_Znuek4d&imtcp6{IRvvaUDGxu`>TnBsx>}7X% zcXj>C>iTB}dwftJ85GP)Wg9E&Uo1Q`ExocVy)s!W79PPzB9T^BR@Q#GH{duMzg$~5 z&K8cf56E*4D!ds|d^4oTJ+gnR_JBJ(A!VL-LF%xgS^N6JO!GM>#x^j7Y8w zN~sP_tqo6q9+6%b{X6whRzm`&={H=l~r8#~FPSy?ha8bVe|>I5xE~E|v-3Elo>TMUv%t`KDC1 ze)(S3mHXM2_cE_~=Uny9zUGUudGPNRSi68cTYs$MulcZ`0+%qnYZ%@w;+cCC(LIXb z5kvCWlP~p6sPKs|_f05=Cy@h^D??GWA*h;YG&MG>As*9&ENDwDrlX4K83ZPp)P*K> zW|wv6l=tM6cVj6m9EF7?zra#n;3zK&s$b&k`pOzPr40jRjRWKsUR4{vmN8829HDiM zH1)i0eL2=SAnf73eaROMjLr;>NruLyBa`#P6H>v{!W*$nEM1+FEYHk;n3k?AuYD@6 zV-u;bO8*_$I8fEjr*@6d`^I~CZ~Ok3=DeQajm-)~izAcohbQL7r)AQm4awr#(uYrr zD_aAvXND%`1fqpE(=y@A(!2Q&V(H41L@rzZS%`dAPpXZl1rAzCJt6M7@ zpSNf}TT{)Ov;7l&m2E90MdYG%LSa$?E*6^$Pe~&+HP_HvyLy@b(m&AN#jLL&;JVoZ z?`Ed?{eKK|Mo0PMlft?G-P-?MLH3OHegUAg3s6wfwr?zZnW}Wy@Lr(FvHh+fJx8M1 zsBUehx+nM*L0f^hTpg^9&P`qbxKeJ#qKO^r)e{8wa@zv5Nzr6WprFoqCvVoh!JQo} zPEdD;BDfn%;z4>i&8s8gT+$A7m0cZuSQ0!=kEHlx?DWZPimu@Mbbww`qA3!INmn~< zTjNv^B%r#|(MN!|5PNbUmvoNcff!P?Nc;<=byhMOn^)^feHI(yNxhHp{Q1PO8GZ*W zDtX&{>n@&h`}EnKXCIf}H~q@q)xw;OK)fu8-MQ>xNfRANIT6hUy z#Drk^P>_;d7A43Z zg#4&8$dK|R?{oR}@_nh*NRIr9 zwa)cV=El`ZD^H9up`JZt-q_*r6Gm-W=2u^6?!`qt@0frx>5c+d@G`paSOX6`k;=~(f%=eiO6 zce>Qs47lK}&Ihu54G_h&pniT={gdx_7>^i)L1-^b)6hOXROHcvk~_ppkuB$1lwaB+=VN z3VV;|sJLiRzE`z8qfQ1{YtpVgIZ|zZ!{E{>Am(x3!FI+g+rV`c_ry~bpDzuOX)DMR z!4)^h%s~D&r+^Vza|dxIc1BU7N^w#N@Z8f}Z{G-blloDHaIDa%_IygO)i>INCXU_( zHa0iZ)-=n6>!3A@v%94`ctB!jY=DVL^CW9o3JYx`i7alT-cqpJ3!fufxnLd zT$;G)C!o@suv(rs30Hs-k=YOMPOO8xaI&`2;W#e9r{d6&A!HRedrb*^Pkv{`^r`V8 z<)n*2OZr@9nu!K03t>VgF2EMdhvIp#4ImP2&G|9X+|lr&PPT(%)$?)u?$6N`EkpsV z*Me!=iVBS`^pUx2f$&xz6?HVEZq+t;UFQ_#?65Wqj&Z2)R?3&0@-!*m`H5~;0IanX zqg~TQ+ipaCy``{9nN;mnhRSrl4yPOkl3(w}jb2}i-laCfiYPSbkrk8UpBZ(ir1 zk4Jsy>Rhi9a@TFgEq5Q~qGmTB-S=B3VXxMw#`L4#Sh?SL&Y{^+|VoPe-jFVuOr^x+5bxUv>zH67At?-x4vG_G?%`60KPZXF~k_(td069 znzODiV?KK3`9?Y8B2)i3GIhHul + + + + + + + + + + + %_UI_PetrinetModelWizard_description + + + + + + + + + + + diff --git a/workspace/fr.n7.petrinet.editor/src/petrinet/presentation/PetrinetActionBarContributor.java b/workspace/fr.n7.petrinet.editor/src/petrinet/presentation/PetrinetActionBarContributor.java new file mode 100755 index 0000000..90027e3 --- /dev/null +++ b/workspace/fr.n7.petrinet.editor/src/petrinet/presentation/PetrinetActionBarContributor.java @@ -0,0 +1,424 @@ +/** + */ +package petrinet.presentation; + +import java.util.ArrayList; +import java.util.Collection; + +import org.eclipse.emf.common.ui.viewer.IViewerProvider; + +import org.eclipse.emf.edit.domain.EditingDomain; +import org.eclipse.emf.edit.domain.IEditingDomainProvider; + +import org.eclipse.emf.edit.ui.action.ControlAction; +import org.eclipse.emf.edit.ui.action.CreateChildAction; +import org.eclipse.emf.edit.ui.action.CreateSiblingAction; +import org.eclipse.emf.edit.ui.action.EditingDomainActionBarContributor; +import org.eclipse.emf.edit.ui.action.LoadResourceAction; +import org.eclipse.emf.edit.ui.action.ValidateAction; + +import org.eclipse.jface.action.Action; +import org.eclipse.jface.action.ActionContributionItem; +import org.eclipse.jface.action.IAction; +import org.eclipse.jface.action.IContributionItem; +import org.eclipse.jface.action.IContributionManager; +import org.eclipse.jface.action.IMenuListener; +import org.eclipse.jface.action.IMenuManager; +import org.eclipse.jface.action.IToolBarManager; +import org.eclipse.jface.action.MenuManager; +import org.eclipse.jface.action.Separator; +import org.eclipse.jface.action.SubContributionItem; + +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.ISelectionChangedListener; +import org.eclipse.jface.viewers.ISelectionProvider; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.jface.viewers.SelectionChangedEvent; +import org.eclipse.jface.viewers.Viewer; + +import org.eclipse.ui.IEditorPart; +import org.eclipse.ui.PartInitException; + +/** + * This is the action bar contributor for the Petrinet model editor. + * + * + * @generated + */ +public class PetrinetActionBarContributor + extends EditingDomainActionBarContributor + implements ISelectionChangedListener { + /** + * This keeps track of the active editor. + * + * + * @generated + */ + protected IEditorPart activeEditorPart; + + /** + * This keeps track of the current selection provider. + * + * + * @generated + */ + protected ISelectionProvider selectionProvider; + + /** + * This action opens the Properties view. + * + * + * @generated + */ + protected IAction showPropertiesViewAction = + new Action(PetrinetEditorPlugin.INSTANCE.getString("_UI_ShowPropertiesView_menu_item")) { + @Override + public void run() { + try { + getPage().showView("org.eclipse.ui.views.PropertySheet"); + } + catch (PartInitException exception) { + PetrinetEditorPlugin.INSTANCE.log(exception); + } + } + }; + + /** + * This action refreshes the viewer of the current editor if the editor + * implements {@link org.eclipse.emf.common.ui.viewer.IViewerProvider}. + * + * + * @generated + */ + protected IAction refreshViewerAction = + new Action(PetrinetEditorPlugin.INSTANCE.getString("_UI_RefreshViewer_menu_item")) { + @Override + public boolean isEnabled() { + return activeEditorPart instanceof IViewerProvider; + } + + @Override + public void run() { + if (activeEditorPart instanceof IViewerProvider) { + Viewer viewer = ((IViewerProvider)activeEditorPart).getViewer(); + if (viewer != null) { + viewer.refresh(); + } + } + } + }; + + /** + * This will contain one {@link org.eclipse.emf.edit.ui.action.CreateChildAction} corresponding to each descriptor + * generated for the current selection by the item provider. + * + * + * @generated + */ + protected Collection createChildActions; + + /** + * This is the menu manager into which menu contribution items should be added for CreateChild actions. + * + * + * @generated + */ + protected IMenuManager createChildMenuManager; + + /** + * This will contain one {@link org.eclipse.emf.edit.ui.action.CreateSiblingAction} corresponding to each descriptor + * generated for the current selection by the item provider. + * + * + * @generated + */ + protected Collection createSiblingActions; + + /** + * This is the menu manager into which menu contribution items should be added for CreateSibling actions. + * + * + * @generated + */ + protected IMenuManager createSiblingMenuManager; + + /** + * This creates an instance of the contributor. + * + * + * @generated + */ + public PetrinetActionBarContributor() { + super(ADDITIONS_LAST_STYLE); + loadResourceAction = new LoadResourceAction(); + validateAction = new ValidateAction(); + controlAction = new ControlAction(); + } + + /** + * This adds Separators for editor additions to the tool bar. + * + * + * @generated + */ + @Override + public void contributeToToolBar(IToolBarManager toolBarManager) { + super.contributeToToolBar(toolBarManager); + toolBarManager.add(new Separator("petrinet-settings")); + toolBarManager.add(new Separator("petrinet-additions")); + } + + /** + * This adds to the menu bar a menu and some separators for editor additions, + * as well as the sub-menus for object creation items. + * + * + * @generated + */ + @Override + public void contributeToMenu(IMenuManager menuManager) { + super.contributeToMenu(menuManager); + + IMenuManager submenuManager = new MenuManager(PetrinetEditorPlugin.INSTANCE.getString("_UI_PetrinetEditor_menu"), "petrinetMenuID"); + menuManager.insertAfter("additions", submenuManager); + submenuManager.add(new Separator("settings")); + submenuManager.add(new Separator("actions")); + submenuManager.add(new Separator("additions")); + submenuManager.add(new Separator("additions-end")); + + // Prepare for CreateChild item addition or removal. + // + createChildMenuManager = new MenuManager(PetrinetEditorPlugin.INSTANCE.getString("_UI_CreateChild_menu_item")); + submenuManager.insertBefore("additions", createChildMenuManager); + + // Prepare for CreateSibling item addition or removal. + // + createSiblingMenuManager = new MenuManager(PetrinetEditorPlugin.INSTANCE.getString("_UI_CreateSibling_menu_item")); + submenuManager.insertBefore("additions", createSiblingMenuManager); + + // Force an update because Eclipse hides empty menus now. + // + submenuManager.addMenuListener + (new IMenuListener() { + public void menuAboutToShow(IMenuManager menuManager) { + menuManager.updateAll(true); + } + }); + + addGlobalActions(submenuManager); + } + + /** + * When the active editor changes, this remembers the change and registers with it as a selection provider. + * + * + * @generated + */ + @Override + public void setActiveEditor(IEditorPart part) { + super.setActiveEditor(part); + activeEditorPart = part; + + // Switch to the new selection provider. + // + if (selectionProvider != null) { + selectionProvider.removeSelectionChangedListener(this); + } + if (part == null) { + selectionProvider = null; + } + else { + selectionProvider = part.getSite().getSelectionProvider(); + selectionProvider.addSelectionChangedListener(this); + + // Fake a selection changed event to update the menus. + // + if (selectionProvider.getSelection() != null) { + selectionChanged(new SelectionChangedEvent(selectionProvider, selectionProvider.getSelection())); + } + } + } + + /** + * This implements {@link org.eclipse.jface.viewers.ISelectionChangedListener}, + * handling {@link org.eclipse.jface.viewers.SelectionChangedEvent}s by querying for the children and siblings + * that can be added to the selected object and updating the menus accordingly. + * + * + * @generated + */ + public void selectionChanged(SelectionChangedEvent event) { + // Remove any menu items for old selection. + // + if (createChildMenuManager != null) { + depopulateManager(createChildMenuManager, createChildActions); + } + if (createSiblingMenuManager != null) { + depopulateManager(createSiblingMenuManager, createSiblingActions); + } + + // Query the new selection for appropriate new child/sibling descriptors + // + Collection newChildDescriptors = null; + Collection newSiblingDescriptors = null; + + ISelection selection = event.getSelection(); + if (selection instanceof IStructuredSelection && ((IStructuredSelection)selection).size() == 1) { + Object object = ((IStructuredSelection)selection).getFirstElement(); + + EditingDomain domain = ((IEditingDomainProvider)activeEditorPart).getEditingDomain(); + + newChildDescriptors = domain.getNewChildDescriptors(object, null); + newSiblingDescriptors = domain.getNewChildDescriptors(null, object); + } + + // Generate actions for selection; populate and redraw the menus. + // + createChildActions = generateCreateChildActions(newChildDescriptors, selection); + createSiblingActions = generateCreateSiblingActions(newSiblingDescriptors, selection); + + if (createChildMenuManager != null) { + populateManager(createChildMenuManager, createChildActions, null); + createChildMenuManager.update(true); + } + if (createSiblingMenuManager != null) { + populateManager(createSiblingMenuManager, createSiblingActions, null); + createSiblingMenuManager.update(true); + } + } + + /** + * This generates a {@link org.eclipse.emf.edit.ui.action.CreateChildAction} for each object in descriptors, + * and returns the collection of these actions. + * + * + * @generated + */ + protected Collection generateCreateChildActions(Collection descriptors, ISelection selection) { + Collection actions = new ArrayList(); + if (descriptors != null) { + for (Object descriptor : descriptors) { + actions.add(new CreateChildAction(activeEditorPart, selection, descriptor)); + } + } + return actions; + } + + /** + * This generates a {@link org.eclipse.emf.edit.ui.action.CreateSiblingAction} for each object in descriptors, + * and returns the collection of these actions. + * + * + * @generated + */ + protected Collection generateCreateSiblingActions(Collection descriptors, ISelection selection) { + Collection actions = new ArrayList(); + if (descriptors != null) { + for (Object descriptor : descriptors) { + actions.add(new CreateSiblingAction(activeEditorPart, selection, descriptor)); + } + } + return actions; + } + + /** + * This populates the specified manager with {@link org.eclipse.jface.action.ActionContributionItem}s + * based on the {@link org.eclipse.jface.action.IAction}s contained in the actions collection, + * by inserting them before the specified contribution item contributionID. + * If contributionID is null, they are simply added. + * + * + * @generated + */ + protected void populateManager(IContributionManager manager, Collection actions, String contributionID) { + if (actions != null) { + for (IAction action : actions) { + if (contributionID != null) { + manager.insertBefore(contributionID, action); + } + else { + manager.add(action); + } + } + } + } + + /** + * This removes from the specified manager all {@link org.eclipse.jface.action.ActionContributionItem}s + * based on the {@link org.eclipse.jface.action.IAction}s contained in the actions collection. + * + * + * @generated + */ + protected void depopulateManager(IContributionManager manager, Collection actions) { + if (actions != null) { + IContributionItem[] items = manager.getItems(); + for (int i = 0; i < items.length; i++) { + // Look into SubContributionItems + // + IContributionItem contributionItem = items[i]; + while (contributionItem instanceof SubContributionItem) { + contributionItem = ((SubContributionItem)contributionItem).getInnerItem(); + } + + // Delete the ActionContributionItems with matching action. + // + if (contributionItem instanceof ActionContributionItem) { + IAction action = ((ActionContributionItem)contributionItem).getAction(); + if (actions.contains(action)) { + manager.remove(contributionItem); + } + } + } + } + } + + /** + * This populates the pop-up menu before it appears. + * + * + * @generated + */ + @Override + public void menuAboutToShow(IMenuManager menuManager) { + super.menuAboutToShow(menuManager); + MenuManager submenuManager = null; + + submenuManager = new MenuManager(PetrinetEditorPlugin.INSTANCE.getString("_UI_CreateChild_menu_item")); + populateManager(submenuManager, createChildActions, null); + menuManager.insertBefore("edit", submenuManager); + + submenuManager = new MenuManager(PetrinetEditorPlugin.INSTANCE.getString("_UI_CreateSibling_menu_item")); + populateManager(submenuManager, createSiblingActions, null); + menuManager.insertBefore("edit", submenuManager); + } + + /** + * This inserts global actions before the "additions-end" separator. + * + * + * @generated + */ + @Override + protected void addGlobalActions(IMenuManager menuManager) { + menuManager.insertAfter("additions-end", new Separator("ui-actions")); + menuManager.insertAfter("ui-actions", showPropertiesViewAction); + + refreshViewerAction.setEnabled(refreshViewerAction.isEnabled()); + menuManager.insertAfter("ui-actions", refreshViewerAction); + + super.addGlobalActions(menuManager); + } + + /** + * This ensures that a delete action will clean up all references to deleted objects. + * + * + * @generated + */ + @Override + protected boolean removeAllReferencesOnDelete() { + return true; + } + +} diff --git a/workspace/fr.n7.petrinet.editor/src/petrinet/presentation/PetrinetEditor.java b/workspace/fr.n7.petrinet.editor/src/petrinet/presentation/PetrinetEditor.java new file mode 100755 index 0000000..c209d42 --- /dev/null +++ b/workspace/fr.n7.petrinet.editor/src/petrinet/presentation/PetrinetEditor.java @@ -0,0 +1,1823 @@ +/** + */ +package petrinet.presentation; + + +import java.io.IOException; +import java.io.InputStream; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.EventObject; +import java.util.HashMap; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +import org.eclipse.core.resources.IFile; +import org.eclipse.core.resources.IMarker; +import org.eclipse.core.resources.IResource; +import org.eclipse.core.resources.IResourceChangeEvent; +import org.eclipse.core.resources.IResourceChangeListener; +import org.eclipse.core.resources.IResourceDelta; +import org.eclipse.core.resources.IResourceDeltaVisitor; +import org.eclipse.core.resources.ResourcesPlugin; + +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IPath; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.NullProgressMonitor; + +import org.eclipse.jface.action.IMenuListener; +import org.eclipse.jface.action.IMenuManager; +import org.eclipse.jface.action.IStatusLineManager; +import org.eclipse.jface.action.IToolBarManager; +import org.eclipse.jface.action.MenuManager; +import org.eclipse.jface.action.Separator; + +import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.jface.dialogs.ProgressMonitorDialog; + +import org.eclipse.jface.util.LocalSelectionTransfer; + +import org.eclipse.jface.viewers.ColumnWeightData; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.ISelectionChangedListener; +import org.eclipse.jface.viewers.ISelectionProvider; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.jface.viewers.ListViewer; +import org.eclipse.jface.viewers.SelectionChangedEvent; +import org.eclipse.jface.viewers.StructuredSelection; +import org.eclipse.jface.viewers.StructuredViewer; +import org.eclipse.jface.viewers.TableLayout; +import org.eclipse.jface.viewers.TableViewer; +import org.eclipse.jface.viewers.TreeViewer; +import org.eclipse.jface.viewers.Viewer; + +import org.eclipse.swt.SWT; + +import org.eclipse.swt.custom.CTabFolder; + +import org.eclipse.swt.dnd.DND; +import org.eclipse.swt.dnd.FileTransfer; +import org.eclipse.swt.dnd.Transfer; + +import org.eclipse.swt.events.ControlAdapter; +import org.eclipse.swt.events.ControlEvent; + +import org.eclipse.swt.graphics.Point; +import org.eclipse.swt.graphics.Rectangle; + +import org.eclipse.swt.layout.FillLayout; + +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Menu; +import org.eclipse.swt.widgets.Table; +import org.eclipse.swt.widgets.TableColumn; +import org.eclipse.swt.widgets.Tree; +import org.eclipse.swt.widgets.TreeColumn; + +import org.eclipse.ui.IActionBars; +import org.eclipse.ui.IEditorInput; +import org.eclipse.ui.IEditorPart; +import org.eclipse.ui.IEditorSite; +import org.eclipse.ui.IPartListener; +import org.eclipse.ui.IWorkbenchPart; +import org.eclipse.ui.PartInitException; + +import org.eclipse.ui.dialogs.SaveAsDialog; + +import org.eclipse.ui.ide.IGotoMarker; + +import org.eclipse.ui.part.FileEditorInput; +import org.eclipse.ui.part.MultiPageEditorPart; + +import org.eclipse.ui.views.contentoutline.ContentOutline; +import org.eclipse.ui.views.contentoutline.ContentOutlinePage; +import org.eclipse.ui.views.contentoutline.IContentOutlinePage; + +import org.eclipse.ui.views.properties.IPropertySheetPage; +import org.eclipse.ui.views.properties.PropertySheet; +import org.eclipse.ui.views.properties.PropertySheetPage; + +import org.eclipse.emf.common.command.BasicCommandStack; +import org.eclipse.emf.common.command.Command; +import org.eclipse.emf.common.command.CommandStack; +import org.eclipse.emf.common.command.CommandStackListener; + +import org.eclipse.emf.common.notify.AdapterFactory; +import org.eclipse.emf.common.notify.Notification; + +import org.eclipse.emf.common.ui.MarkerHelper; +import org.eclipse.emf.common.ui.ViewerPane; + +import org.eclipse.emf.common.ui.editor.ProblemEditorPart; + +import org.eclipse.emf.common.ui.viewer.IViewerProvider; + +import org.eclipse.emf.common.util.BasicDiagnostic; +import org.eclipse.emf.common.util.Diagnostic; +import org.eclipse.emf.common.util.URI; + + +import org.eclipse.emf.ecore.resource.Resource; +import org.eclipse.emf.ecore.resource.ResourceSet; + +import org.eclipse.emf.ecore.util.EContentAdapter; +import org.eclipse.emf.ecore.util.EcoreUtil; + +import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain; +import org.eclipse.emf.edit.domain.EditingDomain; +import org.eclipse.emf.edit.domain.IEditingDomainProvider; + +import org.eclipse.emf.edit.provider.AdapterFactoryItemDelegator; +import org.eclipse.emf.edit.provider.ComposedAdapterFactory; +import org.eclipse.emf.edit.provider.ReflectiveItemProviderAdapterFactory; + +import org.eclipse.emf.edit.provider.resource.ResourceItemProviderAdapterFactory; + +import org.eclipse.emf.edit.ui.action.EditingDomainActionBarContributor; + +import org.eclipse.emf.edit.ui.celleditor.AdapterFactoryTreeEditor; + +import org.eclipse.emf.edit.ui.dnd.EditingDomainViewerDropAdapter; +import org.eclipse.emf.edit.ui.dnd.LocalTransfer; +import org.eclipse.emf.edit.ui.dnd.ViewerDragAdapter; + +import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider; +import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider; +import org.eclipse.emf.edit.ui.provider.UnwrappingSelectionProvider; + +import org.eclipse.emf.edit.ui.util.EditUIMarkerHelper; +import org.eclipse.emf.edit.ui.util.EditUIUtil; + +import org.eclipse.emf.edit.ui.view.ExtendedPropertySheetPage; + +import petrinet.provider.PetrinetItemProviderAdapterFactory; + +import org.eclipse.ui.actions.WorkspaceModifyOperation; + + +/** + * This is an example of a Petrinet model editor. + * + * + * @generated + */ +public class PetrinetEditor + extends MultiPageEditorPart + implements IEditingDomainProvider, ISelectionProvider, IMenuListener, IViewerProvider, IGotoMarker { + /** + * This keeps track of the editing domain that is used to track all changes to the model. + * + * + * @generated + */ + protected AdapterFactoryEditingDomain editingDomain; + + /** + * This is the one adapter factory used for providing views of the model. + * + * + * @generated + */ + protected ComposedAdapterFactory adapterFactory; + + /** + * This is the content outline page. + * + * + * @generated + */ + protected IContentOutlinePage contentOutlinePage; + + /** + * This is a kludge... + * + * + * @generated + */ + protected IStatusLineManager contentOutlineStatusLineManager; + + /** + * This is the content outline page's viewer. + * + * + * @generated + */ + protected TreeViewer contentOutlineViewer; + + /** + * This is the property sheet page. + * + * + * @generated + */ + protected List propertySheetPages = new ArrayList(); + + /** + * This is the viewer that shadows the selection in the content outline. + * The parent relation must be correctly defined for this to work. + * + * + * @generated + */ + protected TreeViewer selectionViewer; + + /** + * This inverts the roll of parent and child in the content provider and show parents as a tree. + * + * + * @generated + */ + protected TreeViewer parentViewer; + + /** + * This shows how a tree view works. + * + * + * @generated + */ + protected TreeViewer treeViewer; + + /** + * This shows how a list view works. + * A list viewer doesn't support icons. + * + * + * @generated + */ + protected ListViewer listViewer; + + /** + * This shows how a table view works. + * A table can be used as a list with icons. + * + * + * @generated + */ + protected TableViewer tableViewer; + + /** + * This shows how a tree view with columns works. + * + * + * @generated + */ + protected TreeViewer treeViewerWithColumns; + + /** + * This keeps track of the active viewer pane, in the book. + * + * + * @generated + */ + protected ViewerPane currentViewerPane; + + /** + * This keeps track of the active content viewer, which may be either one of the viewers in the pages or the content outline viewer. + * + * + * @generated + */ + protected Viewer currentViewer; + + /** + * This listens to which ever viewer is active. + * + * + * @generated + */ + protected ISelectionChangedListener selectionChangedListener; + + /** + * This keeps track of all the {@link org.eclipse.jface.viewers.ISelectionChangedListener}s that are listening to this editor. + * + * + * @generated + */ + protected Collection selectionChangedListeners = new ArrayList(); + + /** + * This keeps track of the selection of the editor as a whole. + * + * + * @generated + */ + protected ISelection editorSelection = StructuredSelection.EMPTY; + + /** + * The MarkerHelper is responsible for creating workspace resource markers presented + * in Eclipse's Problems View. + * + * + * @generated + */ + protected MarkerHelper markerHelper = new EditUIMarkerHelper(); + + /** + * This listens for when the outline becomes active + * + * + * @generated + */ + protected IPartListener partListener = + new IPartListener() { + public void partActivated(IWorkbenchPart p) { + if (p instanceof ContentOutline) { + if (((ContentOutline)p).getCurrentPage() == contentOutlinePage) { + getActionBarContributor().setActiveEditor(PetrinetEditor.this); + + setCurrentViewer(contentOutlineViewer); + } + } + else if (p instanceof PropertySheet) { + if (propertySheetPages.contains(((PropertySheet)p).getCurrentPage())) { + getActionBarContributor().setActiveEditor(PetrinetEditor.this); + handleActivate(); + } + } + else if (p == PetrinetEditor.this) { + handleActivate(); + } + } + public void partBroughtToTop(IWorkbenchPart p) { + // Ignore. + } + public void partClosed(IWorkbenchPart p) { + // Ignore. + } + public void partDeactivated(IWorkbenchPart p) { + // Ignore. + } + public void partOpened(IWorkbenchPart p) { + // Ignore. + } + }; + + /** + * Resources that have been removed since last activation. + * + * + * @generated + */ + protected Collection removedResources = new ArrayList(); + + /** + * Resources that have been changed since last activation. + * + * + * @generated + */ + protected Collection changedResources = new ArrayList(); + + /** + * Resources that have been saved. + * + * + * @generated + */ + protected Collection savedResources = new ArrayList(); + + /** + * Map to store the diagnostic associated with a resource. + * + * + * @generated + */ + protected Map resourceToDiagnosticMap = new LinkedHashMap(); + + /** + * Controls whether the problem indication should be updated. + * + * + * @generated + */ + protected boolean updateProblemIndication = true; + + /** + * Adapter used to update the problem indication when resources are demanded loaded. + * + * + * @generated + */ + protected EContentAdapter problemIndicationAdapter = + new EContentAdapter() { + protected boolean dispatching; + + @Override + public void notifyChanged(Notification notification) { + if (notification.getNotifier() instanceof Resource) { + switch (notification.getFeatureID(Resource.class)) { + case Resource.RESOURCE__IS_LOADED: + case Resource.RESOURCE__ERRORS: + case Resource.RESOURCE__WARNINGS: { + Resource resource = (Resource)notification.getNotifier(); + Diagnostic diagnostic = analyzeResourceProblems(resource, null); + if (diagnostic.getSeverity() != Diagnostic.OK) { + resourceToDiagnosticMap.put(resource, diagnostic); + } + else { + resourceToDiagnosticMap.remove(resource); + } + dispatchUpdateProblemIndication(); + break; + } + } + } + else { + super.notifyChanged(notification); + } + } + + protected void dispatchUpdateProblemIndication() { + if (updateProblemIndication && !dispatching) { + dispatching = true; + getSite().getShell().getDisplay().asyncExec + (new Runnable() { + public void run() { + dispatching = false; + updateProblemIndication(); + } + }); + } + } + + @Override + protected void setTarget(Resource target) { + basicSetTarget(target); + } + + @Override + protected void unsetTarget(Resource target) { + basicUnsetTarget(target); + resourceToDiagnosticMap.remove(target); + dispatchUpdateProblemIndication(); + } + }; + + /** + * This listens for workspace changes. + * + * + * @generated + */ + protected IResourceChangeListener resourceChangeListener = + new IResourceChangeListener() { + public void resourceChanged(IResourceChangeEvent event) { + IResourceDelta delta = event.getDelta(); + try { + class ResourceDeltaVisitor implements IResourceDeltaVisitor { + protected ResourceSet resourceSet = editingDomain.getResourceSet(); + protected Collection changedResources = new ArrayList(); + protected Collection removedResources = new ArrayList(); + + public boolean visit(IResourceDelta delta) { + if (delta.getResource().getType() == IResource.FILE) { + if (delta.getKind() == IResourceDelta.REMOVED || + delta.getKind() == IResourceDelta.CHANGED && delta.getFlags() != IResourceDelta.MARKERS) { + Resource resource = resourceSet.getResource(URI.createPlatformResourceURI(delta.getFullPath().toString(), true), false); + if (resource != null) { + if (delta.getKind() == IResourceDelta.REMOVED) { + removedResources.add(resource); + } + else if (!savedResources.remove(resource)) { + changedResources.add(resource); + } + } + } + return false; + } + + return true; + } + + public Collection getChangedResources() { + return changedResources; + } + + public Collection getRemovedResources() { + return removedResources; + } + } + + final ResourceDeltaVisitor visitor = new ResourceDeltaVisitor(); + delta.accept(visitor); + + if (!visitor.getRemovedResources().isEmpty()) { + getSite().getShell().getDisplay().asyncExec + (new Runnable() { + public void run() { + removedResources.addAll(visitor.getRemovedResources()); + if (!isDirty()) { + getSite().getPage().closeEditor(PetrinetEditor.this, false); + } + } + }); + } + + if (!visitor.getChangedResources().isEmpty()) { + getSite().getShell().getDisplay().asyncExec + (new Runnable() { + public void run() { + changedResources.addAll(visitor.getChangedResources()); + if (getSite().getPage().getActiveEditor() == PetrinetEditor.this) { + handleActivate(); + } + } + }); + } + } + catch (CoreException exception) { + PetrinetEditorPlugin.INSTANCE.log(exception); + } + } + }; + + /** + * Handles activation of the editor or it's associated views. + * + * + * @generated + */ + protected void handleActivate() { + // Recompute the read only state. + // + if (editingDomain.getResourceToReadOnlyMap() != null) { + editingDomain.getResourceToReadOnlyMap().clear(); + + // Refresh any actions that may become enabled or disabled. + // + setSelection(getSelection()); + } + + if (!removedResources.isEmpty()) { + if (handleDirtyConflict()) { + getSite().getPage().closeEditor(PetrinetEditor.this, false); + } + else { + removedResources.clear(); + changedResources.clear(); + savedResources.clear(); + } + } + else if (!changedResources.isEmpty()) { + changedResources.removeAll(savedResources); + handleChangedResources(); + changedResources.clear(); + savedResources.clear(); + } + } + + /** + * Handles what to do with changed resources on activation. + * + * + * @generated + */ + protected void handleChangedResources() { + if (!changedResources.isEmpty() && (!isDirty() || handleDirtyConflict())) { + ResourceSet resourceSet = editingDomain.getResourceSet(); + if (isDirty()) { + changedResources.addAll(resourceSet.getResources()); + } + editingDomain.getCommandStack().flush(); + + updateProblemIndication = false; + for (Resource resource : changedResources) { + if (resource.isLoaded()) { + resource.unload(); + try { + resource.load(resourceSet.getLoadOptions()); + } + catch (IOException exception) { + if (!resourceToDiagnosticMap.containsKey(resource)) { + resourceToDiagnosticMap.put(resource, analyzeResourceProblems(resource, exception)); + } + } + } + } + + if (AdapterFactoryEditingDomain.isStale(editorSelection)) { + setSelection(StructuredSelection.EMPTY); + } + + updateProblemIndication = true; + updateProblemIndication(); + } + } + + /** + * Updates the problems indication with the information described in the specified diagnostic. + * + * + * @generated + */ + protected void updateProblemIndication() { + if (updateProblemIndication) { + BasicDiagnostic diagnostic = + new BasicDiagnostic + (Diagnostic.OK, + "fr.n7.petrinet.editor", + 0, + null, + new Object [] { editingDomain.getResourceSet() }); + for (Diagnostic childDiagnostic : resourceToDiagnosticMap.values()) { + if (childDiagnostic.getSeverity() != Diagnostic.OK) { + diagnostic.add(childDiagnostic); + } + } + + int lastEditorPage = getPageCount() - 1; + if (lastEditorPage >= 0 && getEditor(lastEditorPage) instanceof ProblemEditorPart) { + ((ProblemEditorPart)getEditor(lastEditorPage)).setDiagnostic(diagnostic); + if (diagnostic.getSeverity() != Diagnostic.OK) { + setActivePage(lastEditorPage); + } + } + else if (diagnostic.getSeverity() != Diagnostic.OK) { + ProblemEditorPart problemEditorPart = new ProblemEditorPart(); + problemEditorPart.setDiagnostic(diagnostic); + problemEditorPart.setMarkerHelper(markerHelper); + try { + addPage(++lastEditorPage, problemEditorPart, getEditorInput()); + setPageText(lastEditorPage, problemEditorPart.getPartName()); + setActivePage(lastEditorPage); + showTabs(); + } + catch (PartInitException exception) { + PetrinetEditorPlugin.INSTANCE.log(exception); + } + } + + if (markerHelper.hasMarkers(editingDomain.getResourceSet())) { + try { + markerHelper.updateMarkers(diagnostic); + } + catch (CoreException exception) { + PetrinetEditorPlugin.INSTANCE.log(exception); + } + } + } + } + + /** + * Shows a dialog that asks if conflicting changes should be discarded. + * + * + * @generated + */ + protected boolean handleDirtyConflict() { + return + MessageDialog.openQuestion + (getSite().getShell(), + getString("_UI_FileConflict_label"), + getString("_WARN_FileConflict")); + } + + /** + * This creates a model editor. + * + * + * @generated + */ + public PetrinetEditor() { + super(); + initializeEditingDomain(); + } + + /** + * This sets up the editing domain for the model editor. + * + * + * @generated + */ + protected void initializeEditingDomain() { + // Create an adapter factory that yields item providers. + // + adapterFactory = new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE); + + adapterFactory.addAdapterFactory(new ResourceItemProviderAdapterFactory()); + adapterFactory.addAdapterFactory(new PetrinetItemProviderAdapterFactory()); + adapterFactory.addAdapterFactory(new ReflectiveItemProviderAdapterFactory()); + + // Create the command stack that will notify this editor as commands are executed. + // + BasicCommandStack commandStack = new BasicCommandStack(); + + // Add a listener to set the most recent command's affected objects to be the selection of the viewer with focus. + // + commandStack.addCommandStackListener + (new CommandStackListener() { + public void commandStackChanged(final EventObject event) { + getContainer().getDisplay().asyncExec + (new Runnable() { + public void run() { + firePropertyChange(IEditorPart.PROP_DIRTY); + + // Try to select the affected objects. + // + Command mostRecentCommand = ((CommandStack)event.getSource()).getMostRecentCommand(); + if (mostRecentCommand != null) { + setSelectionToViewer(mostRecentCommand.getAffectedObjects()); + } + for (Iterator i = propertySheetPages.iterator(); i.hasNext(); ) { + PropertySheetPage propertySheetPage = i.next(); + if (propertySheetPage.getControl() == null || propertySheetPage.getControl().isDisposed()) { + i.remove(); + } + else { + propertySheetPage.refresh(); + } + } + } + }); + } + }); + + // Create the editing domain with a special command stack. + // + editingDomain = new AdapterFactoryEditingDomain(adapterFactory, commandStack, new HashMap()); + } + + /** + * This is here for the listener to be able to call it. + * + * + * @generated + */ + @Override + protected void firePropertyChange(int action) { + super.firePropertyChange(action); + } + + /** + * This sets the selection into whichever viewer is active. + * + * + * @generated + */ + public void setSelectionToViewer(Collection collection) { + final Collection theSelection = collection; + // Make sure it's okay. + // + if (theSelection != null && !theSelection.isEmpty()) { + Runnable runnable = + new Runnable() { + public void run() { + // Try to select the items in the current content viewer of the editor. + // + if (currentViewer != null) { + currentViewer.setSelection(new StructuredSelection(theSelection.toArray()), true); + } + } + }; + getSite().getShell().getDisplay().asyncExec(runnable); + } + } + + /** + * This returns the editing domain as required by the {@link IEditingDomainProvider} interface. + * This is important for implementing the static methods of {@link AdapterFactoryEditingDomain} + * and for supporting {@link org.eclipse.emf.edit.ui.action.CommandAction}. + * + * + * @generated + */ + public EditingDomain getEditingDomain() { + return editingDomain; + } + + /** + * + * + * @generated + */ + public class ReverseAdapterFactoryContentProvider extends AdapterFactoryContentProvider { + /** + * + * + * @generated + */ + public ReverseAdapterFactoryContentProvider(AdapterFactory adapterFactory) { + super(adapterFactory); + } + + /** + * + * + * @generated + */ + @Override + public Object [] getElements(Object object) { + Object parent = super.getParent(object); + return (parent == null ? Collections.EMPTY_SET : Collections.singleton(parent)).toArray(); + } + + /** + * + * + * @generated + */ + @Override + public Object [] getChildren(Object object) { + Object parent = super.getParent(object); + return (parent == null ? Collections.EMPTY_SET : Collections.singleton(parent)).toArray(); + } + + /** + * + * + * @generated + */ + @Override + public boolean hasChildren(Object object) { + Object parent = super.getParent(object); + return parent != null; + } + + /** + * + * + * @generated + */ + @Override + public Object getParent(Object object) { + return null; + } + } + + /** + * + * + * @generated + */ + public void setCurrentViewerPane(ViewerPane viewerPane) { + if (currentViewerPane != viewerPane) { + if (currentViewerPane != null) { + currentViewerPane.showFocus(false); + } + currentViewerPane = viewerPane; + } + setCurrentViewer(currentViewerPane.getViewer()); + } + + /** + * This makes sure that one content viewer, either for the current page or the outline view, if it has focus, + * is the current one. + * + * + * @generated + */ + public void setCurrentViewer(Viewer viewer) { + // If it is changing... + // + if (currentViewer != viewer) { + if (selectionChangedListener == null) { + // Create the listener on demand. + // + selectionChangedListener = + new ISelectionChangedListener() { + // This just notifies those things that are affected by the section. + // + public void selectionChanged(SelectionChangedEvent selectionChangedEvent) { + setSelection(selectionChangedEvent.getSelection()); + } + }; + } + + // Stop listening to the old one. + // + if (currentViewer != null) { + currentViewer.removeSelectionChangedListener(selectionChangedListener); + } + + // Start listening to the new one. + // + if (viewer != null) { + viewer.addSelectionChangedListener(selectionChangedListener); + } + + // Remember it. + // + currentViewer = viewer; + + // Set the editors selection based on the current viewer's selection. + // + setSelection(currentViewer == null ? StructuredSelection.EMPTY : currentViewer.getSelection()); + } + } + + /** + * This returns the viewer as required by the {@link IViewerProvider} interface. + * + * + * @generated + */ + public Viewer getViewer() { + return currentViewer; + } + + /** + * This creates a context menu for the viewer and adds a listener as well registering the menu for extension. + * + * + * @generated + */ + protected void createContextMenuFor(StructuredViewer viewer) { + MenuManager contextMenu = new MenuManager("#PopUp"); + contextMenu.add(new Separator("additions")); + contextMenu.setRemoveAllWhenShown(true); + contextMenu.addMenuListener(this); + Menu menu= contextMenu.createContextMenu(viewer.getControl()); + viewer.getControl().setMenu(menu); + getSite().registerContextMenu(contextMenu, new UnwrappingSelectionProvider(viewer)); + + int dndOperations = DND.DROP_COPY | DND.DROP_MOVE | DND.DROP_LINK; + Transfer[] transfers = new Transfer[] { LocalTransfer.getInstance(), LocalSelectionTransfer.getTransfer(), FileTransfer.getInstance() }; + viewer.addDragSupport(dndOperations, transfers, new ViewerDragAdapter(viewer)); + viewer.addDropSupport(dndOperations, transfers, new EditingDomainViewerDropAdapter(editingDomain, viewer)); + } + + /** + * This is the method called to load a resource into the editing domain's resource set based on the editor's input. + * + * + * @generated + */ + public void createModel() { + URI resourceURI = EditUIUtil.getURI(getEditorInput(), editingDomain.getResourceSet().getURIConverter()); + Exception exception = null; + Resource resource = null; + try { + // Load the resource through the editing domain. + // + resource = editingDomain.getResourceSet().getResource(resourceURI, true); + } + catch (Exception e) { + exception = e; + resource = editingDomain.getResourceSet().getResource(resourceURI, false); + } + + Diagnostic diagnostic = analyzeResourceProblems(resource, exception); + if (diagnostic.getSeverity() != Diagnostic.OK) { + resourceToDiagnosticMap.put(resource, analyzeResourceProblems(resource, exception)); + } + editingDomain.getResourceSet().eAdapters().add(problemIndicationAdapter); + } + + /** + * Returns a diagnostic describing the errors and warnings listed in the resource + * and the specified exception (if any). + * + * + * @generated + */ + public Diagnostic analyzeResourceProblems(Resource resource, Exception exception) { + boolean hasErrors = !resource.getErrors().isEmpty(); + if (hasErrors || !resource.getWarnings().isEmpty()) { + BasicDiagnostic basicDiagnostic = + new BasicDiagnostic + (hasErrors ? Diagnostic.ERROR : Diagnostic.WARNING, + "fr.n7.petrinet.editor", + 0, + getString("_UI_CreateModelError_message", resource.getURI()), + new Object [] { exception == null ? (Object)resource : exception }); + basicDiagnostic.merge(EcoreUtil.computeDiagnostic(resource, true)); + return basicDiagnostic; + } + else if (exception != null) { + return + new BasicDiagnostic + (Diagnostic.ERROR, + "fr.n7.petrinet.editor", + 0, + getString("_UI_CreateModelError_message", resource.getURI()), + new Object[] { exception }); + } + else { + return Diagnostic.OK_INSTANCE; + } + } + + /** + * This is the method used by the framework to install your own controls. + * + * + * @generated + */ + @Override + public void createPages() { + // Creates the model from the editor input + // + createModel(); + + // Only creates the other pages if there is something that can be edited + // + if (!getEditingDomain().getResourceSet().getResources().isEmpty()) { + // Create a page for the selection tree view. + // + { + ViewerPane viewerPane = + new ViewerPane(getSite().getPage(), PetrinetEditor.this) { + @Override + public Viewer createViewer(Composite composite) { + Tree tree = new Tree(composite, SWT.MULTI); + TreeViewer newTreeViewer = new TreeViewer(tree); + return newTreeViewer; + } + @Override + public void requestActivation() { + super.requestActivation(); + setCurrentViewerPane(this); + } + }; + viewerPane.createControl(getContainer()); + + selectionViewer = (TreeViewer)viewerPane.getViewer(); + selectionViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory)); + selectionViewer.setUseHashlookup(true); + + selectionViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory)); + selectionViewer.setInput(editingDomain.getResourceSet()); + selectionViewer.setSelection(new StructuredSelection(editingDomain.getResourceSet().getResources().get(0)), true); + viewerPane.setTitle(editingDomain.getResourceSet()); + + new AdapterFactoryTreeEditor(selectionViewer.getTree(), adapterFactory); + + createContextMenuFor(selectionViewer); + int pageIndex = addPage(viewerPane.getControl()); + setPageText(pageIndex, getString("_UI_SelectionPage_label")); + } + + // Create a page for the parent tree view. + // + { + ViewerPane viewerPane = + new ViewerPane(getSite().getPage(), PetrinetEditor.this) { + @Override + public Viewer createViewer(Composite composite) { + Tree tree = new Tree(composite, SWT.MULTI); + TreeViewer newTreeViewer = new TreeViewer(tree); + return newTreeViewer; + } + @Override + public void requestActivation() { + super.requestActivation(); + setCurrentViewerPane(this); + } + }; + viewerPane.createControl(getContainer()); + + parentViewer = (TreeViewer)viewerPane.getViewer(); + parentViewer.setAutoExpandLevel(30); + parentViewer.setContentProvider(new ReverseAdapterFactoryContentProvider(adapterFactory)); + parentViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory)); + + createContextMenuFor(parentViewer); + int pageIndex = addPage(viewerPane.getControl()); + setPageText(pageIndex, getString("_UI_ParentPage_label")); + } + + // This is the page for the list viewer + // + { + ViewerPane viewerPane = + new ViewerPane(getSite().getPage(), PetrinetEditor.this) { + @Override + public Viewer createViewer(Composite composite) { + return new ListViewer(composite); + } + @Override + public void requestActivation() { + super.requestActivation(); + setCurrentViewerPane(this); + } + }; + viewerPane.createControl(getContainer()); + listViewer = (ListViewer)viewerPane.getViewer(); + listViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory)); + listViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory)); + + createContextMenuFor(listViewer); + int pageIndex = addPage(viewerPane.getControl()); + setPageText(pageIndex, getString("_UI_ListPage_label")); + } + + // This is the page for the tree viewer + // + { + ViewerPane viewerPane = + new ViewerPane(getSite().getPage(), PetrinetEditor.this) { + @Override + public Viewer createViewer(Composite composite) { + return new TreeViewer(composite); + } + @Override + public void requestActivation() { + super.requestActivation(); + setCurrentViewerPane(this); + } + }; + viewerPane.createControl(getContainer()); + treeViewer = (TreeViewer)viewerPane.getViewer(); + treeViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory)); + treeViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory)); + + new AdapterFactoryTreeEditor(treeViewer.getTree(), adapterFactory); + + createContextMenuFor(treeViewer); + int pageIndex = addPage(viewerPane.getControl()); + setPageText(pageIndex, getString("_UI_TreePage_label")); + } + + // This is the page for the table viewer. + // + { + ViewerPane viewerPane = + new ViewerPane(getSite().getPage(), PetrinetEditor.this) { + @Override + public Viewer createViewer(Composite composite) { + return new TableViewer(composite); + } + @Override + public void requestActivation() { + super.requestActivation(); + setCurrentViewerPane(this); + } + }; + viewerPane.createControl(getContainer()); + tableViewer = (TableViewer)viewerPane.getViewer(); + + Table table = tableViewer.getTable(); + TableLayout layout = new TableLayout(); + table.setLayout(layout); + table.setHeaderVisible(true); + table.setLinesVisible(true); + + TableColumn objectColumn = new TableColumn(table, SWT.NONE); + layout.addColumnData(new ColumnWeightData(3, 100, true)); + objectColumn.setText(getString("_UI_ObjectColumn_label")); + objectColumn.setResizable(true); + + TableColumn selfColumn = new TableColumn(table, SWT.NONE); + layout.addColumnData(new ColumnWeightData(2, 100, true)); + selfColumn.setText(getString("_UI_SelfColumn_label")); + selfColumn.setResizable(true); + + tableViewer.setColumnProperties(new String [] {"a", "b"}); + tableViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory)); + tableViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory)); + + createContextMenuFor(tableViewer); + int pageIndex = addPage(viewerPane.getControl()); + setPageText(pageIndex, getString("_UI_TablePage_label")); + } + + // This is the page for the table tree viewer. + // + { + ViewerPane viewerPane = + new ViewerPane(getSite().getPage(), PetrinetEditor.this) { + @Override + public Viewer createViewer(Composite composite) { + return new TreeViewer(composite); + } + @Override + public void requestActivation() { + super.requestActivation(); + setCurrentViewerPane(this); + } + }; + viewerPane.createControl(getContainer()); + + treeViewerWithColumns = (TreeViewer)viewerPane.getViewer(); + + Tree tree = treeViewerWithColumns.getTree(); + tree.setLayoutData(new FillLayout()); + tree.setHeaderVisible(true); + tree.setLinesVisible(true); + + TreeColumn objectColumn = new TreeColumn(tree, SWT.NONE); + objectColumn.setText(getString("_UI_ObjectColumn_label")); + objectColumn.setResizable(true); + objectColumn.setWidth(250); + + TreeColumn selfColumn = new TreeColumn(tree, SWT.NONE); + selfColumn.setText(getString("_UI_SelfColumn_label")); + selfColumn.setResizable(true); + selfColumn.setWidth(200); + + treeViewerWithColumns.setColumnProperties(new String [] {"a", "b"}); + treeViewerWithColumns.setContentProvider(new AdapterFactoryContentProvider(adapterFactory)); + treeViewerWithColumns.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory)); + + createContextMenuFor(treeViewerWithColumns); + int pageIndex = addPage(viewerPane.getControl()); + setPageText(pageIndex, getString("_UI_TreeWithColumnsPage_label")); + } + + getSite().getShell().getDisplay().asyncExec + (new Runnable() { + public void run() { + if (!getContainer().isDisposed()) { + setActivePage(0); + } + } + }); + } + + // Ensures that this editor will only display the page's tab + // area if there are more than one page + // + getContainer().addControlListener + (new ControlAdapter() { + boolean guard = false; + @Override + public void controlResized(ControlEvent event) { + if (!guard) { + guard = true; + hideTabs(); + guard = false; + } + } + }); + + getSite().getShell().getDisplay().asyncExec + (new Runnable() { + public void run() { + updateProblemIndication(); + } + }); + } + + /** + * If there is just one page in the multi-page editor part, + * this hides the single tab at the bottom. + * + * + * @generated + */ + protected void hideTabs() { + if (getPageCount() <= 1) { + setPageText(0, ""); + if (getContainer() instanceof CTabFolder) { + Point point = getContainer().getSize(); + Rectangle clientArea = getContainer().getClientArea(); + getContainer().setSize(point.x, 2 * point.y - clientArea.height - clientArea.y); + } + } + } + + /** + * If there is more than one page in the multi-page editor part, + * this shows the tabs at the bottom. + * + * + * @generated + */ + protected void showTabs() { + if (getPageCount() > 1) { + setPageText(0, getString("_UI_SelectionPage_label")); + if (getContainer() instanceof CTabFolder) { + Point point = getContainer().getSize(); + Rectangle clientArea = getContainer().getClientArea(); + getContainer().setSize(point.x, clientArea.height + clientArea.y); + } + } + } + + /** + * This is used to track the active viewer. + * + * + * @generated + */ + @Override + protected void pageChange(int pageIndex) { + super.pageChange(pageIndex); + + if (contentOutlinePage != null) { + handleContentOutlineSelection(contentOutlinePage.getSelection()); + } + } + + /** + * This is how the framework determines which interfaces we implement. + * + * + * @generated + */ + @Override + public T getAdapter(Class key) { + if (key.equals(IContentOutlinePage.class)) { + return showOutlineView() ? key.cast(getContentOutlinePage()) : null; + } + else if (key.equals(IPropertySheetPage.class)) { + return key.cast(getPropertySheetPage()); + } + else if (key.equals(IGotoMarker.class)) { + return key.cast(this); + } + else { + return super.getAdapter(key); + } + } + + /** + * This accesses a cached version of the content outliner. + * + * + * @generated + */ + public IContentOutlinePage getContentOutlinePage() { + if (contentOutlinePage == null) { + // The content outline is just a tree. + // + class MyContentOutlinePage extends ContentOutlinePage { + @Override + public void createControl(Composite parent) { + super.createControl(parent); + contentOutlineViewer = getTreeViewer(); + contentOutlineViewer.addSelectionChangedListener(this); + + // Set up the tree viewer. + // + contentOutlineViewer.setUseHashlookup(true); + contentOutlineViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory)); + contentOutlineViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory)); + contentOutlineViewer.setInput(editingDomain.getResourceSet()); + + // Make sure our popups work. + // + createContextMenuFor(contentOutlineViewer); + + if (!editingDomain.getResourceSet().getResources().isEmpty()) { + // Select the root object in the view. + // + contentOutlineViewer.setSelection(new StructuredSelection(editingDomain.getResourceSet().getResources().get(0)), true); + } + } + + @Override + public void makeContributions(IMenuManager menuManager, IToolBarManager toolBarManager, IStatusLineManager statusLineManager) { + super.makeContributions(menuManager, toolBarManager, statusLineManager); + contentOutlineStatusLineManager = statusLineManager; + } + + @Override + public void setActionBars(IActionBars actionBars) { + super.setActionBars(actionBars); + getActionBarContributor().shareGlobalActions(this, actionBars); + } + } + + contentOutlinePage = new MyContentOutlinePage(); + + // Listen to selection so that we can handle it is a special way. + // + contentOutlinePage.addSelectionChangedListener + (new ISelectionChangedListener() { + // This ensures that we handle selections correctly. + // + public void selectionChanged(SelectionChangedEvent event) { + handleContentOutlineSelection(event.getSelection()); + } + }); + } + + return contentOutlinePage; + } + + /** + * This accesses a cached version of the property sheet. + * + * + * @generated + */ + public IPropertySheetPage getPropertySheetPage() { + PropertySheetPage propertySheetPage = + new ExtendedPropertySheetPage(editingDomain, ExtendedPropertySheetPage.Decoration.NONE, null, 0, false) { + @Override + public void setSelectionToViewer(List selection) { + PetrinetEditor.this.setSelectionToViewer(selection); + PetrinetEditor.this.setFocus(); + } + + @Override + public void setActionBars(IActionBars actionBars) { + super.setActionBars(actionBars); + getActionBarContributor().shareGlobalActions(this, actionBars); + } + }; + propertySheetPage.setPropertySourceProvider(new AdapterFactoryContentProvider(adapterFactory)); + propertySheetPages.add(propertySheetPage); + + return propertySheetPage; + } + + /** + * This deals with how we want selection in the outliner to affect the other views. + * + * + * @generated + */ + public void handleContentOutlineSelection(ISelection selection) { + if (currentViewerPane != null && !selection.isEmpty() && selection instanceof IStructuredSelection) { + Iterator selectedElements = ((IStructuredSelection)selection).iterator(); + if (selectedElements.hasNext()) { + // Get the first selected element. + // + Object selectedElement = selectedElements.next(); + + // If it's the selection viewer, then we want it to select the same selection as this selection. + // + if (currentViewerPane.getViewer() == selectionViewer) { + ArrayList selectionList = new ArrayList(); + selectionList.add(selectedElement); + while (selectedElements.hasNext()) { + selectionList.add(selectedElements.next()); + } + + // Set the selection to the widget. + // + selectionViewer.setSelection(new StructuredSelection(selectionList)); + } + else { + // Set the input to the widget. + // + if (currentViewerPane.getViewer().getInput() != selectedElement) { + currentViewerPane.getViewer().setInput(selectedElement); + currentViewerPane.setTitle(selectedElement); + } + } + } + } + } + + /** + * This is for implementing {@link IEditorPart} and simply tests the command stack. + * + * + * @generated + */ + @Override + public boolean isDirty() { + return ((BasicCommandStack)editingDomain.getCommandStack()).isSaveNeeded(); + } + + /** + * This is for implementing {@link IEditorPart} and simply saves the model file. + * + * + * @generated + */ + @Override + public void doSave(IProgressMonitor progressMonitor) { + // Save only resources that have actually changed. + // + final Map saveOptions = new HashMap(); + saveOptions.put(Resource.OPTION_SAVE_ONLY_IF_CHANGED, Resource.OPTION_SAVE_ONLY_IF_CHANGED_MEMORY_BUFFER); + saveOptions.put(Resource.OPTION_LINE_DELIMITER, Resource.OPTION_LINE_DELIMITER_UNSPECIFIED); + + // Do the work within an operation because this is a long running activity that modifies the workbench. + // + WorkspaceModifyOperation operation = + new WorkspaceModifyOperation() { + // This is the method that gets invoked when the operation runs. + // + @Override + public void execute(IProgressMonitor monitor) { + // Save the resources to the file system. + // + boolean first = true; + List resources = editingDomain.getResourceSet().getResources(); + for (int i = 0; i < resources.size(); ++i) { + Resource resource = resources.get(i); + if ((first || !resource.getContents().isEmpty() || isPersisted(resource)) && !editingDomain.isReadOnly(resource)) { + try { + long timeStamp = resource.getTimeStamp(); + resource.save(saveOptions); + if (resource.getTimeStamp() != timeStamp) { + savedResources.add(resource); + } + } + catch (Exception exception) { + resourceToDiagnosticMap.put(resource, analyzeResourceProblems(resource, exception)); + } + first = false; + } + } + } + }; + + updateProblemIndication = false; + try { + // This runs the options, and shows progress. + // + new ProgressMonitorDialog(getSite().getShell()).run(true, false, operation); + + // Refresh the necessary state. + // + ((BasicCommandStack)editingDomain.getCommandStack()).saveIsDone(); + firePropertyChange(IEditorPart.PROP_DIRTY); + } + catch (Exception exception) { + // Something went wrong that shouldn't. + // + PetrinetEditorPlugin.INSTANCE.log(exception); + } + updateProblemIndication = true; + updateProblemIndication(); + } + + /** + * This returns whether something has been persisted to the URI of the specified resource. + * The implementation uses the URI converter from the editor's resource set to try to open an input stream. + * + * + * @generated + */ + protected boolean isPersisted(Resource resource) { + boolean result = false; + try { + InputStream stream = editingDomain.getResourceSet().getURIConverter().createInputStream(resource.getURI()); + if (stream != null) { + result = true; + stream.close(); + } + } + catch (IOException e) { + // Ignore + } + return result; + } + + /** + * This always returns true because it is not currently supported. + * + * + * @generated + */ + @Override + public boolean isSaveAsAllowed() { + return true; + } + + /** + * This also changes the editor's input. + * + * + * @generated + */ + @Override + public void doSaveAs() { + SaveAsDialog saveAsDialog = new SaveAsDialog(getSite().getShell()); + saveAsDialog.open(); + IPath path = saveAsDialog.getResult(); + if (path != null) { + IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(path); + if (file != null) { + doSaveAs(URI.createPlatformResourceURI(file.getFullPath().toString(), true), new FileEditorInput(file)); + } + } + } + + /** + * + * + * @generated + */ + protected void doSaveAs(URI uri, IEditorInput editorInput) { + (editingDomain.getResourceSet().getResources().get(0)).setURI(uri); + setInputWithNotify(editorInput); + setPartName(editorInput.getName()); + IProgressMonitor progressMonitor = + getActionBars().getStatusLineManager() != null ? + getActionBars().getStatusLineManager().getProgressMonitor() : + new NullProgressMonitor(); + doSave(progressMonitor); + } + + /** + * + * + * @generated + */ + public void gotoMarker(IMarker marker) { + List targetObjects = markerHelper.getTargetObjects(editingDomain, marker); + if (!targetObjects.isEmpty()) { + setSelectionToViewer(targetObjects); + } + } + + /** + * This is called during startup. + * + * + * @generated + */ + @Override + public void init(IEditorSite site, IEditorInput editorInput) { + setSite(site); + setInputWithNotify(editorInput); + setPartName(editorInput.getName()); + site.setSelectionProvider(this); + site.getPage().addPartListener(partListener); + ResourcesPlugin.getWorkspace().addResourceChangeListener(resourceChangeListener, IResourceChangeEvent.POST_CHANGE); + } + + /** + * + * + * @generated + */ + @Override + public void setFocus() { + if (currentViewerPane != null) { + currentViewerPane.setFocus(); + } + else { + getControl(getActivePage()).setFocus(); + } + } + + /** + * This implements {@link org.eclipse.jface.viewers.ISelectionProvider}. + * + * + * @generated + */ + public void addSelectionChangedListener(ISelectionChangedListener listener) { + selectionChangedListeners.add(listener); + } + + /** + * This implements {@link org.eclipse.jface.viewers.ISelectionProvider}. + * + * + * @generated + */ + public void removeSelectionChangedListener(ISelectionChangedListener listener) { + selectionChangedListeners.remove(listener); + } + + /** + * This implements {@link org.eclipse.jface.viewers.ISelectionProvider} to return this editor's overall selection. + * + * + * @generated + */ + public ISelection getSelection() { + return editorSelection; + } + + /** + * This implements {@link org.eclipse.jface.viewers.ISelectionProvider} to set this editor's overall selection. + * Calling this result will notify the listeners. + * + * + * @generated + */ + public void setSelection(ISelection selection) { + editorSelection = selection; + + for (ISelectionChangedListener listener : selectionChangedListeners) { + listener.selectionChanged(new SelectionChangedEvent(this, selection)); + } + setStatusLineManager(selection); + } + + /** + * + * + * @generated + */ + public void setStatusLineManager(ISelection selection) { + IStatusLineManager statusLineManager = currentViewer != null && currentViewer == contentOutlineViewer ? + contentOutlineStatusLineManager : getActionBars().getStatusLineManager(); + + if (statusLineManager != null) { + if (selection instanceof IStructuredSelection) { + Collection collection = ((IStructuredSelection)selection).toList(); + switch (collection.size()) { + case 0: { + statusLineManager.setMessage(getString("_UI_NoObjectSelected")); + break; + } + case 1: { + String text = new AdapterFactoryItemDelegator(adapterFactory).getText(collection.iterator().next()); + statusLineManager.setMessage(getString("_UI_SingleObjectSelected", text)); + break; + } + default: { + statusLineManager.setMessage(getString("_UI_MultiObjectSelected", Integer.toString(collection.size()))); + break; + } + } + } + else { + statusLineManager.setMessage(""); + } + } + } + + /** + * This looks up a string in the plugin's plugin.properties file. + * + * + * @generated + */ + private static String getString(String key) { + return PetrinetEditorPlugin.INSTANCE.getString(key); + } + + /** + * This looks up a string in plugin.properties, making a substitution. + * + * + * @generated + */ + private static String getString(String key, Object s1) { + return PetrinetEditorPlugin.INSTANCE.getString(key, new Object [] { s1 }); + } + + /** + * This implements {@link org.eclipse.jface.action.IMenuListener} to help fill the context menus with contributions from the Edit menu. + * + * + * @generated + */ + public void menuAboutToShow(IMenuManager menuManager) { + ((IMenuListener)getEditorSite().getActionBarContributor()).menuAboutToShow(menuManager); + } + + /** + * + * + * @generated + */ + public EditingDomainActionBarContributor getActionBarContributor() { + return (EditingDomainActionBarContributor)getEditorSite().getActionBarContributor(); + } + + /** + * + * + * @generated + */ + public IActionBars getActionBars() { + return getActionBarContributor().getActionBars(); + } + + /** + * + * + * @generated + */ + public AdapterFactory getAdapterFactory() { + return adapterFactory; + } + + /** + * + * + * @generated + */ + @Override + public void dispose() { + updateProblemIndication = false; + + ResourcesPlugin.getWorkspace().removeResourceChangeListener(resourceChangeListener); + + getSite().getPage().removePartListener(partListener); + + adapterFactory.dispose(); + + if (getActionBarContributor().getActiveEditor() == this) { + getActionBarContributor().setActiveEditor(null); + } + + for (PropertySheetPage propertySheetPage : propertySheetPages) { + propertySheetPage.dispose(); + } + + if (contentOutlinePage != null) { + contentOutlinePage.dispose(); + } + + super.dispose(); + } + + /** + * Returns whether the outline view should be presented to the user. + * + * + * @generated + */ + protected boolean showOutlineView() { + return true; + } +} diff --git a/workspace/fr.n7.petrinet.editor/src/petrinet/presentation/PetrinetEditorPlugin.java b/workspace/fr.n7.petrinet.editor/src/petrinet/presentation/PetrinetEditorPlugin.java new file mode 100755 index 0000000..c36f292 --- /dev/null +++ b/workspace/fr.n7.petrinet.editor/src/petrinet/presentation/PetrinetEditorPlugin.java @@ -0,0 +1,91 @@ +/** + */ +package petrinet.presentation; + +import org.eclipse.emf.common.EMFPlugin; + +import org.eclipse.emf.common.ui.EclipseUIPlugin; + +import org.eclipse.emf.common.util.ResourceLocator; + +/** + * This is the central singleton for the Petrinet editor plugin. + * + * + * @generated + */ +public final class PetrinetEditorPlugin extends EMFPlugin { + /** + * Keep track of the singleton. + * + * + * @generated + */ + public static final PetrinetEditorPlugin INSTANCE = new PetrinetEditorPlugin(); + + /** + * Keep track of the singleton. + * + * + * @generated + */ + private static Implementation plugin; + + /** + * Create the instance. + * + * + * @generated + */ + public PetrinetEditorPlugin() { + super + (new ResourceLocator [] { + }); + } + + /** + * Returns the singleton instance of the Eclipse plugin. + * + * + * @return the singleton instance. + * @generated + */ + @Override + public ResourceLocator getPluginResourceLocator() { + return plugin; + } + + /** + * Returns the singleton instance of the Eclipse plugin. + * + * + * @return the singleton instance. + * @generated + */ + public static Implementation getPlugin() { + return plugin; + } + + /** + * The actual implementation of the Eclipse Plugin. + * + * + * @generated + */ + public static class Implementation extends EclipseUIPlugin { + /** + * Creates an instance. + * + * + * @generated + */ + public Implementation() { + super(); + + // Remember the static instance. + // + plugin = this; + } + } + +} diff --git a/workspace/fr.n7.petrinet.editor/src/petrinet/presentation/PetrinetModelWizard.java b/workspace/fr.n7.petrinet.editor/src/petrinet/presentation/PetrinetModelWizard.java new file mode 100755 index 0000000..b49577d --- /dev/null +++ b/workspace/fr.n7.petrinet.editor/src/petrinet/presentation/PetrinetModelWizard.java @@ -0,0 +1,627 @@ +/** + */ +package petrinet.presentation; + + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.MissingResourceException; +import java.util.StringTokenizer; + +import org.eclipse.emf.common.CommonPlugin; + +import org.eclipse.emf.common.util.URI; + +import org.eclipse.emf.ecore.EClass; +import org.eclipse.emf.ecore.EClassifier; + +import org.eclipse.emf.ecore.resource.Resource; +import org.eclipse.emf.ecore.resource.ResourceSet; + +import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; + +import org.eclipse.emf.ecore.EObject; + +import org.eclipse.emf.ecore.xmi.XMLResource; + +import org.eclipse.emf.edit.ui.provider.ExtendedImageRegistry; + +import org.eclipse.core.resources.IContainer; +import org.eclipse.core.resources.IFile; +import org.eclipse.core.resources.IFolder; +import org.eclipse.core.resources.IProject; +import org.eclipse.core.resources.IResource; +import org.eclipse.core.resources.ResourcesPlugin; + +import org.eclipse.core.runtime.IProgressMonitor; + +import org.eclipse.jface.dialogs.MessageDialog; + +import org.eclipse.jface.viewers.IStructuredSelection; + +import org.eclipse.jface.wizard.Wizard; +import org.eclipse.jface.wizard.WizardPage; + +import org.eclipse.swt.SWT; + +import org.eclipse.swt.events.ModifyListener; +import org.eclipse.swt.events.ModifyEvent; + +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; + +import org.eclipse.swt.widgets.Combo; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Label; + +import org.eclipse.ui.INewWizard; +import org.eclipse.ui.IWorkbench; + +import org.eclipse.ui.actions.WorkspaceModifyOperation; + +import org.eclipse.ui.dialogs.WizardNewFileCreationPage; + +import org.eclipse.ui.part.FileEditorInput; +import org.eclipse.ui.part.ISetSelectionTarget; + +import petrinet.PetrinetFactory; +import petrinet.PetrinetPackage; +import petrinet.provider.PetrinetEditPlugin; + + +import org.eclipse.core.runtime.Path; + +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.StructuredSelection; + +import org.eclipse.ui.IWorkbenchPage; +import org.eclipse.ui.IWorkbenchPart; +import org.eclipse.ui.IWorkbenchWindow; +import org.eclipse.ui.PartInitException; + + +/** + * This is a simple wizard for creating a new model file. + * + * + * @generated + */ +public class PetrinetModelWizard extends Wizard implements INewWizard { + /** + * The supported extensions for created files. + * + * + * @generated + */ + public static final List FILE_EXTENSIONS = + Collections.unmodifiableList(Arrays.asList(PetrinetEditorPlugin.INSTANCE.getString("_UI_PetrinetEditorFilenameExtensions").split("\\s*,\\s*"))); + + /** + * A formatted list of supported file extensions, suitable for display. + * + * + * @generated + */ + public static final String FORMATTED_FILE_EXTENSIONS = + PetrinetEditorPlugin.INSTANCE.getString("_UI_PetrinetEditorFilenameExtensions").replaceAll("\\s*,\\s*", ", "); + + /** + * This caches an instance of the model package. + * + * + * @generated + */ + protected PetrinetPackage petrinetPackage = PetrinetPackage.eINSTANCE; + + /** + * This caches an instance of the model factory. + * + * + * @generated + */ + protected PetrinetFactory petrinetFactory = petrinetPackage.getPetrinetFactory(); + + /** + * This is the file creation page. + * + * + * @generated + */ + protected PetrinetModelWizardNewFileCreationPage newFileCreationPage; + + /** + * This is the initial object creation page. + * + * + * @generated + */ + protected PetrinetModelWizardInitialObjectCreationPage initialObjectCreationPage; + + /** + * Remember the selection during initialization for populating the default container. + * + * + * @generated + */ + protected IStructuredSelection selection; + + /** + * Remember the workbench during initialization. + * + * + * @generated + */ + protected IWorkbench workbench; + + /** + * Caches the names of the types that can be created as the root object. + * + * + * @generated + */ + protected List initialObjectNames; + + /** + * This just records the information. + * + * + * @generated + */ + public void init(IWorkbench workbench, IStructuredSelection selection) { + this.workbench = workbench; + this.selection = selection; + setWindowTitle(PetrinetEditorPlugin.INSTANCE.getString("_UI_Wizard_label")); + setDefaultPageImageDescriptor(ExtendedImageRegistry.INSTANCE.getImageDescriptor(PetrinetEditorPlugin.INSTANCE.getImage("full/wizban/NewPetrinet"))); + } + + /** + * Returns the names of the types that can be created as the root object. + * + * + * @generated + */ + protected Collection getInitialObjectNames() { + if (initialObjectNames == null) { + initialObjectNames = new ArrayList(); + for (EClassifier eClassifier : petrinetPackage.getEClassifiers()) { + if (eClassifier instanceof EClass) { + EClass eClass = (EClass)eClassifier; + if (!eClass.isAbstract()) { + initialObjectNames.add(eClass.getName()); + } + } + } + Collections.sort(initialObjectNames, CommonPlugin.INSTANCE.getComparator()); + } + return initialObjectNames; + } + + /** + * Create a new model. + * + * + * @generated + */ + protected EObject createInitialModel() { + EClass eClass = (EClass)petrinetPackage.getEClassifier(initialObjectCreationPage.getInitialObjectName()); + EObject rootObject = petrinetFactory.create(eClass); + return rootObject; + } + + /** + * Do the work after everything is specified. + * + * + * @generated + */ + @Override + public boolean performFinish() { + try { + // Remember the file. + // + final IFile modelFile = getModelFile(); + + // Do the work within an operation. + // + WorkspaceModifyOperation operation = + new WorkspaceModifyOperation() { + @Override + protected void execute(IProgressMonitor progressMonitor) { + try { + // Create a resource set + // + ResourceSet resourceSet = new ResourceSetImpl(); + + // Get the URI of the model file. + // + URI fileURI = URI.createPlatformResourceURI(modelFile.getFullPath().toString(), true); + + // Create a resource for this file. + // + Resource resource = resourceSet.createResource(fileURI); + + // Add the initial model object to the contents. + // + EObject rootObject = createInitialModel(); + if (rootObject != null) { + resource.getContents().add(rootObject); + } + + // Save the contents of the resource to the file system. + // + Map options = new HashMap(); + options.put(XMLResource.OPTION_ENCODING, initialObjectCreationPage.getEncoding()); + resource.save(options); + } + catch (Exception exception) { + PetrinetEditorPlugin.INSTANCE.log(exception); + } + finally { + progressMonitor.done(); + } + } + }; + + getContainer().run(false, false, operation); + + // Select the new file resource in the current view. + // + IWorkbenchWindow workbenchWindow = workbench.getActiveWorkbenchWindow(); + IWorkbenchPage page = workbenchWindow.getActivePage(); + final IWorkbenchPart activePart = page.getActivePart(); + if (activePart instanceof ISetSelectionTarget) { + final ISelection targetSelection = new StructuredSelection(modelFile); + getShell().getDisplay().asyncExec + (new Runnable() { + public void run() { + ((ISetSelectionTarget)activePart).selectReveal(targetSelection); + } + }); + } + + // Open an editor on the new file. + // + try { + page.openEditor + (new FileEditorInput(modelFile), + workbench.getEditorRegistry().getDefaultEditor(modelFile.getFullPath().toString()).getId()); + } + catch (PartInitException exception) { + MessageDialog.openError(workbenchWindow.getShell(), PetrinetEditorPlugin.INSTANCE.getString("_UI_OpenEditorError_label"), exception.getMessage()); + return false; + } + + return true; + } + catch (Exception exception) { + PetrinetEditorPlugin.INSTANCE.log(exception); + return false; + } + } + + /** + * This is the one page of the wizard. + * + * + * @generated + */ + public class PetrinetModelWizardNewFileCreationPage extends WizardNewFileCreationPage { + /** + * Pass in the selection. + * + * + * @generated + */ + public PetrinetModelWizardNewFileCreationPage(String pageId, IStructuredSelection selection) { + super(pageId, selection); + } + + /** + * The framework calls this to see if the file is correct. + * + * + * @generated + */ + @Override + protected boolean validatePage() { + if (super.validatePage()) { + String extension = new Path(getFileName()).getFileExtension(); + if (extension == null || !FILE_EXTENSIONS.contains(extension)) { + String key = FILE_EXTENSIONS.size() > 1 ? "_WARN_FilenameExtensions" : "_WARN_FilenameExtension"; + setErrorMessage(PetrinetEditorPlugin.INSTANCE.getString(key, new Object [] { FORMATTED_FILE_EXTENSIONS })); + return false; + } + return true; + } + return false; + } + + /** + * + * + * @generated + */ + public IFile getModelFile() { + return ResourcesPlugin.getWorkspace().getRoot().getFile(getContainerFullPath().append(getFileName())); + } + } + + /** + * This is the page where the type of object to create is selected. + * + * + * @generated + */ + public class PetrinetModelWizardInitialObjectCreationPage extends WizardPage { + /** + * + * + * @generated + */ + protected Combo initialObjectField; + + /** + * @generated + * + * + */ + protected List encodings; + + /** + * + * + * @generated + */ + protected Combo encodingField; + + /** + * Pass in the selection. + * + * + * @generated + */ + public PetrinetModelWizardInitialObjectCreationPage(String pageId) { + super(pageId); + } + + /** + * + * + * @generated + */ + public void createControl(Composite parent) { + Composite composite = new Composite(parent, SWT.NONE); { + GridLayout layout = new GridLayout(); + layout.numColumns = 1; + layout.verticalSpacing = 12; + composite.setLayout(layout); + + GridData data = new GridData(); + data.verticalAlignment = GridData.FILL; + data.grabExcessVerticalSpace = true; + data.horizontalAlignment = GridData.FILL; + composite.setLayoutData(data); + } + + Label containerLabel = new Label(composite, SWT.LEFT); + { + containerLabel.setText(PetrinetEditorPlugin.INSTANCE.getString("_UI_ModelObject")); + + GridData data = new GridData(); + data.horizontalAlignment = GridData.FILL; + containerLabel.setLayoutData(data); + } + + initialObjectField = new Combo(composite, SWT.BORDER); + { + GridData data = new GridData(); + data.horizontalAlignment = GridData.FILL; + data.grabExcessHorizontalSpace = true; + initialObjectField.setLayoutData(data); + } + + for (String objectName : getInitialObjectNames()) { + initialObjectField.add(getLabel(objectName)); + } + + if (initialObjectField.getItemCount() == 1) { + initialObjectField.select(0); + } + initialObjectField.addModifyListener(validator); + + Label encodingLabel = new Label(composite, SWT.LEFT); + { + encodingLabel.setText(PetrinetEditorPlugin.INSTANCE.getString("_UI_XMLEncoding")); + + GridData data = new GridData(); + data.horizontalAlignment = GridData.FILL; + encodingLabel.setLayoutData(data); + } + encodingField = new Combo(composite, SWT.BORDER); + { + GridData data = new GridData(); + data.horizontalAlignment = GridData.FILL; + data.grabExcessHorizontalSpace = true; + encodingField.setLayoutData(data); + } + + for (String encoding : getEncodings()) { + encodingField.add(encoding); + } + + encodingField.select(0); + encodingField.addModifyListener(validator); + + setPageComplete(validatePage()); + setControl(composite); + } + + /** + * + * + * @generated + */ + protected ModifyListener validator = + new ModifyListener() { + public void modifyText(ModifyEvent e) { + setPageComplete(validatePage()); + } + }; + + /** + * + * + * @generated + */ + protected boolean validatePage() { + return getInitialObjectName() != null && getEncodings().contains(encodingField.getText()); + } + + /** + * + * + * @generated + */ + @Override + public void setVisible(boolean visible) { + super.setVisible(visible); + if (visible) { + if (initialObjectField.getItemCount() == 1) { + initialObjectField.clearSelection(); + encodingField.setFocus(); + } + else { + encodingField.clearSelection(); + initialObjectField.setFocus(); + } + } + } + + /** + * + * + * @generated + */ + public String getInitialObjectName() { + String label = initialObjectField.getText(); + + for (String name : getInitialObjectNames()) { + if (getLabel(name).equals(label)) { + return name; + } + } + return null; + } + + /** + * + * + * @generated + */ + public String getEncoding() { + return encodingField.getText(); + } + + /** + * Returns the label for the specified type name. + * + * + * @generated + */ + protected String getLabel(String typeName) { + try { + return PetrinetEditPlugin.INSTANCE.getString("_UI_" + typeName + "_type"); + } + catch(MissingResourceException mre) { + PetrinetEditorPlugin.INSTANCE.log(mre); + } + return typeName; + } + + /** + * + * + * @generated + */ + protected Collection getEncodings() { + if (encodings == null) { + encodings = new ArrayList(); + for (StringTokenizer stringTokenizer = new StringTokenizer(PetrinetEditorPlugin.INSTANCE.getString("_UI_XMLEncodingChoices")); stringTokenizer.hasMoreTokens(); ) { + encodings.add(stringTokenizer.nextToken()); + } + } + return encodings; + } + } + + /** + * The framework calls this to create the contents of the wizard. + * + * + * @generated + */ + @Override + public void addPages() { + // Create a page, set the title, and the initial model file name. + // + newFileCreationPage = new PetrinetModelWizardNewFileCreationPage("Whatever", selection); + newFileCreationPage.setTitle(PetrinetEditorPlugin.INSTANCE.getString("_UI_PetrinetModelWizard_label")); + newFileCreationPage.setDescription(PetrinetEditorPlugin.INSTANCE.getString("_UI_PetrinetModelWizard_description")); + newFileCreationPage.setFileName(PetrinetEditorPlugin.INSTANCE.getString("_UI_PetrinetEditorFilenameDefaultBase") + "." + FILE_EXTENSIONS.get(0)); + addPage(newFileCreationPage); + + // Try and get the resource selection to determine a current directory for the file dialog. + // + if (selection != null && !selection.isEmpty()) { + // Get the resource... + // + Object selectedElement = selection.iterator().next(); + if (selectedElement instanceof IResource) { + // Get the resource parent, if its a file. + // + IResource selectedResource = (IResource)selectedElement; + if (selectedResource.getType() == IResource.FILE) { + selectedResource = selectedResource.getParent(); + } + + // This gives us a directory... + // + if (selectedResource instanceof IFolder || selectedResource instanceof IProject) { + // Set this for the container. + // + newFileCreationPage.setContainerFullPath(selectedResource.getFullPath()); + + // Make up a unique new name here. + // + String defaultModelBaseFilename = PetrinetEditorPlugin.INSTANCE.getString("_UI_PetrinetEditorFilenameDefaultBase"); + String defaultModelFilenameExtension = FILE_EXTENSIONS.get(0); + String modelFilename = defaultModelBaseFilename + "." + defaultModelFilenameExtension; + for (int i = 1; ((IContainer)selectedResource).findMember(modelFilename) != null; ++i) { + modelFilename = defaultModelBaseFilename + i + "." + defaultModelFilenameExtension; + } + newFileCreationPage.setFileName(modelFilename); + } + } + } + initialObjectCreationPage = new PetrinetModelWizardInitialObjectCreationPage("Whatever2"); + initialObjectCreationPage.setTitle(PetrinetEditorPlugin.INSTANCE.getString("_UI_PetrinetModelWizard_label")); + initialObjectCreationPage.setDescription(PetrinetEditorPlugin.INSTANCE.getString("_UI_Wizard_initial_object_description")); + addPage(initialObjectCreationPage); + } + + /** + * Get the file from the page. + * + * + * @generated + */ + public IFile getModelFile() { + return newFileCreationPage.getModelFile(); + } + +} diff --git a/workspace/fr.n7.petrinet.tests/.classpath b/workspace/fr.n7.petrinet.tests/.classpath new file mode 100755 index 0000000..c3ba59e --- /dev/null +++ b/workspace/fr.n7.petrinet.tests/.classpath @@ -0,0 +1,7 @@ + + + + + + + diff --git a/workspace/fr.n7.petrinet.tests/.project b/workspace/fr.n7.petrinet.tests/.project new file mode 100755 index 0000000..a8cd606 --- /dev/null +++ b/workspace/fr.n7.petrinet.tests/.project @@ -0,0 +1,28 @@ + + + fr.n7.petrinet.tests + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.pde.PluginNature + + diff --git a/workspace/fr.n7.petrinet.tests/META-INF/MANIFEST.MF b/workspace/fr.n7.petrinet.tests/META-INF/MANIFEST.MF new file mode 100755 index 0000000..a00fb6b --- /dev/null +++ b/workspace/fr.n7.petrinet.tests/META-INF/MANIFEST.MF @@ -0,0 +1,16 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: %pluginName +Bundle-SymbolicName: fr.n7.petrinet.tests;singleton:=true +Automatic-Module-Name: fr.n7.petrinet.tests +Bundle-Version: 1.0.0.qualifier +Bundle-ClassPath: . +Bundle-Vendor: %providerName +Bundle-Localization: plugin +Bundle-RequiredExecutionEnvironment: J2SE-1.5 +Export-Package: petrinet.tests +Require-Bundle: org.eclipse.core.runtime, + fr.n7.petrinet;visibility:=reexport, + org.eclipse.emf.ecore.xmi;visibility:=reexport, + org.junit;visibility:=reexport +Bundle-ActivationPolicy: lazy diff --git a/workspace/fr.n7.petrinet.tests/bin/.gitignore b/workspace/fr.n7.petrinet.tests/bin/.gitignore new file mode 100644 index 0000000..79b56a6 --- /dev/null +++ b/workspace/fr.n7.petrinet.tests/bin/.gitignore @@ -0,0 +1 @@ +/petrinet/ diff --git a/workspace/fr.n7.petrinet.tests/build.properties b/workspace/fr.n7.petrinet.tests/build.properties new file mode 100755 index 0000000..08af068 --- /dev/null +++ b/workspace/fr.n7.petrinet.tests/build.properties @@ -0,0 +1,8 @@ +# + +bin.includes = .,\ + META-INF/,\ + plugin.properties +jars.compile.order = . +source.. = src/ +output.. = bin/ diff --git a/workspace/fr.n7.petrinet.tests/plugin.properties b/workspace/fr.n7.petrinet.tests/plugin.properties new file mode 100755 index 0000000..d8d0263 --- /dev/null +++ b/workspace/fr.n7.petrinet.tests/plugin.properties @@ -0,0 +1,4 @@ +# + +pluginName = Petrinet Tests +providerName = www.example.org diff --git a/workspace/fr.n7.petrinet.tests/src/petrinet/tests/ArcTest.java b/workspace/fr.n7.petrinet.tests/src/petrinet/tests/ArcTest.java new file mode 100755 index 0000000..35e7c5a --- /dev/null +++ b/workspace/fr.n7.petrinet.tests/src/petrinet/tests/ArcTest.java @@ -0,0 +1,89 @@ +/** + */ +package petrinet.tests; + +import junit.framework.TestCase; + +import junit.textui.TestRunner; + +import petrinet.Arc; +import petrinet.PetrinetFactory; + +/** + * + * A test case for the model object 'Arc'. + * + * @generated + */ +public class ArcTest extends TestCase { + + /** + * The fixture for this Arc test case. + * + * + * @generated + */ + protected Arc fixture = null; + + /** + * + * + * @generated + */ + public static void main(String[] args) { + TestRunner.run(ArcTest.class); + } + + /** + * Constructs a new Arc test case with the given name. + * + * + * @generated + */ + public ArcTest(String name) { + super(name); + } + + /** + * Sets the fixture for this Arc test case. + * + * + * @generated + */ + protected void setFixture(Arc fixture) { + this.fixture = fixture; + } + + /** + * Returns the fixture for this Arc test case. + * + * + * @generated + */ + protected Arc getFixture() { + return fixture; + } + + /** + * + * + * @see junit.framework.TestCase#setUp() + * @generated + */ + @Override + protected void setUp() throws Exception { + setFixture(PetrinetFactory.eINSTANCE.createArc()); + } + + /** + * + * + * @see junit.framework.TestCase#tearDown() + * @generated + */ + @Override + protected void tearDown() throws Exception { + setFixture(null); + } + +} //ArcTest diff --git a/workspace/fr.n7.petrinet.tests/src/petrinet/tests/NetworkTest.java b/workspace/fr.n7.petrinet.tests/src/petrinet/tests/NetworkTest.java new file mode 100755 index 0000000..1db5cfb --- /dev/null +++ b/workspace/fr.n7.petrinet.tests/src/petrinet/tests/NetworkTest.java @@ -0,0 +1,89 @@ +/** + */ +package petrinet.tests; + +import junit.framework.TestCase; + +import junit.textui.TestRunner; + +import petrinet.Network; +import petrinet.PetrinetFactory; + +/** + * + * A test case for the model object 'Network'. + * + * @generated + */ +public class NetworkTest extends TestCase { + + /** + * The fixture for this Network test case. + * + * + * @generated + */ + protected Network fixture = null; + + /** + * + * + * @generated + */ + public static void main(String[] args) { + TestRunner.run(NetworkTest.class); + } + + /** + * Constructs a new Network test case with the given name. + * + * + * @generated + */ + public NetworkTest(String name) { + super(name); + } + + /** + * Sets the fixture for this Network test case. + * + * + * @generated + */ + protected void setFixture(Network fixture) { + this.fixture = fixture; + } + + /** + * Returns the fixture for this Network test case. + * + * + * @generated + */ + protected Network getFixture() { + return fixture; + } + + /** + * + * + * @see junit.framework.TestCase#setUp() + * @generated + */ + @Override + protected void setUp() throws Exception { + setFixture(PetrinetFactory.eINSTANCE.createNetwork()); + } + + /** + * + * + * @see junit.framework.TestCase#tearDown() + * @generated + */ + @Override + protected void tearDown() throws Exception { + setFixture(null); + } + +} //NetworkTest diff --git a/workspace/fr.n7.petrinet.tests/src/petrinet/tests/NodeTest.java b/workspace/fr.n7.petrinet.tests/src/petrinet/tests/NodeTest.java new file mode 100755 index 0000000..0f8f143 --- /dev/null +++ b/workspace/fr.n7.petrinet.tests/src/petrinet/tests/NodeTest.java @@ -0,0 +1,55 @@ +/** + */ +package petrinet.tests; + +import junit.framework.TestCase; + +import petrinet.Node; + +/** + * + * A test case for the model object 'Node'. + * + * @generated + */ +public abstract class NodeTest extends TestCase { + + /** + * The fixture for this Node test case. + * + * + * @generated + */ + protected Node fixture = null; + + /** + * Constructs a new Node test case with the given name. + * + * + * @generated + */ + public NodeTest(String name) { + super(name); + } + + /** + * Sets the fixture for this Node test case. + * + * + * @generated + */ + protected void setFixture(Node fixture) { + this.fixture = fixture; + } + + /** + * Returns the fixture for this Node test case. + * + * + * @generated + */ + protected Node getFixture() { + return fixture; + } + +} //NodeTest diff --git a/workspace/fr.n7.petrinet.tests/src/petrinet/tests/PetrinetAllTests.java b/workspace/fr.n7.petrinet.tests/src/petrinet/tests/PetrinetAllTests.java new file mode 100755 index 0000000..68778b7 --- /dev/null +++ b/workspace/fr.n7.petrinet.tests/src/petrinet/tests/PetrinetAllTests.java @@ -0,0 +1,46 @@ +/** + */ +package petrinet.tests; + +import junit.framework.Test; +import junit.framework.TestSuite; + +import junit.textui.TestRunner; + +/** + * + * A test suite for the 'Petrinet' model. + * + * @generated + */ +public class PetrinetAllTests extends TestSuite { + + /** + * + * + * @generated + */ + public static void main(String[] args) { + TestRunner.run(suite()); + } + + /** + * + * + * @generated + */ + public static Test suite() { + TestSuite suite = new PetrinetAllTests("Petrinet Tests"); + return suite; + } + + /** + * + * + * @generated + */ + public PetrinetAllTests(String name) { + super(name); + } + +} //PetrinetAllTests diff --git a/workspace/fr.n7.petrinet.tests/src/petrinet/tests/PetrinetExample.java b/workspace/fr.n7.petrinet.tests/src/petrinet/tests/PetrinetExample.java new file mode 100755 index 0000000..a0417c6 --- /dev/null +++ b/workspace/fr.n7.petrinet.tests/src/petrinet/tests/PetrinetExample.java @@ -0,0 +1,121 @@ +/** + */ +package petrinet.tests; + +import java.io.File; +import java.io.IOException; + +import org.eclipse.emf.common.util.Diagnostic; +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.ecore.resource.impl.ResourceSetImpl; + +import org.eclipse.emf.ecore.util.Diagnostician; + +import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl; + +import petrinet.Network; +import petrinet.PetrinetFactory; +import petrinet.PetrinetPackage; + +/** + * + * A sample utility for the 'petrinet' package. + * + * @generated + */ +public class PetrinetExample { + /** + * + * Load all the argument file paths or URIs as instances of the model. + * + * @param args the file paths or URIs. + * @generated + */ + public static void main(String[] args) { + // Create a resource set to hold the resources. + // + ResourceSet resourceSet = new ResourceSetImpl(); + + // Register the appropriate resource factory to handle all file extensions. + // + resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put + (Resource.Factory.Registry.DEFAULT_EXTENSION, + new XMIResourceFactoryImpl()); + + // Register the package to ensure it is available during loading. + // + resourceSet.getPackageRegistry().put + (PetrinetPackage.eNS_URI, + PetrinetPackage.eINSTANCE); + + // If there are no arguments, emit an appropriate usage message. + // + if (args.length == 0) { + System.out.println("Enter a list of file paths or URIs that have content like this:"); + try { + Resource resource = resourceSet.createResource(URI.createURI("http:///My.petrinet")); + Network root = PetrinetFactory.eINSTANCE.createNetwork(); + resource.getContents().add(root); + resource.save(System.out, null); + } + catch (IOException exception) { + exception.printStackTrace(); + } + } + else { + // Iterate over all the arguments. + // + for (int i = 0; i < args.length; ++i) { + // Construct the URI for the instance file. + // The argument is treated as a file path only if it denotes an existing file. + // Otherwise, it's directly treated as a URL. + // + File file = new File(args[i]); + URI uri = file.isFile() ? URI.createFileURI(file.getAbsolutePath()): URI.createURI(args[i]); + + try { + // Demand load resource for this file. + // + Resource resource = resourceSet.getResource(uri, true); + System.out.println("Loaded " + uri); + + // Validate the contents of the loaded resource. + // + for (EObject eObject : resource.getContents()) { + Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eObject); + if (diagnostic.getSeverity() != Diagnostic.OK) { + printDiagnostic(diagnostic, ""); + } + } + } + catch (RuntimeException exception) { + System.out.println("Problem loading " + uri); + exception.printStackTrace(); + } + } + } + } + + /** + * + * Prints diagnostics with indentation. + * + * @param diagnostic the diagnostic to print. + * @param indent the indentation for printing. + * @generated + */ + protected static void printDiagnostic(Diagnostic diagnostic, String indent) { + System.out.print(indent); + System.out.println(diagnostic.getMessage()); + for (Diagnostic child : diagnostic.getChildren()) { + printDiagnostic(child, indent + " "); + } + } + +} //PetrinetExample diff --git a/workspace/fr.n7.petrinet.tests/src/petrinet/tests/PetrinetTests.java b/workspace/fr.n7.petrinet.tests/src/petrinet/tests/PetrinetTests.java new file mode 100755 index 0000000..0fb58fd --- /dev/null +++ b/workspace/fr.n7.petrinet.tests/src/petrinet/tests/PetrinetTests.java @@ -0,0 +1,46 @@ +/** + */ +package petrinet.tests; + +import junit.framework.Test; +import junit.framework.TestSuite; + +import junit.textui.TestRunner; + +/** + * + * A test suite for the 'petrinet' package. + * + * @generated + */ +public class PetrinetTests extends TestSuite { + + /** + * + * + * @generated + */ + public static void main(String[] args) { + TestRunner.run(suite()); + } + + /** + * + * + * @generated + */ + public static Test suite() { + TestSuite suite = new PetrinetTests("petrinet Tests"); + return suite; + } + + /** + * + * + * @generated + */ + public PetrinetTests(String name) { + super(name); + } + +} //PetrinetTests diff --git a/workspace/fr.n7.petrinet.tests/src/petrinet/tests/PlaceTest.java b/workspace/fr.n7.petrinet.tests/src/petrinet/tests/PlaceTest.java new file mode 100755 index 0000000..19ff730 --- /dev/null +++ b/workspace/fr.n7.petrinet.tests/src/petrinet/tests/PlaceTest.java @@ -0,0 +1,70 @@ +/** + */ +package petrinet.tests; + +import junit.textui.TestRunner; + +import petrinet.PetrinetFactory; +import petrinet.Place; + +/** + * + * A test case for the model object 'Place'. + * + * @generated + */ +public class PlaceTest extends NodeTest { + + /** + * + * + * @generated + */ + public static void main(String[] args) { + TestRunner.run(PlaceTest.class); + } + + /** + * Constructs a new Place test case with the given name. + * + * + * @generated + */ + public PlaceTest(String name) { + super(name); + } + + /** + * Returns the fixture for this Place test case. + * + * + * @generated + */ + @Override + protected Place getFixture() { + return (Place)fixture; + } + + /** + * + * + * @see junit.framework.TestCase#setUp() + * @generated + */ + @Override + protected void setUp() throws Exception { + setFixture(PetrinetFactory.eINSTANCE.createPlace()); + } + + /** + * + * + * @see junit.framework.TestCase#tearDown() + * @generated + */ + @Override + protected void tearDown() throws Exception { + setFixture(null); + } + +} //PlaceTest diff --git a/workspace/fr.n7.petrinet.tests/src/petrinet/tests/TransitionTest.java b/workspace/fr.n7.petrinet.tests/src/petrinet/tests/TransitionTest.java new file mode 100755 index 0000000..eb87365 --- /dev/null +++ b/workspace/fr.n7.petrinet.tests/src/petrinet/tests/TransitionTest.java @@ -0,0 +1,70 @@ +/** + */ +package petrinet.tests; + +import junit.textui.TestRunner; + +import petrinet.PetrinetFactory; +import petrinet.Transition; + +/** + * + * A test case for the model object 'Transition'. + * + * @generated + */ +public class TransitionTest extends NodeTest { + + /** + * + * + * @generated + */ + public static void main(String[] args) { + TestRunner.run(TransitionTest.class); + } + + /** + * Constructs a new Transition test case with the given name. + * + * + * @generated + */ + public TransitionTest(String name) { + super(name); + } + + /** + * Returns the fixture for this Transition test case. + * + * + * @generated + */ + @Override + protected Transition getFixture() { + return (Transition)fixture; + } + + /** + * + * + * @see junit.framework.TestCase#setUp() + * @generated + */ + @Override + protected void setUp() throws Exception { + setFixture(PetrinetFactory.eINSTANCE.createTransition()); + } + + /** + * + * + * @see junit.framework.TestCase#tearDown() + * @generated + */ + @Override + protected void tearDown() throws Exception { + setFixture(null); + } + +} //TransitionTest diff --git a/workspace/fr.n7.petrinet.toTINA.ui/.classpath b/workspace/fr.n7.petrinet.toTINA.ui/.classpath new file mode 100755 index 0000000..64c5e31 --- /dev/null +++ b/workspace/fr.n7.petrinet.toTINA.ui/.classpath @@ -0,0 +1,7 @@ + + + + + + + diff --git a/workspace/fr.n7.petrinet.toTINA.ui/.project b/workspace/fr.n7.petrinet.toTINA.ui/.project new file mode 100755 index 0000000..123d85f --- /dev/null +++ b/workspace/fr.n7.petrinet.toTINA.ui/.project @@ -0,0 +1,28 @@ + + + fr.n7.petrinet.toTINA.ui + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + + org.eclipse.pde.PluginNature + org.eclipse.jdt.core.javanature + + diff --git a/workspace/fr.n7.petrinet.toTINA.ui/.settings/org.eclipse.jdt.core.prefs b/workspace/fr.n7.petrinet.toTINA.ui/.settings/org.eclipse.jdt.core.prefs new file mode 100755 index 0000000..d1c0bf9 --- /dev/null +++ b/workspace/fr.n7.petrinet.toTINA.ui/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,6 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 +org.eclipse.jdt.core.compiler.compliance=1.5 +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.5 diff --git a/workspace/fr.n7.petrinet.toTINA.ui/META-INF/MANIFEST.MF b/workspace/fr.n7.petrinet.toTINA.ui/META-INF/MANIFEST.MF new file mode 100755 index 0000000..697ac8f --- /dev/null +++ b/workspace/fr.n7.petrinet.toTINA.ui/META-INF/MANIFEST.MF @@ -0,0 +1,20 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: Acceleo ToTINA Module IDE Plug-in +Bundle-SymbolicName: fr.n7.petrinet.toTINA.ui;singleton:=true +Bundle-Version: 1.0.0.qualifier +Bundle-Activator: fr.n7.petrinet.toTINA.ui.Activator +Bundle-Vendor: Eclipse Modeling Project +Require-Bundle: org.eclipse.ui, + org.eclipse.core.runtime, + org.eclipse.core.resources, + fr.n7.petrinet.toTINA, + org.eclipse.emf.ecore, + org.eclipse.emf.ecore.xmi, + org.eclipse.ocl, + org.eclipse.ocl.ecore, + org.eclipse.acceleo.model, + org.eclipse.acceleo.engine +Bundle-RequiredExecutionEnvironment: J2SE-1.5 +Bundle-ActivationPolicy: lazy +Eclipse-LazyStart: true diff --git a/workspace/fr.n7.petrinet.toTINA.ui/build.properties b/workspace/fr.n7.petrinet.toTINA.ui/build.properties new file mode 100755 index 0000000..d0a0e71 --- /dev/null +++ b/workspace/fr.n7.petrinet.toTINA.ui/build.properties @@ -0,0 +1,7 @@ +source.. = src/ +output.. = bin/ +bin.includes = META-INF/,\ + .,\ + plugin.xml,\ + icons/ + diff --git a/workspace/fr.n7.petrinet.toTINA.ui/icons/default.gif b/workspace/fr.n7.petrinet.toTINA.ui/icons/default.gif new file mode 100755 index 0000000000000000000000000000000000000000..6a04c491b290f805a98268a5aa363be0fccf128f GIT binary patch literal 534 zcmZ?wbhEHb6krfwI2OaeTA#w%m?qeoBi~)3+Fz+Yp~`Mnm+QPf-^G*tmP~4$vaxIW zx`-7s`(~_)S~a_S=C;_?^QO#R)<1XWgt*sjqB#@TGzg3UCW+ztxdak>|Niq zdwoaKp6%N<%sjZEZpMzy2RAm(+_9~7-}c>`rXJf=HE-vZ&i#9*96mPX$k7wKCLGy4 zXWG%@NB7J=zGueqJu^@4opEH}%DE>_%{zH!{>ii34qe-M`0Ab`m-ijJxcuzp1IN#w zI&=KYnPX?p9^G=~_SP%6wqCit + + + + + + + + + + + diff --git a/workspace/fr.n7.petrinet.toTINA.ui/src/fr/n7/petrinet/toTINA/ui/Activator.java b/workspace/fr.n7.petrinet.toTINA.ui/src/fr/n7/petrinet/toTINA/ui/Activator.java new file mode 100755 index 0000000..3a27a92 --- /dev/null +++ b/workspace/fr.n7.petrinet.toTINA.ui/src/fr/n7/petrinet/toTINA/ui/Activator.java @@ -0,0 +1,66 @@ +/******************************************************************************* + * Copyright (c) 2008, 2012 Obeo. + * 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: + * Obeo - initial API and implementation + *******************************************************************************/ +package fr.n7.petrinet.toTINA.ui; + +import org.eclipse.ui.plugin.AbstractUIPlugin; +import org.osgi.framework.BundleContext; + +/** + * The activator class controls the plug-in life cycle. + */ +public class Activator extends AbstractUIPlugin { + + /** + * The plug-in ID. + */ + public static final String PLUGIN_ID = "fr.n7.petrinet.toTINA.ui"; + + /** + * The shared instance. + */ + private static Activator plugin; + + /** + * The constructor. + */ + public Activator() { + } + + /**{@inheritDoc} + * + * @see org.eclipse.core.runtime.Plugin#start(org.osgi.framework.BundleContext) + * @generated + */ + public void start(BundleContext context) throws Exception { + super.start(context); + plugin = this; + } + + /**{@inheritDoc} + * + * @see org.eclipse.core.runtime.Plugin#stop(org.osgi.framework.BundleContext) + * @generated + */ + public void stop(BundleContext context) throws Exception { + plugin = null; + super.stop(context); + } + + /** + * Returns the shared instance. + * + * @return the shared instance + */ + public static Activator getDefault() { + return plugin; + } + +} diff --git a/workspace/fr.n7.petrinet.toTINA.ui/src/fr/n7/petrinet/toTINA/ui/common/GenerateAll.java b/workspace/fr.n7.petrinet.toTINA.ui/src/fr/n7/petrinet/toTINA/ui/common/GenerateAll.java new file mode 100755 index 0000000..5c1db85 --- /dev/null +++ b/workspace/fr.n7.petrinet.toTINA.ui/src/fr/n7/petrinet/toTINA/ui/common/GenerateAll.java @@ -0,0 +1,86 @@ +/******************************************************************************* + * Copyright (c) 2008, 2012 Obeo. + * 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: + * Obeo - initial API and implementation + *******************************************************************************/ +package fr.n7.petrinet.toTINA.ui.common; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +import org.eclipse.emf.common.util.BasicMonitor; +import org.eclipse.core.resources.IContainer; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.emf.common.util.URI; + + +/** + * Main entry point of the 'ToTINA' generation module. + */ +public class GenerateAll { + + /** + * The model URI. + */ + private URI modelURI; + + /** + * The output folder. + */ + private IContainer targetFolder; + + /** + * The other arguments. + */ + List arguments; + + /** + * Constructor. + * + * @param modelURI + * is the URI of the model. + * @param targetFolder + * is the output folder + * @param arguments + * are the other arguments + * @throws IOException + * Thrown when the output cannot be saved. + * @generated + */ + public GenerateAll(URI modelURI, IContainer targetFolder, List arguments) { + this.modelURI = modelURI; + this.targetFolder = targetFolder; + this.arguments = arguments; + } + + /** + * Launches the generation. + * + * @param monitor + * This will be used to display progress information to the user. + * @throws IOException + * Thrown when the output cannot be saved. + * @generated + */ + public void doGenerate(IProgressMonitor monitor) throws IOException { + if (!targetFolder.getLocation().toFile().exists()) { + targetFolder.getLocation().toFile().mkdirs(); + } + + monitor.subTask("Loading..."); + fr.n7.petrinet.toTINA.main.ToTINA gen0 = new fr.n7.petrinet.toTINA.main.ToTINA(modelURI, targetFolder.getLocation().toFile(), arguments); + monitor.worked(1); + String generationID = org.eclipse.acceleo.engine.utils.AcceleoLaunchingUtil.computeUIProjectID("fr.n7.petrinet.toTINA", "fr.n7.petrinet.toTINA.main.ToTINA", modelURI.toString(), targetFolder.getFullPath().toString(), new ArrayList()); + gen0.setGenerationID(generationID); + gen0.doGenerate(BasicMonitor.toMonitor(monitor)); + + + } + +} diff --git a/workspace/fr.n7.petrinet.toTINA.ui/src/fr/n7/petrinet/toTINA/ui/popupMenus/AcceleoGenerateToTINAAction.java b/workspace/fr.n7.petrinet.toTINA.ui/src/fr/n7/petrinet/toTINA/ui/popupMenus/AcceleoGenerateToTINAAction.java new file mode 100755 index 0000000..a866ef6 --- /dev/null +++ b/workspace/fr.n7.petrinet.toTINA.ui/src/fr/n7/petrinet/toTINA/ui/popupMenus/AcceleoGenerateToTINAAction.java @@ -0,0 +1,116 @@ +/******************************************************************************* + * Copyright (c) 2008, 2012 Obeo. + * 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: + * Obeo - initial API and implementation + *******************************************************************************/ +package fr.n7.petrinet.toTINA.ui.popupMenus; + +import java.io.IOException; +import java.lang.reflect.InvocationTargetException; +import java.util.Iterator; +import java.util.List; +import java.util.ArrayList; + +import org.eclipse.core.resources.IFile; +import org.eclipse.core.resources.IContainer; +import org.eclipse.core.resources.IResource; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Status; +import org.eclipse.emf.common.util.URI; +import org.eclipse.jface.action.IAction; +import org.eclipse.jface.operation.IRunnableWithProgress; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.IStructuredSelection; +import fr.n7.petrinet.toTINA.ui.Activator; +import fr.n7.petrinet.toTINA.ui.common.GenerateAll; +import org.eclipse.ui.IActionDelegate; +import org.eclipse.ui.PlatformUI; +import org.eclipse.ui.actions.ActionDelegate; + +/** + * ToTINA code generation. + */ +public class AcceleoGenerateToTINAAction extends ActionDelegate implements IActionDelegate { + + /** + * Selected model files. + */ + protected List files; + + /**{@inheritDoc} + * + * @see org.eclipse.ui.actions.ActionDelegate#selectionChanged(org.eclipse.jface.action.IAction, org.eclipse.jface.viewers.ISelection) + * @generated + */ + @SuppressWarnings("unchecked") + public void selectionChanged(IAction action, ISelection selection) { + if (selection instanceof IStructuredSelection) { + files = ((IStructuredSelection) selection).toList(); + } + } + + /**{@inheritDoc} + * + * @see org.eclipse.ui.actions.ActionDelegate#run(org.eclipse.jface.action.IAction) + * @generated + */ + public void run(IAction action) { + if (files != null) { + IRunnableWithProgress operation = new IRunnableWithProgress() { + public void run(IProgressMonitor monitor) { + try { + Iterator filesIt = files.iterator(); + while (filesIt.hasNext()) { + IFile model = (IFile)filesIt.next(); + URI modelURI = URI.createPlatformResourceURI(model.getFullPath().toString(), true); + IContainer targetFolder = null; + try { + IContainer target = model.getProject().getFolder("src-gen"); + targetFolder = target; + GenerateAll generator = new GenerateAll(modelURI, targetFolder, getArguments()); + generator.doGenerate(monitor); + } catch (IOException e) { + IStatus status = new Status(IStatus.ERROR, Activator.PLUGIN_ID, e.getMessage(), e); + Activator.getDefault().getLog().log(status); + } finally { + if (targetFolder != null) { + targetFolder.getProject().refreshLocal(IResource.DEPTH_INFINITE, monitor); + } + } + } + } catch (CoreException e) { + IStatus status = new Status(IStatus.ERROR, Activator.PLUGIN_ID, e.getMessage(), e); + Activator.getDefault().getLog().log(status); + } + } + }; + try { + PlatformUI.getWorkbench().getProgressService().run(true, true, operation); + } catch (InvocationTargetException e) { + IStatus status = new Status(IStatus.ERROR, Activator.PLUGIN_ID, e.getMessage(), e); + Activator.getDefault().getLog().log(status); + } catch (InterruptedException e) { + IStatus status = new Status(IStatus.ERROR, Activator.PLUGIN_ID, e.getMessage(), e); + Activator.getDefault().getLog().log(status); + } + } + } + + /** + * Computes the arguments of the generator. + * + * @return the arguments + * @generated + */ + protected List getArguments() { + return new ArrayList(); + } + +} \ No newline at end of file diff --git a/workspace/fr.n7.petrinet.toTINA/.classpath b/workspace/fr.n7.petrinet.toTINA/.classpath new file mode 100755 index 0000000..91dbd49 --- /dev/null +++ b/workspace/fr.n7.petrinet.toTINA/.classpath @@ -0,0 +1,7 @@ + + + + + + + diff --git a/workspace/fr.n7.petrinet.toTINA/.project b/workspace/fr.n7.petrinet.toTINA/.project new file mode 100755 index 0000000..828c245 --- /dev/null +++ b/workspace/fr.n7.petrinet.toTINA/.project @@ -0,0 +1,50 @@ + + + fr.n7.petrinet.toTINA + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + org.eclipse.acceleo.ide.ui.acceleoBuilder + + + compilation.kind + compilation.platform.resource + + + compliance + pragmatic + + + resource.kind + xmi + + + trim-position + false + + + + + + org.eclipse.acceleo.ide.ui.acceleoNature + org.eclipse.jdt.core.javanature + org.eclipse.pde.PluginNature + + diff --git a/workspace/fr.n7.petrinet.toTINA/META-INF/MANIFEST.MF b/workspace/fr.n7.petrinet.toTINA/META-INF/MANIFEST.MF new file mode 100755 index 0000000..43907e0 --- /dev/null +++ b/workspace/fr.n7.petrinet.toTINA/META-INF/MANIFEST.MF @@ -0,0 +1,24 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: Acceleo ToTINA Module Runtime Plug-in +Bundle-SymbolicName: fr.n7.petrinet.toTINA +Bundle-Version: 1.0.0.qualifier +Bundle-Activator: fr.n7.petrinet.toTINA.Activator +Bundle-Vendor: Eclipse Modeling Project +Require-Bundle: org.eclipse.core.runtime, + org.eclipse.emf.ecore, + org.eclipse.emf.ecore, + org.eclipse.emf.ecore.xmi, + org.eclipse.ocl, + org.eclipse.ocl.ecore, + org.eclipse.acceleo.common;bundle-version="3.3.0", + org.eclipse.acceleo.model;bundle-version="3.3.0", + org.eclipse.acceleo.profiler;bundle-version="3.3.0", + org.eclipse.acceleo.engine;bundle-version="3.3.0", + com.google.guava +Bundle-RequiredExecutionEnvironment: JavaSE-11 +Bundle-ActivationPolicy: lazy +Eclipse-LazyStart: true +Export-Package: fr.n7.petrinet.toTINA.main +Import-Package: petrinet + diff --git a/workspace/fr.n7.petrinet.toTINA/bin/.gitignore b/workspace/fr.n7.petrinet.toTINA/bin/.gitignore new file mode 100644 index 0000000..44fde90 --- /dev/null +++ b/workspace/fr.n7.petrinet.toTINA/bin/.gitignore @@ -0,0 +1 @@ +/fr/ diff --git a/workspace/fr.n7.petrinet.toTINA/build.properties b/workspace/fr.n7.petrinet.toTINA/build.properties new file mode 100755 index 0000000..3230056 --- /dev/null +++ b/workspace/fr.n7.petrinet.toTINA/build.properties @@ -0,0 +1,5 @@ +source.. = src/ +output.. = bin/ +bin.includes = META-INF/,\ + . +jre.compilation.profile = JavaSE-11 diff --git a/workspace/fr.n7.petrinet.toTINA/src/fr/n7/petrinet/toTINA/Activator.java b/workspace/fr.n7.petrinet.toTINA/src/fr/n7/petrinet/toTINA/Activator.java new file mode 100755 index 0000000..50a5a2e --- /dev/null +++ b/workspace/fr.n7.petrinet.toTINA/src/fr/n7/petrinet/toTINA/Activator.java @@ -0,0 +1,66 @@ +/******************************************************************************* + * Copyright (c) 2008, 2011 Obeo. + * 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: + * Obeo - initial API and implementation + *******************************************************************************/ +package fr.n7.petrinet.toTINA; + +import org.eclipse.core.runtime.Plugin; +import org.osgi.framework.BundleContext; + +/** + * The activator class controls the plug-in life cycle. + */ +public class Activator extends Plugin { + + /** + * The plug-in ID. + */ + public static final String PLUGIN_ID = "fr.n7.petrinet.toTINA"; + + /** + * The shared instance. + */ + private static Activator plugin; + + /** + * The constructor. + */ + public Activator() { + } + + /** + * {@inheritDoc} + * + * @see org.eclipse.core.runtime.Plugin#start(org.osgi.framework.BundleContext) + */ + public void start(BundleContext context) throws Exception { + super.start(context); + plugin = this; + } + + /** + * {@inheritDoc} + * + * @see org.eclipse.core.runtime.Plugin#stop(org.osgi.framework.BundleContext) + */ + public void stop(BundleContext context) throws Exception { + plugin = null; + super.stop(context); + } + + /** + * Returns the shared instance. + * + * @return the shared instance + */ + public static Activator getDefault() { + return plugin; + } + +} diff --git a/workspace/fr.n7.petrinet.toTINA/src/fr/n7/petrinet/toTINA/main/ToTINA.java b/workspace/fr.n7.petrinet.toTINA/src/fr/n7/petrinet/toTINA/main/ToTINA.java new file mode 100755 index 0000000..c93cdbb --- /dev/null +++ b/workspace/fr.n7.petrinet.toTINA/src/fr/n7/petrinet/toTINA/main/ToTINA.java @@ -0,0 +1,417 @@ +/******************************************************************************* + * Copyright (c) 2008, 2012 Obeo. + * 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: + * Obeo - initial API and implementation + *******************************************************************************/ +package fr.n7.petrinet.toTINA.main; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +import org.eclipse.acceleo.engine.event.IAcceleoTextGenerationListener; +import org.eclipse.acceleo.engine.generation.strategy.IAcceleoGenerationStrategy; +import org.eclipse.acceleo.engine.service.AbstractAcceleoGenerator; +import org.eclipse.emf.common.util.BasicMonitor; +import org.eclipse.emf.common.util.Monitor; +import org.eclipse.emf.common.util.URI; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.resource.ResourceSet; +import petrinet.PetrinetPackage; + +/** + * Entry point of the 'ToTINA' generation module. + * + * @generated + */ +public class ToTINA extends AbstractAcceleoGenerator { + /** + * The name of the module. + * + * @generated + */ + public static final String MODULE_FILE_NAME = "/fr/n7/petrinet/toTINA/main/toTINA"; + + /** + * The name of the templates that are to be generated. + * + * @generated + */ + public static final String[] TEMPLATE_NAMES = { "networkToTINA" }; + + /** + * The list of properties files from the launch parameters (Launch configuration). + * + * @generated + */ + private List propertiesFiles = new ArrayList(); + + /** + * Allows the public constructor to be used. Note that a generator created + * this way cannot be used to launch generations before one of + * {@link #initialize(EObject, File, List)} or + * {@link #initialize(URI, File, List)} is called. + *

+ * The main reason for this constructor is to allow clients of this + * generation to call it from another Java file, as it allows for the + * retrieval of {@link #getProperties()} and + * {@link #getGenerationListeners()}. + *

+ * + * @generated + */ + public ToTINA() { + // Empty implementation + } + + /** + * This allows clients to instantiates a generator with all required information. + * + * @param modelURI + * URI where the model on which this generator will be used is located. + * @param targetFolder + * This will be used as the output folder for this generation : it will be the base path + * against which all file block URLs will be resolved. + * @param arguments + * If the template which will be called requires more than one argument taken from the model, + * pass them here. + * @throws IOException + * This can be thrown in three scenarios : the module cannot be found, it cannot be loaded, or + * the model cannot be loaded. + * @generated + */ + public ToTINA(URI modelURI, File targetFolder, + List arguments) throws IOException { + initialize(modelURI, targetFolder, arguments); + } + + /** + * This allows clients to instantiates a generator with all required information. + * + * @param model + * We'll iterate over the content of this element to find Objects matching the first parameter + * of the template we need to call. + * @param targetFolder + * This will be used as the output folder for this generation : it will be the base path + * against which all file block URLs will be resolved. + * @param arguments + * If the template which will be called requires more than one argument taken from the model, + * pass them here. + * @throws IOException + * This can be thrown in two scenarios : the module cannot be found, or it cannot be loaded. + * @generated + */ + public ToTINA(EObject model, File targetFolder, + List arguments) throws IOException { + initialize(model, targetFolder, arguments); + } + + /** + * This can be used to launch the generation from a standalone application. + * + * @param args + * Arguments of the generation. + * @generated + */ + public static void main(String[] args) { + try { + if (args.length < 2) { + System.out.println("Arguments not valid : {model, folder}."); + } else { + URI modelURI = URI.createFileURI(args[0]); + File folder = new File(args[1]); + + List arguments = new ArrayList(); + + /* + * If you want to change the content of this method, do NOT forget to change the "@generated" + * tag in the Javadoc of this method to "@generated NOT". Without this new tag, any compilation + * of the Acceleo module with the main template that has caused the creation of this class will + * revert your modifications. + */ + + /* + * Add in this list all the arguments used by the starting point of the generation + * If your main template is called on an element of your model and a String, you can + * add in "arguments" this "String" attribute. + */ + + ToTINA generator = new ToTINA(modelURI, folder, arguments); + + /* + * Add the properties from the launch arguments. + * If you want to programmatically add new properties, add them in "propertiesFiles" + * You can add the absolute path of a properties files, or even a project relative path. + * If you want to add another "protocol" for your properties files, please override + * "getPropertiesLoaderService(AcceleoService)" in order to return a new property loader. + * The behavior of the properties loader service is explained in the Acceleo documentation + * (Help -> Help Contents). + */ + + for (int i = 2; i < args.length; i++) { + generator.addPropertiesFile(args[i]); + } + + generator.doGenerate(new BasicMonitor()); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + + /** + * Launches the generation described by this instance. + * + * @param monitor + * This will be used to display progress information to the user. + * @throws IOException + * This will be thrown if any of the output files cannot be saved to disk. + * @generated + */ + @Override + public void doGenerate(Monitor monitor) throws IOException { + /* + * TODO if you wish to change the generation as a whole, override this. The default behavior should + * be sufficient in most cases. If you want to change the content of this method, do NOT forget to + * change the "@generated" tag in the Javadoc of this method to "@generated NOT". Without this new tag, + * any compilation of the Acceleo module with the main template that has caused the creation of this + * class will revert your modifications. If you encounter a problem with an unresolved proxy during the + * generation, you can remove the comments in the following instructions to check for problems. Please + * note that those instructions may have a significant impact on the performances. + */ + + //org.eclipse.emf.ecore.util.EcoreUtil.resolveAll(model); + + /* + * If you want to check for potential errors in your models before the launch of the generation, you + * use the code below. + */ + + //if (model != null && model.eResource() != null) { + // List errors = model.eResource().getErrors(); + // for (org.eclipse.emf.ecore.resource.Resource.Diagnostic diagnostic : errors) { + // System.err.println(diagnostic.toString()); + // } + //} + + super.doGenerate(monitor); + } + + /** + * If this generator needs to listen to text generation events, listeners can be returned from here. + * + * @return List of listeners that are to be notified when text is generated through this launch. + * @generated + */ + @Override + public List getGenerationListeners() { + List listeners = super.getGenerationListeners(); + /* + * TODO if you need to listen to generation event, add listeners to the list here. If you want to change + * the content of this method, do NOT forget to change the "@generated" tag in the Javadoc of this method + * to "@generated NOT". Without this new tag, any compilation of the Acceleo module with the main template + * that has caused the creation of this class will revert your modifications. + */ + return listeners; + } + + /** + * If you need to change the way files are generated, this is your entry point. + *

+ * The default is {@link org.eclipse.acceleo.engine.generation.strategy.DefaultStrategy}; it generates + * files on the fly. If you only need to preview the results, return a new + * {@link org.eclipse.acceleo.engine.generation.strategy.PreviewStrategy}. Both of these aren't aware of + * the running Eclipse and can be used standalone. + *

+ *

+ * If you need the file generation to be aware of the workspace (A typical example is when you wanna + * override files that are under clear case or any other VCS that could forbid the overriding), then + * return a new {@link org.eclipse.acceleo.engine.generation.strategy.WorkspaceAwareStrategy}. + * Note, however, that this cannot be used standalone. + *

+ *

+ * All three of these default strategies support merging through JMerge. + *

+ * + * @return The generation strategy that is to be used for generations launched through this launcher. + * @generated + */ + @Override + public IAcceleoGenerationStrategy getGenerationStrategy() { + return super.getGenerationStrategy(); + } + + /** + * This will be called in order to find and load the module that will be launched through this launcher. + * We expect this name not to contain file extension, and the module to be located beside the launcher. + * + * @return The name of the module that is to be launched. + * @generated + */ + @Override + public String getModuleName() { + return MODULE_FILE_NAME; + } + + /** + * If the module(s) called by this launcher require properties files, return their qualified path from + * here.Take note that the first added properties files will take precedence over subsequent ones if they + * contain conflicting keys. + * + * @return The list of properties file we need to add to the generation context. + * @see java.util.ResourceBundle#getBundle(String) + * @generated + */ + @Override + public List getProperties() { + /* + * If you want to change the content of this method, do NOT forget to change the "@generated" + * tag in the Javadoc of this method to "@generated NOT". Without this new tag, any compilation + * of the Acceleo module with the main template that has caused the creation of this class will + * revert your modifications. + */ + + /* + * TODO if your generation module requires access to properties files, add their qualified path to the list here. + * + * Properties files can be located in an Eclipse plug-in or in the file system (all Acceleo projects are Eclipse + * plug-in). In order to use properties files located in an Eclipse plugin, you need to add the path of the properties + * files to the "propertiesFiles" list: + * + * final String prefix = "platform:/plugin/"; + * final String pluginName = "org.eclipse.acceleo.module.sample"; + * final String packagePath = "/org/eclipse/acceleo/module/sample/properties/"; + * final String fileName = "default.properties"; + * propertiesFiles.add(prefix + pluginName + packagePath + fileName); + * + * With this mechanism, you can load properties files from your plugin or from another plugin. + * + * You may want to load properties files from the file system, for that you need to add the absolute path of the file: + * + * propertiesFiles.add("C:\Users\MyName\MyFile.properties"); + * + * If you want to let your users add properties files located in the same folder as the model: + * + * if (EMFPlugin.IS_ECLIPSE_RUNNING && model != null && model.eResource() != null) { + * propertiesFiles.addAll(AcceleoEngineUtils.getPropertiesFilesNearModel(model.eResource())); + * } + * + * To learn more about Properties Files, have a look at the Acceleo documentation (Help -> Help Contents). + */ + return propertiesFiles; + } + + /** + * Adds a properties file in the list of properties files. + * + * @param propertiesFile + * The properties file to add. + * @generated + * @since 3.1 + */ + @Override + public void addPropertiesFile(String propertiesFile) { + this.propertiesFiles.add(propertiesFile); + } + + /** + * This will be used to get the list of templates that are to be launched by this launcher. + * + * @return The list of templates to call on the module {@link #getModuleName()}. + * @generated + */ + @Override + public String[] getTemplateNames() { + return TEMPLATE_NAMES; + } + + /** + * This can be used to update the resource set's package registry with all needed EPackages. + * + * @param resourceSet + * The resource set which registry has to be updated. + * @generated NOT + */ + @Override + public void registerPackages(ResourceSet resourceSet) { + super.registerPackages(resourceSet); + + if (!isInWorkspace(PetrinetPackage.class)) + resourceSet.getPackageRegistry().put( + PetrinetPackage.eNS_URI, PetrinetPackage.eINSTANCE); + + /* + * If you want to change the content of this method, do NOT forget to change the "@generated" + * tag in the Javadoc of this method to "@generated NOT". Without this new tag, any compilation + * of the Acceleo module with the main template that has caused the creation of this class will + * revert your modifications. + */ + + /* + * If you need additional package registrations, you can register them here. The following line + * (in comment) is an example of the package registration for UML. + * + * You can use the method "isInWorkspace(Class c)" to check if the package that you are about to + * register is in the workspace. + * + * To register a package properly, please follow the following conventions: + * + * If the package is located in another plug-in, already installed in Eclipse. The following content should + * have been generated at the beginning of this method. Do not register the package using this mechanism if + * the metamodel is located in the workspace. + * + * if (!isInWorkspace(UMLPackage.class)) { + * // The normal package registration if your metamodel is in a plugin. + * resourceSet.getPackageRegistry().put(UMLPackage.eNS_URI, UMLPackage.eINSTANCE); + * } + * + * If the package is located in another project in your workspace, the plugin containing the package has not + * been register by EMF and Acceleo should register it automatically. If you want to use the generator in + * stand alone, the regular registration (seen a couple lines before) is needed. + * + * To learn more about Package Registration, have a look at the Acceleo documentation (Help -> Help Contents). + */ + } + + /** + * This can be used to update the resource set's resource factory registry with all needed factories. + * + * @param resourceSet + * The resource set which registry has to be updated. + * @generated + */ + @Override + public void registerResourceFactories(ResourceSet resourceSet) { + super.registerResourceFactories(resourceSet); + /* + * If you want to change the content of this method, do NOT forget to change the "@generated" + * tag in the Javadoc of this method to "@generated NOT". Without this new tag, any compilation + * of the Acceleo module with the main template that has caused the creation of this class will + * revert your modifications. + */ + + /* + * TODO If you need additional resource factories registrations, you can register them here. the following line + * (in comment) is an example of the resource factory registration. + * + * If you want to use the generator in stand alone, the resource factory registration will be required. + * + * To learn more about the registration of Resource Factories, have a look at the Acceleo documentation (Help -> Help Contents). + */ + + // resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put(XyzResource.FILE_EXTENSION, XyzResource.Factory.INSTANCE); + + /* + * Some metamodels require a very complex setup for standalone usage. For example, if you want to use a generator + * targetting UML models in standalone, you NEED to use the following: + */ + // UMLResourcesUtil.init(resourceSet) + } + +} diff --git a/workspace/fr.n7.petrinet.toTINA/src/fr/n7/petrinet/toTINA/main/toTINA.mtl b/workspace/fr.n7.petrinet.toTINA/src/fr/n7/petrinet/toTINA/main/toTINA.mtl new file mode 100755 index 0000000..601544f --- /dev/null +++ b/workspace/fr.n7.petrinet.toTINA/src/fr/n7/petrinet/toTINA/main/toTINA.mtl @@ -0,0 +1,44 @@ +[comment encoding = UTF-8 /] +[module toTINA('http://petrinet')] + +[template public networkToTINA(aNetwork : Network)] +[comment @main/] +[file (aNetwork.name + '.net', false, 'UTF-8')] +net [aNetwork.name/] +[let places : OrderedSet(Place) = aNetwork.getPlaces() ] + [if (places->size() > 0)] + [for (place : Place | places)] +pl [place.name/] ([place.tokens/]) + [/for] + [else] + [/if] +[/let] +[let transitions : OrderedSet(Transition) = aNetwork.getTransitions() ] + [if (transitions->size() > 0)] + [for (transition : Transition | transitions)] +[transition.afficher()/] + [/for] + [else] + [/if] +[/let] +[/file] +[/template] + +[query public getPlaces(n: Network) : OrderedSet(Place) = + n.nodes + ->select( e | e.oclIsTypeOf(Place) ) + ->collect( e | e.oclAsType(Place) ) + ->asOrderedSet() +/] + +[query public getTransitions(n: Network) : OrderedSet(Transition) = + n.nodes + ->select( e | e.oclIsTypeOf(Transition) ) + ->collect( e | e.oclAsType(Transition) ) + ->asOrderedSet() +/] + +[template public afficher(t : Transition) post (trim()) ] +[comment][let outgoing = t.getArcs()->select( e | e.isOutgoing() ) /][/comment] +tr [t.name/] [for (a : Arc | t.arcs)][if (not a.outgoing)][a.place.name/]*[a.weight/] [/if][/for]-> [for (a : Arc | t.arcs)][if (a.outgoing)][a.place.name/]*[a.weight/] [/if][/for] +[/template] \ No newline at end of file diff --git a/workspace/fr.n7.petrinet.toTINA/tasks/toTINA.xml b/workspace/fr.n7.petrinet.toTINA/tasks/toTINA.xml new file mode 100755 index 0000000..46dfe00 --- /dev/null +++ b/workspace/fr.n7.petrinet.toTINA/tasks/toTINA.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/workspace/fr.n7.petrinet.toTINA/tasks/toTINATarget.xml b/workspace/fr.n7.petrinet.toTINA/tasks/toTINATarget.xml new file mode 100755 index 0000000..4ddac80 --- /dev/null +++ b/workspace/fr.n7.petrinet.toTINA/tasks/toTINATarget.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/workspace/fr.n7.petrinet/.classpath b/workspace/fr.n7.petrinet/.classpath new file mode 100755 index 0000000..c3ba59e --- /dev/null +++ b/workspace/fr.n7.petrinet/.classpath @@ -0,0 +1,7 @@ + + + + + + + diff --git a/workspace/fr.n7.petrinet/.project b/workspace/fr.n7.petrinet/.project new file mode 100755 index 0000000..8230b7d --- /dev/null +++ b/workspace/fr.n7.petrinet/.project @@ -0,0 +1,50 @@ + + + fr.n7.petrinet + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.ocl.pivot.ui.oclbuilder + + + disabledExtensions + *,essentialocl + + + disabledPaths + bin/**,target/** + + + enabledExtensions + ecore,ocl,oclinecore,oclstdlib,uml + + + enabledPaths + ** + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + + org.eclipse.ocl.pivot.ui.oclnature + org.eclipse.jdt.core.javanature + org.eclipse.pde.PluginNature + + diff --git a/workspace/fr.n7.petrinet/META-INF/MANIFEST.MF b/workspace/fr.n7.petrinet/META-INF/MANIFEST.MF new file mode 100755 index 0000000..d701b53 --- /dev/null +++ b/workspace/fr.n7.petrinet/META-INF/MANIFEST.MF @@ -0,0 +1,16 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: %pluginName +Bundle-SymbolicName: fr.n7.petrinet;singleton:=true +Automatic-Module-Name: fr.n7.petrinet +Bundle-Version: 1.0.0.qualifier +Bundle-ClassPath: . +Bundle-Vendor: %providerName +Bundle-Localization: plugin +Bundle-RequiredExecutionEnvironment: J2SE-1.5 +Export-Package: petrinet, + petrinet.impl, + petrinet.util +Require-Bundle: org.eclipse.core.runtime, + org.eclipse.emf.ecore;visibility:=reexport +Bundle-ActivationPolicy: lazy diff --git a/workspace/fr.n7.petrinet/bin/.gitignore b/workspace/fr.n7.petrinet/bin/.gitignore new file mode 100644 index 0000000..79b56a6 --- /dev/null +++ b/workspace/fr.n7.petrinet/bin/.gitignore @@ -0,0 +1 @@ +/petrinet/ diff --git a/workspace/fr.n7.petrinet/build.properties b/workspace/fr.n7.petrinet/build.properties new file mode 100755 index 0000000..4465407 --- /dev/null +++ b/workspace/fr.n7.petrinet/build.properties @@ -0,0 +1,10 @@ +# + +bin.includes = .,\ + model/,\ + META-INF/,\ + plugin.xml,\ + plugin.properties +jars.compile.order = . +source.. = src/ +output.. = bin/ diff --git a/workspace/fr.n7.petrinet/ko-net.xmi b/workspace/fr.n7.petrinet/ko-net.xmi new file mode 100755 index 0000000..da35c62 --- /dev/null +++ b/workspace/fr.n7.petrinet/ko-net.xmi @@ -0,0 +1,26 @@ + + + + + + + + + + diff --git a/workspace/fr.n7.petrinet/net.xmi b/workspace/fr.n7.petrinet/net.xmi new file mode 100755 index 0000000..ff67c65 --- /dev/null +++ b/workspace/fr.n7.petrinet/net.xmi @@ -0,0 +1,22 @@ + + + + + + + + + diff --git a/workspace/fr.n7.petrinet/petriNet.aird b/workspace/fr.n7.petrinet/petriNet.aird new file mode 100755 index 0000000..8d6e5bf --- /dev/null +++ b/workspace/fr.n7.petrinet/petriNet.aird @@ -0,0 +1,367 @@ + + + + petriNet.ecore + petriNet.genmodel + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + bold + + + + + + + + + + + + + + + + bold + + + + bold + + + + + + + + + KEEP_LOCATION + KEEP_SIZE + KEEP_RATIO + + + + + + + + + bold + + + + + + + + KEEP_LOCATION + KEEP_SIZE + KEEP_RATIO + + italic + + + + + + + + bold + + + + + + + + KEEP_LOCATION + KEEP_SIZE + KEEP_RATIO + + + + + + + + + bold + + + + + + + + KEEP_LOCATION + KEEP_SIZE + KEEP_RATIO + + + + + + + + + bold + + + + + + + + bold + + + + + + + + KEEP_LOCATION + KEEP_SIZE + KEEP_RATIO + + + + + + + + + + + + italic + + + + + + + + + + + + italic + + + + + + + + + + + + + + + + + + + + + + bold + + + bold + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/workspace/fr.n7.petrinet/petriNet.ecore b/workspace/fr.n7.petrinet/petriNet.ecore new file mode 100755 index 0000000..18832c8 --- /dev/null +++ b/workspace/fr.n7.petrinet/petriNet.ecore @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/workspace/fr.n7.petrinet/petriNet.genmodel b/workspace/fr.n7.petrinet/petriNet.genmodel new file mode 100755 index 0000000..1e661ee --- /dev/null +++ b/workspace/fr.n7.petrinet/petriNet.genmodel @@ -0,0 +1,31 @@ + + + petriNet.ecore + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/workspace/fr.n7.petrinet/petriNet.ocl b/workspace/fr.n7.petrinet/petriNet.ocl new file mode 100755 index 0000000..f44a2e3 --- /dev/null +++ b/workspace/fr.n7.petrinet/petriNet.ocl @@ -0,0 +1,21 @@ +import 'petriNet.ecore' + +package petrinet + +context Network +inv validName('Invalid name: ' + self.name): + self.name.matches('[A-Za-z_][A-Za-z0-9_]*') +inv uniqNamesNode: self.nodes + ->forAll(n1, n2 | n1 = n2 or n1.name <> n2.name) + +context Node +inv nameMin2Char: self.name.matches('..+') +inv weirdName: not self.name.matches('([0-9]*|_*)') + +context Place +inv negativeQuantity: self.tokens >= 0 + +context Arc +inv negativeQuantity: self.weight >= 0 + +endpackage \ No newline at end of file diff --git a/workspace/fr.n7.petrinet/petriNet.png b/workspace/fr.n7.petrinet/petriNet.png new file mode 100755 index 0000000000000000000000000000000000000000..ec8af88a71740a03ce0b3a282db9af8d4020b6b0 GIT binary patch literal 263236 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 wO&1#f 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∓S>m>^t>oE}7qPF7@Y1JL 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 I?fRep2XB7@T>t<8 literal 0 HcmV?d00001 diff --git a/workspace/fr.n7.petrinet/plugin.properties b/workspace/fr.n7.petrinet/plugin.properties new file mode 100755 index 0000000..302299f --- /dev/null +++ b/workspace/fr.n7.petrinet/plugin.properties @@ -0,0 +1,4 @@ +# + +pluginName = Petrinet Model +providerName = www.example.org diff --git a/workspace/fr.n7.petrinet/plugin.xml b/workspace/fr.n7.petrinet/plugin.xml new file mode 100755 index 0000000..c87d55c --- /dev/null +++ b/workspace/fr.n7.petrinet/plugin.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + diff --git a/workspace/fr.n7.petrinet/src/petrinet/Arc.java b/workspace/fr.n7.petrinet/src/petrinet/Arc.java new file mode 100755 index 0000000..75c7d24 --- /dev/null +++ b/workspace/fr.n7.petrinet/src/petrinet/Arc.java @@ -0,0 +1,119 @@ +/** + */ +package petrinet; + +import org.eclipse.emf.ecore.EObject; + +/** + * + * A representation of the model object 'Arc'. + * + * + *

+ * The following features are supported: + *

+ *
    + *
  • {@link petrinet.Arc#getWeight Weight}
  • + *
  • {@link petrinet.Arc#isOutgoing Outgoing}
  • + *
  • {@link petrinet.Arc#getPlace Place}
  • + *
  • {@link petrinet.Arc#getTransition Transition}
  • + *
+ * + * @see petrinet.PetrinetPackage#getArc() + * @model + * @generated + */ +public interface Arc extends EObject { + /** + * Returns the value of the 'Weight' attribute. + * + * + * @return the value of the 'Weight' attribute. + * @see #setWeight(int) + * @see petrinet.PetrinetPackage#getArc_Weight() + * @model required="true" + * @generated + */ + int getWeight(); + + /** + * Sets the value of the '{@link petrinet.Arc#getWeight Weight}' attribute. + * + * + * @param value the new value of the 'Weight' attribute. + * @see #getWeight() + * @generated + */ + void setWeight(int value); + + /** + * Returns the value of the 'Outgoing' attribute. + * + * + * @return the value of the 'Outgoing' attribute. + * @see #setOutgoing(boolean) + * @see petrinet.PetrinetPackage#getArc_Outgoing() + * @model required="true" + * @generated + */ + boolean isOutgoing(); + + /** + * Sets the value of the '{@link petrinet.Arc#isOutgoing Outgoing}' attribute. + * + * + * @param value the new value of the 'Outgoing' attribute. + * @see #isOutgoing() + * @generated + */ + void setOutgoing(boolean value); + + /** + * Returns the value of the 'Place' reference. + * It is bidirectional and its opposite is '{@link petrinet.Place#getArcs Arcs}'. + * + * + * @return the value of the 'Place' reference. + * @see #setPlace(Place) + * @see petrinet.PetrinetPackage#getArc_Place() + * @see petrinet.Place#getArcs + * @model opposite="arcs" required="true" + * @generated + */ + Place getPlace(); + + /** + * Sets the value of the '{@link petrinet.Arc#getPlace Place}' reference. + * + * + * @param value the new value of the 'Place' reference. + * @see #getPlace() + * @generated + */ + void setPlace(Place value); + + /** + * Returns the value of the 'Transition' container reference. + * It is bidirectional and its opposite is '{@link petrinet.Transition#getArcs Arcs}'. + * + * + * @return the value of the 'Transition' container reference. + * @see #setTransition(Transition) + * @see petrinet.PetrinetPackage#getArc_Transition() + * @see petrinet.Transition#getArcs + * @model opposite="arcs" required="true" transient="false" + * @generated + */ + Transition getTransition(); + + /** + * Sets the value of the '{@link petrinet.Arc#getTransition Transition}' container reference. + * + * + * @param value the new value of the 'Transition' container reference. + * @see #getTransition() + * @generated + */ + void setTransition(Transition value); + +} // Arc diff --git a/workspace/fr.n7.petrinet/src/petrinet/Network.java b/workspace/fr.n7.petrinet/src/petrinet/Network.java new file mode 100755 index 0000000..cdc1868 --- /dev/null +++ b/workspace/fr.n7.petrinet/src/petrinet/Network.java @@ -0,0 +1,63 @@ +/** + */ +package petrinet; + +import org.eclipse.emf.common.util.EList; + +import org.eclipse.emf.ecore.EObject; + +/** + * + * A representation of the model object 'Network'. + * + * + *

+ * The following features are supported: + *

+ *
    + *
  • {@link petrinet.Network#getName Name}
  • + *
  • {@link petrinet.Network#getNodes Nodes}
  • + *
+ * + * @see petrinet.PetrinetPackage#getNetwork() + * @model + * @generated + */ +public interface Network extends EObject { + /** + * Returns the value of the 'Name' attribute. + * + * + * @return the value of the 'Name' attribute. + * @see #setName(String) + * @see petrinet.PetrinetPackage#getNetwork_Name() + * @model required="true" + * @generated + */ + String getName(); + + /** + * Sets the value of the '{@link petrinet.Network#getName Name}' attribute. + * + * + * @param value the new value of the 'Name' attribute. + * @see #getName() + * @generated + */ + void setName(String value); + + /** + * Returns the value of the 'Nodes' containment reference list. + * The list contents are of type {@link petrinet.Node}. + * It is bidirectional and its opposite is '{@link petrinet.Node#getNetwork Network}'. + * + * + * @return the value of the 'Nodes' containment reference list. + * @see petrinet.PetrinetPackage#getNetwork_Nodes() + * @see petrinet.Node#getNetwork + * @model opposite="network" containment="true" + * @generated + */ + EList getNodes(); + +} // Network diff --git a/workspace/fr.n7.petrinet/src/petrinet/Node.java b/workspace/fr.n7.petrinet/src/petrinet/Node.java new file mode 100755 index 0000000..a97e9a9 --- /dev/null +++ b/workspace/fr.n7.petrinet/src/petrinet/Node.java @@ -0,0 +1,71 @@ +/** + */ +package petrinet; + +import org.eclipse.emf.ecore.EObject; + +/** + * + * A representation of the model object 'Node'. + * + * + *

+ * The following features are supported: + *

+ *
    + *
  • {@link petrinet.Node#getName Name}
  • + *
  • {@link petrinet.Node#getNetwork Network}
  • + *
+ * + * @see petrinet.PetrinetPackage#getNode() + * @model abstract="true" + * @generated + */ +public interface Node extends EObject { + /** + * Returns the value of the 'Name' attribute. + * + * + * @return the value of the 'Name' attribute. + * @see #setName(String) + * @see petrinet.PetrinetPackage#getNode_Name() + * @model required="true" + * @generated + */ + String getName(); + + /** + * Sets the value of the '{@link petrinet.Node#getName Name}' attribute. + * + * + * @param value the new value of the 'Name' attribute. + * @see #getName() + * @generated + */ + void setName(String value); + + /** + * Returns the value of the 'Network' container reference. + * It is bidirectional and its opposite is '{@link petrinet.Network#getNodes Nodes}'. + * + * + * @return the value of the 'Network' container reference. + * @see #setNetwork(Network) + * @see petrinet.PetrinetPackage#getNode_Network() + * @see petrinet.Network#getNodes + * @model opposite="nodes" required="true" transient="false" + * @generated + */ + Network getNetwork(); + + /** + * Sets the value of the '{@link petrinet.Node#getNetwork Network}' container reference. + * + * + * @param value the new value of the 'Network' container reference. + * @see #getNetwork() + * @generated + */ + void setNetwork(Network value); + +} // Node diff --git a/workspace/fr.n7.petrinet/src/petrinet/PetrinetFactory.java b/workspace/fr.n7.petrinet/src/petrinet/PetrinetFactory.java new file mode 100755 index 0000000..ec53b65 --- /dev/null +++ b/workspace/fr.n7.petrinet/src/petrinet/PetrinetFactory.java @@ -0,0 +1,69 @@ +/** + */ +package petrinet; + +import org.eclipse.emf.ecore.EFactory; + +/** + * + * The Factory for the model. + * It provides a create method for each non-abstract class of the model. + * + * @see petrinet.PetrinetPackage + * @generated + */ +public interface PetrinetFactory extends EFactory { + /** + * The singleton instance of the factory. + * + * + * @generated + */ + PetrinetFactory eINSTANCE = petrinet.impl.PetrinetFactoryImpl.init(); + + /** + * Returns a new object of class 'Network'. + * + * + * @return a new object of class 'Network'. + * @generated + */ + Network createNetwork(); + + /** + * Returns a new object of class 'Place'. + * + * + * @return a new object of class 'Place'. + * @generated + */ + Place createPlace(); + + /** + * Returns a new object of class 'Arc'. + * + * + * @return a new object of class 'Arc'. + * @generated + */ + Arc createArc(); + + /** + * Returns a new object of class 'Transition'. + * + * + * @return a new object of class 'Transition'. + * @generated + */ + Transition createTransition(); + + /** + * Returns the package supported by this factory. + * + * + * @return the package supported by this factory. + * @generated + */ + PetrinetPackage getPetrinetPackage(); + +} //PetrinetFactory diff --git a/workspace/fr.n7.petrinet/src/petrinet/PetrinetPackage.java b/workspace/fr.n7.petrinet/src/petrinet/PetrinetPackage.java new file mode 100755 index 0000000..9f214ca --- /dev/null +++ b/workspace/fr.n7.petrinet/src/petrinet/PetrinetPackage.java @@ -0,0 +1,669 @@ +/** + */ +package petrinet; + +import org.eclipse.emf.ecore.EAttribute; +import org.eclipse.emf.ecore.EClass; +import org.eclipse.emf.ecore.EPackage; +import org.eclipse.emf.ecore.EReference; + +/** + * + * The Package for the model. + * It contains accessors for the meta objects to represent + *
    + *
  • each class,
  • + *
  • each feature of each class,
  • + *
  • each operation of each class,
  • + *
  • each enum,
  • + *
  • and each data type
  • + *
+ * + * @see petrinet.PetrinetFactory + * @model kind="package" + * @generated + */ +public interface PetrinetPackage extends EPackage { + /** + * The package name. + * + * + * @generated + */ + String eNAME = "petrinet"; + + /** + * The package namespace URI. + * + * + * @generated + */ + String eNS_URI = "http://petrinet"; + + /** + * The package namespace name. + * + * + * @generated + */ + String eNS_PREFIX = "petrinet"; + + /** + * The singleton instance of the package. + * + * + * @generated + */ + PetrinetPackage eINSTANCE = petrinet.impl.PetrinetPackageImpl.init(); + + /** + * The meta object id for the '{@link petrinet.impl.NetworkImpl Network}' class. + * + * + * @see petrinet.impl.NetworkImpl + * @see petrinet.impl.PetrinetPackageImpl#getNetwork() + * @generated + */ + int NETWORK = 0; + + /** + * The feature id for the 'Name' attribute. + * + * + * @generated + * @ordered + */ + int NETWORK__NAME = 0; + + /** + * The feature id for the 'Nodes' containment reference list. + * + * + * @generated + * @ordered + */ + int NETWORK__NODES = 1; + + /** + * The number of structural features of the 'Network' class. + * + * + * @generated + * @ordered + */ + int NETWORK_FEATURE_COUNT = 2; + + /** + * The number of operations of the 'Network' class. + * + * + * @generated + * @ordered + */ + int NETWORK_OPERATION_COUNT = 0; + + /** + * The meta object id for the '{@link petrinet.impl.NodeImpl Node}' class. + * + * + * @see petrinet.impl.NodeImpl + * @see petrinet.impl.PetrinetPackageImpl#getNode() + * @generated + */ + int NODE = 1; + + /** + * The feature id for the 'Name' attribute. + * + * + * @generated + * @ordered + */ + int NODE__NAME = 0; + + /** + * The feature id for the 'Network' container reference. + * + * + * @generated + * @ordered + */ + int NODE__NETWORK = 1; + + /** + * The number of structural features of the 'Node' class. + * + * + * @generated + * @ordered + */ + int NODE_FEATURE_COUNT = 2; + + /** + * The number of operations of the 'Node' class. + * + * + * @generated + * @ordered + */ + int NODE_OPERATION_COUNT = 0; + + /** + * The meta object id for the '{@link petrinet.impl.PlaceImpl Place}' class. + * + * + * @see petrinet.impl.PlaceImpl + * @see petrinet.impl.PetrinetPackageImpl#getPlace() + * @generated + */ + int PLACE = 2; + + /** + * The feature id for the 'Name' attribute. + * + * + * @generated + * @ordered + */ + int PLACE__NAME = NODE__NAME; + + /** + * The feature id for the 'Network' container reference. + * + * + * @generated + * @ordered + */ + int PLACE__NETWORK = NODE__NETWORK; + + /** + * The feature id for the 'Tokens' attribute. + * + * + * @generated + * @ordered + */ + int PLACE__TOKENS = NODE_FEATURE_COUNT + 0; + + /** + * The feature id for the 'Arcs' reference list. + * + * + * @generated + * @ordered + */ + int PLACE__ARCS = NODE_FEATURE_COUNT + 1; + + /** + * The number of structural features of the 'Place' class. + * + * + * @generated + * @ordered + */ + int PLACE_FEATURE_COUNT = NODE_FEATURE_COUNT + 2; + + /** + * The number of operations of the 'Place' class. + * + * + * @generated + * @ordered + */ + int PLACE_OPERATION_COUNT = NODE_OPERATION_COUNT + 0; + + /** + * The meta object id for the '{@link petrinet.impl.ArcImpl Arc}' class. + * + * + * @see petrinet.impl.ArcImpl + * @see petrinet.impl.PetrinetPackageImpl#getArc() + * @generated + */ + int ARC = 3; + + /** + * The feature id for the 'Weight' attribute. + * + * + * @generated + * @ordered + */ + int ARC__WEIGHT = 0; + + /** + * The feature id for the 'Outgoing' attribute. + * + * + * @generated + * @ordered + */ + int ARC__OUTGOING = 1; + + /** + * The feature id for the 'Place' reference. + * + * + * @generated + * @ordered + */ + int ARC__PLACE = 2; + + /** + * The feature id for the 'Transition' container reference. + * + * + * @generated + * @ordered + */ + int ARC__TRANSITION = 3; + + /** + * The number of structural features of the 'Arc' class. + * + * + * @generated + * @ordered + */ + int ARC_FEATURE_COUNT = 4; + + /** + * The number of operations of the 'Arc' class. + * + * + * @generated + * @ordered + */ + int ARC_OPERATION_COUNT = 0; + + /** + * The meta object id for the '{@link petrinet.impl.TransitionImpl Transition}' class. + * + * + * @see petrinet.impl.TransitionImpl + * @see petrinet.impl.PetrinetPackageImpl#getTransition() + * @generated + */ + int TRANSITION = 4; + + /** + * The feature id for the 'Name' attribute. + * + * + * @generated + * @ordered + */ + int TRANSITION__NAME = NODE__NAME; + + /** + * The feature id for the 'Network' container reference. + * + * + * @generated + * @ordered + */ + int TRANSITION__NETWORK = NODE__NETWORK; + + /** + * The feature id for the 'Arcs' containment reference list. + * + * + * @generated + * @ordered + */ + int TRANSITION__ARCS = NODE_FEATURE_COUNT + 0; + + /** + * The number of structural features of the 'Transition' class. + * + * + * @generated + * @ordered + */ + int TRANSITION_FEATURE_COUNT = NODE_FEATURE_COUNT + 1; + + /** + * The number of operations of the 'Transition' class. + * + * + * @generated + * @ordered + */ + int TRANSITION_OPERATION_COUNT = NODE_OPERATION_COUNT + 0; + + + /** + * Returns the meta object for class '{@link petrinet.Network Network}'. + * + * + * @return the meta object for class 'Network'. + * @see petrinet.Network + * @generated + */ + EClass getNetwork(); + + /** + * Returns the meta object for the attribute '{@link petrinet.Network#getName Name}'. + * + * + * @return the meta object for the attribute 'Name'. + * @see petrinet.Network#getName() + * @see #getNetwork() + * @generated + */ + EAttribute getNetwork_Name(); + + /** + * Returns the meta object for the containment reference list '{@link petrinet.Network#getNodes Nodes}'. + * + * + * @return the meta object for the containment reference list 'Nodes'. + * @see petrinet.Network#getNodes() + * @see #getNetwork() + * @generated + */ + EReference getNetwork_Nodes(); + + /** + * Returns the meta object for class '{@link petrinet.Node Node}'. + * + * + * @return the meta object for class 'Node'. + * @see petrinet.Node + * @generated + */ + EClass getNode(); + + /** + * Returns the meta object for the attribute '{@link petrinet.Node#getName Name}'. + * + * + * @return the meta object for the attribute 'Name'. + * @see petrinet.Node#getName() + * @see #getNode() + * @generated + */ + EAttribute getNode_Name(); + + /** + * Returns the meta object for the container reference '{@link petrinet.Node#getNetwork Network}'. + * + * + * @return the meta object for the container reference 'Network'. + * @see petrinet.Node#getNetwork() + * @see #getNode() + * @generated + */ + EReference getNode_Network(); + + /** + * Returns the meta object for class '{@link petrinet.Place Place}'. + * + * + * @return the meta object for class 'Place'. + * @see petrinet.Place + * @generated + */ + EClass getPlace(); + + /** + * Returns the meta object for the attribute '{@link petrinet.Place#getTokens Tokens}'. + * + * + * @return the meta object for the attribute 'Tokens'. + * @see petrinet.Place#getTokens() + * @see #getPlace() + * @generated + */ + EAttribute getPlace_Tokens(); + + /** + * Returns the meta object for the reference list '{@link petrinet.Place#getArcs Arcs}'. + * + * + * @return the meta object for the reference list 'Arcs'. + * @see petrinet.Place#getArcs() + * @see #getPlace() + * @generated + */ + EReference getPlace_Arcs(); + + /** + * Returns the meta object for class '{@link petrinet.Arc Arc}'. + * + * + * @return the meta object for class 'Arc'. + * @see petrinet.Arc + * @generated + */ + EClass getArc(); + + /** + * Returns the meta object for the attribute '{@link petrinet.Arc#getWeight Weight}'. + * + * + * @return the meta object for the attribute 'Weight'. + * @see petrinet.Arc#getWeight() + * @see #getArc() + * @generated + */ + EAttribute getArc_Weight(); + + /** + * Returns the meta object for the attribute '{@link petrinet.Arc#isOutgoing Outgoing}'. + * + * + * @return the meta object for the attribute 'Outgoing'. + * @see petrinet.Arc#isOutgoing() + * @see #getArc() + * @generated + */ + EAttribute getArc_Outgoing(); + + /** + * Returns the meta object for the reference '{@link petrinet.Arc#getPlace Place}'. + * + * + * @return the meta object for the reference 'Place'. + * @see petrinet.Arc#getPlace() + * @see #getArc() + * @generated + */ + EReference getArc_Place(); + + /** + * Returns the meta object for the container reference '{@link petrinet.Arc#getTransition Transition}'. + * + * + * @return the meta object for the container reference 'Transition'. + * @see petrinet.Arc#getTransition() + * @see #getArc() + * @generated + */ + EReference getArc_Transition(); + + /** + * Returns the meta object for class '{@link petrinet.Transition Transition}'. + * + * + * @return the meta object for class 'Transition'. + * @see petrinet.Transition + * @generated + */ + EClass getTransition(); + + /** + * Returns the meta object for the containment reference list '{@link petrinet.Transition#getArcs Arcs}'. + * + * + * @return the meta object for the containment reference list 'Arcs'. + * @see petrinet.Transition#getArcs() + * @see #getTransition() + * @generated + */ + EReference getTransition_Arcs(); + + /** + * Returns the factory that creates the instances of the model. + * + * + * @return the factory that creates the instances of the model. + * @generated + */ + PetrinetFactory getPetrinetFactory(); + + /** + * + * Defines literals for the meta objects that represent + *
    + *
  • each class,
  • + *
  • each feature of each class,
  • + *
  • each operation of each class,
  • + *
  • each enum,
  • + *
  • and each data type
  • + *
+ * + * @generated + */ + interface Literals { + /** + * The meta object literal for the '{@link petrinet.impl.NetworkImpl Network}' class. + * + * + * @see petrinet.impl.NetworkImpl + * @see petrinet.impl.PetrinetPackageImpl#getNetwork() + * @generated + */ + EClass NETWORK = eINSTANCE.getNetwork(); + + /** + * The meta object literal for the 'Name' attribute feature. + * + * + * @generated + */ + EAttribute NETWORK__NAME = eINSTANCE.getNetwork_Name(); + + /** + * The meta object literal for the 'Nodes' containment reference list feature. + * + * + * @generated + */ + EReference NETWORK__NODES = eINSTANCE.getNetwork_Nodes(); + + /** + * The meta object literal for the '{@link petrinet.impl.NodeImpl Node}' class. + * + * + * @see petrinet.impl.NodeImpl + * @see petrinet.impl.PetrinetPackageImpl#getNode() + * @generated + */ + EClass NODE = eINSTANCE.getNode(); + + /** + * The meta object literal for the 'Name' attribute feature. + * + * + * @generated + */ + EAttribute NODE__NAME = eINSTANCE.getNode_Name(); + + /** + * The meta object literal for the 'Network' container reference feature. + * + * + * @generated + */ + EReference NODE__NETWORK = eINSTANCE.getNode_Network(); + + /** + * The meta object literal for the '{@link petrinet.impl.PlaceImpl Place}' class. + * + * + * @see petrinet.impl.PlaceImpl + * @see petrinet.impl.PetrinetPackageImpl#getPlace() + * @generated + */ + EClass PLACE = eINSTANCE.getPlace(); + + /** + * The meta object literal for the 'Tokens' attribute feature. + * + * + * @generated + */ + EAttribute PLACE__TOKENS = eINSTANCE.getPlace_Tokens(); + + /** + * The meta object literal for the 'Arcs' reference list feature. + * + * + * @generated + */ + EReference PLACE__ARCS = eINSTANCE.getPlace_Arcs(); + + /** + * The meta object literal for the '{@link petrinet.impl.ArcImpl Arc}' class. + * + * + * @see petrinet.impl.ArcImpl + * @see petrinet.impl.PetrinetPackageImpl#getArc() + * @generated + */ + EClass ARC = eINSTANCE.getArc(); + + /** + * The meta object literal for the 'Weight' attribute feature. + * + * + * @generated + */ + EAttribute ARC__WEIGHT = eINSTANCE.getArc_Weight(); + + /** + * The meta object literal for the 'Outgoing' attribute feature. + * + * + * @generated + */ + EAttribute ARC__OUTGOING = eINSTANCE.getArc_Outgoing(); + + /** + * The meta object literal for the 'Place' reference feature. + * + * + * @generated + */ + EReference ARC__PLACE = eINSTANCE.getArc_Place(); + + /** + * The meta object literal for the 'Transition' container reference feature. + * + * + * @generated + */ + EReference ARC__TRANSITION = eINSTANCE.getArc_Transition(); + + /** + * The meta object literal for the '{@link petrinet.impl.TransitionImpl Transition}' class. + * + * + * @see petrinet.impl.TransitionImpl + * @see petrinet.impl.PetrinetPackageImpl#getTransition() + * @generated + */ + EClass TRANSITION = eINSTANCE.getTransition(); + + /** + * The meta object literal for the 'Arcs' containment reference list feature. + * + * + * @generated + */ + EReference TRANSITION__ARCS = eINSTANCE.getTransition_Arcs(); + + } + +} //PetrinetPackage diff --git a/workspace/fr.n7.petrinet/src/petrinet/Place.java b/workspace/fr.n7.petrinet/src/petrinet/Place.java new file mode 100755 index 0000000..a2d90c7 --- /dev/null +++ b/workspace/fr.n7.petrinet/src/petrinet/Place.java @@ -0,0 +1,61 @@ +/** + */ +package petrinet; + +import org.eclipse.emf.common.util.EList; + +/** + * + * A representation of the model object 'Place'. + * + * + *

+ * The following features are supported: + *

+ *
    + *
  • {@link petrinet.Place#getTokens Tokens}
  • + *
  • {@link petrinet.Place#getArcs Arcs}
  • + *
+ * + * @see petrinet.PetrinetPackage#getPlace() + * @model + * @generated + */ +public interface Place extends Node { + /** + * Returns the value of the 'Tokens' attribute. + * + * + * @return the value of the 'Tokens' attribute. + * @see #setTokens(int) + * @see petrinet.PetrinetPackage#getPlace_Tokens() + * @model required="true" + * @generated + */ + int getTokens(); + + /** + * Sets the value of the '{@link petrinet.Place#getTokens Tokens}' attribute. + * + * + * @param value the new value of the 'Tokens' attribute. + * @see #getTokens() + * @generated + */ + void setTokens(int value); + + /** + * Returns the value of the 'Arcs' reference list. + * The list contents are of type {@link petrinet.Arc}. + * It is bidirectional and its opposite is '{@link petrinet.Arc#getPlace Place}'. + * + * + * @return the value of the 'Arcs' reference list. + * @see petrinet.PetrinetPackage#getPlace_Arcs() + * @see petrinet.Arc#getPlace + * @model opposite="place" + * @generated + */ + EList getArcs(); + +} // Place diff --git a/workspace/fr.n7.petrinet/src/petrinet/Transition.java b/workspace/fr.n7.petrinet/src/petrinet/Transition.java new file mode 100755 index 0000000..eba4736 --- /dev/null +++ b/workspace/fr.n7.petrinet/src/petrinet/Transition.java @@ -0,0 +1,38 @@ +/** + */ +package petrinet; + +import org.eclipse.emf.common.util.EList; + +/** + * + * A representation of the model object 'Transition'. + * + * + *

+ * The following features are supported: + *

+ *
    + *
  • {@link petrinet.Transition#getArcs Arcs}
  • + *
+ * + * @see petrinet.PetrinetPackage#getTransition() + * @model + * @generated + */ +public interface Transition extends Node { + /** + * Returns the value of the 'Arcs' containment reference list. + * The list contents are of type {@link petrinet.Arc}. + * It is bidirectional and its opposite is '{@link petrinet.Arc#getTransition Transition}'. + * + * + * @return the value of the 'Arcs' containment reference list. + * @see petrinet.PetrinetPackage#getTransition_Arcs() + * @see petrinet.Arc#getTransition + * @model opposite="transition" containment="true" + * @generated + */ + EList getArcs(); + +} // Transition diff --git a/workspace/fr.n7.petrinet/src/petrinet/impl/ArcImpl.java b/workspace/fr.n7.petrinet/src/petrinet/impl/ArcImpl.java new file mode 100755 index 0000000..c71a52b --- /dev/null +++ b/workspace/fr.n7.petrinet/src/petrinet/impl/ArcImpl.java @@ -0,0 +1,407 @@ +/** + */ +package petrinet.impl; + +import org.eclipse.emf.common.notify.Notification; +import org.eclipse.emf.common.notify.NotificationChain; + +import org.eclipse.emf.ecore.EClass; +import org.eclipse.emf.ecore.InternalEObject; + +import org.eclipse.emf.ecore.impl.ENotificationImpl; +import org.eclipse.emf.ecore.impl.MinimalEObjectImpl; + +import org.eclipse.emf.ecore.util.EcoreUtil; + +import petrinet.Arc; +import petrinet.PetrinetPackage; +import petrinet.Place; +import petrinet.Transition; + +/** + * + * An implementation of the model object 'Arc'. + * + *

+ * The following features are implemented: + *

+ *
    + *
  • {@link petrinet.impl.ArcImpl#getWeight Weight}
  • + *
  • {@link petrinet.impl.ArcImpl#isOutgoing Outgoing}
  • + *
  • {@link petrinet.impl.ArcImpl#getPlace Place}
  • + *
  • {@link petrinet.impl.ArcImpl#getTransition Transition}
  • + *
+ * + * @generated + */ +public class ArcImpl extends MinimalEObjectImpl.Container implements Arc { + /** + * The default value of the '{@link #getWeight() Weight}' attribute. + * + * + * @see #getWeight() + * @generated + * @ordered + */ + protected static final int WEIGHT_EDEFAULT = 0; + + /** + * The cached value of the '{@link #getWeight() Weight}' attribute. + * + * + * @see #getWeight() + * @generated + * @ordered + */ + protected int weight = WEIGHT_EDEFAULT; + + /** + * The default value of the '{@link #isOutgoing() Outgoing}' attribute. + * + * + * @see #isOutgoing() + * @generated + * @ordered + */ + protected static final boolean OUTGOING_EDEFAULT = false; + + /** + * The cached value of the '{@link #isOutgoing() Outgoing}' attribute. + * + * + * @see #isOutgoing() + * @generated + * @ordered + */ + protected boolean outgoing = OUTGOING_EDEFAULT; + + /** + * The cached value of the '{@link #getPlace() Place}' reference. + * + * + * @see #getPlace() + * @generated + * @ordered + */ + protected Place place; + + /** + * + * + * @generated + */ + protected ArcImpl() { + super(); + } + + /** + * + * + * @generated + */ + @Override + protected EClass eStaticClass() { + return PetrinetPackage.Literals.ARC; + } + + /** + * + * + * @generated + */ + public int getWeight() { + return weight; + } + + /** + * + * + * @generated + */ + public void setWeight(int newWeight) { + int oldWeight = weight; + weight = newWeight; + if (eNotificationRequired()) + eNotify(new ENotificationImpl(this, Notification.SET, PetrinetPackage.ARC__WEIGHT, oldWeight, weight)); + } + + /** + * + * + * @generated + */ + public boolean isOutgoing() { + return outgoing; + } + + /** + * + * + * @generated + */ + public void setOutgoing(boolean newOutgoing) { + boolean oldOutgoing = outgoing; + outgoing = newOutgoing; + if (eNotificationRequired()) + eNotify(new ENotificationImpl(this, Notification.SET, PetrinetPackage.ARC__OUTGOING, oldOutgoing, outgoing)); + } + + /** + * + * + * @generated + */ + public Place getPlace() { + if (place != null && place.eIsProxy()) { + InternalEObject oldPlace = (InternalEObject)place; + place = (Place)eResolveProxy(oldPlace); + if (place != oldPlace) { + if (eNotificationRequired()) + eNotify(new ENotificationImpl(this, Notification.RESOLVE, PetrinetPackage.ARC__PLACE, oldPlace, place)); + } + } + return place; + } + + /** + * + * + * @generated + */ + public Place basicGetPlace() { + return place; + } + + /** + * + * + * @generated + */ + public NotificationChain basicSetPlace(Place newPlace, NotificationChain msgs) { + Place oldPlace = place; + place = newPlace; + if (eNotificationRequired()) { + ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, PetrinetPackage.ARC__PLACE, oldPlace, newPlace); + if (msgs == null) msgs = notification; else msgs.add(notification); + } + return msgs; + } + + /** + * + * + * @generated + */ + public void setPlace(Place newPlace) { + if (newPlace != place) { + NotificationChain msgs = null; + if (place != null) + msgs = ((InternalEObject)place).eInverseRemove(this, PetrinetPackage.PLACE__ARCS, Place.class, msgs); + if (newPlace != null) + msgs = ((InternalEObject)newPlace).eInverseAdd(this, PetrinetPackage.PLACE__ARCS, Place.class, msgs); + msgs = basicSetPlace(newPlace, msgs); + if (msgs != null) msgs.dispatch(); + } + else if (eNotificationRequired()) + eNotify(new ENotificationImpl(this, Notification.SET, PetrinetPackage.ARC__PLACE, newPlace, newPlace)); + } + + /** + * + * + * @generated + */ + public Transition getTransition() { + if (eContainerFeatureID() != PetrinetPackage.ARC__TRANSITION) return null; + return (Transition)eInternalContainer(); + } + + /** + * + * + * @generated + */ + public NotificationChain basicSetTransition(Transition newTransition, NotificationChain msgs) { + msgs = eBasicSetContainer((InternalEObject)newTransition, PetrinetPackage.ARC__TRANSITION, msgs); + return msgs; + } + + /** + * + * + * @generated + */ + public void setTransition(Transition newTransition) { + if (newTransition != eInternalContainer() || (eContainerFeatureID() != PetrinetPackage.ARC__TRANSITION && newTransition != null)) { + if (EcoreUtil.isAncestor(this, newTransition)) + throw new IllegalArgumentException("Recursive containment not allowed for " + toString()); + NotificationChain msgs = null; + if (eInternalContainer() != null) + msgs = eBasicRemoveFromContainer(msgs); + if (newTransition != null) + msgs = ((InternalEObject)newTransition).eInverseAdd(this, PetrinetPackage.TRANSITION__ARCS, Transition.class, msgs); + msgs = basicSetTransition(newTransition, msgs); + if (msgs != null) msgs.dispatch(); + } + else if (eNotificationRequired()) + eNotify(new ENotificationImpl(this, Notification.SET, PetrinetPackage.ARC__TRANSITION, newTransition, newTransition)); + } + + /** + * + * + * @generated + */ + @Override + public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) { + switch (featureID) { + case PetrinetPackage.ARC__PLACE: + if (place != null) + msgs = ((InternalEObject)place).eInverseRemove(this, PetrinetPackage.PLACE__ARCS, Place.class, msgs); + return basicSetPlace((Place)otherEnd, msgs); + case PetrinetPackage.ARC__TRANSITION: + if (eInternalContainer() != null) + msgs = eBasicRemoveFromContainer(msgs); + return basicSetTransition((Transition)otherEnd, msgs); + } + return super.eInverseAdd(otherEnd, featureID, msgs); + } + + /** + * + * + * @generated + */ + @Override + public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) { + switch (featureID) { + case PetrinetPackage.ARC__PLACE: + return basicSetPlace(null, msgs); + case PetrinetPackage.ARC__TRANSITION: + return basicSetTransition(null, msgs); + } + return super.eInverseRemove(otherEnd, featureID, msgs); + } + + /** + * + * + * @generated + */ + @Override + public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs) { + switch (eContainerFeatureID()) { + case PetrinetPackage.ARC__TRANSITION: + return eInternalContainer().eInverseRemove(this, PetrinetPackage.TRANSITION__ARCS, Transition.class, msgs); + } + return super.eBasicRemoveFromContainerFeature(msgs); + } + + /** + * + * + * @generated + */ + @Override + public Object eGet(int featureID, boolean resolve, boolean coreType) { + switch (featureID) { + case PetrinetPackage.ARC__WEIGHT: + return getWeight(); + case PetrinetPackage.ARC__OUTGOING: + return isOutgoing(); + case PetrinetPackage.ARC__PLACE: + if (resolve) return getPlace(); + return basicGetPlace(); + case PetrinetPackage.ARC__TRANSITION: + return getTransition(); + } + return super.eGet(featureID, resolve, coreType); + } + + /** + * + * + * @generated + */ + @Override + public void eSet(int featureID, Object newValue) { + switch (featureID) { + case PetrinetPackage.ARC__WEIGHT: + setWeight((Integer)newValue); + return; + case PetrinetPackage.ARC__OUTGOING: + setOutgoing((Boolean)newValue); + return; + case PetrinetPackage.ARC__PLACE: + setPlace((Place)newValue); + return; + case PetrinetPackage.ARC__TRANSITION: + setTransition((Transition)newValue); + return; + } + super.eSet(featureID, newValue); + } + + /** + * + * + * @generated + */ + @Override + public void eUnset(int featureID) { + switch (featureID) { + case PetrinetPackage.ARC__WEIGHT: + setWeight(WEIGHT_EDEFAULT); + return; + case PetrinetPackage.ARC__OUTGOING: + setOutgoing(OUTGOING_EDEFAULT); + return; + case PetrinetPackage.ARC__PLACE: + setPlace((Place)null); + return; + case PetrinetPackage.ARC__TRANSITION: + setTransition((Transition)null); + return; + } + super.eUnset(featureID); + } + + /** + * + * + * @generated + */ + @Override + public boolean eIsSet(int featureID) { + switch (featureID) { + case PetrinetPackage.ARC__WEIGHT: + return weight != WEIGHT_EDEFAULT; + case PetrinetPackage.ARC__OUTGOING: + return outgoing != OUTGOING_EDEFAULT; + case PetrinetPackage.ARC__PLACE: + return place != null; + case PetrinetPackage.ARC__TRANSITION: + return getTransition() != null; + } + return super.eIsSet(featureID); + } + + /** + * + * + * @generated + */ + @Override + public String toString() { + if (eIsProxy()) return super.toString(); + + StringBuilder result = new StringBuilder(super.toString()); + result.append(" (weight: "); + result.append(weight); + result.append(", outgoing: "); + result.append(outgoing); + result.append(')'); + return result.toString(); + } + +} //ArcImpl diff --git a/workspace/fr.n7.petrinet/src/petrinet/impl/NetworkImpl.java b/workspace/fr.n7.petrinet/src/petrinet/impl/NetworkImpl.java new file mode 100755 index 0000000..9793369 --- /dev/null +++ b/workspace/fr.n7.petrinet/src/petrinet/impl/NetworkImpl.java @@ -0,0 +1,237 @@ +/** + */ +package petrinet.impl; + +import java.util.Collection; + +import org.eclipse.emf.common.notify.Notification; +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.impl.ENotificationImpl; +import org.eclipse.emf.ecore.impl.MinimalEObjectImpl; + +import org.eclipse.emf.ecore.util.EObjectContainmentWithInverseEList; +import org.eclipse.emf.ecore.util.InternalEList; + +import petrinet.Network; +import petrinet.Node; +import petrinet.PetrinetPackage; + +/** + * + * An implementation of the model object 'Network'. + * + *

+ * The following features are implemented: + *

+ *
    + *
  • {@link petrinet.impl.NetworkImpl#getName Name}
  • + *
  • {@link petrinet.impl.NetworkImpl#getNodes Nodes}
  • + *
+ * + * @generated + */ +public class NetworkImpl extends MinimalEObjectImpl.Container implements Network { + /** + * The default value of the '{@link #getName() Name}' attribute. + * + * + * @see #getName() + * @generated + * @ordered + */ + protected static final String NAME_EDEFAULT = null; + + /** + * The cached value of the '{@link #getName() Name}' attribute. + * + * + * @see #getName() + * @generated + * @ordered + */ + protected String name = NAME_EDEFAULT; + + /** + * The cached value of the '{@link #getNodes() Nodes}' containment reference list. + * + * + * @see #getNodes() + * @generated + * @ordered + */ + protected EList nodes; + + /** + * + * + * @generated + */ + protected NetworkImpl() { + super(); + } + + /** + * + * + * @generated + */ + @Override + protected EClass eStaticClass() { + return PetrinetPackage.Literals.NETWORK; + } + + /** + * + * + * @generated + */ + public String getName() { + return name; + } + + /** + * + * + * @generated + */ + public void setName(String newName) { + String oldName = name; + name = newName; + if (eNotificationRequired()) + eNotify(new ENotificationImpl(this, Notification.SET, PetrinetPackage.NETWORK__NAME, oldName, name)); + } + + /** + * + * + * @generated + */ + public EList getNodes() { + if (nodes == null) { + nodes = new EObjectContainmentWithInverseEList(Node.class, this, PetrinetPackage.NETWORK__NODES, PetrinetPackage.NODE__NETWORK); + } + return nodes; + } + + /** + * + * + * @generated + */ + @SuppressWarnings("unchecked") + @Override + public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) { + switch (featureID) { + case PetrinetPackage.NETWORK__NODES: + return ((InternalEList)(InternalEList)getNodes()).basicAdd(otherEnd, msgs); + } + return super.eInverseAdd(otherEnd, featureID, msgs); + } + + /** + * + * + * @generated + */ + @Override + public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) { + switch (featureID) { + case PetrinetPackage.NETWORK__NODES: + return ((InternalEList)getNodes()).basicRemove(otherEnd, msgs); + } + return super.eInverseRemove(otherEnd, featureID, msgs); + } + + /** + * + * + * @generated + */ + @Override + public Object eGet(int featureID, boolean resolve, boolean coreType) { + switch (featureID) { + case PetrinetPackage.NETWORK__NAME: + return getName(); + case PetrinetPackage.NETWORK__NODES: + return getNodes(); + } + return super.eGet(featureID, resolve, coreType); + } + + /** + * + * + * @generated + */ + @SuppressWarnings("unchecked") + @Override + public void eSet(int featureID, Object newValue) { + switch (featureID) { + case PetrinetPackage.NETWORK__NAME: + setName((String)newValue); + return; + case PetrinetPackage.NETWORK__NODES: + getNodes().clear(); + getNodes().addAll((Collection)newValue); + return; + } + super.eSet(featureID, newValue); + } + + /** + * + * + * @generated + */ + @Override + public void eUnset(int featureID) { + switch (featureID) { + case PetrinetPackage.NETWORK__NAME: + setName(NAME_EDEFAULT); + return; + case PetrinetPackage.NETWORK__NODES: + getNodes().clear(); + return; + } + super.eUnset(featureID); + } + + /** + * + * + * @generated + */ + @Override + public boolean eIsSet(int featureID) { + switch (featureID) { + case PetrinetPackage.NETWORK__NAME: + return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name); + case PetrinetPackage.NETWORK__NODES: + return nodes != null && !nodes.isEmpty(); + } + return super.eIsSet(featureID); + } + + /** + * + * + * @generated + */ + @Override + public String toString() { + if (eIsProxy()) return super.toString(); + + StringBuilder result = new StringBuilder(super.toString()); + result.append(" (name: "); + result.append(name); + result.append(')'); + return result.toString(); + } + +} //NetworkImpl diff --git a/workspace/fr.n7.petrinet/src/petrinet/impl/NodeImpl.java b/workspace/fr.n7.petrinet/src/petrinet/impl/NodeImpl.java new file mode 100755 index 0000000..ed2a1a5 --- /dev/null +++ b/workspace/fr.n7.petrinet/src/petrinet/impl/NodeImpl.java @@ -0,0 +1,264 @@ +/** + */ +package petrinet.impl; + +import org.eclipse.emf.common.notify.Notification; +import org.eclipse.emf.common.notify.NotificationChain; + +import org.eclipse.emf.ecore.EClass; +import org.eclipse.emf.ecore.InternalEObject; + +import org.eclipse.emf.ecore.impl.ENotificationImpl; +import org.eclipse.emf.ecore.impl.MinimalEObjectImpl; + +import org.eclipse.emf.ecore.util.EcoreUtil; + +import petrinet.Network; +import petrinet.Node; +import petrinet.PetrinetPackage; + +/** + * + * An implementation of the model object 'Node'. + * + *

+ * The following features are implemented: + *

+ *
    + *
  • {@link petrinet.impl.NodeImpl#getName Name}
  • + *
  • {@link petrinet.impl.NodeImpl#getNetwork Network}
  • + *
+ * + * @generated + */ +public abstract class NodeImpl extends MinimalEObjectImpl.Container implements Node { + /** + * The default value of the '{@link #getName() Name}' attribute. + * + * + * @see #getName() + * @generated + * @ordered + */ + protected static final String NAME_EDEFAULT = null; + + /** + * The cached value of the '{@link #getName() Name}' attribute. + * + * + * @see #getName() + * @generated + * @ordered + */ + protected String name = NAME_EDEFAULT; + + /** + * + * + * @generated + */ + protected NodeImpl() { + super(); + } + + /** + * + * + * @generated + */ + @Override + protected EClass eStaticClass() { + return PetrinetPackage.Literals.NODE; + } + + /** + * + * + * @generated + */ + public String getName() { + return name; + } + + /** + * + * + * @generated + */ + public void setName(String newName) { + String oldName = name; + name = newName; + if (eNotificationRequired()) + eNotify(new ENotificationImpl(this, Notification.SET, PetrinetPackage.NODE__NAME, oldName, name)); + } + + /** + * + * + * @generated + */ + public Network getNetwork() { + if (eContainerFeatureID() != PetrinetPackage.NODE__NETWORK) return null; + return (Network)eInternalContainer(); + } + + /** + * + * + * @generated + */ + public NotificationChain basicSetNetwork(Network newNetwork, NotificationChain msgs) { + msgs = eBasicSetContainer((InternalEObject)newNetwork, PetrinetPackage.NODE__NETWORK, msgs); + return msgs; + } + + /** + * + * + * @generated + */ + public void setNetwork(Network newNetwork) { + if (newNetwork != eInternalContainer() || (eContainerFeatureID() != PetrinetPackage.NODE__NETWORK && newNetwork != null)) { + if (EcoreUtil.isAncestor(this, newNetwork)) + throw new IllegalArgumentException("Recursive containment not allowed for " + toString()); + NotificationChain msgs = null; + if (eInternalContainer() != null) + msgs = eBasicRemoveFromContainer(msgs); + if (newNetwork != null) + msgs = ((InternalEObject)newNetwork).eInverseAdd(this, PetrinetPackage.NETWORK__NODES, Network.class, msgs); + msgs = basicSetNetwork(newNetwork, msgs); + if (msgs != null) msgs.dispatch(); + } + else if (eNotificationRequired()) + eNotify(new ENotificationImpl(this, Notification.SET, PetrinetPackage.NODE__NETWORK, newNetwork, newNetwork)); + } + + /** + * + * + * @generated + */ + @Override + public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) { + switch (featureID) { + case PetrinetPackage.NODE__NETWORK: + if (eInternalContainer() != null) + msgs = eBasicRemoveFromContainer(msgs); + return basicSetNetwork((Network)otherEnd, msgs); + } + return super.eInverseAdd(otherEnd, featureID, msgs); + } + + /** + * + * + * @generated + */ + @Override + public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) { + switch (featureID) { + case PetrinetPackage.NODE__NETWORK: + return basicSetNetwork(null, msgs); + } + return super.eInverseRemove(otherEnd, featureID, msgs); + } + + /** + * + * + * @generated + */ + @Override + public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs) { + switch (eContainerFeatureID()) { + case PetrinetPackage.NODE__NETWORK: + return eInternalContainer().eInverseRemove(this, PetrinetPackage.NETWORK__NODES, Network.class, msgs); + } + return super.eBasicRemoveFromContainerFeature(msgs); + } + + /** + * + * + * @generated + */ + @Override + public Object eGet(int featureID, boolean resolve, boolean coreType) { + switch (featureID) { + case PetrinetPackage.NODE__NAME: + return getName(); + case PetrinetPackage.NODE__NETWORK: + return getNetwork(); + } + return super.eGet(featureID, resolve, coreType); + } + + /** + * + * + * @generated + */ + @Override + public void eSet(int featureID, Object newValue) { + switch (featureID) { + case PetrinetPackage.NODE__NAME: + setName((String)newValue); + return; + case PetrinetPackage.NODE__NETWORK: + setNetwork((Network)newValue); + return; + } + super.eSet(featureID, newValue); + } + + /** + * + * + * @generated + */ + @Override + public void eUnset(int featureID) { + switch (featureID) { + case PetrinetPackage.NODE__NAME: + setName(NAME_EDEFAULT); + return; + case PetrinetPackage.NODE__NETWORK: + setNetwork((Network)null); + return; + } + super.eUnset(featureID); + } + + /** + * + * + * @generated + */ + @Override + public boolean eIsSet(int featureID) { + switch (featureID) { + case PetrinetPackage.NODE__NAME: + return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name); + case PetrinetPackage.NODE__NETWORK: + return getNetwork() != null; + } + return super.eIsSet(featureID); + } + + /** + * + * + * @generated + */ + @Override + public String toString() { + if (eIsProxy()) return super.toString(); + + StringBuilder result = new StringBuilder(super.toString()); + result.append(" (name: "); + result.append(name); + result.append(')'); + return result.toString(); + } + +} //NodeImpl diff --git a/workspace/fr.n7.petrinet/src/petrinet/impl/PetrinetFactoryImpl.java b/workspace/fr.n7.petrinet/src/petrinet/impl/PetrinetFactoryImpl.java new file mode 100755 index 0000000..d769926 --- /dev/null +++ b/workspace/fr.n7.petrinet/src/petrinet/impl/PetrinetFactoryImpl.java @@ -0,0 +1,128 @@ +/** + */ +package petrinet.impl; + +import org.eclipse.emf.ecore.EClass; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.EPackage; + +import org.eclipse.emf.ecore.impl.EFactoryImpl; + +import org.eclipse.emf.ecore.plugin.EcorePlugin; + +import petrinet.*; + +/** + * + * An implementation of the model Factory. + * + * @generated + */ +public class PetrinetFactoryImpl extends EFactoryImpl implements PetrinetFactory { + /** + * Creates the default factory implementation. + * + * + * @generated + */ + public static PetrinetFactory init() { + try { + PetrinetFactory thePetrinetFactory = (PetrinetFactory)EPackage.Registry.INSTANCE.getEFactory(PetrinetPackage.eNS_URI); + if (thePetrinetFactory != null) { + return thePetrinetFactory; + } + } + catch (Exception exception) { + EcorePlugin.INSTANCE.log(exception); + } + return new PetrinetFactoryImpl(); + } + + /** + * Creates an instance of the factory. + * + * + * @generated + */ + public PetrinetFactoryImpl() { + super(); + } + + /** + * + * + * @generated + */ + @Override + public EObject create(EClass eClass) { + switch (eClass.getClassifierID()) { + case PetrinetPackage.NETWORK: return createNetwork(); + case PetrinetPackage.PLACE: return createPlace(); + case PetrinetPackage.ARC: return createArc(); + case PetrinetPackage.TRANSITION: return createTransition(); + default: + throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier"); + } + } + + /** + * + * + * @generated + */ + public Network createNetwork() { + NetworkImpl network = new NetworkImpl(); + return network; + } + + /** + * + * + * @generated + */ + public Place createPlace() { + PlaceImpl place = new PlaceImpl(); + return place; + } + + /** + * + * + * @generated + */ + public Arc createArc() { + ArcImpl arc = new ArcImpl(); + return arc; + } + + /** + * + * + * @generated + */ + public Transition createTransition() { + TransitionImpl transition = new TransitionImpl(); + return transition; + } + + /** + * + * + * @generated + */ + public PetrinetPackage getPetrinetPackage() { + return (PetrinetPackage)getEPackage(); + } + + /** + * + * + * @deprecated + * @generated + */ + @Deprecated + public static PetrinetPackage getPackage() { + return PetrinetPackage.eINSTANCE; + } + +} //PetrinetFactoryImpl diff --git a/workspace/fr.n7.petrinet/src/petrinet/impl/PetrinetPackageImpl.java b/workspace/fr.n7.petrinet/src/petrinet/impl/PetrinetPackageImpl.java new file mode 100755 index 0000000..db9424e --- /dev/null +++ b/workspace/fr.n7.petrinet/src/petrinet/impl/PetrinetPackageImpl.java @@ -0,0 +1,374 @@ +/** + */ +package petrinet.impl; + +import org.eclipse.emf.ecore.EAttribute; +import org.eclipse.emf.ecore.EClass; +import org.eclipse.emf.ecore.EPackage; +import org.eclipse.emf.ecore.EReference; + +import org.eclipse.emf.ecore.impl.EPackageImpl; + +import petrinet.Arc; +import petrinet.Network; +import petrinet.Node; +import petrinet.PetrinetFactory; +import petrinet.PetrinetPackage; +import petrinet.Place; +import petrinet.Transition; + +/** + * + * An implementation of the model Package. + * + * @generated + */ +public class PetrinetPackageImpl extends EPackageImpl implements PetrinetPackage { + /** + * + * + * @generated + */ + private EClass networkEClass = null; + + /** + * + * + * @generated + */ + private EClass nodeEClass = null; + + /** + * + * + * @generated + */ + private EClass placeEClass = null; + + /** + * + * + * @generated + */ + private EClass arcEClass = null; + + /** + * + * + * @generated + */ + private EClass transitionEClass = null; + + /** + * Creates an instance of the model Package, registered with + * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package + * package URI value. + *

Note: the correct way to create the package is via the static + * factory method {@link #init init()}, which also performs + * initialization of the package, or returns the registered package, + * if one already exists. + * + * + * @see org.eclipse.emf.ecore.EPackage.Registry + * @see petrinet.PetrinetPackage#eNS_URI + * @see #init() + * @generated + */ + private PetrinetPackageImpl() { + super(eNS_URI, PetrinetFactory.eINSTANCE); + } + + /** + * + * + * @generated + */ + private static boolean isInited = false; + + /** + * Creates, registers, and initializes the Package for this model, and for any others upon which it depends. + * + *

This method is used to initialize {@link PetrinetPackage#eINSTANCE} when that field is accessed. + * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package. + * + * + * @see #eNS_URI + * @see #createPackageContents() + * @see #initializePackageContents() + * @generated + */ + public static PetrinetPackage init() { + if (isInited) return (PetrinetPackage)EPackage.Registry.INSTANCE.getEPackage(PetrinetPackage.eNS_URI); + + // Obtain or create and register package + Object registeredPetrinetPackage = EPackage.Registry.INSTANCE.get(eNS_URI); + PetrinetPackageImpl thePetrinetPackage = registeredPetrinetPackage instanceof PetrinetPackageImpl ? (PetrinetPackageImpl)registeredPetrinetPackage : new PetrinetPackageImpl(); + + isInited = true; + + // Create package meta-data objects + thePetrinetPackage.createPackageContents(); + + // Initialize created meta-data + thePetrinetPackage.initializePackageContents(); + + // Mark meta-data to indicate it can't be changed + thePetrinetPackage.freeze(); + + // Update the registry and return the package + EPackage.Registry.INSTANCE.put(PetrinetPackage.eNS_URI, thePetrinetPackage); + return thePetrinetPackage; + } + + /** + * + * + * @generated + */ + public EClass getNetwork() { + return networkEClass; + } + + /** + * + * + * @generated + */ + public EAttribute getNetwork_Name() { + return (EAttribute)networkEClass.getEStructuralFeatures().get(0); + } + + /** + * + * + * @generated + */ + public EReference getNetwork_Nodes() { + return (EReference)networkEClass.getEStructuralFeatures().get(1); + } + + /** + * + * + * @generated + */ + public EClass getNode() { + return nodeEClass; + } + + /** + * + * + * @generated + */ + public EAttribute getNode_Name() { + return (EAttribute)nodeEClass.getEStructuralFeatures().get(0); + } + + /** + * + * + * @generated + */ + public EReference getNode_Network() { + return (EReference)nodeEClass.getEStructuralFeatures().get(1); + } + + /** + * + * + * @generated + */ + public EClass getPlace() { + return placeEClass; + } + + /** + * + * + * @generated + */ + public EAttribute getPlace_Tokens() { + return (EAttribute)placeEClass.getEStructuralFeatures().get(0); + } + + /** + * + * + * @generated + */ + public EReference getPlace_Arcs() { + return (EReference)placeEClass.getEStructuralFeatures().get(1); + } + + /** + * + * + * @generated + */ + public EClass getArc() { + return arcEClass; + } + + /** + * + * + * @generated + */ + public EAttribute getArc_Weight() { + return (EAttribute)arcEClass.getEStructuralFeatures().get(0); + } + + /** + * + * + * @generated + */ + public EAttribute getArc_Outgoing() { + return (EAttribute)arcEClass.getEStructuralFeatures().get(1); + } + + /** + * + * + * @generated + */ + public EReference getArc_Place() { + return (EReference)arcEClass.getEStructuralFeatures().get(2); + } + + /** + * + * + * @generated + */ + public EReference getArc_Transition() { + return (EReference)arcEClass.getEStructuralFeatures().get(3); + } + + /** + * + * + * @generated + */ + public EClass getTransition() { + return transitionEClass; + } + + /** + * + * + * @generated + */ + public EReference getTransition_Arcs() { + return (EReference)transitionEClass.getEStructuralFeatures().get(0); + } + + /** + * + * + * @generated + */ + public PetrinetFactory getPetrinetFactory() { + return (PetrinetFactory)getEFactoryInstance(); + } + + /** + * + * + * @generated + */ + private boolean isCreated = false; + + /** + * Creates the meta-model objects for the package. This method is + * guarded to have no affect on any invocation but its first. + * + * + * @generated + */ + public void createPackageContents() { + if (isCreated) return; + isCreated = true; + + // Create classes and their features + networkEClass = createEClass(NETWORK); + createEAttribute(networkEClass, NETWORK__NAME); + createEReference(networkEClass, NETWORK__NODES); + + nodeEClass = createEClass(NODE); + createEAttribute(nodeEClass, NODE__NAME); + createEReference(nodeEClass, NODE__NETWORK); + + placeEClass = createEClass(PLACE); + createEAttribute(placeEClass, PLACE__TOKENS); + createEReference(placeEClass, PLACE__ARCS); + + arcEClass = createEClass(ARC); + createEAttribute(arcEClass, ARC__WEIGHT); + createEAttribute(arcEClass, ARC__OUTGOING); + createEReference(arcEClass, ARC__PLACE); + createEReference(arcEClass, ARC__TRANSITION); + + transitionEClass = createEClass(TRANSITION); + createEReference(transitionEClass, TRANSITION__ARCS); + } + + /** + * + * + * @generated + */ + private boolean isInitialized = false; + + /** + * Complete the initialization of the package and its meta-model. This + * method is guarded to have no affect on any invocation but its first. + * + * + * @generated + */ + public void initializePackageContents() { + if (isInitialized) return; + isInitialized = true; + + // Initialize package + setName(eNAME); + setNsPrefix(eNS_PREFIX); + setNsURI(eNS_URI); + + // Create type parameters + + // Set bounds for type parameters + + // Add supertypes to classes + placeEClass.getESuperTypes().add(this.getNode()); + transitionEClass.getESuperTypes().add(this.getNode()); + + // Initialize classes, features, and operations; add parameters + initEClass(networkEClass, Network.class, "Network", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); + initEAttribute(getNetwork_Name(), ecorePackage.getEString(), "name", null, 1, 1, Network.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); + initEReference(getNetwork_Nodes(), this.getNode(), this.getNode_Network(), "nodes", null, 0, -1, Network.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); + + initEClass(nodeEClass, Node.class, "Node", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); + initEAttribute(getNode_Name(), ecorePackage.getEString(), "name", null, 1, 1, Node.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); + initEReference(getNode_Network(), this.getNetwork(), this.getNetwork_Nodes(), "network", null, 1, 1, Node.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); + + initEClass(placeEClass, Place.class, "Place", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); + initEAttribute(getPlace_Tokens(), ecorePackage.getEInt(), "tokens", null, 1, 1, Place.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); + initEReference(getPlace_Arcs(), this.getArc(), this.getArc_Place(), "arcs", null, 0, -1, Place.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); + + initEClass(arcEClass, Arc.class, "Arc", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); + initEAttribute(getArc_Weight(), ecorePackage.getEInt(), "weight", null, 1, 1, Arc.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); + initEAttribute(getArc_Outgoing(), ecorePackage.getEBoolean(), "outgoing", null, 1, 1, Arc.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); + initEReference(getArc_Place(), this.getPlace(), this.getPlace_Arcs(), "place", null, 1, 1, Arc.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); + initEReference(getArc_Transition(), this.getTransition(), this.getTransition_Arcs(), "transition", null, 1, 1, Arc.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); + + initEClass(transitionEClass, Transition.class, "Transition", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); + initEReference(getTransition_Arcs(), this.getArc(), this.getArc_Transition(), "arcs", null, 0, -1, Transition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); + + // Create resource + createResource(eNS_URI); + } + +} //PetrinetPackageImpl diff --git a/workspace/fr.n7.petrinet/src/petrinet/impl/PlaceImpl.java b/workspace/fr.n7.petrinet/src/petrinet/impl/PlaceImpl.java new file mode 100755 index 0000000..7832bda --- /dev/null +++ b/workspace/fr.n7.petrinet/src/petrinet/impl/PlaceImpl.java @@ -0,0 +1,236 @@ +/** + */ +package petrinet.impl; + +import java.util.Collection; + +import org.eclipse.emf.common.notify.Notification; +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.impl.ENotificationImpl; + +import org.eclipse.emf.ecore.util.EObjectWithInverseResolvingEList; +import org.eclipse.emf.ecore.util.InternalEList; + +import petrinet.Arc; +import petrinet.PetrinetPackage; +import petrinet.Place; + +/** + * + * An implementation of the model object 'Place'. + * + *

+ * The following features are implemented: + *

+ *
    + *
  • {@link petrinet.impl.PlaceImpl#getTokens Tokens}
  • + *
  • {@link petrinet.impl.PlaceImpl#getArcs Arcs}
  • + *
+ * + * @generated + */ +public class PlaceImpl extends NodeImpl implements Place { + /** + * The default value of the '{@link #getTokens() Tokens}' attribute. + * + * + * @see #getTokens() + * @generated + * @ordered + */ + protected static final int TOKENS_EDEFAULT = 0; + + /** + * The cached value of the '{@link #getTokens() Tokens}' attribute. + * + * + * @see #getTokens() + * @generated + * @ordered + */ + protected int tokens = TOKENS_EDEFAULT; + + /** + * The cached value of the '{@link #getArcs() Arcs}' reference list. + * + * + * @see #getArcs() + * @generated + * @ordered + */ + protected EList arcs; + + /** + * + * + * @generated + */ + protected PlaceImpl() { + super(); + } + + /** + * + * + * @generated + */ + @Override + protected EClass eStaticClass() { + return PetrinetPackage.Literals.PLACE; + } + + /** + * + * + * @generated + */ + public int getTokens() { + return tokens; + } + + /** + * + * + * @generated + */ + public void setTokens(int newTokens) { + int oldTokens = tokens; + tokens = newTokens; + if (eNotificationRequired()) + eNotify(new ENotificationImpl(this, Notification.SET, PetrinetPackage.PLACE__TOKENS, oldTokens, tokens)); + } + + /** + * + * + * @generated + */ + public EList getArcs() { + if (arcs == null) { + arcs = new EObjectWithInverseResolvingEList(Arc.class, this, PetrinetPackage.PLACE__ARCS, PetrinetPackage.ARC__PLACE); + } + return arcs; + } + + /** + * + * + * @generated + */ + @SuppressWarnings("unchecked") + @Override + public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) { + switch (featureID) { + case PetrinetPackage.PLACE__ARCS: + return ((InternalEList)(InternalEList)getArcs()).basicAdd(otherEnd, msgs); + } + return super.eInverseAdd(otherEnd, featureID, msgs); + } + + /** + * + * + * @generated + */ + @Override + public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) { + switch (featureID) { + case PetrinetPackage.PLACE__ARCS: + return ((InternalEList)getArcs()).basicRemove(otherEnd, msgs); + } + return super.eInverseRemove(otherEnd, featureID, msgs); + } + + /** + * + * + * @generated + */ + @Override + public Object eGet(int featureID, boolean resolve, boolean coreType) { + switch (featureID) { + case PetrinetPackage.PLACE__TOKENS: + return getTokens(); + case PetrinetPackage.PLACE__ARCS: + return getArcs(); + } + return super.eGet(featureID, resolve, coreType); + } + + /** + * + * + * @generated + */ + @SuppressWarnings("unchecked") + @Override + public void eSet(int featureID, Object newValue) { + switch (featureID) { + case PetrinetPackage.PLACE__TOKENS: + setTokens((Integer)newValue); + return; + case PetrinetPackage.PLACE__ARCS: + getArcs().clear(); + getArcs().addAll((Collection)newValue); + return; + } + super.eSet(featureID, newValue); + } + + /** + * + * + * @generated + */ + @Override + public void eUnset(int featureID) { + switch (featureID) { + case PetrinetPackage.PLACE__TOKENS: + setTokens(TOKENS_EDEFAULT); + return; + case PetrinetPackage.PLACE__ARCS: + getArcs().clear(); + return; + } + super.eUnset(featureID); + } + + /** + * + * + * @generated + */ + @Override + public boolean eIsSet(int featureID) { + switch (featureID) { + case PetrinetPackage.PLACE__TOKENS: + return tokens != TOKENS_EDEFAULT; + case PetrinetPackage.PLACE__ARCS: + return arcs != null && !arcs.isEmpty(); + } + return super.eIsSet(featureID); + } + + /** + * + * + * @generated + */ + @Override + public String toString() { + if (eIsProxy()) return super.toString(); + + StringBuilder result = new StringBuilder(super.toString()); + result.append(" (tokens: "); + result.append(tokens); + result.append(')'); + return result.toString(); + } + +} //PlaceImpl diff --git a/workspace/fr.n7.petrinet/src/petrinet/impl/TransitionImpl.java b/workspace/fr.n7.petrinet/src/petrinet/impl/TransitionImpl.java new file mode 100755 index 0000000..f03b0ec --- /dev/null +++ b/workspace/fr.n7.petrinet/src/petrinet/impl/TransitionImpl.java @@ -0,0 +1,165 @@ +/** + */ +package petrinet.impl; + +import java.util.Collection; + +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.EObjectContainmentWithInverseEList; +import org.eclipse.emf.ecore.util.InternalEList; + +import petrinet.Arc; +import petrinet.PetrinetPackage; +import petrinet.Transition; + +/** + * + * An implementation of the model object 'Transition'. + * + *

+ * The following features are implemented: + *

+ *
    + *
  • {@link petrinet.impl.TransitionImpl#getArcs Arcs}
  • + *
+ * + * @generated + */ +public class TransitionImpl extends NodeImpl implements Transition { + /** + * The cached value of the '{@link #getArcs() Arcs}' containment reference list. + * + * + * @see #getArcs() + * @generated + * @ordered + */ + protected EList arcs; + + /** + * + * + * @generated + */ + protected TransitionImpl() { + super(); + } + + /** + * + * + * @generated + */ + @Override + protected EClass eStaticClass() { + return PetrinetPackage.Literals.TRANSITION; + } + + /** + * + * + * @generated + */ + public EList getArcs() { + if (arcs == null) { + arcs = new EObjectContainmentWithInverseEList(Arc.class, this, PetrinetPackage.TRANSITION__ARCS, PetrinetPackage.ARC__TRANSITION); + } + return arcs; + } + + /** + * + * + * @generated + */ + @SuppressWarnings("unchecked") + @Override + public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) { + switch (featureID) { + case PetrinetPackage.TRANSITION__ARCS: + return ((InternalEList)(InternalEList)getArcs()).basicAdd(otherEnd, msgs); + } + return super.eInverseAdd(otherEnd, featureID, msgs); + } + + /** + * + * + * @generated + */ + @Override + public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) { + switch (featureID) { + case PetrinetPackage.TRANSITION__ARCS: + return ((InternalEList)getArcs()).basicRemove(otherEnd, msgs); + } + return super.eInverseRemove(otherEnd, featureID, msgs); + } + + /** + * + * + * @generated + */ + @Override + public Object eGet(int featureID, boolean resolve, boolean coreType) { + switch (featureID) { + case PetrinetPackage.TRANSITION__ARCS: + return getArcs(); + } + return super.eGet(featureID, resolve, coreType); + } + + /** + * + * + * @generated + */ + @SuppressWarnings("unchecked") + @Override + public void eSet(int featureID, Object newValue) { + switch (featureID) { + case PetrinetPackage.TRANSITION__ARCS: + getArcs().clear(); + getArcs().addAll((Collection)newValue); + return; + } + super.eSet(featureID, newValue); + } + + /** + * + * + * @generated + */ + @Override + public void eUnset(int featureID) { + switch (featureID) { + case PetrinetPackage.TRANSITION__ARCS: + getArcs().clear(); + return; + } + super.eUnset(featureID); + } + + /** + * + * + * @generated + */ + @Override + public boolean eIsSet(int featureID) { + switch (featureID) { + case PetrinetPackage.TRANSITION__ARCS: + return arcs != null && !arcs.isEmpty(); + } + return super.eIsSet(featureID); + } + +} //TransitionImpl diff --git a/workspace/fr.n7.petrinet/src/petrinet/util/PetrinetAdapterFactory.java b/workspace/fr.n7.petrinet/src/petrinet/util/PetrinetAdapterFactory.java new file mode 100755 index 0000000..726ae31 --- /dev/null +++ b/workspace/fr.n7.petrinet/src/petrinet/util/PetrinetAdapterFactory.java @@ -0,0 +1,192 @@ +/** + */ +package petrinet.util; + +import org.eclipse.emf.common.notify.Adapter; +import org.eclipse.emf.common.notify.Notifier; + +import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl; + +import org.eclipse.emf.ecore.EObject; + +import petrinet.*; + +/** + * + * The Adapter Factory for the model. + * It provides an adapter createXXX method for each class of the model. + * + * @see petrinet.PetrinetPackage + * @generated + */ +public class PetrinetAdapterFactory extends AdapterFactoryImpl { + /** + * The cached model package. + * + * + * @generated + */ + protected static PetrinetPackage modelPackage; + + /** + * Creates an instance of the adapter factory. + * + * + * @generated + */ + public PetrinetAdapterFactory() { + if (modelPackage == null) { + modelPackage = PetrinetPackage.eINSTANCE; + } + } + + /** + * Returns whether this factory is applicable for the type of the object. + * + * This implementation returns true if the object is either the model's package or is an instance object of the model. + * + * @return whether this factory is applicable for the type of the object. + * @generated + */ + @Override + public boolean isFactoryForType(Object object) { + if (object == modelPackage) { + return true; + } + if (object instanceof EObject) { + return ((EObject)object).eClass().getEPackage() == modelPackage; + } + return false; + } + + /** + * The switch that delegates to the createXXX methods. + * + * + * @generated + */ + protected PetrinetSwitch modelSwitch = + new PetrinetSwitch() { + @Override + public Adapter caseNetwork(Network object) { + return createNetworkAdapter(); + } + @Override + public Adapter caseNode(Node object) { + return createNodeAdapter(); + } + @Override + public Adapter casePlace(Place object) { + return createPlaceAdapter(); + } + @Override + public Adapter caseArc(Arc object) { + return createArcAdapter(); + } + @Override + public Adapter caseTransition(Transition object) { + return createTransitionAdapter(); + } + @Override + public Adapter defaultCase(EObject object) { + return createEObjectAdapter(); + } + }; + + /** + * Creates an adapter for the target. + * + * + * @param target the object to adapt. + * @return the adapter for the target. + * @generated + */ + @Override + public Adapter createAdapter(Notifier target) { + return modelSwitch.doSwitch((EObject)target); + } + + + /** + * Creates a new adapter for an object of class '{@link petrinet.Network Network}'. + * + * This default implementation returns null so that we can easily ignore cases; + * it's useful to ignore a case when inheritance will catch all the cases anyway. + * + * @return the new adapter. + * @see petrinet.Network + * @generated + */ + public Adapter createNetworkAdapter() { + return null; + } + + /** + * Creates a new adapter for an object of class '{@link petrinet.Node Node}'. + * + * This default implementation returns null so that we can easily ignore cases; + * it's useful to ignore a case when inheritance will catch all the cases anyway. + * + * @return the new adapter. + * @see petrinet.Node + * @generated + */ + public Adapter createNodeAdapter() { + return null; + } + + /** + * Creates a new adapter for an object of class '{@link petrinet.Place Place}'. + * + * This default implementation returns null so that we can easily ignore cases; + * it's useful to ignore a case when inheritance will catch all the cases anyway. + * + * @return the new adapter. + * @see petrinet.Place + * @generated + */ + public Adapter createPlaceAdapter() { + return null; + } + + /** + * Creates a new adapter for an object of class '{@link petrinet.Arc Arc}'. + * + * This default implementation returns null so that we can easily ignore cases; + * it's useful to ignore a case when inheritance will catch all the cases anyway. + * + * @return the new adapter. + * @see petrinet.Arc + * @generated + */ + public Adapter createArcAdapter() { + return null; + } + + /** + * Creates a new adapter for an object of class '{@link petrinet.Transition Transition}'. + * + * This default implementation returns null so that we can easily ignore cases; + * it's useful to ignore a case when inheritance will catch all the cases anyway. + * + * @return the new adapter. + * @see petrinet.Transition + * @generated + */ + public Adapter createTransitionAdapter() { + return null; + } + + /** + * Creates a new adapter for the default case. + * + * This default implementation returns null. + * + * @return the new adapter. + * @generated + */ + public Adapter createEObjectAdapter() { + return null; + } + +} //PetrinetAdapterFactory diff --git a/workspace/fr.n7.petrinet/src/petrinet/util/PetrinetSwitch.java b/workspace/fr.n7.petrinet/src/petrinet/util/PetrinetSwitch.java new file mode 100755 index 0000000..b5bcd9e --- /dev/null +++ b/workspace/fr.n7.petrinet/src/petrinet/util/PetrinetSwitch.java @@ -0,0 +1,196 @@ +/** + */ +package petrinet.util; + +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.EPackage; + +import org.eclipse.emf.ecore.util.Switch; + +import petrinet.*; + +/** + * + * The Switch for the model's inheritance hierarchy. + * It supports the call {@link #doSwitch(EObject) doSwitch(object)} + * to invoke the caseXXX method for each class of the model, + * starting with the actual class of the object + * and proceeding up the inheritance hierarchy + * until a non-null result is returned, + * which is the result of the switch. + * + * @see petrinet.PetrinetPackage + * @generated + */ +public class PetrinetSwitch extends Switch { + /** + * The cached model package + * + * + * @generated + */ + protected static PetrinetPackage modelPackage; + + /** + * Creates an instance of the switch. + * + * + * @generated + */ + public PetrinetSwitch() { + if (modelPackage == null) { + modelPackage = PetrinetPackage.eINSTANCE; + } + } + + /** + * Checks whether this is a switch for the given package. + * + * + * @param ePackage the package in question. + * @return whether this is a switch for the given package. + * @generated + */ + @Override + protected boolean isSwitchFor(EPackage ePackage) { + return ePackage == modelPackage; + } + + /** + * Calls caseXXX for each class of the model until one returns a non null result; it yields that result. + * + * + * @return the first non-null result returned by a caseXXX call. + * @generated + */ + @Override + protected T doSwitch(int classifierID, EObject theEObject) { + switch (classifierID) { + case PetrinetPackage.NETWORK: { + Network network = (Network)theEObject; + T result = caseNetwork(network); + if (result == null) result = defaultCase(theEObject); + return result; + } + case PetrinetPackage.NODE: { + Node node = (Node)theEObject; + T result = caseNode(node); + if (result == null) result = defaultCase(theEObject); + return result; + } + case PetrinetPackage.PLACE: { + Place place = (Place)theEObject; + T result = casePlace(place); + if (result == null) result = caseNode(place); + if (result == null) result = defaultCase(theEObject); + return result; + } + case PetrinetPackage.ARC: { + Arc arc = (Arc)theEObject; + T result = caseArc(arc); + if (result == null) result = defaultCase(theEObject); + return result; + } + case PetrinetPackage.TRANSITION: { + Transition transition = (Transition)theEObject; + T result = caseTransition(transition); + if (result == null) result = caseNode(transition); + if (result == null) result = defaultCase(theEObject); + return result; + } + default: return defaultCase(theEObject); + } + } + + /** + * Returns the result of interpreting the object as an instance of 'Network'. + * + * This implementation returns null; + * returning a non-null result will terminate the switch. + * + * @param object the target of the switch. + * @return the result of interpreting the object as an instance of 'Network'. + * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject) + * @generated + */ + public T caseNetwork(Network object) { + return null; + } + + /** + * Returns the result of interpreting the object as an instance of 'Node'. + * + * This implementation returns null; + * returning a non-null result will terminate the switch. + * + * @param object the target of the switch. + * @return the result of interpreting the object as an instance of 'Node'. + * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject) + * @generated + */ + public T caseNode(Node object) { + return null; + } + + /** + * Returns the result of interpreting the object as an instance of 'Place'. + * + * This implementation returns null; + * returning a non-null result will terminate the switch. + * + * @param object the target of the switch. + * @return the result of interpreting the object as an instance of 'Place'. + * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject) + * @generated + */ + public T casePlace(Place object) { + return null; + } + + /** + * Returns the result of interpreting the object as an instance of 'Arc'. + * + * This implementation returns null; + * returning a non-null result will terminate the switch. + * + * @param object the target of the switch. + * @return the result of interpreting the object as an instance of 'Arc'. + * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject) + * @generated + */ + public T caseArc(Arc object) { + return null; + } + + /** + * Returns the result of interpreting the object as an instance of 'Transition'. + * + * This implementation returns null; + * returning a non-null result will terminate the switch. + * + * @param object the target of the switch. + * @return the result of interpreting the object as an instance of 'Transition'. + * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject) + * @generated + */ + public T caseTransition(Transition object) { + return null; + } + + /** + * Returns the result of interpreting the object as an instance of 'EObject'. + * + * This implementation returns null; + * returning a non-null result will terminate the switch, but this is the last case anyway. + * + * @param object the target of the switch. + * @return the result of interpreting the object as an instance of 'EObject'. + * @see #doSwitch(org.eclipse.emf.ecore.EObject) + * @generated + */ + @Override + public T defaultCase(EObject object) { + return null; + } + +} //PetrinetSwitch diff --git a/workspace/game.tests/test-bin/.gitignore b/workspace/game.tests/test-bin/.gitignore new file mode 100644 index 0000000..7904a1c --- /dev/null +++ b/workspace/game.tests/test-bin/.gitignore @@ -0,0 +1,2 @@ +/game/ +/xtext/ diff --git a/workspace/game.tests/test-bin/xtext/tests/.GameParsingTest.xtendbin b/workspace/game.tests/test-bin/xtext/tests/.GameParsingTest.xtendbin index e4d0dcc235866a35b35d1338c0b0ae00e666eec4..1f5bcf77d4dae84c1dcf37ab52e1f2eaeecab92a 100644 GIT binary patch delta 64 zcmZpXYLVg%@MdNaVc_84V7OS(w2}7}D>IPZ{EJnJ1PgXu;ddoX>N G#}NQ`q7{e$ delta 64 zcmZpXYLVg%@MdNaVc_84VCYY)+sONhl^IBH{>3WA0%nMF=`w*BlihjD!E_^!J(xbs G;|Ksg))ROD diff --git a/workspace/game.tests/xtend-gen/xtext/tests/.GameParsingTest.xtendbin b/workspace/game.tests/xtend-gen/xtext/tests/.GameParsingTest.xtendbin index e4d0dcc235866a35b35d1338c0b0ae00e666eec4..1f5bcf77d4dae84c1dcf37ab52e1f2eaeecab92a 100644 GIT binary patch delta 64 zcmZpXYLVg%@MdNaVc_84V7OS(w2}7}D>IPZ{EJnJ1PgXu;ddoX>N G#}NQ`q7{e$ delta 64 zcmZpXYLVg%@MdNaVc_84VCYY)+sONhl^IBH{>3WA0%nMF=`w*BlihjD!E_^!J(xbs G;|Ksg))ROD diff --git a/workspace/game.tests/xtend-gen/xtext/tests/.gitignore b/workspace/game.tests/xtend-gen/xtext/tests/.gitignore new file mode 100644 index 0000000..5fdc003 --- /dev/null +++ b/workspace/game.tests/xtend-gen/xtext/tests/.gitignore @@ -0,0 +1,3 @@ +/.GameParsingTest.java._trace +/.GameParsingTest.xtendbin +/GameParsingTest.java diff --git a/workspace/game/.gitignore b/workspace/game/.gitignore new file mode 100644 index 0000000..ae3c172 --- /dev/null +++ b/workspace/game/.gitignore @@ -0,0 +1 @@ +/bin/ diff --git a/workspace/game/bin/xtext/AbstractGameRuntimeModule.class b/workspace/game/bin/xtext/AbstractGameRuntimeModule.class index 84e1ca6b4de3658fdec814f4b72d6a901d6e3df2..9afebf594753f4a0147ba69ca8833216a6f51469 100644 GIT binary patch literal 7934 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 literal 12257 zcmeI2?Ry+m6~NC8p|cwzE#;*x6uN~{Qi@r{3QB4rP0}#3Z9_K}3R0ZR-fpIyompmP zw=JT8VgD~`u~*Y5LH&2&3m%Qgbbb!s@(lFd8*1GTa0;xeyUov!Nz zV#s9Mb=x+tnTF%IL2ZfGV!$Up()HSt+_bH(UpoEz&~*>2dtluI>mIl=9+>5)jGi3~ z-D|{^Q48FfQ47v@`B?R!<+QlB7K4u9jp`GivFeQL_<`XB)Tf~?eZ#X1y!sUNSq*S) z)Y9iYqth|GY18C>z8#@Y^(OD2xt7`F&-A!smikw3o_7LFN>(Gm(POstY$>~`I#6FQ zJiipDFS=*Av* z$3=?l7Z{xu)|)0K;fjNmjAH6hUJ{WU?~X@{m~vCXs4{u6N+mcnUHe- zC8oq3$FM-`c_wf2Ku(wiD7r{( zvEu1wxo>(_SCpgqhd>x{u}G|8{C*XPPfWM`9ZP9h>d9oc#^V2j(fT~cNHYT0ySF$7 z#$XIKj)Ml97~D7!wjN|}BD{R3M5kdRZZ3YL*IDA;qBvR^Y?epI@hGE;{y7>fTiCzY z*(m9PU@N0)Mkh70u9;|rON4V(U@L<|#hnY$xKLSBv}Z6&1G_Cf+(Kf>DsT&fi^X%u z?ug1H)%+m9t*DxjGT1UuRb(J@=t0L9+oJ-vG5FV7DZ2`l*2=JLOL*JQ*oN;nTmzG; zMOT+@F>&R$P3%bpTx!r%1#ZVcDmEMA00U9rhZAQ8*JrsR=9*U9F@m0lGw;rh*uS?i z%$YiXYD_RVQmRIESg?4*VS`WVoXOuA+)Znh87Vcphruxg%`(De+HDE7%M=R?_U5RU z87lSr41=bMei`X91vf_Si)#}GcjPEGs7jFqRTYPzQZdEg7CAXx7%`~R%Fx55a{C#)R;*m;M;cM$)1&}eW%(D| znE=wIT&|t;aB1g53?3`CQ!WBcC^i!hBe5v58e(uOxdiebisd0mrb#H!hJ^$I+xX=fczf zKdx?5&QlpaKA@x z(Vf2KTbPzki?6NZmt2^IZf>mX9iYh7T$E82c#Oe9u?xl4UI{2(QasmJDzu2*&mpC5 z7xrTkR?wu#b4an2jL@$#I9YC0F{sSOFy9*L8RTYDL!+dIUsKDbh6Kwr+F{0}#BjT1 zmfO6Im2?G6#IK2uw7A8E4Sl-8tpoC@=A-NE&jE9?XhTi8wY%;obMd8VwsRBJT>^e@C4mb(BNH6?PW2d!JimZ;`nATe%SJTtWHEG z?vL&Se0B~W*TZM$;A+@_ueRfB4J!D%itqN}rwsp&y$53_Hjn=kuKfVtjlgyIdxQLB z18m0E3F;Z}m6lY|{mOIeZl zVJAU2N)qmXUFfYl(f$$GJ@7|Dx{Dw!lB7K;(%l4UFF`s%l0KaxO%kL!K{`p2KAR%l zOOQTCkW7;F`4s6sf^?w8;K kybRxiAHb{dBX|vd0zZQ{;7#}yyam68ci?yM2l(TE0b?SIUjP6A diff --git a/workspace/game/bin/xtext/GameRuntimeModule.class b/workspace/game/bin/xtext/GameRuntimeModule.class index 2b91d0f7b766adbed9a988d692255e4dab288197..f995be5feb460c31d21dcde9c06953bcf7f45327 100644 GIT binary patch delta 116 zcmaFNyq<~c)W2Q(7#JAL83ZPBMR0L3Ff(xSFt9SPP5fIB%%I4?2owMTMj!-=0!elt tPan)@U|`kS&cLw|D8R(P1tdYz3_un)kmLcgS%EY!kjKct2PByo_yOl!3n2gi delta 276 zcmZ3_^q86J)W2Q(7#JAL8N?=XMbxu1a56IRXC;;;>gOcprR%#E73CLkFmN+6#D(S+ zr55Msl%=L9BP zHGB|G2reng%uBb{44ar!AOV!~MAGH~vu)xXNmmmFW(G!}SGaaFa6}4mZD-)w59Bd1 e@B>LUhzx@Okj(>S3o;0S<%Pkd2!kk)W&i-@lSc~x diff --git a/workspace/game/bin/xtext/GameStandaloneSetup.class b/workspace/game/bin/xtext/GameStandaloneSetup.class index 049a1fb6484cf5cc802c3234a71683930211c4cb..17bdee6ff90ed5eaa9b5fc9f2e2dd062a12a72f6 100644 GIT binary patch delta 240 zcmcb?c9ogy)W2Q(7#JAL8N?=X#d2{mFf(xSFt9SPO>Sij6XIfEWZ(o5f;P!@WC}301X2Hp4|+L ik=q&gw=oEWBh26e%kl!v;1dEH1X9e%AOa+r7(@ZVEgkUy literal 856 zcmc&y!EO^V5PeS5ZnC5V0) zDuD!d{-QrpF}q0$hqPBNW6${c&CHwmef|9>fY;cFP!rfV3v?EG`>LQpP$pHmH8h|w z8AqrKytwswpA0z_C>2=Q(ME^20!!V^BZ2yRn^J_PK>I|Us$Qm< diff --git a/workspace/game/bin/xtext/GameStandaloneSetupGenerated.class b/workspace/game/bin/xtext/GameStandaloneSetupGenerated.class index e40af6f00f407e8a4ca4689b0b86236258416692..ccf68f54abc2f52b466c340a1a66b1dca2c8ec07 100644 GIT binary patch literal 2432 zcmb7GSzFsi6g^`TSC5+hm@q7kS9hUOMH?H;ji>p zv^*qn`*nHlkLuSuk_=ve&;4bLU?F^Y3qe0{9Z9gb>5fYnQ)vl_j;z^R8+Z zRl_oQp1YNUC2n$Cb$L-j8^Z^C>Y=I_s##LjclNmEN@!>3v+R<>HA6pexZ)#az0C~m z)4HjtF6O~vo4cz! z48yti^URPpn$3xF))Wjad)6$@TMMg;o4lkuE;*xHCc{87mD8-UQnIX)!4=&zR%&}P zF?@(_2_G@sZ}pD$l`T^#aJ#IVs^K(gCZk9ACKWADg&0U888^_yaJ`Y5_|z}s7H%^{ zY>ywe8SW%6qb7um_E1S1)t_V+=!x$M6Y~ z5=P0a6=bQRYg{;%VtAB%c@7UBDRZgPQKT_0;U2?iz0$n=iek#Lxw5dKYWr%54+j@` zEMo!+X^>sZ7iQPy78p{wD{jq1aG#-j*L4r36y@mXXhOvNgeO6qh)l}(91j@cnq|7G zZaORcnCz3e=D^RSUPS5nJd*H`p~si7L{Q!v3JA-X0)=CgpAqc~BDmQ!BMyHoV+K#? ztsGQbhKJ`IdJc`&B?+?(>3TtYdNy~gimh=ayBUlYRq;NK8Iu5*j_$k$R4EhUz$U*DX>>$TCb`g;1W`hZIvAwsoi%xgEs{Rwd*}jQZVY zp>gU`&73aVzx~?X58hreYVWz>y{|iEXZexQo za!r!JIfn5o;Rfau@10KLEiyc~5<-)Egw#QaRof>mgEA1ydjY(ti$XCdUT#z7J*`#~ zLT3g!Yf}000+TxuN|g5Ng+2?UT8^QtQp++D_864&&1)Jd&2cBexG;~kY@!kosD?o* z1Y!DJqoUkKJrzf4qcl^fXVhOCdyCkwGzdYaw%uFoLI;gy-vHOqNi(X_=%Q9^UMK4i z^_}mK7<+@>+*tYzZl-^sB_Ae1rvcq`b}yaSM{qYh$R2-N02v`Z1Gqz=Oq8(ze45w_ zW{I{x@bPx|cMNU6#c=)|M$Yhknz!p{CQfNm)eDgRqVolhtrLtTKCR-j5Pn9NH#xx< zRZNHRJe_!2#aAKxji;;W#BwlRUOU0pRjkwhhWx!Mo{`}RzOCYWu`up02+_ixXanR2 zNb3$NZT%R=C`K?z?L3lrhLp#0%x4m?Bu;_nqjVEL;78JB5_j7O7iBZ5NMF~X`FQ?l>JGeWunVmN95I%rU zVxoz9?L!&Qwk$=JK2R9(tC+$Wy7Lea2v@RNi5bf1w*#fKdh$ zecM%Iv~l1H%YT2X3`W}TV1s))2&FHq)QX2j*L@74C)^#~ZXuUJsEv(HmYP~OedL}{ zN?Tq>o&cQDQk&)ydcF*!Owj+yw9-vy$}w`Qx#0F7M0d2J;-qSmVHRg7K-6>Fn%Kv~ zeJS^70;z-_{Xy6i*Uujp#jtC1z%2#d^IXY1;7&xXY%4isjmHI3x?>KOmv5yz$!$46P`0=O^FBPZXDIF|urV^o<`<>wrzYoQ78IxIr{<;s+4)7O`mX*- zS*gh-j0^(lsU^<&d3lMM#l?wv$*IMR45}KMKIpoV^K*0a^YlwgGIR7@eKLzntQi?N zgEQ0f5=%;pQW+U6G4=53BWs%co$+i2&^?R{%s|WvbR|0rBLh1F2av}J%ADF9RO~15h15g8-Nogz|+ze4t6fV3R}uJJLAk literal 947 zcmcgrK~EDw7=44#ZI?<*wF)Xa3Yy}99!;bnF{DJ2s)yDl9;e&MGGuqAnVAy!WhR>F z-5+KAW?6&)7cU-mcHYaI_szWd=GX6UKLEVJs|X7WtEXO``fe(6*?pIIWpso^hUT$2 z5#3DawEJmtEECUA?IoGg%I`7U>1>Y~7Wd6mMyN3~F4cW&jjdvtvG}vL(wXc;PI+ST znaV`4=QC?2natf=9@j=klB;}Xtmnq2JCZ8QoaBkn+IT*Z{KDa%r2X?P-(thP;ez|K znT%`wfpY%;Xkt`xw~iGw7%IIo#CB(J8QaiXrPJLIYh$3a{5a1i(vAcr#n2jOrxZry?EA9m?S%t_vd93`Mleset zF%e_sRI!saa=OwmB$=vksbmtnE4ua0?Xqyb78xEWeW<;(RunBqB(1(d#zQl=i9Apt zgyr+@+zFX6v=4Pc`=c9_+P_!Q3Y#3AMR>umR74PAiyypa~}5qH19ZNd+(;fL4o8rBik eJ;LMS|D?nl0aN9th0`-|`U5ZNt5EId*!%IqOe~BH>MyZa|dyP z?2t{F7cklP9y>$s8wUx3@>>6IZ;OY9AX)PRA%(djh*hd>f_PnZE!Pe~X2o@*wbDuK z67-&==AjCvyi0vG8jFBMLg-klPQXVO)J?SpoDKxnO#6d5RXu8K!pz5@PCWjSDCuiU-Ioa;1eY6F8}}l diff --git a/workspace/game/bin/xtext/game/Chemin.class b/workspace/game/bin/xtext/game/Chemin.class index 174a88c24ded2551ea12424e7ce18613dcd13135..d521b45b3af914567b5395b48e3d6f44233964f2 100644 GIT binary patch delta 362 zcmZ3&`ID9F)W2Q(7#JAL8RRE&=_<1`urV^o<`<>wrzYoQ78IxIr{<;s+4)7O`mX*- zS*gh-lV33!PF~9>F_E?QYx15FM8`yV-^$4GpwF!B9Su0?84HM7@MmR0{NvP>G|nu{N%D?UmPw+FynQ z65RPwi1EfHQQHeQ4r}|3-@KWf8UOnI?FRt7g|-K41h&o%KR4}&CA{66@6~!fZq*cA%!_4aI4WgC9vL86YfEgKxN79Ypt{on}oDJOU*MC&-sLg zDoI7mj8KxMT8(3#WbbHD98EbDNvgD=N=Ge@5z>s)kV&Zw9dmlA@K4nKBIO%os8N(r zbCL3(*dK_@{6Cxke7IeLGE@i@x~|am#$Z|6q0vG{9b5X!KuG>+mW;U`F{~zm+CYUY zK4n^1?2N^Tn}Oi7V@Y7U(Y&rjpqMQwfuoX$UzlvdP+(rvW&@)XXuD}c?mms z9*RgZGt-#J-le^JJ=~$?qLl5AL5=d?Gm2-*UC!oQV*)!Uv^tzhPJ|sGtAV+lINEOG zW|l3JkNQVkCzzIxF7CL98jFY-C2Y!ND>q&-RM77|&q6Iy8xb?zU;fofPAi;_{kLGK zW;*0Y!ggeH@tj(=fduNuGDIaDIWEly!8Oz2^umKz1UB+AdhmvT=SG)6=_8gJ+daZr z%?bqY(c!BFsNk4vKmoCb=)hTn@8Ex_1z(}`6Rm4d#np1`x|Lh(qpranu=_Tu*uC!X zU5D?%4*Klo{QG$S;0k_t1@FP5T<0;+e1GEbQ-}8*e&+D=75^8Q`O7>~1Dd!4wD2on I?g#Mt4^pc&mH+?% diff --git a/workspace/game/bin/xtext/game/Condition.class b/workspace/game/bin/xtext/game/Condition.class index 38bdc718b45848ff7184f5bb059dd222e7fe3342..5db453757874b43d1b8a1590555b7ad56d668923 100644 GIT binary patch delta 201 zcmbQux`K)8)W2Q(7#JAL8F(jh8Pu~gurV^o<`<>wrzYoQ78IxIr{<;s+4)7O`mX*- zS*gh-j0`;KsU^<&c`2DCnfZB)45}KMKIl4<^K*0a^YlwgGIR7@eKLzntQi?NgEQ0f z5=%;pQW+WSvFqW4Ynr@{(M|*C7DfhUAZ7)+kdcLvft`T^$m0a^m>9T#EN(E12LNY_ BG`au) literal 667 zcmb7CO=}x55PeD$uf28c#EsMMBIw2GAwCvrlS^<&VA~$-8hVu1!&+unTC{RVepw)a z7JBTDDxKXp$t4tW(8oO9yqP!BpTAc>0er&y02>0k=bp}eKT#R=kF1$%udNBNDX_g% zXR4nnlk~sMmK1w|`Y=wl(f&~2NpF8Duz6(X6rdr{zGsh|v#yS(0>8f-M}vGDw~m;D0V2&iEOOWsdBoE z*I+Xte>ZD^MsGi=IvMbNtP`XB%5m<8TYMNj^hhH=IOL3QY*#L(V_lYO-N_!54GMHm zO>9lUHp%!CO-{LZaS`CPz*bc=z*~V}JuZRf7hM!=XTtL-Y6ASw{8@kv9>W%D90weI zT%+MN>OVT+C7Qn~&NlBQr`&fcr2I%7JZEgTio2Y-SKVIVC7-}MUNzQ#g*X2IWy-O= diff --git a/workspace/game/bin/xtext/game/ConditionConnaissance.class b/workspace/game/bin/xtext/game/ConditionConnaissance.class index b4b7e0a5b9ef76bdd09c41e8220593f4c53e9675..0c6c59d35dfd18a5721909aa9716d84d3988ec1b 100644 GIT binary patch delta 71 zcmZ3-(#gbi>ff$?3=9nB47?M$VkY}CT2JO3f;JyqWp>e)|A$fx3e|0=h7KVf-PRaKEkOKp3Hl9Jf>fi~CrG!|z-k>3cpI%7t(DH=kRW)Hn#U@d z^8pRjWGW(-7@EAy4Y}DK7D2hu z{I6*B;=hG%SIuVvV43ztzUw?*#1p?QCuA+ij+hg=2#tXVIC($#LJ| nK9};ZIQq0`4<&nNYzwrzYoQ78IxIr{<;s+4)7O`mX*- zS*gh-j0^(lsU^<&c`2DCnfZAksl`AcRSiuabY02$xw-jy`lThAIr@_iFp8)<5>Vvo zlUZD1<1m=)+gCKg5pb_Nb0j}ydW-~#fwk@-Lw9fgc5Pe(P*fD{GK*~4WOQn=Ub3`IhFO?BU1`Y|8dfYf8cPo3>T5qcMmmz@! zcYX*z12J~fw1-|02aoqX&%7DGonL>x{Q&R=I{`KXw$DAC`%$I}8Xa1*&|X^;`v98) zy;F6jM!7QC==1!PQZEor(p($u4+QQE_l^WM5AA{iv<14?*|Brhg}5v5`-^c@+5C(a zGPOmib5%ExrL*&#it4S5+Ordqx+tyl(zA6*DbN*L2sC)?6w^Q@eC2 zz0>s=y>+|T@7JRX3_h6Dnu<*#wrzYoQ78IxIr{<;s+4)7O`mPf# YG$er1j10^`%nH=R0HoQ0BohM%01br?nE(I) delta 112 zcmbQuxQmhN)W2Q(7#JAL8Mr5MnM_Pnieh9C^~_7o&nwO>E=kQR@yJXqN-RpwsAOm0 zWMp7>^-s!5O)g<%;PK5YF3!wL52-9jEoNh6U}Rth8Uq5%46HzsiGhuQ9n9wfk}N=Z F4gmKC7r+1j diff --git a/workspace/game/bin/xtext/game/Connaissance.class b/workspace/game/bin/xtext/game/Connaissance.class index efbb9d63e3e3fe05749c872f166c7deb44f4da41..008f44b52c9f7de0208cd577185606eb355fe636 100644 GIT binary patch delta 247 zcmdnT_L!OL)W2Q(7#JAL8AK;?87s3hurV^o<`<>wrzYoQ78IxIr{<;s+4)7O`mX*- zS*gh-lUo?I#Y8oHvJ%S@^>Y&Q()EK&iZb)ktu@0YuVqXPQPt4&K{p^dKQ}i&PrtMz zGe_UmC$qT3nvsDsI5Ryjv81#pm65@ofS$>EOpYEvmoYLh12HSmy{s&Z4D1XX3=BY; ilYt9Nb2IROXYx15PdG~CRqY$Lql6W4FxIX&>WFS)Jq8hDU?G(B#zF;+Pd1cSGH5NzYGZ^ zkT~+A5VK}WgQ$==tjC^x^JeDFeE;$33xMZ%TEhy%)|r=QzL$zz_708KLOCaNB5PP> zSU(Y`qL&Gs_TJ4-Wa1g>gCtX0`2&V)-MuNp>Y+nyq@4dZCPp1Mnz)G;Lo}$G?{r6(?T)=wI_;Nov_?wHqeVWGb|R=lhW5xL zBAW`U%6H|AQt6LO&am0t`jBBaxe+|&BDZl1rQJj;*bZ(7yM^swcW{Sz?*{xmV!j`45AcvI M@PxjIxH%sG1oi&h&Hw-a diff --git a/workspace/game/bin/xtext/game/Description.class b/workspace/game/bin/xtext/game/Description.class index 3d422e739df0d4e1f707e49be92d5ff52fd8f2c2..e8733f9961201f6a6c013b4808a5d2414d30a88a 100644 GIT binary patch delta 142 zcmeBRy~xCM>ff$?3=9nB41yE6jFj0K*ccgP^NZ5;QH5JXMVWc&)|z3H6B$b_fCex!Fat3w&{!50Mh12U f4j_Y(fs=s?Omj2vfN5R^KA;Ll27VyP#2^3wW^NmU literal 648 zcmZuvO>Yx15Pfdb>}Clhgr>B7`j~QPj!3lPQi?zdaA>H+(Q!swSG)GgcB}T6A%O&U zeiULHLRyI)JfoR;9>00xU%$Wo0PqseGpq@0T}HZ$<5JZ$enUZf(?sKJhL%A8OkJpP zrEEF=G&>_51@Z%38EfKef%Vbui9qYn%_&1ipm&Wv^4|FzcLc&`>nXVEg62}Yx-peX z?PcTLtfD%+l0|2FO48Jg^HDlq?h(Jx1d>`=>!O^I{MVuA9R1~SOHD>6m5f&n6$NtK z?cyGK0_}q(+u>+(&F?sRW6S--zc(?KKAzVz@>9i>1O^kQRdu4gN%1n7mlUTg6xTOL zyZ^UhWx@*4W$>Z1bCX6D*yam2R9;o~1-g7`6$|W)ZU-i!#j!j0n%ff$?3=9nB3_=sRjFj0K*ccgP^NZ5;QYx15PdF5Hdz7*ft1gJflJDvIU>=hmnw)zDI5|iadft$t*c#o<#np`mmz@! zcYX*z12J9_wGzD`4r}i`KfjrIo*%!yd;{*WhxUXbv;;br?6Gs!HE~nm=SSnHwAneG z$i(J_&Xm{I$imr0MtS*0#;y4&Nu3wgd1+m`N1UN3NhZn|>*a#vM&X~R<3A-|BO|?) zO8Sd};?{VoOaK3z7){)2<2E`1jnUem{$P4($;>-#(*0mrXQ~aoU*-#PbHy$Q^rkjZ z*|Bmu#2YXrKUX?qz|QE=y$+Dg|1D-D%b6KL5{j zYLs6(PP?MJG1V1<;IkUp9+Mq?H{#<2DfvXO;7Z{bDcj@&x; zo^$T0d!PDCQ(vF^13(7@Pi@r{L%gL zBnZ{LEBCHg%`GWRYr7T`X8+`rwT=|hgpj#0T|&9hoO!8&){B9V)uAAIZPPnA<+Fq! zBg`oIK0lS?9)rq`#;VTKFXaaPip+&+fFnTUwXizgYhZDeNm! delta 381 zcmY*VyGjE=6g^{Jo5^Z4nnJ6oL@g9-gd`f9h=Nu|!OqP(BqN)dWo8JZ$~Q#6#7a=m z+Wdw8A>vIWh{b)LbMC#|N$Dfxlkb-|00%f8^ZoH{b5uZyp?n_=qP-;2-MyBz#s*kq z@K@SOXOe-u6S3*1Dv7)@TBO!=64`e(!Heyl6sn&Z>xHr1T^T1TbyCEU*2asD6!QtZ z*gA<~Z|v|tSpS{xjfjLFrjm1TltV0Ig(2TiTKOY}>el(+g_qtc-K}q5KYe{>Mg*Se z*l4Gmm)f5yX(Jo=h6Ru=m@j1rFO+knYts^!XJE+C9~jn=L!PoV1SpU(6sg*op#Xmc tzo~@JSbC@K0xIP5#F_flX(s@(jKtN)&D_HVscJJ`9Sw>=lPpX8!yi9FT-^Ww diff --git a/workspace/game/bin/xtext/game/GamePackage$Literals.class b/workspace/game/bin/xtext/game/GamePackage$Literals.class index e1fe8cc8e60ffc27d195a650c30717f9bcc39d06..2213ec96e46b588ed09b8a51ac6db8abc63ce123 100644 GIT binary patch literal 7320 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 O0{me>5Pww0g8u_kQ5-h_ literal 9444 zcmd5?>vP*g5I>bR4>wKHJlZBLttbVO0uAp%TMCM!vz9eS(gL^QD7aGIPI$l_D`xxMAuUS~^dJ*DkPAg}DnO@YkR2wJBIE#1^Kk>x!u+8 zLsF|U2yYMVC}#SJUf~sc0&Q&*vgv&v2GyN=mIJTc&18K7Ht%p~39fp-;EAX5n{n3-gdK)0A` zF(=WQ@Z@SL8Ui|>%2Qw~d4UD?h6Xdq#m#-0LAj6$c4fT|@Rw6w+pZ~(B&-qcE&p2Q z;%EY?#1u1m0hwgNAtdtqilM|AT1G+M*SwjlCV{Nw1r~dS9fc)SAlHUQ#6N z@l>^8>9WzRnG&n>xoiRjaxu%|i>&5l9RGS=o_~#*v{t}pI;vr`ogv<*BEYydW*Ng;dO4 zUr8lU{7~eBSB378$t0|!3rl4(KAX2vUgoU0i&f03TLB?lg)q84trV{1dJyKk~So< zEL3Dt5KEY=I&>)9IWGU>Ip~zzY|EH=&~_cqi5|ihw6VDl4YleY(rNN7bg{uMB?o~Y z%#iPe^_xvEprP+Rr-x$O@Ae$mjvU_;dx76_X*awlR%Xp(DmvYsA4H-bbnZ}y&?1=V*!YFw3v5=TF2%N}w z0y<$J?5Gum69!TBJKY%lF9A;p9;gKJ7<5p5mR^nsyNUNrd6%$8= z)xyuhMG;u0?YJ&A{m6D{-99N?wH!$)sLH9{axsm$tg~Q7FPajXTUs-`+m2K-0{~Xd zq5a~8!owGC_8BPEW7>7RNv&j-h{6jdoeo|XBTWYjZK-~@aCjcJ@Oq6Ql)q4UeT<%u za`zdYq0xbq*eb?I#}4iJp$(_y!bQS^7hbDzk?hd09XLI9elKUKa$KWN4J5@5qDg0D z*YQe$F#1N4bj-rR$Lm^2@OT4JiYI_C%)+fJgG1{VFNV^9l;1@;w2@W_=B32;RRRu3 zPUsgdSPr0Y3rmyIe@-XbI1tA!4Z4%;=xI7yuG6t6{dF6`l)k}?-dE!_Q@BdUYpZeW z37-ZN49U02!f6H;=+IlNM;PlUE*u1s(m+VW+{ua5#*@ zM}Q$n@q8J6KWG>4t=a13NE>PBsFon*j21-#CE zcHOj4b3Cf{yDb`+>^m{Lb@$u0yKe^$<55^idcdy3EEY4@D0i4wxC2(;ckCbrN8vvf z9k?nx{f`*zKNkG27*FB8d+=NBG;slNvJ$6>$8@|FAwoU5p)uheCj>7l4Wq|?7)=QT zuFl{eASziS=g1U{*2pxOiRmoT3exjP=a61NI*-pSkj419i%6G{E~9=0?N^arLiuI1 zyMlBL_3OxAMgAJnSCL*vdISB4X#X10n@C?rdJE|r_}rUF-$J^9bQAsEM*FvszJvOA zk={YOE#%)ryZ4cPfcg)S{|N0qM*0cr?;`&x($A3IL;Zc^AE2Mlkv>HE7ijk-$|a=R zNULbKgH%TQUDQ89`D2tT$nPQl74kKtb(E_}HT2U!{%hoQXa#aaj;Cgc5Bv;x Na>z5%CB4|{=x@(+mY4tl diff --git a/workspace/game/bin/xtext/game/GamePackage.class b/workspace/game/bin/xtext/game/GamePackage.class index 8e3ead7e2b49c71068a1ec5913b4ef15fc45e2aa..a7504625eee9f5f780d90404744251760e879149 100644 GIT binary patch literal 6975 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 literal 930 zcmcgrO>Yx15Pj}PHdz8m1EDR@V!ou5LvutTQ6*FbQE7ogLL`pP#@f2t*elzq+FynQ z65RPwi19X6BItz+hxPi6-W$)nv48&h`W?V4yoj*Iuzlg>h3{r!Cc7uvOKU~ymC+G4 z7@B9|Ty%4xv+l>qnM^%HwV&onD}ThW-Z>aEY#f`Zj8J1}EZGBVjjiGqWAP_#r8D`t zobuGn3YCkHo)^|kayfIad0ZQvO0H&wv7Q^79ZEW(aFVA&YvcJu^6L!$L>*j}d_x-U z4Hw*B7Ba3466O5=;l!xob{%)nV5syLCbm1t(zcxwewfcD(vAc<#n4Jj zD)OJqb?lYOeLSW=@SMI1oyGC=H`(j?ZU6uP diff --git a/workspace/game/bin/xtext/game/Jeu.class b/workspace/game/bin/xtext/game/Jeu.class index 96a24040cb888c21f88d614487b478be98e3d4fb..81d529bd3a0c2425ef4e557e6cba0995dd0567f7 100644 GIT binary patch literal 791 zcmb7?O-lnY5QZmyZCl$~>t|a$3hl)lMOs9ZdXR!b#d}<)OUiCivRUbG^WYEgM~Rb& zG%X1Bu*^>8oo6QD{rr0W0Dw#AM6ki2KDRixJP{f42P`7kV$hh1H^Eb(68`u)#n?u$ z!{AJtgkzk_S&kgD3H@t>eE1_FQi66kpQYLei-lp(?)F9jJ*f3bov)}n-M_@W7X~$g zKcg|yYH5%`Yni<$5xPd`#ev%+Brhs`2QCxX-N5Dy&I!7D$yjHZR=lt><-?K8Ee$A- zWuk;F+#*;1=^2Cz_-XxX;xuUXomNW7JQpfPTH$7GTnO;gDp8-%;%W>0In zhc`my6KyhKrB=keU7NX#@Z`!^7beDgnbI?s$a@#gc4RaLoAhmyNlRqL2uk2gS%!*_ nyHNG926Z3zph4<=Qg1+$bO%9xNcmBaA5(r3j literal 1186 zcmd5+O>Yx15FM8`n_ZG71Ol|BV4#$wpyY@|qF$;XK;c75sKn9Pnysr{du2OS`pb|& zf;&G7F*b>^Md84W!+JF1_nyZyAsts@z@e5_v2JZVGjvhX|<0DtRJZp9zaN-wnPuKR=NyV3F&;0nj4j#^Aj4Y zEEg%WLP?ryHA#79p3^8CpK>a)Txm;{PC6V<$PK44lTuka;dG(!Ptd{dlvl`5t0<%P zBIi*!7z$(mA4~*gs8(PTY6MFCd7+!F;j*+NtA$K@uJpB`ko@g5n{Yj5SWN@WWd#(+V9gD7HEdZX;aD~uJnomk+e#Vivzmj(u=GoCmO?Av)2-n3j zzQ2y^IDzIX87paUM!B>v1=mc+rxyXV2yFO@1aLqgn9n+a${V~Y&c_&s+ms04E5$bs z5aL{IKneW-y@Po)`U>Tbjp#E}zGHL^>bN?LTd(@oTi)J=EpNAB q2RU~+Myz^MtZUaHphX z!Wbq4ZU|f;)o*T>UxV7@3l%6|KMsyd^0_@@cN-nQrzMsn-egKDQUk&Q%d6dJC5pQI8Gs91^{M6;B Jbe1Z$z5vC}$dmv8 literal 1161 zcmd5*OK%e~5FVE{n_XHGLIW*OFqB79AUPtDsFyYsNTDDlRO0AttgWkEdu2OS`^%6( zf;&G7F?Kdhq~^kn!`hyiZ|0kw$L~Mie*(Z;Xa%rBpmJgPg>5G+^^}Tjphk~)dMx=0fZQ0j_zr#bQx|E()uDbH!3~nV;ZY0 z7b&wsNt$alN_l49(I_0Aaw@W1X-kz(S{xa2!)eTK|l`j5ujr+V_HMrsLDg0QLy1`RWGnnm|xYEdJF;>;QIoh$CuB1aQ}IRRK0|I@X|s za)8oap^bh(`D-ou2J632y8=}_9mbuvy~gcw4eo%uH=*M1I^0FfJ#XJa{q}-&g9q;!D9{Zav*q@;NX<^?j?9U4Mxsx%|7oO=QH1Gy^gI@`AZNjU+tNAbk diff --git a/workspace/game/bin/xtext/game/Objet.class b/workspace/game/bin/xtext/game/Objet.class index 48daf2f51953f9c89b8cad820a1d3410a89b706d..a6b6840c432ee97144b563b76a6a0a15bca3cc32 100644 GIT binary patch delta 244 zcmaFL*2Thg>ff$?3=9nB43ZPMbd=c{*ccgP^NZ5;QXTVqV$I0F8JwA(msnC- zl*-6pPe9LPA112^pfea5n1PrT=s0#3Mh12U4h9Aw&B?$8rnwn-z%(xdADHH65CGGH Y3_@U9m_Y=nTNJ39i9rm=5(l#+05k41qyPW_ literal 869 zcmb7CO>Yx15PdFbHoF8;LIW+IhVrrD&>WFS)Jq8>QYeRnNIg0mYwK#WUU{9W{bfiX zfy9v?g&122jYK8HVLkTqoA-8R{PWkBZvbAS9bkiD>)gt7+eyV-c0Nu|r43La^i-UQ zPA2lygNbFR^^#2G${sLWi`x^1%Auag03k!;lHE5(n;Nb&{P>g`S?cUe&Um8dh026g zI_HJa(@f6GH#`c*Cz7jqp^fF*r2CQ_ic<1KmzM`Ev#;Z}3O?L{G@ zus>AgKR6L;xKYPVG#IMAW$~?ecv4$BA;@39};maROXbZ;RA+{u2x7T9yrs8NE1~m@3%vWYtuZ``AoT% zcZo--e|Wp`)ihrP3BHwOVpQQ$OL8Su-z$;{M=H&QT^RbOy%pYDS6j>N9ysHXUYJC_ zQ?882Kd^n*K8DsHPso6VAana(Nh3^hauMJ;!>0EO@RA`|4wIq&L6s#ndrZ?Ss|?f? zdd8p;)v$>wodY_(TB6Zc)Q+3cXVkwFx`8cP9mlP=JmQ{t6Sv{wHX1&*aL32H*zs`} i_k6sM2R=T;Bhq;6^Eo*^@w=zkqX@+GRmtlaUi=1;fZ&k; diff --git a/workspace/game/bin/xtext/game/Personne.class b/workspace/game/bin/xtext/game/Personne.class index 68d24506e43412d02fe63067c18411d484836cc4..9f9423f9b6d06016aedcb76ebc3d92f5453f836f 100644 GIT binary patch delta 220 zcmdnUwvUwrzYoQ78IxIr{<;s+4)7O`mX*- zS*gh-lN%U2LR2+0eb7}U=jZ0;=joT0Waj9*`eYWDSTizk24|+{C6<&Hr7|)&5YRJO zg~`qXXgwnXGZ3=^9mUGR$iU9P!N35dIT^UXG&hvb1LgBF@Bvlx164CI2mo1vV3rU7 D!#**h literal 817 zcmb7CU279T6g^YhB)g_bOpUgFj@pORhvrc*p)Vz3AzC3Z;N$FO*iPBZgqcZcf0>}5 z;G;iEyt8g-gd+H`GkY)Ro-_B{`}5bAZvb9lzlsfpol7q-eJ>Mp+4~@^Gg`|kHW^yy z;zIOtp|jp;axPQPP#dJV(#jt(-0B`o88(m2jL;E7^BO(0*4P?uGyM3dt#l^8kTaf| z`9kHwE2H_snk1KV_nODiq zzgoyR8jh6n|Hj0qVY`k7nhcde*?gxvx^8#utCKdTq zSQX+j8E4W@l~V;`w|g*J8^N*BGZjqgGsJEUx7WQH7IYg#c$(xY6W%CGvJI;IE72mv ziT2W3kp_0h5Rq_U04YUdm1*IZp>}_jAFK)0O!!T$;-A)5}VVl;MDI z9-?I_O7~t1i+|NVMBzohLKs;|xs#?P%q}kT-`hp-K2+Q!SMnlvb(#~#OJ^&Snka;u zzuesAJ70HU^Lw?KX!66Gcvsbg+kgA?r@hlMG_jCJSL#R8A1qfL5oJIaYV9k=fpW?) TQZ?=rCaMp2^pQ@Ex091^RO4xu literal 756 zcmbtSO>fgc6r3$>?3h4GO86}89#am@u@Z@Tse(W%6osJtY1@QIbrQG1ki|$-55!BpoeBexQx?Rx0T) z3yPYfSeO3)H4#EQY2hi_0*&Fypl&Z-TQc@en{-fF){eEIuk(CLZlc%)flh1_m7OZ5 zE4(7Zlzgmdz7S~k4&r*!0k6k8HOkK&pWD6Thw;6?SREQ1vozukCo{^mDFyZ()GoJ| z>am@>gg)wOqV_rpht(xGC!bAXP04nV@t-s~<&xQDfL(#DdbR+20>R35fz}sYmVD(2 z`&>2zI53<#a1F7A2IGLy`xP7gLinQ-U7_`d*$r%Stu$4ARx?!~JJ@0Fd5yb_U);kl Vxznq9=QZB&8`$Tk!M)z%-Csx{$+iFh diff --git a/workspace/game/bin/xtext/game/Transformation.class b/workspace/game/bin/xtext/game/Transformation.class index cf3328843c5a54b8d801ebececea01fcd5c340da..7ed21f88010e110237c69a8e3d539a5e032eb482 100644 GIT binary patch delta 220 zcmX@lwu71L)W2Q(7#JAL8H6TsnJTk0urV^o<`<>wrzYoQ78IxIr{<;s+4)7O`mX*- zS*gh-lUFfjgs5t0`k<>y&d<%w&(kk0$;{Dr^~o$Qv1Vl849-l?ODriZN@ZlQB%o)q z9#fD9(0WD&W*}w-I*Nsbk%66o1IPfH#J~lnxfytXvb;c9CI&vBI6pEUC?f!t5d;9} Cw=v)V literal 847 zcmbtS!EO^V5PdF9HoJtTqy!qE)W9X>&>WFy)Jqiv(gG3*l{h*Zvvsv=N48V7Uxow{ z-1!hb12Ntvv=zM|4z@LKp5A!g%#UARz5#fSrx8{dx~E>A`hG4-*&kb>-6vy9;g!)5 zRvFfh#fj(_Lg)Q=lVh2AhQ=T(lvaM9;YM%gkYV+}Ol5?ap>@F?T5D_rHyM6@&{jHA zoX9E9OgU3UCC_KpObS`L7d(l_N0O^@W~}GN=DU(A%$($z(As!Dk$kD}Pt@W0m#>lG z-f+SF*-R$!Fjda~KPN#0x0+Z(i=jSP7}V*d7nY2?RXX1bmbFr)<=c5Vk#;P|1%`HN zGEp1~t3td0o4ND{Mo(3k2g7D>C%rVTKbbv-rn|!I_O2&}+G`{ljPWBgw;7d=NwzY9 zbmEc9weWLG_|_61{N2PpaobBF_g=br;e~e$$+_xF6`I<(x>38q3x>{Xof+-Ob*cR; zC9Sa8(OHCThFbNH2#*<}#q_ARH_AD3ZcO8Hbq3lyT410?j@MA9IHKs;0!_Z6@v)tJ zM)NzND_EyHaKe4NLc(6Rv4Qa3L8p4};vR7}t9+O6` diff --git a/workspace/game/bin/xtext/game/impl/ActionImpl.class b/workspace/game/bin/xtext/game/impl/ActionImpl.class index 39d6ff019323b84b1e73a0d23e8cc576ea39ce71..2681834b3654174f385abd9800314ccefa337f48 100644 GIT binary patch literal 6099 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 I_sS~%2Oy=6xBvhE literal 11241 zcmeHNTW=dh6h4!>vE!yqo8E7*EjJrV&84N#lt7v~t-)`AkmI4%Jzay+}9`DW&vGiT2EW`6nW zyB~M zpbv@0`@+JwV|xyu)`TY(DrkPJsPv3q%fcTmS`IA=yI@Q1x@Ir|U|kcokfV(DWU_ON z65~#pC+P^PHoMNduH&ZY7(4vytnG5osjTs`VL8kQ7 zo$-q4d7E_RTSk@3Wv6WLl7!`0L90yGa2A6x8_i{9R98J1&>BotlsPQPw<(wywzGM?EL>fT=Z9wap zHbw80g{UfwAX>G06phEN-zJLMs_dA#B*BPSywl?%m`av zFcuuA!cDtT=tP*NEZ`+Bk(xAfA?$LCu2a?RY)Bavx$F5hE&Ui0=@W9HaQ_R!nJ|#9 z#g+i}V`S-d9x=$Ywg(Fci4cOj8@khQds8IEOLdimvHvbo#IDou_LQqAtzm^7u$di# z-HIvB+FodkyT}OtW8R?P)%-yxR1hf}>{M3SMVu|zwsb;{4K85&e1x)OdBK}+ee2n1s!sz;Uoqu`pr3AY9~pm_b+`pShM z&eqFXk~c+9Gx|M>FuG?e1NjcKLJ&w}mt=IHQ4V%Y*alwA)hX>05SNzJPSFKM=N>L8 z(9$sD1=AB2TxSDwG^2+swuR3lSB zQxGr(+rm{Y@B_Hza!YX6bgkv}B+bB|g``K4z{l(jD1;=v2aJ|5G)ePdVA^jAOP z(g(Ph))xMOn7JLEs`yt{JUU0X5r)rR{3R$!DU=6rA+C?oc;46YJlOKQpAMjIf`)?c zLns}jLqHhD+e-m1QTls2e0TWhw{-l+0QVIB_oEI0>oook2IVxJp|f~O&|~zt7QxUU z*ct>z=jjQIKb*yrnz1~kL0Z=$J+lR*Pqj#yEg*faMat5%TKPPunbntCgy-p^g0Kft z4|SB&AbhPwc#&RG5c(PjFKZBf(jr`rF^k`{2(QGL#UEOPD=}vArxxK=dQFi-q9KQ? z?Q&pgEy6W=U5hZPK{%sDc$3Bygr+vHYY;AL5pGakL1=1oLW3}?MYu%;Ey7zG1Xqht rq}vLD?;S#$yrV(*OoOn8rqHI3-l1uH6Mcx!AbeVhX6aqJOYi>;Fr4@M diff --git a/workspace/game/bin/xtext/game/impl/AntiConditionConnaissanceImpl.class b/workspace/game/bin/xtext/game/impl/AntiConditionConnaissanceImpl.class index e70b5889a3876b2a38820d2e02e23ff6ec143962..3928a45b069dfcdae12ec189d41d3b5ecfea5ea4 100644 GIT binary patch literal 2711 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 T0|7Np&F6QNW>u*c7MK18WU|RT literal 11166 zcmeHNOLH4V5bjZ&NLCa(59fs)*pLS@got+_4hF}TlLgrdmgErgFzeM=njq~eyDL}B z1+MTX_zgKx1r%_k;0!0KxNzXal@k=bFKJ?p;vLtFL)@ch67%e*GN) zTmm}@2?CGZb?99uSJRp_$C|B1Zn{pJ%uw+$2?GQU-qzN%TthQzx#G%gsyj*8N8k`Q z${&D~1vOt;R_B-VGx^!6N}){PaG^W8Y1Q;x_nxQ#uixL?1f4$N>(WE<-i7Y!fc)$NJZ5p=e{@h-p z7S3_3z^}tJs?1@gfdluhQmcvZIIh8Jnqx9|vP_lQy2V;95rUo$=jK3Wx)c*02UnQE zoJj(Evg3;c2Bys_O~M#~;jU!zmStKgc$|!!uNW4!&Bhw7D!SQhv4-Z(rL-*MgEsBU zN_wzdrwS^{v>e5>Y8R>AU@e;}x@H)rqpVORMA#+W0TP%)^*6Of-uE5Xs|1=-98=L0 zXT3$!gPxJ^B%0}lX4{)E(R9%PEmoyy z!>%=>aZ|%VA=vE}dL~LDz(aw^GB9sCY?bMr=Pb}WZFJo#a>8t-ZB*$hGtjwKaasqN z_Gaqx<{M175)WuSo96*t4MxT48MuiQ`FZ-1u4xw2Fc=6}eFWCLt==)CIa(P_aa$*K z_qe{wmk1HN%yU7N_pIr<#*9rQEKASFKYpxq_>m16vh+N2ePz%MF+6z`xv7RjEu*vD z^_?NGEc7^d%yW~< zxMr92Upa%?GJ1r3fj5}=P7^qq?Ja$}mB!%$7CPqJ%@t~u-Fksrj5T$wu^7}3f*%K* zI>S=t7+(l=>oHsz7|Wp6CWwD?V-YaLhZR7g=`f=77c&NZc#> zrvssRF9-2I7|8i1z@Te+K^x#y_$(~`r{EHS-y;Y;uKghrPRvyq-(KAa>oz%tP+tCX z(C2WCxfrxMPN1~7J_S;AnjJ$cn$2_!dm-&)R!myx*`+4N1;3@>4MLV8h`tA|Z=&TN z1!d`b++eHzB%3_S((?=JD}zq`!;dYYvQG9<*7#xyrb%MtA?QKwXp`S9^Z3n(ozpuY zkiyU~>-RVhgzg`_r!WQwkA6hqI-o~F+9KZ<9l{a!{VMzLvsJgY7(@h3B1Luft~0$)5>1YrX`JY^x^LraHThH+EHTLxK` zJ4XiGy5ad2fzRalMLeHhA0>ty1#d%8FPTDiv#QJ02LwKm<0{T%%;m?+!F+y}QlLrm z6K4*Gp)yR}QcxwZE+v|9XdGD|9+gXG+tTSQbJMxuZrl2zo26hXs2Vz6Ou+^smOZXB zYH5~UUrz!FYJdgNJ0v491Xyr_dN#b;C+Aaoq+>LJA^a|7)H8-8{Q9X zcs~qBJiL+M`)KfejH5daClToce&QV`q<+cc2O#|ojNUqY>MMBSdvCrc@pB*20P=DM zKQrEQ8qUHwd>erC@RSfCD?qp>Kp^lmJR?N7AVBz5h;Y%9XSj+4^5w50CqVdFi154w z55EWzUXbA74Z!=7b1&iB;SbBFsvxqA5hUCb5c7g$UOr zR`IzIL6um=mqLWMINN+%;4cM%R>cu$9*Ue@40J5(h5+FQAukJ15+alZ2)_yu7U3p` z(6#P&1qgo&5tiUR4xww^@Ao1k&I%Degk>SZM*;+~b+7b^qq+b=WSe_{qVyB63N`!& Ru<$Q~yJQ`1Ljw$G{ReCQGSL74 diff --git a/workspace/game/bin/xtext/game/impl/ConditionConnaissanceImpl.class b/workspace/game/bin/xtext/game/impl/ConditionConnaissanceImpl.class index 4f76b117f6e3c18394b9f26de9cec29e8e7fd25e..03e77f9659224e5c8e17686b63bff051d99293fc 100644 GIT binary patch literal 2690 zcmaJ?ZEqA+6n<`Zy4x-Tt@MSL7HDC??Y6L}RfI*PZ{X_ER$7XbH>ca%GITq$?9O5v zh{g|mFp=n2OpG5%2x>uX6G@DpH1RhX<8x+*c3KLX?9APJ?m6c<&w1|IfByUZ4*V zCXNW2OuU9I5~IaLy~HrQ8+KWtI~OYE)f5R*J?2@SogXMzWjc2xyK-)6HmwP`Sk`Gh zKf|?K(&-`pM5Z2X*b_s$!oEvd*P-kG!xw>Y&VoQ9&Aazc&=+APO=V~IE2?pnjUsNd&bVQc-J|vZ&mD) zp7#4Q8AF#s&*n7vgbsy$MMQBV(Jc+>Q5a3Wq_C_*VjQb5G%|Hl=eM-^gK*ozA37t`e3`FYn#J5tzUI*c(RqHA#UXY2WFa0}DxceYXu`MGme(HC3{ zZ!0uzWSmOVXSJuWBbl9?40j|bLU=xIq63{G)QpLDa7>|oMq6H`q_cwxD$7zzy6hHi zQ|fAxS42cMzF6c>Lyt-H*5oGqRM{9bu^$H{_!$#@=%+hto3IKM|Kh9x4ge`c^#zA2 zVen*DVnmQLk;R8%$(H?mVwsGi7o#RV#(A;as!+$&N?1)nNI4q8xQTNZW_r)9-hCT5=Z_<>aJ^3+RmD3Ta!zS9R*I*oA3bisLe_iHHu=;ZyS7k<5pt$cYZI zPnpPrGL2frqIS4A9L5&RpKwdoWynZ~83{3~(4HK4^+9$e${tk;q-|G7nCn9-#K+u9 zDX-7iGPd?oPn*x`a9yx;TgD`;u&!=Q!Ch>dWx;Tp?S@7 z8xsS^>2Z`EC;SLz^*ma!gEj*@u`7smgl~yuJjL!MzQfrEL%v4f%Zck3C(zS@Z*A&V zG;ees2|3rUI`b9;iN7QZ0`#CbpG$SKhSV|=573%=hUBG`5$O@j3b=b%s*Cu%w31R_ zlF!Q|@d{bFiUh9t$vUb5gJeSO8%!ci=)jv?)!;4qa_3(pV!Ss>?s)*`4p}j1?QDC* zC&NfV6Y{{L_@``4hd%7si6jMp_n#ltEm%5mE zfI42oOH0pi`I0PFa5dMx{rWPji``W?Tr_qqLtpG(#*H=k?B*Q@9&rdfrrLhQKK#T# q<)3-0mO{XK17JHzrHz|JAarrGn1nFLWep0{o=g=*#vK%+_5TB?+a~@1 literal 4378 zcmd^@+ioK@7{@=S*=8EL6uKvli_3AsmWD$)ZC6O$kcCLuEFx(oDkL1J zeF9#AN8k;RK!STNxIkR-5Ih3n^GuSus#B7PNQ=0b$zVK5AeQ4n{EbuD?^*(0zXTE-Aqy~AU!KO(T= z7Y+$zOQOYc@Hl~u(`U<43hBWUNd@Ac2B5iQ;inslRl%)_?bvkt|*T&GKwqB zVx3K%sJHtKk%QoNmwIKQ&=O5x=Pdjz!FpxaJDmiQUCrtZ1*4wlxM8tx4a#2V!cX8Hw z1BFF4WK!}L!)h~ihh>Nf#1yGPpUEWcX_RK3cZO_?SLj)0eeBDF=0g_hC3|pgwuS9J zh*fI&k}bC8S=iQ!8u`6sTdjE(wN;C>>EZ%6O=xMQTv4A%aeT61AIZaI*j$G^TtOl6 z&nt#eg^en9rrMy_WU^tFu#pxK2GQYYNsn%3b(bpwx2l$8nH4!*2#p@Gy2gGOCjFK` z-Y-d#yzm_a5wNG2~%p)nr$3%@%ACEkE zdww4+Ia{ia);#n1=#ACVgLeu1K3@vQ&pz5pi{e%n0~xY=+(_unsk@OKqc^C=6>CTG z>3BnvgWFgUspO%0-p6evZtNQPcA;Pka36=qCCI>YkOL2Qr&(A_KG*On50Bxm>v(rJ z83&O65iWnRx$!+b`7_?lz*Ri2;uv$jhUfLd&aB?KhICy@A2h%>Wm$9Xicl6Plk@7#Otx#wR0{m-wz12~Jf zV~7YGzURw(eyV7fWXdTmx~X*8TX1}*>}7n5?=ctxXUmmhN)}vau_{xtbd&3HCA6P# zJf~#4ncVzsSh2o~*>sEYR5yp~1Pp?m{ipw5<99N3)y56w0Mi*-I_?j+@G4 zovJ?~&^qN5J=a@G|@jRV5G|nvJFw} zGht%4z}_s=np`T)%gVGp?-D|Lwp_5?S-aw>_i)qjZ#h+gzQ)+wk*fg6Dc|;;LfW;f zJkp!!-;z^6c1Bx_w4xhN#c*I_<;GdQt9IdzU6jYNjxQ^=TQw2KK?X?YCNEmkR&Me} zW?G#Xrq!Jl4u?sC!ksOzlcUQv7=ldI?1__L`(RA3vA@r!#X%k7cisBg)Cox39 z-;`SJ)r$f_?^Rp+U`eG$9b?UKD zbX=QzZ*81=4gJa7YaNO{7Cg#d6CyB_>bY*^aE_pj?-WnNdkc3sgSfMY7H9Yrd^ROl zv3Eru+0T0$j{;*fJ&$&-%)kgwpo4D)oVmj$aa0Q%ISQUOx@$8c~^%`1|Gu{=^M}DIn8pC|H04edL{7!S5YVe znh@vUaLRi1>lj1HH!W!pVT{T!K1#1nXq>YQgKX73U=?Lal6w=!MsmA^I;3~$I zYJ$?7&{chp*dH+G_mRQ}7{-T0^%2JLF)rg1OyX0WPj3LFo=>ixPYxEYFrQi$U0p=T zmJPFbz)wn?r^74;R0_OmS@hMjSjWARjIUy19cT|L3VcDJUlQn7B>8I$;2R9$Tb#mo z8enG-r4I0P2(SjLRgGp&g%H+fA*^f&E2BZJ!x~a5{uBGvV-2qge2ymLVf3LAT(CW` zVVi(w9@0m^Y@mu|0{)S#KEfreHh|35L1r63#?aK=Avy$s&CyW=ud!ReV-Y&d;|&(8 K8*k!9bL+nb>JbG1 literal 5716 zcmeHLTW=dh6h7m)zTuJ*df`&>oAT5_4~_cX(aNtUQe8o0J194_&y&c+tY%3EbQXXvYtY^MGm+zeYW`6(c=U)NfCT!H9Lg30n z%^vFRBurSBC)2pQDbg|5T%=pNkK;O237mTn9)#UEOefv1M-Nz}>rf+b(OK%OB5*dE zV{9{}3DgH$1Fm$BKy%0^X{cwC5x8pat`B@LW?^pwSF|mbNG()tou^!H5LgO2I|Qnm zV$AArj==I`6St%kvH>fkdF_5GnG*2<8`DT6Qyz!LGdh)G6thI#rmg1oKBMTkkeUiP zSz}Smr;5=iOjDuhh|xL1F_?M}olnAe%O=63$73hef`(K-nzB|ii~AzxY{sEdhX9#K zCQR>(F=a!Ik&d!eL5GUH%pU5nBr`slDUA97lah}ahTkLt^TJY%9;n%rN#jNiir$p5 zVqq>D${ylzo``QUj`4JIq|Yv6Uzs_UObhqHWy2k&1D@&|bRMZYNTgIr{Z7R;jqB>m{g{0%#?&Hg{ibtvxM5h&zW7I+m5sVa5P7UJZ16_ zvNHLn=s%s7&Q1f~BbBmyv0?`?Pt2*rVe}|;s8bbBRNm2vTmm(g zDI26z&^OHK5)wUQNuNq1vuVyLQ@Vs}EK@`_@VgE8n2=k~82D33m7lwyo*9anjM$gl zXr=R*1oupB&1ftXTm3W=slsChJn*>7nG9vL|ELbPunMfUsl#moXR=JzVV%I`rw@RP zw6fbr)KvHE-gO)EuV5AMlng&-paNB>Lj$jyc=A_)7LH%|$GCxa+He+UyofVC$<_h1 zeu3q0S6=!FUj8jxcM-p9I0ta;CH!t@*DZJjUd2%rUW3=Y2$wwwcRdIM-h?Y?pS6;D zY+3an4ZTQLp95*+MY;yp9j~hBsg29q9$UWiA_UNJ5S9vrcRdK-dl7EH`wl{-Kv?r2 n{NP3S06z30eB?p+(SxvrtT5d96h6aWfG_aVK%U%$&!P7>R<9Q$ diff --git a/workspace/game/bin/xtext/game/impl/ConditionImpl.class b/workspace/game/bin/xtext/game/impl/ConditionImpl.class index 673dd332c0130410eacf8af0cff1ae1f7d0c0803..531fe2bda7fd394d4833c94b5e187715ccc66ffc 100644 GIT binary patch literal 2194 zcma)6QBxaL7(F*xNJ+P?r5H+6pb@G`prjOQ)ljg86jKA#LQ}~&&Me_JF5T>6vQ#=c zqodD`P9OaV4iBxPGU$xslg{{~9M9cd!Zu*_A$zlXzx$o@o$q}2ufKo!4Zt;2V~7Y0 zZo6{Z&DD*D%$bc%D_3yrb<;H+yTrE`G=XbQv!0VR%iL_qoNV0Zf2SElFPOI3Fs$Oz z+J>yT>c}V)xQ1!VW(?f|eWCpA)B-)VeHej}awkB|X*3)=x8<5vu2?o(Zk{KW&AM&4 zTTLl&{l8C4myZH2y7?LA>YgTTcSazZ&Qt`ng0n8;h~kuvSyf z|HM5<_8zcu9Wfk>;U$5~olW-@@O$pt>5gnU))L>v$DcN!ym6R19m&8;1jl10k4B-nCn*8ZAvF)ya2s6me7Slv-Y$YNx6w zlyxkCW{sJxVq?>N|{h;hRd0&B0yu{sD1lkWsJmFph>U_5sKN~u$ z1!sjaA)|acLmr7r5TDHch~YocoBb83)!vb8bQc$Y!m#?PQb)biC%FQ*SVtKNEQTPG z0Yuu16$x^n%>$mFlC{Q-RPuX1fwSJzf1JtwjIk%#6sIWb--Me1Rc+i4lC|F-iFO+Dt|RCj0p6zU3qZ_}c;g zWPqQ22A@9o1E-Z8_VBL2cj(e~qC1Mr(hdW|{`i_?zNIXWLnJ2KBql>7x)AN_6U2Rw YDI&OoWv;#a7sU!H^l3ltVYR#GA5$UHumAu6 literal 4385 zcmeHL>u%F96h7X{(w4EoxZgd-CFQbmzjg3u8c?Z#M7JR(gp{UUYm~&5?M}ce@IXi) z!GCxUe)0&2G(~68HG?Ip4AU9rxqcx9Lx7~=G%;7d_rm}WNVuF0q-bAeJ_fHrVU0{5jKJ8 zeGESIg1LlklLw2RR14}+{j$S~g_!2`Y-R&bsdbDDOCi&3(WI=dkwri5<(8;ej>n?? zRL5?GU4?wEFe!PHA+d&HWSm7BeN){Ilg7awB>I`fhfKkkd9_X~nQ#({AH}nWN3BeK zGK`((@h;OYkMvpE5F%h+)PEQdsj0DAO!xDHIa`(@q#9EiC!zmKoH@ysnN(&H8H123 zh2bZLF$u*2+G~$TOs>OoYJ65-jWywQlSi2H{EsuY5UGT_P0rb`%!;b&&5HrWHmFsa zF_t2X!Ol_G3cCpGc5B}isIDb0nu<}V@fxm_2i>s2RQH1i+Ly!@^pio{g*nWGZzV1(X&|LFcogqFn*4}*9|iMk4dEA zBv!_RlchXdAn;{_oc!g|ipo|OUFowsJl4z~YSd|?v?#gN$QO~qf*+3+_c)WD^xH2T zxQYZO8t1@u0$bvp+ku+|4y`>v8G%izS(KamNwqtVM-v5;fTv8nw&0Zm2l99?-~o9E ziujg8*&oH0ZP;=-wgV`>gRv(Q+uy*%huCg6evhCHVBbCXZS2ts_QF2A=U_h^up%6^ zAl$Mb;2|B3pg)OMM=ick3(`F+(lMAy`I0k!#?c(NAUw7roP<*;gyBAdYe8sR5l+LI u6v9v+;j9JWl@(zc%2tH)7KGOpgkiXdqYl9(%&GZQ@XBL$ui)PzH@*RkH&#~w diff --git a/workspace/game/bin/xtext/game/impl/ConditionObjetImpl.class b/workspace/game/bin/xtext/game/impl/ConditionObjetImpl.class index 7328001109817974e49b07241d3e83d8aed2d079..c9c14c46121623a4d45fb31b712356f7c652a287 100644 GIT binary patch literal 3828 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 diff --git a/workspace/game/bin/xtext/game/impl/ConditionTestImpl.class b/workspace/game/bin/xtext/game/impl/ConditionTestImpl.class index b77540f401534710b4dfb7b2a9c73c5b6a9b59a6..6da469c49a673721463dfa2b5eae07f27756a08e 100644 GIT binary patch literal 731 zcmaJ<%TC)s6g@XFF$w0;w58BOAR>!^1YWRU0b-K|6v-q=vDl)C8N#G~AbY6zEMQZq zi+(^q3UTck$*2(vd*;rZbME8J-{;?d034ucqC{xkYk9Bju?VECf?MD2MB$avDhgeh z=pLV#FbD@xJhr9htJ_4{GPve_6z7aH6{?^SB!i~s5_A-{0kAQG|mqVeWMb>mQ%B?M&~kn;{OX_=wLYJ`pww@~1qpbK(6EW7%?)ma*^?3(NRI zSm+G;-+OLv(7$xMLzmEaKLMdOjP7Djo~X3L3%@#MG zavXleuKd_+?nv1}TC2vABnGjhU20EfyZKDoK;Q!QdOTvps8tbRn_;KfyL7(qtdRTr2RkHObYvEZWH-N1^;%}vONsWQv}C4G1@8TDb%-0T49svd4$LGT$Xwx95C#! z-^t*z7Zj8wb5E3Wl-_`DgF^%K#Aw{0H(fxHvMy6qq3U_Q4#Zy(f2>zOIrk5=4$>Q<1X$|Rm2W} diff --git a/workspace/game/bin/xtext/game/impl/ConnaissanceImpl.class b/workspace/game/bin/xtext/game/impl/ConnaissanceImpl.class index 99b7ca349a562055e2ac669040669b9a55684211..59c556d887adcb13df2234a952b718f44d21feb5 100644 GIT binary patch literal 5487 zcmcIo`*T!h8GgR(Nj8K74FN(RX$d8P&2GY4l0r!!Z5kF_%?2b8B(2ty%^@7vOW56{ zP<=XdPWqU4@wA>0~mU3J>S3L^#rAWpfl-&|?jzjNEXBnz!9pVyoBq_Gx=< z?bKDel@3Z-xpsmMH1sNHo#_E{0Th<$@S{}WrY<_AdpOx|X7(C3n~JV<+(`5q8B2b< znb9^8+yy=hmej&G$|}MyVE)ApcN;(3B869`<5vlYA;knfKe?D@i8??8PF+H-02$4B46E2V-7d=vIX?dcAk5 zeyZqsPjFd~ZUsq_-KnDt3z?|>M%Ie=c*GtE%q=y`Rr7P`Jj9;RHai7xB(V^ki1@Lc zE-MV_4McV9z)q%wF~G!lkN)nX-{|kW-?U_QkTrDMdnQah3|C%{Zb#QmTZIj?^j$Aa z+x*zY;+ZRcG{fS_n^`$eyc&A_=uxOI^rU08Aj2185BBNk#eRjwW;8WoX0qlUGnpP? zyL^6j{?4hS&08f-pP9w^266nal4cJM=;#yZ3#XuW3=BvMxmU+s=#aGfsE+%vgspqP z$_^R1_#vh~i^bE~8S?r$+NKM5##wUbyLs+9Cx{f_fDRpt{5YtvaqbW~CY^5Mp0i0a zm9q~tKS-d`lN}x+WiWAAI@}S3t={fBPe|s8rSzev-hJc?IsESfEdfpG_!ta7h7ZteSO~3)}4a3eVlOO}fp72eA^y}%9t_O0fVZ$+rOsjZSsej1h}zHT*o_Y@#OLuvKfa)_ zW*$FI7m|)INktaN6Q;rW@hfb1_K9Xc(V0#pIArp`7nM)zIDuz)F0#LOBbV&*}ISK20jp){Vq4sdy(&mjTt8`%-MBBpQecA0NJ{tt!yMYlshhpU)J$0e4CJRX=mUSpPkY119`BN z)^=yo$LuH1={Sw`ew=4O3s3mFhpohbnJL34UX==OD8)tEsSR*+ZmpH=aUDOzgm`Lb z$ds&V^1^gyZEub^Tdv|ZQE^FByrEDN=)C@e=V*qhGn}9YS9->wnJRf)^`wV0adU?y zQ~h%9i-8Pe8-yeW%xH?Q5q66*vwr-H$O|*bDF=H5p8YDqs&Jd6yo_9(*&RKDExkQ8 z+HwZw$iQzgG}Or8&etVPhHv}I`N+PqP4k(>To>Uc{wqZ}mT;$nJN3NEr&zs;rRTXQ z!gBsCvA0`LY43F zjs-*H5FA7BBr1cKu;D;Z^EJwyalCH~&BD%S`=yeu1|Hb;pAp2399)1GY565GeVI&8V=Z1`Vx7SzHneRxi=8+}PNT$m9tJLW0^FbX zK)>sOGD@U-~~Tg$Ieh2Jo&zvav4?`#M`M|<8Gn{Ypl*%mh8 zI3BR=Y_i?rvy-40zN(VNe1Ipm3-MVOVso_vF-TbQ5s20N*793Vd=Cl8M{J~{!Rnfu z$MM)SKBppoPaJ<_JNy&-!=DktUpyF_^B9|LWa5Qpd;*`e4K?Elt{jXd&}uYIBRrnI zF33x~CkYyJK}NWi&lJcyuA735SI|0!&zzS<_ZXf$FK(T{Qwp-+=9ee%Ro2`2V0Gg- zo}F$eL1rNES3>+78_D04F8QTqLwOjnoKNDDVC=cW37IT zup}FVNNMQ`Qs6M)5|MiXy45Ap%(Z-`h^*zhLE5>^L(L#T*yDJ98udD!F;HcwQH!uv zEk>OxM}t~|pjwJ%wG1sx#w}`vjkwaWnn&E~BA&wOFP66n&K54tH(i_w7pG~XoW|M7 z-`#{Mb;Axl3BPsZ4NpiTp@@e`~*McwSp@j-o(!t$u*e7FG?2t2bg>? A9RL6T literal 8892 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 B|7idK literal 6863 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 AOaK4? literal 7168 zcmeHMTT>%N6g~}EG6Yt3k-fOfx`Wq5k$73%bwLy%u%iQONuZP}i)tpFFx1R+?CDVO z>_6}y_$RbVtMuI}%b(!e{s(l4f-#PQ^UqAi~0C!;} z3w;D`?@6{Ni#6)AqU+baVrj4LaX}?(2n(OHkRfnshwjp%M}u1N;nogwWEKVpTun?( z%p!23JZITlJSOhN4^B|Nokn7ZIuznN=2#iSTdLAot zNj7@-{P3Wn4&;i`o=(JhvV))1g7YrMbn-7Q$0IbQx9ZQ?C>|g>o0o?oG)} zYRdgO%MC{MOJmHuN5k+0AY~t)$!%US*{VeQInk_q!Q|CQ9y8&!k??*aL|g7MA>0Z> zqbl>FwOJr>2VtYmgxW?E6nE3B6f0c1Ro97J>2vmV!xgN8;<%yN2r8`V2Iy^7Tvnpw z(Mm@Ij2)@9rwDC7UrM5?ZS(}#G5Z9iCKo$)=q?p5#W+dP;41KsU9ag}3sllF8Ynd{ z>t@lk#-uHL()*W~%)5b{G`BeS7!BGtsf9vfwHlL{-VgFNI(SuZ|5&HSG+AXLRB1x_ zy^r}GlXuhqm39w#J))~@Bf}J6QA|8@0wzvytikyuo*I`sqVj)-k%_iNFGzv^tebOSeO-lCivcdZ_FYkt>$11o*RbCaD%{= zd?zPY+S-qRvo+>}ZLCEPpsj@CfAc z1v@5Z(+0di;I}T=e9vU=)F>sY3-e+5XtjiOjb*?qsIbTH7E2dIzCBkiM$Z=D2&rPg!o-(B$?BxMsko3W9Tw>k}?GQmC4 zcfCiGG!Oep^PC?uGm74Stb9pCLOag>y{ZU1YAm9~222z3RgZ3RPN<{8w(Ce8KvEaQ zsyd@L4ET_cZd;VCGy0r}H@lDoj28bUFox&!K?AtiI5uFO5TiGjZb3eMlpgu?DsKpf zExL-Uj~!`BPAT;v*|!1*yZY$X*e-qGGC_s2y`O~#m?&ayorO;bT!?aF7Hk6Jo$cdd zJ0OtLFUOrA)zJ%K0>2RSvew;Qb(eH|T>Lz8S)2!0Rwv#P`oc??>?Y(xK-e zd~+E_am2GY;!cDIkoyV7z8t;!16=}U~Qg?s{`59Nw?QP3dlYY|?DNz`4esW&wGn9?A9qeXi236Q?k zBE1D~Cw7%-@9G_mEZ=Dn-i7xP2Sb~dixSs@af;O^V%{1 diff --git a/workspace/game/bin/xtext/game/impl/GameFactoryImpl.class b/workspace/game/bin/xtext/game/impl/GameFactoryImpl.class index 4d5b7cc211f7e6a03c966adbd1fe95a9af30e677..28c57df7402d0e2712ba5fe64be24011ea437d2d 100644 GIT binary patch literal 6498 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 literal 3805 zcmdUx-E!MR6vxjd#UE-&(tNcvEm2AV8)(c&p-`97)N$Grw+)S(8Lk*b-r8F%t!K6F zBoDv?@Blmj*9^l9%)oHV3=hBq@Blmj41ZZlEZG~Pi{6kK+0mZ=`RVM@IcNRbKR^CV zMAztXo+cQr>}$TSD{aT)72)-|l{@%v({Z&_2V1z$(v!v!n`5O}2QRPBWSr!s|*&RiGCceeu{=JdoXIyk)!6>xr(T zh4k&7l6zh51=nq>Sl@QsFP%2GUB~yOw)ePw=mVoG72odm+rl^5EwX54ie~8yquh-! z-kXdTOO0VHJ6Z|9T`lh-!iMnqgTA-NRnx)a8O=4M>vVS=CBpl7ak5n2EzlBU-(?8C z+2JEB_~HJyAM_yxUsZj;#-R9B(KprIS>(t`h_&h{6ncTz6#4 zZgYKD7p1Z-0=w_G_!GRpmi-cA&3SmqWgQg=kaXf;{0rj9`I=3K=cjXIbw zHR^)^tK~+#pK5_FF!C~#!1GH0qhb`%J>ExgruzhKrC)MUq;Fd%_Q!GBrh_WynrP zvapCSYZlU~!74-xadgV@1H683Fhm$#OsktIGu-Cl5Tx%rA_yGc#kQ8yPPK#)F4K|A zHdg@*ke^M<4-G^5mamaCOj^vfF?!MnmpCWuv3MjW(K2N5+uPuQt3)pXk4)i&4GuF$ z8*Pb5el8t0b{ScQ^rNNv_>523;4nWzZ}I>x7mj&CXob`Ah*L7pj4mJJoKyj_5<%8| zEsjD;N*I;WpktMQ#YJ=kic4;!h|*@bO=A>=Qzky8#`-8>Lw{~E;wScJ@wp5-3xOR4 zWo_`D;x1afh0cA{N5(w9D*}OYZ9P0z2Q7oSxRf{>hd$V+wIln=<(ncr7#Bw7>RNc9 zqKUVBSNeenH23vg!Ih)j&Ox3YVwOe&G*6$Q%#+7Qo^}}J;~@##eRLvD*1gE6Iq|nP5nUAzu<0y=J1(=hUgN_4^{|wv$PQVT^;Za z{T2;=xq;u*fMMaO=RiTu=zM}Ofwkz#%Lc+NBjF;woFIe|MuZgu!7&n6v8QPF>0Ouz zo{{hhUCvB6FcMy+*D@2nG7?^=Qf9)}MnV~HKWiSoF%sUSw=xsHH4?7ST4uucMnZ+& z&P@2#NO*_d%}n^+NO+H~W+wb$B)m@_WG4J+BwV8pGZX$Y5>vTIa;fj$^qYWdWK0c#Z)j%lH9S|nzE~XpN7Orp>-^2I# h%r;CdRv$3K={iZD;&Xx;bRXYDO%S^e@0%Rigj^ diff --git a/workspace/game/bin/xtext/game/impl/GamePackageImpl.class b/workspace/game/bin/xtext/game/impl/GamePackageImpl.class index 9dc83acdfe4a67fbcd467347ffc9d06bdfc0af21..dbf22da2c41bc53f3d023486a310f977a14404f5 100644 GIT binary patch literal 17508 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 SHvHl*A?ajisq^uQ%KroGQkUNV literal 12770 zcmeI1Z)_Y_5y0o!ZqB~Aw&U1o)3nK%{vj@HOra1+LfX`^QwJvw$t7*mmg{=`VsCP{ zd)?hLb}5w7LR%=57H9#9FGxuJQVEFG5T4LRX8n)Qie z`0146UUC-Y3|^O@N5IfUXW5ykJO1Lt-26r9#wFMyU`K9hZkB+)i?TH}S$CpHK<}*n zbWp%Hxzel$p%cqin5u_j8HQdQc%e*1<+|6N-tR8ShUcfctpP3{r&l9!==jlvAZ$3X z7i31mZs7Zl7e$WmX4HYE3?r0hf?>~BYdda!YJc%^+k%YT&}-&R29dttrAi)MT;mJ0&Jc}%|-O@D7}& zSDIlkUzd&OK&9MQU6K_noFI%VLAbb2x^=G^$%^aveh^pYWhEv2Z<$Wz?g1j0N*q+2 zO1#>XL!q!Un`pR6$+pg6=M6V8+15*M(ymzhXKiQ|h&8SA#bD*1 z^|IE1SQ}dTXHDz8VQ2lbPPDb5b;MSISTEaoL+e1S4LcigXP4b1T4$H-Y=Zyev@(pr zP5rPNJ}O{z?`->*`x!it`ilqEFZ;n+&zC1#jd>YX9sIE_V0bogo%%T^^whNx_QXpb zc4@|DbG;m@4TSBR9@RMzaLwNFym7AabFddC1RVbNJpCXWT($(1 zaV7oR8p)p&Fl|A$*bB^rUZFPC?nen2P^)EShAZwDaNJ_WYzh%g?gtXKzs#!DtmB34 z86!*DIk*oa<~rZ}LGh3gpE5lx6zxc9g%%hp22fE5Yr| zB1V41F7j;3-a3r7mSgM`bgJ^nIoFEHOITZWfw-Fyf{Y;*FEJG41)- zq{CU-SG~RZa}v}Hs?|a{(Oe4wSG8qpd{^~htW!@_S_&eZ5(R~|=32{AIX2ifot9w( z9~Fhkb#Kv08nn9T473<*FCvna1@xyMb-EQi(U`i^9%#uqFY=N{lUh%UiddC}YN5ad z>{=&NJE?o70Nj_(vXEWoD@{EcGQ||$MrPB^yMefEtKIM4latEhQXp!4k6Nop#ypPF;doh{;r3wSkYz@n@QaS*PO=MtmCv&*QP zybv+%P(;SkSGW33b*9lTN7m`e`k689sl(Gq?wq4ui|tc~F67SmE>@}+Dc;?l44u$j zS}nozczT)2z8_2QeLU9aqf7~Yh|kFM1f<`vy`-$Oa|EhS;L9sK$W`(6LWE~Md|QM6 zuYghLf)e!N+q*94Gh^9|Tg}*S#w*P@V8%f+4w-SA8Hdfd-Han<95v$(GhSuJtIfDG z8Ov}D>`MH(){NIB;~DgDH|#;LE2zCa@gJc4DvaGXeEqNB#@{A$_Tt|yXrum)w5{@(S@G?pG zJi~`yl7v}?53iAg6AZ#1NWw`5;m;&tjzRbo`7Fb>%Z#+ zoM8~Ql7uRQu!AI=We~{+`}O3Ckgj52zQZ$`xt~1B;mY$O?KT&67Fa0 zg-a41U=Vzg@E{`(t0duz48oHnp~lGMb0py*h7Ug>2@WHZKPL(E48ku+g3HLmt0ZB8 z;luAqf@EY;pT~0cL=sjQQT&V~tTLi_g(N(}@Zr}a;mZsken%1>W%%$qN%#tb z@Fq$4DkF-&k%Y$>gnyBQuQ4j>U6Sy)y$?NCkc6+>`_MB)5}siAu!|%-xq%PgSl>nI zxrrn^#UR{95}sxd4v~as;9F!bh>GGEN%-~#eNBpRo+LcWAiO~ky5T$6=j?*-!gH!A S3O~aCW$1zL!3*#Mc<}>FcUh$X diff --git a/workspace/game/bin/xtext/game/impl/InterractionImpl.class b/workspace/game/bin/xtext/game/impl/InterractionImpl.class index e77ab91dcd45990a4bf9b1599be1e16a4535938a..74025f820ffc66c4baf6a599b97b2965e26b91bf 100644 GIT binary patch literal 5749 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 literal 10978 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 literal 12380 zcmeHNOLH4V5bm)R>k-9H9P)G$HX#Hlgot+_3VAt7qM*dak{x0mX0;mGo04|L?#Lu3 z4%|5N54dsRNEJ|U0;>28`~Zpr|A0r&t{$`2$XZz|$Eni6mbBaR%}n>#Jv}}1`@i4+ z1OOMH9ELFhhaNHdh^1E5DoyFtS|xRd*0cB-h7f_h57l)wRZ)%A)Lii))mRuN2uuo1 zP@2GQ`lwbhEtS!_Mc{Bwc%Ny%NfU@MYFRonb&F!pqFkZ%0>vgw?2Oq2!nsUNw;4W) z=Ji!WWp&=tonN|d5 z$br8W4U5`lWu2B3&8*h+iqoA^v&>?JR_%*QELvEj3R=yym||M1=c!iFYc^Fh)i6w^ z6sgig7>N!`19#D;Rkf0F9fZ4%MEwdg6;)x6Ycv*hD7}+pW-F>~_ZSc-T9vXjv!u{G zLn3NUt3*;U%g(%%M%+-UbsNdJ&i%PWk(HdENLOkw)PP+_N8@T}fT1@0^nTA|dRf;T z{?D$dy3u2_{mP586WcD(PwN<~N;pm3R_aEHmURQ&5q)1_s1au-jfvw_#HN0T(5Jj8 z-c$KA7W8a+>g?-21aM2#pJF%G*~=0KR=hx7BVY0GuH}>3z?Pc*YcUJjoQQ7 zrfz~UX$Q*VM2D4!!VS@QK9nko`>}Pu@*R3;IOE7cJgclH%#R!dlOrAmcY=d#>!RzX z0+?hnT&noWx2?VNjJa#b=pzLg&7vcV_V{;DdiH}eG+Xq$5cIctZyDW(PJ|_Cl`^g% zW@DaKw#;frZid^SGVb8G`4~@Rad)U2t8V({_+~8Hnpodmi<`+OGlJ&s^vU$@-RKT7 z2EnBC7G(+DVCR&gX;!Few7v|y;}CiYf;e8dpvd4w4Z^@)#Ndq9SmvnJW6crzr}?IF z-MF^1O*(LB5oV5r8xBK;gBm>Vf=3LF$zD4Jhr1OISu||dM|QSvJT0^f&X@v8Xx457 zvO$d$gTrt<4hP@_fdh$LyBeHl7A7ibUM-%=Vd?2!y;`JJffslPOy^8Ztt>SPK8=SV zwx(l6`iNK@=M}hST^}ptaj}AjMfpTB=T_m;5jaEO7aw(JUsXF%Roh-O#A6B!w!-lP zfulIlE=Lm)I7{H<<`c(yJAwU0)z&pMy9fDdq8o6oBLz+;CC?&oo{;;S_wN+^JK%b( zy8X(FHWS-E&4nJM0tQo$!DhM|EV&ecSIOAq5Ny%fVz^mP56fjn^`o6rKf+^0j3(_v zN(`{xVA6ht0d~3>B-&32T=7t@{U$952eJ@>LqHa{+wpiNMxFK>XSs;B_BMEU$|F4A z*W%cYH@{1dPb2USfj@n4e_JbBuD>+Wr~vC}c)-0eA;+^^se;5r$2rT5W6M@DOF)sf zY6>_lra6N=hr+l{pOLoniaD((Y1Y6)HJdKbDxR(pxR}Uo2q@{SPbx*=78(22hn2+@ zz|XP5h5_}6a9c+2yF@ea7Opk1zPlEQGe~V@>mz8A@X7Sv=L;Q^D^cM18=2dl*#2N6eQCg)gRjAsMXQ3d68#=8M<8_~a4nTfLmvvUFm6WLCR z@Z@fejNj;!Bnaq|#AVu`yFKUDPUA8K>S*BL8+eOJuockK6gVL-|fNgV=#%&r-a{o@%KLA_cZ?AFZ_N6--fV0cn}c| zA;RlUKLD{G;P8X#qu;@?pB>z1@&5$M0QRlmf8HZX;mA(mX9%8y(^7=zB?zBO5D2^g z2`NHSg7Bpj;YBznAdK_zIkR|4g7B3TAq6iB2xBdTS0o7END*E`4azhro5hb(gg4+# z0b%o5{3=Db0B;Eho6q78DZ<-u5xL|tDlOr~C5b-%mLgpikgoVd`bUa%RY1Dt4~fL3 zNY@3VS)WKVQluM@5i}iY@#SWxe#luV!fnV(5$;G3Zb%Vwa92QR^W~ldVMU5C5AO*G vZN4l>5WbKi6kt(`up~kFT7obR@1yR<-~lY-CjiC2I7Yh<;3HT86}0~W?fs7O diff --git a/workspace/game/bin/xtext/game/impl/LieuImpl.class b/workspace/game/bin/xtext/game/impl/LieuImpl.class index 6ea44e3c74fe2e47d7b240fd486c7799065fa19d..f92a42a46ab8ebbbedd8011fb40aade4136193bc 100644 GIT binary patch literal 8185 zcmcIp33yc175?v=$xN1K2w@4E5(Fff1cC}Kge4&f8cj$fkO)|1GI@lN$xN7;AlL;L z+@+gK)haHn#Ud&QBqCPnhOJ%Qt+-pau6DB(vGzajy_q~_CM^Bh$#-Y&J9F<@|8wrS zlc)au=;HuRRbDSNg%NAw#+rCVr@zan2zGUcDjI@DPdz7IxD`%~L^~^tKq%N9Gb)U( z<(x;N_QJ+sIN0S6)it$WXawT2WkO9P9QOyqM$`+B!XO80;i{m|Z)&`tuC{Jo^`eG_ z3WW_9`d9laLjG`PMN2#y40l#4xWbVxg<}GdaM&M=#r)xb5mOl7kg7=_($y6SSM)ystfQ1%+rQfqPMQ8_oDN+c3@c>M zWE8`}_-qnNN?R4&HIWV@2MVKgc#+L;H867Xd%D_<=t4`?!iGq|A8PeSgYs+>Ju^)< zxp1La$8i`TJdW3qBRt&k6+!Ag%4y?4s1iGkmbgD24Ag}DF|I8xDNVD~LRp=;qA~|1 z@Oe?HFxKI@GYHsbe_*A*)0of@j2lsZD5j$fy~K-C6v|WK>qw+J z=U&O9TujGl;@i^|no9;SqdrWd!^!-stgm+{Y2{>PI>l1EQpZfpQt(=8uT`i>7h@+_ zSPWZR;ncBG@Z$*^7n$DkL_!_r^u(HwLZ6d{sxe5iTZY7CcC+wZcJuw3WGNt$F zN3t$sQVT}U(2j)II$>a8^GIVO4%2CP zqC61yGmp#|2jml*nciYgvyObRX8~b&D0?g{*rmD42**vsykG$yl7V|J&cWF%S=3f` z#$zJuTpb0-vuvpCuVo`>gM&qXHIqH(=@^Vcg~9FqSTN9H#2p(iF3G$v&7T8@0c(S7r47(orJ-OM{P1WG2x1COSB zqdvTvC#JE$=!&f7;dn=S8Oq3{(pl^VNX5fM^S^>l1gmviB&z2nRIl#nkdt7oj?dwI z0oUhsd;ueP;&udM-TruB1&>xHljD45*ykK|_B;051>h1LL!q_h_ zH_TqTzE(l;)N~tX7({+iN&S)~&W6d}ATIo_j>(uJv-@?_hz<%5=xDWO59wHpB|_V# z<8o`ZUB~q@b77~B?_d*~lBf}jgrpiMR?Td=aL92i@_C35>m|c9p9H+%?gAJKW{BRWGOUT7IQ^SBoyM+h8>--{IQO`c#_~|{jUzO zXtEq;T3cCan)p*4T`&RvGac7hvtQ`=y3Abom5yC_l;$zY;@sy9nauds$tZ}On=BXlvs`5=y)0X>J7%~ zy1L_Qh4C9YUcie~DIT#dV-l#hb^KNqW>Z>oG_uBA`L2#PF~y7b35L`LZ*EU8)L}$( z@g9CBebdxz{DE?cOL(oDQ7q&?>G(4~6hC%%8-mEmPBra&pc7vf$!1)cjlZ&|C@&5; zdq|7(--Yu(QWz!x;^>7_8U9ltx4bxFb~_fQkA>5Ig)t>H18XA2yh}TX*PakVG;%-@ z?`Epn?HzC4D(m3m zz;RJx7!y||jAL+J99g`$jgbo=e-m)aCC>b0qs;Gg&NUoEIvdU8^B_L68B9LQ_iXgc zeLRnn^r58lv@z*CBltOj+>7{5SMg~gKjoFBwqw*bPBbb4cuaC7jx{Nw6z`b!mf2h* zn{;0v#`+${sGS(szcZf(0XK3-9o4wW6Ct_ zW3SuZ%b-B^i0T#g-Ynk^j7#0T*|9k*xtVpz-h3&&Ac{_u&5gb?+TiQOiML|7Z#Skd z_PJf<@=YI3?ZphS&Sm;#I70>O^ zNjZQCURDYvwV6~az;&igt+wY!Q~10mQAlOZTwGY~bNAt_otP(7vD8w=a`g|1n;-N1 zf6`&`Xj=&pNPG>aEFP*!S@Y9mHCeLGSzOrS%j(0TooJ%0rc_zaP}Xyl^}?ZL@uW%0 zO1G=cVVB3WtBtbSQf0kKS#ML;JBOCVv&;^u6Aw#M@$jL8OFtgiEZUnNq%;ZbG^(<6 zzTjc0g@*|i9K4guh=m#M@+Xlq(%rZTdihBAE?l6Yt-N3JQ4AljpPW7+JPr^Z|HfE+ zhLe;scUAlTOPbtXGic;=UmW;zFiN6~E7i_9;reSn0*|{U)q< zuGzZ3&S$}LdzmPIFX~jIO!i`!eC$EQSMZ4{--T6KXe`@{!m@r+4@thV@?NZIEZ>Xq zTy(L*CXBLdA7bZ%w@i#bC=pH)*eabrH{~N&4Z>hmfbnWDCaFUH(lUgmRiKz7{h*Bpyxb!26t+~DVAsbQCsmgj2 zQR^+QPP7nJ;5l+gsY({;nRN6lI(iO@RTWNFb4>*-NKH>VbULoGAvHY-sj0Zygj8`l zr1+a&Kcv_o*~-6RLn4jkb&*YD22PGZ3a4 ziK!-<+Duc=A*L1(Q!T{QLSkwWG1W>;wGmV2qFpUEU0`725- zLn6)_tT=Bllo)tY3gM(^>W5}J>z@@<9sFKd==w-HRF5@ z<9sdSeBA(Xwp?(SIP>mhTl+MNshi~`FlIB~!T3wZ0VXOi$$mbCpR+g`I9eFUoA=nQm?hXykV=aY|P|7+|^%ujuZCkCX}dK`2U{UFk9V@MzxW@ z{N076>K@ZFpQV-q!S~=>RGO;d+qlJk3J`zYqC$Izl4$GK{c!_H+%JC~W(iJi;XQ1zL1 zE@Mm8$MdX;)I8)&b=xl*$;+B$s%qx~Ir4Vfrf%n4UI|lAp1pVfN>01)?ElxV;D|_)1*|;&WU}O4%r?!b` zuKf8n-{|r_{Ib8PJfHnI)X(X~U*RWWkl6J zT%umVrRp_Yqh80g>P_6B-ooALZQP^Y!DjU??pN<)yZQh-)bDw_{evTSb|*c*JL&n| z_%)uU=d0)*@ppDnQBihLwsfw%;@bYs;sVK(HMYN3aW1cfzfa}7n&WJaMI1{x433p@ zKRC$U{SKCy<cU*YXyFTCze z80p%CVI&Hr7cbokF9~k<7Cz70i^1}-3$G~LhAj6Mmynw*a#ISq%_6s@kl6?(HmzJb3L(wrQe#;>#uL2y4F?0OmuAwrfOqxt~L%4Z9J~jCgKil67JJV@q|`}r?km< zUaN3;bYIe=`y3uE!qBM&u7WE5%A@2j+Z_DArIH^sEbsD)f+{@y9mlPv|vH3jdOLp4W@N@%f{~bDQ~GP}+-swUzbala%_U&48}W z#0YH`#%i-sqRl~tR)y2FYRu8*;!LduOgE?((Nlv{Z`IsXCZEr<~S literal 11299 zcmeHNOLH4V5bklDNLCytF-e>_4>p8{3?bqX$iuC-A6@xwkhi`Lwo2SZVm8Mv=R!LK*srkYUYVjEC zBCuC#Bg6>|&dtxRrl-?0lS|n=f#GbcU5>lVE{_w~VLMd)5Z>jW;v6LhinQij zn4b3-g@jF3DPMDn2F-D_S<7#g95bAfKQ1HmBSy9Eq2aDm*JVYD7A$NTO`F;rDe&sJ zmIV(DG^9hf`#FcR60`huvq*2%nM;eP2lI@&U8J}sacPyXTaGIGJ%ySD#uARghq;qX z%Wz`$Izx&ydklYaFKtEFO_vFOwaGRzZE`b@Q?lg@Q*0D%$!aX7VA-Kd=O(j-kv)~8 z==BuH<~Fs4%shrhU3u9Z$Za*(qwXrwm6ug(%Rp<@$>N=`ma#c??WXT<+e2uo3k&nP zOg_Cjlb*~kEv8p5Pv+8X8@1Hhq;7gNrxBQKAB+C{iMc6Vo7I(%Oy|aSUfq?eD=!bL zgC!-4Z?E+K`)NvdwsqyV*NBK~HffvMq;7gNrxBQ~x*O`+yxufy7`=lKK%%%zd6*0G zFeEIwPBj_^V)~?n2_q4ba}m{IZVD4tL8#~l50WWscP}N2y3#-z6um-ulG*&UQE;3J zHSOj__rbT+4RVK3R4Y~24Sy0W&4tj%8Ms8%c)7!+yTTF!4DmCrCxYrkNKO zNm4oGLm-hH%LZAS@i-(2{L(>AQ#;GE`AH^B<>DHc6G`g>IKo!;wvo|}!)Z(qKYFZ~ zzC{?cNrZ_*ijd()%Qy4A|H?{j?1(KdI^W-J(X9rn3=jJnOx6pVY7_>Jhu6w-Kpf5z zc+df@o0W)T;_xmZ*E%3R0@pT94e~|0@{#qwF*l+c zdF#r{!)nVwGx>#+i{4b4ts`w_Yiv0VQ>1U-6PO6Sqi%YBJI#j`&8<>O!Gn4^h!9ZY@{`R+eAa(NMJ<44qfK)CRa2z>cy7Q#0q!V@#% z1tbJ0T}Nzqeh3%QX@00Gu|NCLsZ~u(+`~W^b*m!=({~f_6 zBXAgzkD&Bfzkh(l4={Rt_}D!-@sr=*N&Mc0GJv`~hu?$#bplSo^LW<}FTjgRgqIWu z-zX3WjKRxFgjW;@-zpJa1w%sUL%o7goKYa$QzElr+Jy0TDgmH-X!F$z?t0qM+*cx8gXe*oKyiRb_T diff --git a/workspace/game/bin/xtext/game/impl/ObjetImpl.class b/workspace/game/bin/xtext/game/impl/ObjetImpl.class index 26bde9eb1a2dbe15e11bba4b2d775bca861d2b27..0d80db9c9f36cae4003cb0412b5712e4500cb886 100644 GIT binary patch literal 6134 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 T?*n*^8C3qa(ogY5edB)tc0tFd literal 8658 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 diff --git a/workspace/game/bin/xtext/game/impl/TransformationImpl.class b/workspace/game/bin/xtext/game/impl/TransformationImpl.class index 29e84f9679d0d8c2cc05bde892ffefceacf81c42..4e9693e08c08a663116e52288f51fbee833df6ab 100644 GIT binary patch literal 5085 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 AZ~y=R literal 9279 zcmeHNTT>iG6g~|b_7VaClMoEiNkrXMWW6L_SVRd~$m(*DT`=;Jnw@Q+Q#&)*(@VjF zPyPn~fiJ#U<%3mPr4PROW$B{M zvGs=EI$dlpp(Hr7wsJGrbI?O@R;g3330*h@`lgx1#0-JnbY`7EY|gIII1FRgHb9

C1^D#zwRv-#E}HEL|fp_-vv zmMydj)tU(BT|3giA{xrnYk8khF4q(~)r76-n%Li=sia4bDEiFRbjLXc$hEpj#kO75 zXbGvs3~y9AquHC@dbER-_ttOL9VE#v<(yS1vc=^M(ui6Dg>dRSl)I8Na8aNz3t6%S z+hm5v%eifxS;s8A)Bduc^4L}Sb)9iqMTwcC)vYSsWEO4{JRLNF%JC!#>HwvZQNozD z!~SyjLv^vMbEe}KP9^2;Vf0t91m#wXmxs>K;Nrx(?o9F0N{Q)VDQssjBL^ns*dd3aNX0P^ELQzUl)2AH+fel4YRN?eWG5xY^dn> zUZ?0Xbr+~eGfPZp72B>+-D*8VdA>^%Zc*X-xkj*qXX+-m&7;myj4C!McU=D`Tvx;# z2ZJ8})b+UK``U(!YQnc8p=hSSXicEYq5K%yOOn!3Q?g8HKH_&64u^5P z$M;FW5M1kr0T>~0H66@`-DG#Lh)4BO-Kx5K}p4+Ql1mKSGMfKjesB;Z_H{j}&}deH^qmsvof9B^uS9wm-jk$?wWPYESj$gJg!l0eEp2|Z5k6EP z{Gmjcf}DiVw#~Ex;cq3v416LXv~BaL0^wgJ!abN%BHRxm5EaV_%)^3&;O+*WVGk4t gV~REO!e=<92R?@){sMf7pMKn}i?9q|Knd3V2i@(m?EnA( diff --git a/workspace/game/bin/xtext/game/util/GameAdapterFactory.class b/workspace/game/bin/xtext/game/util/GameAdapterFactory.class index 20259b2af6ecad7c3e39c6e268ad3d57ced72cd0..a8b5d6b892aab73293410c169c7647e1bcde5424 100644 GIT binary patch literal 3267 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 literal 4953 zcmcJRZC4vb6vyvSBq4-CQ7ENA7yA@iN_=dUAc{0R)U-uO(boE~Y=$s(vzs$Jsq`E_ zf*-+;;Cs)p9)0ieBlIKmBdEu_v&m!!hjd=(3&PIa|NY&&cV=hq?|=XND*)VpdItIk zOdSe(D2jErL5nTH{Ne^a?R?9GcaVX80;7-I$8OPggL?7q-XrP>0{KQ*qyDz*edE?C zfyqh=5qq~SB?1G>EMQ`Vz=^{AE`k0vbj-jIfsrn?%z4POFic44UchM-`j2VN@xn%v z`L1AL;52!-=hH^CiD*9ija*%_OJY-;$z<8n3E$@!tEU1^_@{d$lK<~5~dz4pQtSEu8 zO6a-%uFF|GZcp}$0~QgOPA}_`oqt=N zE6qR1!W4nc-diEw2_2W-)gzFtg-I*|vxTinIjMPRK2@Xk6oJ7VRu5d!;#ixJv>5Zw zfrtBVBYUYHfWP8_d%*z`m03fjW5 zFKED&$sB*?csb@l;A9-2N;zjDWN`tnY7SkC89#ljTGF#Iy~5&pUDTBEoS8Ub&`DM< zX00921`7yW)>O%?nKx-vO5$KljMp7c$4i<_PMUeAO+twqlcnTt5bcM&ArCE*EFxSl+7GvwufHE$j33ZDUT3^{CQ2^nK!eij?s2= z-wFh7IoFFXile!wZDzinyRMfp!zmjO;`xmRg~Ar{Rk z#YS_GbG;m7m@`@!Oe3}ZubaKoB6C=Mcc^#M9cB2LIQ(iLm{CMvNlW2ap*aox)a~Ic zQ;{c)N~3*(=_ieDH3!vCnxh^v(ol`=yDeX=;ky&SjnMNVKAEyh_uNj{;vQXRaoaM| z?NJxwPKUtxPfFqvZZ;atKzV_=pnnP*`d`d|iGeK4!? zjo&9>pEIyGt=QO(z^jUVUa`A*UofzrS+Xy|WyLO7vY%VB=i!QCU$tcaX~|xIYl^*S z$0m78b`f4v?AI;X)0XTv;7!GT%aXld$$lHIEA|ab_Od1W9e7uz3^AE!i8esn}bV>>n)Ix8Nhiu2`~v zv}E6gJBoeRlKqP%dmBDh>`yG&e^|12psLvSEZNU2*}L$mVt;1Ies0OW4-XXka|7FO ir;)#`*!}QO-jrXoZ_F>@D;xvt<6jo<^siwLYX1PNLo^lu diff --git a/workspace/game/bin/xtext/generator/.GameGenerator.xtendbin b/workspace/game/bin/xtext/generator/.GameGenerator.xtendbin index 4d0c9e6ffa3407ca96317b73a3c72051b75c8d6e..1119808f309945e76e57d080b4ed222e38e581a7 100644 GIT binary patch delta 64 zcmX>lcuJ5rz?+#xgn@&DgW*C&(?;IS%*;S~^I_&xCNM*r?LH%jF`1Xc989}&*n{a# G4o3i(*cI9U delta 64 zcmX>lcuJ5rz?+#xgn@&DgP}07ZX@qzW@aG0`7m=T6PTgRcApW%n9R#z4yN5X?7?&= Gha&(<{1W~E diff --git a/workspace/game/bin/xtext/generator/GameGenerator.class b/workspace/game/bin/xtext/generator/GameGenerator.class index c9c35e4f9c2cec6777958f072405dca1109998dc..b946db06895c596ba318abb5556be3d2666ad35b 100644 GIT binary patch literal 739 zcma)4%TB^T6g>llBBJ=f$Ho|UV4^i{TwqKHiG-waA%^`>E?84qGc5+c!LM;;;=&K` zql|Z;5L**;(fgQt&pl`E^z-Ze1Hc9LO=JWPCJ{{{Ye+sR83oE}$q}{YnF&MSBv3<( z9M63W$x633dSRrb6D=SD`AgS#qbq@Iwbm6dnn9n6$YQ009P$EX+x6*YJnE6UlRb|F zw(P)>URNqt=kcKt-MgW{p`E5oD69(<`$5dkqh6}^Pq{Q2u=GHYr6>%>$|37E4(f@< zG)eo~^{De4Ml@0eF;GJ{c%&Z88nMkvbX36(D-+n|EQ7soUn#~L literal 1197 zcmd5*T~8B16g^W4+pg6@5xyTF3drugW?-rak1=Ip)a%>DW6>vsUp@Hj$=Vf8quZ4?+&w`a$P~@Ffzcwo-IOk^1oLdxZKoiJk8uWaXWXD zj85$3=>@Qxulapp0P| nHz^hjWvZPrtW058p29GP+jORcJGe`4;1NAB%D9IIcnJO*Dp_7m diff --git a/workspace/game/bin/xtext/generator/GameGenerator.xtend b/workspace/game/bin/xtext/generator/GameGenerator.xtend deleted file mode 100644 index 8ab531b..0000000 --- a/workspace/game/bin/xtext/generator/GameGenerator.xtend +++ /dev/null @@ -1,25 +0,0 @@ -/* - * generated by Xtext 2.23.0 - */ -package xtext.generator - -import org.eclipse.emf.ecore.resource.Resource -import org.eclipse.xtext.generator.AbstractGenerator -import org.eclipse.xtext.generator.IFileSystemAccess2 -import org.eclipse.xtext.generator.IGeneratorContext - -/** - * Generates code from your model files on save. - * - * See https://www.eclipse.org/Xtext/documentation/303_runtime_concepts.html#code-generation - */ -class GameGenerator extends AbstractGenerator { - - override void doGenerate(Resource resource, IFileSystemAccess2 fsa, IGeneratorContext context) { -// fsa.generateFile('greetings.txt', 'People to greet: ' + -// resource.allContents -// .filter(Greeting) -// .map[name] -// .join(', ')) - } -} diff --git a/workspace/game/bin/xtext/parser/antlr/GameAntlrTokenFileProvider.class b/workspace/game/bin/xtext/parser/antlr/GameAntlrTokenFileProvider.class index 740df9921b9ddbb0b3da5453015d3abb7d47e869..0a1c95225859229391bafcdffedcef8c7b5b37e0 100644 GIT binary patch literal 849 zcmZ`%+fLg+5Iqw@9E?dyD5UfTv_KP3*|+u~RV9Q}gk-f!C(?m70N2QLIOq5+$G~<%opZ8=YwT zmN3`po)fA^>4ow!hs6LM>V#&f6ZL*P>??C7`>`Ul!ZeccximU|Pn}i!S!V--YQ1)+bgm$MJI+Z#VC&_4RPpwgM*vomX1h|h?LY?c5VwrK%m07wQigR*m8|xk( zuz=t5a-jeZ@rclv)rYC%(Gu4GM=3(RI-any5@9;A$|N#olEo!gdSLV4migGgmWNHk z>OTYu)Bw-$oVhcNPby2tCQ^r4p_9<<6#AVYcIsr%D<27AG0LYfQ_=pT(8--@Ao!=Q zNxn~njl2KJK~5K2;EmvKo|m=4mUn^A1%3&(#CCq~7XDWk4*0A&=K_}a9ux^^pvf;@ zSuFFJ7aucNg>7?hg4P6U;ePA!1W&)PtHNb~@4`#mt>K{7iu5T|oq23yhrtNDuI9xr DzB$}Z literal 989 zcmcgrU279T6g`us-DHiXjn?{!<6H7z_eBtl2qJz2;s-Pqe4K1R|AE_tDH zdQ$C1_5+#cI-|GF&h>;`gu1}yp_;2CQ)ZgH86Q#_1U4RNqr+o?wQg@;p#IcOC_+=9 zeTIGJoOKOc5cu)VIPx}|(?q5=FLb7Ywni4tjx);rLm4+mGm<(ltP9e*=`N+2E!&|*MNVP+?CO5sn6Zco~S6P#S_h0IIO;^yQWTf-_V zy)2(h;32*&$W@c%Vn`gLfr~Ay`;~9)p*Hlo%*W(Limedn3~j2i zedTo3|30jTnf3z7@Sn2l3v8XcslZORw-BRkGB8CMSP!YZ-@sLYkAF|f8 zOP5mhE(Pwa4rsUXn9UxT)EcjS;ACEEa>}K%;|MqT?kk>-K?>q4)w7#8S+FUCP7`4f@wLoDD9qt4!;|kaF4BJZ>T1yz# Tu){nxT*Gxc14HkT5=Y87;BHyC2Dg>v8Y{dc zHatfZVTNhPEgHhK%gW`Z%Iai4k0Dufd8x$RtZ9mJnPDL3XVNK$l3d;) zE448hhVIRZtz=0QWLfT7B5T`@;z~L;0rccdr(_fzr)UX7+WW#(#;Rv1F)}Z0sTLSQ z>Cpm1c+uGtafFaepb2q?mYlT3dZn~0+$~PX45^%Ba;v~ysrP|1tlmjFsz0dpFHNEI zI?6(=(utB=&*a{ou(zD|LRUGP&Rx*0*SgM8fh!x+T0>N_=~E5Gf@mPOrE3KeFhcP`}BPVK6;LzU*bls1TKct{g2Q!Bf*e%sir0I zmRBsbS+T@AT~~&7s_Kui#V}2G;<>0a5vAD#8WAB%B;GnoL+Sr3!MV!BE|B5r^Km-7 znr9@VC-FFeyBK7M=begcil)>XQd*k{i#GAK+n-yg>D8 x8j-Q_&zPxi$uPBWq=rM}j6=kqUF#CHWG=uOu3{bIQGF#O1+P1L@=v@~<`*7!ucrV2 literal 1896 zcmcJPTTfF#5XWarr5B6EauG#jLD1Gq`(k1u#-tI2CKU-(qL16tpJ z$^a{>D??fLv8mnV#$X~}IA9Qet{a$uDF)eLBrlB7CJ9-_ zKD|)}L+y95!95+crQbvHw$XG)5I*7QRIPS z(eq_H{A<^8J+wx6w(RQLFKxu_+-fekJ!xY))i1^vr?;+mHT@pdzBMR#6!{X?Ow;n9nwd>!1ZA-Rz8#q4?3acx{Joh26Am&(WwWhEF~6p+Gt#M18O=A z8MvB(6yzAp<*UQyQZ`aGH(c|xRjF{N6V%bv1oe|auBtuZ9|$9zJ=l!fmLw4^4|Mn& zIg_^LL$noAmlXcCY&1~y%11{jfV1VK0FrQn!S2Nha{@bi^x{r1$avH*J9uRbHlr?& z%0()RMhU-E8T<^3Ps!!Z_ld!5zHq*@N#G1VjL+-8YkFYnzK?NF}#vtNP@4?+X!I=Xz<>Tr`7Z(Vq2Pul5Lqvp>&4KjkuR9}kdZBB@}YFLXy&sGuO@hiLr^{?ywt9fyP{Z+0M_eWsB(*GsHmwS-hJroahn=#hy!gfKvz4*>v%o zKqBy*b7Q*~Gh!6XSu>Se&ZZxl`GMfPfO9mrWL86+fxOOf4aPy+n}QnO#*dGW-47s=d$s&l|?fzAfnZ1#vwNj3UoZzq3H18ut0U? z*pp_iD4;FOsfWF&PFsRgz={WvhsdrS?2_2uYv&hXjr6Yjgw%|%Ss{}_?YMYLB zHRNDWrFQBF?MyY+RaUo-u$85_89h2qs|V=T3XN3CT;+NM`gEL819B_WjD8&hDpYIb z7FKyoMn)wM={ToG+}p8cT+lI$5xx;CyO=k!g>;dp$|WvXXE3H?T%~w+4(^Mkv!-?O z31cy13e?APDI+s)>L{r-SIkxX`X`yW+o*tQYd_Sp8cZF_CoXWKKj zJ!{!;mu+pmu&o!i^}@DZ*wzc%dSP2HZ0m(>y@;(BvGpRhUc}am*m@CLFJkLOl-}&s z*myEJw(Z3eTkc$9HX6UUMU%1Q=+xxo_>S>ik(cJSvWMf>l2eIGc{i>K z_;yd&eu9pd@G@^xj6Kj9hz6q$U~|*M>R!-s8CN`*!A;d|ZVB`RcGpVuQ`SGPq;Bgl zuqfa%^Z6V*OIu)%P4BgbO8*lqc$rLRSJ&7_j_fgWdow&~mz}32Im;bm+fRo3IKSet zz1yK)?l$|t;5GZdm%GwUdk1U@biRt>JVP9>hJU%jJQ$7ztyDgLaU5Vw6>MuX?-7hYkL{{ zTD^K12U_373uPRk@t4s;bFz$9nvOEMXd-3w(wr@0kmh_Dqd%sih6(=dL=7O@Q7t=A zCp*y~L-5Hi9GBe)$}qZQ1bwmx=j3UO%U)dMoF>i%XJ0~;R(bs1VN9r6vDe!{D>&w; zkNt?odYDupd8Q(wTf?@9Kpa!dnr5z(BQt8#&QEv{Rn%y2kNbL^z8@$(F1PYgOE|>; z7byNwhx2Ec)6nbE1{+;Z;B9o(U;7@ay#s^KAiXaR`krXN^S!f`C7C6?m)}N}bMTq= zI{nYlchUa>{m;{v^b7RI>AUGK(=XDmqQ5|Y=xvItq&Oj=KxGXRG73~$520T{HQ^K? zrNBctM2IPOev@%{E0BFU?1TRgs1{9;Wva~1^Wpf5XKbL z6W%2}QgDFqeZnyX4TQG{g9;i6YX9dHG!Y&XZYg+y@CspM1Fz9cJcWnmQVHre6aRjWwR_Makkvq;^ll->VZ%5eGK`2}XKwZ4bzUcJ%T@jhjT~iN9AgN$e%lq1JL9kTyhA0d7f8#7;SO{LvjokY1%ZwV&5hvsO- z9eNJ99H+3%Q73{pg1huwn9{z3G(D+(%-B78Zbu6>?<2#}6`tFhIP)*~-AIUk@+Y14 z54bi}mK#DasN(8zHT>wiJ`D}EwftA>I=~^C8v3=q+6HZt;;x+%*u-JBl^vo=b&ovm YBg<83$YGUMeTfSGZheJ*z7lW#H#(c;P5=M^ literal 6016 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 J!TaYM{{~ic9#;SW diff --git a/workspace/game/bin/xtext/parser/antlr/internal/InternalGameParser.class b/workspace/game/bin/xtext/parser/antlr/internal/InternalGameParser.class index 9c08ba08fedcdf5792d663feca80927d3a87f302..1e5ea21b5da4498020a2bef61f8e44221037c249 100644 GIT binary patch literal 43092 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 To&H7mCHxwGi{D>=4}bg*{KE|Q diff --git a/workspace/game/bin/xtext/scoping/AbstractGameScopeProvider.class b/workspace/game/bin/xtext/scoping/AbstractGameScopeProvider.class index af399db0d88a05cfc6a4e26b15f6af35a5d9fd62..1e8c263839dd39b309da38b1849b3a978bb92469 100644 GIT binary patch delta 173 zcmcc4@{Wn?)W2Q(7#JAL83ZPB8HJnW7p3c`Cg)@p6sPJ}l%!Ua=ocsF7i8w8>u2T` zD=`%0_Ap--e)^-MtjX(wy0~e5F0}FC6a0A&q5CuS*7sz8|-~+4T F2LOCyCCvZ; literal 599 zcma)3U279T6g`u!-DHiXjn?Rkj88T%$xA`7r6Af5Aypx<;N$G%l1$j0S!Sl8eeRDE zEZBE{l=LntpT3PF&%t`)p$XXw$ zpcy;Z*{!Vq(aPwglJTOVEJG8I+IWD+0$baoRm^ep?6h0g=!}e|PiJLLexf*;KzHP{ zDo&L*HUGOz;@kv*{^*`Z+!e^i?#ydCG_~o=JI_6+V{yKZRy!L^h-BljA+NliU!>>> z^zJAx&^|FCaFYqQ4aqC;-|&Znr{LD>j487n-U^=C6`J3=*>|+BnKjU1tTi=mFt-1w Xu!%0SH9TQ#;3>9v0?+v+tax?u diff --git a/workspace/game/bin/xtext/scoping/GameScopeProvider.class b/workspace/game/bin/xtext/scoping/GameScopeProvider.class index acaf6eb72d3f49537f647758602da93082cd0700..12427a29e628cee1f3106e95943698125ab0cae7 100644 GIT binary patch delta 96 zcmey(e4L5v)W2Q(7#JAL83ZPBWpHsZFf(xSFt9SPP3C2+m^_zJ(n_C!5eOL=Shcn@ iaBKuJm>9T#BpXY6r4@aT-J+;(O6k*I<3+Of~kWF7D8085!TBlw{o|8yjuB8O=j{#C7b7|QK>bgDM{zbPgP(c%nPHAbZ*9pFU%SF%1#U^TPo`k z?@C(+cLr#o!x;ahuz~K<-(2Drdd&C&S42iG diff --git a/workspace/game/bin/xtext/serializer/GameSemanticSequencer.class b/workspace/game/bin/xtext/serializer/GameSemanticSequencer.class index dceac9a667f11f63dee9ac862cd485f2d8ef7bb4..655f1eddd5f37e0ef012638b2f6dc9daed9e8b84 100644 GIT binary patch literal 11411 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 Gv;P8m6vXQQ diff --git a/workspace/game/bin/xtext/serializer/GameSyntacticSequencer.class b/workspace/game/bin/xtext/serializer/GameSyntacticSequencer.class index ccfe56849857e5e273d6549f5a27d82040bb4117..ea390f2dc8b0f7fc1d5dd52ff02ec8e4c8467bcd 100644 GIT binary patch literal 3266 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 diff --git a/workspace/game/bin/xtext/services/GameGrammarAccess$CheminElements.class b/workspace/game/bin/xtext/services/GameGrammarAccess$CheminElements.class index 859014f1ab64216283ed6c676eb0892e55a1c401..b95b4d589d79cdac43906be0d06540467aa2597a 100644 GIT binary patch literal 5608 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 Gf8t-Wrhcyg literal 6308 zcmeHLU2hXd6uo0i9GgIb3E``>n=f$s5f_?5OHidK3IWxnRTGeSLgV#d58B;vXT~Y{ zWtCc~eQtkL)w9k<-ewne+#>o=KX_;F`plV`d+*-aIe+~5^RGm7m+n`n#AxG{6|Zd5 z2z?-ZVVb)<6uX*-A=g_z9+;JF752I2Rt)q`AVLvYQ=u}WxtIKaHv=AZo8Puy3g0p+ z>p>tG&9uJb8jRn=+GKRr-wLeI5x4R{7)Iw>X&ZnAzlDMJdpz2c-RNs^_@mOD=btjF zwh{xNEB>w)n1w!xyTxeU-}zy{1C#E4o00c7-Yn!ZM$0Ezv#1S5Q?@6~3MRDFDsmTQ zI(1)0(tgEgwNVUTdkVL0tB$D9MMkqDpYCX_^fX;!=YM|^X<<}wAUd9pV8{TTRFT)$ zs*Qk{dtR-&-xHn;`%2pwvffpy8wk(mQKYQb7Tz(zKSV0sT^D{J`=*d|0{x$QU{6NK zIg7;1rk!V%$31)47q#kE+gQzgn-r4=GU^EJ*k@E%#_2ukRWOV*FsYDFtPFA}k6yA+ z*q-WmU11Y+W6gV^Rp?o~tFbG*Os&Oh`a)1zfRy=z`t2#4iewe3H~ey zBHwD3JBx$NSKCtq?TZI8cFRKMbiN+P3xRtS`6@EfSezIiN};*-dxuaxA4QSS+W|L5 zKp}-%=oN{Dj4tG=tC;f#1!-EL&oN}$+ZDQtuqGa@(3e=xXdedlnp!}d(l&Lr*Gq&*k6b8|FHb3+D(+^&P~0;~ zT*_rwr5nx+S92L|j=^v}m!UBRgO|&&HU`6TF2jdoFx<#tI87fRekJ;tK0!;gj$aL) ZWz?iwxZWGuWx9=QxkF#jChQV5{{qUY@oWG9 diff --git a/workspace/game/bin/xtext/services/GameGrammarAccess$ConditionConnaissanceElements.class b/workspace/game/bin/xtext/services/GameGrammarAccess$ConditionConnaissanceElements.class index a483293a0f1e0b9657eabcda285cf547c5e78a86..dbe45238462581b93d2f67b9a99042f1b8bbc265 100644 GIT binary patch literal 1991 zcmah~TT|0O6#ka91lp)rwTKsxo3=%XiuWp5D+RO`N0e75gtdmr#Ys}fM}LyeSQQ@> zADnUYKRKSIslBc6lHEOfzH{5}oc#LpeSXI%-F#jgxZ$drb{%gzRfxcuoe91Q) z$M6d#34*Dj=Wbe|<+-$R4J!x?*W`;fceon{Dq;+)o?q3uXAvo9#grg21Y}A}%?!bx+VU9ngyB zv=8qG%Xn?*w&7Owwa~ZR zYF-v`lS;yFUd0r>T5l|^rxo=)t09j5Bqov3kVTGRkW+r4;Inw1PB+|np_`uLc&=Wf zT=d1V6@>XD&SO@^1%~lQbAY0Et$|I!wzb2N$TSX!GL>FAz$fMFQnza&EqzWC}N>D{h z8s@P;owVlFe3O?fkz=}NWX=laGH5HV%l)El1OcZ(`H(^HeXwZo$_FLGSTlxJ%{oRY zwVt#!oAa4rpu&T2*$YByLLwoJ{uolC0ce*JeA-=!D8SH=7<_ljZ>&r0*d*y(Ls1 zt)<*d9YeWKNabce;#lhBXPn-_WF6DF+y_i=;~WjGZOrsx2bb!Y6VkbDTqUoO^jaM^ z-jk(1+@f!q{6P7NLFF4plpW~GcP!F5Pj?#mCXcv{JG9bo3JXy*I<4X^E_}YDO~Y8f z5Gp^~!0~_JyC_J&bKT&dQt&+#CEy#~;NQLAp#p_{KLStF+6en27Q4W7A#xTqR?|%ZE+3^WWfMYiXdBalRH;;`Q3L_i1VjQ7PiVXzoI$%Y*32X& zzpN5S?NgSQ{jkgHT6Lw9TG5B%(ps((aWfT}P|j9RW~e{od%Tr$)ob1B zJQImyD4X3>Fx1-jxgqWcWL;-ClZm-_ZzcNkuv5C^09~E_OQRvD@#9Xnw6@o#BZa&hcAPb%hD6lh4!Fsh!s+`jr8{LXW2_q4Br(hOot0> zBv)1FhU(9v49A-*ga2|0m!>>~r7O@n}@W&K}qqso*E@2rL f=?#2JPehCim#{+RR|C6@%lI6txPq%>mvHGXx&EF& diff --git a/workspace/game/bin/xtext/services/GameGrammarAccess$ConditionElements.class b/workspace/game/bin/xtext/services/GameGrammarAccess$ConditionElements.class index ea6758f6bd33974b7b3f63c8d352e140232f87cf..a4cb6c9a7ee7ba4e26db1f51196d1fb4b5618364 100644 GIT binary patch literal 3947 zcmai0TUQfT6#fo_1d>q@@8AtYB~Td!trrx*7?6?zML{jqbQlhCFqy%biI?8&#jgH} z{)cw8v84}PzP5j&zoM^Q-DfhxB$I=_WS{J_zkNIVGJpT~$DaT$;`;=e7>1vF{JE#O z+<9sm+|{P^5}$JPQb~6v3}U!_8QWSlJ=3;XN|lK0k|f3cKa1X_?*_!^!^KJH^vWRGk@nmA8T3Tg5>f zN-tk&E9zE3yX`rq zRT!0d88)`iJDPwfxkg{24i-5aQLzIpDV)Ux74PFBLmQ`xPD18H8O4id6C6)JY7FfDA%Q7tvv zsGkP{^pT2PXis5QfbP&3YXpV;F2t8qbYQnQ-BZztR&n}R#h$9SpQzZ2or3pJ#Xhu) z)2Ax-R}m{J4j@T&BnHH6xwOKaJNk;4+MPL@=EjolnBsrHY!)raaQ>Yg*0^J+MHBQ| z!f{GNtRSi{6P1)0V}3XJYoS{z9WI7_B)HW+;asDsA@9IIfD9Za+*{Ve!CJM^qlyI~ z_db##<>^}VmUr?c(I*YBzAQ+kwv9^3fDIPKQK{mvbVy}&Vo{F8vN%QhYga_=IZUg+ zF1l(RiK4D9jKSK=?E?>1#<^{zB{6L+jU$A4+uG=rMqM}4lGFoVs3_nO<>0nmb__mg zin`q2@Ub)`CMJVAZCTvO6m{3-^ttp6Jx60x2A^E=&n1Rqp$}1=$3B>LM+pnQ%%~4$ zx$E7sT@O9vwL%|yyQs-&*wU#}3^1S4X!0oyCZE#K@hQy_pVENvDUAo8(s1x8jRv36 zVDKr81)tJT06IFvVx<4=WVs97^m`a!ugHrgqP+uy6&xA(4aWusU!%9P|91?$!PyFi z2L^t{@Fr-7H*exn6W(B~f^oqe-^2}yBH(5!$VS{ymbg<9cSj&QUBQgt&TQhtNW*Le z^MX6SiG|48?Ftqn4K0xmcLn!u+=u%SH}rw5Eeq~)+}Z=deGs>n7u;%Wi6}PxXUbg@ z4Eh}t`Bg5VO}UIi$`xqJD6+~`EGyUWL>a>m%60sxjN=z&0)Htt@Q;$gzsgOPQnIXv zaI2(4rTkOY!LdgFm?+=si$Ehvci2H*4F5!js?ip~RB{oR$|eMxSeJmuZ-(m#ELmqa^>r{HUR+bq77PT)KGedXVu_#epa&u9Pu literal 7315 zcmeHMTT|Oc82y$2!U_fB6iP{GL_!kWG&o$^v>{DO9Bz#QDYt2-GxZ30F`~M7RtpWk ztTXLQ``rGhPQR69OQ{#MPBYCz{eV`xK6`e*%U*Q&^RHii1Aqsxt3eNe`B$92;-!$X zQ^%%ZY0dKJ8nZmlV#_u*gwy4~uR7cb{1uma)aRiFy#(^d)~Qu;Ex%UUIyj~_C(z4I zTuNZjd}%S{+s4`wfqr|91t)a^ni;)d(-phL`JA5p6tHULK7pJWR}e8_oAi*EPndi5 zlv(zVlsAEM1jdr?%VFr$d@-xaycjvDBgvfv*BWnymst>o+w_n!>f5w3FNV&WueW07 zd(zGu&vq&E9N%(^#u0xw1fD+TN#(JGSMTj!)C?O^X)9491h; z5*sQDg1MOdbiNsg6f`9%Rx;}dFW9fz+fMCB>gq)d9zSxzX(Ya3X5|T*-T%n(9sZcW zt(k0iaUV0L98{?W9}yT%(rJaUfDM2_M*i6I84UyXlvWKp@am3hi99swEI7bi3?CYL zZuf{9j#m#D7m(Rn5Y$|1*p}}H+&G{{li&@J0jteY+jZ(;CTSP?KlQ+l<73WoOw9JQ zGk9QF20yD)J-2)ia@@>#ypOIrew8xCKFOBaN$;dr#xTmj_-NSUjw_*TEHaPsqo8Wk zD38%IMdOeKp22ag3Rf6yhYT)L+>k@zEdlZz+}HhD3~ro8dM-LXB%`K%tb$QCHr}B# zhEzkTOiYbQ4W%+(a?)g&s0>sYwRuivjHw7yp4!_7c8wJWb83TA44ESA?FUSmu^ZWL zWL?<-_XgRnoOEjYx*AF)ft%Nn#^Ry$Q9w z=({#jG;>H1ZLCNwU*Hlboxq%KB#!?y!JbV82O^SVQs#q6Uq zRG>F}pR%%Rg&{?q{3!t=OE)Djk{H@j*jET#&seV-tYHii4{ET1Y4UoQHF!>-FA9|!KFRBm0a8%}DBq|Fr{z{B{KgNy5xUm@bf%rY2hjI82`wij96L1xu z*RZyTv*^K6{}m>`D_s8>rhdm-4@~2;A2H&23!j70yAHSE4%P_FKrzK2a1Dl!+ZisI zQif09o-)IhlwlT1$_(35hWi~b>`58sU|x9+-%1%4Fa}91F81X2Qif0AGi8P!qzn%_ zh=nC(_`Cy8R;3JIbl}OFl;L3qo;;Q^EOp>XPs;G913%Oy41Mq=uB9G$3{S8G_zM4Y hj4pv?DC2V*>v`NMp1~@t!`EQKCcK0lZ0&*NzX2pX(OUoj diff --git a/workspace/game/bin/xtext/services/GameGrammarAccess$ConditionEtElements.class b/workspace/game/bin/xtext/services/GameGrammarAccess$ConditionEtElements.class index 2cd10a75ca156e083b5dac93b8a5a13b5e4d2449..00f1fb39dff4714b580ad4d728ed08cf7d8de3df 100644 GIT binary patch literal 3846 zcmai0>u(fQ6#q@9blcqlY7wxsylT<5NQagJO2Jx7U$PV|r6M48I=$Ua-JK~jv!y)M z#Dv7e#KgqJL}Oy&ca1JuKN!C1KjB~DSK~Revpb#H%kpLJopaCcyzY72zyJH=PXMR! zX$lPrhBkb$;p?7o*DX_c`lL}1lde%H81AS^1h0F{v6n30a_n(`JTD5u_PrDu6=L#BKqA56#t(6>Mh7~lK zlde--Q_wEq433DY-OP$*pKxUGitsG&g1CFfahDd3E9j8m!ec`2GpjDo3C|z(JS%6j z-wOkB<01}1AB&@7qQ+du^Jc}eAfrsNFu=BSNojXZ~R%*f|i zFx%QG5nbUSq0QwmE)0@a=4fF}xSnAzRX3G*4F(Yl4RGv4NCsI^f9$lL%f!y&hMo zuVF7&YxEfJd z)=j5SaBRIuzUbpw%kzgbcpYa_ctgSAt?H!A8isL}u8M-LV0X`S?-tK4Ev^dFC&MWn z_HLC_zR94Yu+492NTE4{a~Mitj9N@BZ&)g_s*YMvrP`VOiiVwN<=s^cFQA!s?`dd5ns@JO*aeMuH#EG6 z9lZNM!|pO-LBk%TDSNV(EoO>^Md8jFi`=Z+vW{uw=MC55|B%?orKsT4b1O?WT&Orx zbW3bH1tO6Msd^BJYt>o7_f=@<)<_gB2U1Bu_k(c2&a`y~wBxX6UUl<#;|0lieyk z@wQWKQ;(%x8~3eXrH&M=)NO*58c48GX9!m63&BcVAy}y=1S@rfV5NQ#tkeyF)>fW` z^uL2NwqqZCI{;;sv^UVI^&Kstv+p+?=sWrZhudEL9lcMXmoU)R_bUcAK|{N76Q>*S z6z579Vd}^xM#=h+`gRHDBWi_rqJ$}?PHp0yi1$JX7nyo-6PF^nmrIz9By5Yc%`tT@ zsck-@Zqas)sn?R)t~2#|Qrk_Ymc3|-ytwrN;+y zcW_(Xz+?3;zEkhv7xg~=QXk+S^&$RMA1N8a7=+g-$`o5H!lXZi)3Y3R8l?)KVH;U6 z@Dpvy3Y(ayeinf#DJtM)1ruyaG!CKA!}CE(NdRBMEpa3I0L~&Z8g!Urd6( zl!9$I67Xyi{FM~ECJoqJ68yCkd|Mi@`6T!oDcF?;>{=51trYA@19m+L{$2|9r2)H{ z1pgof7o|SmN`il^1-Fh;Zm)+|b%fS(Za=}D1egwtAloU;aW~lA!+l!Yr~*_xz@tWf O&2-^o`hF6ecl{4zfy~ta literal 7243 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 B6pH`= diff --git a/workspace/game/bin/xtext/services/GameGrammarAccess$ConditionTestElements.class b/workspace/game/bin/xtext/services/GameGrammarAccess$ConditionTestElements.class index 3bbbf0daceaf7ab048e1a0be355a9e95b4148059..81a6e349f3193a377b51231e556e4fb351228604 100644 GIT binary patch literal 2329 zcma)7-%}h#5dMY*7LJYJDUrm4gb2yq5!u8@5_5>2ClK_67zjT2U@gl8H?_B`y91T~ z$e$0f3@Dam<=HZRz^n53#h5*|96z zv5FkGrN8V2J2IMXN$)uk9p2ybWn!;+F3=xQCNNp+wcNp!1x~pYU&$zNl(#Qqfr}Y{ zv<4xU-S$Pe2^=quoxqhHvsK6Uzq=-IF2j}%RiD#N$*ly+dmUTX1uk@)u5Uk*s>|C4 z0)y&%FP^5`OSNMe%%}vN4=#9trxpcf3MZ=uGPyHhLO{|k1dQecb{0WkYhD!ULe=@>f18fbhdTN=4+wr_*+io>HkF7ugNWN z`$Vp04;d2P zFy9ccd)bgY3faS)!>!dmog#FN^YM0C({G2s&>9E8-7r>|V&n#&qe0|#UvZb$ByFr@ zUt=Zr8Y`IxjE(6z#($H@QH=5XCjXw&N*~v#G<$%2=`Xxpnmxoj`SX9{!ZXYq;7Y0V z6jzQ=(}X+7ZRaw+Ao3w`e0kpIwO_w}eSZG>`SQ;pG;hfX|n zZ7a;4OoVN3@=Ru#hX6Ux~-%`sYf!1s7NR3gs`pLCRyA(kI7I-R@lgLO}EUuHD#cBEZ}lQZ3_puqY3r&3Ax8KbkUYWUhc zgl0qcMV($|w3x^3hB4YS=p;Mw=Urul)#;w-$BE8{GDWnsiibw`5On)V94&0`h*)Mr zZJdX!540YnB2Ktc+QmH)PY9k8sm)+rB&i(QO41qh1&zR#RLD7p#GFpM*y)(ZZht7E zg-*{p!;?wDxG7a%m_VC+YmUoJkaccV;U*Y3u7h`-OiL&aHd!Xzj_$_;;l}9JT72K= zEOywdJ{0j(Ma4F~FO2ok@}LaG4nZA*4@z&euxa$}u*7RI#vz#C$$l>OztaY_XR4YM zU524T1{TH?h6?f5L6ir|A6^wx3*3K8Ou7}-9f7zzj|@DDZ$ewA z#;9GOXw<$mZkxVcTB2igd}M)zrX|>)K<^{4)X+x1((*UUulz)({y?uruaA-5!yEYB z1Rf}Qlioth=xutZz%cr6#Bh3=;mG%;3@dadnBj*~hIeT-nBm7#hO>uY__>tf+#wi# rD`7ZF?;)NwYS9{6qVxDfm=&W7^gh0?jQVr5PM7F1R_iMIHM;N*{#x18 diff --git a/workspace/game/bin/xtext/services/GameGrammarAccess$ConnaissanceElements.class b/workspace/game/bin/xtext/services/GameGrammarAccess$ConnaissanceElements.class index 3ff5169ecf67215d2aaca009d425e48c33df702e..b0ffc8d096f3a2ad4909181ee920ed1cbe2ddf43 100644 GIT binary patch literal 3422 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 diff --git a/workspace/game/bin/xtext/services/GameGrammarAccess$DescriptionElements.class b/workspace/game/bin/xtext/services/GameGrammarAccess$DescriptionElements.class index 22dfa151c57d337efd8670d0889839216a1d3375..9636932bd931326737c8fe703b2e91988c69c47e 100644 GIT binary patch literal 3082 zcmai0-B#O15dMS!gDnCve@Or*P$c+|rb1H_Vnf&$z%{2G!@t6h$F@+jrp-(T^)`7t*5Lw=vl`s|^oNGjx z^6k(1chq)C!HUL>1*(oL10+))Xc&qu?&61KSxD-{ZXGMY-sPRSs3%u2gJG ztO|emHusO2?or^MN$9V)RI8*< zMIQ451qrmJa33=Xd_kSis2k9XYcD8hN0RRf3Q|ZWuq@0=#09RqqCi1M3QOF_m&D{o zA0efvyoYEy**UVkbG5GI5 z*vuIuVg5=&h=wU~DnZHR!4U^y^{XW^>Ht!1^V{E_e*;48a02#|VqL$7gN%qSCQUR2 z2MKw}9PFWE!6X#N9#x5A9|@6{O~Z`vR$=kT$_=t|KJOy?d?Jq5AD!z&`HN=a5NTdE z6-R_oTp(}F<89t{d1L?z4Jc^{DE=d<7X-lBHbc!OE7SHfF zvaouJwMe%$(p~4$^|Ji z&j`V~(DP;-JSzkr2ov@+4xVoWcP&tpu;9*PwAPyBEe>N~I^Z3~*(T%2-x)ZjHBB-Z RFHmXbFI)x|eQp0d^FOt^_iX?G literal 6629 zcmeHM-&5O05Z-eD*^Udu354dSprn|z!2~F2lQb!Dz%X@b2b|3GiIL^QzEskA?#?v) zWu0kf+UNF<>U2+*k*8?TInA^W^#hXk^xb!Rd#gR&#~*+G{3`%Ff?W$T1UB9(`c{=C z6(`K4vRrk1S{07(J7UYl2D$i>N>{LsVm#RPs80hWEf^y({l+_Xn!_z=s5iZXMmGTT-%CpnW=8)8ocA64*V=Vf|olzgnllXMy8spDK>$9j)o{ z^0mH=_*u8YgC^4xjd_mN3EYbxoFU>FhHUGa?WTLcTJ1!aH!uvU&Ez7&7HVlRM`tFU zvVf^)ICv=?zWf?vU*Sz^!G{E<;)U53f{QHNBv*ca6$mQ1cS4)C%l!`X96eFHBX|Q> zRX(=!xq6%0%jVK;c7xh|f_Fr6(ORLd$2u~VbOimMM&OVIm~#pf z^L*ObirbE@PCGQ8+iFOKML|UsX@><(Dh&I?ukJ9t<6bGl7z3j+`${n{fwK3K`Bb%e z({51}p-ap5vEaU~@LkoRu+J52d`*w3kUCl#wN2s3u={R2mn)f@9bfiqk(L)iOYFk{Bi z%8pjnOWNSxA={0U&aAGRp-d9E|2YzGhoeu6zn>Zg*V`nfaV%4IH?w6lLzy^cg863& zG3woy4~BV-Mo}9@E!3y}h11}Fm}_~MgWCm|fjg+9m1?orbEpI!^qy!jXsX5ny5IF1 zRMZ{RcTg~^ao6!)JA!FDY8=y&6oJiDg(*n{M3KtEbE*CUB`{f99u)nu@G*h;izO#i zoCsvYlWnLD=8z&Rtw?+wo0Ap7%ZQ3fIpS_1?gEwY8a__Y3AMBFrv%b0^l=wyg$3-@ z|J=qtbJ*uh4UE~eUbr;)=nNC@XR%^<8<7`jhWSI@6)xRjI>xi-j`}Nl@i7bb0+$Dp zNrgh_E~CN`Zu=DV(7hm_qT)GHQq*ieM@ckIc_eUkAnsB1#lASL1<6HRCu3`>?@I7)VS$sxC+2{}(b~XKGP?B_ znESqX<0rWF8(JB-i`NOn=&Oy_Lijt6el4Iy;3HTZV9>Z8!@ctim+mAoEJ4YbVLp*z z8SWc1EG9C1G6cg?BEzTfz}ScTi3}@HHfDH`$gnzu537j`4~Ot!J&|E;h)8ZGFpR@G s=1>On@iV*wY~r8JRD%D!`2w#yXis7;K8C0848DRF@Di%nmVrlq0cSZc#Q*>R diff --git a/workspace/game/bin/xtext/services/GameGrammarAccess$ExplorateurElements.class b/workspace/game/bin/xtext/services/GameGrammarAccess$ExplorateurElements.class index b627adefc84e1c13a64a71917c7db74828e5d9e9..a732eeef57d932a7b1d4d18f24827086f9a0f9d1 100644 GIT binary patch literal 3740 zcmai0ZEqDt6n>^Hz2$bLwa_9^3iL(#qFsvx)B?4XwiGV6*f*?*b-SHjw(Q+4yL(IV zmBa*NVq#)qVq!Eg@ds$MX#HULs(-?N;YZ_{xx4PYyF>Z1GxyAS=FB;Bp6AYA|Nj05 zfU|gzK@G$3R=~Fc-RIt>WpZDiGKzf4Gm1sS8#Bq^cTa3>*sf;;yyQ*TyvUuv&!CQB z#`Ow1H*IUf=X%vH`q+vec!n8-{*#uo%DwK$dfo6S+-%9_RqG6O9@!W=a_OC8%m_oh zIpw*f4TeJsPq{=+t!Bl+uk!o%TyJ&xC59skOt?&_!)A`J1>+^pzJHN2xWj`8I>gXy z&Ks6(^T>3H;ea`Dw`ADoLod5GdI534hbJ?I!GllbZU z{5rHfOEEZDk?P(gg;$Ex()g?#xv+j-vf2hx&7tV+9u&dU~Jk z-nU47H14kQyxh&SRcCtWX3TM^}Y zcZr-^H#QC3Hk^V!7kHLa7*U-wBB9uKBm>bw>9fRbAgXvu!yeQ(LdUR%)1b@W%c*e! zp#AT&nr^zqqU-1-%0-{ZS$;6mh*$7h2Cp)ls0^oc)-Zx|bX8PzqH*tZUqxo3 z>CAu*PVI28a;Nf5O7e>{zpf#JhDMyna0cU~6lvd(uEKjl!(L>?Y)V68c{Z&5mYi!E_M+ig;&*7Q6HH?`^Hk!fWS+Q}p-T`4 zCaxszxm@tLQ^>hN(nKor5v6ye%?HV`f)|l+QZuT_6*^Fec0%r=&@Hr_(&#o3O{LNu z|9d|{r`0*fH%Uw+-Lt^s@MXK~Iw= ze4nUa77WLtGsOLvcw6kR=(p$@LmivvesJ0K1Dv39*V4OaAJLH1j%F=FLF7oC`W{2y#!!F%FBsYZy)x={aJB}Iaef=4!aBNxG0GyeUfjl| z*c$ngbuzZ@iG44}*813bCAMZlYi=8PVa@O0dK~SIZOp~K4YBWnur4HhZ^XXMQ8?Oo zNtl))VF_0-d53Fao`$2UH;AL$u}zbbHH!*Qx}ZQv3(22E7K>d+gv7F19zX z63CSj12N~k65CP5ng|Z=3hI5tR2_H?JNL@e4+2)Nx=!G3s#yS^Mn z*yU2zEaMouZ~2k0ZW9xLZ){4wp(E;L61+kJA#L!&X(_ebXWDL<7Xwz%`(97u45@zk%iwCv`s}JUe z4bF1PEMYHx!mJtFGuxioz;wVpN48rho!!1}hq6iF`gJ5d4%=6Yr@tB+=i4TxX)H5N zH@j)HL)kcHgZXC((QaKAELvGc?Wnb*7As=^!q?z`m}_|$hLK)43zt#38!x3|&xR8C zp*OF^p#G8{vGrQG#YCB+zC)l;;vNkiQ{ihnsqEB}6oJ`Hg~=p4qDbZ7cd5RC66hPB zXp|Xy;B^8c$4gGAI1%WHzieYYGKUoL){4Yuu-dFio$mm9^CLoJN~~4NF=RgSx><6Jb;?1+nUqRB zmSeTb3kWz)t;}!mn()|?uV;6tNo1JRX@~i@8hJdDzEmjSuJ}w);q4xvj=LH~OcVnu zB}0AsJpyi)=82kX!;B~UKDI3qxRkNl99TpJI1Qi!%LKaOTykI)(=;h|$kceD=ow^DqXlqJ=s-j5jc7+#$n+f#Fjl!yE9XHN$5{hPPnSn&ERJ z!&D0lUlOek3||=;uEP!MIDBnnn1&f^hHs1vvn}}Wt&w4_1s}dMGQ8b_ z58oRZ-f6*yAB+q)TbRus4Gdi{k87y|Zo#`)0^G)59_NO@9azBUI@*1>Chx-gummgc N0hHiA)^)(0zW@jPpA!H8 diff --git a/workspace/game/bin/xtext/services/GameGrammarAccess$InterractionElements.class b/workspace/game/bin/xtext/services/GameGrammarAccess$InterractionElements.class index 5d66ce490b281099a940d377f6c3c6d764fc8e93..d9ad700862f1f30c9223023537dcd87a442722f3 100644 GIT binary patch literal 3753 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 literal 8228 zcmeHMYg5}s6unCTV~2nPg@%L%K_G!VAe1*GX$axfI6!%|>B|-JVwB2~XSLAq%R1A} zw4d7_)#+V%jfB16Rhnr()H5LY?w&pO?%kJk^ygo{{00Cs@IwL`2t0bn={r8=Q+8ro z)E`?l3v`v4g@VZzEiCW{Gd4Y5c4&dR+)qFwf%IGR#2j->H$S#{@RnMfKqEVLD1p|@ zmdTK68?6Nb&DJXOj*A2mncxQ&wONAh6+QjQW4Y{O0?CXturh6Jc!fpZxAU&>mK_(2 zp^bS;?$_Tf@M&L~=Ll61VF>_8|Fw^>x^0LoQMdgy`x~A>>ri)z+ zJ!B^c+&N!a?QB9g>$bKi^O5CT^GO1OVMQ5H5$vRB-)V`|@u=@90==@d+UZou=}TJl zeDlDek(j3m3|VIt*t49?ZO^UnIxPr#5a(OWE($=@_Y8si=jtN33Zj`(_~_7NJQBt% zfdLT)mR=OYtZ16HR%|!YZjL~oD7vW8oM_Z*ZQJ=H<#>)`bu&M*{XzUOkf}ADac(p} zv0a-#!?X?8hL7yy>|XM6Gyy{d+QX^8%$Ubo;2ydD$DYfm?>Q$lXINgLXgj9JuTf+k zj#R;)H&V&nBWl=%qQ|&^jOINr?@+@sUDxBr0X515?}_wSew12{UG!^`)}jB?4D8r0 z&N+?~vwGSY+%rsrpB8B(THg0i&8 z3X~stIU`TGL=TS`hs-M&9M`Hyg;8}D;xawNZC_+dfC_kmU{WQxbZDlM!BMC18qKi| zM!U1}WUJv)52X{B9+MtQ$6t6@)aar%P{(WeVWNglO_+9QA0AlmtT>n>8=U5lX~I7I zfN3+Gbw>J(SJ_EmzFT4%@hjT3jgD}zx{cxW^*Kj5jdv-X(7rg}`2DN8w zmu?&v4k+6dN*sZXjAxn7zR7H1%fdz>Nf8*UsW6?>S5cix;0vjE^hB+6cqFQ)wg5_( z{g-P^C^Zpi30`Rf;WddA!Jdl5X)LY~U$0`d+`JLcfdEt=CGmbVCO; zK{Nj9fCRJz_avl(`&DQS?$@9#xVOvlv@E|a%R8jqDeaG>-6idAX@4y38`AEP_DyNu zl6J4OKauur;WwRzJ}@wjZj8Ji2Jm_Ztx4=f1Kv}=!r+^ZyFbJ5?`So^1H3jPMqD4_ zwKe#if=4il7H)~~IKm)sC5G{8269EoFoC|q7%pc>C>f?;TALxIWSD_jZH8+~hB=tm zW=Ja;7Gm_GQ_1ioMlZUR3{PY9qDRT_EJh5yN`}v3#L%Z?cpf8$0VTs?j2MQL3@>8D zFsx))iV?#DCBw@YF^no1mSe;)u4Gt=5yPaCVKqh!GfIZF7%|K%8P;RO@Knk0d5qQl yT*1%;uW)Z|fDF9GJHQ71r*Ow1unAw_^?S72aF5=GUD$`O;A{96vRKvtn|}kl&~OU? diff --git a/workspace/game/bin/xtext/services/GameGrammarAccess$NomElements.class b/workspace/game/bin/xtext/services/GameGrammarAccess$NomElements.class index f56773cd6ffce03b077826f30cc9ca5e1a1f54d3..6e6de0f8a5fad671a1bafc29cc011e1ffa0eb0be 100644 GIT binary patch literal 1635 zcmah}SyR(c6#i}-2yG+Q$|A^4(Y9a%?pj=GrN~UDIDovT;Znn7agvnbXX%Wf_~7vD zk8(Vhrgn?+a+h<@ced}`^XvDIp8%eqEF;3Oa^mw7U-h_qZ0OumH#LiIx|(HaZc!(J zm##Y2hRH2%`<@JmVcT)*D%VZplgHIAv|6lrzN_hepkFrZ1Ma3<()XH6Zgv_b?|NsD zT#_-&RQfHqF$IQkeRpqXtGcZF-K7!5>KL9Wyh_O z38FajACHwI?O0Py&91AvzH8X^LRfq)(uLiEj0NJTKbAJTqIzis0~kzT9(NSnMTQ~9 zOOEY}&J$#GyW!TMsymkD*lL4vQ8y}v=NA&lVMWF=!+fW^P-O-8kSB_$*bJkYt!zhT z+qEOE`xH1e&19#gCWEcs5@Fw0AY+KiSTSr~ZCEw#?rAmA(5Z@}Yv#V@8sZ)ZCDDrv z`72wi^W#xh$`qz>OI_4ciDpRcT9WbvDgW!Q%!I;Q84-9PRH2K|IOY99p&{~=nswJ{ zxH>NzBDS%<`H>gx!k}!~Hg`*==6Rgv$QuT=zpTL&3ZEkkv#l7~x%NzwM8~jV7^-s5 zf9H5UwG{D8Q!k2?=rKB_1ZhArDSj;7CDKShq4gTw4oNdY`)Y3a6vMf1NamK$a5FXW z9k(wqe~QIi?kg70u|&WB9N7pipq^sw3t=L7Kx>LDLdqZ}WicV;pwjsv$%O~9i${1& zI};@ge5$mIw*g`KGaZ_S28B?{cYp`}f}i1e2zad*yw(p+7RhrV058$r^n8Z(9xy$K guthPVczJnxh1ayFNESsAB}sgO5xk{!R literal 5573 zcmeHL>rYcL6h9q zlm2dTXKQ<-$Wr+Z^}w!(Fy;&fW@p$@BPpZiq{h9$m6A4! z`KGaA*F{w3%CS#t@t&u5t5=K~XJBLd*)t;OBJymJh1^tSnO3-IpmPiKK*^9AT&va< zv|}T~WqQDsw%)R!P-u-#ZGg{qJa2GA$$G7e)^;DeV4Mg0f}gyV3iqCl-K1Tm8_LBn zH%V?N7kw+}kCzyojxcA_{yeZZSbH$HZE%iL<_P=q6XqT-B2z8+`Nvoj>F#7;>WC^eZF0M+VW-0>E9b&;DPil4#-ydB2;^fKrgm}+$*C0PqxR-WU^utXPKKr7CV}Z+Q%%S;5x9mD ze#V+*P-gR9i^{xRSyw(^7gpayN4lH04nR+AMZS!*&<0bmO~DmYe)R;ox~(YUYBgY5 zbL92r2+%n8jlj@%T;N>-Q!(?Mf(10Rbz-I9K7n*|5NO5Avn;%b89O>Wz0I}Rl-j^F z5a>givJbM*4+Hp?g%qR#Mn_=~ywfje4`dK`32ToLnZT#_0fygXN8dsA6V?(ij^zMi zY&n6Y#UlzP;VM4S-*CN6!s)kD2{$?=B=cP*+=AQA5*~Gt&<|5+NdhR2+5Tqm@1aBj XvoMe4BG%J5x;v1Ad+-2j37Gu`^~P71 diff --git a/workspace/game/bin/xtext/services/GameGrammarAccess$ObjetElements.class b/workspace/game/bin/xtext/services/GameGrammarAccess$ObjetElements.class index 6138d99b196c7607ba8a1aff2542e9631397e1c6..3202054ac5c240757145a9cdf1efd20eabe34919 100644 GIT binary patch literal 3705 zcmai0>u(fQ6#w0}bldGfOL`*A87O16fSz4eEM8q=)7YD58lq3j|Sjn`yohjO0A~&MDfe>pTcEJ#Ucu-UVIqm6HoN94;uns*` zM$&Je5Kx~iz$8*Qn7{#ISC(~=Iv-fJhF8%?WxGOR5yv|2deh{Dbk?&$%=9(mrlH%0 zlhJ1b&vG(@stiNr3BQ90i0Z7&B|1y7e}^?}LTv+d3}`qCI=OmI^%DsBi{mH{!?P>8 z>1MO8qvvQX`dHfXgTV&8jyDr{gQ2}NoD!^I5Xb3|XuBD9^i1`ZtW4~q8BpR>2)jx> z70ys9UgZ3ih6L&wZ~_Afj8I8eVv8aZ=rIlTNG33$+>J;80z0Ll0a^pbh37P>x6*Sc zMFF4Iuo+v#(^(CTNQ$TP8k(Sqr#TH<3$qIvnhUmfG;Ax_-qoqQh3am4NYPtd>&Lj+=>7(U8?iMMp(RwHA2KY0CSQd4@+v^gTr1pfT^D zX;o`(```ZD=Dd?2%J$qHO>Eep#mY)rZ>&WhjLnuHqeGKlC)uR;5`3dJ-J#s5vObce zQog0Z#4>fsSvTjIeB2VHv$Nv%&?mYSgEr+j+#9hC-{*9P_=rKT)KT#cqP{~g><@E@ zRu#KNY?h@KUR9_}r@0?Yx_*Fm%D9?tJzGe1)ZFN)Su_keQY(-n$y|=4UpbO`0c&K}_l_81S?I-ap7_?>-)f7sWo zfqla|hqIQdT{*;hus6es_sBnQf)x*R9}T}f^l zCSl}?Mbb@UK^SYe86(rg6)6=^L%S`X?%)F&n@K*^_z)l0i2F_lKB51+a=zm~FhPP8 literal 7133 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 DGw*r! diff --git a/workspace/game/bin/xtext/services/GameGrammarAccess$TerritoireElements.class b/workspace/game/bin/xtext/services/GameGrammarAccess$TerritoireElements.class index 5c61e9e03c138106b5dd872dff3d66c0053776a5..0279c763376bda2d22d175b03db30ceb9efd1c10 100644 GIT binary patch literal 3633 zcmai0>u(fQ6#w0}bldGfAG`!gp|#aMv?EX~TA-GtFIZb_OR*x>>GXCxusZ`Yvrv40 zk(pPV}J#&vy;ekL*V*dy%{CvG$zdQnaaJKK2*xGgP^xV`#~idzP31hH7)v zb&6LR_9!faEi&3+%Dm6=n>QSHasD}meF{jlO`yGImM{64qMN^YiVkpv`!VzoL%o@` zcyT4x92T04lXvV`bA+KOv>Ea|D`$&Z&G)GfBrPaxbBGe|K0n_la&A`SEXpS= z2;FFAmU+Rly*Q7fWtlxM>JeGV$n*US2V-@(n+V?@l+2v6a?8r99HYzdmo2ZIvTVz) zYXU_lQLfd;E!*->GIVrqZr(LZJ&|!1c`X?BYuJq^(x}7%4SR5qp|Z1UHjOs4r|={l zWV7fRI`9-jI>-H}zsYH5m!h`O_CO6f8FmJKdj&0eWk;pajb~EmAs6M%8sX3TR$jxi z=%wpeA_|Br8*$tT@uM2OWJHj)K~vmS-H>7o-+TnD%rtktoYiT&8 zv4#O0r<M}LQ+QcfE6EIjpVY7o^>xUKxKlJ6%Hzf)6y`G;8qg?K zvl^PhaIb3E9_VEFBWu}wqF7kq?u@Y@CSX(6F^&AJ;acK7 zQdS9~F&y2LH;REx%uCT7hphHo5Wm`MaNtHk!a~%0$;qhcq?b4Gkt1X#h?;Mc3pbmgt3DWuN)nTI0xBV>;4F+(Pi(%{}$AI6WsI19M4B9rCmw?D%*%q zG`DEgBxXS%iRFPLjt7z$9!TPMAc?zyBvJ;FC>cm1WFU!-fg~~plBftYG>DH3z1LIZ zJ=janeE_>fSyYhh=F&9Y)~2VwL)Sy-t2or%{S6MSf&Kuh*3e&phd8l{ zL7^R7!w{V!(wpcp; ztWqPTs#K|Jq)L@4RjL%J|D@`y&z4Wz2JfX&`=R&Yytm`W&+N|3?%L0bzrK480E_U@ zf-VAchms!3*@%h*=Fw<&%?;?9aD%`V%N`n{sck9*lbi{<;?sbJGP0nXz|d3oz@7Eo zurm8#_bK%xfo@UvDS>|Hp(~K^5%!h{^m=Q8*J}hUC;o$`Q7&b%5=(NR-SeZ&rXw+UP><-@0+VCKqvk6Lg6rm4x9s+~O!ujX zRJ0T*V7PsTl?2>47K(*<8`pSkjpyV?Q~ku)tt2S|3%LrD zMnOc4%EHf5^#V#@pfugA81})31SU>aoKSEg&=-H$#?oQ|DdL?KiO0~al^0JTDA~vn zHjc0pB*tNN`yNfCARbpd5K9RnVBmT7V)gm~yi~uD^ zHD9ghIGNpewd{BSK_>~1#VuYJ9$jTBQ)4Z9!HlXPETxUm<6*=ii9+i-qrw$l^$7LW zjWDF5?7LA!Q8xY@mC!u-600rCUb2JZqh$h@a@LInE2!CKQMX`?Ku=s27HnX}CCRto z9^$e$1PktCF{QD`LEmqv9^0spV1f5-(nzlJNWugVcnh`j0T_WE=*52{U_oEp7N8in zr;@fmY2QxT0T_($55aKUjwJTeNjsX{Ka<=aQ}&@Dcn97^`~Z4B3+M299((gRiY{!6 z&tUwkk&EAg{XO=&;61$dB1T=O@Y)~$FT!PbAA1BofKn5K!ZjGCH4M+R3?ISA#thH3 z44=S^F~bj9hS@e4e$+BtX@lV>EyL9|7+z=@uECsf9DdO<%)^2)!>?L~>ut>9H!Z_r z8w|f|8E&)@hd;CopSBT)ms*CKZOr0N4MPts;aci~TksjS0Jrg1#M}_L1Iu{b#Qp%T U$-D3ctin2c2@X6!TNm8<8wUV)_W%F@ diff --git a/workspace/game/bin/xtext/services/GameGrammarAccess$TransformationElements.class b/workspace/game/bin/xtext/services/GameGrammarAccess$TransformationElements.class index c59533bf6a9e83c3b3b0d5dbb8bad42e464ef50e..a38c239f0b636722221a214c1b13f642b3a5e30e 100644 GIT binary patch literal 3656 zcma)8+gjXI6#h4-fguz`p&SY=6j}~SXz9TgMCr)MP62^pZB-0mGX!Q5nq(-b_dbR1 zP(P)L7k<6fm+%EVYt<`1*Un7XGnp;)COcVs{p+;X`m?|P_nU74T*oIdlrdc2^ZA~y zd)(c%Oz!E^MutzjMkZsp6DA3~o@Ljty$#3B7{2A$lWCsew(rGI!7%T*DV>{XYscey zks*Cz>Ku^z-^tmc7p1o>01Axa4s$o90FP3>7ZP7&?=smL+DCp~{?go$L-nt3or_ zBBd6yIQH9o|B>UauMRV`D`5F;0=Ah+zTqdbZhHR~C9%!@5PFHB*-SY0x+RJ+;dxfd z7WG)YtPWagkl9{|JTf7(N*L+%>SYn!8AWiSRzf34YkqBu`%6yNHMw-KI>OLp7HrKq znTYifVZFzk+27gZ_8rU4debg9eC{r98uk*U5~g{Dg2#q6^8l^8X(aFQ;s`F)@b(nj&YvcGIk9;ZP+P& z$#*R~HL40VoJL`HGzOjOR2qwHAyLRn8Y)p$iy@3?xB_Z~8cx0J3rY~@QtXCjHgwa; zWE@-1QZD*r((?S#S|XntF}zCcTIf!xtl=i;2Yc?hw(@3uvt|h+n!U{2B3^z`knExSqs(y^BFQTV8i5zgQ(y~QJxjGn; zfScQu+95l)kz(;ogzQ6npq{O~0(m(@;A1$tg|?3|%xhm2n=L?4-vSxTnv zRAv~SG?@}f7ErQuBiQQQt2Z&W16_ z(~8_Mnu~ibyw6bM&T-G5aXcSg6nZ(`k?Lp+iS6jEQ7}lb5;p`ZF+;G@)CVh#bFk7d z2P=(ou+kt0D~)lm(hvtLjWE#AAbv~qeTqD`pp~9&0NW<-Wwh1}3?86;;45?t3_iiR z#tUDg?*_?>G&bupy>0`i3230G}I;Oq?A_Xb*B$7 zE2OiBxGgOt4=^WntEBFNkS;`Z7o~1Y#;`1<)zZR>kgh~6+>^Qup*srr{^wMtGQ3C6 zn^Z2aA5p`8LM!{3{#(CblKqMY>^D4QzvEN(2R>te;tTc+-?6{&1N$4#*gs4o%=?7b zsLWJce1KK@VxmQJg@;Zn?V*wa8-7eLIfqq3NC$ERrmhIVYcLhy@hG@l30?ZLW;+fU#|z_cNHn_8Th d#}D4J*rm0RWaW5-{R(kI>B2|!{5aU}`VV8PiTVHl literal 7106 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 literal 14369 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 ZyGnK)cWB;Sx+~_EnS10h+^3v@jX&yO)c*hg literal 1297 zcmdT^%Wl&^6upzCabiMK0_9OkJKdmU(`=BCNL2|zc}V6VB}8I5aW2jjd&Zg>N9|Ye zIY=PEo{y@yPHLqHs|rgNo|n#?`#8t*>-^gf0C)`h9#j}SJau^LdNUEriEvV@-qW#l zMuhIANN}_`*2aS>gUu5$6TMidsP}Gsf}vwjJCsVgBL-`o?ubG4nVz5r4F;_x_ShJ0 z>Tr#*FCUaatK%6?c&L+9#`BOoHF_LlVxMroF`OcoNve(G+C&E!#xk|YL!p#*e2lzc z_$O#l)N|q!hN8}vwUuylr@7$nEJeR@{9c5gMO2o;Wmukff^MoOJVIAovYjs1pXN-w z$l;I1@+7lV=?smL6Qq*!;;9#?9A#j$6iuGS1@+3=6!EXF&4)T%Z^AlkFxct@OUVY# zNEP*SNn3$b_%=(%XoiARV$cqBDB_VYGT&buR^3!u2AyCvKlK?jFSm(UJKaSBnUirZ zkk%2VF_4iGE;AH%_bet~egYy*(R@}L|HFF>SZ+bHD2Rbt$zL2?4+og^> z$YmzIU#n0nOMND*y^?5z38!ZsJYcX>+$;NAJlJDUFPca)zLD0FS%&0NTipkG3g~$O zsL*O1YBYMZdqk&TSh0=G+; b?vyZXlrXKqy*bA=+@~3U(^n(T9oYR1D>8vy diff --git a/workspace/game/bin/xtext/validation/GameConfigurableIssueCodesProvider.class b/workspace/game/bin/xtext/validation/GameConfigurableIssueCodesProvider.class index f4d0c88de312a36e34a00e7dc818ff48330dfa44..0ddcb2b4afd163b40f325203a1ae3f890b2b8efb 100644 GIT binary patch literal 1198 zcmb7DQBM;=5dO9;w3Gv+lq!k}DAE?~Js9Id2?;61G#06}Hoi66>r$5-cg@~j1^<;V z5`FLo_@j)o2O6}*hL_!)$;>z3d^7vw=eO?wUZRvljN$pI7N^=Ca#!}amcD1d;wPfw zdq=V#D&BQPEeJw#^hD55{!sRWN+Q8f_Ep~&jw=U&utz}t55O>AYc}6iJC%doYNv5n z-K)K4$kdPdklQZz`gT(*>GjJDGlUdq?&&snLy^K1!(>#g#IU$qrQFI+tGe6SC!~6( zv2)l;!D3jti0O%e5)Rj*w@(eY4X!lhZ%I$;ZH9Qh&}K-O-qMI;-ogxK8RqKJ6K}$k zu23x_fMMo4+--9ujeY4%=npbrcu^l|e!POzSlW<~B>N{Su%54v${A|u+O-|W5d-b3 zvf(<_lzoruP*F~6e9qQ2s3gddP{MOWU^o7}UyHNyHkB|s+_R9w?G)}aBtLTH(IC=b zcxYh-t0bSJ1S!hU%#RLi)Kj<-hiN>*dJ>NrR>lcp;R!Z~4vz$)ZMaJ3pnEJF9ch-j z2=Eod+BIDMQJEq4_pr|fzX$$yZ1zp{rY>p>o8YG;6joesN0Xi(r+;5vNZa!!jl? zNmeqlQdmOziakvc^o1}>=Nv`YbThgqis!iXIZDaUX#fBV3(*+`Ad5w^5@r(!Y#a2F%&+(q6cHX$I70@W^3 SycKaUo=ti&JSATY&wc?B@kIUr literal 1431 zcmd5+-EI;=6h1?-3o9)xTDAVP>u;$haG}OTnkJ;BN(4&^ZS;x^%PCB=%xq={QhW{H z!WS^nMDKkl<5{S*L@cIPUhM3gnQy-HGvApXKfinffEVz@f(V1B#|Dp0w#PluWVzs(osBi6V z7wVP0!cOrWgH-7hS2bG5R*u0O@dt)WbHKeW#vsmMb`VE~!P0ht&Ti#vh3$Hom`e3Z zey;1~cjP0|wDBU<(!*Bv1Vpv{pI>R~Y-a zFEs|r>tWMzRmT_JAa}>tiZbp5FC9BxYojANzS71~x|KoK6Mle>%cWGtX`u6);Xi<$ ze_s<~c8qekWBNYY@nYU}(Kkv@!BsRKqDJZB8|+WPRu_5yc6xmQ(J zySO95;;v193o>DQ(S;SIOFbUsM9!FtyXk*m%8dk5OiHsaHke@7pG|_l1YY}P^cT9VV*`%P}jbT z;1h^(M09iR&vy@p``Y?wi?`3mX8;G-s>S4f37rJpTRD>hBkgoBWOkflIl=X%W#yfj zsWIiQthA9qJ4+S28>7lY5}k`eQK1z}&Wky@35B=_^GeaNEY(OFJ(j^SX;0eb&U)>G zvOx%>Sjn(})$IiR-Lt>=^T66pkM>6Oo&RR1|7<6}N%i~Aa35_X@eT2W^r|NwkiEpI ag>KZvhGbZaefD#Ob@Up((dZ`nvEmDRWks(5 diff --git a/workspace/game/xtend-gen/xtext/generator/.GameGenerator.xtendbin b/workspace/game/xtend-gen/xtext/generator/.GameGenerator.xtendbin index 4d0c9e6ffa3407ca96317b73a3c72051b75c8d6e..1119808f309945e76e57d080b4ed222e38e581a7 100644 GIT binary patch delta 64 zcmX>lcuJ5rz?+#xgn@&DgW*C&(?;IS%*;S~^I_&xCNM*r?LH%jF`1Xc989}&*n{a# G4o3i(*cI9U delta 64 zcmX>lcuJ5rz?+#xgn@&DgP}07ZX@qzW@aG0`7m=T6PTgRcApW%n9R#z4yN5X?7?&= Gha&(<{1W~E diff --git a/workspace/game/xtend-gen/xtext/generator/.gitignore b/workspace/game/xtend-gen/xtext/generator/.gitignore new file mode 100644 index 0000000..3674055 --- /dev/null +++ b/workspace/game/xtend-gen/xtext/generator/.gitignore @@ -0,0 +1,3 @@ +/.GameGenerator.java._trace +/.GameGenerator.xtendbin +/GameGenerator.java