TP7
This commit is contained in:
parent
ce79718fa6
commit
de42fac315
|
@ -1,113 +1,114 @@
|
||||||
|
|
||||||
!ENTRY org.eclipse.emf.cdo.explorer 4 0 2021-10-10 00:17:27.091
|
!ENTRY org.eclipse.ui 4 0 2021-10-12 17:30:30.073
|
||||||
!MESSAGE InterruptedException
|
!MESSAGE Unhandled event loop exception
|
||||||
!STACK 0
|
!STACK 0
|
||||||
java.lang.InterruptedException
|
org.eclipse.swt.SWTException: Graphic is disposed
|
||||||
at java.base/java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(AbstractQueuedSynchronizer.java:1343)
|
at org.eclipse.swt.SWT.error(SWT.java:4869)
|
||||||
at java.base/java.util.concurrent.Semaphore.acquire(Semaphore.java:318)
|
at org.eclipse.swt.SWT.error(SWT.java:4784)
|
||||||
at org.eclipse.net4j.util.lifecycle.Lifecycle.lock(Lifecycle.java:312)
|
at org.eclipse.swt.SWT.error(SWT.java:4755)
|
||||||
at org.eclipse.net4j.util.lifecycle.Lifecycle.internalDeactivate(Lifecycle.java:118)
|
at org.eclipse.swt.graphics.Image.getBounds(Image.java:1012)
|
||||||
at org.eclipse.net4j.util.lifecycle.ShareableLifecycle.internalDeactivate(ShareableLifecycle.java:52)
|
at org.eclipse.swt.widgets.Tree.rendererRender(Tree.java:3280)
|
||||||
at org.eclipse.net4j.util.lifecycle.Lifecycle.deactivate(Lifecycle.java:170)
|
at org.eclipse.swt.widgets.Tree.rendererRenderProc(Tree.java:3109)
|
||||||
at org.eclipse.net4j.util.lifecycle.LifecycleUtil.deactivate(LifecycleUtil.java:235)
|
at org.eclipse.swt.widgets.Display.rendererRenderProc(Display.java:1636)
|
||||||
at org.eclipse.net4j.util.lifecycle.LifecycleUtil.deactivate(LifecycleUtil.java:225)
|
at org.eclipse.swt.internal.gtk.GTK.gtk_main_do_event(Native Method)
|
||||||
at org.eclipse.emf.cdo.internal.explorer.bundle.OM.disposeManagers(OM.java:83)
|
at org.eclipse.swt.widgets.Display.eventProc(Display.java:1517)
|
||||||
at org.eclipse.emf.cdo.internal.explorer.bundle.OM$Activator.doStop(OM.java:136)
|
at org.eclipse.swt.internal.gtk.OS.g_main_context_iteration(Native Method)
|
||||||
at org.eclipse.net4j.util.om.OSGiActivator.stop(OSGiActivator.java:92)
|
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:4505)
|
||||||
at org.eclipse.osgi.internal.framework.BundleContextImpl$3.run(BundleContextImpl.java:871)
|
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1157)
|
||||||
at org.eclipse.osgi.internal.framework.BundleContextImpl$3.run(BundleContextImpl.java:1)
|
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338)
|
||||||
at java.base/java.security.AccessController.doPrivileged(Native Method)
|
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1046)
|
||||||
at org.eclipse.osgi.internal.framework.BundleContextImpl.stop(BundleContextImpl.java:863)
|
at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155)
|
||||||
at org.eclipse.osgi.internal.framework.EquinoxBundle.stopWorker0(EquinoxBundle.java:1025)
|
at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:644)
|
||||||
at org.eclipse.osgi.internal.framework.EquinoxBundle$EquinoxModule.stopWorker(EquinoxBundle.java:370)
|
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338)
|
||||||
at org.eclipse.osgi.container.Module.doStop(Module.java:660)
|
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:551)
|
||||||
at org.eclipse.osgi.container.Module.stop(Module.java:521)
|
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:153)
|
||||||
at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.decStartLevel(ModuleContainer.java:1886)
|
at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150)
|
||||||
at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.doContainerStartLevel(ModuleContainer.java:1761)
|
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203)
|
||||||
at org.eclipse.osgi.container.SystemModule.stopWorker(SystemModule.java:275)
|
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134)
|
||||||
at org.eclipse.osgi.internal.framework.EquinoxBundle$SystemBundle$EquinoxSystemModule.stopWorker(EquinoxBundle.java:202)
|
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
|
||||||
at org.eclipse.osgi.container.Module.doStop(Module.java:660)
|
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:401)
|
||||||
at org.eclipse.osgi.container.Module.stop(Module.java:521)
|
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255)
|
||||||
at org.eclipse.osgi.container.SystemModule.stop(SystemModule.java:207)
|
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
|
||||||
at org.eclipse.osgi.internal.framework.EquinoxBundle$SystemBundle$EquinoxSystemModule$1.run(EquinoxBundle.java:220)
|
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
|
||||||
at java.base/java.lang.Thread.run(Thread.java:829)
|
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
|
||||||
!SESSION 2021-10-10 00:17:29.406 -----------------------------------------------
|
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
|
||||||
eclipse.buildId=4.17.0.I20200902-1800
|
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:657)
|
||||||
java.version=11.0.11
|
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:594)
|
||||||
java.vendor=Ubuntu
|
at org.eclipse.equinox.launcher.Main.run(Main.java:1465)
|
||||||
BootLoader constants: OS=linux, ARCH=x86_64, WS=gtk, NL=fr_FR
|
at org.eclipse.equinox.launcher.Main.main(Main.java:1438)
|
||||||
Framework arguments: -product org.eclipse.epp.package.modeling.product
|
|
||||||
Command-line arguments: -os linux -ws gtk -arch x86_64 -product org.eclipse.epp.package.modeling.product
|
|
||||||
|
|
||||||
!ENTRY org.eclipse.emf.cdo.explorer 4 0 2021-10-10 00:27:51.311
|
!ENTRY org.eclipse.ui 4 0 2021-10-12 17:30:36.280
|
||||||
!MESSAGE InterruptedException
|
!MESSAGE Unhandled event loop exception
|
||||||
!STACK 0
|
!STACK 0
|
||||||
java.lang.InterruptedException
|
org.eclipse.swt.SWTException: Graphic is disposed
|
||||||
at java.base/java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(AbstractQueuedSynchronizer.java:1343)
|
at org.eclipse.swt.SWT.error(SWT.java:4869)
|
||||||
at java.base/java.util.concurrent.Semaphore.acquire(Semaphore.java:318)
|
at org.eclipse.swt.SWT.error(SWT.java:4784)
|
||||||
at org.eclipse.net4j.util.lifecycle.Lifecycle.lock(Lifecycle.java:312)
|
at org.eclipse.swt.SWT.error(SWT.java:4755)
|
||||||
at org.eclipse.net4j.util.lifecycle.Lifecycle.internalDeactivate(Lifecycle.java:118)
|
at org.eclipse.swt.graphics.Image.getBounds(Image.java:1012)
|
||||||
at org.eclipse.net4j.util.lifecycle.ShareableLifecycle.internalDeactivate(ShareableLifecycle.java:52)
|
at org.eclipse.swt.widgets.Tree.rendererRender(Tree.java:3280)
|
||||||
at org.eclipse.net4j.util.lifecycle.Lifecycle.deactivate(Lifecycle.java:170)
|
at org.eclipse.swt.widgets.Tree.rendererRenderProc(Tree.java:3109)
|
||||||
at org.eclipse.net4j.util.lifecycle.LifecycleUtil.deactivate(LifecycleUtil.java:235)
|
at org.eclipse.swt.widgets.Display.rendererRenderProc(Display.java:1636)
|
||||||
at org.eclipse.net4j.util.lifecycle.LifecycleUtil.deactivate(LifecycleUtil.java:225)
|
at org.eclipse.swt.internal.gtk.GTK.gtk_main_do_event(Native Method)
|
||||||
at org.eclipse.emf.cdo.internal.explorer.bundle.OM.disposeManagers(OM.java:83)
|
at org.eclipse.swt.widgets.Display.eventProc(Display.java:1517)
|
||||||
at org.eclipse.emf.cdo.internal.explorer.bundle.OM$Activator.doStop(OM.java:136)
|
at org.eclipse.swt.internal.gtk.OS.g_main_context_iteration(Native Method)
|
||||||
at org.eclipse.net4j.util.om.OSGiActivator.stop(OSGiActivator.java:92)
|
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:4505)
|
||||||
at org.eclipse.osgi.internal.framework.BundleContextImpl$3.run(BundleContextImpl.java:871)
|
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1157)
|
||||||
at org.eclipse.osgi.internal.framework.BundleContextImpl$3.run(BundleContextImpl.java:1)
|
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338)
|
||||||
at java.base/java.security.AccessController.doPrivileged(Native Method)
|
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1046)
|
||||||
at org.eclipse.osgi.internal.framework.BundleContextImpl.stop(BundleContextImpl.java:863)
|
at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155)
|
||||||
at org.eclipse.osgi.internal.framework.EquinoxBundle.stopWorker0(EquinoxBundle.java:1025)
|
at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:644)
|
||||||
at org.eclipse.osgi.internal.framework.EquinoxBundle$EquinoxModule.stopWorker(EquinoxBundle.java:370)
|
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338)
|
||||||
at org.eclipse.osgi.container.Module.doStop(Module.java:660)
|
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:551)
|
||||||
at org.eclipse.osgi.container.Module.stop(Module.java:521)
|
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:153)
|
||||||
at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.decStartLevel(ModuleContainer.java:1886)
|
at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150)
|
||||||
at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.doContainerStartLevel(ModuleContainer.java:1761)
|
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203)
|
||||||
at org.eclipse.osgi.container.SystemModule.stopWorker(SystemModule.java:275)
|
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134)
|
||||||
at org.eclipse.osgi.internal.framework.EquinoxBundle$SystemBundle$EquinoxSystemModule.stopWorker(EquinoxBundle.java:202)
|
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
|
||||||
at org.eclipse.osgi.container.Module.doStop(Module.java:660)
|
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:401)
|
||||||
at org.eclipse.osgi.container.Module.stop(Module.java:521)
|
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255)
|
||||||
at org.eclipse.osgi.container.SystemModule.stop(SystemModule.java:207)
|
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
|
||||||
at org.eclipse.osgi.internal.framework.EquinoxBundle$SystemBundle$EquinoxSystemModule$1.run(EquinoxBundle.java:220)
|
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
|
||||||
at java.base/java.lang.Thread.run(Thread.java:829)
|
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
|
||||||
!SESSION 2021-10-10 12:58:50.569 -----------------------------------------------
|
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
|
||||||
eclipse.buildId=4.17.0.I20200902-1800
|
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:657)
|
||||||
java.version=11.0.11
|
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:594)
|
||||||
java.vendor=Ubuntu
|
at org.eclipse.equinox.launcher.Main.run(Main.java:1465)
|
||||||
BootLoader constants: OS=linux, ARCH=x86_64, WS=gtk, NL=fr_FR
|
at org.eclipse.equinox.launcher.Main.main(Main.java:1438)
|
||||||
Framework arguments: -product org.eclipse.epp.package.modeling.product
|
|
||||||
Command-line arguments: -os linux -ws gtk -arch x86_64 -product org.eclipse.epp.package.modeling.product
|
|
||||||
|
|
||||||
!ENTRY org.eclipse.emf.cdo.explorer 4 0 2021-10-10 14:40:22.852
|
!ENTRY org.eclipse.ui 4 0 2021-10-12 17:31:16.305
|
||||||
!MESSAGE InterruptedException
|
!MESSAGE Unhandled event loop exception
|
||||||
!STACK 0
|
!STACK 0
|
||||||
java.lang.InterruptedException
|
org.eclipse.swt.SWTException: Graphic is disposed
|
||||||
at java.base/java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(AbstractQueuedSynchronizer.java:1343)
|
at org.eclipse.swt.SWT.error(SWT.java:4869)
|
||||||
at java.base/java.util.concurrent.Semaphore.acquire(Semaphore.java:318)
|
at org.eclipse.swt.SWT.error(SWT.java:4784)
|
||||||
at org.eclipse.net4j.util.lifecycle.Lifecycle.lock(Lifecycle.java:312)
|
at org.eclipse.swt.SWT.error(SWT.java:4755)
|
||||||
at org.eclipse.net4j.util.lifecycle.Lifecycle.internalDeactivate(Lifecycle.java:118)
|
at org.eclipse.swt.graphics.Image.getBounds(Image.java:1012)
|
||||||
at org.eclipse.net4j.util.lifecycle.ShareableLifecycle.internalDeactivate(ShareableLifecycle.java:52)
|
at org.eclipse.swt.widgets.Tree.rendererRender(Tree.java:3280)
|
||||||
at org.eclipse.net4j.util.lifecycle.Lifecycle.deactivate(Lifecycle.java:170)
|
at org.eclipse.swt.widgets.Tree.rendererRenderProc(Tree.java:3109)
|
||||||
at org.eclipse.net4j.util.lifecycle.LifecycleUtil.deactivate(LifecycleUtil.java:235)
|
at org.eclipse.swt.widgets.Display.rendererRenderProc(Display.java:1636)
|
||||||
at org.eclipse.net4j.util.lifecycle.LifecycleUtil.deactivate(LifecycleUtil.java:225)
|
at org.eclipse.swt.internal.gtk.GTK.gtk_main_do_event(Native Method)
|
||||||
at org.eclipse.emf.cdo.internal.explorer.bundle.OM.disposeManagers(OM.java:83)
|
at org.eclipse.swt.widgets.Display.eventProc(Display.java:1517)
|
||||||
at org.eclipse.emf.cdo.internal.explorer.bundle.OM$Activator.doStop(OM.java:136)
|
at org.eclipse.swt.internal.gtk.OS.g_main_context_iteration(Native Method)
|
||||||
at org.eclipse.net4j.util.om.OSGiActivator.stop(OSGiActivator.java:92)
|
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:4505)
|
||||||
at org.eclipse.osgi.internal.framework.BundleContextImpl$3.run(BundleContextImpl.java:871)
|
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1157)
|
||||||
at org.eclipse.osgi.internal.framework.BundleContextImpl$3.run(BundleContextImpl.java:1)
|
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338)
|
||||||
at java.base/java.security.AccessController.doPrivileged(Native Method)
|
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1046)
|
||||||
at org.eclipse.osgi.internal.framework.BundleContextImpl.stop(BundleContextImpl.java:863)
|
at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155)
|
||||||
at org.eclipse.osgi.internal.framework.EquinoxBundle.stopWorker0(EquinoxBundle.java:1025)
|
at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:644)
|
||||||
at org.eclipse.osgi.internal.framework.EquinoxBundle$EquinoxModule.stopWorker(EquinoxBundle.java:370)
|
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338)
|
||||||
at org.eclipse.osgi.container.Module.doStop(Module.java:660)
|
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:551)
|
||||||
at org.eclipse.osgi.container.Module.stop(Module.java:521)
|
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:153)
|
||||||
at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.decStartLevel(ModuleContainer.java:1886)
|
at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150)
|
||||||
at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.doContainerStartLevel(ModuleContainer.java:1761)
|
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203)
|
||||||
at org.eclipse.osgi.container.SystemModule.stopWorker(SystemModule.java:275)
|
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134)
|
||||||
at org.eclipse.osgi.internal.framework.EquinoxBundle$SystemBundle$EquinoxSystemModule.stopWorker(EquinoxBundle.java:202)
|
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
|
||||||
at org.eclipse.osgi.container.Module.doStop(Module.java:660)
|
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:401)
|
||||||
at org.eclipse.osgi.container.Module.stop(Module.java:521)
|
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255)
|
||||||
at org.eclipse.osgi.container.SystemModule.stop(SystemModule.java:207)
|
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
|
||||||
at org.eclipse.osgi.internal.framework.EquinoxBundle$SystemBundle$EquinoxSystemModule$1.run(EquinoxBundle.java:220)
|
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
|
||||||
at java.base/java.lang.Thread.run(Thread.java:829)
|
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
|
||||||
|
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
|
||||||
|
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:657)
|
||||||
|
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:594)
|
||||||
|
at org.eclipse.equinox.launcher.Main.run(Main.java:1465)
|
||||||
|
at org.eclipse.equinox.launcher.Main.main(Main.java:1438)
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
source.. = src/,\
|
||||||
|
src-gen/,\
|
||||||
|
xtend-gen/
|
||||||
|
bin.includes = META-INF/,\
|
||||||
|
.,\
|
||||||
|
plugin.xml
|
|
@ -0,0 +1,205 @@
|
||||||
|
package simplepdl.manip;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
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.xmi.impl.XMIResourceFactoryImpl;
|
||||||
|
|
||||||
|
import petrinet.PetrinetPackage;
|
||||||
|
import petrinet.Place;
|
||||||
|
import petrinet.Transition;
|
||||||
|
import petrinet.Arc;
|
||||||
|
import petrinet.Network;
|
||||||
|
import petrinet.Node;
|
||||||
|
import petrinet.PetrinetFactory;
|
||||||
|
import simplepdl.Process;
|
||||||
|
import simplepdl.WorkDefinition;
|
||||||
|
import simplepdl.WorkSequence;
|
||||||
|
import simplepdl.WorkSequenceType;
|
||||||
|
import simplepdl.SimplepdlPackage;
|
||||||
|
|
||||||
|
public class simplepdl2petrinet {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
|
||||||
|
// Charger les package SimplePDL et Petrinet afin de les enregistrer dans le registre d'Eclipse.
|
||||||
|
SimplepdlPackage packageInstance = SimplepdlPackage.eINSTANCE;
|
||||||
|
PetrinetPackage packageInstance2 = PetrinetPackage.eINSTANCE;
|
||||||
|
|
||||||
|
// Enregistrer l'extension ".xmi" comme devant être ouverte à
|
||||||
|
// l'aide d'un objet "XMIResourceFactoryImpl"
|
||||||
|
Resource.Factory.Registry reg = Resource.Factory.Registry.INSTANCE;
|
||||||
|
Map<String, Object> m = reg.getExtensionToFactoryMap();
|
||||||
|
m.put("xmi", new XMIResourceFactoryImpl());
|
||||||
|
|
||||||
|
// Créer un objet resourceSetImpl qui contiendra une ressource EMF (le modèle)
|
||||||
|
ResourceSet resSet = new ResourceSetImpl();
|
||||||
|
|
||||||
|
// Charger la ressource (notre modèle)
|
||||||
|
URI modelURI = URI.createURI("test.xmi");
|
||||||
|
Resource resource = resSet.getResource(modelURI, true);
|
||||||
|
|
||||||
|
// Récupérer le premier élément du modèle (élément racine)
|
||||||
|
Process process = (Process) resource.getContents().get(0);
|
||||||
|
|
||||||
|
// La fabrique pour fabriquer les éléments de PetriNET
|
||||||
|
PetrinetFactory myFactory = PetrinetFactory.eINSTANCE;
|
||||||
|
|
||||||
|
// Créer un élément Network
|
||||||
|
Network network = myFactory.createNetwork();
|
||||||
|
network.setName(process.getName());
|
||||||
|
|
||||||
|
// Conversion des WorkDefinition en Node et Transition
|
||||||
|
for (Object o : process.getProcessElements()) {
|
||||||
|
if (o instanceof WorkDefinition) {
|
||||||
|
WorkDefinition wd = (WorkDefinition) o;
|
||||||
|
String name = wd.getName();
|
||||||
|
|
||||||
|
Place idle = myFactory.createPlace();
|
||||||
|
idle.setName(name + "_idle");
|
||||||
|
idle.setTokens(1);
|
||||||
|
Place started = myFactory.createPlace();
|
||||||
|
started.setName(name + "_started");
|
||||||
|
started.setTokens(0);
|
||||||
|
Place running = myFactory.createPlace();
|
||||||
|
running.setName(name + "_running");
|
||||||
|
running.setTokens(0);
|
||||||
|
Place finished = myFactory.createPlace();
|
||||||
|
finished.setName(name + "_finished");
|
||||||
|
finished.setTokens(0);
|
||||||
|
|
||||||
|
Arc pause2start = myFactory.createArc();
|
||||||
|
pause2start.setTarget(idle);
|
||||||
|
pause2start.setOutgoing(false);
|
||||||
|
pause2start.setWeight(1);
|
||||||
|
Arc start2running = myFactory.createArc();
|
||||||
|
start2running.setTarget(running);
|
||||||
|
start2running.setOutgoing(true);
|
||||||
|
start2running.setWeight(1);
|
||||||
|
Arc start2started = myFactory.createArc();
|
||||||
|
start2started.setTarget(started);
|
||||||
|
start2started.setOutgoing(true);
|
||||||
|
start2started.setWeight(1);
|
||||||
|
Transition start = myFactory.createTransition();
|
||||||
|
start.setName(name + "_start");
|
||||||
|
start.getArcs().add(pause2start);
|
||||||
|
start.getArcs().add(start2running);
|
||||||
|
start.getArcs().add(start2started);
|
||||||
|
|
||||||
|
Arc running2finish = myFactory.createArc();
|
||||||
|
running2finish.setTarget(running);
|
||||||
|
running2finish.setOutgoing(false);
|
||||||
|
running2finish.setWeight(1);
|
||||||
|
Arc finish2finished = myFactory.createArc();
|
||||||
|
finish2finished.setTarget(finished);
|
||||||
|
finish2finished.setOutgoing(true);
|
||||||
|
finish2finished.setWeight(1);
|
||||||
|
Transition finish = myFactory.createTransition();
|
||||||
|
finish.setName(name + "_finish");
|
||||||
|
finish.getArcs().add(running2finish);
|
||||||
|
finish.getArcs().add(finish2finished);
|
||||||
|
|
||||||
|
network.getNodes().add(idle);
|
||||||
|
network.getNodes().add(start);
|
||||||
|
network.getNodes().add(started);
|
||||||
|
network.getNodes().add(running);
|
||||||
|
network.getNodes().add(finish);
|
||||||
|
network.getNodes().add(finished);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Conversion des WorkSequence en Node et Transition
|
||||||
|
for (Object o : process.getProcessElements()) {
|
||||||
|
if (o instanceof WorkSequence) {
|
||||||
|
WorkSequence ws = (WorkSequence) o;
|
||||||
|
WorkSequenceType type = ws.getLinkType();
|
||||||
|
WorkDefinition predecessor = ws.getPredecessor();
|
||||||
|
WorkDefinition successor = ws.getSuccessor();
|
||||||
|
|
||||||
|
// creation des suffixs permettant la recherche des noeuds
|
||||||
|
String predecessor_suffix = new String();
|
||||||
|
String successor_suffix = new String();
|
||||||
|
switch (type) {
|
||||||
|
case START_TO_START:
|
||||||
|
predecessor_suffix = "_started";
|
||||||
|
successor_suffix = "_start";
|
||||||
|
break;
|
||||||
|
case START_TO_FINISH:
|
||||||
|
predecessor_suffix = "_started";
|
||||||
|
successor_suffix = "_finished";
|
||||||
|
break;
|
||||||
|
case FINISH_TO_START:
|
||||||
|
predecessor_suffix = "_finished";
|
||||||
|
successor_suffix = "_start";
|
||||||
|
break;
|
||||||
|
case FINISH_TO_FINISH:
|
||||||
|
predecessor_suffix = "_finished";
|
||||||
|
successor_suffix = "_finish";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
System.out.print("the fuck ?");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// creation du read-arc
|
||||||
|
Arc arc1 = myFactory.createArc();
|
||||||
|
arc1.setOutgoing(false);
|
||||||
|
arc1.setWeight(1);
|
||||||
|
Arc arc2 = myFactory.createArc();
|
||||||
|
arc2.setOutgoing(true);
|
||||||
|
arc2.setWeight(1);
|
||||||
|
|
||||||
|
for (Node node : network.getNodes()) {
|
||||||
|
if (node instanceof Place) {
|
||||||
|
Place place = (Place) node;
|
||||||
|
if (place.getName().equals(predecessor.getName() + predecessor_suffix)) {
|
||||||
|
arc1.setTarget(place);
|
||||||
|
arc2.setTarget(place);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (node instanceof Transition) {
|
||||||
|
Transition transition = (Transition) node;
|
||||||
|
if (transition.getName().equals(successor.getName() + successor_suffix)) {
|
||||||
|
transition.getArcs().add(arc1);
|
||||||
|
transition.getArcs().add(arc2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Conversion des WorkSequence en Node et Transition
|
||||||
|
for (Object o : process.getProcessElements()) {
|
||||||
|
if (o instanceof Resource) {
|
||||||
|
|
||||||
|
Resource r = (Resource) o;
|
||||||
|
EObject qty = r.getEObject("quantity");
|
||||||
|
|
||||||
|
System.out.println(qty);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Créer le nouveau xmi (modèle convertit)
|
||||||
|
URI convURI = URI.createURI("models/Developpement_petrinet.xmi");
|
||||||
|
Resource conv = resSet.createResource(convURI);
|
||||||
|
|
||||||
|
// Ajouter le Network dans le nouveau modèle
|
||||||
|
conv.getContents().add(network);
|
||||||
|
|
||||||
|
// Sauver la ressource
|
||||||
|
try {
|
||||||
|
conv.save(Collections.EMPTY_MAP);
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
source.. = src/,\
|
||||||
|
src-gen/,\
|
||||||
|
xtend-gen/
|
||||||
|
bin.includes = META-INF/,\
|
||||||
|
.,\
|
||||||
|
plugin.xml
|
|
@ -0,0 +1,45 @@
|
||||||
|
// automatically generated by Xtext
|
||||||
|
grammar fr.n7.simplepdl.txt.PDL with org.eclipse.xtext.common.Terminals
|
||||||
|
|
||||||
|
import "http://simplepdl"
|
||||||
|
import "http://www.eclipse.org/emf/2002/Ecore" as ecore
|
||||||
|
|
||||||
|
Process :
|
||||||
|
'process' name=ID '{'
|
||||||
|
processElements+=ProcessElement*
|
||||||
|
'}' ;
|
||||||
|
|
||||||
|
ProcessElement :
|
||||||
|
WorkDefinition | WorkSequence | Guidance | Resource
|
||||||
|
;
|
||||||
|
|
||||||
|
WorkDefinition :
|
||||||
|
'wd' name=ID
|
||||||
|
requests+=Request*
|
||||||
|
;
|
||||||
|
|
||||||
|
WorkSequence :
|
||||||
|
'ws' linkType=WorkSequenceType
|
||||||
|
'from' predecessor=[WorkDefinition]
|
||||||
|
'to' successor=[WorkDefinition]
|
||||||
|
;
|
||||||
|
|
||||||
|
Guidance :
|
||||||
|
'note' text=STRING
|
||||||
|
;
|
||||||
|
|
||||||
|
Resource :
|
||||||
|
'res' name=ID quantity=INT
|
||||||
|
;
|
||||||
|
|
||||||
|
Request :
|
||||||
|
'req' target=[Resource] quantity=INT
|
||||||
|
;
|
||||||
|
|
||||||
|
|
||||||
|
enum WorkSequenceType :
|
||||||
|
startToStart = 's2s'
|
||||||
|
| finishToStart = 'f2s'
|
||||||
|
| startToFinish = 's2f'
|
||||||
|
| finishToFinish = 'f2f'
|
||||||
|
;
|
|
@ -0,0 +1,16 @@
|
||||||
|
source.. = src/,\
|
||||||
|
src-gen/,\
|
||||||
|
xtend-gen/
|
||||||
|
bin.includes = META-INF/,\
|
||||||
|
.,\
|
||||||
|
plugin.xml
|
||||||
|
additional.bundles = org.eclipse.xtext.xbase,\
|
||||||
|
org.eclipse.xtext.common.types,\
|
||||||
|
org.eclipse.xtext.xtext.generator,\
|
||||||
|
org.eclipse.emf.codegen.ecore,\
|
||||||
|
org.eclipse.emf.mwe.utils,\
|
||||||
|
org.eclipse.emf.mwe2.launch,\
|
||||||
|
org.eclipse.emf.mwe2.lib,\
|
||||||
|
org.objectweb.asm,\
|
||||||
|
org.apache.commons.logging,\
|
||||||
|
org.apache.log4j
|
|
@ -0,0 +1,51 @@
|
||||||
|
// automatically generated by Xtext
|
||||||
|
grammar fr.n7.simplepdl.txt.PDL with org.eclipse.xtext.common.Terminals
|
||||||
|
|
||||||
|
import "http://simplepdl"
|
||||||
|
import "http://www.eclipse.org/emf/2002/Ecore" as ecore
|
||||||
|
|
||||||
|
Process returns Process :
|
||||||
|
{Process}
|
||||||
|
'process' name=ID '{'
|
||||||
|
processElements+=ProcessElement*
|
||||||
|
'}' ;
|
||||||
|
|
||||||
|
ProcessElement returns ProcessElement:
|
||||||
|
WorkDefinition | WorkSequence | Guidance | Resource
|
||||||
|
;
|
||||||
|
|
||||||
|
WorkDefinition returns WorkDefinition :
|
||||||
|
{WorkDefinition}
|
||||||
|
'wd' name=ID
|
||||||
|
requests+=Request*
|
||||||
|
;
|
||||||
|
|
||||||
|
WorkSequence returns WorkSequence :
|
||||||
|
{WorkSequence}
|
||||||
|
'ws' linkType=WorkSequenceType
|
||||||
|
'from' predecessor=[WorkDefinition]
|
||||||
|
'to' successor=[WorkDefinition]
|
||||||
|
;
|
||||||
|
|
||||||
|
Guidance returns Guidance :
|
||||||
|
{Guidance}
|
||||||
|
'note' text=STRING
|
||||||
|
;
|
||||||
|
|
||||||
|
Resource returns Resource :
|
||||||
|
{Resource}
|
||||||
|
'res' name=ID quantity=INT
|
||||||
|
;
|
||||||
|
|
||||||
|
Request returns Request :
|
||||||
|
{Request}
|
||||||
|
'req' target=[Resource] quantity=INT
|
||||||
|
;
|
||||||
|
|
||||||
|
|
||||||
|
enum WorkSequenceType :
|
||||||
|
startToStart = 's2s'
|
||||||
|
| finishToStart = 'f2s'
|
||||||
|
| startToFinish = 's2f'
|
||||||
|
| finishToFinish = 'f2f'
|
||||||
|
;
|
|
@ -1,88 +0,0 @@
|
||||||
package simplepdl.manip;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
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.resource.impl.ResourceSetImpl;
|
|
||||||
import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
|
|
||||||
|
|
||||||
import petrinet.PetrinetPackage;
|
|
||||||
import petrinet.PetrinetFactory;
|
|
||||||
import simplepdl.Process;
|
|
||||||
import simplepdl.WorkDefinition;
|
|
||||||
import simplepdl.WorkSequence;
|
|
||||||
import simplepdl.WorkSequenceType;
|
|
||||||
import simplepdl.SimplepdlFactory;
|
|
||||||
import simplepdl.SimplepdlPackage;
|
|
||||||
|
|
||||||
public class simplepdl2petrinet {
|
|
||||||
|
|
||||||
public static void main(String[] args) {
|
|
||||||
|
|
||||||
// Charger le package SimplePDL afin de l'enregistrer dans le registre d'Eclipse.
|
|
||||||
SimplepdlPackage packageInstance = SimplepdlPackage.eINSTANCE;
|
|
||||||
PetrinetPackage packageInstance2 = PetrinetPackage.eINSTANCE;
|
|
||||||
|
|
||||||
// Enregistrer l'extension ".xmi" comme devant être ouverte Ã
|
|
||||||
// l'aide d'un objet "XMIResourceFactoryImpl"
|
|
||||||
Resource.Factory.Registry reg = Resource.Factory.Registry.INSTANCE;
|
|
||||||
Map<String, Object> m = reg.getExtensionToFactoryMap();
|
|
||||||
m.put("xmi", new XMIResourceFactoryImpl());
|
|
||||||
|
|
||||||
// Créer un objet resourceSetImpl qui contiendra une ressource EMF (le modèle)
|
|
||||||
ResourceSet resSet = new ResourceSetImpl();
|
|
||||||
|
|
||||||
// Définir la ressource (le modèle)
|
|
||||||
URI modelURI = URI.createURI("models/SimplePDLCreator_Created_Process.xmi");
|
|
||||||
Resource resource = resSet.createResource(modelURI);
|
|
||||||
|
|
||||||
// La fabrique pour fabriquer les éléments de SimplePDL
|
|
||||||
SimplepdlFactory myFactory = SimplepdlFactory.eINSTANCE;
|
|
||||||
|
|
||||||
// Créer un élément Process
|
|
||||||
Process process = myFactory.createProcess();
|
|
||||||
process.setName("Mon premier processus");
|
|
||||||
|
|
||||||
// Ajouter le Process dans le modèle
|
|
||||||
resource.getContents().add(process);
|
|
||||||
|
|
||||||
// Ajouter deux WorkDefinitions
|
|
||||||
WorkDefinition wd1 = myFactory.createWorkDefinition();
|
|
||||||
wd1.setName("Ma première WorkDefinition, quelle émotion");
|
|
||||||
|
|
||||||
WorkDefinition wd2 = myFactory.createWorkDefinition();
|
|
||||||
wd2.setName("Ma deuxième WorkDefinition, toujours autant d'émotion");
|
|
||||||
|
|
||||||
process.getProcessElements().add(wd1);
|
|
||||||
process.getProcessElements().add(wd2);
|
|
||||||
|
|
||||||
// Ajouter une WorkSequence entre les deux WorkDefinitions
|
|
||||||
WorkSequence seq = myFactory.createWorkSequence();
|
|
||||||
seq.setPredecessor(wd1);
|
|
||||||
seq.setSuccessor(wd2);
|
|
||||||
seq.setLinkType(WorkSequenceType.FINISH_TO_FINISH);
|
|
||||||
|
|
||||||
process.getProcessElements().add(seq);
|
|
||||||
|
|
||||||
// Ajouter une deuxième WorkSequence entre les deux WorkDefinitions
|
|
||||||
WorkSequence seq2 = myFactory.createWorkSequence();
|
|
||||||
seq2.setPredecessor(wd1);
|
|
||||||
seq2.setSuccessor(wd2);
|
|
||||||
seq2.setLinkType(WorkSequenceType.START_TO_START);
|
|
||||||
|
|
||||||
process.getProcessElements().add(seq2);
|
|
||||||
|
|
||||||
|
|
||||||
// Sauver la ressource
|
|
||||||
try {
|
|
||||||
resource.save(Collections.EMPTY_MAP);
|
|
||||||
} catch (IOException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -0,0 +1,26 @@
|
||||||
|
grammar fr.n7.PDL1 with org.eclipse.xtext.common.Terminals
|
||||||
|
generate pDL1 "http://www.n7.fr/PDL1"
|
||||||
|
|
||||||
|
Process :
|
||||||
|
'process' name=ID
|
||||||
|
|
||||||
|
ProcessElement :
|
||||||
|
WorkDefinition | WorkSequence | Guidance;
|
||||||
|
|
||||||
|
WorkDefinition :
|
||||||
|
'wd' name=ID;
|
||||||
|
|
||||||
|
WorkSequence :
|
||||||
|
'ws' linkType=WorkSequenceType
|
||||||
|
'from' predecessor=[WorkDefinition]
|
||||||
|
'to' successor=[WorkDefinition] ;
|
||||||
|
|
||||||
|
Guidance :
|
||||||
|
'note' texte=STRING ;
|
||||||
|
|
||||||
|
enum WorkSequenceType :
|
||||||
|
start2start = 's2s'
|
||||||
|
| finish2start = 'f2s'
|
||||||
|
| start2finish = 's2f'
|
||||||
|
| finish2finish = 'f2f'
|
||||||
|
;
|
|
@ -1,87 +0,0 @@
|
||||||
package simplepdl.manip;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
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.resource.impl.ResourceSetImpl;
|
|
||||||
import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
|
|
||||||
|
|
||||||
import petrinet.PetrinetPackage;
|
|
||||||
import simplepdl.Process;
|
|
||||||
import simplepdl.WorkDefinition;
|
|
||||||
import simplepdl.WorkSequence;
|
|
||||||
import simplepdl.WorkSequenceType;
|
|
||||||
import simplepdl.SimplepdlFactory;
|
|
||||||
import simplepdl.SimplepdlPackage;
|
|
||||||
|
|
||||||
public class simplepdl2petrinet {
|
|
||||||
|
|
||||||
public static void main(String[] args) {
|
|
||||||
|
|
||||||
// Charger le package SimplePDL afin de l'enregistrer dans le registre d'Eclipse.
|
|
||||||
SimplepdlPackage packageInstance = SimplepdlPackage.eINSTANCE;
|
|
||||||
PetrinetPackage packageInstance2 = PetrinetPackage.eINSTANCE;
|
|
||||||
|
|
||||||
// Enregistrer l'extension ".xmi" comme devant être ouverte Ã
|
|
||||||
// l'aide d'un objet "XMIResourceFactoryImpl"
|
|
||||||
Resource.Factory.Registry reg = Resource.Factory.Registry.INSTANCE;
|
|
||||||
Map<String, Object> m = reg.getExtensionToFactoryMap();
|
|
||||||
m.put("xmi", new XMIResourceFactoryImpl());
|
|
||||||
|
|
||||||
// Créer un objet resourceSetImpl qui contiendra une ressource EMF (le modèle)
|
|
||||||
ResourceSet resSet = new ResourceSetImpl();
|
|
||||||
|
|
||||||
// Définir la ressource (le modèle)
|
|
||||||
URI modelURI = URI.createURI("models/SimplePDLCreator_Created_Process.xmi");
|
|
||||||
Resource resource = resSet.createResource(modelURI);
|
|
||||||
|
|
||||||
// La fabrique pour fabriquer les éléments de SimplePDL
|
|
||||||
SimplepdlFactory myFactory = SimplepdlFactory.eINSTANCE;
|
|
||||||
|
|
||||||
// Créer un élément Process
|
|
||||||
Process process = myFactory.createProcess();
|
|
||||||
process.setName("Mon premier processus");
|
|
||||||
|
|
||||||
// Ajouter le Process dans le modèle
|
|
||||||
resource.getContents().add(process);
|
|
||||||
|
|
||||||
// Ajouter deux WorkDefinitions
|
|
||||||
WorkDefinition wd1 = myFactory.createWorkDefinition();
|
|
||||||
wd1.setName("Ma première WorkDefinition, quelle émotion");
|
|
||||||
|
|
||||||
WorkDefinition wd2 = myFactory.createWorkDefinition();
|
|
||||||
wd2.setName("Ma deuxième WorkDefinition, toujours autant d'émotion");
|
|
||||||
|
|
||||||
process.getProcessElements().add(wd1);
|
|
||||||
process.getProcessElements().add(wd2);
|
|
||||||
|
|
||||||
// Ajouter une WorkSequence entre les deux WorkDefinitions
|
|
||||||
WorkSequence seq = myFactory.createWorkSequence();
|
|
||||||
seq.setPredecessor(wd1);
|
|
||||||
seq.setSuccessor(wd2);
|
|
||||||
seq.setLinkType(WorkSequenceType.FINISH_TO_FINISH);
|
|
||||||
|
|
||||||
process.getProcessElements().add(seq);
|
|
||||||
|
|
||||||
// Ajouter une deuxième WorkSequence entre les deux WorkDefinitions
|
|
||||||
WorkSequence seq2 = myFactory.createWorkSequence();
|
|
||||||
seq2.setPredecessor(wd1);
|
|
||||||
seq2.setSuccessor(wd2);
|
|
||||||
seq2.setLinkType(WorkSequenceType.START_TO_START);
|
|
||||||
|
|
||||||
process.getProcessElements().add(seq2);
|
|
||||||
|
|
||||||
|
|
||||||
// Sauver la ressource
|
|
||||||
try {
|
|
||||||
resource.save(Collections.EMPTY_MAP);
|
|
||||||
} catch (IOException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -0,0 +1,29 @@
|
||||||
|
grammar fr.n7.PDL3 with org.eclipse.xtext.common.Terminals
|
||||||
|
generate pDL3 "http://www.n7.fr/PDL3"
|
||||||
|
|
||||||
|
Process :
|
||||||
|
'process' ':' name=ID
|
||||||
|
processElements+=ProcessElement* ;
|
||||||
|
|
||||||
|
|
||||||
|
ProcessElement :
|
||||||
|
WorkDefinitionList | WorkSequenceList ;
|
||||||
|
|
||||||
|
WorkDefinitionList :
|
||||||
|
'workdefinitions' ':' WorkDefinition+=WorkDefinition* ;
|
||||||
|
|
||||||
|
WorkDefinition :
|
||||||
|
name=ID ";" ;
|
||||||
|
|
||||||
|
WorkSequenceList :
|
||||||
|
'worksequences' ':' WorkSequence+=WorkSequence* ;
|
||||||
|
|
||||||
|
WorkSequence :
|
||||||
|
predecessor=[WorkDefinition] linkType=WorkSequenceType successor=[WorkDefinition] ";" ;
|
||||||
|
|
||||||
|
enum WorkSequenceType :
|
||||||
|
start2start = 's2s'
|
||||||
|
| finish2start = 'f2s'
|
||||||
|
| start2finish = 's2f'
|
||||||
|
| finish2finish = 'f2f'
|
||||||
|
;
|
|
@ -0,0 +1,205 @@
|
||||||
|
package simplepdl.manip;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
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.xmi.impl.XMIResourceFactoryImpl;
|
||||||
|
|
||||||
|
import petrinet.PetrinetPackage;
|
||||||
|
import petrinet.Place;
|
||||||
|
import petrinet.Transition;
|
||||||
|
import petrinet.Arc;
|
||||||
|
import petrinet.Network;
|
||||||
|
import petrinet.Node;
|
||||||
|
import petrinet.PetrinetFactory;
|
||||||
|
import simplepdl.Process;
|
||||||
|
import simplepdl.WorkDefinition;
|
||||||
|
import simplepdl.WorkSequence;
|
||||||
|
import simplepdl.WorkSequenceType;
|
||||||
|
import simplepdl.SimplepdlPackage;
|
||||||
|
|
||||||
|
public class simplepdl2petrinet {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
|
||||||
|
// Charger les package SimplePDL et Petrinet afin de les enregistrer dans le registre d'Eclipse.
|
||||||
|
SimplepdlPackage packageInstance = SimplepdlPackage.eINSTANCE;
|
||||||
|
PetrinetPackage packageInstance2 = PetrinetPackage.eINSTANCE;
|
||||||
|
|
||||||
|
// Enregistrer l'extension ".xmi" comme devant être ouverte à
|
||||||
|
// l'aide d'un objet "XMIResourceFactoryImpl"
|
||||||
|
Resource.Factory.Registry reg = Resource.Factory.Registry.INSTANCE;
|
||||||
|
Map<String, Object> m = reg.getExtensionToFactoryMap();
|
||||||
|
m.put("xmi", new XMIResourceFactoryImpl());
|
||||||
|
|
||||||
|
// Créer un objet resourceSetImpl qui contiendra une ressource EMF (le modèle)
|
||||||
|
ResourceSet resSet = new ResourceSetImpl();
|
||||||
|
|
||||||
|
// Charger la ressource (notre modèle)
|
||||||
|
URI modelURI = URI.createURI("test.xmi");
|
||||||
|
Resource resource = resSet.getResource(modelURI, true);
|
||||||
|
|
||||||
|
// Récupérer le premier élément du modèle (élément racine)
|
||||||
|
Process process = (Process) resource.getContents().get(0);
|
||||||
|
|
||||||
|
// La fabrique pour fabriquer les éléments de PetriNET
|
||||||
|
PetrinetFactory myFactory = PetrinetFactory.eINSTANCE;
|
||||||
|
|
||||||
|
// Créer un élément Network
|
||||||
|
Network network = myFactory.createNetwork();
|
||||||
|
network.setName(process.getName());
|
||||||
|
|
||||||
|
// Conversion des WorkDefinition en Node et Transition
|
||||||
|
for (Object o : process.getProcessElements()) {
|
||||||
|
if (o instanceof WorkDefinition) {
|
||||||
|
WorkDefinition wd = (WorkDefinition) o;
|
||||||
|
String name = wd.getName();
|
||||||
|
|
||||||
|
Place idle = myFactory.createPlace();
|
||||||
|
idle.setName(name + "_idle");
|
||||||
|
idle.setTokens(1);
|
||||||
|
Place started = myFactory.createPlace();
|
||||||
|
started.setName(name + "_started");
|
||||||
|
started.setTokens(0);
|
||||||
|
Place running = myFactory.createPlace();
|
||||||
|
running.setName(name + "_running");
|
||||||
|
running.setTokens(0);
|
||||||
|
Place finished = myFactory.createPlace();
|
||||||
|
finished.setName(name + "_finished");
|
||||||
|
finished.setTokens(0);
|
||||||
|
|
||||||
|
Arc pause2start = myFactory.createArc();
|
||||||
|
pause2start.setTarget(idle);
|
||||||
|
pause2start.setOutgoing(false);
|
||||||
|
pause2start.setWeight(1);
|
||||||
|
Arc start2running = myFactory.createArc();
|
||||||
|
start2running.setTarget(running);
|
||||||
|
start2running.setOutgoing(true);
|
||||||
|
start2running.setWeight(1);
|
||||||
|
Arc start2started = myFactory.createArc();
|
||||||
|
start2started.setTarget(started);
|
||||||
|
start2started.setOutgoing(true);
|
||||||
|
start2started.setWeight(1);
|
||||||
|
Transition start = myFactory.createTransition();
|
||||||
|
start.setName(name + "_start");
|
||||||
|
start.getArcs().add(pause2start);
|
||||||
|
start.getArcs().add(start2running);
|
||||||
|
start.getArcs().add(start2started);
|
||||||
|
|
||||||
|
Arc running2finish = myFactory.createArc();
|
||||||
|
running2finish.setTarget(running);
|
||||||
|
running2finish.setOutgoing(false);
|
||||||
|
running2finish.setWeight(1);
|
||||||
|
Arc finish2finished = myFactory.createArc();
|
||||||
|
finish2finished.setTarget(finished);
|
||||||
|
finish2finished.setOutgoing(true);
|
||||||
|
finish2finished.setWeight(1);
|
||||||
|
Transition finish = myFactory.createTransition();
|
||||||
|
finish.setName(name + "_finish");
|
||||||
|
finish.getArcs().add(running2finish);
|
||||||
|
finish.getArcs().add(finish2finished);
|
||||||
|
|
||||||
|
network.getNodes().add(idle);
|
||||||
|
network.getNodes().add(start);
|
||||||
|
network.getNodes().add(started);
|
||||||
|
network.getNodes().add(running);
|
||||||
|
network.getNodes().add(finish);
|
||||||
|
network.getNodes().add(finished);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Conversion des WorkSequence en Node et Transition
|
||||||
|
for (Object o : process.getProcessElements()) {
|
||||||
|
if (o instanceof WorkSequence) {
|
||||||
|
WorkSequence ws = (WorkSequence) o;
|
||||||
|
WorkSequenceType type = ws.getLinkType();
|
||||||
|
WorkDefinition predecessor = ws.getPredecessor();
|
||||||
|
WorkDefinition successor = ws.getSuccessor();
|
||||||
|
|
||||||
|
// creation des suffixs permettant la recherche des noeuds
|
||||||
|
String predecessor_suffix = new String();
|
||||||
|
String successor_suffix = new String();
|
||||||
|
switch (type) {
|
||||||
|
case START_TO_START:
|
||||||
|
predecessor_suffix = "_started";
|
||||||
|
successor_suffix = "_start";
|
||||||
|
break;
|
||||||
|
case START_TO_FINISH:
|
||||||
|
predecessor_suffix = "_started";
|
||||||
|
successor_suffix = "_finished";
|
||||||
|
break;
|
||||||
|
case FINISH_TO_START:
|
||||||
|
predecessor_suffix = "_finished";
|
||||||
|
successor_suffix = "_start";
|
||||||
|
break;
|
||||||
|
case FINISH_TO_FINISH:
|
||||||
|
predecessor_suffix = "_finished";
|
||||||
|
successor_suffix = "_finish";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
System.out.print("the fuck ?");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// creation du read-arc
|
||||||
|
Arc arc1 = myFactory.createArc();
|
||||||
|
arc1.setOutgoing(false);
|
||||||
|
arc1.setWeight(1);
|
||||||
|
Arc arc2 = myFactory.createArc();
|
||||||
|
arc2.setOutgoing(true);
|
||||||
|
arc2.setWeight(1);
|
||||||
|
|
||||||
|
for (Node node : network.getNodes()) {
|
||||||
|
if (node instanceof Place) {
|
||||||
|
Place place = (Place) node;
|
||||||
|
if (place.getName().equals(predecessor.getName() + predecessor_suffix)) {
|
||||||
|
arc1.setTarget(place);
|
||||||
|
arc2.setTarget(place);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (node instanceof Transition) {
|
||||||
|
Transition transition = (Transition) node;
|
||||||
|
if (transition.getName().equals(successor.getName() + successor_suffix)) {
|
||||||
|
transition.getArcs().add(arc1);
|
||||||
|
transition.getArcs().add(arc2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Conversion des WorkSequence en Node et Transition
|
||||||
|
for (Object o : process.getProcessElements()) {
|
||||||
|
if (o instanceof Resource) {
|
||||||
|
|
||||||
|
Resource r = (Resource) o;
|
||||||
|
EObject qty = r.getEObject("quantity");
|
||||||
|
|
||||||
|
System.out.println(qty);
|
||||||
|
System.out.println("mdr"));
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Créer le nouveau xmi (modèle convertit)
|
||||||
|
URI convURI = URI.createURI("models/Developpement_petrinet.xmi");
|
||||||
|
Resource conv = resSet.createResource(convURI);
|
||||||
|
|
||||||
|
// Ajouter le Network dans le nouveau modèle
|
||||||
|
conv.getContents().add(network);
|
||||||
|
|
||||||
|
// Sauver la ressource
|
||||||
|
try {
|
||||||
|
conv.save(Collections.EMPTY_MAP);
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -1,88 +0,0 @@
|
||||||
package simplepdl.manip;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
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.resource.impl.ResourceSetImpl;
|
|
||||||
import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
|
|
||||||
|
|
||||||
import petrinet.PetrinetPackage;
|
|
||||||
import petrinet.PetrinetFactory;
|
|
||||||
import simplepdl.Process;
|
|
||||||
import simplepdl.WorkDefinition;
|
|
||||||
import simplepdl.WorkSequence;
|
|
||||||
import simplepdl.WorkSequenceType;
|
|
||||||
import simplepdl.SimplepdlFactory;
|
|
||||||
import simplepdl.SimplepdlPackage;
|
|
||||||
|
|
||||||
public class simplepdl2petrinet {
|
|
||||||
|
|
||||||
public static void main(String[] args) {
|
|
||||||
|
|
||||||
// Charger les package SimplePDL et Petrinet afin de les enregistrer dans le registre d'Eclipse.
|
|
||||||
SimplepdlPackage packageInstance = SimplepdlPackage.eINSTANCE;
|
|
||||||
PetrinetPackage packageInstance2 = PetrinetPackage.eINSTANCE;
|
|
||||||
|
|
||||||
// Enregistrer l'extension ".xmi" comme devant être ouverte à
|
|
||||||
// l'aide d'un objet "XMIResourceFactoryImpl"
|
|
||||||
Resource.Factory.Registry reg = Resource.Factory.Registry.INSTANCE;
|
|
||||||
Map<String, Object> m = reg.getExtensionToFactoryMap();
|
|
||||||
m.put("xmi", new XMIResourceFactoryImpl());
|
|
||||||
|
|
||||||
// Créer un objet resourceSetImpl qui contiendra une ressource EMF (le modèle)
|
|
||||||
ResourceSet resSet = new ResourceSetImpl();
|
|
||||||
|
|
||||||
// Définir la ressource (le modèle)
|
|
||||||
URI modelURI = URI.createURI("models/SimplePDL2PetriNET.xmi");
|
|
||||||
Resource resource = resSet.createResource(modelURI);
|
|
||||||
|
|
||||||
// La fabrique pour fabriquer les éléments de SimplePDL
|
|
||||||
SimplepdlFactory myFactory = SimplepdlFactory.eINSTANCE;
|
|
||||||
|
|
||||||
// Créer un élément Process
|
|
||||||
Process process = myFactory.createProcess();
|
|
||||||
process.setName("Mon premier processus");
|
|
||||||
|
|
||||||
// Ajouter le Process dans le modèle
|
|
||||||
resource.getContents().add(process);
|
|
||||||
|
|
||||||
// Ajouter deux WorkDefinitions
|
|
||||||
WorkDefinition wd1 = myFactory.createWorkDefinition();
|
|
||||||
wd1.setName("Ma première WorkDefinition, quelle émotion");
|
|
||||||
|
|
||||||
WorkDefinition wd2 = myFactory.createWorkDefinition();
|
|
||||||
wd2.setName("Ma deuxième WorkDefinition, toujours autant d'émotion");
|
|
||||||
|
|
||||||
process.getProcessElements().add(wd1);
|
|
||||||
process.getProcessElements().add(wd2);
|
|
||||||
|
|
||||||
// Ajouter une WorkSequence entre les deux WorkDefinitions
|
|
||||||
WorkSequence seq = myFactory.createWorkSequence();
|
|
||||||
seq.setPredecessor(wd1);
|
|
||||||
seq.setSuccessor(wd2);
|
|
||||||
seq.setLinkType(WorkSequenceType.FINISH_TO_FINISH);
|
|
||||||
|
|
||||||
process.getProcessElements().add(seq);
|
|
||||||
|
|
||||||
// Ajouter une deuxième WorkSequence entre les deux WorkDefinitions
|
|
||||||
WorkSequence seq2 = myFactory.createWorkSequence();
|
|
||||||
seq2.setPredecessor(wd1);
|
|
||||||
seq2.setSuccessor(wd2);
|
|
||||||
seq2.setLinkType(WorkSequenceType.START_TO_START);
|
|
||||||
|
|
||||||
process.getProcessElements().add(seq2);
|
|
||||||
|
|
||||||
|
|
||||||
// Sauver la ressource
|
|
||||||
try {
|
|
||||||
resource.save(Collections.EMPTY_MAP);
|
|
||||||
} catch (IOException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -0,0 +1,30 @@
|
||||||
|
grammar fr.n7.PDL1 with org.eclipse.xtext.common.Terminals
|
||||||
|
generate pDL1 "http://www.n7.fr/PDL1"
|
||||||
|
|
||||||
|
Process :
|
||||||
|
'process' ':' name=ID
|
||||||
|
processElements+=ProcessElement* ;
|
||||||
|
|
||||||
|
|
||||||
|
ProcessElement :
|
||||||
|
WorkDefinitionList | WorkSequenceList ;
|
||||||
|
|
||||||
|
WorkDefinitionList :
|
||||||
|
'workdefinitions' ':' WorkDefinition+=WorkDefinition* ;
|
||||||
|
|
||||||
|
WorkDefinition :
|
||||||
|
name=ID ";" ;
|
||||||
|
|
||||||
|
WorkSequenceList :
|
||||||
|
'worksequences' ':' WorkSequence+=WorkSequence* ;
|
||||||
|
|
||||||
|
WorkSequence :
|
||||||
|
predecessor=[WorkDefinition] linkType=WorkSequenceType successor=[WorkDefinition] ;
|
||||||
|
|
||||||
|
|
||||||
|
enum WorkSequenceType :
|
||||||
|
start2start = 's2s'
|
||||||
|
| finish2start = 'f2s'
|
||||||
|
| start2finish = 's2f'
|
||||||
|
| finish2finish = 'f2f'
|
||||||
|
;
|
|
@ -0,0 +1,218 @@
|
||||||
|
package simplepdl.manip;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
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.resource.impl.ResourceSetImpl;
|
||||||
|
import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
|
||||||
|
|
||||||
|
import petrinet.Arc;
|
||||||
|
import petrinet.Network;
|
||||||
|
import petrinet.Node;
|
||||||
|
import petrinet.PetrinetFactory;
|
||||||
|
import petrinet.PetrinetPackage;
|
||||||
|
import petrinet.Place;
|
||||||
|
import petrinet.Transition;
|
||||||
|
import simplepdl.Process;
|
||||||
|
import simplepdl.SimplepdlPackage;
|
||||||
|
import simplepdl.WorkDefinition;
|
||||||
|
import simplepdl.WorkSequence;
|
||||||
|
import simplepdl.WorkSequenceType;
|
||||||
|
|
||||||
|
public class simplepdl2petrinet {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
|
||||||
|
// Charger les package SimplePDL et Petrinet afin de les enregistrer dans le registre d'Eclipse.
|
||||||
|
SimplepdlPackage packageInstance = SimplepdlPackage.eINSTANCE;
|
||||||
|
PetrinetPackage packageInstance2 = PetrinetPackage.eINSTANCE;
|
||||||
|
|
||||||
|
// Enregistrer l'extension ".xmi" comme devant être ouverte à
|
||||||
|
// l'aide d'un objet "XMIResourceFactoryImpl"
|
||||||
|
Resource.Factory.Registry reg = Resource.Factory.Registry.INSTANCE;
|
||||||
|
Map<String, Object> m = reg.getExtensionToFactoryMap();
|
||||||
|
m.put("xmi", new XMIResourceFactoryImpl());
|
||||||
|
|
||||||
|
// Créer un objet resourceSetImpl qui contiendra une ressource EMF (le modèle)
|
||||||
|
ResourceSet resSet = new ResourceSetImpl();
|
||||||
|
|
||||||
|
// Charger la ressource (notre modèle)
|
||||||
|
URI modelURI = URI.createURI("test.xmi");
|
||||||
|
Resource resource = resSet.getResource(modelURI, true);
|
||||||
|
|
||||||
|
// Récupérer le premier élément du modèle (élément racine)
|
||||||
|
Process process = (Process) resource.getContents().get(0);
|
||||||
|
|
||||||
|
// La fabrique pour fabriquer les éléments de PetriNET
|
||||||
|
PetrinetFactory myFactory = PetrinetFactory.eINSTANCE;
|
||||||
|
|
||||||
|
// Créer un élément Network
|
||||||
|
Network network = myFactory.createNetwork();
|
||||||
|
network.setName(process.getName());
|
||||||
|
|
||||||
|
// Conversion des WorkDefinition en Node et Transition
|
||||||
|
for (Object o : process.getProcessElements()) {
|
||||||
|
if (o instanceof WorkDefinition) {
|
||||||
|
WorkDefinition wd = (WorkDefinition) o;
|
||||||
|
String name = wd.getName();
|
||||||
|
|
||||||
|
Place idle = myFactory.createPlace();
|
||||||
|
idle.setName(name + "_idle");
|
||||||
|
idle.setTokens(1);
|
||||||
|
Place started = myFactory.createPlace();
|
||||||
|
started.setName(name + "_started");
|
||||||
|
started.setTokens(0);
|
||||||
|
Place running = myFactory.createPlace();
|
||||||
|
running.setName(name + "_running");
|
||||||
|
running.setTokens(0);
|
||||||
|
Place finished = myFactory.createPlace();
|
||||||
|
finished.setName(name + "_finished");
|
||||||
|
finished.setTokens(0);
|
||||||
|
|
||||||
|
Arc pause2start = myFactory.createArc();
|
||||||
|
pause2start.setTarget(idle);
|
||||||
|
pause2start.setOutgoing(false);
|
||||||
|
pause2start.setWeight(1);
|
||||||
|
Arc start2running = myFactory.createArc();
|
||||||
|
start2running.setTarget(running);
|
||||||
|
start2running.setOutgoing(true);
|
||||||
|
start2running.setWeight(1);
|
||||||
|
Arc start2started = myFactory.createArc();
|
||||||
|
start2started.setTarget(started);
|
||||||
|
start2started.setOutgoing(true);
|
||||||
|
start2started.setWeight(1);
|
||||||
|
Transition start = myFactory.createTransition();
|
||||||
|
start.setName(name + "_start");
|
||||||
|
start.getArcs().add(pause2start);
|
||||||
|
start.getArcs().add(start2running);
|
||||||
|
start.getArcs().add(start2started);
|
||||||
|
|
||||||
|
Arc running2finish = myFactory.createArc();
|
||||||
|
running2finish.setTarget(running);
|
||||||
|
running2finish.setOutgoing(false);
|
||||||
|
running2finish.setWeight(1);
|
||||||
|
Arc finish2finished = myFactory.createArc();
|
||||||
|
finish2finished.setTarget(finished);
|
||||||
|
finish2finished.setOutgoing(true);
|
||||||
|
finish2finished.setWeight(1);
|
||||||
|
Transition finish = myFactory.createTransition();
|
||||||
|
finish.setName(name + "_finish");
|
||||||
|
finish.getArcs().add(running2finish);
|
||||||
|
finish.getArcs().add(finish2finished);
|
||||||
|
|
||||||
|
network.getNodes().add(idle);
|
||||||
|
network.getNodes().add(start);
|
||||||
|
network.getNodes().add(started);
|
||||||
|
network.getNodes().add(running);
|
||||||
|
network.getNodes().add(finish);
|
||||||
|
network.getNodes().add(finished);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Conversion des WorkSequence en Node et Transition
|
||||||
|
for (Object o : process.getProcessElements()) {
|
||||||
|
if (o instanceof WorkSequence) {
|
||||||
|
WorkSequence ws = (WorkSequence) o;
|
||||||
|
WorkSequenceType type = ws.getLinkType();
|
||||||
|
WorkDefinition predecessor = ws.getPredecessor();
|
||||||
|
WorkDefinition successor = ws.getSuccessor();
|
||||||
|
|
||||||
|
// creation des suffixs permettant la recherche des noeuds
|
||||||
|
String predecessor_suffix = new String();
|
||||||
|
String successor_suffix = new String();
|
||||||
|
switch (type) {
|
||||||
|
case START_TO_START:
|
||||||
|
predecessor_suffix = "_started";
|
||||||
|
successor_suffix = "_start";
|
||||||
|
break;
|
||||||
|
case START_TO_FINISH:
|
||||||
|
predecessor_suffix = "_started";
|
||||||
|
successor_suffix = "_finished";
|
||||||
|
break;
|
||||||
|
case FINISH_TO_START:
|
||||||
|
predecessor_suffix = "_finished";
|
||||||
|
successor_suffix = "_start";
|
||||||
|
break;
|
||||||
|
case FINISH_TO_FINISH:
|
||||||
|
predecessor_suffix = "_finished";
|
||||||
|
successor_suffix = "_finish";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
System.out.print("the fuck ?");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// creation du read-arc
|
||||||
|
Arc arc1 = myFactory.createArc();
|
||||||
|
arc1.setOutgoing(false);
|
||||||
|
arc1.setWeight(1);
|
||||||
|
Arc arc2 = myFactory.createArc();
|
||||||
|
arc2.setOutgoing(true);
|
||||||
|
arc2.setWeight(1);
|
||||||
|
|
||||||
|
for (Node node : network.getNodes()) {
|
||||||
|
if (node instanceof Place) {
|
||||||
|
Place place = (Place) node;
|
||||||
|
if (place.getName().equals(predecessor.getName() + predecessor_suffix)) {
|
||||||
|
arc1.setTarget(place);
|
||||||
|
arc2.setTarget(place);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (node instanceof Transition) {
|
||||||
|
Transition transition = (Transition) node;
|
||||||
|
if (transition.getName().equals(successor.getName() + successor_suffix)) {
|
||||||
|
transition.getArcs().add(arc1);
|
||||||
|
transition.getArcs().add(arc2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Conversion des Resource et Request en Node et Arcs
|
||||||
|
for (Object o : process.getProcessElements()) {
|
||||||
|
if (o instanceof simplepdl.Resource) {
|
||||||
|
|
||||||
|
simplepdl.Resource r = (simplepdl.Resource) o;
|
||||||
|
String name = r.getName();
|
||||||
|
int qty = r.getQuantity();
|
||||||
|
|
||||||
|
Place res = myFactory.createPlace();
|
||||||
|
res.setName(name);
|
||||||
|
res.setTokens(qty);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (o instanceof simplepdl.Request) {
|
||||||
|
|
||||||
|
simplepdl.Request r = (simplepdl.Request) o;
|
||||||
|
WorkDefinition target = r.getTarget();
|
||||||
|
int qty = r.getQuantity();
|
||||||
|
|
||||||
|
Place res = myFactory.createPlace();
|
||||||
|
res.setName(name);
|
||||||
|
res.setTokens(qty);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Créer le nouveau xmi (modèle convertit)
|
||||||
|
URI convURI = URI.createURI("models/Developpement_petrinet.xmi");
|
||||||
|
Resource conv = resSet.createResource(convURI);
|
||||||
|
|
||||||
|
// Ajouter le Network dans le nouveau modèle
|
||||||
|
conv.getContents().add(network);
|
||||||
|
|
||||||
|
// Sauver la ressource
|
||||||
|
try {
|
||||||
|
conv.save(Collections.EMPTY_MAP);
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,180 @@
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
package simplepdl.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 simplepdl.Request;
|
||||||
|
import simplepdl.SimplepdlPackage;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is the item provider adapter for a {@link simplepdl.Request} object.
|
||||||
|
* <!-- begin-user-doc -->
|
||||||
|
* <!-- end-user-doc -->
|
||||||
|
* @generated
|
||||||
|
*/
|
||||||
|
public class RequestItemProvider
|
||||||
|
extends ItemProviderAdapter
|
||||||
|
implements
|
||||||
|
IEditingDomainItemProvider,
|
||||||
|
IStructuredItemContentProvider,
|
||||||
|
ITreeItemContentProvider,
|
||||||
|
IItemLabelProvider,
|
||||||
|
IItemPropertySource {
|
||||||
|
/**
|
||||||
|
* This constructs an instance from a factory and a notifier.
|
||||||
|
* <!-- begin-user-doc -->
|
||||||
|
* <!-- end-user-doc -->
|
||||||
|
* @generated
|
||||||
|
*/
|
||||||
|
public RequestItemProvider(AdapterFactory adapterFactory) {
|
||||||
|
super(adapterFactory);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This returns the property descriptors for the adapted class.
|
||||||
|
* <!-- begin-user-doc -->
|
||||||
|
* <!-- end-user-doc -->
|
||||||
|
* @generated
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
|
||||||
|
if (itemPropertyDescriptors == null) {
|
||||||
|
super.getPropertyDescriptors(object);
|
||||||
|
|
||||||
|
addQuantityPropertyDescriptor(object);
|
||||||
|
addTargetPropertyDescriptor(object);
|
||||||
|
}
|
||||||
|
return itemPropertyDescriptors;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This adds a property descriptor for the Quantity feature.
|
||||||
|
* <!-- begin-user-doc -->
|
||||||
|
* <!-- end-user-doc -->
|
||||||
|
* @generated
|
||||||
|
*/
|
||||||
|
protected void addQuantityPropertyDescriptor(Object object) {
|
||||||
|
itemPropertyDescriptors.add
|
||||||
|
(createItemPropertyDescriptor
|
||||||
|
(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
|
||||||
|
getResourceLocator(),
|
||||||
|
getString("_UI_Request_quantity_feature"),
|
||||||
|
getString("_UI_PropertyDescriptor_description", "_UI_Request_quantity_feature", "_UI_Request_type"),
|
||||||
|
SimplepdlPackage.Literals.REQUEST__QUANTITY,
|
||||||
|
true,
|
||||||
|
false,
|
||||||
|
false,
|
||||||
|
ItemPropertyDescriptor.INTEGRAL_VALUE_IMAGE,
|
||||||
|
null,
|
||||||
|
null));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This adds a property descriptor for the Target feature.
|
||||||
|
* <!-- begin-user-doc -->
|
||||||
|
* <!-- end-user-doc -->
|
||||||
|
* @generated
|
||||||
|
*/
|
||||||
|
protected void addTargetPropertyDescriptor(Object object) {
|
||||||
|
itemPropertyDescriptors.add
|
||||||
|
(createItemPropertyDescriptor
|
||||||
|
(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
|
||||||
|
getResourceLocator(),
|
||||||
|
getString("_UI_Request_target_feature"),
|
||||||
|
getString("_UI_PropertyDescriptor_description", "_UI_Request_target_feature", "_UI_Request_type"),
|
||||||
|
SimplepdlPackage.Literals.REQUEST__TARGET,
|
||||||
|
true,
|
||||||
|
false,
|
||||||
|
true,
|
||||||
|
null,
|
||||||
|
null,
|
||||||
|
null));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This returns Request.gif.
|
||||||
|
* <!-- begin-user-doc -->
|
||||||
|
* <!-- end-user-doc -->
|
||||||
|
* @generated
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Object getImage(Object object) {
|
||||||
|
return overlayImage(object, getResourceLocator().getImage("full/obj16/Request"));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This returns the label text for the adapted class.
|
||||||
|
* <!-- begin-user-doc -->
|
||||||
|
* <!-- end-user-doc -->
|
||||||
|
* @generated
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public String getText(Object object) {
|
||||||
|
Request request = (Request)object;
|
||||||
|
String targetname = request.getTarget() != null ? request.getTarget().getName() : "";
|
||||||
|
return getString("_UI_Request_type") + " --" + request.getQuantity() + "--> " + targetname;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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}.
|
||||||
|
* <!-- begin-user-doc -->
|
||||||
|
* <!-- end-user-doc -->
|
||||||
|
* @generated
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void notifyChanged(Notification notification) {
|
||||||
|
updateChildren(notification);
|
||||||
|
|
||||||
|
switch (notification.getFeatureID(Request.class)) {
|
||||||
|
case SimplepdlPackage.REQUEST__QUANTITY:
|
||||||
|
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.
|
||||||
|
* <!-- begin-user-doc -->
|
||||||
|
* <!-- end-user-doc -->
|
||||||
|
* @generated
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
|
||||||
|
super.collectNewChildDescriptors(newChildDescriptors, object);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the resource locator for this item provider's resources.
|
||||||
|
* <!-- begin-user-doc -->
|
||||||
|
* <!-- end-user-doc -->
|
||||||
|
* @generated
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public ResourceLocator getResourceLocator() {
|
||||||
|
return SimplepdlEditPlugin.INSTANCE;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,191 @@
|
||||||
|
package simplepdl.manip;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
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.resource.impl.ResourceSetImpl;
|
||||||
|
import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
|
||||||
|
|
||||||
|
import petrinet.PetrinetPackage;
|
||||||
|
import petrinet.Place;
|
||||||
|
import petrinet.Transition;
|
||||||
|
import petrinet.Arc;
|
||||||
|
import petrinet.Network;
|
||||||
|
import petrinet.Node;
|
||||||
|
import petrinet.PetrinetFactory;
|
||||||
|
import simplepdl.Process;
|
||||||
|
import simplepdl.WorkDefinition;
|
||||||
|
import simplepdl.WorkSequence;
|
||||||
|
import simplepdl.WorkSequenceType;
|
||||||
|
import simplepdl.SimplepdlPackage;
|
||||||
|
|
||||||
|
public class simplepdl2petrinet {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
|
||||||
|
// Charger les package SimplePDL et Petrinet afin de les enregistrer dans le registre d'Eclipse.
|
||||||
|
SimplepdlPackage packageInstance = SimplepdlPackage.eINSTANCE;
|
||||||
|
PetrinetPackage packageInstance2 = PetrinetPackage.eINSTANCE;
|
||||||
|
|
||||||
|
// Enregistrer l'extension ".xmi" comme devant être ouverte à
|
||||||
|
// l'aide d'un objet "XMIResourceFactoryImpl"
|
||||||
|
Resource.Factory.Registry reg = Resource.Factory.Registry.INSTANCE;
|
||||||
|
Map<String, Object> m = reg.getExtensionToFactoryMap();
|
||||||
|
m.put("xmi", new XMIResourceFactoryImpl());
|
||||||
|
|
||||||
|
// Créer un objet resourceSetImpl qui contiendra une ressource EMF (le modèle)
|
||||||
|
ResourceSet resSet = new ResourceSetImpl();
|
||||||
|
|
||||||
|
// Charger la ressource (notre modèle)
|
||||||
|
URI modelURI = URI.createURI("pdl-sujet.xmi");
|
||||||
|
Resource resource = resSet.getResource(modelURI, true);
|
||||||
|
|
||||||
|
// Récupérer le premier élément du modèle (élément racine)
|
||||||
|
Process process = (Process) resource.getContents().get(0);
|
||||||
|
|
||||||
|
// La fabrique pour fabriquer les éléments de PetriNET
|
||||||
|
PetrinetFactory myFactory = PetrinetFactory.eINSTANCE;
|
||||||
|
|
||||||
|
// Créer un élément Network
|
||||||
|
Network network = myFactory.createNetwork();
|
||||||
|
network.setName(process.getName());
|
||||||
|
|
||||||
|
// Conversion des WorkDefinition en Node et Transition
|
||||||
|
for (Object o : process.getProcessElements()) {
|
||||||
|
if (o instanceof WorkDefinition) {
|
||||||
|
WorkDefinition wd = (WorkDefinition) o;
|
||||||
|
String name = wd.getName();
|
||||||
|
|
||||||
|
Place idle = myFactory.createPlace();
|
||||||
|
idle.setName(name + "_idle");
|
||||||
|
idle.setTokens(1);
|
||||||
|
Place started = myFactory.createPlace();
|
||||||
|
started.setName(name + "_started");
|
||||||
|
started.setTokens(0);
|
||||||
|
Place running = myFactory.createPlace();
|
||||||
|
running.setName(name + "_running");
|
||||||
|
running.setTokens(0);
|
||||||
|
Place finished = myFactory.createPlace();
|
||||||
|
finished.setName(name + "_finished");
|
||||||
|
finished.setTokens(0);
|
||||||
|
|
||||||
|
Arc pause2start = myFactory.createArc();
|
||||||
|
pause2start.setTarget(idle);
|
||||||
|
pause2start.setOutgoing(false);
|
||||||
|
pause2start.setWeight(1);
|
||||||
|
Arc start2running = myFactory.createArc();
|
||||||
|
start2running.setTarget(running);
|
||||||
|
start2running.setOutgoing(true);
|
||||||
|
start2running.setWeight(1);
|
||||||
|
Arc start2started = myFactory.createArc();
|
||||||
|
start2started.setTarget(started);
|
||||||
|
start2started.setOutgoing(true);
|
||||||
|
start2started.setWeight(1);
|
||||||
|
Transition start = myFactory.createTransition();
|
||||||
|
start.setName(name + "_start");
|
||||||
|
start.getArcs().add(pause2start);
|
||||||
|
start.getArcs().add(start2running);
|
||||||
|
start.getArcs().add(start2started);
|
||||||
|
|
||||||
|
Arc running2finish = myFactory.createArc();
|
||||||
|
running2finish.setTarget(running);
|
||||||
|
running2finish.setOutgoing(false);
|
||||||
|
running2finish.setWeight(1);
|
||||||
|
Arc finish2finished = myFactory.createArc();
|
||||||
|
finish2finished.setTarget(finished);
|
||||||
|
finish2finished.setOutgoing(true);
|
||||||
|
finish2finished.setWeight(1);
|
||||||
|
Transition finish = myFactory.createTransition();
|
||||||
|
finish.setName(name + "_finish");
|
||||||
|
finish.getArcs().add(running2finish);
|
||||||
|
finish.getArcs().add(finish2finished);
|
||||||
|
|
||||||
|
network.getNodes().add(idle);
|
||||||
|
network.getNodes().add(start);
|
||||||
|
network.getNodes().add(started);
|
||||||
|
network.getNodes().add(running);
|
||||||
|
network.getNodes().add(finish);
|
||||||
|
network.getNodes().add(finished);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Conversion des WorkSequence en Node et Transition
|
||||||
|
for (Object o : process.getProcessElements()) {
|
||||||
|
if (o instanceof WorkSequence) {
|
||||||
|
WorkSequence ws = (WorkSequence) o;
|
||||||
|
WorkSequenceType type = ws.getLinkType();
|
||||||
|
WorkDefinition predecessor = ws.getPredecessor();
|
||||||
|
WorkDefinition successor = ws.getSuccessor();
|
||||||
|
|
||||||
|
// creation des suffixs permettant la recherche des noeuds
|
||||||
|
String predecessor_suffix = new String();
|
||||||
|
String successor_suffix = new String();
|
||||||
|
switch (type) {
|
||||||
|
case START_TO_START:
|
||||||
|
predecessor_suffix = "_started";
|
||||||
|
successor_suffix = "_start";
|
||||||
|
break;
|
||||||
|
case START_TO_FINISH:
|
||||||
|
predecessor_suffix = "_started";
|
||||||
|
successor_suffix = "_finished";
|
||||||
|
break;
|
||||||
|
case FINISH_TO_START:
|
||||||
|
predecessor_suffix = "_finished";
|
||||||
|
successor_suffix = "_start";
|
||||||
|
break;
|
||||||
|
case FINISH_TO_FINISH:
|
||||||
|
predecessor_suffix = "_finished";
|
||||||
|
successor_suffix = "_finish";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
System.out.print("the fuck ?");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// creation du read-arc
|
||||||
|
Arc arc1 = myFactory.createArc();
|
||||||
|
arc1.setOutgoing(false);
|
||||||
|
arc1.setWeight(1);
|
||||||
|
Arc arc2 = myFactory.createArc();
|
||||||
|
arc2.setOutgoing(true);
|
||||||
|
arc2.setWeight(1);
|
||||||
|
|
||||||
|
for (Node node : network.getNodes()) {
|
||||||
|
if (node instanceof Place) {
|
||||||
|
Place place = (Place) node;
|
||||||
|
if (place.getName().equals(predecessor.getName() + predecessor_suffix)) {
|
||||||
|
arc1.setTarget(place);
|
||||||
|
arc2.setTarget(place);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (node instanceof Transition) {
|
||||||
|
Transition transition = (Transition) node;
|
||||||
|
if (transition.getName().equals(successor.getName() + successor_suffix)) {
|
||||||
|
transition.getArcs().add(arc1);
|
||||||
|
transition.getArcs().add(arc2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Créer le nouveau xmi (modèle convertit)
|
||||||
|
URI convURI = URI.createURI("models/Developpement_petrinet.xmi");
|
||||||
|
Resource conv = resSet.createResource(convURI);
|
||||||
|
|
||||||
|
// Ajouter le Network dans le nouveau modèle
|
||||||
|
conv.getContents().add(network);
|
||||||
|
|
||||||
|
// Sauver la ressource
|
||||||
|
try {
|
||||||
|
conv.save(Collections.EMPTY_MAP);
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,217 @@
|
||||||
|
package simplepdl.manip;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
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.resource.impl.ResourceSetImpl;
|
||||||
|
import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
|
||||||
|
|
||||||
|
import petrinet.Arc;
|
||||||
|
import petrinet.Network;
|
||||||
|
import petrinet.Node;
|
||||||
|
import petrinet.PetrinetFactory;
|
||||||
|
import petrinet.PetrinetPackage;
|
||||||
|
import petrinet.Place;
|
||||||
|
import petrinet.Transition;
|
||||||
|
import simplepdl.Process;
|
||||||
|
import simplepdl.SimplepdlPackage;
|
||||||
|
import simplepdl.WorkDefinition;
|
||||||
|
import simplepdl.WorkSequence;
|
||||||
|
import simplepdl.WorkSequenceType;
|
||||||
|
import simplepdl.Request;
|
||||||
|
|
||||||
|
public class simplepdl2petrinet {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
|
||||||
|
// Charger les package SimplePDL et Petrinet afin de les enregistrer dans le registre d'Eclipse.
|
||||||
|
SimplepdlPackage packageInstance = SimplepdlPackage.eINSTANCE;
|
||||||
|
PetrinetPackage packageInstance2 = PetrinetPackage.eINSTANCE;
|
||||||
|
|
||||||
|
// Enregistrer l'extension ".xmi" comme devant être ouverte à
|
||||||
|
// l'aide d'un objet "XMIResourceFactoryImpl"
|
||||||
|
Resource.Factory.Registry reg = Resource.Factory.Registry.INSTANCE;
|
||||||
|
Map<String, Object> m = reg.getExtensionToFactoryMap();
|
||||||
|
m.put("xmi", new XMIResourceFactoryImpl());
|
||||||
|
|
||||||
|
// Créer un objet resourceSetImpl qui contiendra une ressource EMF (le modèle)
|
||||||
|
ResourceSet resSet = new ResourceSetImpl();
|
||||||
|
|
||||||
|
// Charger la ressource (notre modèle)
|
||||||
|
URI modelURI = URI.createURI("test.xmi");
|
||||||
|
Resource resource = resSet.getResource(modelURI, true);
|
||||||
|
|
||||||
|
// Récupérer le premier élément du modèle (élément racine)
|
||||||
|
Process process = (Process) resource.getContents().get(0);
|
||||||
|
|
||||||
|
// La fabrique pour fabriquer les éléments de PetriNET
|
||||||
|
PetrinetFactory myFactory = PetrinetFactory.eINSTANCE;
|
||||||
|
|
||||||
|
// Créer un élément Network
|
||||||
|
Network network = myFactory.createNetwork();
|
||||||
|
network.setName(process.getName());
|
||||||
|
|
||||||
|
// Conversion des WorkDefinition en Node et Transition
|
||||||
|
for (Object o : process.getProcessElements()) {
|
||||||
|
if (o instanceof WorkDefinition) {
|
||||||
|
WorkDefinition wd = (WorkDefinition) o;
|
||||||
|
String name = wd.getName();
|
||||||
|
|
||||||
|
Place idle = myFactory.createPlace();
|
||||||
|
idle.setName(name + "_idle");
|
||||||
|
idle.setTokens(1);
|
||||||
|
Place started = myFactory.createPlace();
|
||||||
|
started.setName(name + "_started");
|
||||||
|
started.setTokens(0);
|
||||||
|
Place running = myFactory.createPlace();
|
||||||
|
running.setName(name + "_running");
|
||||||
|
running.setTokens(0);
|
||||||
|
Place finished = myFactory.createPlace();
|
||||||
|
finished.setName(name + "_finished");
|
||||||
|
finished.setTokens(0);
|
||||||
|
|
||||||
|
Arc pause2start = myFactory.createArc();
|
||||||
|
pause2start.setTarget(idle);
|
||||||
|
pause2start.setOutgoing(false);
|
||||||
|
pause2start.setWeight(1);
|
||||||
|
Arc start2running = myFactory.createArc();
|
||||||
|
start2running.setTarget(running);
|
||||||
|
start2running.setOutgoing(true);
|
||||||
|
start2running.setWeight(1);
|
||||||
|
Arc start2started = myFactory.createArc();
|
||||||
|
start2started.setTarget(started);
|
||||||
|
start2started.setOutgoing(true);
|
||||||
|
start2started.setWeight(1);
|
||||||
|
Transition start = myFactory.createTransition();
|
||||||
|
start.setName(name + "_start");
|
||||||
|
start.getArcs().add(pause2start);
|
||||||
|
start.getArcs().add(start2running);
|
||||||
|
start.getArcs().add(start2started);
|
||||||
|
|
||||||
|
Arc running2finish = myFactory.createArc();
|
||||||
|
running2finish.setTarget(running);
|
||||||
|
running2finish.setOutgoing(false);
|
||||||
|
running2finish.setWeight(1);
|
||||||
|
Arc finish2finished = myFactory.createArc();
|
||||||
|
finish2finished.setTarget(finished);
|
||||||
|
finish2finished.setOutgoing(true);
|
||||||
|
finish2finished.setWeight(1);
|
||||||
|
Transition finish = myFactory.createTransition();
|
||||||
|
finish.setName(name + "_finish");
|
||||||
|
finish.getArcs().add(running2finish);
|
||||||
|
finish.getArcs().add(finish2finished);
|
||||||
|
|
||||||
|
network.getNodes().add(idle);
|
||||||
|
network.getNodes().add(start);
|
||||||
|
network.getNodes().add(started);
|
||||||
|
network.getNodes().add(running);
|
||||||
|
network.getNodes().add(finish);
|
||||||
|
network.getNodes().add(finished);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Conversion des WorkSequence en Node et Transition
|
||||||
|
for (Object o : process.getProcessElements()) {
|
||||||
|
if (o instanceof WorkSequence) {
|
||||||
|
WorkSequence ws = (WorkSequence) o;
|
||||||
|
WorkSequenceType type = ws.getLinkType();
|
||||||
|
WorkDefinition predecessor = ws.getPredecessor();
|
||||||
|
WorkDefinition successor = ws.getSuccessor();
|
||||||
|
|
||||||
|
// creation des suffixs permettant la recherche des noeuds
|
||||||
|
String predecessor_suffix = new String();
|
||||||
|
String successor_suffix = new String();
|
||||||
|
switch (type) {
|
||||||
|
case START_TO_START:
|
||||||
|
predecessor_suffix = "_started";
|
||||||
|
successor_suffix = "_start";
|
||||||
|
break;
|
||||||
|
case START_TO_FINISH:
|
||||||
|
predecessor_suffix = "_started";
|
||||||
|
successor_suffix = "_finished";
|
||||||
|
break;
|
||||||
|
case FINISH_TO_START:
|
||||||
|
predecessor_suffix = "_finished";
|
||||||
|
successor_suffix = "_start";
|
||||||
|
break;
|
||||||
|
case FINISH_TO_FINISH:
|
||||||
|
predecessor_suffix = "_finished";
|
||||||
|
successor_suffix = "_finish";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
System.out.print("the fuck ?");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// creation du read-arc
|
||||||
|
Arc arc1 = myFactory.createArc();
|
||||||
|
arc1.setOutgoing(false);
|
||||||
|
arc1.setWeight(1);
|
||||||
|
Arc arc2 = myFactory.createArc();
|
||||||
|
arc2.setOutgoing(true);
|
||||||
|
arc2.setWeight(1);
|
||||||
|
|
||||||
|
for (Node node : network.getNodes()) {
|
||||||
|
if (node instanceof Place) {
|
||||||
|
Place place = (Place) node;
|
||||||
|
if (place.getName().equals(predecessor.getName() + predecessor_suffix)) {
|
||||||
|
arc1.setTarget(place);
|
||||||
|
arc2.setTarget(place);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (node instanceof Transition) {
|
||||||
|
Transition transition = (Transition) node;
|
||||||
|
if (transition.getName().equals(successor.getName() + successor_suffix)) {
|
||||||
|
transition.getArcs().add(arc1);
|
||||||
|
transition.getArcs().add(arc2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Conversion des Resource et Request en Node et Arcs
|
||||||
|
for (Object o : process.getProcessElements()) {
|
||||||
|
if (o instanceof simplepdl.Resource) {
|
||||||
|
|
||||||
|
simplepdl.Resource r = (simplepdl.Resource) o;
|
||||||
|
String name = r.getName();
|
||||||
|
int qty = r.getQuantity();
|
||||||
|
|
||||||
|
Place res = myFactory.createPlace();
|
||||||
|
res.setName(name);
|
||||||
|
res.setTokens(qty);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (o instanceof simplepdl.Request) {
|
||||||
|
|
||||||
|
Request r = (Request) o;
|
||||||
|
simplepdl.Resource target = r.getTarget();
|
||||||
|
int qty = r.getQuantity();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Créer le nouveau xmi (modèle convertit)
|
||||||
|
URI convURI = URI.createURI("models/Developpement_petrinet.xmi");
|
||||||
|
Resource conv = resSet.createResource(convURI);
|
||||||
|
|
||||||
|
// Ajouter le Network dans le nouveau modèle
|
||||||
|
conv.getContents().add(network);
|
||||||
|
|
||||||
|
// Sauver la ressource
|
||||||
|
try {
|
||||||
|
conv.save(Collections.EMPTY_MAP);
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,9 @@
|
||||||
|
grammar fr.n7.PDL2 with org.eclipse.xtext.common.Terminals
|
||||||
|
|
||||||
|
generate pDL2 "http://www.n7.fr/PDL2"
|
||||||
|
|
||||||
|
Model:
|
||||||
|
greetings+=Greeting*;
|
||||||
|
|
||||||
|
Greeting:
|
||||||
|
'Hello' name=ID '!';
|
|
@ -0,0 +1,201 @@
|
||||||
|
package simplepdl.manip;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
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.resource.impl.ResourceSetImpl;
|
||||||
|
import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
|
||||||
|
|
||||||
|
import petrinet.PetrinetPackage;
|
||||||
|
import petrinet.Place;
|
||||||
|
import petrinet.Transition;
|
||||||
|
import petrinet.Arc;
|
||||||
|
import petrinet.Network;
|
||||||
|
import petrinet.Node;
|
||||||
|
import petrinet.PetrinetFactory;
|
||||||
|
import simplepdl.Process;
|
||||||
|
import simplepdl.WorkDefinition;
|
||||||
|
import simplepdl.WorkSequence;
|
||||||
|
import simplepdl.WorkSequenceType;
|
||||||
|
import simplepdl.SimplepdlPackage;
|
||||||
|
|
||||||
|
public class simplepdl2petrinet {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
|
||||||
|
// Charger les package SimplePDL et Petrinet afin de les enregistrer dans le registre d'Eclipse.
|
||||||
|
SimplepdlPackage packageInstance = SimplepdlPackage.eINSTANCE;
|
||||||
|
PetrinetPackage packageInstance2 = PetrinetPackage.eINSTANCE;
|
||||||
|
|
||||||
|
// Enregistrer l'extension ".xmi" comme devant être ouverte à
|
||||||
|
// l'aide d'un objet "XMIResourceFactoryImpl"
|
||||||
|
Resource.Factory.Registry reg = Resource.Factory.Registry.INSTANCE;
|
||||||
|
Map<String, Object> m = reg.getExtensionToFactoryMap();
|
||||||
|
m.put("xmi", new XMIResourceFactoryImpl());
|
||||||
|
|
||||||
|
// Créer un objet resourceSetImpl qui contiendra une ressource EMF (le modèle)
|
||||||
|
ResourceSet resSet = new ResourceSetImpl();
|
||||||
|
|
||||||
|
// Charger la ressource (notre modèle)
|
||||||
|
URI modelURI = URI.createURI("test.xmi");
|
||||||
|
Resource resource = resSet.getResource(modelURI, true);
|
||||||
|
|
||||||
|
// Récupérer le premier élément du modèle (élément racine)
|
||||||
|
Process process = (Process) resource.getContents().get(0);
|
||||||
|
|
||||||
|
// La fabrique pour fabriquer les éléments de PetriNET
|
||||||
|
PetrinetFactory myFactory = PetrinetFactory.eINSTANCE;
|
||||||
|
|
||||||
|
// Créer un élément Network
|
||||||
|
Network network = myFactory.createNetwork();
|
||||||
|
network.setName(process.getName());
|
||||||
|
|
||||||
|
// Conversion des WorkDefinition en Node et Transition
|
||||||
|
for (Object o : process.getProcessElements()) {
|
||||||
|
if (o instanceof WorkDefinition) {
|
||||||
|
WorkDefinition wd = (WorkDefinition) o;
|
||||||
|
String name = wd.getName();
|
||||||
|
|
||||||
|
Place idle = myFactory.createPlace();
|
||||||
|
idle.setName(name + "_idle");
|
||||||
|
idle.setTokens(1);
|
||||||
|
Place started = myFactory.createPlace();
|
||||||
|
started.setName(name + "_started");
|
||||||
|
started.setTokens(0);
|
||||||
|
Place running = myFactory.createPlace();
|
||||||
|
running.setName(name + "_running");
|
||||||
|
running.setTokens(0);
|
||||||
|
Place finished = myFactory.createPlace();
|
||||||
|
finished.setName(name + "_finished");
|
||||||
|
finished.setTokens(0);
|
||||||
|
|
||||||
|
Arc pause2start = myFactory.createArc();
|
||||||
|
pause2start.setTarget(idle);
|
||||||
|
pause2start.setOutgoing(false);
|
||||||
|
pause2start.setWeight(1);
|
||||||
|
Arc start2running = myFactory.createArc();
|
||||||
|
start2running.setTarget(running);
|
||||||
|
start2running.setOutgoing(true);
|
||||||
|
start2running.setWeight(1);
|
||||||
|
Arc start2started = myFactory.createArc();
|
||||||
|
start2started.setTarget(started);
|
||||||
|
start2started.setOutgoing(true);
|
||||||
|
start2started.setWeight(1);
|
||||||
|
Transition start = myFactory.createTransition();
|
||||||
|
start.setName(name + "_start");
|
||||||
|
start.getArcs().add(pause2start);
|
||||||
|
start.getArcs().add(start2running);
|
||||||
|
start.getArcs().add(start2started);
|
||||||
|
|
||||||
|
Arc running2finish = myFactory.createArc();
|
||||||
|
running2finish.setTarget(running);
|
||||||
|
running2finish.setOutgoing(false);
|
||||||
|
running2finish.setWeight(1);
|
||||||
|
Arc finish2finished = myFactory.createArc();
|
||||||
|
finish2finished.setTarget(finished);
|
||||||
|
finish2finished.setOutgoing(true);
|
||||||
|
finish2finished.setWeight(1);
|
||||||
|
Transition finish = myFactory.createTransition();
|
||||||
|
finish.setName(name + "_finish");
|
||||||
|
finish.getArcs().add(running2finish);
|
||||||
|
finish.getArcs().add(finish2finished);
|
||||||
|
|
||||||
|
network.getNodes().add(idle);
|
||||||
|
network.getNodes().add(start);
|
||||||
|
network.getNodes().add(started);
|
||||||
|
network.getNodes().add(running);
|
||||||
|
network.getNodes().add(finish);
|
||||||
|
network.getNodes().add(finished);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Conversion des WorkSequence en Node et Transition
|
||||||
|
for (Object o : process.getProcessElements()) {
|
||||||
|
if (o instanceof WorkSequence) {
|
||||||
|
WorkSequence ws = (WorkSequence) o;
|
||||||
|
WorkSequenceType type = ws.getLinkType();
|
||||||
|
WorkDefinition predecessor = ws.getPredecessor();
|
||||||
|
WorkDefinition successor = ws.getSuccessor();
|
||||||
|
|
||||||
|
// creation des suffixs permettant la recherche des noeuds
|
||||||
|
String predecessor_suffix = new String();
|
||||||
|
String successor_suffix = new String();
|
||||||
|
switch (type) {
|
||||||
|
case START_TO_START:
|
||||||
|
predecessor_suffix = "_started";
|
||||||
|
successor_suffix = "_start";
|
||||||
|
break;
|
||||||
|
case START_TO_FINISH:
|
||||||
|
predecessor_suffix = "_started";
|
||||||
|
successor_suffix = "_finished";
|
||||||
|
break;
|
||||||
|
case FINISH_TO_START:
|
||||||
|
predecessor_suffix = "_finished";
|
||||||
|
successor_suffix = "_start";
|
||||||
|
break;
|
||||||
|
case FINISH_TO_FINISH:
|
||||||
|
predecessor_suffix = "_finished";
|
||||||
|
successor_suffix = "_finish";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
System.out.print("the fuck ?");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// creation du read-arc
|
||||||
|
Arc arc1 = myFactory.createArc();
|
||||||
|
arc1.setOutgoing(false);
|
||||||
|
arc1.setWeight(1);
|
||||||
|
Arc arc2 = myFactory.createArc();
|
||||||
|
arc2.setOutgoing(true);
|
||||||
|
arc2.setWeight(1);
|
||||||
|
|
||||||
|
for (Node node : network.getNodes()) {
|
||||||
|
if (node instanceof Place) {
|
||||||
|
Place place = (Place) node;
|
||||||
|
if (place.getName().equals(predecessor.getName() + predecessor_suffix)) {
|
||||||
|
arc1.setTarget(place);
|
||||||
|
arc2.setTarget(place);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (node instanceof Transition) {
|
||||||
|
Transition transition = (Transition) node;
|
||||||
|
if (transition.getName().equals(successor.getName() + successor_suffix)) {
|
||||||
|
transition.getArcs().add(arc1);
|
||||||
|
transition.getArcs().add(arc2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Conversion des WorkSequence en Node et Transition
|
||||||
|
for (Object o : process.getProcessElements()) {
|
||||||
|
if (o instanceof Resource) {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Créer le nouveau xmi (modèle convertit)
|
||||||
|
URI convURI = URI.createURI("models/Developpement_petrinet.xmi");
|
||||||
|
Resource conv = resSet.createResource(convURI);
|
||||||
|
|
||||||
|
// Ajouter le Network dans le nouveau modèle
|
||||||
|
conv.getContents().add(network);
|
||||||
|
|
||||||
|
// Sauver la ressource
|
||||||
|
try {
|
||||||
|
conv.save(Collections.EMPTY_MAP);
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
source.. = src/,\
|
||||||
|
src-gen/,\
|
||||||
|
xtend-gen/
|
||||||
|
bin.includes = META-INF/,\
|
||||||
|
.,\
|
||||||
|
plugin.xml
|
|
@ -0,0 +1,5 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<viewpoint:DAnalysis xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:viewpoint="http://www.eclipse.org/sirius/1.1.0" uid="_rlbscCtrEeyPENyXrdwYKQ" version="14.3.1.202003261200">
|
||||||
|
<semanticResources>PDL1.ecore</semanticResources>
|
||||||
|
<semanticResources>PDL1.genmodel</semanticResources>
|
||||||
|
</viewpoint:DAnalysis>
|
|
@ -0,0 +1,203 @@
|
||||||
|
package simplepdl.manip;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
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.resource.impl.ResourceSetImpl;
|
||||||
|
import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
|
||||||
|
|
||||||
|
import petrinet.Arc;
|
||||||
|
import petrinet.Network;
|
||||||
|
import petrinet.Node;
|
||||||
|
import petrinet.PetrinetFactory;
|
||||||
|
import petrinet.PetrinetPackage;
|
||||||
|
import petrinet.Place;
|
||||||
|
import petrinet.Transition;
|
||||||
|
import simplepdl.Process;
|
||||||
|
import simplepdl.SimplepdlPackage;
|
||||||
|
import simplepdl.WorkDefinition;
|
||||||
|
import simplepdl.WorkSequence;
|
||||||
|
import simplepdl.WorkSequenceType;
|
||||||
|
|
||||||
|
public class simplepdl2petrinet {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
|
||||||
|
// Charger les package SimplePDL et Petrinet afin de les enregistrer dans le registre d'Eclipse.
|
||||||
|
SimplepdlPackage packageInstance = SimplepdlPackage.eINSTANCE;
|
||||||
|
PetrinetPackage packageInstance2 = PetrinetPackage.eINSTANCE;
|
||||||
|
|
||||||
|
// Enregistrer l'extension ".xmi" comme devant être ouverte à
|
||||||
|
// l'aide d'un objet "XMIResourceFactoryImpl"
|
||||||
|
Resource.Factory.Registry reg = Resource.Factory.Registry.INSTANCE;
|
||||||
|
Map<String, Object> m = reg.getExtensionToFactoryMap();
|
||||||
|
m.put("xmi", new XMIResourceFactoryImpl());
|
||||||
|
|
||||||
|
// Créer un objet resourceSetImpl qui contiendra une ressource EMF (le modèle)
|
||||||
|
ResourceSet resSet = new ResourceSetImpl();
|
||||||
|
|
||||||
|
// Charger la ressource (notre modèle)
|
||||||
|
URI modelURI = URI.createURI("test.xmi");
|
||||||
|
Resource resource = resSet.getResource(modelURI, true);
|
||||||
|
|
||||||
|
// Récupérer le premier élément du modèle (élément racine)
|
||||||
|
Process process = (Process) resource.getContents().get(0);
|
||||||
|
|
||||||
|
// La fabrique pour fabriquer les éléments de PetriNET
|
||||||
|
PetrinetFactory myFactory = PetrinetFactory.eINSTANCE;
|
||||||
|
|
||||||
|
// Créer un élément Network
|
||||||
|
Network network = myFactory.createNetwork();
|
||||||
|
network.setName(process.getName());
|
||||||
|
|
||||||
|
// Conversion des WorkDefinition en Node et Transition
|
||||||
|
for (Object o : process.getProcessElements()) {
|
||||||
|
if (o instanceof WorkDefinition) {
|
||||||
|
WorkDefinition wd = (WorkDefinition) o;
|
||||||
|
String name = wd.getName();
|
||||||
|
|
||||||
|
Place idle = myFactory.createPlace();
|
||||||
|
idle.setName(name + "_idle");
|
||||||
|
idle.setTokens(1);
|
||||||
|
Place started = myFactory.createPlace();
|
||||||
|
started.setName(name + "_started");
|
||||||
|
started.setTokens(0);
|
||||||
|
Place running = myFactory.createPlace();
|
||||||
|
running.setName(name + "_running");
|
||||||
|
running.setTokens(0);
|
||||||
|
Place finished = myFactory.createPlace();
|
||||||
|
finished.setName(name + "_finished");
|
||||||
|
finished.setTokens(0);
|
||||||
|
|
||||||
|
Arc pause2start = myFactory.createArc();
|
||||||
|
pause2start.setTarget(idle);
|
||||||
|
pause2start.setOutgoing(false);
|
||||||
|
pause2start.setWeight(1);
|
||||||
|
Arc start2running = myFactory.createArc();
|
||||||
|
start2running.setTarget(running);
|
||||||
|
start2running.setOutgoing(true);
|
||||||
|
start2running.setWeight(1);
|
||||||
|
Arc start2started = myFactory.createArc();
|
||||||
|
start2started.setTarget(started);
|
||||||
|
start2started.setOutgoing(true);
|
||||||
|
start2started.setWeight(1);
|
||||||
|
Transition start = myFactory.createTransition();
|
||||||
|
start.setName(name + "_start");
|
||||||
|
start.getArcs().add(pause2start);
|
||||||
|
start.getArcs().add(start2running);
|
||||||
|
start.getArcs().add(start2started);
|
||||||
|
|
||||||
|
Arc running2finish = myFactory.createArc();
|
||||||
|
running2finish.setTarget(running);
|
||||||
|
running2finish.setOutgoing(false);
|
||||||
|
running2finish.setWeight(1);
|
||||||
|
Arc finish2finished = myFactory.createArc();
|
||||||
|
finish2finished.setTarget(finished);
|
||||||
|
finish2finished.setOutgoing(true);
|
||||||
|
finish2finished.setWeight(1);
|
||||||
|
Transition finish = myFactory.createTransition();
|
||||||
|
finish.setName(name + "_finish");
|
||||||
|
finish.getArcs().add(running2finish);
|
||||||
|
finish.getArcs().add(finish2finished);
|
||||||
|
|
||||||
|
network.getNodes().add(idle);
|
||||||
|
network.getNodes().add(start);
|
||||||
|
network.getNodes().add(started);
|
||||||
|
network.getNodes().add(running);
|
||||||
|
network.getNodes().add(finish);
|
||||||
|
network.getNodes().add(finished);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Conversion des WorkSequence en Node et Transition
|
||||||
|
for (Object o : process.getProcessElements()) {
|
||||||
|
if (o instanceof WorkSequence) {
|
||||||
|
WorkSequence ws = (WorkSequence) o;
|
||||||
|
WorkSequenceType type = ws.getLinkType();
|
||||||
|
WorkDefinition predecessor = ws.getPredecessor();
|
||||||
|
WorkDefinition successor = ws.getSuccessor();
|
||||||
|
|
||||||
|
// creation des suffixs permettant la recherche des noeuds
|
||||||
|
String predecessor_suffix = new String();
|
||||||
|
String successor_suffix = new String();
|
||||||
|
switch (type) {
|
||||||
|
case START_TO_START:
|
||||||
|
predecessor_suffix = "_started";
|
||||||
|
successor_suffix = "_start";
|
||||||
|
break;
|
||||||
|
case START_TO_FINISH:
|
||||||
|
predecessor_suffix = "_started";
|
||||||
|
successor_suffix = "_finished";
|
||||||
|
break;
|
||||||
|
case FINISH_TO_START:
|
||||||
|
predecessor_suffix = "_finished";
|
||||||
|
successor_suffix = "_start";
|
||||||
|
break;
|
||||||
|
case FINISH_TO_FINISH:
|
||||||
|
predecessor_suffix = "_finished";
|
||||||
|
successor_suffix = "_finish";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
System.out.print("the fuck ?");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// creation du read-arc
|
||||||
|
Arc arc1 = myFactory.createArc();
|
||||||
|
arc1.setOutgoing(false);
|
||||||
|
arc1.setWeight(1);
|
||||||
|
Arc arc2 = myFactory.createArc();
|
||||||
|
arc2.setOutgoing(true);
|
||||||
|
arc2.setWeight(1);
|
||||||
|
|
||||||
|
for (Node node : network.getNodes()) {
|
||||||
|
if (node instanceof Place) {
|
||||||
|
Place place = (Place) node;
|
||||||
|
if (place.getName().equals(predecessor.getName() + predecessor_suffix)) {
|
||||||
|
arc1.setTarget(place);
|
||||||
|
arc2.setTarget(place);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (node instanceof Transition) {
|
||||||
|
Transition transition = (Transition) node;
|
||||||
|
if (transition.getName().equals(successor.getName() + successor_suffix)) {
|
||||||
|
transition.getArcs().add(arc1);
|
||||||
|
transition.getArcs().add(arc2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Conversion des WorkSequence en Node et Transition
|
||||||
|
for (Object o : process.getProcessElements()) {
|
||||||
|
if (o instanceof Resource) {
|
||||||
|
|
||||||
|
simplepdl.Resource r = (simplepdl.Resource) o;
|
||||||
|
int qty = r.getQuantity();
|
||||||
|
|
||||||
|
System.out.println(qty);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Créer le nouveau xmi (modèle convertit)
|
||||||
|
URI convURI = URI.createURI("models/Developpement_petrinet.xmi");
|
||||||
|
Resource conv = resSet.createResource(convURI);
|
||||||
|
|
||||||
|
// Ajouter le Network dans le nouveau modèle
|
||||||
|
conv.getContents().add(network);
|
||||||
|
|
||||||
|
// Sauver la ressource
|
||||||
|
try {
|
||||||
|
conv.save(Collections.EMPTY_MAP);
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
source.. = src/,\
|
||||||
|
src-gen/,\
|
||||||
|
xtend-gen/
|
||||||
|
bin.includes = META-INF/,\
|
||||||
|
.,\
|
||||||
|
plugin.xml
|
|
@ -0,0 +1,12 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<simplepdl:Process xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:simplepdl="http://simplepdl" name="Developpement">
|
||||||
|
<processElements xsi:type="simplepdl:WorkDefinition" linksToSuccessors="//@processElements.4 //@processElements.6 //@processElements.7 //@processElements.8" name="Conception"/>
|
||||||
|
<processElements xsi:type="simplepdl:WorkDefinition" linksToPredecessors="//@processElements.4" linksToSuccessors="//@processElements.5" name="Programmation"/>
|
||||||
|
<processElements xsi:type="simplepdl:WorkDefinition" linksToPredecessors="//@processElements.5 //@processElements.6" name="RedactionTests"/>
|
||||||
|
<processElements xsi:type="simplepdl:WorkDefinition" linksToPredecessors="//@processElements.7 //@processElements.8" name="RedactionDocs"/>
|
||||||
|
<processElements xsi:type="simplepdl:WorkSequence" linkType="finishToStart" predecessor="//@processElements.0" successor="//@processElements.1"/>
|
||||||
|
<processElements xsi:type="simplepdl:WorkSequence" linkType="finishToFinish" predecessor="//@processElements.1" successor="//@processElements.2"/>
|
||||||
|
<processElements xsi:type="simplepdl:WorkSequence" predecessor="//@processElements.0" successor="//@processElements.2"/>
|
||||||
|
<processElements xsi:type="simplepdl:WorkSequence" predecessor="//@processElements.0" successor="//@processElements.3"/>
|
||||||
|
<processElements xsi:type="simplepdl:WorkSequence" linkType="finishToFinish" predecessor="//@processElements.0" successor="//@processElements.3"/>
|
||||||
|
</simplepdl:Process>
|
|
@ -0,0 +1,29 @@
|
||||||
|
grammar fr.n7.PDL1 with org.eclipse.xtext.common.Terminals
|
||||||
|
generate pDL1 "http://www.n7.fr/PDL1"
|
||||||
|
|
||||||
|
Process :
|
||||||
|
'process' ':' name=ID
|
||||||
|
processElements+=ProcessElement* ;
|
||||||
|
|
||||||
|
|
||||||
|
ProcessElement :
|
||||||
|
WorkDefinitionList | WorkSequenceList ;
|
||||||
|
|
||||||
|
WorkDefinitionList :
|
||||||
|
'workdefinitions' ':' WorkDefinition+=WorkDefinition* ;
|
||||||
|
|
||||||
|
WorkDefinition :
|
||||||
|
name=ID ";" ;
|
||||||
|
|
||||||
|
WorkSequenceList :
|
||||||
|
'worksequences' ':' WorkSequence+=WorkSequence* ;
|
||||||
|
|
||||||
|
WorkSequence :
|
||||||
|
predecessor=[WorkDefinition] linkType=WorkSequenceType successor=[WorkDefinition] ;
|
||||||
|
|
||||||
|
enum WorkSequenceType :
|
||||||
|
start2start = 's2s'
|
||||||
|
| finish2start = 'f2s'
|
||||||
|
| start2finish = 's2f'
|
||||||
|
| finish2finish = 'f2f'
|
||||||
|
;
|
|
@ -0,0 +1,30 @@
|
||||||
|
grammar fr.n7.PDL1 with org.eclipse.xtext.common.Terminals
|
||||||
|
generate pDL1 "http://www.n7.fr/PDL1"
|
||||||
|
|
||||||
|
Process :
|
||||||
|
'process' ':' name=ID
|
||||||
|
processElements+=ProcessElement* ;
|
||||||
|
|
||||||
|
|
||||||
|
ProcessElement :
|
||||||
|
WorkDefinitionList | WorkSequenceList ;
|
||||||
|
|
||||||
|
WorkDefinitionList :
|
||||||
|
'workdefinitions' ':' WorkDefinition+=WorkDefinition* ;
|
||||||
|
|
||||||
|
WorkDefinition :
|
||||||
|
name=ID ";" ;
|
||||||
|
|
||||||
|
WorkSequenceList :
|
||||||
|
'worksequences' ':' WorkSequence+=WorkSequence* ;
|
||||||
|
|
||||||
|
WorkSequence :
|
||||||
|
predecessor=[WorkDefinition] linkType=WorkSequenceType successor=[WorkDefinition];
|
||||||
|
|
||||||
|
|
||||||
|
enum WorkSequenceType :
|
||||||
|
start2start = 's2s'
|
||||||
|
| finish2start = 'f2s'
|
||||||
|
| start2finish = 's2f'
|
||||||
|
| finish2finish = 'f2f'
|
||||||
|
;
|
|
@ -0,0 +1,31 @@
|
||||||
|
grammar fr.n7.PDL1 with org.eclipse.xtext.common.Terminals
|
||||||
|
generate pDL1 "http://www.n7.fr/PDL1"
|
||||||
|
|
||||||
|
Process :
|
||||||
|
'process' ':' name=ID
|
||||||
|
processElements+=ProcessElement* ;
|
||||||
|
|
||||||
|
|
||||||
|
ProcessElement :
|
||||||
|
WorkDefinitionList | WorkSequence | Guidance;
|
||||||
|
|
||||||
|
WorkDefinitionList :
|
||||||
|
'workdefinitions' ':' WorkDefinition+ ;
|
||||||
|
|
||||||
|
WorkDefinition :
|
||||||
|
name=ID ";" ;
|
||||||
|
|
||||||
|
WorkSequence :
|
||||||
|
'ws' linkType=WorkSequenceType
|
||||||
|
'from' predecessor=[WorkDefinition]
|
||||||
|
'to' successor=[WorkDefinition] ;
|
||||||
|
|
||||||
|
Guidance :
|
||||||
|
'note' texte=STRING ;
|
||||||
|
|
||||||
|
enum WorkSequenceType :
|
||||||
|
start2start = 's2s'
|
||||||
|
| finish2start = 'f2s'
|
||||||
|
| start2finish = 's2f'
|
||||||
|
| finish2finish = 'f2f'
|
||||||
|
;
|
|
@ -0,0 +1,191 @@
|
||||||
|
package simplepdl.manip;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
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.resource.impl.ResourceSetImpl;
|
||||||
|
import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
|
||||||
|
|
||||||
|
import petrinet.PetrinetPackage;
|
||||||
|
import petrinet.Place;
|
||||||
|
import petrinet.Transition;
|
||||||
|
import petrinet.Arc;
|
||||||
|
import petrinet.Network;
|
||||||
|
import petrinet.Node;
|
||||||
|
import petrinet.PetrinetFactory;
|
||||||
|
import simplepdl.Process;
|
||||||
|
import simplepdl.WorkDefinition;
|
||||||
|
import simplepdl.WorkSequence;
|
||||||
|
import simplepdl.WorkSequenceType;
|
||||||
|
import simplepdl.SimplepdlPackage;
|
||||||
|
|
||||||
|
public class simplepdl2petrinet {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
|
||||||
|
// Charger les package SimplePDL et Petrinet afin de les enregistrer dans le registre d'Eclipse.
|
||||||
|
SimplepdlPackage packageInstance = SimplepdlPackage.eINSTANCE;
|
||||||
|
PetrinetPackage packageInstance2 = PetrinetPackage.eINSTANCE;
|
||||||
|
|
||||||
|
// Enregistrer l'extension ".xmi" comme devant être ouverte à
|
||||||
|
// l'aide d'un objet "XMIResourceFactoryImpl"
|
||||||
|
Resource.Factory.Registry reg = Resource.Factory.Registry.INSTANCE;
|
||||||
|
Map<String, Object> m = reg.getExtensionToFactoryMap();
|
||||||
|
m.put("xmi", new XMIResourceFactoryImpl());
|
||||||
|
|
||||||
|
// Créer un objet resourceSetImpl qui contiendra une ressource EMF (le modèle)
|
||||||
|
ResourceSet resSet = new ResourceSetImpl();
|
||||||
|
|
||||||
|
// Charger la ressource (notre modèle)
|
||||||
|
URI modelURI = URI.createURI("test.xmi");
|
||||||
|
Resource resource = resSet.getResource(modelURI, true);
|
||||||
|
|
||||||
|
// Récupérer le premier élément du modèle (élément racine)
|
||||||
|
Process process = (Process) resource.getContents().get(0);
|
||||||
|
|
||||||
|
// La fabrique pour fabriquer les éléments de PetriNET
|
||||||
|
PetrinetFactory myFactory = PetrinetFactory.eINSTANCE;
|
||||||
|
|
||||||
|
// Créer un élément Network
|
||||||
|
Network network = myFactory.createNetwork();
|
||||||
|
network.setName(process.getName());
|
||||||
|
|
||||||
|
// Conversion des WorkDefinition en Node et Transition
|
||||||
|
for (Object o : process.getProcessElements()) {
|
||||||
|
if (o instanceof WorkDefinition) {
|
||||||
|
WorkDefinition wd = (WorkDefinition) o;
|
||||||
|
String name = wd.getName();
|
||||||
|
|
||||||
|
Place idle = myFactory.createPlace();
|
||||||
|
idle.setName(name + "_idle");
|
||||||
|
idle.setTokens(1);
|
||||||
|
Place started = myFactory.createPlace();
|
||||||
|
started.setName(name + "_started");
|
||||||
|
started.setTokens(0);
|
||||||
|
Place running = myFactory.createPlace();
|
||||||
|
running.setName(name + "_running");
|
||||||
|
running.setTokens(0);
|
||||||
|
Place finished = myFactory.createPlace();
|
||||||
|
finished.setName(name + "_finished");
|
||||||
|
finished.setTokens(0);
|
||||||
|
|
||||||
|
Arc pause2start = myFactory.createArc();
|
||||||
|
pause2start.setTarget(idle);
|
||||||
|
pause2start.setOutgoing(false);
|
||||||
|
pause2start.setWeight(1);
|
||||||
|
Arc start2running = myFactory.createArc();
|
||||||
|
start2running.setTarget(running);
|
||||||
|
start2running.setOutgoing(true);
|
||||||
|
start2running.setWeight(1);
|
||||||
|
Arc start2started = myFactory.createArc();
|
||||||
|
start2started.setTarget(started);
|
||||||
|
start2started.setOutgoing(true);
|
||||||
|
start2started.setWeight(1);
|
||||||
|
Transition start = myFactory.createTransition();
|
||||||
|
start.setName(name + "_start");
|
||||||
|
start.getArcs().add(pause2start);
|
||||||
|
start.getArcs().add(start2running);
|
||||||
|
start.getArcs().add(start2started);
|
||||||
|
|
||||||
|
Arc running2finish = myFactory.createArc();
|
||||||
|
running2finish.setTarget(running);
|
||||||
|
running2finish.setOutgoing(false);
|
||||||
|
running2finish.setWeight(1);
|
||||||
|
Arc finish2finished = myFactory.createArc();
|
||||||
|
finish2finished.setTarget(finished);
|
||||||
|
finish2finished.setOutgoing(true);
|
||||||
|
finish2finished.setWeight(1);
|
||||||
|
Transition finish = myFactory.createTransition();
|
||||||
|
finish.setName(name + "_finish");
|
||||||
|
finish.getArcs().add(running2finish);
|
||||||
|
finish.getArcs().add(finish2finished);
|
||||||
|
|
||||||
|
network.getNodes().add(idle);
|
||||||
|
network.getNodes().add(start);
|
||||||
|
network.getNodes().add(started);
|
||||||
|
network.getNodes().add(running);
|
||||||
|
network.getNodes().add(finish);
|
||||||
|
network.getNodes().add(finished);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Conversion des WorkSequence en Node et Transition
|
||||||
|
for (Object o : process.getProcessElements()) {
|
||||||
|
if (o instanceof WorkSequence) {
|
||||||
|
WorkSequence ws = (WorkSequence) o;
|
||||||
|
WorkSequenceType type = ws.getLinkType();
|
||||||
|
WorkDefinition predecessor = ws.getPredecessor();
|
||||||
|
WorkDefinition successor = ws.getSuccessor();
|
||||||
|
|
||||||
|
// creation des suffixs permettant la recherche des noeuds
|
||||||
|
String predecessor_suffix = new String();
|
||||||
|
String successor_suffix = new String();
|
||||||
|
switch (type) {
|
||||||
|
case START_TO_START:
|
||||||
|
predecessor_suffix = "_started";
|
||||||
|
successor_suffix = "_start";
|
||||||
|
break;
|
||||||
|
case START_TO_FINISH:
|
||||||
|
predecessor_suffix = "_started";
|
||||||
|
successor_suffix = "_finished";
|
||||||
|
break;
|
||||||
|
case FINISH_TO_START:
|
||||||
|
predecessor_suffix = "_finished";
|
||||||
|
successor_suffix = "_start";
|
||||||
|
break;
|
||||||
|
case FINISH_TO_FINISH:
|
||||||
|
predecessor_suffix = "_finished";
|
||||||
|
successor_suffix = "_finish";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
System.out.print("the fuck ?");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// creation du read-arc
|
||||||
|
Arc arc1 = myFactory.createArc();
|
||||||
|
arc1.setOutgoing(false);
|
||||||
|
arc1.setWeight(1);
|
||||||
|
Arc arc2 = myFactory.createArc();
|
||||||
|
arc2.setOutgoing(true);
|
||||||
|
arc2.setWeight(1);
|
||||||
|
|
||||||
|
for (Node node : network.getNodes()) {
|
||||||
|
if (node instanceof Place) {
|
||||||
|
Place place = (Place) node;
|
||||||
|
if (place.getName().equals(predecessor.getName() + predecessor_suffix)) {
|
||||||
|
arc1.setTarget(place);
|
||||||
|
arc2.setTarget(place);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (node instanceof Transition) {
|
||||||
|
Transition transition = (Transition) node;
|
||||||
|
if (transition.getName().equals(successor.getName() + successor_suffix)) {
|
||||||
|
transition.getArcs().add(arc1);
|
||||||
|
transition.getArcs().add(arc2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Créer le nouveau xmi (modèle convertit)
|
||||||
|
URI convURI = URI.createURI("models/Developpement_petrinet.xmi");
|
||||||
|
Resource conv = resSet.createResource(convURI);
|
||||||
|
|
||||||
|
// Ajouter le Network dans le nouveau modèle
|
||||||
|
conv.getContents().add(network);
|
||||||
|
|
||||||
|
// Sauver la ressource
|
||||||
|
try {
|
||||||
|
conv.save(Collections.EMPTY_MAP);
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
source.. = src/,\
|
||||||
|
src-gen/,\
|
||||||
|
xtend-gen/
|
||||||
|
bin.includes = META-INF/,\
|
||||||
|
.,\
|
||||||
|
plugin.xml
|
|
@ -0,0 +1,203 @@
|
||||||
|
package simplepdl.manip;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
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.resource.impl.ResourceSetImpl;
|
||||||
|
import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
|
||||||
|
|
||||||
|
import petrinet.Arc;
|
||||||
|
import petrinet.Network;
|
||||||
|
import petrinet.Node;
|
||||||
|
import petrinet.PetrinetFactory;
|
||||||
|
import petrinet.PetrinetPackage;
|
||||||
|
import petrinet.Place;
|
||||||
|
import petrinet.Transition;
|
||||||
|
import simplepdl.Process;
|
||||||
|
import simplepdl.SimplepdlPackage;
|
||||||
|
import simplepdl.WorkDefinition;
|
||||||
|
import simplepdl.WorkSequence;
|
||||||
|
import simplepdl.WorkSequenceType;
|
||||||
|
|
||||||
|
public class simplepdl2petrinet {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
|
||||||
|
// Charger les package SimplePDL et Petrinet afin de les enregistrer dans le registre d'Eclipse.
|
||||||
|
SimplepdlPackage packageInstance = SimplepdlPackage.eINSTANCE;
|
||||||
|
PetrinetPackage packageInstance2 = PetrinetPackage.eINSTANCE;
|
||||||
|
|
||||||
|
// Enregistrer l'extension ".xmi" comme devant être ouverte à
|
||||||
|
// l'aide d'un objet "XMIResourceFactoryImpl"
|
||||||
|
Resource.Factory.Registry reg = Resource.Factory.Registry.INSTANCE;
|
||||||
|
Map<String, Object> m = reg.getExtensionToFactoryMap();
|
||||||
|
m.put("xmi", new XMIResourceFactoryImpl());
|
||||||
|
|
||||||
|
// Créer un objet resourceSetImpl qui contiendra une ressource EMF (le modèle)
|
||||||
|
ResourceSet resSet = new ResourceSetImpl();
|
||||||
|
|
||||||
|
// Charger la ressource (notre modèle)
|
||||||
|
URI modelURI = URI.createURI("test.xmi");
|
||||||
|
Resource resource = resSet.getResource(modelURI, true);
|
||||||
|
|
||||||
|
// Récupérer le premier élément du modèle (élément racine)
|
||||||
|
Process process = (Process) resource.getContents().get(0);
|
||||||
|
|
||||||
|
// La fabrique pour fabriquer les éléments de PetriNET
|
||||||
|
PetrinetFactory myFactory = PetrinetFactory.eINSTANCE;
|
||||||
|
|
||||||
|
// Créer un élément Network
|
||||||
|
Network network = myFactory.createNetwork();
|
||||||
|
network.setName(process.getName());
|
||||||
|
|
||||||
|
// Conversion des WorkDefinition en Node et Transition
|
||||||
|
for (Object o : process.getProcessElements()) {
|
||||||
|
if (o instanceof WorkDefinition) {
|
||||||
|
WorkDefinition wd = (WorkDefinition) o;
|
||||||
|
String name = wd.getName();
|
||||||
|
|
||||||
|
Place idle = myFactory.createPlace();
|
||||||
|
idle.setName(name + "_idle");
|
||||||
|
idle.setTokens(1);
|
||||||
|
Place started = myFactory.createPlace();
|
||||||
|
started.setName(name + "_started");
|
||||||
|
started.setTokens(0);
|
||||||
|
Place running = myFactory.createPlace();
|
||||||
|
running.setName(name + "_running");
|
||||||
|
running.setTokens(0);
|
||||||
|
Place finished = myFactory.createPlace();
|
||||||
|
finished.setName(name + "_finished");
|
||||||
|
finished.setTokens(0);
|
||||||
|
|
||||||
|
Arc pause2start = myFactory.createArc();
|
||||||
|
pause2start.setTarget(idle);
|
||||||
|
pause2start.setOutgoing(false);
|
||||||
|
pause2start.setWeight(1);
|
||||||
|
Arc start2running = myFactory.createArc();
|
||||||
|
start2running.setTarget(running);
|
||||||
|
start2running.setOutgoing(true);
|
||||||
|
start2running.setWeight(1);
|
||||||
|
Arc start2started = myFactory.createArc();
|
||||||
|
start2started.setTarget(started);
|
||||||
|
start2started.setOutgoing(true);
|
||||||
|
start2started.setWeight(1);
|
||||||
|
Transition start = myFactory.createTransition();
|
||||||
|
start.setName(name + "_start");
|
||||||
|
start.getArcs().add(pause2start);
|
||||||
|
start.getArcs().add(start2running);
|
||||||
|
start.getArcs().add(start2started);
|
||||||
|
|
||||||
|
Arc running2finish = myFactory.createArc();
|
||||||
|
running2finish.setTarget(running);
|
||||||
|
running2finish.setOutgoing(false);
|
||||||
|
running2finish.setWeight(1);
|
||||||
|
Arc finish2finished = myFactory.createArc();
|
||||||
|
finish2finished.setTarget(finished);
|
||||||
|
finish2finished.setOutgoing(true);
|
||||||
|
finish2finished.setWeight(1);
|
||||||
|
Transition finish = myFactory.createTransition();
|
||||||
|
finish.setName(name + "_finish");
|
||||||
|
finish.getArcs().add(running2finish);
|
||||||
|
finish.getArcs().add(finish2finished);
|
||||||
|
|
||||||
|
network.getNodes().add(idle);
|
||||||
|
network.getNodes().add(start);
|
||||||
|
network.getNodes().add(started);
|
||||||
|
network.getNodes().add(running);
|
||||||
|
network.getNodes().add(finish);
|
||||||
|
network.getNodes().add(finished);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Conversion des WorkSequence en Node et Transition
|
||||||
|
for (Object o : process.getProcessElements()) {
|
||||||
|
if (o instanceof WorkSequence) {
|
||||||
|
WorkSequence ws = (WorkSequence) o;
|
||||||
|
WorkSequenceType type = ws.getLinkType();
|
||||||
|
WorkDefinition predecessor = ws.getPredecessor();
|
||||||
|
WorkDefinition successor = ws.getSuccessor();
|
||||||
|
|
||||||
|
// creation des suffixs permettant la recherche des noeuds
|
||||||
|
String predecessor_suffix = new String();
|
||||||
|
String successor_suffix = new String();
|
||||||
|
switch (type) {
|
||||||
|
case START_TO_START:
|
||||||
|
predecessor_suffix = "_started";
|
||||||
|
successor_suffix = "_start";
|
||||||
|
break;
|
||||||
|
case START_TO_FINISH:
|
||||||
|
predecessor_suffix = "_started";
|
||||||
|
successor_suffix = "_finished";
|
||||||
|
break;
|
||||||
|
case FINISH_TO_START:
|
||||||
|
predecessor_suffix = "_finished";
|
||||||
|
successor_suffix = "_start";
|
||||||
|
break;
|
||||||
|
case FINISH_TO_FINISH:
|
||||||
|
predecessor_suffix = "_finished";
|
||||||
|
successor_suffix = "_finish";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
System.out.print("the fuck ?");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// creation du read-arc
|
||||||
|
Arc arc1 = myFactory.createArc();
|
||||||
|
arc1.setOutgoing(false);
|
||||||
|
arc1.setWeight(1);
|
||||||
|
Arc arc2 = myFactory.createArc();
|
||||||
|
arc2.setOutgoing(true);
|
||||||
|
arc2.setWeight(1);
|
||||||
|
|
||||||
|
for (Node node : network.getNodes()) {
|
||||||
|
if (node instanceof Place) {
|
||||||
|
Place place = (Place) node;
|
||||||
|
if (place.getName().equals(predecessor.getName() + predecessor_suffix)) {
|
||||||
|
arc1.setTarget(place);
|
||||||
|
arc2.setTarget(place);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (node instanceof Transition) {
|
||||||
|
Transition transition = (Transition) node;
|
||||||
|
if (transition.getName().equals(successor.getName() + successor_suffix)) {
|
||||||
|
transition.getArcs().add(arc1);
|
||||||
|
transition.getArcs().add(arc2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Conversion des WorkSequence en Node et Transition
|
||||||
|
for (Object o : process.getProcessElements()) {
|
||||||
|
if (o instanceof simplepdl.Resource) {
|
||||||
|
|
||||||
|
simplepdl.Resource r = (simplepdl.Resource) o;
|
||||||
|
int qty = r.getQuantity();
|
||||||
|
|
||||||
|
System.out.println(qty);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Créer le nouveau xmi (modèle convertit)
|
||||||
|
URI convURI = URI.createURI("models/Developpement_petrinet.xmi");
|
||||||
|
Resource conv = resSet.createResource(convURI);
|
||||||
|
|
||||||
|
// Ajouter le Network dans le nouveau modèle
|
||||||
|
conv.getContents().add(network);
|
||||||
|
|
||||||
|
// Sauver la ressource
|
||||||
|
try {
|
||||||
|
conv.save(Collections.EMPTY_MAP);
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,205 @@
|
||||||
|
package simplepdl.manip;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
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.resource.impl.ResourceSetImpl;
|
||||||
|
import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
|
||||||
|
|
||||||
|
import petrinet.Arc;
|
||||||
|
import petrinet.Network;
|
||||||
|
import petrinet.Node;
|
||||||
|
import petrinet.PetrinetFactory;
|
||||||
|
import petrinet.PetrinetPackage;
|
||||||
|
import petrinet.Place;
|
||||||
|
import petrinet.Transition;
|
||||||
|
import simplepdl.Process;
|
||||||
|
import simplepdl.SimplepdlPackage;
|
||||||
|
import simplepdl.WorkDefinition;
|
||||||
|
import simplepdl.WorkSequence;
|
||||||
|
import simplepdl.WorkSequenceType;
|
||||||
|
|
||||||
|
public class simplepdl2petrinet {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
|
||||||
|
// Charger les package SimplePDL et Petrinet afin de les enregistrer dans le registre d'Eclipse.
|
||||||
|
SimplepdlPackage packageInstance = SimplepdlPackage.eINSTANCE;
|
||||||
|
PetrinetPackage packageInstance2 = PetrinetPackage.eINSTANCE;
|
||||||
|
|
||||||
|
// Enregistrer l'extension ".xmi" comme devant être ouverte à
|
||||||
|
// l'aide d'un objet "XMIResourceFactoryImpl"
|
||||||
|
Resource.Factory.Registry reg = Resource.Factory.Registry.INSTANCE;
|
||||||
|
Map<String, Object> m = reg.getExtensionToFactoryMap();
|
||||||
|
m.put("xmi", new XMIResourceFactoryImpl());
|
||||||
|
|
||||||
|
// Créer un objet resourceSetImpl qui contiendra une ressource EMF (le modèle)
|
||||||
|
ResourceSet resSet = new ResourceSetImpl();
|
||||||
|
|
||||||
|
// Charger la ressource (notre modèle)
|
||||||
|
URI modelURI = URI.createURI("test.xmi");
|
||||||
|
Resource resource = resSet.getResource(modelURI, true);
|
||||||
|
|
||||||
|
// Récupérer le premier élément du modèle (élément racine)
|
||||||
|
Process process = (Process) resource.getContents().get(0);
|
||||||
|
|
||||||
|
// La fabrique pour fabriquer les éléments de PetriNET
|
||||||
|
PetrinetFactory myFactory = PetrinetFactory.eINSTANCE;
|
||||||
|
|
||||||
|
// Créer un élément Network
|
||||||
|
Network network = myFactory.createNetwork();
|
||||||
|
network.setName(process.getName());
|
||||||
|
|
||||||
|
// Conversion des WorkDefinition en Node et Transition
|
||||||
|
for (Object o : process.getProcessElements()) {
|
||||||
|
if (o instanceof WorkDefinition) {
|
||||||
|
WorkDefinition wd = (WorkDefinition) o;
|
||||||
|
String name = wd.getName();
|
||||||
|
|
||||||
|
Place idle = myFactory.createPlace();
|
||||||
|
idle.setName(name + "_idle");
|
||||||
|
idle.setTokens(1);
|
||||||
|
Place started = myFactory.createPlace();
|
||||||
|
started.setName(name + "_started");
|
||||||
|
started.setTokens(0);
|
||||||
|
Place running = myFactory.createPlace();
|
||||||
|
running.setName(name + "_running");
|
||||||
|
running.setTokens(0);
|
||||||
|
Place finished = myFactory.createPlace();
|
||||||
|
finished.setName(name + "_finished");
|
||||||
|
finished.setTokens(0);
|
||||||
|
|
||||||
|
Arc pause2start = myFactory.createArc();
|
||||||
|
pause2start.setTarget(idle);
|
||||||
|
pause2start.setOutgoing(false);
|
||||||
|
pause2start.setWeight(1);
|
||||||
|
Arc start2running = myFactory.createArc();
|
||||||
|
start2running.setTarget(running);
|
||||||
|
start2running.setOutgoing(true);
|
||||||
|
start2running.setWeight(1);
|
||||||
|
Arc start2started = myFactory.createArc();
|
||||||
|
start2started.setTarget(started);
|
||||||
|
start2started.setOutgoing(true);
|
||||||
|
start2started.setWeight(1);
|
||||||
|
Transition start = myFactory.createTransition();
|
||||||
|
start.setName(name + "_start");
|
||||||
|
start.getArcs().add(pause2start);
|
||||||
|
start.getArcs().add(start2running);
|
||||||
|
start.getArcs().add(start2started);
|
||||||
|
|
||||||
|
Arc running2finish = myFactory.createArc();
|
||||||
|
running2finish.setTarget(running);
|
||||||
|
running2finish.setOutgoing(false);
|
||||||
|
running2finish.setWeight(1);
|
||||||
|
Arc finish2finished = myFactory.createArc();
|
||||||
|
finish2finished.setTarget(finished);
|
||||||
|
finish2finished.setOutgoing(true);
|
||||||
|
finish2finished.setWeight(1);
|
||||||
|
Transition finish = myFactory.createTransition();
|
||||||
|
finish.setName(name + "_finish");
|
||||||
|
finish.getArcs().add(running2finish);
|
||||||
|
finish.getArcs().add(finish2finished);
|
||||||
|
|
||||||
|
network.getNodes().add(idle);
|
||||||
|
network.getNodes().add(start);
|
||||||
|
network.getNodes().add(started);
|
||||||
|
network.getNodes().add(running);
|
||||||
|
network.getNodes().add(finish);
|
||||||
|
network.getNodes().add(finished);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Conversion des WorkSequence en Node et Transition
|
||||||
|
for (Object o : process.getProcessElements()) {
|
||||||
|
if (o instanceof WorkSequence) {
|
||||||
|
WorkSequence ws = (WorkSequence) o;
|
||||||
|
WorkSequenceType type = ws.getLinkType();
|
||||||
|
WorkDefinition predecessor = ws.getPredecessor();
|
||||||
|
WorkDefinition successor = ws.getSuccessor();
|
||||||
|
|
||||||
|
// creation des suffixs permettant la recherche des noeuds
|
||||||
|
String predecessor_suffix = new String();
|
||||||
|
String successor_suffix = new String();
|
||||||
|
switch (type) {
|
||||||
|
case START_TO_START:
|
||||||
|
predecessor_suffix = "_started";
|
||||||
|
successor_suffix = "_start";
|
||||||
|
break;
|
||||||
|
case START_TO_FINISH:
|
||||||
|
predecessor_suffix = "_started";
|
||||||
|
successor_suffix = "_finished";
|
||||||
|
break;
|
||||||
|
case FINISH_TO_START:
|
||||||
|
predecessor_suffix = "_finished";
|
||||||
|
successor_suffix = "_start";
|
||||||
|
break;
|
||||||
|
case FINISH_TO_FINISH:
|
||||||
|
predecessor_suffix = "_finished";
|
||||||
|
successor_suffix = "_finish";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
System.out.print("the fuck ?");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// creation du read-arc
|
||||||
|
Arc arc1 = myFactory.createArc();
|
||||||
|
arc1.setOutgoing(false);
|
||||||
|
arc1.setWeight(1);
|
||||||
|
Arc arc2 = myFactory.createArc();
|
||||||
|
arc2.setOutgoing(true);
|
||||||
|
arc2.setWeight(1);
|
||||||
|
|
||||||
|
for (Node node : network.getNodes()) {
|
||||||
|
if (node instanceof Place) {
|
||||||
|
Place place = (Place) node;
|
||||||
|
if (place.getName().equals(predecessor.getName() + predecessor_suffix)) {
|
||||||
|
arc1.setTarget(place);
|
||||||
|
arc2.setTarget(place);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (node instanceof Transition) {
|
||||||
|
Transition transition = (Transition) node;
|
||||||
|
if (transition.getName().equals(successor.getName() + successor_suffix)) {
|
||||||
|
transition.getArcs().add(arc1);
|
||||||
|
transition.getArcs().add(arc2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
System.out.println("test");
|
||||||
|
|
||||||
|
// Conversion des WorkSequence en Node et Transition
|
||||||
|
for (Object o : process.getProcessElements()) {
|
||||||
|
if (o instanceof Resource) {
|
||||||
|
|
||||||
|
simplepdl.Resource r = (simplepdl.Resource) o;
|
||||||
|
int qty = r.getQuantity();
|
||||||
|
|
||||||
|
System.out.println(qty);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Créer le nouveau xmi (modèle convertit)
|
||||||
|
URI convURI = URI.createURI("models/Developpement_petrinet.xmi");
|
||||||
|
Resource conv = resSet.createResource(convURI);
|
||||||
|
|
||||||
|
// Ajouter le Network dans le nouveau modèle
|
||||||
|
conv.getContents().add(network);
|
||||||
|
|
||||||
|
// Sauver la ressource
|
||||||
|
try {
|
||||||
|
conv.save(Collections.EMPTY_MAP);
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
source.. = src/,\
|
||||||
|
src-gen/,\
|
||||||
|
xtend-gen/
|
||||||
|
bin.includes = META-INF/,\
|
||||||
|
.,\
|
||||||
|
plugin.xml
|
|
@ -1,86 +0,0 @@
|
||||||
package simplepdl.manip;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
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.resource.impl.ResourceSetImpl;
|
|
||||||
import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
|
|
||||||
|
|
||||||
import simplepdl.Process;
|
|
||||||
import simplepdl.WorkDefinition;
|
|
||||||
import simplepdl.WorkSequence;
|
|
||||||
import simplepdl.WorkSequenceType;
|
|
||||||
import simplepdl.SimplepdlFactory;
|
|
||||||
import simplepdl.SimplepdlPackage;
|
|
||||||
|
|
||||||
public class simplepdl2petrinet {
|
|
||||||
|
|
||||||
public static void main(String[] args) {
|
|
||||||
|
|
||||||
// Charger le package SimplePDL afin de l'enregistrer dans le registre d'Eclipse.
|
|
||||||
SimplepdlPackage packageInstance = SimplepdlPackage.eINSTANCE;
|
|
||||||
PetrinetPackage packageInstance2 = PetrinetPackage.eINSTANCE;
|
|
||||||
|
|
||||||
// Enregistrer l'extension ".xmi" comme devant être ouverte Ã
|
|
||||||
// l'aide d'un objet "XMIResourceFactoryImpl"
|
|
||||||
Resource.Factory.Registry reg = Resource.Factory.Registry.INSTANCE;
|
|
||||||
Map<String, Object> m = reg.getExtensionToFactoryMap();
|
|
||||||
m.put("xmi", new XMIResourceFactoryImpl());
|
|
||||||
|
|
||||||
// Créer un objet resourceSetImpl qui contiendra une ressource EMF (le modèle)
|
|
||||||
ResourceSet resSet = new ResourceSetImpl();
|
|
||||||
|
|
||||||
// Définir la ressource (le modèle)
|
|
||||||
URI modelURI = URI.createURI("models/SimplePDLCreator_Created_Process.xmi");
|
|
||||||
Resource resource = resSet.createResource(modelURI);
|
|
||||||
|
|
||||||
// La fabrique pour fabriquer les éléments de SimplePDL
|
|
||||||
SimplepdlFactory myFactory = SimplepdlFactory.eINSTANCE;
|
|
||||||
|
|
||||||
// Créer un élément Process
|
|
||||||
Process process = myFactory.createProcess();
|
|
||||||
process.setName("Mon premier processus");
|
|
||||||
|
|
||||||
// Ajouter le Process dans le modèle
|
|
||||||
resource.getContents().add(process);
|
|
||||||
|
|
||||||
// Ajouter deux WorkDefinitions
|
|
||||||
WorkDefinition wd1 = myFactory.createWorkDefinition();
|
|
||||||
wd1.setName("Ma première WorkDefinition, quelle émotion");
|
|
||||||
|
|
||||||
WorkDefinition wd2 = myFactory.createWorkDefinition();
|
|
||||||
wd2.setName("Ma deuxième WorkDefinition, toujours autant d'émotion");
|
|
||||||
|
|
||||||
process.getProcessElements().add(wd1);
|
|
||||||
process.getProcessElements().add(wd2);
|
|
||||||
|
|
||||||
// Ajouter une WorkSequence entre les deux WorkDefinitions
|
|
||||||
WorkSequence seq = myFactory.createWorkSequence();
|
|
||||||
seq.setPredecessor(wd1);
|
|
||||||
seq.setSuccessor(wd2);
|
|
||||||
seq.setLinkType(WorkSequenceType.FINISH_TO_FINISH);
|
|
||||||
|
|
||||||
process.getProcessElements().add(seq);
|
|
||||||
|
|
||||||
// Ajouter une deuxième WorkSequence entre les deux WorkDefinitions
|
|
||||||
WorkSequence seq2 = myFactory.createWorkSequence();
|
|
||||||
seq2.setPredecessor(wd1);
|
|
||||||
seq2.setSuccessor(wd2);
|
|
||||||
seq2.setLinkType(WorkSequenceType.START_TO_START);
|
|
||||||
|
|
||||||
process.getProcessElements().add(seq2);
|
|
||||||
|
|
||||||
|
|
||||||
// Sauver la ressource
|
|
||||||
try {
|
|
||||||
resource.save(Collections.EMPTY_MAP);
|
|
||||||
} catch (IOException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,88 +0,0 @@
|
||||||
package simplepdl.manip;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
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.resource.impl.ResourceSetImpl;
|
|
||||||
import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
|
|
||||||
|
|
||||||
import petrinet.PetrinetPackage;
|
|
||||||
import petrinet.PetrinetFactory;
|
|
||||||
import simplepdl.Process;
|
|
||||||
import simplepdl.WorkDefinition;
|
|
||||||
import simplepdl.WorkSequence;
|
|
||||||
import simplepdl.WorkSequenceType;
|
|
||||||
import simplepdl.SimplepdlFactory;
|
|
||||||
import simplepdl.SimplepdlPackage;
|
|
||||||
|
|
||||||
public class simplepdl2petrinet {
|
|
||||||
|
|
||||||
public static void main(String[] args) {
|
|
||||||
|
|
||||||
// Charger les package SimplePDL et Petrinet afin de les enregistrer dans le registre d'Eclipse.
|
|
||||||
SimplepdlPackage packageInstance = SimplepdlPackage.eINSTANCE;
|
|
||||||
PetrinetPackage packageInstance2 = PetrinetPackage.eINSTANCE;
|
|
||||||
|
|
||||||
// Enregistrer l'extension ".xmi" comme devant être ouverte à
|
|
||||||
// l'aide d'un objet "XMIResourceFactoryImpl"
|
|
||||||
Resource.Factory.Registry reg = Resource.Factory.Registry.INSTANCE;
|
|
||||||
Map<String, Object> m = reg.getExtensionToFactoryMap();
|
|
||||||
m.put("xmi", new XMIResourceFactoryImpl());
|
|
||||||
|
|
||||||
// Créer un objet resourceSetImpl qui contiendra une ressource EMF (le modèle)
|
|
||||||
ResourceSet resSet = new ResourceSetImpl();
|
|
||||||
|
|
||||||
// Définir la ressource (le modèle)
|
|
||||||
URI modelURI = URI.createURI("models/SimplePDL2PetriNET.xmi");
|
|
||||||
Resource resource = resSet.createResource(modelURI);
|
|
||||||
|
|
||||||
// La fabrique pour fabriquer les éléments de SimplePDL
|
|
||||||
SimplepdlFactory myFactory = SimplepdlFactory.eINSTANCE;
|
|
||||||
|
|
||||||
// Créer un élément Process
|
|
||||||
Process process = myFactory.createProcess();
|
|
||||||
process.setName("Mon premier processus");
|
|
||||||
|
|
||||||
// Ajouter le Process dans le modèle
|
|
||||||
resource.getContents().add(process);
|
|
||||||
|
|
||||||
// Ajouter deux WorkDefinitions
|
|
||||||
WorkDefinition wd1 = myFactory.createWorkDefinition();
|
|
||||||
wd1.setName("Ma première WorkDefinition, quelle émotion");
|
|
||||||
|
|
||||||
WorkDefinition wd2 = myFactory.createWorkDefinition();
|
|
||||||
wd2.setName("Ma deuxième WorkDefinition, toujours autant d'émotion");
|
|
||||||
|
|
||||||
process.getProcessElements().add(wd1);
|
|
||||||
process.getProcessElements().add(wd2);
|
|
||||||
|
|
||||||
// Ajouter une WorkSequence entre les deux WorkDefinitions
|
|
||||||
WorkSequence seq = myFactory.createWorkSequence();
|
|
||||||
seq.setPredecessor(wd1);
|
|
||||||
seq.setSuccessor(wd2);
|
|
||||||
seq.setLinkType(WorkSequenceType.FINISH_TO_FINISH);
|
|
||||||
|
|
||||||
process.getProcessElements().add(seq);
|
|
||||||
|
|
||||||
// Ajouter une deuxième WorkSequence entre les deux WorkDefinitions
|
|
||||||
WorkSequence seq2 = myFactory.createWorkSequence();
|
|
||||||
seq2.setPredecessor(wd1);
|
|
||||||
seq2.setSuccessor(wd2);
|
|
||||||
seq2.setLinkType(WorkSequenceType.START_TO_START);
|
|
||||||
|
|
||||||
process.getProcessElements().add(seq2);
|
|
||||||
|
|
||||||
|
|
||||||
// Sauver la ressource
|
|
||||||
try {
|
|
||||||
resource.save(Collections.EMPTY_MAP);
|
|
||||||
} catch (IOException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
source.. = src/,\
|
||||||
|
src-gen/,\
|
||||||
|
xtend-gen/
|
||||||
|
bin.includes = META-INF/,\
|
||||||
|
.,\
|
||||||
|
plugin.xml
|
|
@ -0,0 +1,9 @@
|
||||||
|
grammar fr.n7.PDL3 with org.eclipse.xtext.common.Terminals
|
||||||
|
|
||||||
|
generate pDL3 "http://www.n7.fr/PDL3"
|
||||||
|
|
||||||
|
Model:
|
||||||
|
greetings+=Greeting*;
|
||||||
|
|
||||||
|
Greeting:
|
||||||
|
'Hello' name=ID '!';
|
|
@ -0,0 +1,205 @@
|
||||||
|
package simplepdl.manip;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
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.xmi.impl.XMIResourceFactoryImpl;
|
||||||
|
|
||||||
|
import petrinet.PetrinetPackage;
|
||||||
|
import petrinet.Place;
|
||||||
|
import petrinet.Transition;
|
||||||
|
import petrinet.Arc;
|
||||||
|
import petrinet.Network;
|
||||||
|
import petrinet.Node;
|
||||||
|
import petrinet.PetrinetFactory;
|
||||||
|
import simplepdl.Process;
|
||||||
|
import simplepdl.WorkDefinition;
|
||||||
|
import simplepdl.WorkSequence;
|
||||||
|
import simplepdl.WorkSequenceType;
|
||||||
|
import simplepdl.SimplepdlPackage;
|
||||||
|
|
||||||
|
public class simplepdl2petrinet {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
|
||||||
|
// Charger les package SimplePDL et Petrinet afin de les enregistrer dans le registre d'Eclipse.
|
||||||
|
SimplepdlPackage packageInstance = SimplepdlPackage.eINSTANCE;
|
||||||
|
PetrinetPackage packageInstance2 = PetrinetPackage.eINSTANCE;
|
||||||
|
|
||||||
|
// Enregistrer l'extension ".xmi" comme devant être ouverte à
|
||||||
|
// l'aide d'un objet "XMIResourceFactoryImpl"
|
||||||
|
Resource.Factory.Registry reg = Resource.Factory.Registry.INSTANCE;
|
||||||
|
Map<String, Object> m = reg.getExtensionToFactoryMap();
|
||||||
|
m.put("xmi", new XMIResourceFactoryImpl());
|
||||||
|
|
||||||
|
// Créer un objet resourceSetImpl qui contiendra une ressource EMF (le modèle)
|
||||||
|
ResourceSet resSet = new ResourceSetImpl();
|
||||||
|
|
||||||
|
// Charger la ressource (notre modèle)
|
||||||
|
URI modelURI = URI.createURI("test.xmi");
|
||||||
|
Resource resource = resSet.getResource(modelURI, true);
|
||||||
|
|
||||||
|
// Récupérer le premier élément du modèle (élément racine)
|
||||||
|
Process process = (Process) resource.getContents().get(0);
|
||||||
|
|
||||||
|
// La fabrique pour fabriquer les éléments de PetriNET
|
||||||
|
PetrinetFactory myFactory = PetrinetFactory.eINSTANCE;
|
||||||
|
|
||||||
|
// Créer un élément Network
|
||||||
|
Network network = myFactory.createNetwork();
|
||||||
|
network.setName(process.getName());
|
||||||
|
|
||||||
|
// Conversion des WorkDefinition en Node et Transition
|
||||||
|
for (Object o : process.getProcessElements()) {
|
||||||
|
if (o instanceof WorkDefinition) {
|
||||||
|
WorkDefinition wd = (WorkDefinition) o;
|
||||||
|
String name = wd.getName();
|
||||||
|
|
||||||
|
Place idle = myFactory.createPlace();
|
||||||
|
idle.setName(name + "_idle");
|
||||||
|
idle.setTokens(1);
|
||||||
|
Place started = myFactory.createPlace();
|
||||||
|
started.setName(name + "_started");
|
||||||
|
started.setTokens(0);
|
||||||
|
Place running = myFactory.createPlace();
|
||||||
|
running.setName(name + "_running");
|
||||||
|
running.setTokens(0);
|
||||||
|
Place finished = myFactory.createPlace();
|
||||||
|
finished.setName(name + "_finished");
|
||||||
|
finished.setTokens(0);
|
||||||
|
|
||||||
|
Arc pause2start = myFactory.createArc();
|
||||||
|
pause2start.setTarget(idle);
|
||||||
|
pause2start.setOutgoing(false);
|
||||||
|
pause2start.setWeight(1);
|
||||||
|
Arc start2running = myFactory.createArc();
|
||||||
|
start2running.setTarget(running);
|
||||||
|
start2running.setOutgoing(true);
|
||||||
|
start2running.setWeight(1);
|
||||||
|
Arc start2started = myFactory.createArc();
|
||||||
|
start2started.setTarget(started);
|
||||||
|
start2started.setOutgoing(true);
|
||||||
|
start2started.setWeight(1);
|
||||||
|
Transition start = myFactory.createTransition();
|
||||||
|
start.setName(name + "_start");
|
||||||
|
start.getArcs().add(pause2start);
|
||||||
|
start.getArcs().add(start2running);
|
||||||
|
start.getArcs().add(start2started);
|
||||||
|
|
||||||
|
Arc running2finish = myFactory.createArc();
|
||||||
|
running2finish.setTarget(running);
|
||||||
|
running2finish.setOutgoing(false);
|
||||||
|
running2finish.setWeight(1);
|
||||||
|
Arc finish2finished = myFactory.createArc();
|
||||||
|
finish2finished.setTarget(finished);
|
||||||
|
finish2finished.setOutgoing(true);
|
||||||
|
finish2finished.setWeight(1);
|
||||||
|
Transition finish = myFactory.createTransition();
|
||||||
|
finish.setName(name + "_finish");
|
||||||
|
finish.getArcs().add(running2finish);
|
||||||
|
finish.getArcs().add(finish2finished);
|
||||||
|
|
||||||
|
network.getNodes().add(idle);
|
||||||
|
network.getNodes().add(start);
|
||||||
|
network.getNodes().add(started);
|
||||||
|
network.getNodes().add(running);
|
||||||
|
network.getNodes().add(finish);
|
||||||
|
network.getNodes().add(finished);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Conversion des WorkSequence en Node et Transition
|
||||||
|
for (Object o : process.getProcessElements()) {
|
||||||
|
if (o instanceof WorkSequence) {
|
||||||
|
WorkSequence ws = (WorkSequence) o;
|
||||||
|
WorkSequenceType type = ws.getLinkType();
|
||||||
|
WorkDefinition predecessor = ws.getPredecessor();
|
||||||
|
WorkDefinition successor = ws.getSuccessor();
|
||||||
|
|
||||||
|
// creation des suffixs permettant la recherche des noeuds
|
||||||
|
String predecessor_suffix = new String();
|
||||||
|
String successor_suffix = new String();
|
||||||
|
switch (type) {
|
||||||
|
case START_TO_START:
|
||||||
|
predecessor_suffix = "_started";
|
||||||
|
successor_suffix = "_start";
|
||||||
|
break;
|
||||||
|
case START_TO_FINISH:
|
||||||
|
predecessor_suffix = "_started";
|
||||||
|
successor_suffix = "_finished";
|
||||||
|
break;
|
||||||
|
case FINISH_TO_START:
|
||||||
|
predecessor_suffix = "_finished";
|
||||||
|
successor_suffix = "_start";
|
||||||
|
break;
|
||||||
|
case FINISH_TO_FINISH:
|
||||||
|
predecessor_suffix = "_finished";
|
||||||
|
successor_suffix = "_finish";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
System.out.print("the fuck ?");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// creation du read-arc
|
||||||
|
Arc arc1 = myFactory.createArc();
|
||||||
|
arc1.setOutgoing(false);
|
||||||
|
arc1.setWeight(1);
|
||||||
|
Arc arc2 = myFactory.createArc();
|
||||||
|
arc2.setOutgoing(true);
|
||||||
|
arc2.setWeight(1);
|
||||||
|
|
||||||
|
for (Node node : network.getNodes()) {
|
||||||
|
if (node instanceof Place) {
|
||||||
|
Place place = (Place) node;
|
||||||
|
if (place.getName().equals(predecessor.getName() + predecessor_suffix)) {
|
||||||
|
arc1.setTarget(place);
|
||||||
|
arc2.setTarget(place);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (node instanceof Transition) {
|
||||||
|
Transition transition = (Transition) node;
|
||||||
|
if (transition.getName().equals(successor.getName() + successor_suffix)) {
|
||||||
|
transition.getArcs().add(arc1);
|
||||||
|
transition.getArcs().add(arc2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Conversion des WorkSequence en Node et Transition
|
||||||
|
for (Object o : process.getProcessElements()) {
|
||||||
|
if (o instanceof Resource) {
|
||||||
|
|
||||||
|
Resource r = (Resource) o;
|
||||||
|
EObject qty = r.getEObject("quantity");
|
||||||
|
|
||||||
|
System.out.println(qty);
|
||||||
|
System.out.println("mdr");
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Créer le nouveau xmi (modèle convertit)
|
||||||
|
URI convURI = URI.createURI("models/Developpement_petrinet.xmi");
|
||||||
|
Resource conv = resSet.createResource(convURI);
|
||||||
|
|
||||||
|
// Ajouter le Network dans le nouveau modèle
|
||||||
|
conv.getContents().add(network);
|
||||||
|
|
||||||
|
// Sauver la ressource
|
||||||
|
try {
|
||||||
|
conv.save(Collections.EMPTY_MAP);
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,9 @@
|
||||||
|
grammar fr.n7.PDL1 with org.eclipse.xtext.common.Terminals
|
||||||
|
|
||||||
|
generate pDL1 "http://www.n7.fr/PDL1"
|
||||||
|
|
||||||
|
Model:
|
||||||
|
greetings+=Greeting*;
|
||||||
|
|
||||||
|
Greeting:
|
||||||
|
'Hello' name=ID '!';
|
|
@ -0,0 +1,29 @@
|
||||||
|
grammar fr.n7.PDL2 with org.eclipse.xtext.common.Terminals
|
||||||
|
generate pDL2 "http://www.n7.fr/PDL2"
|
||||||
|
|
||||||
|
Process :
|
||||||
|
'process' ':' name=ID
|
||||||
|
processElements+=ProcessElement* ;
|
||||||
|
|
||||||
|
|
||||||
|
ProcessElement :
|
||||||
|
WorkDefinitionList | WorkSequenceList ;
|
||||||
|
|
||||||
|
WorkDefinitionList :
|
||||||
|
'workdefinitions' ':' WorkDefinition+=WorkDefinition* ;
|
||||||
|
|
||||||
|
WorkDefinition :
|
||||||
|
name=ID ";" ;
|
||||||
|
|
||||||
|
WorkSequenceList :
|
||||||
|
'worksequences' ':' WorkSequence+=WorkSequence* ;
|
||||||
|
|
||||||
|
WorkSequence :
|
||||||
|
predecessor=[WorkDefinition] linkType=WorkSequenceType successor=[WorkDefinition] ";" ;
|
||||||
|
|
||||||
|
enum WorkSequenceType :
|
||||||
|
start2start = 's2s'
|
||||||
|
| finish2start = 'f2s'
|
||||||
|
| start2finish = 's2f'
|
||||||
|
| finish2finish = 'f2f'
|
||||||
|
;
|
|
@ -0,0 +1,43 @@
|
||||||
|
// automatically generated by Xtext
|
||||||
|
grammar fr.n7.simplepdl.txt.PDL with org.eclipse.xtext.common.Terminals
|
||||||
|
|
||||||
|
import "http://simplepdl"
|
||||||
|
import "http://www.eclipse.org/emf/2002/Ecore" as ecore
|
||||||
|
|
||||||
|
Process :
|
||||||
|
'process' name=ID '{'
|
||||||
|
processElements+=ProcessElement*
|
||||||
|
'}' ;
|
||||||
|
|
||||||
|
ProcessElement :
|
||||||
|
WorkDefinition | WorkSequence | Guidance | Resource ;
|
||||||
|
|
||||||
|
WorkDefinition :
|
||||||
|
'wd' name=ID
|
||||||
|
requests+=Request*
|
||||||
|
;
|
||||||
|
|
||||||
|
WorkSequence :
|
||||||
|
'ws' linkType=WorkSequenceType
|
||||||
|
'from' predecessor=[WorkDefinition]
|
||||||
|
'to' successor=[WorkDefinition] ;
|
||||||
|
|
||||||
|
Guidance :
|
||||||
|
'note' text=STRING ;
|
||||||
|
|
||||||
|
Resource :
|
||||||
|
'res' name=ID quantity=INT
|
||||||
|
;
|
||||||
|
|
||||||
|
Request :
|
||||||
|
'req' target=[Resource] quantity=INT
|
||||||
|
;
|
||||||
|
|
||||||
|
|
||||||
|
enum WorkSequenceType :
|
||||||
|
startToStart = 's2s'
|
||||||
|
| finishToStart = 'f2s'
|
||||||
|
| startToFinish = 's2f'
|
||||||
|
| finishToFinish = 'f2f'
|
||||||
|
;
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
source.. = src/,\
|
||||||
|
src-gen/,\
|
||||||
|
xtend-gen/
|
||||||
|
bin.includes = META-INF/,\
|
||||||
|
.,\
|
||||||
|
plugin.xml
|
||||||
|
additional.bundles = org.eclipse.xtext.xbase,\
|
||||||
|
org.eclipse.xtext.common.types,\
|
||||||
|
org.eclipse.xtext.xtext.generator,\
|
||||||
|
org.eclipse.emf.codegen.ecore,\
|
||||||
|
org.eclipse.emf.mwe.utils,\
|
||||||
|
org.eclipse.emf.mwe2.launch,\
|
||||||
|
org.eclipse.emf.mwe2.lib,\
|
||||||
|
org.objectweb.asm,\
|
||||||
|
org.apache.commons.logging,\
|
||||||
|
org.apache.log4j
|
|
@ -0,0 +1,207 @@
|
||||||
|
package simplepdl.manip;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
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.resource.impl.ResourceSetImpl;
|
||||||
|
import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
|
||||||
|
|
||||||
|
import petrinet.PetrinetPackage;
|
||||||
|
import petrinet.Place;
|
||||||
|
import petrinet.Transition;
|
||||||
|
import petrinet.Arc;
|
||||||
|
import petrinet.Network;
|
||||||
|
import petrinet.Node;
|
||||||
|
import petrinet.PetrinetFactory;
|
||||||
|
import simplepdl.Process;
|
||||||
|
import simplepdl.WorkDefinition;
|
||||||
|
import simplepdl.WorkSequence;
|
||||||
|
import simplepdl.WorkSequenceType;
|
||||||
|
import simplepdl.SimplepdlPackage;
|
||||||
|
import simplepdl.Resource;
|
||||||
|
|
||||||
|
public class simplepdl2petrinet {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
|
||||||
|
// Charger les package SimplePDL et Petrinet afin de les enregistrer dans le registre d'Eclipse.
|
||||||
|
SimplepdlPackage packageInstance = SimplepdlPackage.eINSTANCE;
|
||||||
|
PetrinetPackage packageInstance2 = PetrinetPackage.eINSTANCE;
|
||||||
|
|
||||||
|
// Enregistrer l'extension ".xmi" comme devant être ouverte à
|
||||||
|
// l'aide d'un objet "XMIResourceFactoryImpl"
|
||||||
|
Resource.Factory.Registry reg = Resource.Factory.Registry.INSTANCE;
|
||||||
|
Map<String, Object> m = reg.getExtensionToFactoryMap();
|
||||||
|
m.put("xmi", new XMIResourceFactoryImpl());
|
||||||
|
|
||||||
|
// Créer un objet resourceSetImpl qui contiendra une ressource EMF (le modèle)
|
||||||
|
ResourceSet resSet = new ResourceSetImpl();
|
||||||
|
|
||||||
|
// Charger la ressource (notre modèle)
|
||||||
|
URI modelURI = URI.createURI("test.xmi");
|
||||||
|
Resource resource = resSet.getResource(modelURI, true);
|
||||||
|
|
||||||
|
// Récupérer le premier élément du modèle (élément racine)
|
||||||
|
Process process = (Process) resource.getContents().get(0);
|
||||||
|
|
||||||
|
// La fabrique pour fabriquer les éléments de PetriNET
|
||||||
|
PetrinetFactory myFactory = PetrinetFactory.eINSTANCE;
|
||||||
|
|
||||||
|
// Créer un élément Network
|
||||||
|
Network network = myFactory.createNetwork();
|
||||||
|
network.setName(process.getName());
|
||||||
|
|
||||||
|
// Conversion des WorkDefinition en Node et Transition
|
||||||
|
for (Object o : process.getProcessElements()) {
|
||||||
|
if (o instanceof WorkDefinition) {
|
||||||
|
WorkDefinition wd = (WorkDefinition) o;
|
||||||
|
String name = wd.getName();
|
||||||
|
|
||||||
|
Place idle = myFactory.createPlace();
|
||||||
|
idle.setName(name + "_idle");
|
||||||
|
idle.setTokens(1);
|
||||||
|
Place started = myFactory.createPlace();
|
||||||
|
started.setName(name + "_started");
|
||||||
|
started.setTokens(0);
|
||||||
|
Place running = myFactory.createPlace();
|
||||||
|
running.setName(name + "_running");
|
||||||
|
running.setTokens(0);
|
||||||
|
Place finished = myFactory.createPlace();
|
||||||
|
finished.setName(name + "_finished");
|
||||||
|
finished.setTokens(0);
|
||||||
|
|
||||||
|
Arc pause2start = myFactory.createArc();
|
||||||
|
pause2start.setTarget(idle);
|
||||||
|
pause2start.setOutgoing(false);
|
||||||
|
pause2start.setWeight(1);
|
||||||
|
Arc start2running = myFactory.createArc();
|
||||||
|
start2running.setTarget(running);
|
||||||
|
start2running.setOutgoing(true);
|
||||||
|
start2running.setWeight(1);
|
||||||
|
Arc start2started = myFactory.createArc();
|
||||||
|
start2started.setTarget(started);
|
||||||
|
start2started.setOutgoing(true);
|
||||||
|
start2started.setWeight(1);
|
||||||
|
Transition start = myFactory.createTransition();
|
||||||
|
start.setName(name + "_start");
|
||||||
|
start.getArcs().add(pause2start);
|
||||||
|
start.getArcs().add(start2running);
|
||||||
|
start.getArcs().add(start2started);
|
||||||
|
|
||||||
|
Arc running2finish = myFactory.createArc();
|
||||||
|
running2finish.setTarget(running);
|
||||||
|
running2finish.setOutgoing(false);
|
||||||
|
running2finish.setWeight(1);
|
||||||
|
Arc finish2finished = myFactory.createArc();
|
||||||
|
finish2finished.setTarget(finished);
|
||||||
|
finish2finished.setOutgoing(true);
|
||||||
|
finish2finished.setWeight(1);
|
||||||
|
Transition finish = myFactory.createTransition();
|
||||||
|
finish.setName(name + "_finish");
|
||||||
|
finish.getArcs().add(running2finish);
|
||||||
|
finish.getArcs().add(finish2finished);
|
||||||
|
|
||||||
|
network.getNodes().add(idle);
|
||||||
|
network.getNodes().add(start);
|
||||||
|
network.getNodes().add(started);
|
||||||
|
network.getNodes().add(running);
|
||||||
|
network.getNodes().add(finish);
|
||||||
|
network.getNodes().add(finished);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Conversion des WorkSequence en Node et Transition
|
||||||
|
for (Object o : process.getProcessElements()) {
|
||||||
|
if (o instanceof WorkSequence) {
|
||||||
|
WorkSequence ws = (WorkSequence) o;
|
||||||
|
WorkSequenceType type = ws.getLinkType();
|
||||||
|
WorkDefinition predecessor = ws.getPredecessor();
|
||||||
|
WorkDefinition successor = ws.getSuccessor();
|
||||||
|
|
||||||
|
// creation des suffixs permettant la recherche des noeuds
|
||||||
|
String predecessor_suffix = new String();
|
||||||
|
String successor_suffix = new String();
|
||||||
|
switch (type) {
|
||||||
|
case START_TO_START:
|
||||||
|
predecessor_suffix = "_started";
|
||||||
|
successor_suffix = "_start";
|
||||||
|
break;
|
||||||
|
case START_TO_FINISH:
|
||||||
|
predecessor_suffix = "_started";
|
||||||
|
successor_suffix = "_finished";
|
||||||
|
break;
|
||||||
|
case FINISH_TO_START:
|
||||||
|
predecessor_suffix = "_finished";
|
||||||
|
successor_suffix = "_start";
|
||||||
|
break;
|
||||||
|
case FINISH_TO_FINISH:
|
||||||
|
predecessor_suffix = "_finished";
|
||||||
|
successor_suffix = "_finish";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
System.out.print("the fuck ?");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// creation du read-arc
|
||||||
|
Arc arc1 = myFactory.createArc();
|
||||||
|
arc1.setOutgoing(false);
|
||||||
|
arc1.setWeight(1);
|
||||||
|
Arc arc2 = myFactory.createArc();
|
||||||
|
arc2.setOutgoing(true);
|
||||||
|
arc2.setWeight(1);
|
||||||
|
|
||||||
|
for (Node node : network.getNodes()) {
|
||||||
|
if (node instanceof Place) {
|
||||||
|
Place place = (Place) node;
|
||||||
|
if (place.getName().equals(predecessor.getName() + predecessor_suffix)) {
|
||||||
|
arc1.setTarget(place);
|
||||||
|
arc2.setTarget(place);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (node instanceof Transition) {
|
||||||
|
Transition transition = (Transition) node;
|
||||||
|
if (transition.getName().equals(successor.getName() + successor_suffix)) {
|
||||||
|
transition.getArcs().add(arc1);
|
||||||
|
transition.getArcs().add(arc2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
System.out.println("mdr2");
|
||||||
|
|
||||||
|
// Conversion des WorkSequence en Node et Transition
|
||||||
|
for (Object o : process.getProcessElements()) {
|
||||||
|
if (o instanceof Resource) {
|
||||||
|
|
||||||
|
Resource r = (Resource) o;
|
||||||
|
EObject qty = r.getEObject("quantity");
|
||||||
|
|
||||||
|
System.out.println(qty);
|
||||||
|
System.out.println("mdr");
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Créer le nouveau xmi (modèle convertit)
|
||||||
|
URI convURI = URI.createURI("models/Developpement_petrinet.xmi");
|
||||||
|
Resource conv = resSet.createResource(convURI);
|
||||||
|
|
||||||
|
// Ajouter le Network dans le nouveau modèle
|
||||||
|
conv.getContents().add(network);
|
||||||
|
|
||||||
|
// Sauver la ressource
|
||||||
|
try {
|
||||||
|
conv.save(Collections.EMPTY_MAP);
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,16 @@
|
||||||
|
source.. = src/,\
|
||||||
|
src-gen/,\
|
||||||
|
xtend-gen/
|
||||||
|
bin.includes = META-INF/,\
|
||||||
|
.,\
|
||||||
|
plugin.xml
|
||||||
|
additional.bundles = org.eclipse.xtext.xbase,\
|
||||||
|
org.eclipse.xtext.common.types,\
|
||||||
|
org.eclipse.xtext.xtext.generator,\
|
||||||
|
org.eclipse.emf.codegen.ecore,\
|
||||||
|
org.eclipse.emf.mwe.utils,\
|
||||||
|
org.eclipse.emf.mwe2.launch,\
|
||||||
|
org.eclipse.emf.mwe2.lib,\
|
||||||
|
org.objectweb.asm,\
|
||||||
|
org.apache.commons.logging,\
|
||||||
|
org.apache.log4j
|
|
@ -0,0 +1,6 @@
|
||||||
|
source.. = src/,\
|
||||||
|
src-gen/,\
|
||||||
|
xtend-gen/
|
||||||
|
bin.includes = META-INF/,\
|
||||||
|
.,\
|
||||||
|
plugin.xml
|
|
@ -1,88 +0,0 @@
|
||||||
package simplepdl.manip;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
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.resource.impl.ResourceSetImpl;
|
|
||||||
import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
|
|
||||||
|
|
||||||
import petrinet.PetrinetPackage;
|
|
||||||
import petrinet.PetrinetFactory;
|
|
||||||
import simplepdl.Process;
|
|
||||||
import simplepdl.WorkDefinition;
|
|
||||||
import simplepdl.WorkSequence;
|
|
||||||
import simplepdl.WorkSequenceType;
|
|
||||||
import simplepdl.SimplepdlFactory;
|
|
||||||
import simplepdl.SimplepdlPackage;
|
|
||||||
|
|
||||||
public class simplepdl2petrinet {
|
|
||||||
|
|
||||||
public static void main(String[] args) {
|
|
||||||
|
|
||||||
// Charger les package SimplePDL et Petrinet afin de les enregistrer dans le registre d'Eclipse.
|
|
||||||
SimplepdlPackage packageInstance = SimplepdlPackage.eINSTANCE;
|
|
||||||
PetrinetPackage packageInstance2 = PetrinetPackage.eINSTANCE;
|
|
||||||
|
|
||||||
// Enregistrer l'extension ".xmi" comme devant être ouverte à
|
|
||||||
// l'aide d'un objet "XMIResourceFactoryImpl"
|
|
||||||
Resource.Factory.Registry reg = Resource.Factory.Registry.INSTANCE;
|
|
||||||
Map<String, Object> m = reg.getExtensionToFactoryMap();
|
|
||||||
m.put("xmi", new XMIResourceFactoryImpl());
|
|
||||||
|
|
||||||
// Créer un objet resourceSetImpl qui contiendra une ressource EMF (le modèle)
|
|
||||||
ResourceSet resSet = new ResourceSetImpl();
|
|
||||||
|
|
||||||
// Définir la ressource (le modèle)
|
|
||||||
URI modelURI = URI.createURI("models/SimplePDLCreator_Created_Process.xmi");
|
|
||||||
Resource resource = resSet.createResource(modelURI);
|
|
||||||
|
|
||||||
// La fabrique pour fabriquer les éléments de SimplePDL
|
|
||||||
SimplepdlFactory myFactory = SimplepdlFactory.eINSTANCE;
|
|
||||||
|
|
||||||
// Créer un élément Process
|
|
||||||
Process process = myFactory.createProcess();
|
|
||||||
process.setName("Mon premier processus");
|
|
||||||
|
|
||||||
// Ajouter le Process dans le modèle
|
|
||||||
resource.getContents().add(process);
|
|
||||||
|
|
||||||
// Ajouter deux WorkDefinitions
|
|
||||||
WorkDefinition wd1 = myFactory.createWorkDefinition();
|
|
||||||
wd1.setName("Ma première WorkDefinition, quelle émotion");
|
|
||||||
|
|
||||||
WorkDefinition wd2 = myFactory.createWorkDefinition();
|
|
||||||
wd2.setName("Ma deuxième WorkDefinition, toujours autant d'émotion");
|
|
||||||
|
|
||||||
process.getProcessElements().add(wd1);
|
|
||||||
process.getProcessElements().add(wd2);
|
|
||||||
|
|
||||||
// Ajouter une WorkSequence entre les deux WorkDefinitions
|
|
||||||
WorkSequence seq = myFactory.createWorkSequence();
|
|
||||||
seq.setPredecessor(wd1);
|
|
||||||
seq.setSuccessor(wd2);
|
|
||||||
seq.setLinkType(WorkSequenceType.FINISH_TO_FINISH);
|
|
||||||
|
|
||||||
process.getProcessElements().add(seq);
|
|
||||||
|
|
||||||
// Ajouter une deuxième WorkSequence entre les deux WorkDefinitions
|
|
||||||
WorkSequence seq2 = myFactory.createWorkSequence();
|
|
||||||
seq2.setPredecessor(wd1);
|
|
||||||
seq2.setSuccessor(wd2);
|
|
||||||
seq2.setLinkType(WorkSequenceType.START_TO_START);
|
|
||||||
|
|
||||||
process.getProcessElements().add(seq2);
|
|
||||||
|
|
||||||
|
|
||||||
// Sauver la ressource
|
|
||||||
try {
|
|
||||||
resource.save(Collections.EMPTY_MAP);
|
|
||||||
} catch (IOException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -0,0 +1,204 @@
|
||||||
|
package simplepdl.manip;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
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.resource.impl.ResourceSetImpl;
|
||||||
|
import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
|
||||||
|
|
||||||
|
import petrinet.PetrinetPackage;
|
||||||
|
import petrinet.Place;
|
||||||
|
import petrinet.Transition;
|
||||||
|
import petrinet.Arc;
|
||||||
|
import petrinet.Network;
|
||||||
|
import petrinet.Node;
|
||||||
|
import petrinet.PetrinetFactory;
|
||||||
|
import simplepdl.Process;
|
||||||
|
import simplepdl.WorkDefinition;
|
||||||
|
import simplepdl.WorkSequence;
|
||||||
|
import simplepdl.WorkSequenceType;
|
||||||
|
import simplepdl.SimplepdlPackage;
|
||||||
|
import simplepdl.Resource;
|
||||||
|
|
||||||
|
public class simplepdl2petrinet {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
|
||||||
|
// Charger les package SimplePDL et Petrinet afin de les enregistrer dans le registre d'Eclipse.
|
||||||
|
SimplepdlPackage packageInstance = SimplepdlPackage.eINSTANCE;
|
||||||
|
PetrinetPackage packageInstance2 = PetrinetPackage.eINSTANCE;
|
||||||
|
|
||||||
|
// Enregistrer l'extension ".xmi" comme devant être ouverte à
|
||||||
|
// l'aide d'un objet "XMIResourceFactoryImpl"
|
||||||
|
Resource.Factory.Registry reg = Resource.Factory.Registry.INSTANCE;
|
||||||
|
Map<String, Object> m = reg.getExtensionToFactoryMap();
|
||||||
|
m.put("xmi", new XMIResourceFactoryImpl());
|
||||||
|
|
||||||
|
// Créer un objet resourceSetImpl qui contiendra une ressource EMF (le modèle)
|
||||||
|
ResourceSet resSet = new ResourceSetImpl();
|
||||||
|
|
||||||
|
// Charger la ressource (notre modèle)
|
||||||
|
URI modelURI = URI.createURI("test.xmi");
|
||||||
|
Resource resource = resSet.getResource(modelURI, true);
|
||||||
|
|
||||||
|
// Récupérer le premier élément du modèle (élément racine)
|
||||||
|
Process process = (Process) resource.getContents().get(0);
|
||||||
|
|
||||||
|
// La fabrique pour fabriquer les éléments de PetriNET
|
||||||
|
PetrinetFactory myFactory = PetrinetFactory.eINSTANCE;
|
||||||
|
|
||||||
|
// Créer un élément Network
|
||||||
|
Network network = myFactory.createNetwork();
|
||||||
|
network.setName(process.getName());
|
||||||
|
|
||||||
|
// Conversion des WorkDefinition en Node et Transition
|
||||||
|
for (Object o : process.getProcessElements()) {
|
||||||
|
if (o instanceof WorkDefinition) {
|
||||||
|
WorkDefinition wd = (WorkDefinition) o;
|
||||||
|
String name = wd.getName();
|
||||||
|
|
||||||
|
Place idle = myFactory.createPlace();
|
||||||
|
idle.setName(name + "_idle");
|
||||||
|
idle.setTokens(1);
|
||||||
|
Place started = myFactory.createPlace();
|
||||||
|
started.setName(name + "_started");
|
||||||
|
started.setTokens(0);
|
||||||
|
Place running = myFactory.createPlace();
|
||||||
|
running.setName(name + "_running");
|
||||||
|
running.setTokens(0);
|
||||||
|
Place finished = myFactory.createPlace();
|
||||||
|
finished.setName(name + "_finished");
|
||||||
|
finished.setTokens(0);
|
||||||
|
|
||||||
|
Arc pause2start = myFactory.createArc();
|
||||||
|
pause2start.setTarget(idle);
|
||||||
|
pause2start.setOutgoing(false);
|
||||||
|
pause2start.setWeight(1);
|
||||||
|
Arc start2running = myFactory.createArc();
|
||||||
|
start2running.setTarget(running);
|
||||||
|
start2running.setOutgoing(true);
|
||||||
|
start2running.setWeight(1);
|
||||||
|
Arc start2started = myFactory.createArc();
|
||||||
|
start2started.setTarget(started);
|
||||||
|
start2started.setOutgoing(true);
|
||||||
|
start2started.setWeight(1);
|
||||||
|
Transition start = myFactory.createTransition();
|
||||||
|
start.setName(name + "_start");
|
||||||
|
start.getArcs().add(pause2start);
|
||||||
|
start.getArcs().add(start2running);
|
||||||
|
start.getArcs().add(start2started);
|
||||||
|
|
||||||
|
Arc running2finish = myFactory.createArc();
|
||||||
|
running2finish.setTarget(running);
|
||||||
|
running2finish.setOutgoing(false);
|
||||||
|
running2finish.setWeight(1);
|
||||||
|
Arc finish2finished = myFactory.createArc();
|
||||||
|
finish2finished.setTarget(finished);
|
||||||
|
finish2finished.setOutgoing(true);
|
||||||
|
finish2finished.setWeight(1);
|
||||||
|
Transition finish = myFactory.createTransition();
|
||||||
|
finish.setName(name + "_finish");
|
||||||
|
finish.getArcs().add(running2finish);
|
||||||
|
finish.getArcs().add(finish2finished);
|
||||||
|
|
||||||
|
network.getNodes().add(idle);
|
||||||
|
network.getNodes().add(start);
|
||||||
|
network.getNodes().add(started);
|
||||||
|
network.getNodes().add(running);
|
||||||
|
network.getNodes().add(finish);
|
||||||
|
network.getNodes().add(finished);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Conversion des WorkSequence en Node et Transition
|
||||||
|
for (Object o : process.getProcessElements()) {
|
||||||
|
if (o instanceof WorkSequence) {
|
||||||
|
WorkSequence ws = (WorkSequence) o;
|
||||||
|
WorkSequenceType type = ws.getLinkType();
|
||||||
|
WorkDefinition predecessor = ws.getPredecessor();
|
||||||
|
WorkDefinition successor = ws.getSuccessor();
|
||||||
|
|
||||||
|
// creation des suffixs permettant la recherche des noeuds
|
||||||
|
String predecessor_suffix = new String();
|
||||||
|
String successor_suffix = new String();
|
||||||
|
switch (type) {
|
||||||
|
case START_TO_START:
|
||||||
|
predecessor_suffix = "_started";
|
||||||
|
successor_suffix = "_start";
|
||||||
|
break;
|
||||||
|
case START_TO_FINISH:
|
||||||
|
predecessor_suffix = "_started";
|
||||||
|
successor_suffix = "_finished";
|
||||||
|
break;
|
||||||
|
case FINISH_TO_START:
|
||||||
|
predecessor_suffix = "_finished";
|
||||||
|
successor_suffix = "_start";
|
||||||
|
break;
|
||||||
|
case FINISH_TO_FINISH:
|
||||||
|
predecessor_suffix = "_finished";
|
||||||
|
successor_suffix = "_finish";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
System.out.print("the fuck ?");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// creation du read-arc
|
||||||
|
Arc arc1 = myFactory.createArc();
|
||||||
|
arc1.setOutgoing(false);
|
||||||
|
arc1.setWeight(1);
|
||||||
|
Arc arc2 = myFactory.createArc();
|
||||||
|
arc2.setOutgoing(true);
|
||||||
|
arc2.setWeight(1);
|
||||||
|
|
||||||
|
for (Node node : network.getNodes()) {
|
||||||
|
if (node instanceof Place) {
|
||||||
|
Place place = (Place) node;
|
||||||
|
if (place.getName().equals(predecessor.getName() + predecessor_suffix)) {
|
||||||
|
arc1.setTarget(place);
|
||||||
|
arc2.setTarget(place);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (node instanceof Transition) {
|
||||||
|
Transition transition = (Transition) node;
|
||||||
|
if (transition.getName().equals(successor.getName() + successor_suffix)) {
|
||||||
|
transition.getArcs().add(arc1);
|
||||||
|
transition.getArcs().add(arc2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Conversion des WorkSequence en Node et Transition
|
||||||
|
for (Object o : process.getProcessElements()) {
|
||||||
|
if (o instanceof Resource) {
|
||||||
|
|
||||||
|
simplepdl.Resource r = (simplepdl.Resource) o;
|
||||||
|
int qty = r.getQuantity();
|
||||||
|
|
||||||
|
System.out.println(qty);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Créer le nouveau xmi (modèle convertit)
|
||||||
|
URI convURI = URI.createURI("models/Developpement_petrinet.xmi");
|
||||||
|
Resource conv = resSet.createResource(convURI);
|
||||||
|
|
||||||
|
// Ajouter le Network dans le nouveau modèle
|
||||||
|
conv.getContents().add(network);
|
||||||
|
|
||||||
|
// Sauver la ressource
|
||||||
|
try {
|
||||||
|
conv.save(Collections.EMPTY_MAP);
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
source.. = src/,\
|
||||||
|
src-gen/,\
|
||||||
|
xtend-gen/
|
||||||
|
bin.includes = META-INF/,\
|
||||||
|
.,\
|
||||||
|
plugin.xml
|
|
@ -0,0 +1,6 @@
|
||||||
|
source.. = src/,\
|
||||||
|
src-gen/,\
|
||||||
|
xtend-gen/
|
||||||
|
bin.includes = META-INF/,\
|
||||||
|
.,\
|
||||||
|
plugin.xml
|
|
@ -0,0 +1,180 @@
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
package simplepdl.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 simplepdl.Request;
|
||||||
|
import simplepdl.SimplepdlPackage;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is the item provider adapter for a {@link simplepdl.Request} object.
|
||||||
|
* <!-- begin-user-doc -->
|
||||||
|
* <!-- end-user-doc -->
|
||||||
|
* @generated
|
||||||
|
*/
|
||||||
|
public class RequestItemProvider
|
||||||
|
extends ItemProviderAdapter
|
||||||
|
implements
|
||||||
|
IEditingDomainItemProvider,
|
||||||
|
IStructuredItemContentProvider,
|
||||||
|
ITreeItemContentProvider,
|
||||||
|
IItemLabelProvider,
|
||||||
|
IItemPropertySource {
|
||||||
|
/**
|
||||||
|
* This constructs an instance from a factory and a notifier.
|
||||||
|
* <!-- begin-user-doc -->
|
||||||
|
* <!-- end-user-doc -->
|
||||||
|
* @generated
|
||||||
|
*/
|
||||||
|
public RequestItemProvider(AdapterFactory adapterFactory) {
|
||||||
|
super(adapterFactory);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This returns the property descriptors for the adapted class.
|
||||||
|
* <!-- begin-user-doc -->
|
||||||
|
* <!-- end-user-doc -->
|
||||||
|
* @generated
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
|
||||||
|
if (itemPropertyDescriptors == null) {
|
||||||
|
super.getPropertyDescriptors(object);
|
||||||
|
|
||||||
|
addQuantityPropertyDescriptor(object);
|
||||||
|
addTargetPropertyDescriptor(object);
|
||||||
|
}
|
||||||
|
return itemPropertyDescriptors;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This adds a property descriptor for the Quantity feature.
|
||||||
|
* <!-- begin-user-doc -->
|
||||||
|
* <!-- end-user-doc -->
|
||||||
|
* @generated
|
||||||
|
*/
|
||||||
|
protected void addQuantityPropertyDescriptor(Object object) {
|
||||||
|
itemPropertyDescriptors.add
|
||||||
|
(createItemPropertyDescriptor
|
||||||
|
(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
|
||||||
|
getResourceLocator(),
|
||||||
|
getString("_UI_Request_quantity_feature"),
|
||||||
|
getString("_UI_PropertyDescriptor_description", "_UI_Request_quantity_feature", "_UI_Request_type"),
|
||||||
|
SimplepdlPackage.Literals.REQUEST__QUANTITY,
|
||||||
|
true,
|
||||||
|
false,
|
||||||
|
false,
|
||||||
|
ItemPropertyDescriptor.INTEGRAL_VALUE_IMAGE,
|
||||||
|
null,
|
||||||
|
null));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This adds a property descriptor for the Target feature.
|
||||||
|
* <!-- begin-user-doc -->
|
||||||
|
* <!-- end-user-doc -->
|
||||||
|
* @generated
|
||||||
|
*/
|
||||||
|
protected void addTargetPropertyDescriptor(Object object) {
|
||||||
|
itemPropertyDescriptors.add
|
||||||
|
(createItemPropertyDescriptor
|
||||||
|
(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
|
||||||
|
getResourceLocator(),
|
||||||
|
getString("_UI_Request_target_feature"),
|
||||||
|
getString("_UI_PropertyDescriptor_description", "_UI_Request_target_feature", "_UI_Request_type"),
|
||||||
|
SimplepdlPackage.Literals.REQUEST__TARGET,
|
||||||
|
true,
|
||||||
|
false,
|
||||||
|
true,
|
||||||
|
null,
|
||||||
|
null,
|
||||||
|
null));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This returns Request.gif.
|
||||||
|
* <!-- begin-user-doc -->
|
||||||
|
* <!-- end-user-doc -->
|
||||||
|
* @generated
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Object getImage(Object object) {
|
||||||
|
return overlayImage(object, getResourceLocator().getImage("full/obj16/Request"));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This returns the label text for the adapted class.
|
||||||
|
* <!-- begin-user-doc -->
|
||||||
|
* <!-- end-user-doc -->
|
||||||
|
* @generated
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public String getText(Object object) {
|
||||||
|
Request request = (Request)object;
|
||||||
|
String targetname = request.getTarget() != null ? "" : request.getTarget().getName();
|
||||||
|
return getString("_UI_Request_type") + " --" + request.getQuantity() + "--> " + targetname;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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}.
|
||||||
|
* <!-- begin-user-doc -->
|
||||||
|
* <!-- end-user-doc -->
|
||||||
|
* @generated
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void notifyChanged(Notification notification) {
|
||||||
|
updateChildren(notification);
|
||||||
|
|
||||||
|
switch (notification.getFeatureID(Request.class)) {
|
||||||
|
case SimplepdlPackage.REQUEST__QUANTITY:
|
||||||
|
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.
|
||||||
|
* <!-- begin-user-doc -->
|
||||||
|
* <!-- end-user-doc -->
|
||||||
|
* @generated
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
|
||||||
|
super.collectNewChildDescriptors(newChildDescriptors, object);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the resource locator for this item provider's resources.
|
||||||
|
* <!-- begin-user-doc -->
|
||||||
|
* <!-- end-user-doc -->
|
||||||
|
* @generated
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public ResourceLocator getResourceLocator() {
|
||||||
|
return SimplepdlEditPlugin.INSTANCE;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -1,92 +0,0 @@
|
||||||
package simplepdl.manip;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
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.resource.impl.ResourceSetImpl;
|
|
||||||
import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
|
|
||||||
|
|
||||||
import petrinet.PetrinetPackage;
|
|
||||||
import petrinet.PetrinetFactory;
|
|
||||||
import simplepdl.Process;
|
|
||||||
import simplepdl.WorkDefinition;
|
|
||||||
import simplepdl.WorkSequence;
|
|
||||||
import simplepdl.WorkSequenceType;
|
|
||||||
import simplepdl.SimplepdlFactory;
|
|
||||||
import simplepdl.SimplepdlPackage;
|
|
||||||
|
|
||||||
public class simplepdl2petrinet {
|
|
||||||
|
|
||||||
public static void main(String[] args) {
|
|
||||||
|
|
||||||
// Charger les package SimplePDL et Petrinet afin de les enregistrer dans le registre d'Eclipse.
|
|
||||||
SimplepdlPackage packageInstance = SimplepdlPackage.eINSTANCE;
|
|
||||||
PetrinetPackage packageInstance2 = PetrinetPackage.eINSTANCE;
|
|
||||||
|
|
||||||
// Enregistrer l'extension ".xmi" comme devant être ouverte à
|
|
||||||
// l'aide d'un objet "XMIResourceFactoryImpl"
|
|
||||||
Resource.Factory.Registry reg = Resource.Factory.Registry.INSTANCE;
|
|
||||||
Map<String, Object> m = reg.getExtensionToFactoryMap();
|
|
||||||
m.put("xmi", new XMIResourceFactoryImpl());
|
|
||||||
|
|
||||||
// Créer un objet resourceSetImpl qui contiendra une ressource EMF (le modèle)
|
|
||||||
ResourceSet resSet = new ResourceSetImpl();
|
|
||||||
|
|
||||||
// Charger la ressource (notre modèle)
|
|
||||||
URI modelURI = URI.createURI("pdl-sujet.xmi");
|
|
||||||
Resource resource = resSet.getResource(modelURI, true);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// La fabrique pour fabriquer les éléments de SimplePDL
|
|
||||||
SimplepdlFactory myFactory = SimplepdlFactory.eINSTANCE;
|
|
||||||
|
|
||||||
// Créer un élément Process
|
|
||||||
Process process = myFactory.createProcess();
|
|
||||||
process.setName("Mon premier processus");
|
|
||||||
|
|
||||||
// Ajouter le Process dans le modèle
|
|
||||||
resource.getContents().add(process);
|
|
||||||
|
|
||||||
// Ajouter deux WorkDefinitions
|
|
||||||
WorkDefinition wd1 = myFactory.createWorkDefinition();
|
|
||||||
wd1.setName("Ma première WorkDefinition, quelle émotion");
|
|
||||||
|
|
||||||
WorkDefinition wd2 = myFactory.createWorkDefinition();
|
|
||||||
wd2.setName("Ma deuxième WorkDefinition, toujours autant d'émotion");
|
|
||||||
|
|
||||||
process.getProcessElements().add(wd1);
|
|
||||||
process.getProcessElements().add(wd2);
|
|
||||||
|
|
||||||
// Ajouter une WorkSequence entre les deux WorkDefinitions
|
|
||||||
WorkSequence seq = myFactory.createWorkSequence();
|
|
||||||
seq.setPredecessor(wd1);
|
|
||||||
seq.setSuccessor(wd2);
|
|
||||||
seq.setLinkType(WorkSequenceType.FINISH_TO_FINISH);
|
|
||||||
|
|
||||||
process.getProcessElements().add(seq);
|
|
||||||
|
|
||||||
// Ajouter une deuxième WorkSequence entre les deux WorkDefinitions
|
|
||||||
WorkSequence seq2 = myFactory.createWorkSequence();
|
|
||||||
seq2.setPredecessor(wd1);
|
|
||||||
seq2.setSuccessor(wd2);
|
|
||||||
seq2.setLinkType(WorkSequenceType.START_TO_START);
|
|
||||||
|
|
||||||
process.getProcessElements().add(seq2);
|
|
||||||
|
|
||||||
|
|
||||||
// Sauver la ressource
|
|
||||||
try {
|
|
||||||
resource.save(Collections.EMPTY_MAP);
|
|
||||||
} catch (IOException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -0,0 +1,225 @@
|
||||||
|
package simplepdl.manip;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
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.resource.impl.ResourceSetImpl;
|
||||||
|
import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
|
||||||
|
|
||||||
|
import petrinet.Arc;
|
||||||
|
import petrinet.Network;
|
||||||
|
import petrinet.Node;
|
||||||
|
import petrinet.PetrinetFactory;
|
||||||
|
import petrinet.PetrinetPackage;
|
||||||
|
import petrinet.Place;
|
||||||
|
import petrinet.Transition;
|
||||||
|
import simplepdl.Process;
|
||||||
|
import simplepdl.SimplepdlPackage;
|
||||||
|
import simplepdl.WorkDefinition;
|
||||||
|
import simplepdl.WorkSequence;
|
||||||
|
import simplepdl.WorkSequenceType;
|
||||||
|
import simplepdl.Request;
|
||||||
|
|
||||||
|
public class simplepdl2petrinet {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
|
||||||
|
// Charger les package SimplePDL et Petrinet afin de les enregistrer dans le registre d'Eclipse.
|
||||||
|
SimplepdlPackage packageInstance = SimplepdlPackage.eINSTANCE;
|
||||||
|
PetrinetPackage packageInstance2 = PetrinetPackage.eINSTANCE;
|
||||||
|
|
||||||
|
// Enregistrer l'extension ".xmi" comme devant être ouverte à
|
||||||
|
// l'aide d'un objet "XMIResourceFactoryImpl"
|
||||||
|
Resource.Factory.Registry reg = Resource.Factory.Registry.INSTANCE;
|
||||||
|
Map<String, Object> m = reg.getExtensionToFactoryMap();
|
||||||
|
m.put("xmi", new XMIResourceFactoryImpl());
|
||||||
|
|
||||||
|
// Créer un objet resourceSetImpl qui contiendra une ressource EMF (le modèle)
|
||||||
|
ResourceSet resSet = new ResourceSetImpl();
|
||||||
|
|
||||||
|
// Charger la ressource (notre modèle)
|
||||||
|
URI modelURI = URI.createURI("test.xmi");
|
||||||
|
Resource resource = resSet.getResource(modelURI, true);
|
||||||
|
|
||||||
|
// Récupérer le premier élément du modèle (élément racine)
|
||||||
|
Process process = (Process) resource.getContents().get(0);
|
||||||
|
|
||||||
|
// La fabrique pour fabriquer les éléments de PetriNET
|
||||||
|
PetrinetFactory myFactory = PetrinetFactory.eINSTANCE;
|
||||||
|
|
||||||
|
// Créer un élément Network
|
||||||
|
Network network = myFactory.createNetwork();
|
||||||
|
network.setName(process.getName());
|
||||||
|
|
||||||
|
// Conversion des WorkDefinition en Node et Transition
|
||||||
|
for (Object o : process.getProcessElements()) {
|
||||||
|
if (o instanceof WorkDefinition) {
|
||||||
|
WorkDefinition wd = (WorkDefinition) o;
|
||||||
|
String name = wd.getName();
|
||||||
|
|
||||||
|
Place idle = myFactory.createPlace();
|
||||||
|
idle.setName(name + "_idle");
|
||||||
|
idle.setTokens(1);
|
||||||
|
Place started = myFactory.createPlace();
|
||||||
|
started.setName(name + "_started");
|
||||||
|
started.setTokens(0);
|
||||||
|
Place running = myFactory.createPlace();
|
||||||
|
running.setName(name + "_running");
|
||||||
|
running.setTokens(0);
|
||||||
|
Place finished = myFactory.createPlace();
|
||||||
|
finished.setName(name + "_finished");
|
||||||
|
finished.setTokens(0);
|
||||||
|
|
||||||
|
Arc pause2start = myFactory.createArc();
|
||||||
|
pause2start.setTarget(idle);
|
||||||
|
pause2start.setOutgoing(false);
|
||||||
|
pause2start.setWeight(1);
|
||||||
|
Arc start2running = myFactory.createArc();
|
||||||
|
start2running.setTarget(running);
|
||||||
|
start2running.setOutgoing(true);
|
||||||
|
start2running.setWeight(1);
|
||||||
|
Arc start2started = myFactory.createArc();
|
||||||
|
start2started.setTarget(started);
|
||||||
|
start2started.setOutgoing(true);
|
||||||
|
start2started.setWeight(1);
|
||||||
|
Transition start = myFactory.createTransition();
|
||||||
|
start.setName(name + "_start");
|
||||||
|
start.getArcs().add(pause2start);
|
||||||
|
start.getArcs().add(start2running);
|
||||||
|
start.getArcs().add(start2started);
|
||||||
|
|
||||||
|
Arc running2finish = myFactory.createArc();
|
||||||
|
running2finish.setTarget(running);
|
||||||
|
running2finish.setOutgoing(false);
|
||||||
|
running2finish.setWeight(1);
|
||||||
|
Arc finish2finished = myFactory.createArc();
|
||||||
|
finish2finished.setTarget(finished);
|
||||||
|
finish2finished.setOutgoing(true);
|
||||||
|
finish2finished.setWeight(1);
|
||||||
|
Transition finish = myFactory.createTransition();
|
||||||
|
finish.setName(name + "_finish");
|
||||||
|
finish.getArcs().add(running2finish);
|
||||||
|
finish.getArcs().add(finish2finished);
|
||||||
|
|
||||||
|
network.getNodes().add(idle);
|
||||||
|
network.getNodes().add(start);
|
||||||
|
network.getNodes().add(started);
|
||||||
|
network.getNodes().add(running);
|
||||||
|
network.getNodes().add(finish);
|
||||||
|
network.getNodes().add(finished);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Conversion des WorkSequence en Node et Transition
|
||||||
|
for (Object o : process.getProcessElements()) {
|
||||||
|
if (o instanceof WorkSequence) {
|
||||||
|
WorkSequence ws = (WorkSequence) o;
|
||||||
|
WorkSequenceType type = ws.getLinkType();
|
||||||
|
WorkDefinition predecessor = ws.getPredecessor();
|
||||||
|
WorkDefinition successor = ws.getSuccessor();
|
||||||
|
|
||||||
|
// creation des suffixs permettant la recherche des noeuds
|
||||||
|
String predecessor_suffix = new String();
|
||||||
|
String successor_suffix = new String();
|
||||||
|
switch (type) {
|
||||||
|
case START_TO_START:
|
||||||
|
predecessor_suffix = "_started";
|
||||||
|
successor_suffix = "_start";
|
||||||
|
break;
|
||||||
|
case START_TO_FINISH:
|
||||||
|
predecessor_suffix = "_started";
|
||||||
|
successor_suffix = "_finished";
|
||||||
|
break;
|
||||||
|
case FINISH_TO_START:
|
||||||
|
predecessor_suffix = "_finished";
|
||||||
|
successor_suffix = "_start";
|
||||||
|
break;
|
||||||
|
case FINISH_TO_FINISH:
|
||||||
|
predecessor_suffix = "_finished";
|
||||||
|
successor_suffix = "_finish";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
System.out.print("the fuck ?");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// creation du read-arc
|
||||||
|
Arc arc1 = myFactory.createArc();
|
||||||
|
arc1.setOutgoing(false);
|
||||||
|
arc1.setWeight(1);
|
||||||
|
Arc arc2 = myFactory.createArc();
|
||||||
|
arc2.setOutgoing(true);
|
||||||
|
arc2.setWeight(1);
|
||||||
|
|
||||||
|
for (Node node : network.getNodes()) {
|
||||||
|
if (node instanceof Place) {
|
||||||
|
Place place = (Place) node;
|
||||||
|
if (place.getName().equals(predecessor.getName() + predecessor_suffix)) {
|
||||||
|
arc1.setTarget(place);
|
||||||
|
arc2.setTarget(place);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (node instanceof Transition) {
|
||||||
|
Transition transition = (Transition) node;
|
||||||
|
if (transition.getName().equals(successor.getName() + successor_suffix)) {
|
||||||
|
transition.getArcs().add(arc1);
|
||||||
|
transition.getArcs().add(arc2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Conversion des Resource et Request en Node et Arcs
|
||||||
|
for (Object o : process.getProcessElements()) {
|
||||||
|
if (o instanceof simplepdl.Resource) {
|
||||||
|
|
||||||
|
simplepdl.Resource r = (simplepdl.Resource) o;
|
||||||
|
String name = r.getName();
|
||||||
|
int qty = r.getQuantity();
|
||||||
|
|
||||||
|
Place res = myFactory.createPlace();
|
||||||
|
res.setName(name);
|
||||||
|
res.setTokens(qty);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (o instanceof simplepdl.Request) {
|
||||||
|
|
||||||
|
Request r = (Request) o;
|
||||||
|
simplepdl.Resource target = r.getTarget();
|
||||||
|
int qty = r.getQuantity();
|
||||||
|
|
||||||
|
Arc arc1 = myFactory.createArc();
|
||||||
|
arc1.setOutgoing(true);
|
||||||
|
arc1.setWeight(qty);
|
||||||
|
arc1.setTarget(target);
|
||||||
|
Arc arc2 = myFactory.createArc();
|
||||||
|
arc2.setOutgoing(false);
|
||||||
|
arc2.setWeight(qty);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Créer le nouveau xmi (modèle convertit)
|
||||||
|
URI convURI = URI.createURI("models/Developpement_petrinet.xmi");
|
||||||
|
Resource conv = resSet.createResource(convURI);
|
||||||
|
|
||||||
|
// Ajouter le Network dans le nouveau modèle
|
||||||
|
conv.getContents().add(network);
|
||||||
|
|
||||||
|
// Sauver la ressource
|
||||||
|
try {
|
||||||
|
conv.save(Collections.EMPTY_MAP);
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,16 @@
|
||||||
|
source.. = src/,\
|
||||||
|
src-gen/,\
|
||||||
|
xtend-gen/
|
||||||
|
bin.includes = META-INF/,\
|
||||||
|
.,\
|
||||||
|
plugin.xml
|
||||||
|
additional.bundles = org.eclipse.xtext.xbase,\
|
||||||
|
org.eclipse.xtext.common.types,\
|
||||||
|
org.eclipse.xtext.xtext.generator,\
|
||||||
|
org.eclipse.emf.codegen.ecore,\
|
||||||
|
org.eclipse.emf.mwe.utils,\
|
||||||
|
org.eclipse.emf.mwe2.launch,\
|
||||||
|
org.eclipse.emf.mwe2.lib,\
|
||||||
|
org.objectweb.asm,\
|
||||||
|
org.apache.commons.logging,\
|
||||||
|
org.apache.log4j
|
|
@ -1,85 +0,0 @@
|
||||||
package simplepdl.manip;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
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.resource.impl.ResourceSetImpl;
|
|
||||||
import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
|
|
||||||
|
|
||||||
import simplepdl.Process;
|
|
||||||
import simplepdl.WorkDefinition;
|
|
||||||
import simplepdl.WorkSequence;
|
|
||||||
import simplepdl.WorkSequenceType;
|
|
||||||
import simplepdl.SimplepdlFactory;
|
|
||||||
import simplepdl.SimplepdlPackage;
|
|
||||||
|
|
||||||
public class simplepdl2petrinet {
|
|
||||||
|
|
||||||
public static void main(String[] args) {
|
|
||||||
|
|
||||||
// Charger le package SimplePDL afin de l'enregistrer dans le registre d'Eclipse.
|
|
||||||
SimplepdlPackage packageInstance = SimplepdlPackage.eINSTANCE;
|
|
||||||
|
|
||||||
// Enregistrer l'extension ".xmi" comme devant être ouverte Ã
|
|
||||||
// l'aide d'un objet "XMIResourceFactoryImpl"
|
|
||||||
Resource.Factory.Registry reg = Resource.Factory.Registry.INSTANCE;
|
|
||||||
Map<String, Object> m = reg.getExtensionToFactoryMap();
|
|
||||||
m.put("xmi", new XMIResourceFactoryImpl());
|
|
||||||
|
|
||||||
// Créer un objet resourceSetImpl qui contiendra une ressource EMF (le modèle)
|
|
||||||
ResourceSet resSet = new ResourceSetImpl();
|
|
||||||
|
|
||||||
// Définir la ressource (le modèle)
|
|
||||||
URI modelURI = URI.createURI("models/SimplePDLCreator_Created_Process.xmi");
|
|
||||||
Resource resource = resSet.createResource(modelURI);
|
|
||||||
|
|
||||||
// La fabrique pour fabriquer les éléments de SimplePDL
|
|
||||||
SimplepdlFactory myFactory = SimplepdlFactory.eINSTANCE;
|
|
||||||
|
|
||||||
// Créer un élément Process
|
|
||||||
Process process = myFactory.createProcess();
|
|
||||||
process.setName("Mon premier processus");
|
|
||||||
|
|
||||||
// Ajouter le Process dans le modèle
|
|
||||||
resource.getContents().add(process);
|
|
||||||
|
|
||||||
// Ajouter deux WorkDefinitions
|
|
||||||
WorkDefinition wd1 = myFactory.createWorkDefinition();
|
|
||||||
wd1.setName("Ma première WorkDefinition, quelle émotion");
|
|
||||||
|
|
||||||
WorkDefinition wd2 = myFactory.createWorkDefinition();
|
|
||||||
wd2.setName("Ma deuxième WorkDefinition, toujours autant d'émotion");
|
|
||||||
|
|
||||||
process.getProcessElements().add(wd1);
|
|
||||||
process.getProcessElements().add(wd2);
|
|
||||||
|
|
||||||
// Ajouter une WorkSequence entre les deux WorkDefinitions
|
|
||||||
WorkSequence seq = myFactory.createWorkSequence();
|
|
||||||
seq.setPredecessor(wd1);
|
|
||||||
seq.setSuccessor(wd2);
|
|
||||||
seq.setLinkType(WorkSequenceType.FINISH_TO_FINISH);
|
|
||||||
|
|
||||||
process.getProcessElements().add(seq);
|
|
||||||
|
|
||||||
// Ajouter une deuxième WorkSequence entre les deux WorkDefinitions
|
|
||||||
WorkSequence seq2 = myFactory.createWorkSequence();
|
|
||||||
seq2.setPredecessor(wd1);
|
|
||||||
seq2.setSuccessor(wd2);
|
|
||||||
seq2.setLinkType(WorkSequenceType.START_TO_START);
|
|
||||||
|
|
||||||
process.getProcessElements().add(seq2);
|
|
||||||
|
|
||||||
|
|
||||||
// Sauver la ressource
|
|
||||||
try {
|
|
||||||
resource.save(Collections.EMPTY_MAP);
|
|
||||||
} catch (IOException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -0,0 +1,207 @@
|
||||||
|
package simplepdl.manip;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
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.xmi.impl.XMIResourceFactoryImpl;
|
||||||
|
|
||||||
|
import petrinet.PetrinetPackage;
|
||||||
|
import petrinet.Place;
|
||||||
|
import petrinet.Transition;
|
||||||
|
import petrinet.Arc;
|
||||||
|
import petrinet.Network;
|
||||||
|
import petrinet.Node;
|
||||||
|
import petrinet.PetrinetFactory;
|
||||||
|
import simplepdl.Process;
|
||||||
|
import simplepdl.WorkDefinition;
|
||||||
|
import simplepdl.WorkSequence;
|
||||||
|
import simplepdl.WorkSequenceType;
|
||||||
|
import simplepdl.SimplepdlPackage;
|
||||||
|
|
||||||
|
public class simplepdl2petrinet {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
|
||||||
|
// Charger les package SimplePDL et Petrinet afin de les enregistrer dans le registre d'Eclipse.
|
||||||
|
SimplepdlPackage packageInstance = SimplepdlPackage.eINSTANCE;
|
||||||
|
PetrinetPackage packageInstance2 = PetrinetPackage.eINSTANCE;
|
||||||
|
|
||||||
|
// Enregistrer l'extension ".xmi" comme devant être ouverte à
|
||||||
|
// l'aide d'un objet "XMIResourceFactoryImpl"
|
||||||
|
Resource.Factory.Registry reg = Resource.Factory.Registry.INSTANCE;
|
||||||
|
Map<String, Object> m = reg.getExtensionToFactoryMap();
|
||||||
|
m.put("xmi", new XMIResourceFactoryImpl());
|
||||||
|
|
||||||
|
// Créer un objet resourceSetImpl qui contiendra une ressource EMF (le modèle)
|
||||||
|
ResourceSet resSet = new ResourceSetImpl();
|
||||||
|
|
||||||
|
// Charger la ressource (notre modèle)
|
||||||
|
URI modelURI = URI.createURI("test.xmi");
|
||||||
|
Resource resource = resSet.getResource(modelURI, true);
|
||||||
|
|
||||||
|
// Récupérer le premier élément du modèle (élément racine)
|
||||||
|
Process process = (Process) resource.getContents().get(0);
|
||||||
|
|
||||||
|
// La fabrique pour fabriquer les éléments de PetriNET
|
||||||
|
PetrinetFactory myFactory = PetrinetFactory.eINSTANCE;
|
||||||
|
|
||||||
|
// Créer un élément Network
|
||||||
|
Network network = myFactory.createNetwork();
|
||||||
|
network.setName(process.getName());
|
||||||
|
|
||||||
|
// Conversion des WorkDefinition en Node et Transition
|
||||||
|
for (Object o : process.getProcessElements()) {
|
||||||
|
if (o instanceof WorkDefinition) {
|
||||||
|
WorkDefinition wd = (WorkDefinition) o;
|
||||||
|
String name = wd.getName();
|
||||||
|
|
||||||
|
Place idle = myFactory.createPlace();
|
||||||
|
idle.setName(name + "_idle");
|
||||||
|
idle.setTokens(1);
|
||||||
|
Place started = myFactory.createPlace();
|
||||||
|
started.setName(name + "_started");
|
||||||
|
started.setTokens(0);
|
||||||
|
Place running = myFactory.createPlace();
|
||||||
|
running.setName(name + "_running");
|
||||||
|
running.setTokens(0);
|
||||||
|
Place finished = myFactory.createPlace();
|
||||||
|
finished.setName(name + "_finished");
|
||||||
|
finished.setTokens(0);
|
||||||
|
|
||||||
|
Arc pause2start = myFactory.createArc();
|
||||||
|
pause2start.setTarget(idle);
|
||||||
|
pause2start.setOutgoing(false);
|
||||||
|
pause2start.setWeight(1);
|
||||||
|
Arc start2running = myFactory.createArc();
|
||||||
|
start2running.setTarget(running);
|
||||||
|
start2running.setOutgoing(true);
|
||||||
|
start2running.setWeight(1);
|
||||||
|
Arc start2started = myFactory.createArc();
|
||||||
|
start2started.setTarget(started);
|
||||||
|
start2started.setOutgoing(true);
|
||||||
|
start2started.setWeight(1);
|
||||||
|
Transition start = myFactory.createTransition();
|
||||||
|
start.setName(name + "_start");
|
||||||
|
start.getArcs().add(pause2start);
|
||||||
|
start.getArcs().add(start2running);
|
||||||
|
start.getArcs().add(start2started);
|
||||||
|
|
||||||
|
Arc running2finish = myFactory.createArc();
|
||||||
|
running2finish.setTarget(running);
|
||||||
|
running2finish.setOutgoing(false);
|
||||||
|
running2finish.setWeight(1);
|
||||||
|
Arc finish2finished = myFactory.createArc();
|
||||||
|
finish2finished.setTarget(finished);
|
||||||
|
finish2finished.setOutgoing(true);
|
||||||
|
finish2finished.setWeight(1);
|
||||||
|
Transition finish = myFactory.createTransition();
|
||||||
|
finish.setName(name + "_finish");
|
||||||
|
finish.getArcs().add(running2finish);
|
||||||
|
finish.getArcs().add(finish2finished);
|
||||||
|
|
||||||
|
network.getNodes().add(idle);
|
||||||
|
network.getNodes().add(start);
|
||||||
|
network.getNodes().add(started);
|
||||||
|
network.getNodes().add(running);
|
||||||
|
network.getNodes().add(finish);
|
||||||
|
network.getNodes().add(finished);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Conversion des WorkSequence en Node et Transition
|
||||||
|
for (Object o : process.getProcessElements()) {
|
||||||
|
if (o instanceof WorkSequence) {
|
||||||
|
WorkSequence ws = (WorkSequence) o;
|
||||||
|
WorkSequenceType type = ws.getLinkType();
|
||||||
|
WorkDefinition predecessor = ws.getPredecessor();
|
||||||
|
WorkDefinition successor = ws.getSuccessor();
|
||||||
|
|
||||||
|
// creation des suffixs permettant la recherche des noeuds
|
||||||
|
String predecessor_suffix = new String();
|
||||||
|
String successor_suffix = new String();
|
||||||
|
switch (type) {
|
||||||
|
case START_TO_START:
|
||||||
|
predecessor_suffix = "_started";
|
||||||
|
successor_suffix = "_start";
|
||||||
|
break;
|
||||||
|
case START_TO_FINISH:
|
||||||
|
predecessor_suffix = "_started";
|
||||||
|
successor_suffix = "_finished";
|
||||||
|
break;
|
||||||
|
case FINISH_TO_START:
|
||||||
|
predecessor_suffix = "_finished";
|
||||||
|
successor_suffix = "_start";
|
||||||
|
break;
|
||||||
|
case FINISH_TO_FINISH:
|
||||||
|
predecessor_suffix = "_finished";
|
||||||
|
successor_suffix = "_finish";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
System.out.print("the fuck ?");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// creation du read-arc
|
||||||
|
Arc arc1 = myFactory.createArc();
|
||||||
|
arc1.setOutgoing(false);
|
||||||
|
arc1.setWeight(1);
|
||||||
|
Arc arc2 = myFactory.createArc();
|
||||||
|
arc2.setOutgoing(true);
|
||||||
|
arc2.setWeight(1);
|
||||||
|
|
||||||
|
for (Node node : network.getNodes()) {
|
||||||
|
if (node instanceof Place) {
|
||||||
|
Place place = (Place) node;
|
||||||
|
if (place.getName().equals(predecessor.getName() + predecessor_suffix)) {
|
||||||
|
arc1.setTarget(place);
|
||||||
|
arc2.setTarget(place);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (node instanceof Transition) {
|
||||||
|
Transition transition = (Transition) node;
|
||||||
|
if (transition.getName().equals(successor.getName() + successor_suffix)) {
|
||||||
|
transition.getArcs().add(arc1);
|
||||||
|
transition.getArcs().add(arc2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
System.out.println("mdr2");
|
||||||
|
|
||||||
|
// Conversion des WorkSequence en Node et Transition
|
||||||
|
for (Object o : process.getProcessElements()) {
|
||||||
|
if (o instanceof Resource) {
|
||||||
|
|
||||||
|
Resource r = (Resource) o;
|
||||||
|
EObject qty = r.getEObject("quantity");
|
||||||
|
|
||||||
|
System.out.println(qty);
|
||||||
|
System.out.println("mdr");
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Créer le nouveau xmi (modèle convertit)
|
||||||
|
URI convURI = URI.createURI("models/Developpement_petrinet.xmi");
|
||||||
|
Resource conv = resSet.createResource(convURI);
|
||||||
|
|
||||||
|
// Ajouter le Network dans le nouveau modèle
|
||||||
|
conv.getContents().add(network);
|
||||||
|
|
||||||
|
// Sauver la ressource
|
||||||
|
try {
|
||||||
|
conv.save(Collections.EMPTY_MAP);
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,205 @@
|
||||||
|
package simplepdl.manip;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
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.xmi.impl.XMIResourceFactoryImpl;
|
||||||
|
|
||||||
|
import petrinet.PetrinetPackage;
|
||||||
|
import petrinet.Place;
|
||||||
|
import petrinet.Transition;
|
||||||
|
import petrinet.Arc;
|
||||||
|
import petrinet.Network;
|
||||||
|
import petrinet.Node;
|
||||||
|
import petrinet.PetrinetFactory;
|
||||||
|
import simplepdl.Process;
|
||||||
|
import simplepdl.WorkDefinition;
|
||||||
|
import simplepdl.WorkSequence;
|
||||||
|
import simplepdl.WorkSequenceType;
|
||||||
|
import simplepdl.SimplepdlPackage;
|
||||||
|
|
||||||
|
public class simplepdl2petrinet {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
|
||||||
|
// Charger les package SimplePDL et Petrinet afin de les enregistrer dans le registre d'Eclipse.
|
||||||
|
SimplepdlPackage packageInstance = SimplepdlPackage.eINSTANCE;
|
||||||
|
PetrinetPackage packageInstance2 = PetrinetPackage.eINSTANCE;
|
||||||
|
|
||||||
|
// Enregistrer l'extension ".xmi" comme devant être ouverte à
|
||||||
|
// l'aide d'un objet "XMIResourceFactoryImpl"
|
||||||
|
Resource.Factory.Registry reg = Resource.Factory.Registry.INSTANCE;
|
||||||
|
Map<String, Object> m = reg.getExtensionToFactoryMap();
|
||||||
|
m.put("xmi", new XMIResourceFactoryImpl());
|
||||||
|
|
||||||
|
// Créer un objet resourceSetImpl qui contiendra une ressource EMF (le modèle)
|
||||||
|
ResourceSet resSet = new ResourceSetImpl();
|
||||||
|
|
||||||
|
// Charger la ressource (notre modèle)
|
||||||
|
URI modelURI = URI.createURI("test.xmi");
|
||||||
|
Resource resource = resSet.getResource(modelURI, true);
|
||||||
|
|
||||||
|
// Récupérer le premier élément du modèle (élément racine)
|
||||||
|
Process process = (Process) resource.getContents().get(0);
|
||||||
|
|
||||||
|
// La fabrique pour fabriquer les éléments de PetriNET
|
||||||
|
PetrinetFactory myFactory = PetrinetFactory.eINSTANCE;
|
||||||
|
|
||||||
|
// Créer un élément Network
|
||||||
|
Network network = myFactory.createNetwork();
|
||||||
|
network.setName(process.getName());
|
||||||
|
|
||||||
|
// Conversion des WorkDefinition en Node et Transition
|
||||||
|
for (Object o : process.getProcessElements()) {
|
||||||
|
if (o instanceof WorkDefinition) {
|
||||||
|
WorkDefinition wd = (WorkDefinition) o;
|
||||||
|
String name = wd.getName();
|
||||||
|
|
||||||
|
Place idle = myFactory.createPlace();
|
||||||
|
idle.setName(name + "_idle");
|
||||||
|
idle.setTokens(1);
|
||||||
|
Place started = myFactory.createPlace();
|
||||||
|
started.setName(name + "_started");
|
||||||
|
started.setTokens(0);
|
||||||
|
Place running = myFactory.createPlace();
|
||||||
|
running.setName(name + "_running");
|
||||||
|
running.setTokens(0);
|
||||||
|
Place finished = myFactory.createPlace();
|
||||||
|
finished.setName(name + "_finished");
|
||||||
|
finished.setTokens(0);
|
||||||
|
|
||||||
|
Arc pause2start = myFactory.createArc();
|
||||||
|
pause2start.setTarget(idle);
|
||||||
|
pause2start.setOutgoing(false);
|
||||||
|
pause2start.setWeight(1);
|
||||||
|
Arc start2running = myFactory.createArc();
|
||||||
|
start2running.setTarget(running);
|
||||||
|
start2running.setOutgoing(true);
|
||||||
|
start2running.setWeight(1);
|
||||||
|
Arc start2started = myFactory.createArc();
|
||||||
|
start2started.setTarget(started);
|
||||||
|
start2started.setOutgoing(true);
|
||||||
|
start2started.setWeight(1);
|
||||||
|
Transition start = myFactory.createTransition();
|
||||||
|
start.setName(name + "_start");
|
||||||
|
start.getArcs().add(pause2start);
|
||||||
|
start.getArcs().add(start2running);
|
||||||
|
start.getArcs().add(start2started);
|
||||||
|
|
||||||
|
Arc running2finish = myFactory.createArc();
|
||||||
|
running2finish.setTarget(running);
|
||||||
|
running2finish.setOutgoing(false);
|
||||||
|
running2finish.setWeight(1);
|
||||||
|
Arc finish2finished = myFactory.createArc();
|
||||||
|
finish2finished.setTarget(finished);
|
||||||
|
finish2finished.setOutgoing(true);
|
||||||
|
finish2finished.setWeight(1);
|
||||||
|
Transition finish = myFactory.createTransition();
|
||||||
|
finish.setName(name + "_finish");
|
||||||
|
finish.getArcs().add(running2finish);
|
||||||
|
finish.getArcs().add(finish2finished);
|
||||||
|
|
||||||
|
network.getNodes().add(idle);
|
||||||
|
network.getNodes().add(start);
|
||||||
|
network.getNodes().add(started);
|
||||||
|
network.getNodes().add(running);
|
||||||
|
network.getNodes().add(finish);
|
||||||
|
network.getNodes().add(finished);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Conversion des WorkSequence en Node et Transition
|
||||||
|
for (Object o : process.getProcessElements()) {
|
||||||
|
if (o instanceof WorkSequence) {
|
||||||
|
WorkSequence ws = (WorkSequence) o;
|
||||||
|
WorkSequenceType type = ws.getLinkType();
|
||||||
|
WorkDefinition predecessor = ws.getPredecessor();
|
||||||
|
WorkDefinition successor = ws.getSuccessor();
|
||||||
|
|
||||||
|
// creation des suffixs permettant la recherche des noeuds
|
||||||
|
String predecessor_suffix = new String();
|
||||||
|
String successor_suffix = new String();
|
||||||
|
switch (type) {
|
||||||
|
case START_TO_START:
|
||||||
|
predecessor_suffix = "_started";
|
||||||
|
successor_suffix = "_start";
|
||||||
|
break;
|
||||||
|
case START_TO_FINISH:
|
||||||
|
predecessor_suffix = "_started";
|
||||||
|
successor_suffix = "_finished";
|
||||||
|
break;
|
||||||
|
case FINISH_TO_START:
|
||||||
|
predecessor_suffix = "_finished";
|
||||||
|
successor_suffix = "_start";
|
||||||
|
break;
|
||||||
|
case FINISH_TO_FINISH:
|
||||||
|
predecessor_suffix = "_finished";
|
||||||
|
successor_suffix = "_finish";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
System.out.print("the fuck ?");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// creation du read-arc
|
||||||
|
Arc arc1 = myFactory.createArc();
|
||||||
|
arc1.setOutgoing(false);
|
||||||
|
arc1.setWeight(1);
|
||||||
|
Arc arc2 = myFactory.createArc();
|
||||||
|
arc2.setOutgoing(true);
|
||||||
|
arc2.setWeight(1);
|
||||||
|
|
||||||
|
for (Node node : network.getNodes()) {
|
||||||
|
if (node instanceof Place) {
|
||||||
|
Place place = (Place) node;
|
||||||
|
if (place.getName().equals(predecessor.getName() + predecessor_suffix)) {
|
||||||
|
arc1.setTarget(place);
|
||||||
|
arc2.setTarget(place);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (node instanceof Transition) {
|
||||||
|
Transition transition = (Transition) node;
|
||||||
|
if (transition.getName().equals(successor.getName() + successor_suffix)) {
|
||||||
|
transition.getArcs().add(arc1);
|
||||||
|
transition.getArcs().add(arc2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Conversion des WorkSequence en Node et Transition
|
||||||
|
for (Object o : process.getProcessElements()) {
|
||||||
|
if (o instanceof Resource) {
|
||||||
|
|
||||||
|
Resource r = (Resource) o;
|
||||||
|
EObject qty = r.getEObject("quantity");
|
||||||
|
|
||||||
|
print(qty);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Créer le nouveau xmi (modèle convertit)
|
||||||
|
URI convURI = URI.createURI("models/Developpement_petrinet.xmi");
|
||||||
|
Resource conv = resSet.createResource(convURI);
|
||||||
|
|
||||||
|
// Ajouter le Network dans le nouveau modèle
|
||||||
|
conv.getContents().add(network);
|
||||||
|
|
||||||
|
// Sauver la ressource
|
||||||
|
try {
|
||||||
|
conv.save(Collections.EMPTY_MAP);
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,2 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<viewpoint:DAnalysis xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:viewpoint="http://www.eclipse.org/sirius/1.1.0" uid="_rlbscCtrEeyPENyXrdwYKQ" version="14.3.1.202003261200"/>
|
|
@ -0,0 +1,6 @@
|
||||||
|
source.. = src/,\
|
||||||
|
src-gen/,\
|
||||||
|
xtend-gen/
|
||||||
|
bin.includes = META-INF/,\
|
||||||
|
.,\
|
||||||
|
plugin.xml
|
|
@ -0,0 +1,60 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<simplepdl:Process
|
||||||
|
xmi:version="2.0"
|
||||||
|
xmlns:xmi="http://www.omg.org/XMI"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xmlns:simplepdl="http://simplepdl"
|
||||||
|
name="Developpement">
|
||||||
|
<processElements
|
||||||
|
xsi:type="simplepdl:WorkDefinition"
|
||||||
|
linksToSuccessors="//@processElements.4 //@processElements.6 //@processElements.7 //@processElements.8"
|
||||||
|
name="Conception">
|
||||||
|
<requests
|
||||||
|
quantity="15"
|
||||||
|
target="//@processElements.10"/>
|
||||||
|
</processElements>
|
||||||
|
<processElements
|
||||||
|
xsi:type="simplepdl:WorkDefinition"
|
||||||
|
linksToPredecessors="//@processElements.4"
|
||||||
|
linksToSuccessors="//@processElements.5"
|
||||||
|
name="Programmation"/>
|
||||||
|
<processElements
|
||||||
|
xsi:type="simplepdl:WorkDefinition"
|
||||||
|
linksToPredecessors="//@processElements.5 //@processElements.6"
|
||||||
|
name="RedactionTests"/>
|
||||||
|
<processElements
|
||||||
|
xsi:type="simplepdl:WorkDefinition"
|
||||||
|
linksToPredecessors="//@processElements.7 //@processElements.8"
|
||||||
|
name="RedactionDocs"/>
|
||||||
|
<processElements
|
||||||
|
xsi:type="simplepdl:WorkSequence"
|
||||||
|
linkType="finishToStart"
|
||||||
|
predecessor="//@processElements.0"
|
||||||
|
successor="//@processElements.1"/>
|
||||||
|
<processElements
|
||||||
|
xsi:type="simplepdl:WorkSequence"
|
||||||
|
linkType="finishToFinish"
|
||||||
|
predecessor="//@processElements.1"
|
||||||
|
successor="//@processElements.2"/>
|
||||||
|
<processElements
|
||||||
|
xsi:type="simplepdl:WorkSequence"
|
||||||
|
predecessor="//@processElements.0"
|
||||||
|
successor="//@processElements.2"/>
|
||||||
|
<processElements
|
||||||
|
xsi:type="simplepdl:WorkSequence"
|
||||||
|
predecessor="//@processElements.0"
|
||||||
|
successor="//@processElements.3"/>
|
||||||
|
<processElements
|
||||||
|
xsi:type="simplepdl:WorkSequence"
|
||||||
|
linkType="finishToFinish"
|
||||||
|
predecessor="//@processElements.0"
|
||||||
|
successor="//@processElements.3"/>
|
||||||
|
<processElements
|
||||||
|
xsi:type="simplepdl:Resource"
|
||||||
|
quantity="10"
|
||||||
|
name="Crayon"/>
|
||||||
|
<processElements
|
||||||
|
xsi:type="simplepdl:Resource"
|
||||||
|
quantity="20"
|
||||||
|
name="Papier"/>
|
||||||
|
</simplepdl:Process>
|
|
@ -1,88 +0,0 @@
|
||||||
package simplepdl.manip;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
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.resource.impl.ResourceSetImpl;
|
|
||||||
import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
|
|
||||||
|
|
||||||
import petrinet.PetrinetPackage;
|
|
||||||
import petrinet.PetrinetFactory;
|
|
||||||
import simplepdl.Process;
|
|
||||||
import simplepdl.WorkDefinition;
|
|
||||||
import simplepdl.WorkSequence;
|
|
||||||
import simplepdl.WorkSequenceType;
|
|
||||||
import simplepdl.SimplepdlFactory;
|
|
||||||
import simplepdl.SimplepdlPackage;
|
|
||||||
|
|
||||||
public class simplepdl2petrinet {
|
|
||||||
|
|
||||||
public static void main(String[] args) {
|
|
||||||
|
|
||||||
// Charger les package SimplePDL et Petrinet afin de les enregistrer dans le registre d'Eclipse.
|
|
||||||
SimplepdlPackage packageInstance = SimplepdlPackage.eINSTANCE;
|
|
||||||
PetrinetPackage packageInstance2 = PetrinetPackage.eINSTANCE;
|
|
||||||
|
|
||||||
// Enregistrer l'extension ".xmi" comme devant être ouverte Ã
|
|
||||||
// l'aide d'un objet "XMIResourceFactoryImpl"
|
|
||||||
Resource.Factory.Registry reg = Resource.Factory.Registry.INSTANCE;
|
|
||||||
Map<String, Object> m = reg.getExtensionToFactoryMap();
|
|
||||||
m.put("xmi", new XMIResourceFactoryImpl());
|
|
||||||
|
|
||||||
// Créer un objet resourceSetImpl qui contiendra une ressource EMF (le modèle)
|
|
||||||
ResourceSet resSet = new ResourceSetImpl();
|
|
||||||
|
|
||||||
// Définir la ressource (le modèle)
|
|
||||||
URI modelURI = URI.createURI("models/SimplePDLCreator_Created_Process.xmi");
|
|
||||||
Resource resource = resSet.createResource(modelURI);
|
|
||||||
|
|
||||||
// La fabrique pour fabriquer les éléments de SimplePDL
|
|
||||||
SimplepdlFactory myFactory = SimplepdlFactory.eINSTANCE;
|
|
||||||
|
|
||||||
// Créer un élément Process
|
|
||||||
Process process = myFactory.createProcess();
|
|
||||||
process.setName("Mon premier processus");
|
|
||||||
|
|
||||||
// Ajouter le Process dans le modèle
|
|
||||||
resource.getContents().add(process);
|
|
||||||
|
|
||||||
// Ajouter deux WorkDefinitions
|
|
||||||
WorkDefinition wd1 = myFactory.createWorkDefinition();
|
|
||||||
wd1.setName("Ma première WorkDefinition, quelle émotion");
|
|
||||||
|
|
||||||
WorkDefinition wd2 = myFactory.createWorkDefinition();
|
|
||||||
wd2.setName("Ma deuxième WorkDefinition, toujours autant d'émotion");
|
|
||||||
|
|
||||||
process.getProcessElements().add(wd1);
|
|
||||||
process.getProcessElements().add(wd2);
|
|
||||||
|
|
||||||
// Ajouter une WorkSequence entre les deux WorkDefinitions
|
|
||||||
WorkSequence seq = myFactory.createWorkSequence();
|
|
||||||
seq.setPredecessor(wd1);
|
|
||||||
seq.setSuccessor(wd2);
|
|
||||||
seq.setLinkType(WorkSequenceType.FINISH_TO_FINISH);
|
|
||||||
|
|
||||||
process.getProcessElements().add(seq);
|
|
||||||
|
|
||||||
// Ajouter une deuxième WorkSequence entre les deux WorkDefinitions
|
|
||||||
WorkSequence seq2 = myFactory.createWorkSequence();
|
|
||||||
seq2.setPredecessor(wd1);
|
|
||||||
seq2.setSuccessor(wd2);
|
|
||||||
seq2.setLinkType(WorkSequenceType.START_TO_START);
|
|
||||||
|
|
||||||
process.getProcessElements().add(seq2);
|
|
||||||
|
|
||||||
|
|
||||||
// Sauver la ressource
|
|
||||||
try {
|
|
||||||
resource.save(Collections.EMPTY_MAP);
|
|
||||||
} catch (IOException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
source.. = src/,\
|
||||||
|
src-gen/,\
|
||||||
|
xtend-gen/
|
||||||
|
bin.includes = META-INF/,\
|
||||||
|
.,\
|
||||||
|
plugin.xml
|
|
@ -0,0 +1,45 @@
|
||||||
|
// automatically generated by Xtext
|
||||||
|
grammar fr.n7.simplepdl.txt.PDL with org.eclipse.xtext.common.Terminals
|
||||||
|
|
||||||
|
import "http://simplepdl"
|
||||||
|
import "http://www.eclipse.org/emf/2002/Ecore" as ecore
|
||||||
|
|
||||||
|
Process :
|
||||||
|
'process' name=ID '{'
|
||||||
|
processElements+=ProcessElement*
|
||||||
|
'}' ;
|
||||||
|
|
||||||
|
ProcessElement :
|
||||||
|
WorkDefinition | WorkSequence | Guidance | Resource
|
||||||
|
;
|
||||||
|
|
||||||
|
WorkDefinition :
|
||||||
|
'wd' name=ID
|
||||||
|
requests+=Request*
|
||||||
|
;
|
||||||
|
|
||||||
|
WorkSequence :
|
||||||
|
'ws' linkType=WorkSequenceType
|
||||||
|
'from' predecessor=[WorkDefinition]
|
||||||
|
'to' successor=[WorkDefinition]
|
||||||
|
;
|
||||||
|
|
||||||
|
Guidance :
|
||||||
|
'note' text=STRING
|
||||||
|
;
|
||||||
|
|
||||||
|
Resource :
|
||||||
|
'res' name=ID quantity=INT
|
||||||
|
;
|
||||||
|
|
||||||
|
Request :
|
||||||
|
'req' target=[Resource] quantity=INT
|
||||||
|
;
|
||||||
|
|
||||||
|
|
||||||
|
enum WorkSequenceType :
|
||||||
|
startToStart = 's2s'
|
||||||
|
| finishToStart = 'f2s'
|
||||||
|
| startToFinish = 's2f'
|
||||||
|
| finishToFinish = 'f2f'
|
||||||
|
;
|
|
@ -0,0 +1,26 @@
|
||||||
|
grammar fr.n7.PDL1 with org.eclipse.xtext.common.Terminals
|
||||||
|
generate pDL1 "http://www.n7.fr/PDL1"
|
||||||
|
|
||||||
|
Process :
|
||||||
|
'process' name=ID ;
|
||||||
|
|
||||||
|
ProcessElement :
|
||||||
|
WorkDefinition | WorkSequence | Guidance;
|
||||||
|
|
||||||
|
WorkDefinition :
|
||||||
|
'wd' name=ID;
|
||||||
|
|
||||||
|
WorkSequence :
|
||||||
|
'ws' linkType=WorkSequenceType
|
||||||
|
'from' predecessor=[WorkDefinition]
|
||||||
|
'to' successor=[WorkDefinition] ;
|
||||||
|
|
||||||
|
Guidance :
|
||||||
|
'note' texte=STRING ;
|
||||||
|
|
||||||
|
enum WorkSequenceType :
|
||||||
|
start2start = 's2s'
|
||||||
|
| finish2start = 'f2s'
|
||||||
|
| start2finish = 's2f'
|
||||||
|
| finish2finish = 'f2f'
|
||||||
|
;
|
|
@ -0,0 +1,29 @@
|
||||||
|
grammar fr.n7.PDL1 with org.eclipse.xtext.common.Terminals
|
||||||
|
generate pDL1 "http://www.n7.fr/PDL1"
|
||||||
|
|
||||||
|
Process :
|
||||||
|
'process' ':' name=ID
|
||||||
|
processElements+=ProcessElement* ;
|
||||||
|
|
||||||
|
|
||||||
|
ProcessElement :
|
||||||
|
WorkDefinitionList | WorkSequenceList ;
|
||||||
|
|
||||||
|
WorkDefinitionList :
|
||||||
|
'workdefinitions' ':' WorkDefinition+=WorkDefinition* ;
|
||||||
|
|
||||||
|
WorkDefinition :
|
||||||
|
name=ID ";" ;
|
||||||
|
|
||||||
|
WorkSequenceList :
|
||||||
|
'worksequences' ':' WorkSequence+=WorkSequence* ;
|
||||||
|
|
||||||
|
WorkSequence :
|
||||||
|
predecessor=[WorkDefinition] linkType=WorkSequenceType successor=[WorkDefinition] ";" ;
|
||||||
|
|
||||||
|
enum WorkSequenceType :
|
||||||
|
start2start = 's2s'
|
||||||
|
| finish2start = 'f2s'
|
||||||
|
| start2finish = 's2f'
|
||||||
|
| finish2finish = 'f2f'
|
||||||
|
;
|
|
@ -0,0 +1,219 @@
|
||||||
|
package simplepdl.manip;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
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.resource.impl.ResourceSetImpl;
|
||||||
|
import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
|
||||||
|
|
||||||
|
import petrinet.Arc;
|
||||||
|
import petrinet.Network;
|
||||||
|
import petrinet.Node;
|
||||||
|
import petrinet.PetrinetFactory;
|
||||||
|
import petrinet.PetrinetPackage;
|
||||||
|
import petrinet.Place;
|
||||||
|
import petrinet.Transition;
|
||||||
|
import simplepdl.Process;
|
||||||
|
import simplepdl.SimplepdlPackage;
|
||||||
|
import simplepdl.WorkDefinition;
|
||||||
|
import simplepdl.WorkSequence;
|
||||||
|
import simplepdl.WorkSequenceType;
|
||||||
|
import simplepdl.Request;
|
||||||
|
|
||||||
|
public class simplepdl2petrinet {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
|
||||||
|
// Charger les package SimplePDL et Petrinet afin de les enregistrer dans le registre d'Eclipse.
|
||||||
|
SimplepdlPackage packageInstance = SimplepdlPackage.eINSTANCE;
|
||||||
|
PetrinetPackage packageInstance2 = PetrinetPackage.eINSTANCE;
|
||||||
|
|
||||||
|
// Enregistrer l'extension ".xmi" comme devant être ouverte à
|
||||||
|
// l'aide d'un objet "XMIResourceFactoryImpl"
|
||||||
|
Resource.Factory.Registry reg = Resource.Factory.Registry.INSTANCE;
|
||||||
|
Map<String, Object> m = reg.getExtensionToFactoryMap();
|
||||||
|
m.put("xmi", new XMIResourceFactoryImpl());
|
||||||
|
|
||||||
|
// Créer un objet resourceSetImpl qui contiendra une ressource EMF (le modèle)
|
||||||
|
ResourceSet resSet = new ResourceSetImpl();
|
||||||
|
|
||||||
|
// Charger la ressource (notre modèle)
|
||||||
|
URI modelURI = URI.createURI("test.xmi");
|
||||||
|
Resource resource = resSet.getResource(modelURI, true);
|
||||||
|
|
||||||
|
// Récupérer le premier élément du modèle (élément racine)
|
||||||
|
Process process = (Process) resource.getContents().get(0);
|
||||||
|
|
||||||
|
// La fabrique pour fabriquer les éléments de PetriNET
|
||||||
|
PetrinetFactory myFactory = PetrinetFactory.eINSTANCE;
|
||||||
|
|
||||||
|
// Créer un élément Network
|
||||||
|
Network network = myFactory.createNetwork();
|
||||||
|
network.setName(process.getName());
|
||||||
|
|
||||||
|
// Conversion des WorkDefinition en Node et Transition
|
||||||
|
for (Object o : process.getProcessElements()) {
|
||||||
|
if (o instanceof WorkDefinition) {
|
||||||
|
WorkDefinition wd = (WorkDefinition) o;
|
||||||
|
String name = wd.getName();
|
||||||
|
|
||||||
|
Place idle = myFactory.createPlace();
|
||||||
|
idle.setName(name + "_idle");
|
||||||
|
idle.setTokens(1);
|
||||||
|
Place started = myFactory.createPlace();
|
||||||
|
started.setName(name + "_started");
|
||||||
|
started.setTokens(0);
|
||||||
|
Place running = myFactory.createPlace();
|
||||||
|
running.setName(name + "_running");
|
||||||
|
running.setTokens(0);
|
||||||
|
Place finished = myFactory.createPlace();
|
||||||
|
finished.setName(name + "_finished");
|
||||||
|
finished.setTokens(0);
|
||||||
|
|
||||||
|
Arc pause2start = myFactory.createArc();
|
||||||
|
pause2start.setTarget(idle);
|
||||||
|
pause2start.setOutgoing(false);
|
||||||
|
pause2start.setWeight(1);
|
||||||
|
Arc start2running = myFactory.createArc();
|
||||||
|
start2running.setTarget(running);
|
||||||
|
start2running.setOutgoing(true);
|
||||||
|
start2running.setWeight(1);
|
||||||
|
Arc start2started = myFactory.createArc();
|
||||||
|
start2started.setTarget(started);
|
||||||
|
start2started.setOutgoing(true);
|
||||||
|
start2started.setWeight(1);
|
||||||
|
Transition start = myFactory.createTransition();
|
||||||
|
start.setName(name + "_start");
|
||||||
|
start.getArcs().add(pause2start);
|
||||||
|
start.getArcs().add(start2running);
|
||||||
|
start.getArcs().add(start2started);
|
||||||
|
|
||||||
|
Arc running2finish = myFactory.createArc();
|
||||||
|
running2finish.setTarget(running);
|
||||||
|
running2finish.setOutgoing(false);
|
||||||
|
running2finish.setWeight(1);
|
||||||
|
Arc finish2finished = myFactory.createArc();
|
||||||
|
finish2finished.setTarget(finished);
|
||||||
|
finish2finished.setOutgoing(true);
|
||||||
|
finish2finished.setWeight(1);
|
||||||
|
Transition finish = myFactory.createTransition();
|
||||||
|
finish.setName(name + "_finish");
|
||||||
|
finish.getArcs().add(running2finish);
|
||||||
|
finish.getArcs().add(finish2finished);
|
||||||
|
|
||||||
|
network.getNodes().add(idle);
|
||||||
|
network.getNodes().add(start);
|
||||||
|
network.getNodes().add(started);
|
||||||
|
network.getNodes().add(running);
|
||||||
|
network.getNodes().add(finish);
|
||||||
|
network.getNodes().add(finished);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Conversion des WorkSequence en Node et Transition
|
||||||
|
for (Object o : process.getProcessElements()) {
|
||||||
|
if (o instanceof WorkSequence) {
|
||||||
|
WorkSequence ws = (WorkSequence) o;
|
||||||
|
WorkSequenceType type = ws.getLinkType();
|
||||||
|
WorkDefinition predecessor = ws.getPredecessor();
|
||||||
|
WorkDefinition successor = ws.getSuccessor();
|
||||||
|
|
||||||
|
// creation des suffixs permettant la recherche des noeuds
|
||||||
|
String predecessor_suffix = new String();
|
||||||
|
String successor_suffix = new String();
|
||||||
|
switch (type) {
|
||||||
|
case START_TO_START:
|
||||||
|
predecessor_suffix = "_started";
|
||||||
|
successor_suffix = "_start";
|
||||||
|
break;
|
||||||
|
case START_TO_FINISH:
|
||||||
|
predecessor_suffix = "_started";
|
||||||
|
successor_suffix = "_finished";
|
||||||
|
break;
|
||||||
|
case FINISH_TO_START:
|
||||||
|
predecessor_suffix = "_finished";
|
||||||
|
successor_suffix = "_start";
|
||||||
|
break;
|
||||||
|
case FINISH_TO_FINISH:
|
||||||
|
predecessor_suffix = "_finished";
|
||||||
|
successor_suffix = "_finish";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
System.out.print("the fuck ?");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// creation du read-arc
|
||||||
|
Arc arc1 = myFactory.createArc();
|
||||||
|
arc1.setOutgoing(false);
|
||||||
|
arc1.setWeight(1);
|
||||||
|
Arc arc2 = myFactory.createArc();
|
||||||
|
arc2.setOutgoing(true);
|
||||||
|
arc2.setWeight(1);
|
||||||
|
|
||||||
|
for (Node node : network.getNodes()) {
|
||||||
|
if (node instanceof Place) {
|
||||||
|
Place place = (Place) node;
|
||||||
|
if (place.getName().equals(predecessor.getName() + predecessor_suffix)) {
|
||||||
|
arc1.setTarget(place);
|
||||||
|
arc2.setTarget(place);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (node instanceof Transition) {
|
||||||
|
Transition transition = (Transition) node;
|
||||||
|
if (transition.getName().equals(successor.getName() + successor_suffix)) {
|
||||||
|
transition.getArcs().add(arc1);
|
||||||
|
transition.getArcs().add(arc2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Conversion des Resource et Request en Node et Arcs
|
||||||
|
for (Object o : process.getProcessElements()) {
|
||||||
|
if (o instanceof simplepdl.Resource) {
|
||||||
|
|
||||||
|
simplepdl.Resource r = (simplepdl.Resource) o;
|
||||||
|
String name = r.getName();
|
||||||
|
int qty = r.getQuantity();
|
||||||
|
|
||||||
|
Place res = myFactory.createPlace();
|
||||||
|
res.setName(name);
|
||||||
|
res.setTokens(qty);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (o instanceof simplepdl.Request) {
|
||||||
|
|
||||||
|
Request r = (Request) o;
|
||||||
|
simplepdl.Resource target = r.getTarget();
|
||||||
|
int qty = r.getQuantity();
|
||||||
|
|
||||||
|
Place res = myFactory.createPlace();
|
||||||
|
res.setName(name);
|
||||||
|
res.setTokens(qty);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Créer le nouveau xmi (modèle convertit)
|
||||||
|
URI convURI = URI.createURI("models/Developpement_petrinet.xmi");
|
||||||
|
Resource conv = resSet.createResource(convURI);
|
||||||
|
|
||||||
|
// Ajouter le Network dans le nouveau modèle
|
||||||
|
conv.getContents().add(network);
|
||||||
|
|
||||||
|
// Sauver la ressource
|
||||||
|
try {
|
||||||
|
conv.save(Collections.EMPTY_MAP);
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,201 @@
|
||||||
|
package simplepdl.manip;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
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.resource.impl.ResourceSetImpl;
|
||||||
|
import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
|
||||||
|
|
||||||
|
import petrinet.Arc;
|
||||||
|
import petrinet.Network;
|
||||||
|
import petrinet.Node;
|
||||||
|
import petrinet.PetrinetFactory;
|
||||||
|
import petrinet.PetrinetPackage;
|
||||||
|
import petrinet.Place;
|
||||||
|
import petrinet.Transition;
|
||||||
|
import simplepdl.Process;
|
||||||
|
import simplepdl.SimplepdlPackage;
|
||||||
|
import simplepdl.WorkDefinition;
|
||||||
|
import simplepdl.WorkSequence;
|
||||||
|
import simplepdl.WorkSequenceType;
|
||||||
|
|
||||||
|
public class simplepdl2petrinet {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
|
||||||
|
// Charger les package SimplePDL et Petrinet afin de les enregistrer dans le registre d'Eclipse.
|
||||||
|
SimplepdlPackage packageInstance = SimplepdlPackage.eINSTANCE;
|
||||||
|
PetrinetPackage packageInstance2 = PetrinetPackage.eINSTANCE;
|
||||||
|
|
||||||
|
// Enregistrer l'extension ".xmi" comme devant être ouverte à
|
||||||
|
// l'aide d'un objet "XMIResourceFactoryImpl"
|
||||||
|
Resource.Factory.Registry reg = Resource.Factory.Registry.INSTANCE;
|
||||||
|
Map<String, Object> m = reg.getExtensionToFactoryMap();
|
||||||
|
m.put("xmi", new XMIResourceFactoryImpl());
|
||||||
|
|
||||||
|
// Créer un objet resourceSetImpl qui contiendra une ressource EMF (le modèle)
|
||||||
|
ResourceSet resSet = new ResourceSetImpl();
|
||||||
|
|
||||||
|
// Charger la ressource (notre modèle)
|
||||||
|
URI modelURI = URI.createURI("test.xmi");
|
||||||
|
Resource resource = resSet.getResource(modelURI, true);
|
||||||
|
|
||||||
|
// Récupérer le premier élément du modèle (élément racine)
|
||||||
|
Process process = (Process) resource.getContents().get(0);
|
||||||
|
|
||||||
|
// La fabrique pour fabriquer les éléments de PetriNET
|
||||||
|
PetrinetFactory myFactory = PetrinetFactory.eINSTANCE;
|
||||||
|
|
||||||
|
// Créer un élément Network
|
||||||
|
Network network = myFactory.createNetwork();
|
||||||
|
network.setName(process.getName());
|
||||||
|
|
||||||
|
// Conversion des WorkDefinition en Node et Transition
|
||||||
|
for (Object o : process.getProcessElements()) {
|
||||||
|
if (o instanceof WorkDefinition) {
|
||||||
|
WorkDefinition wd = (WorkDefinition) o;
|
||||||
|
String name = wd.getName();
|
||||||
|
|
||||||
|
Place idle = myFactory.createPlace();
|
||||||
|
idle.setName(name + "_idle");
|
||||||
|
idle.setTokens(1);
|
||||||
|
Place started = myFactory.createPlace();
|
||||||
|
started.setName(name + "_started");
|
||||||
|
started.setTokens(0);
|
||||||
|
Place running = myFactory.createPlace();
|
||||||
|
running.setName(name + "_running");
|
||||||
|
running.setTokens(0);
|
||||||
|
Place finished = myFactory.createPlace();
|
||||||
|
finished.setName(name + "_finished");
|
||||||
|
finished.setTokens(0);
|
||||||
|
|
||||||
|
Arc pause2start = myFactory.createArc();
|
||||||
|
pause2start.setTarget(idle);
|
||||||
|
pause2start.setOutgoing(false);
|
||||||
|
pause2start.setWeight(1);
|
||||||
|
Arc start2running = myFactory.createArc();
|
||||||
|
start2running.setTarget(running);
|
||||||
|
start2running.setOutgoing(true);
|
||||||
|
start2running.setWeight(1);
|
||||||
|
Arc start2started = myFactory.createArc();
|
||||||
|
start2started.setTarget(started);
|
||||||
|
start2started.setOutgoing(true);
|
||||||
|
start2started.setWeight(1);
|
||||||
|
Transition start = myFactory.createTransition();
|
||||||
|
start.setName(name + "_start");
|
||||||
|
start.getArcs().add(pause2start);
|
||||||
|
start.getArcs().add(start2running);
|
||||||
|
start.getArcs().add(start2started);
|
||||||
|
|
||||||
|
Arc running2finish = myFactory.createArc();
|
||||||
|
running2finish.setTarget(running);
|
||||||
|
running2finish.setOutgoing(false);
|
||||||
|
running2finish.setWeight(1);
|
||||||
|
Arc finish2finished = myFactory.createArc();
|
||||||
|
finish2finished.setTarget(finished);
|
||||||
|
finish2finished.setOutgoing(true);
|
||||||
|
finish2finished.setWeight(1);
|
||||||
|
Transition finish = myFactory.createTransition();
|
||||||
|
finish.setName(name + "_finish");
|
||||||
|
finish.getArcs().add(running2finish);
|
||||||
|
finish.getArcs().add(finish2finished);
|
||||||
|
|
||||||
|
network.getNodes().add(idle);
|
||||||
|
network.getNodes().add(start);
|
||||||
|
network.getNodes().add(started);
|
||||||
|
network.getNodes().add(running);
|
||||||
|
network.getNodes().add(finish);
|
||||||
|
network.getNodes().add(finished);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Conversion des WorkSequence en Node et Transition
|
||||||
|
for (Object o : process.getProcessElements()) {
|
||||||
|
if (o instanceof WorkSequence) {
|
||||||
|
WorkSequence ws = (WorkSequence) o;
|
||||||
|
WorkSequenceType type = ws.getLinkType();
|
||||||
|
WorkDefinition predecessor = ws.getPredecessor();
|
||||||
|
WorkDefinition successor = ws.getSuccessor();
|
||||||
|
|
||||||
|
// creation des suffixs permettant la recherche des noeuds
|
||||||
|
String predecessor_suffix = new String();
|
||||||
|
String successor_suffix = new String();
|
||||||
|
switch (type) {
|
||||||
|
case START_TO_START:
|
||||||
|
predecessor_suffix = "_started";
|
||||||
|
successor_suffix = "_start";
|
||||||
|
break;
|
||||||
|
case START_TO_FINISH:
|
||||||
|
predecessor_suffix = "_started";
|
||||||
|
successor_suffix = "_finished";
|
||||||
|
break;
|
||||||
|
case FINISH_TO_START:
|
||||||
|
predecessor_suffix = "_finished";
|
||||||
|
successor_suffix = "_start";
|
||||||
|
break;
|
||||||
|
case FINISH_TO_FINISH:
|
||||||
|
predecessor_suffix = "_finished";
|
||||||
|
successor_suffix = "_finish";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
System.out.print("the fuck ?");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// creation du read-arc
|
||||||
|
Arc arc1 = myFactory.createArc();
|
||||||
|
arc1.setOutgoing(false);
|
||||||
|
arc1.setWeight(1);
|
||||||
|
Arc arc2 = myFactory.createArc();
|
||||||
|
arc2.setOutgoing(true);
|
||||||
|
arc2.setWeight(1);
|
||||||
|
|
||||||
|
for (Node node : network.getNodes()) {
|
||||||
|
if (node instanceof Place) {
|
||||||
|
Place place = (Place) node;
|
||||||
|
if (place.getName().equals(predecessor.getName() + predecessor_suffix)) {
|
||||||
|
arc1.setTarget(place);
|
||||||
|
arc2.setTarget(place);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (node instanceof Transition) {
|
||||||
|
Transition transition = (Transition) node;
|
||||||
|
if (transition.getName().equals(successor.getName() + successor_suffix)) {
|
||||||
|
transition.getArcs().add(arc1);
|
||||||
|
transition.getArcs().add(arc2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Conversion des WorkSequence en Node et Transition
|
||||||
|
for (Object o : process.getProcessElements()) {
|
||||||
|
if (o instanceof simplepdl.Resource) {
|
||||||
|
|
||||||
|
simplepdl.Resource r = (simplepdl.Resource) o;
|
||||||
|
int qty = r.getQuantity();
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Créer le nouveau xmi (modèle convertit)
|
||||||
|
URI convURI = URI.createURI("models/Developpement_petrinet.xmi");
|
||||||
|
Resource conv = resSet.createResource(convURI);
|
||||||
|
|
||||||
|
// Ajouter le Network dans le nouveau modèle
|
||||||
|
conv.getContents().add(network);
|
||||||
|
|
||||||
|
// Sauver la ressource
|
||||||
|
try {
|
||||||
|
conv.save(Collections.EMPTY_MAP);
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -1,91 +0,0 @@
|
||||||
package simplepdl.manip;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
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.resource.impl.ResourceSetImpl;
|
|
||||||
import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
|
|
||||||
|
|
||||||
import petrinet.PetrinetPackage;
|
|
||||||
import petrinet.PetrinetFactory;
|
|
||||||
import simplepdl.Process;
|
|
||||||
import simplepdl.WorkDefinition;
|
|
||||||
import simplepdl.WorkSequence;
|
|
||||||
import simplepdl.WorkSequenceType;
|
|
||||||
import simplepdl.SimplepdlFactory;
|
|
||||||
import simplepdl.SimplepdlPackage;
|
|
||||||
|
|
||||||
public class simplepdl2petrinet {
|
|
||||||
|
|
||||||
public static void main(String[] args) {
|
|
||||||
|
|
||||||
// Charger les package SimplePDL et Petrinet afin de les enregistrer dans le registre d'Eclipse.
|
|
||||||
SimplepdlPackage packageInstance = SimplepdlPackage.eINSTANCE;
|
|
||||||
PetrinetPackage packageInstance2 = PetrinetPackage.eINSTANCE;
|
|
||||||
|
|
||||||
// Enregistrer l'extension ".xmi" comme devant être ouverte à
|
|
||||||
// l'aide d'un objet "XMIResourceFactoryImpl"
|
|
||||||
Resource.Factory.Registry reg = Resource.Factory.Registry.INSTANCE;
|
|
||||||
Map<String, Object> m = reg.getExtensionToFactoryMap();
|
|
||||||
m.put("xmi", new XMIResourceFactoryImpl());
|
|
||||||
|
|
||||||
// Créer un objet resourceSetImpl qui contiendra une ressource EMF (le modèle)
|
|
||||||
ResourceSet resSet = new ResourceSetImpl();
|
|
||||||
|
|
||||||
// Charger la ressource (notre modèle)
|
|
||||||
URI modelURI = URI.createURI("pdl-sujet.xmi");
|
|
||||||
Resource resource = resSet.getResource(modelURI, true);
|
|
||||||
|
|
||||||
// Récupérer le premier élément du modèle (élément racine)
|
|
||||||
Process process = (Process) resource.getContents().get(0);
|
|
||||||
|
|
||||||
// La fabrique pour fabriquer les éléments de PetriNET
|
|
||||||
PetrinetFactory myFactory = PetrinetFactory.eINSTANCE;
|
|
||||||
|
|
||||||
// Créer un élément Process
|
|
||||||
Process process = myFactory.createProcess();
|
|
||||||
process.setName("Mon premier processus");
|
|
||||||
|
|
||||||
// Ajouter le Process dans le modèle
|
|
||||||
resource.getContents().add(process);
|
|
||||||
|
|
||||||
// Ajouter deux WorkDefinitions
|
|
||||||
WorkDefinition wd1 = myFactory.createWorkDefinition();
|
|
||||||
wd1.setName("Ma première WorkDefinition, quelle émotion");
|
|
||||||
|
|
||||||
WorkDefinition wd2 = myFactory.createWorkDefinition();
|
|
||||||
wd2.setName("Ma deuxième WorkDefinition, toujours autant d'émotion");
|
|
||||||
|
|
||||||
process.getProcessElements().add(wd1);
|
|
||||||
process.getProcessElements().add(wd2);
|
|
||||||
|
|
||||||
// Ajouter une WorkSequence entre les deux WorkDefinitions
|
|
||||||
WorkSequence seq = myFactory.createWorkSequence();
|
|
||||||
seq.setPredecessor(wd1);
|
|
||||||
seq.setSuccessor(wd2);
|
|
||||||
seq.setLinkType(WorkSequenceType.FINISH_TO_FINISH);
|
|
||||||
|
|
||||||
process.getProcessElements().add(seq);
|
|
||||||
|
|
||||||
// Ajouter une deuxième WorkSequence entre les deux WorkDefinitions
|
|
||||||
WorkSequence seq2 = myFactory.createWorkSequence();
|
|
||||||
seq2.setPredecessor(wd1);
|
|
||||||
seq2.setSuccessor(wd2);
|
|
||||||
seq2.setLinkType(WorkSequenceType.START_TO_START);
|
|
||||||
|
|
||||||
process.getProcessElements().add(seq2);
|
|
||||||
|
|
||||||
|
|
||||||
// Sauver la ressource
|
|
||||||
try {
|
|
||||||
resource.save(Collections.EMPTY_MAP);
|
|
||||||
} catch (IOException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -0,0 +1,68 @@
|
||||||
|
// automatically generated by Xtext
|
||||||
|
grammar fr.n7.simplepdl.txt.PDL with org.eclipse.xtext.common.Terminals
|
||||||
|
|
||||||
|
import "http://simplepdl"
|
||||||
|
import "http://www.eclipse.org/emf/2002/Ecore" as ecore
|
||||||
|
|
||||||
|
Process returns Process:
|
||||||
|
{Process}
|
||||||
|
'Process'
|
||||||
|
name=EString
|
||||||
|
'{'
|
||||||
|
('processElements' '{' processElements+=ProcessElement ( "," processElements+=ProcessElement)* '}' )?
|
||||||
|
'}';
|
||||||
|
|
||||||
|
ProcessElement returns ProcessElement:
|
||||||
|
WorkDefinition | WorkSequence | Guidance | Resource;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
EString returns ecore::EString:
|
||||||
|
STRING | ID;
|
||||||
|
|
||||||
|
WorkDefinition returns WorkDefinition:
|
||||||
|
{WorkDefinition}
|
||||||
|
'WorkDefinition'
|
||||||
|
name=EString
|
||||||
|
'{'
|
||||||
|
('linksToPredecessors' '(' linksToPredecessors+=[WorkSequence|EString] ( "," linksToPredecessors+=[WorkSequence|EString])* ')' )?
|
||||||
|
('linksToSuccessors' '(' linksToSuccessors+=[WorkSequence|EString] ( "," linksToSuccessors+=[WorkSequence|EString])* ')' )?
|
||||||
|
('requests' '{' requests+=Request ( "," requests+=Request)* '}' )?
|
||||||
|
'}';
|
||||||
|
|
||||||
|
WorkSequence returns WorkSequence:
|
||||||
|
'WorkSequence'
|
||||||
|
'{'
|
||||||
|
'linkType' linkType=WorkSequenceType
|
||||||
|
'predecessor' predecessor=[WorkDefinition|EString]
|
||||||
|
'successor' successor=[WorkDefinition|EString]
|
||||||
|
'}';
|
||||||
|
|
||||||
|
Guidance returns Guidance:
|
||||||
|
'Guidance'
|
||||||
|
'{'
|
||||||
|
'text' text=EString
|
||||||
|
('elements' '(' elements+=[ProcessElement|EString] ( "," elements+=[ProcessElement|EString])* ')' )?
|
||||||
|
'}';
|
||||||
|
|
||||||
|
Resource returns Resource:
|
||||||
|
'Resource'
|
||||||
|
name=EString
|
||||||
|
'{'
|
||||||
|
'quantity' quantity=EInt
|
||||||
|
'}';
|
||||||
|
|
||||||
|
Request returns Request:
|
||||||
|
'Request'
|
||||||
|
'{'
|
||||||
|
'quantity' quantity=EInt
|
||||||
|
'target' target=[Resource|EString]
|
||||||
|
'}';
|
||||||
|
|
||||||
|
EInt returns ecore::EInt:
|
||||||
|
'-'? INT;
|
||||||
|
|
||||||
|
enum WorkSequenceType returns WorkSequenceType:
|
||||||
|
startToStart = 'startToStart' | finishToStart = 'finishToStart' | startToFinish = 'startToFinish' | finishToFinish = 'finishToFinish';
|
|
@ -0,0 +1,180 @@
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
package simplepdl.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 simplepdl.Request;
|
||||||
|
import simplepdl.SimplepdlPackage;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is the item provider adapter for a {@link simplepdl.Request} object.
|
||||||
|
* <!-- begin-user-doc -->
|
||||||
|
* <!-- end-user-doc -->
|
||||||
|
* @generated
|
||||||
|
*/
|
||||||
|
public class RequestItemProvider
|
||||||
|
extends ItemProviderAdapter
|
||||||
|
implements
|
||||||
|
IEditingDomainItemProvider,
|
||||||
|
IStructuredItemContentProvider,
|
||||||
|
ITreeItemContentProvider,
|
||||||
|
IItemLabelProvider,
|
||||||
|
IItemPropertySource {
|
||||||
|
/**
|
||||||
|
* This constructs an instance from a factory and a notifier.
|
||||||
|
* <!-- begin-user-doc -->
|
||||||
|
* <!-- end-user-doc -->
|
||||||
|
* @generated
|
||||||
|
*/
|
||||||
|
public RequestItemProvider(AdapterFactory adapterFactory) {
|
||||||
|
super(adapterFactory);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This returns the property descriptors for the adapted class.
|
||||||
|
* <!-- begin-user-doc -->
|
||||||
|
* <!-- end-user-doc -->
|
||||||
|
* @generated
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
|
||||||
|
if (itemPropertyDescriptors == null) {
|
||||||
|
super.getPropertyDescriptors(object);
|
||||||
|
|
||||||
|
addQuantityPropertyDescriptor(object);
|
||||||
|
addTargetPropertyDescriptor(object);
|
||||||
|
}
|
||||||
|
return itemPropertyDescriptors;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This adds a property descriptor for the Quantity feature.
|
||||||
|
* <!-- begin-user-doc -->
|
||||||
|
* <!-- end-user-doc -->
|
||||||
|
* @generated
|
||||||
|
*/
|
||||||
|
protected void addQuantityPropertyDescriptor(Object object) {
|
||||||
|
itemPropertyDescriptors.add
|
||||||
|
(createItemPropertyDescriptor
|
||||||
|
(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
|
||||||
|
getResourceLocator(),
|
||||||
|
getString("_UI_Request_quantity_feature"),
|
||||||
|
getString("_UI_PropertyDescriptor_description", "_UI_Request_quantity_feature", "_UI_Request_type"),
|
||||||
|
SimplepdlPackage.Literals.REQUEST__QUANTITY,
|
||||||
|
true,
|
||||||
|
false,
|
||||||
|
false,
|
||||||
|
ItemPropertyDescriptor.INTEGRAL_VALUE_IMAGE,
|
||||||
|
null,
|
||||||
|
null));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This adds a property descriptor for the Target feature.
|
||||||
|
* <!-- begin-user-doc -->
|
||||||
|
* <!-- end-user-doc -->
|
||||||
|
* @generated
|
||||||
|
*/
|
||||||
|
protected void addTargetPropertyDescriptor(Object object) {
|
||||||
|
itemPropertyDescriptors.add
|
||||||
|
(createItemPropertyDescriptor
|
||||||
|
(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
|
||||||
|
getResourceLocator(),
|
||||||
|
getString("_UI_Request_target_feature"),
|
||||||
|
getString("_UI_PropertyDescriptor_description", "_UI_Request_target_feature", "_UI_Request_type"),
|
||||||
|
SimplepdlPackage.Literals.REQUEST__TARGET,
|
||||||
|
true,
|
||||||
|
false,
|
||||||
|
true,
|
||||||
|
null,
|
||||||
|
null,
|
||||||
|
null));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This returns Request.gif.
|
||||||
|
* <!-- begin-user-doc -->
|
||||||
|
* <!-- end-user-doc -->
|
||||||
|
* @generated
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Object getImage(Object object) {
|
||||||
|
return overlayImage(object, getResourceLocator().getImage("full/obj16/Request"));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This returns the label text for the adapted class.
|
||||||
|
* <!-- begin-user-doc -->
|
||||||
|
* <!-- end-user-doc -->
|
||||||
|
* @generated
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public String getText(Object object) {
|
||||||
|
Request request = (Request)object;
|
||||||
|
String targetname = request.getTarget() != null ? request.getTarget().getName() : "";
|
||||||
|
return getString("_UI_Request_type") + " --" + request.getQuantity() + "--> " + targetname;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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}.
|
||||||
|
* <!-- begin-user-doc -->
|
||||||
|
* <!-- end-user-doc -->
|
||||||
|
* @generated
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void notifyChanged(Notification notification) {
|
||||||
|
updateChildren(notification);
|
||||||
|
|
||||||
|
switch (notification.getFeatureID(Request.class)) {
|
||||||
|
case SimplepdlPackage.REQUEST__QUANTITY:
|
||||||
|
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.
|
||||||
|
* <!-- begin-user-doc -->
|
||||||
|
* <!-- end-user-doc -->
|
||||||
|
* @generated
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
|
||||||
|
super.collectNewChildDescriptors(newChildDescriptors, object);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the resource locator for this item provider's resources.
|
||||||
|
* <!-- begin-user-doc -->
|
||||||
|
* <!-- end-user-doc -->
|
||||||
|
* @generated
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public ResourceLocator getResourceLocator() {
|
||||||
|
return SimplepdlEditPlugin.INSTANCE;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -1,92 +0,0 @@
|
||||||
package simplepdl.manip;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
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.resource.impl.ResourceSetImpl;
|
|
||||||
import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
|
|
||||||
|
|
||||||
import petrinet.PetrinetPackage;
|
|
||||||
import petrinet.Network;
|
|
||||||
import petrinet.PetrinetFactory;
|
|
||||||
import simplepdl.Process;
|
|
||||||
import simplepdl.WorkDefinition;
|
|
||||||
import simplepdl.WorkSequence;
|
|
||||||
import simplepdl.WorkSequenceType;
|
|
||||||
import simplepdl.SimplepdlFactory;
|
|
||||||
import simplepdl.SimplepdlPackage;
|
|
||||||
|
|
||||||
public class simplepdl2petrinet {
|
|
||||||
|
|
||||||
public static void main(String[] args) {
|
|
||||||
|
|
||||||
// Charger les package SimplePDL et Petrinet afin de les enregistrer dans le registre d'Eclipse.
|
|
||||||
SimplepdlPackage packageInstance = SimplepdlPackage.eINSTANCE;
|
|
||||||
PetrinetPackage packageInstance2 = PetrinetPackage.eINSTANCE;
|
|
||||||
|
|
||||||
// Enregistrer l'extension ".xmi" comme devant être ouverte à
|
|
||||||
// l'aide d'un objet "XMIResourceFactoryImpl"
|
|
||||||
Resource.Factory.Registry reg = Resource.Factory.Registry.INSTANCE;
|
|
||||||
Map<String, Object> m = reg.getExtensionToFactoryMap();
|
|
||||||
m.put("xmi", new XMIResourceFactoryImpl());
|
|
||||||
|
|
||||||
// Créer un objet resourceSetImpl qui contiendra une ressource EMF (le modèle)
|
|
||||||
ResourceSet resSet = new ResourceSetImpl();
|
|
||||||
|
|
||||||
// Charger la ressource (notre modèle)
|
|
||||||
URI modelURI = URI.createURI("pdl-sujet.xmi");
|
|
||||||
Resource resource = resSet.getResource(modelURI, true);
|
|
||||||
|
|
||||||
// Récupérer le premier élément du modèle (élément racine)
|
|
||||||
Process process = (Process) resource.getContents().get(0);
|
|
||||||
|
|
||||||
// La fabrique pour fabriquer les éléments de PetriNET
|
|
||||||
PetrinetFactory myFactory = PetrinetFactory.eINSTANCE;
|
|
||||||
|
|
||||||
// Créer un élément Network
|
|
||||||
Network network = myFactory.createNetwork();
|
|
||||||
network.setName(process.getName());
|
|
||||||
//
|
|
||||||
// // Ajouter le Process dans le modèle
|
|
||||||
// resource.getContents().add(process);
|
|
||||||
//
|
|
||||||
// // Ajouter deux WorkDefinitions
|
|
||||||
// WorkDefinition wd1 = myFactory.createWorkDefinition();
|
|
||||||
// wd1.setName("Ma première WorkDefinition, quelle émotion");
|
|
||||||
//
|
|
||||||
// WorkDefinition wd2 = myFactory.createWorkDefinition();
|
|
||||||
// wd2.setName("Ma deuxième WorkDefinition, toujours autant d'émotion");
|
|
||||||
//
|
|
||||||
// process.getProcessElements().add(wd1);
|
|
||||||
// process.getProcessElements().add(wd2);
|
|
||||||
//
|
|
||||||
// // Ajouter une WorkSequence entre les deux WorkDefinitions
|
|
||||||
// WorkSequence seq = myFactory.createWorkSequence();
|
|
||||||
// seq.setPredecessor(wd1);
|
|
||||||
// seq.setSuccessor(wd2);
|
|
||||||
// seq.setLinkType(WorkSequenceType.FINISH_TO_FINISH);
|
|
||||||
//
|
|
||||||
// process.getProcessElements().add(seq);
|
|
||||||
//
|
|
||||||
// // Ajouter une deuxième WorkSequence entre les deux WorkDefinitions
|
|
||||||
// WorkSequence seq2 = myFactory.createWorkSequence();
|
|
||||||
// seq2.setPredecessor(wd1);
|
|
||||||
// seq2.setSuccessor(wd2);
|
|
||||||
// seq2.setLinkType(WorkSequenceType.START_TO_START);
|
|
||||||
//
|
|
||||||
// process.getProcessElements().add(seq2);
|
|
||||||
|
|
||||||
|
|
||||||
// Sauver la ressource
|
|
||||||
try {
|
|
||||||
resource.save(Collections.EMPTY_MAP);
|
|
||||||
} catch (IOException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -0,0 +1,43 @@
|
||||||
|
// automatically generated by Xtext
|
||||||
|
grammar fr.n7.simplepdl.txt.PDL with org.eclipse.xtext.common.Terminals
|
||||||
|
|
||||||
|
import "http://simplepdl"
|
||||||
|
import "http://www.eclipse.org/emf/2002/Ecore" as ecore
|
||||||
|
|
||||||
|
Process :
|
||||||
|
'process' name=ID '{'
|
||||||
|
processElements+=ProcessElement*
|
||||||
|
'}' ;
|
||||||
|
|
||||||
|
ProcessElement :
|
||||||
|
WorkDefinition | WorkSequence | Guidance | Resource ;
|
||||||
|
|
||||||
|
WorkDefinition :
|
||||||
|
'wd' name=ID
|
||||||
|
requests+=Request*
|
||||||
|
;
|
||||||
|
|
||||||
|
WorkSequence :
|
||||||
|
'ws' linkType=WorkSequenceType
|
||||||
|
'from' predecessor=[WorkDefinition]
|
||||||
|
'to' successor=[WorkDefinition] ;
|
||||||
|
|
||||||
|
Guidance :
|
||||||
|
'note' text=STRING ;
|
||||||
|
|
||||||
|
Resource :
|
||||||
|
'res' name=ID quantity=INT
|
||||||
|
;
|
||||||
|
|
||||||
|
Request :
|
||||||
|
'req' target=[Resource] quantity=INT
|
||||||
|
;
|
||||||
|
|
||||||
|
|
||||||
|
enum WorkSequenceType :
|
||||||
|
startToStart = 's2s'
|
||||||
|
| finishToStart = 'f2s'
|
||||||
|
| startToFinish = 's2f'
|
||||||
|
| finishToFinish = 'f2f'
|
||||||
|
;
|
||||||
|
|
|
@ -1,88 +0,0 @@
|
||||||
package simplepdl.manip;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
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.resource.impl.ResourceSetImpl;
|
|
||||||
import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
|
|
||||||
|
|
||||||
import petrinet.PetrinetPackage;
|
|
||||||
import petrinet.PetrinetFactory;
|
|
||||||
import simplepdl.Process;
|
|
||||||
import simplepdl.WorkDefinition;
|
|
||||||
import simplepdl.WorkSequence;
|
|
||||||
import simplepdl.WorkSequenceType;
|
|
||||||
import simplepdl.SimplepdlFactory;
|
|
||||||
import simplepdl.SimplepdlPackage;
|
|
||||||
|
|
||||||
public class simplepdl2petrinet {
|
|
||||||
|
|
||||||
public static void main(String[] args) {
|
|
||||||
|
|
||||||
// Charger les package SimplePDL et Petrinet afin de les enregistrer dans le registre d'Eclipse.
|
|
||||||
SimplepdlPackage packageInstance = SimplepdlPackage.eINSTANCE;
|
|
||||||
PetrinetPackage packageInstance2 = PetrinetPackage.eINSTANCE;
|
|
||||||
|
|
||||||
// Enregistrer l'extension ".xmi" comme devant être ouverte à
|
|
||||||
// l'aide d'un objet "XMIResourceFactoryImpl"
|
|
||||||
Resource.Factory.Registry reg = Resource.Factory.Registry.INSTANCE;
|
|
||||||
Map<String, Object> m = reg.getExtensionToFactoryMap();
|
|
||||||
m.put("xmi", new XMIResourceFactoryImpl());
|
|
||||||
|
|
||||||
// Créer un objet resourceSetImpl qui contiendra une ressource EMF (le modèle)
|
|
||||||
ResourceSet resSet = new ResourceSetImpl();
|
|
||||||
|
|
||||||
// Définir la ressource (le modèle)
|
|
||||||
URI modelURI = URI.createURI("models/SimplePDLCreator_Created_Process.xmi");
|
|
||||||
Resource resource = resSet.createResource(modelURI);
|
|
||||||
|
|
||||||
// La fabrique pour fabriquer les éléments de SimplePDL
|
|
||||||
SimplepdlFactory myFactory = SimplepdlFactory.eINSTANCE;
|
|
||||||
|
|
||||||
// Créer un élément Process
|
|
||||||
Process process = myFactory.createProcess();
|
|
||||||
process.setName("Mon premier processus");
|
|
||||||
|
|
||||||
// Ajouter le Process dans le modèle
|
|
||||||
resource.getContents().add(process);
|
|
||||||
|
|
||||||
// Ajouter deux WorkDefinitions
|
|
||||||
WorkDefinition wd1 = myFactory.createWorkDefinition();
|
|
||||||
wd1.setName("Ma première WorkDefinition, quelle émotion");
|
|
||||||
|
|
||||||
WorkDefinition wd2 = myFactory.createWorkDefinition();
|
|
||||||
wd2.setName("Ma deuxième WorkDefinition, toujours autant d'émotion");
|
|
||||||
|
|
||||||
process.getProcessElements().add(wd1);
|
|
||||||
process.getProcessElements().add(wd2);
|
|
||||||
|
|
||||||
// Ajouter une WorkSequence entre les deux WorkDefinitions
|
|
||||||
WorkSequence seq = myFactory.createWorkSequence();
|
|
||||||
seq.setPredecessor(wd1);
|
|
||||||
seq.setSuccessor(wd2);
|
|
||||||
seq.setLinkType(WorkSequenceType.FINISH_TO_FINISH);
|
|
||||||
|
|
||||||
process.getProcessElements().add(seq);
|
|
||||||
|
|
||||||
// Ajouter une deuxième WorkSequence entre les deux WorkDefinitions
|
|
||||||
WorkSequence seq2 = myFactory.createWorkSequence();
|
|
||||||
seq2.setPredecessor(wd1);
|
|
||||||
seq2.setSuccessor(wd2);
|
|
||||||
seq2.setLinkType(WorkSequenceType.START_TO_START);
|
|
||||||
|
|
||||||
process.getProcessElements().add(seq2);
|
|
||||||
|
|
||||||
|
|
||||||
// Sauver la ressource
|
|
||||||
try {
|
|
||||||
resource.save(Collections.EMPTY_MAP);
|
|
||||||
} catch (IOException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -0,0 +1,208 @@
|
||||||
|
package simplepdl.manip;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
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.xmi.impl.XMIResourceFactoryImpl;
|
||||||
|
|
||||||
|
import petrinet.PetrinetPackage;
|
||||||
|
import petrinet.Place;
|
||||||
|
import petrinet.Transition;
|
||||||
|
import petrinet.Arc;
|
||||||
|
import petrinet.Network;
|
||||||
|
import petrinet.Node;
|
||||||
|
import petrinet.PetrinetFactory;
|
||||||
|
import simplepdl.Process;
|
||||||
|
import simplepdl.WorkDefinition;
|
||||||
|
import simplepdl.WorkSequence;
|
||||||
|
import simplepdl.WorkSequenceType;
|
||||||
|
import simplepdl.SimplepdlPackage;
|
||||||
|
import simplepdl.Resource;
|
||||||
|
|
||||||
|
public class simplepdl2petrinet {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
|
||||||
|
// Charger les package SimplePDL et Petrinet afin de les enregistrer dans le registre d'Eclipse.
|
||||||
|
SimplepdlPackage packageInstance = SimplepdlPackage.eINSTANCE;
|
||||||
|
PetrinetPackage packageInstance2 = PetrinetPackage.eINSTANCE;
|
||||||
|
|
||||||
|
// Enregistrer l'extension ".xmi" comme devant être ouverte à
|
||||||
|
// l'aide d'un objet "XMIResourceFactoryImpl"
|
||||||
|
Resource.Factory.Registry reg = Resource.Factory.Registry.INSTANCE;
|
||||||
|
Map<String, Object> m = reg.getExtensionToFactoryMap();
|
||||||
|
m.put("xmi", new XMIResourceFactoryImpl());
|
||||||
|
|
||||||
|
// Créer un objet resourceSetImpl qui contiendra une ressource EMF (le modèle)
|
||||||
|
ResourceSet resSet = new ResourceSetImpl();
|
||||||
|
|
||||||
|
// Charger la ressource (notre modèle)
|
||||||
|
URI modelURI = URI.createURI("test.xmi");
|
||||||
|
Resource resource = resSet.getResource(modelURI, true);
|
||||||
|
|
||||||
|
// Récupérer le premier élément du modèle (élément racine)
|
||||||
|
Process process = (Process) resource.getContents().get(0);
|
||||||
|
|
||||||
|
// La fabrique pour fabriquer les éléments de PetriNET
|
||||||
|
PetrinetFactory myFactory = PetrinetFactory.eINSTANCE;
|
||||||
|
|
||||||
|
// Créer un élément Network
|
||||||
|
Network network = myFactory.createNetwork();
|
||||||
|
network.setName(process.getName());
|
||||||
|
|
||||||
|
// Conversion des WorkDefinition en Node et Transition
|
||||||
|
for (Object o : process.getProcessElements()) {
|
||||||
|
if (o instanceof WorkDefinition) {
|
||||||
|
WorkDefinition wd = (WorkDefinition) o;
|
||||||
|
String name = wd.getName();
|
||||||
|
|
||||||
|
Place idle = myFactory.createPlace();
|
||||||
|
idle.setName(name + "_idle");
|
||||||
|
idle.setTokens(1);
|
||||||
|
Place started = myFactory.createPlace();
|
||||||
|
started.setName(name + "_started");
|
||||||
|
started.setTokens(0);
|
||||||
|
Place running = myFactory.createPlace();
|
||||||
|
running.setName(name + "_running");
|
||||||
|
running.setTokens(0);
|
||||||
|
Place finished = myFactory.createPlace();
|
||||||
|
finished.setName(name + "_finished");
|
||||||
|
finished.setTokens(0);
|
||||||
|
|
||||||
|
Arc pause2start = myFactory.createArc();
|
||||||
|
pause2start.setTarget(idle);
|
||||||
|
pause2start.setOutgoing(false);
|
||||||
|
pause2start.setWeight(1);
|
||||||
|
Arc start2running = myFactory.createArc();
|
||||||
|
start2running.setTarget(running);
|
||||||
|
start2running.setOutgoing(true);
|
||||||
|
start2running.setWeight(1);
|
||||||
|
Arc start2started = myFactory.createArc();
|
||||||
|
start2started.setTarget(started);
|
||||||
|
start2started.setOutgoing(true);
|
||||||
|
start2started.setWeight(1);
|
||||||
|
Transition start = myFactory.createTransition();
|
||||||
|
start.setName(name + "_start");
|
||||||
|
start.getArcs().add(pause2start);
|
||||||
|
start.getArcs().add(start2running);
|
||||||
|
start.getArcs().add(start2started);
|
||||||
|
|
||||||
|
Arc running2finish = myFactory.createArc();
|
||||||
|
running2finish.setTarget(running);
|
||||||
|
running2finish.setOutgoing(false);
|
||||||
|
running2finish.setWeight(1);
|
||||||
|
Arc finish2finished = myFactory.createArc();
|
||||||
|
finish2finished.setTarget(finished);
|
||||||
|
finish2finished.setOutgoing(true);
|
||||||
|
finish2finished.setWeight(1);
|
||||||
|
Transition finish = myFactory.createTransition();
|
||||||
|
finish.setName(name + "_finish");
|
||||||
|
finish.getArcs().add(running2finish);
|
||||||
|
finish.getArcs().add(finish2finished);
|
||||||
|
|
||||||
|
network.getNodes().add(idle);
|
||||||
|
network.getNodes().add(start);
|
||||||
|
network.getNodes().add(started);
|
||||||
|
network.getNodes().add(running);
|
||||||
|
network.getNodes().add(finish);
|
||||||
|
network.getNodes().add(finished);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Conversion des WorkSequence en Node et Transition
|
||||||
|
for (Object o : process.getProcessElements()) {
|
||||||
|
if (o instanceof WorkSequence) {
|
||||||
|
WorkSequence ws = (WorkSequence) o;
|
||||||
|
WorkSequenceType type = ws.getLinkType();
|
||||||
|
WorkDefinition predecessor = ws.getPredecessor();
|
||||||
|
WorkDefinition successor = ws.getSuccessor();
|
||||||
|
|
||||||
|
// creation des suffixs permettant la recherche des noeuds
|
||||||
|
String predecessor_suffix = new String();
|
||||||
|
String successor_suffix = new String();
|
||||||
|
switch (type) {
|
||||||
|
case START_TO_START:
|
||||||
|
predecessor_suffix = "_started";
|
||||||
|
successor_suffix = "_start";
|
||||||
|
break;
|
||||||
|
case START_TO_FINISH:
|
||||||
|
predecessor_suffix = "_started";
|
||||||
|
successor_suffix = "_finished";
|
||||||
|
break;
|
||||||
|
case FINISH_TO_START:
|
||||||
|
predecessor_suffix = "_finished";
|
||||||
|
successor_suffix = "_start";
|
||||||
|
break;
|
||||||
|
case FINISH_TO_FINISH:
|
||||||
|
predecessor_suffix = "_finished";
|
||||||
|
successor_suffix = "_finish";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
System.out.print("the fuck ?");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// creation du read-arc
|
||||||
|
Arc arc1 = myFactory.createArc();
|
||||||
|
arc1.setOutgoing(false);
|
||||||
|
arc1.setWeight(1);
|
||||||
|
Arc arc2 = myFactory.createArc();
|
||||||
|
arc2.setOutgoing(true);
|
||||||
|
arc2.setWeight(1);
|
||||||
|
|
||||||
|
for (Node node : network.getNodes()) {
|
||||||
|
if (node instanceof Place) {
|
||||||
|
Place place = (Place) node;
|
||||||
|
if (place.getName().equals(predecessor.getName() + predecessor_suffix)) {
|
||||||
|
arc1.setTarget(place);
|
||||||
|
arc2.setTarget(place);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (node instanceof Transition) {
|
||||||
|
Transition transition = (Transition) node;
|
||||||
|
if (transition.getName().equals(successor.getName() + successor_suffix)) {
|
||||||
|
transition.getArcs().add(arc1);
|
||||||
|
transition.getArcs().add(arc2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
System.out.println("mdr2");
|
||||||
|
|
||||||
|
// Conversion des WorkSequence en Node et Transition
|
||||||
|
for (Object o : process.getProcessElements()) {
|
||||||
|
if (o instanceof Resource) {
|
||||||
|
|
||||||
|
Resource r = (Resource) o;
|
||||||
|
EObject qty = r.getEObject("quantity");
|
||||||
|
|
||||||
|
System.out.println(qty);
|
||||||
|
System.out.println("mdr");
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Créer le nouveau xmi (modèle convertit)
|
||||||
|
URI convURI = URI.createURI("models/Developpement_petrinet.xmi");
|
||||||
|
Resource conv = resSet.createResource(convURI);
|
||||||
|
|
||||||
|
// Ajouter le Network dans le nouveau modèle
|
||||||
|
conv.getContents().add(network);
|
||||||
|
|
||||||
|
// Sauver la ressource
|
||||||
|
try {
|
||||||
|
conv.save(Collections.EMPTY_MAP);
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,31 @@
|
||||||
|
grammar fr.n7.PDL1 with org.eclipse.xtext.common.Terminals
|
||||||
|
generate pDL1 "http://www.n7.fr/PDL1"
|
||||||
|
|
||||||
|
Process :
|
||||||
|
'process' ':' name=ID
|
||||||
|
processElements+=ProcessElement* ;
|
||||||
|
|
||||||
|
|
||||||
|
ProcessElement :
|
||||||
|
WorkDefinitionList | WorkSequence | Guidance;
|
||||||
|
|
||||||
|
WorkDefinitionList :
|
||||||
|
'workdefinitions' ':' WorkDefinition+=WorkDefinition* ;
|
||||||
|
|
||||||
|
WorkDefinition :
|
||||||
|
name=ID ";" ;
|
||||||
|
|
||||||
|
WorkSequence :
|
||||||
|
'ws' linkType=WorkSequenceType
|
||||||
|
'from' predecessor=[WorkDefinition]
|
||||||
|
'to' successor=[WorkDefinition] ;
|
||||||
|
|
||||||
|
Guidance :
|
||||||
|
'note' texte=STRING ;
|
||||||
|
|
||||||
|
enum WorkSequenceType :
|
||||||
|
start2start = 's2s'
|
||||||
|
| finish2start = 'f2s'
|
||||||
|
| start2finish = 's2f'
|
||||||
|
| finish2finish = 'f2f'
|
||||||
|
;
|
|
@ -0,0 +1,201 @@
|
||||||
|
package simplepdl.manip;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
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.resource.impl.ResourceSetImpl;
|
||||||
|
import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
|
||||||
|
|
||||||
|
import petrinet.PetrinetPackage;
|
||||||
|
import petrinet.Place;
|
||||||
|
import petrinet.Transition;
|
||||||
|
import petrinet.Arc;
|
||||||
|
import petrinet.Network;
|
||||||
|
import petrinet.Node;
|
||||||
|
import petrinet.PetrinetFactory;
|
||||||
|
import simplepdl.Process;
|
||||||
|
import simplepdl.WorkDefinition;
|
||||||
|
import simplepdl.WorkSequence;
|
||||||
|
import simplepdl.WorkSequenceType;
|
||||||
|
import simplepdl.SimplepdlPackage;
|
||||||
|
|
||||||
|
public class simplepdl2petrinet {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
|
||||||
|
// Charger les package SimplePDL et Petrinet afin de les enregistrer dans le registre d'Eclipse.
|
||||||
|
SimplepdlPackage packageInstance = SimplepdlPackage.eINSTANCE;
|
||||||
|
PetrinetPackage packageInstance2 = PetrinetPackage.eINSTANCE;
|
||||||
|
|
||||||
|
// Enregistrer l'extension ".xmi" comme devant être ouverte à
|
||||||
|
// l'aide d'un objet "XMIResourceFactoryImpl"
|
||||||
|
Resource.Factory.Registry reg = Resource.Factory.Registry.INSTANCE;
|
||||||
|
Map<String, Object> m = reg.getExtensionToFactoryMap();
|
||||||
|
m.put("xmi", new XMIResourceFactoryImpl());
|
||||||
|
|
||||||
|
// Créer un objet resourceSetImpl qui contiendra une ressource EMF (le modèle)
|
||||||
|
ResourceSet resSet = new ResourceSetImpl();
|
||||||
|
|
||||||
|
// Charger la ressource (notre modèle)
|
||||||
|
URI modelURI = URI.createURI("test.xmi");
|
||||||
|
Resource resource = resSet.getResource(modelURI, true);
|
||||||
|
|
||||||
|
// Récupérer le premier élément du modèle (élément racine)
|
||||||
|
Process process = (Process) resource.getContents().get(0);
|
||||||
|
|
||||||
|
// La fabrique pour fabriquer les éléments de PetriNET
|
||||||
|
PetrinetFactory myFactory = PetrinetFactory.eINSTANCE;
|
||||||
|
|
||||||
|
// Créer un élément Network
|
||||||
|
Network network = myFactory.createNetwork();
|
||||||
|
network.setName(process.getName());
|
||||||
|
|
||||||
|
// Conversion des WorkDefinition en Node et Transition
|
||||||
|
for (Object o : process.getProcessElements()) {
|
||||||
|
if (o instanceof WorkDefinition) {
|
||||||
|
WorkDefinition wd = (WorkDefinition) o;
|
||||||
|
String name = wd.getName();
|
||||||
|
|
||||||
|
Place idle = myFactory.createPlace();
|
||||||
|
idle.setName(name + "_idle");
|
||||||
|
idle.setTokens(1);
|
||||||
|
Place started = myFactory.createPlace();
|
||||||
|
started.setName(name + "_started");
|
||||||
|
started.setTokens(0);
|
||||||
|
Place running = myFactory.createPlace();
|
||||||
|
running.setName(name + "_running");
|
||||||
|
running.setTokens(0);
|
||||||
|
Place finished = myFactory.createPlace();
|
||||||
|
finished.setName(name + "_finished");
|
||||||
|
finished.setTokens(0);
|
||||||
|
|
||||||
|
Arc pause2start = myFactory.createArc();
|
||||||
|
pause2start.setTarget(idle);
|
||||||
|
pause2start.setOutgoing(false);
|
||||||
|
pause2start.setWeight(1);
|
||||||
|
Arc start2running = myFactory.createArc();
|
||||||
|
start2running.setTarget(running);
|
||||||
|
start2running.setOutgoing(true);
|
||||||
|
start2running.setWeight(1);
|
||||||
|
Arc start2started = myFactory.createArc();
|
||||||
|
start2started.setTarget(started);
|
||||||
|
start2started.setOutgoing(true);
|
||||||
|
start2started.setWeight(1);
|
||||||
|
Transition start = myFactory.createTransition();
|
||||||
|
start.setName(name + "_start");
|
||||||
|
start.getArcs().add(pause2start);
|
||||||
|
start.getArcs().add(start2running);
|
||||||
|
start.getArcs().add(start2started);
|
||||||
|
|
||||||
|
Arc running2finish = myFactory.createArc();
|
||||||
|
running2finish.setTarget(running);
|
||||||
|
running2finish.setOutgoing(false);
|
||||||
|
running2finish.setWeight(1);
|
||||||
|
Arc finish2finished = myFactory.createArc();
|
||||||
|
finish2finished.setTarget(finished);
|
||||||
|
finish2finished.setOutgoing(true);
|
||||||
|
finish2finished.setWeight(1);
|
||||||
|
Transition finish = myFactory.createTransition();
|
||||||
|
finish.setName(name + "_finish");
|
||||||
|
finish.getArcs().add(running2finish);
|
||||||
|
finish.getArcs().add(finish2finished);
|
||||||
|
|
||||||
|
network.getNodes().add(idle);
|
||||||
|
network.getNodes().add(start);
|
||||||
|
network.getNodes().add(started);
|
||||||
|
network.getNodes().add(running);
|
||||||
|
network.getNodes().add(finish);
|
||||||
|
network.getNodes().add(finished);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Conversion des WorkSequence en Node et Transition
|
||||||
|
for (Object o : process.getProcessElements()) {
|
||||||
|
if (o instanceof WorkSequence) {
|
||||||
|
WorkSequence ws = (WorkSequence) o;
|
||||||
|
WorkSequenceType type = ws.getLinkType();
|
||||||
|
WorkDefinition predecessor = ws.getPredecessor();
|
||||||
|
WorkDefinition successor = ws.getSuccessor();
|
||||||
|
|
||||||
|
// creation des suffixs permettant la recherche des noeuds
|
||||||
|
String predecessor_suffix = new String();
|
||||||
|
String successor_suffix = new String();
|
||||||
|
switch (type) {
|
||||||
|
case START_TO_START:
|
||||||
|
predecessor_suffix = "_started";
|
||||||
|
successor_suffix = "_start";
|
||||||
|
break;
|
||||||
|
case START_TO_FINISH:
|
||||||
|
predecessor_suffix = "_started";
|
||||||
|
successor_suffix = "_finished";
|
||||||
|
break;
|
||||||
|
case FINISH_TO_START:
|
||||||
|
predecessor_suffix = "_finished";
|
||||||
|
successor_suffix = "_start";
|
||||||
|
break;
|
||||||
|
case FINISH_TO_FINISH:
|
||||||
|
predecessor_suffix = "_finished";
|
||||||
|
successor_suffix = "_finish";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
System.out.print("the fuck ?");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// creation du read-arc
|
||||||
|
Arc arc1 = myFactory.createArc();
|
||||||
|
arc1.setOutgoing(false);
|
||||||
|
arc1.setWeight(1);
|
||||||
|
Arc arc2 = myFactory.createArc();
|
||||||
|
arc2.setOutgoing(true);
|
||||||
|
arc2.setWeight(1);
|
||||||
|
|
||||||
|
for (Node node : network.getNodes()) {
|
||||||
|
if (node instanceof Place) {
|
||||||
|
Place place = (Place) node;
|
||||||
|
if (place.getName().equals(predecessor.getName() + predecessor_suffix)) {
|
||||||
|
arc1.setTarget(place);
|
||||||
|
arc2.setTarget(place);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (node instanceof Transition) {
|
||||||
|
Transition transition = (Transition) node;
|
||||||
|
if (transition.getName().equals(successor.getName() + successor_suffix)) {
|
||||||
|
transition.getArcs().add(arc1);
|
||||||
|
transition.getArcs().add(arc2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Conversion des WorkSequence en Node et Transition
|
||||||
|
for (Object o : process.getProcessElements()) {
|
||||||
|
if (o instanceof Ressource) {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Créer le nouveau xmi (modèle convertit)
|
||||||
|
URI convURI = URI.createURI("models/Developpement_petrinet.xmi");
|
||||||
|
Resource conv = resSet.createResource(convURI);
|
||||||
|
|
||||||
|
// Ajouter le Network dans le nouveau modèle
|
||||||
|
conv.getContents().add(network);
|
||||||
|
|
||||||
|
// Sauver la ressource
|
||||||
|
try {
|
||||||
|
conv.save(Collections.EMPTY_MAP);
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,71 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<simplepdl:Process
|
||||||
|
xmi:version="2.0"
|
||||||
|
xmlns:xmi="http://www.omg.org/XMI"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xmlns:simplepdl="http://simplepdl"
|
||||||
|
name="Developpement">
|
||||||
|
<processElements
|
||||||
|
xsi:type="simplepdl:WorkDefinition"
|
||||||
|
linksToSuccessors="//@processElements.4 //@processElements.6 //@processElements.7 //@processElements.8"
|
||||||
|
name="Conception">
|
||||||
|
<requests
|
||||||
|
quantity="15"
|
||||||
|
target="//@processElements.10"/>
|
||||||
|
</processElements>
|
||||||
|
<processElements
|
||||||
|
xsi:type="simplepdl:WorkDefinition"
|
||||||
|
linksToPredecessors="//@processElements.4"
|
||||||
|
linksToSuccessors="//@processElements.5"
|
||||||
|
name="Programmation">
|
||||||
|
<requests
|
||||||
|
quantity="15"
|
||||||
|
target="//@processElements.10"/>
|
||||||
|
</processElements>
|
||||||
|
<processElements
|
||||||
|
xsi:type="simplepdl:WorkDefinition"
|
||||||
|
linksToPredecessors="//@processElements.5 //@processElements.6"
|
||||||
|
name="RedactionTests"/>
|
||||||
|
<processElements
|
||||||
|
xsi:type="simplepdl:WorkDefinition"
|
||||||
|
linksToPredecessors="//@processElements.7 //@processElements.8"
|
||||||
|
name="RedactionDocs">
|
||||||
|
<requests
|
||||||
|
quantity="5"
|
||||||
|
target="//@processElements.10"/>
|
||||||
|
<requests
|
||||||
|
quantity="5"
|
||||||
|
target="//@processElements.9"/>
|
||||||
|
</processElements>
|
||||||
|
<processElements
|
||||||
|
xsi:type="simplepdl:WorkSequence"
|
||||||
|
linkType="finishToStart"
|
||||||
|
predecessor="//@processElements.0"
|
||||||
|
successor="//@processElements.1"/>
|
||||||
|
<processElements
|
||||||
|
xsi:type="simplepdl:WorkSequence"
|
||||||
|
linkType="finishToFinish"
|
||||||
|
predecessor="//@processElements.1"
|
||||||
|
successor="//@processElements.2"/>
|
||||||
|
<processElements
|
||||||
|
xsi:type="simplepdl:WorkSequence"
|
||||||
|
predecessor="//@processElements.0"
|
||||||
|
successor="//@processElements.2"/>
|
||||||
|
<processElements
|
||||||
|
xsi:type="simplepdl:WorkSequence"
|
||||||
|
predecessor="//@processElements.0"
|
||||||
|
successor="//@processElements.3"/>
|
||||||
|
<processElements
|
||||||
|
xsi:type="simplepdl:WorkSequence"
|
||||||
|
linkType="finishToFinish"
|
||||||
|
predecessor="//@processElements.0"
|
||||||
|
successor="//@processElements.3"/>
|
||||||
|
<processElements
|
||||||
|
xsi:type="simplepdl:Resource"
|
||||||
|
quantity="10"
|
||||||
|
name="Crayon"/>
|
||||||
|
<processElements
|
||||||
|
xsi:type="simplepdl:Resource"
|
||||||
|
quantity="20"
|
||||||
|
name="Papier"/>
|
||||||
|
</simplepdl:Process>
|
|
@ -0,0 +1,29 @@
|
||||||
|
grammar fr.n7.PDL1 with org.eclipse.xtext.common.Terminals
|
||||||
|
generate pDL1 "http://www.n7.fr/PDL1"
|
||||||
|
|
||||||
|
Process :
|
||||||
|
'process' ':' name=ID
|
||||||
|
processElements+=ProcessElement* ;
|
||||||
|
|
||||||
|
|
||||||
|
ProcessElement :
|
||||||
|
WorkDefinitionList | WorkSequenceList ;
|
||||||
|
|
||||||
|
WorkDefinitionList :
|
||||||
|
'workdefinitions' ':' WorkDefinition+=WorkDefinition* ;
|
||||||
|
|
||||||
|
WorkDefinition :
|
||||||
|
name=ID ";" ;
|
||||||
|
|
||||||
|
WorkSequenceList :
|
||||||
|
'worksequences' ':' WorkSequence+=WorkSequence* ;
|
||||||
|
|
||||||
|
WorkSequence :
|
||||||
|
predecessor=[WorkDefinition] linkType=WorkSequenceType successor=[WorkDefinition] ";" ;
|
||||||
|
|
||||||
|
enum WorkSequenceType :
|
||||||
|
start2start = 's2s'
|
||||||
|
| finish2start = 'f2s'
|
||||||
|
| start2finish = 's2f'
|
||||||
|
| finish2finish = 'f2f'
|
||||||
|
;
|
|
@ -0,0 +1,6 @@
|
||||||
|
source.. = src/,\
|
||||||
|
src-gen/,\
|
||||||
|
xtend-gen/
|
||||||
|
bin.includes = META-INF/,\
|
||||||
|
.,\
|
||||||
|
plugin.xml
|
|
@ -0,0 +1,202 @@
|
||||||
|
package simplepdl.manip;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
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.resource.impl.ResourceSetImpl;
|
||||||
|
import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
|
||||||
|
|
||||||
|
import petrinet.PetrinetPackage;
|
||||||
|
import petrinet.Place;
|
||||||
|
import petrinet.Transition;
|
||||||
|
import petrinet.Arc;
|
||||||
|
import petrinet.Network;
|
||||||
|
import petrinet.Node;
|
||||||
|
import petrinet.PetrinetFactory;
|
||||||
|
import simplepdl.Process;
|
||||||
|
import simplepdl.WorkDefinition;
|
||||||
|
import simplepdl.WorkSequence;
|
||||||
|
import simplepdl.WorkSequenceType;
|
||||||
|
import simplepdl.SimplepdlPackage;
|
||||||
|
|
||||||
|
public class simplepdl2petrinet {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
|
||||||
|
// Charger les package SimplePDL et Petrinet afin de les enregistrer dans le registre d'Eclipse.
|
||||||
|
SimplepdlPackage packageInstance = SimplepdlPackage.eINSTANCE;
|
||||||
|
PetrinetPackage packageInstance2 = PetrinetPackage.eINSTANCE;
|
||||||
|
|
||||||
|
// Enregistrer l'extension ".xmi" comme devant être ouverte à
|
||||||
|
// l'aide d'un objet "XMIResourceFactoryImpl"
|
||||||
|
Resource.Factory.Registry reg = Resource.Factory.Registry.INSTANCE;
|
||||||
|
Map<String, Object> m = reg.getExtensionToFactoryMap();
|
||||||
|
m.put("xmi", new XMIResourceFactoryImpl());
|
||||||
|
|
||||||
|
// Créer un objet resourceSetImpl qui contiendra une ressource EMF (le modèle)
|
||||||
|
ResourceSet resSet = new ResourceSetImpl();
|
||||||
|
|
||||||
|
// Charger la ressource (notre modèle)
|
||||||
|
URI modelURI = URI.createURI("test.xmi");
|
||||||
|
Resource resource = resSet.getResource(modelURI, true);
|
||||||
|
|
||||||
|
// Récupérer le premier élément du modèle (élément racine)
|
||||||
|
Process process = (Process) resource.getContents().get(0);
|
||||||
|
|
||||||
|
// La fabrique pour fabriquer les éléments de PetriNET
|
||||||
|
PetrinetFactory myFactory = PetrinetFactory.eINSTANCE;
|
||||||
|
|
||||||
|
// Créer un élément Network
|
||||||
|
Network network = myFactory.createNetwork();
|
||||||
|
network.setName(process.getName());
|
||||||
|
|
||||||
|
// Conversion des WorkDefinition en Node et Transition
|
||||||
|
for (Object o : process.getProcessElements()) {
|
||||||
|
if (o instanceof WorkDefinition) {
|
||||||
|
WorkDefinition wd = (WorkDefinition) o;
|
||||||
|
String name = wd.getName();
|
||||||
|
|
||||||
|
Place idle = myFactory.createPlace();
|
||||||
|
idle.setName(name + "_idle");
|
||||||
|
idle.setTokens(1);
|
||||||
|
Place started = myFactory.createPlace();
|
||||||
|
started.setName(name + "_started");
|
||||||
|
started.setTokens(0);
|
||||||
|
Place running = myFactory.createPlace();
|
||||||
|
running.setName(name + "_running");
|
||||||
|
running.setTokens(0);
|
||||||
|
Place finished = myFactory.createPlace();
|
||||||
|
finished.setName(name + "_finished");
|
||||||
|
finished.setTokens(0);
|
||||||
|
|
||||||
|
Arc pause2start = myFactory.createArc();
|
||||||
|
pause2start.setTarget(idle);
|
||||||
|
pause2start.setOutgoing(false);
|
||||||
|
pause2start.setWeight(1);
|
||||||
|
Arc start2running = myFactory.createArc();
|
||||||
|
start2running.setTarget(running);
|
||||||
|
start2running.setOutgoing(true);
|
||||||
|
start2running.setWeight(1);
|
||||||
|
Arc start2started = myFactory.createArc();
|
||||||
|
start2started.setTarget(started);
|
||||||
|
start2started.setOutgoing(true);
|
||||||
|
start2started.setWeight(1);
|
||||||
|
Transition start = myFactory.createTransition();
|
||||||
|
start.setName(name + "_start");
|
||||||
|
start.getArcs().add(pause2start);
|
||||||
|
start.getArcs().add(start2running);
|
||||||
|
start.getArcs().add(start2started);
|
||||||
|
|
||||||
|
Arc running2finish = myFactory.createArc();
|
||||||
|
running2finish.setTarget(running);
|
||||||
|
running2finish.setOutgoing(false);
|
||||||
|
running2finish.setWeight(1);
|
||||||
|
Arc finish2finished = myFactory.createArc();
|
||||||
|
finish2finished.setTarget(finished);
|
||||||
|
finish2finished.setOutgoing(true);
|
||||||
|
finish2finished.setWeight(1);
|
||||||
|
Transition finish = myFactory.createTransition();
|
||||||
|
finish.setName(name + "_finish");
|
||||||
|
finish.getArcs().add(running2finish);
|
||||||
|
finish.getArcs().add(finish2finished);
|
||||||
|
|
||||||
|
network.getNodes().add(idle);
|
||||||
|
network.getNodes().add(start);
|
||||||
|
network.getNodes().add(started);
|
||||||
|
network.getNodes().add(running);
|
||||||
|
network.getNodes().add(finish);
|
||||||
|
network.getNodes().add(finished);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Conversion des WorkSequence en Node et Transition
|
||||||
|
for (Object o : process.getProcessElements()) {
|
||||||
|
if (o instanceof WorkSequence) {
|
||||||
|
WorkSequence ws = (WorkSequence) o;
|
||||||
|
WorkSequenceType type = ws.getLinkType();
|
||||||
|
WorkDefinition predecessor = ws.getPredecessor();
|
||||||
|
WorkDefinition successor = ws.getSuccessor();
|
||||||
|
|
||||||
|
// creation des suffixs permettant la recherche des noeuds
|
||||||
|
String predecessor_suffix = new String();
|
||||||
|
String successor_suffix = new String();
|
||||||
|
switch (type) {
|
||||||
|
case START_TO_START:
|
||||||
|
predecessor_suffix = "_started";
|
||||||
|
successor_suffix = "_start";
|
||||||
|
break;
|
||||||
|
case START_TO_FINISH:
|
||||||
|
predecessor_suffix = "_started";
|
||||||
|
successor_suffix = "_finished";
|
||||||
|
break;
|
||||||
|
case FINISH_TO_START:
|
||||||
|
predecessor_suffix = "_finished";
|
||||||
|
successor_suffix = "_start";
|
||||||
|
break;
|
||||||
|
case FINISH_TO_FINISH:
|
||||||
|
predecessor_suffix = "_finished";
|
||||||
|
successor_suffix = "_finish";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
System.out.print("the fuck ?");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// creation du read-arc
|
||||||
|
Arc arc1 = myFactory.createArc();
|
||||||
|
arc1.setOutgoing(false);
|
||||||
|
arc1.setWeight(1);
|
||||||
|
Arc arc2 = myFactory.createArc();
|
||||||
|
arc2.setOutgoing(true);
|
||||||
|
arc2.setWeight(1);
|
||||||
|
|
||||||
|
for (Node node : network.getNodes()) {
|
||||||
|
if (node instanceof Place) {
|
||||||
|
Place place = (Place) node;
|
||||||
|
if (place.getName().equals(predecessor.getName() + predecessor_suffix)) {
|
||||||
|
arc1.setTarget(place);
|
||||||
|
arc2.setTarget(place);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (node instanceof Transition) {
|
||||||
|
Transition transition = (Transition) node;
|
||||||
|
if (transition.getName().equals(successor.getName() + successor_suffix)) {
|
||||||
|
transition.getArcs().add(arc1);
|
||||||
|
transition.getArcs().add(arc2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Conversion des WorkSequence en Node et Transition
|
||||||
|
for (Object o : process.getProcessElements()) {
|
||||||
|
if (o instanceof Resource) {
|
||||||
|
|
||||||
|
Resource r = (Resource) o;
|
||||||
|
int qty = r.getQuantity();
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Créer le nouveau xmi (modèle convertit)
|
||||||
|
URI convURI = URI.createURI("models/Developpement_petrinet.xmi");
|
||||||
|
Resource conv = resSet.createResource(convURI);
|
||||||
|
|
||||||
|
// Ajouter le Network dans le nouveau modèle
|
||||||
|
conv.getContents().add(network);
|
||||||
|
|
||||||
|
// Sauver la ressource
|
||||||
|
try {
|
||||||
|
conv.save(Collections.EMPTY_MAP);
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,41 @@
|
||||||
|
// automatically generated by Xtext
|
||||||
|
grammar fr.n7.simplepdl.txt.PDL with org.eclipse.xtext.common.Terminals
|
||||||
|
|
||||||
|
import "http://simplepdl"
|
||||||
|
import "http://www.eclipse.org/emf/2002/Ecore" as ecore
|
||||||
|
|
||||||
|
Process :
|
||||||
|
'process' name=ID '{'
|
||||||
|
processElements+=ProcessElement*
|
||||||
|
'}' ;
|
||||||
|
|
||||||
|
ProcessElement :
|
||||||
|
WorkDefinition | WorkSequence | Guidance | Resource | Request ;
|
||||||
|
|
||||||
|
WorkDefinition :
|
||||||
|
'wd' name=ID;
|
||||||
|
|
||||||
|
WorkSequence :
|
||||||
|
'ws' linkType=WorkSequenceType
|
||||||
|
'from' predecessor=[WorkDefinition]
|
||||||
|
'to' successor=[WorkDefinition] ;
|
||||||
|
|
||||||
|
Guidance :
|
||||||
|
'note' text=STRING ;
|
||||||
|
|
||||||
|
Resource :
|
||||||
|
'res' name=ID quantity=INT
|
||||||
|
;
|
||||||
|
|
||||||
|
Request :
|
||||||
|
'req' target=[Resource] quantity=INT
|
||||||
|
;
|
||||||
|
|
||||||
|
|
||||||
|
enum WorkSequenceType :
|
||||||
|
startToStart = 's2s'
|
||||||
|
| finishToStart = 'f2s'
|
||||||
|
| startToFinish = 's2f'
|
||||||
|
| finishToFinish = 'f2f'
|
||||||
|
;
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
source.. = src/,\
|
||||||
|
src-gen/,\
|
||||||
|
xtend-gen/
|
||||||
|
bin.includes = META-INF/,\
|
||||||
|
.,\
|
||||||
|
plugin.xml
|
|
@ -0,0 +1,233 @@
|
||||||
|
package simplepdl.manip;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
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.resource.impl.ResourceSetImpl;
|
||||||
|
import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
|
||||||
|
|
||||||
|
import petrinet.Arc;
|
||||||
|
import petrinet.Network;
|
||||||
|
import petrinet.Node;
|
||||||
|
import petrinet.PetrinetFactory;
|
||||||
|
import petrinet.PetrinetPackage;
|
||||||
|
import petrinet.Place;
|
||||||
|
import petrinet.Transition;
|
||||||
|
import simplepdl.Process;
|
||||||
|
import simplepdl.SimplepdlPackage;
|
||||||
|
import simplepdl.WorkDefinition;
|
||||||
|
import simplepdl.WorkSequence;
|
||||||
|
import simplepdl.WorkSequenceType;
|
||||||
|
import simplepdl.Request;
|
||||||
|
|
||||||
|
public class simplepdl2petrinet {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
|
||||||
|
// Charger les package SimplePDL et Petrinet afin de les enregistrer dans le registre d'Eclipse.
|
||||||
|
SimplepdlPackage packageInstance = SimplepdlPackage.eINSTANCE;
|
||||||
|
PetrinetPackage packageInstance2 = PetrinetPackage.eINSTANCE;
|
||||||
|
|
||||||
|
// Enregistrer l'extension ".xmi" comme devant être ouverte à
|
||||||
|
// l'aide d'un objet "XMIResourceFactoryImpl"
|
||||||
|
Resource.Factory.Registry reg = Resource.Factory.Registry.INSTANCE;
|
||||||
|
Map<String, Object> m = reg.getExtensionToFactoryMap();
|
||||||
|
m.put("xmi", new XMIResourceFactoryImpl());
|
||||||
|
|
||||||
|
// Créer un objet resourceSetImpl qui contiendra une ressource EMF (le modèle)
|
||||||
|
ResourceSet resSet = new ResourceSetImpl();
|
||||||
|
|
||||||
|
// Charger la ressource (notre modèle)
|
||||||
|
URI modelURI = URI.createURI("test.xmi");
|
||||||
|
Resource resource = resSet.getResource(modelURI, true);
|
||||||
|
|
||||||
|
// Récupérer le premier élément du modèle (élément racine)
|
||||||
|
Process process = (Process) resource.getContents().get(0);
|
||||||
|
|
||||||
|
// La fabrique pour fabriquer les éléments de PetriNET
|
||||||
|
PetrinetFactory myFactory = PetrinetFactory.eINSTANCE;
|
||||||
|
|
||||||
|
// Créer un élément Network
|
||||||
|
Network network = myFactory.createNetwork();
|
||||||
|
network.setName(process.getName());
|
||||||
|
|
||||||
|
// Conversion des WorkDefinition en Node et Transition
|
||||||
|
for (Object o : process.getProcessElements()) {
|
||||||
|
if (o instanceof WorkDefinition) {
|
||||||
|
WorkDefinition wd = (WorkDefinition) o;
|
||||||
|
String name = wd.getName();
|
||||||
|
|
||||||
|
Place idle = myFactory.createPlace();
|
||||||
|
idle.setName(name + "_idle");
|
||||||
|
idle.setTokens(1);
|
||||||
|
Place started = myFactory.createPlace();
|
||||||
|
started.setName(name + "_started");
|
||||||
|
started.setTokens(0);
|
||||||
|
Place running = myFactory.createPlace();
|
||||||
|
running.setName(name + "_running");
|
||||||
|
running.setTokens(0);
|
||||||
|
Place finished = myFactory.createPlace();
|
||||||
|
finished.setName(name + "_finished");
|
||||||
|
finished.setTokens(0);
|
||||||
|
|
||||||
|
Arc pause2start = myFactory.createArc();
|
||||||
|
pause2start.setTarget(idle);
|
||||||
|
pause2start.setOutgoing(false);
|
||||||
|
pause2start.setWeight(1);
|
||||||
|
Arc start2running = myFactory.createArc();
|
||||||
|
start2running.setTarget(running);
|
||||||
|
start2running.setOutgoing(true);
|
||||||
|
start2running.setWeight(1);
|
||||||
|
Arc start2started = myFactory.createArc();
|
||||||
|
start2started.setTarget(started);
|
||||||
|
start2started.setOutgoing(true);
|
||||||
|
start2started.setWeight(1);
|
||||||
|
Transition start = myFactory.createTransition();
|
||||||
|
start.setName(name + "_start");
|
||||||
|
start.getArcs().add(pause2start);
|
||||||
|
start.getArcs().add(start2running);
|
||||||
|
start.getArcs().add(start2started);
|
||||||
|
|
||||||
|
Arc running2finish = myFactory.createArc();
|
||||||
|
running2finish.setTarget(running);
|
||||||
|
running2finish.setOutgoing(false);
|
||||||
|
running2finish.setWeight(1);
|
||||||
|
Arc finish2finished = myFactory.createArc();
|
||||||
|
finish2finished.setTarget(finished);
|
||||||
|
finish2finished.setOutgoing(true);
|
||||||
|
finish2finished.setWeight(1);
|
||||||
|
Transition finish = myFactory.createTransition();
|
||||||
|
finish.setName(name + "_finish");
|
||||||
|
finish.getArcs().add(running2finish);
|
||||||
|
finish.getArcs().add(finish2finished);
|
||||||
|
|
||||||
|
network.getNodes().add(idle);
|
||||||
|
network.getNodes().add(start);
|
||||||
|
network.getNodes().add(started);
|
||||||
|
network.getNodes().add(running);
|
||||||
|
network.getNodes().add(finish);
|
||||||
|
network.getNodes().add(finished);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Conversion des WorkSequence en Node et Transition
|
||||||
|
for (Object o : process.getProcessElements()) {
|
||||||
|
if (o instanceof WorkSequence) {
|
||||||
|
WorkSequence ws = (WorkSequence) o;
|
||||||
|
WorkSequenceType type = ws.getLinkType();
|
||||||
|
WorkDefinition predecessor = ws.getPredecessor();
|
||||||
|
WorkDefinition successor = ws.getSuccessor();
|
||||||
|
|
||||||
|
// creation des suffixs permettant la recherche des noeuds
|
||||||
|
String predecessor_suffix = new String();
|
||||||
|
String successor_suffix = new String();
|
||||||
|
switch (type) {
|
||||||
|
case START_TO_START:
|
||||||
|
predecessor_suffix = "_started";
|
||||||
|
successor_suffix = "_start";
|
||||||
|
break;
|
||||||
|
case START_TO_FINISH:
|
||||||
|
predecessor_suffix = "_started";
|
||||||
|
successor_suffix = "_finished";
|
||||||
|
break;
|
||||||
|
case FINISH_TO_START:
|
||||||
|
predecessor_suffix = "_finished";
|
||||||
|
successor_suffix = "_start";
|
||||||
|
break;
|
||||||
|
case FINISH_TO_FINISH:
|
||||||
|
predecessor_suffix = "_finished";
|
||||||
|
successor_suffix = "_finish";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
System.out.print("the fuck ?");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// creation du read-arc
|
||||||
|
Arc arc1 = myFactory.createArc();
|
||||||
|
arc1.setOutgoing(false);
|
||||||
|
arc1.setWeight(1);
|
||||||
|
Arc arc2 = myFactory.createArc();
|
||||||
|
arc2.setOutgoing(true);
|
||||||
|
arc2.setWeight(1);
|
||||||
|
|
||||||
|
for (Node node : network.getNodes()) {
|
||||||
|
if (node instanceof Place) {
|
||||||
|
Place place = (Place) node;
|
||||||
|
if (place.getName().equals(predecessor.getName() + predecessor_suffix)) {
|
||||||
|
arc1.setTarget(place);
|
||||||
|
arc2.setTarget(place);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (node instanceof Transition) {
|
||||||
|
Transition transition = (Transition) node;
|
||||||
|
if (transition.getName().equals(successor.getName() + successor_suffix)) {
|
||||||
|
transition.getArcs().add(arc1);
|
||||||
|
transition.getArcs().add(arc2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Conversion des Resource et Request en Node et Arcs
|
||||||
|
for (Object o : process.getProcessElements()) {
|
||||||
|
if (o instanceof simplepdl.Resource) {
|
||||||
|
|
||||||
|
simplepdl.Resource r = (simplepdl.Resource) o;
|
||||||
|
String name = r.getName();
|
||||||
|
int qty = r.getQuantity();
|
||||||
|
|
||||||
|
Place res = myFactory.createPlace();
|
||||||
|
res.setName(name);
|
||||||
|
res.setTokens(qty);
|
||||||
|
|
||||||
|
network.getNodes().add(res);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (o instanceof simplepdl.Request) {
|
||||||
|
|
||||||
|
Request r = (Request) o;
|
||||||
|
simplepdl.Resource target = r.getTarget();
|
||||||
|
int qty = r.getQuantity();
|
||||||
|
|
||||||
|
Arc arc1 = myFactory.createArc();
|
||||||
|
arc1.setOutgoing(true);
|
||||||
|
arc1.setWeight(qty);
|
||||||
|
Arc arc2 = myFactory.createArc();
|
||||||
|
arc2.setOutgoing(false);
|
||||||
|
arc2.setWeight(qty);
|
||||||
|
|
||||||
|
for (Node node : network.getNodes()) {
|
||||||
|
if (node instanceof Place) {
|
||||||
|
Place place = (Place) node;
|
||||||
|
if (place.getName().equals(target.getName()) {
|
||||||
|
arc1.setTarget(place);
|
||||||
|
arc2.setTarget(place);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Créer le nouveau xmi (modèle convertit)
|
||||||
|
URI convURI = URI.createURI("models/Developpement_petrinet.xmi");
|
||||||
|
Resource conv = resSet.createResource(convURI);
|
||||||
|
|
||||||
|
// Ajouter le Network dans le nouveau modèle
|
||||||
|
conv.getContents().add(network);
|
||||||
|
|
||||||
|
// Sauver la ressource
|
||||||
|
try {
|
||||||
|
conv.save(Collections.EMPTY_MAP);
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,226 @@
|
||||||
|
package simplepdl.manip;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
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.resource.impl.ResourceSetImpl;
|
||||||
|
import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
|
||||||
|
|
||||||
|
import petrinet.Arc;
|
||||||
|
import petrinet.Network;
|
||||||
|
import petrinet.Node;
|
||||||
|
import petrinet.PetrinetFactory;
|
||||||
|
import petrinet.PetrinetPackage;
|
||||||
|
import petrinet.Place;
|
||||||
|
import petrinet.Transition;
|
||||||
|
import simplepdl.Process;
|
||||||
|
import simplepdl.SimplepdlPackage;
|
||||||
|
import simplepdl.WorkDefinition;
|
||||||
|
import simplepdl.WorkSequence;
|
||||||
|
import simplepdl.WorkSequenceType;
|
||||||
|
import simplepdl.Request;
|
||||||
|
|
||||||
|
public class simplepdl2petrinet {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
|
||||||
|
// Charger les package SimplePDL et Petrinet afin de les enregistrer dans le registre d'Eclipse.
|
||||||
|
SimplepdlPackage packageInstance = SimplepdlPackage.eINSTANCE;
|
||||||
|
PetrinetPackage packageInstance2 = PetrinetPackage.eINSTANCE;
|
||||||
|
|
||||||
|
// Enregistrer l'extension ".xmi" comme devant être ouverte à
|
||||||
|
// l'aide d'un objet "XMIResourceFactoryImpl"
|
||||||
|
Resource.Factory.Registry reg = Resource.Factory.Registry.INSTANCE;
|
||||||
|
Map<String, Object> m = reg.getExtensionToFactoryMap();
|
||||||
|
m.put("xmi", new XMIResourceFactoryImpl());
|
||||||
|
|
||||||
|
// Créer un objet resourceSetImpl qui contiendra une ressource EMF (le modèle)
|
||||||
|
ResourceSet resSet = new ResourceSetImpl();
|
||||||
|
|
||||||
|
// Charger la ressource (notre modèle)
|
||||||
|
URI modelURI = URI.createURI("test.xmi");
|
||||||
|
Resource resource = resSet.getResource(modelURI, true);
|
||||||
|
|
||||||
|
// Récupérer le premier élément du modèle (élément racine)
|
||||||
|
Process process = (Process) resource.getContents().get(0);
|
||||||
|
|
||||||
|
// La fabrique pour fabriquer les éléments de PetriNET
|
||||||
|
PetrinetFactory myFactory = PetrinetFactory.eINSTANCE;
|
||||||
|
|
||||||
|
// Créer un élément Network
|
||||||
|
Network network = myFactory.createNetwork();
|
||||||
|
network.setName(process.getName());
|
||||||
|
|
||||||
|
// Conversion des WorkDefinition en Node et Transition
|
||||||
|
for (Object o : process.getProcessElements()) {
|
||||||
|
if (o instanceof WorkDefinition) {
|
||||||
|
WorkDefinition wd = (WorkDefinition) o;
|
||||||
|
String name = wd.getName();
|
||||||
|
|
||||||
|
Place idle = myFactory.createPlace();
|
||||||
|
idle.setName(name + "_idle");
|
||||||
|
idle.setTokens(1);
|
||||||
|
Place started = myFactory.createPlace();
|
||||||
|
started.setName(name + "_started");
|
||||||
|
started.setTokens(0);
|
||||||
|
Place running = myFactory.createPlace();
|
||||||
|
running.setName(name + "_running");
|
||||||
|
running.setTokens(0);
|
||||||
|
Place finished = myFactory.createPlace();
|
||||||
|
finished.setName(name + "_finished");
|
||||||
|
finished.setTokens(0);
|
||||||
|
|
||||||
|
Arc pause2start = myFactory.createArc();
|
||||||
|
pause2start.setTarget(idle);
|
||||||
|
pause2start.setOutgoing(false);
|
||||||
|
pause2start.setWeight(1);
|
||||||
|
Arc start2running = myFactory.createArc();
|
||||||
|
start2running.setTarget(running);
|
||||||
|
start2running.setOutgoing(true);
|
||||||
|
start2running.setWeight(1);
|
||||||
|
Arc start2started = myFactory.createArc();
|
||||||
|
start2started.setTarget(started);
|
||||||
|
start2started.setOutgoing(true);
|
||||||
|
start2started.setWeight(1);
|
||||||
|
Transition start = myFactory.createTransition();
|
||||||
|
start.setName(name + "_start");
|
||||||
|
start.getArcs().add(pause2start);
|
||||||
|
start.getArcs().add(start2running);
|
||||||
|
start.getArcs().add(start2started);
|
||||||
|
|
||||||
|
Arc running2finish = myFactory.createArc();
|
||||||
|
running2finish.setTarget(running);
|
||||||
|
running2finish.setOutgoing(false);
|
||||||
|
running2finish.setWeight(1);
|
||||||
|
Arc finish2finished = myFactory.createArc();
|
||||||
|
finish2finished.setTarget(finished);
|
||||||
|
finish2finished.setOutgoing(true);
|
||||||
|
finish2finished.setWeight(1);
|
||||||
|
Transition finish = myFactory.createTransition();
|
||||||
|
finish.setName(name + "_finish");
|
||||||
|
finish.getArcs().add(running2finish);
|
||||||
|
finish.getArcs().add(finish2finished);
|
||||||
|
|
||||||
|
network.getNodes().add(idle);
|
||||||
|
network.getNodes().add(start);
|
||||||
|
network.getNodes().add(started);
|
||||||
|
network.getNodes().add(running);
|
||||||
|
network.getNodes().add(finish);
|
||||||
|
network.getNodes().add(finished);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Conversion des WorkSequence en Node et Transition
|
||||||
|
for (Object o : process.getProcessElements()) {
|
||||||
|
if (o instanceof WorkSequence) {
|
||||||
|
WorkSequence ws = (WorkSequence) o;
|
||||||
|
WorkSequenceType type = ws.getLinkType();
|
||||||
|
WorkDefinition predecessor = ws.getPredecessor();
|
||||||
|
WorkDefinition successor = ws.getSuccessor();
|
||||||
|
|
||||||
|
// creation des suffixs permettant la recherche des noeuds
|
||||||
|
String predecessor_suffix = new String();
|
||||||
|
String successor_suffix = new String();
|
||||||
|
switch (type) {
|
||||||
|
case START_TO_START:
|
||||||
|
predecessor_suffix = "_started";
|
||||||
|
successor_suffix = "_start";
|
||||||
|
break;
|
||||||
|
case START_TO_FINISH:
|
||||||
|
predecessor_suffix = "_started";
|
||||||
|
successor_suffix = "_finished";
|
||||||
|
break;
|
||||||
|
case FINISH_TO_START:
|
||||||
|
predecessor_suffix = "_finished";
|
||||||
|
successor_suffix = "_start";
|
||||||
|
break;
|
||||||
|
case FINISH_TO_FINISH:
|
||||||
|
predecessor_suffix = "_finished";
|
||||||
|
successor_suffix = "_finish";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
System.out.print("the fuck ?");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// creation du read-arc
|
||||||
|
Arc arc1 = myFactory.createArc();
|
||||||
|
arc1.setOutgoing(false);
|
||||||
|
arc1.setWeight(1);
|
||||||
|
Arc arc2 = myFactory.createArc();
|
||||||
|
arc2.setOutgoing(true);
|
||||||
|
arc2.setWeight(1);
|
||||||
|
|
||||||
|
for (Node node : network.getNodes()) {
|
||||||
|
if (node instanceof Place) {
|
||||||
|
Place place = (Place) node;
|
||||||
|
if (place.getName().equals(predecessor.getName() + predecessor_suffix)) {
|
||||||
|
arc1.setTarget(place);
|
||||||
|
arc2.setTarget(place);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (node instanceof Transition) {
|
||||||
|
Transition transition = (Transition) node;
|
||||||
|
if (transition.getName().equals(successor.getName() + successor_suffix)) {
|
||||||
|
transition.getArcs().add(arc1);
|
||||||
|
transition.getArcs().add(arc2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Conversion des Resource et Request en Node et Arcs
|
||||||
|
for (Object o : process.getProcessElements()) {
|
||||||
|
if (o instanceof simplepdl.Resource) {
|
||||||
|
|
||||||
|
simplepdl.Resource r = (simplepdl.Resource) o;
|
||||||
|
String name = r.getName();
|
||||||
|
int qty = r.getQuantity();
|
||||||
|
|
||||||
|
Place res = myFactory.createPlace();
|
||||||
|
res.setName(name);
|
||||||
|
res.setTokens(qty);
|
||||||
|
|
||||||
|
network.getNodes().add(res);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (o instanceof simplepdl.Request) {
|
||||||
|
|
||||||
|
Request r = (Request) o;
|
||||||
|
simplepdl.Resource target = r.getTarget();
|
||||||
|
int qty = r.getQuantity();
|
||||||
|
|
||||||
|
Arc arc1 = myFactory.createArc();
|
||||||
|
arc1.setOutgoing(true);
|
||||||
|
arc1.setWeight(qty);
|
||||||
|
arc1.setTarget(target);
|
||||||
|
Arc arc2 = myFactory.createArc();
|
||||||
|
arc2.setOutgoing(false);
|
||||||
|
arc2.setWeight(qty);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Créer le nouveau xmi (modèle convertit)
|
||||||
|
URI convURI = URI.createURI("models/Developpement_petrinet.xmi");
|
||||||
|
Resource conv = resSet.createResource(convURI);
|
||||||
|
|
||||||
|
// Ajouter le Network dans le nouveau modèle
|
||||||
|
conv.getContents().add(network);
|
||||||
|
|
||||||
|
// Sauver la ressource
|
||||||
|
try {
|
||||||
|
conv.save(Collections.EMPTY_MAP);
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
source.. = src/,\
|
||||||
|
src-gen/,\
|
||||||
|
xtend-gen/
|
||||||
|
bin.includes = META-INF/,\
|
||||||
|
.,\
|
||||||
|
plugin.xml
|
|
@ -0,0 +1,6 @@
|
||||||
|
source.. = src/,\
|
||||||
|
src-gen/,\
|
||||||
|
xtend-gen/
|
||||||
|
bin.includes = META-INF/,\
|
||||||
|
.,\
|
||||||
|
plugin.xml
|
|
@ -0,0 +1,218 @@
|
||||||
|
package simplepdl.manip;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
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.resource.impl.ResourceSetImpl;
|
||||||
|
import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
|
||||||
|
|
||||||
|
import petrinet.Arc;
|
||||||
|
import petrinet.Network;
|
||||||
|
import petrinet.Node;
|
||||||
|
import petrinet.PetrinetFactory;
|
||||||
|
import petrinet.PetrinetPackage;
|
||||||
|
import petrinet.Place;
|
||||||
|
import petrinet.Transition;
|
||||||
|
import simplepdl.Process;
|
||||||
|
import simplepdl.SimplepdlPackage;
|
||||||
|
import simplepdl.WorkDefinition;
|
||||||
|
import simplepdl.WorkSequence;
|
||||||
|
import simplepdl.WorkSequenceType;
|
||||||
|
|
||||||
|
public class simplepdl2petrinet {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
|
||||||
|
// Charger les package SimplePDL et Petrinet afin de les enregistrer dans le registre d'Eclipse.
|
||||||
|
SimplepdlPackage packageInstance = SimplepdlPackage.eINSTANCE;
|
||||||
|
PetrinetPackage packageInstance2 = PetrinetPackage.eINSTANCE;
|
||||||
|
|
||||||
|
// Enregistrer l'extension ".xmi" comme devant être ouverte à
|
||||||
|
// l'aide d'un objet "XMIResourceFactoryImpl"
|
||||||
|
Resource.Factory.Registry reg = Resource.Factory.Registry.INSTANCE;
|
||||||
|
Map<String, Object> m = reg.getExtensionToFactoryMap();
|
||||||
|
m.put("xmi", new XMIResourceFactoryImpl());
|
||||||
|
|
||||||
|
// Créer un objet resourceSetImpl qui contiendra une ressource EMF (le modèle)
|
||||||
|
ResourceSet resSet = new ResourceSetImpl();
|
||||||
|
|
||||||
|
// Charger la ressource (notre modèle)
|
||||||
|
URI modelURI = URI.createURI("test.xmi");
|
||||||
|
Resource resource = resSet.getResource(modelURI, true);
|
||||||
|
|
||||||
|
// Récupérer le premier élément du modèle (élément racine)
|
||||||
|
Process process = (Process) resource.getContents().get(0);
|
||||||
|
|
||||||
|
// La fabrique pour fabriquer les éléments de PetriNET
|
||||||
|
PetrinetFactory myFactory = PetrinetFactory.eINSTANCE;
|
||||||
|
|
||||||
|
// Créer un élément Network
|
||||||
|
Network network = myFactory.createNetwork();
|
||||||
|
network.setName(process.getName());
|
||||||
|
|
||||||
|
// Conversion des WorkDefinition en Node et Transition
|
||||||
|
for (Object o : process.getProcessElements()) {
|
||||||
|
if (o instanceof WorkDefinition) {
|
||||||
|
WorkDefinition wd = (WorkDefinition) o;
|
||||||
|
String name = wd.getName();
|
||||||
|
|
||||||
|
Place idle = myFactory.createPlace();
|
||||||
|
idle.setName(name + "_idle");
|
||||||
|
idle.setTokens(1);
|
||||||
|
Place started = myFactory.createPlace();
|
||||||
|
started.setName(name + "_started");
|
||||||
|
started.setTokens(0);
|
||||||
|
Place running = myFactory.createPlace();
|
||||||
|
running.setName(name + "_running");
|
||||||
|
running.setTokens(0);
|
||||||
|
Place finished = myFactory.createPlace();
|
||||||
|
finished.setName(name + "_finished");
|
||||||
|
finished.setTokens(0);
|
||||||
|
|
||||||
|
Arc pause2start = myFactory.createArc();
|
||||||
|
pause2start.setTarget(idle);
|
||||||
|
pause2start.setOutgoing(false);
|
||||||
|
pause2start.setWeight(1);
|
||||||
|
Arc start2running = myFactory.createArc();
|
||||||
|
start2running.setTarget(running);
|
||||||
|
start2running.setOutgoing(true);
|
||||||
|
start2running.setWeight(1);
|
||||||
|
Arc start2started = myFactory.createArc();
|
||||||
|
start2started.setTarget(started);
|
||||||
|
start2started.setOutgoing(true);
|
||||||
|
start2started.setWeight(1);
|
||||||
|
Transition start = myFactory.createTransition();
|
||||||
|
start.setName(name + "_start");
|
||||||
|
start.getArcs().add(pause2start);
|
||||||
|
start.getArcs().add(start2running);
|
||||||
|
start.getArcs().add(start2started);
|
||||||
|
|
||||||
|
Arc running2finish = myFactory.createArc();
|
||||||
|
running2finish.setTarget(running);
|
||||||
|
running2finish.setOutgoing(false);
|
||||||
|
running2finish.setWeight(1);
|
||||||
|
Arc finish2finished = myFactory.createArc();
|
||||||
|
finish2finished.setTarget(finished);
|
||||||
|
finish2finished.setOutgoing(true);
|
||||||
|
finish2finished.setWeight(1);
|
||||||
|
Transition finish = myFactory.createTransition();
|
||||||
|
finish.setName(name + "_finish");
|
||||||
|
finish.getArcs().add(running2finish);
|
||||||
|
finish.getArcs().add(finish2finished);
|
||||||
|
|
||||||
|
network.getNodes().add(idle);
|
||||||
|
network.getNodes().add(start);
|
||||||
|
network.getNodes().add(started);
|
||||||
|
network.getNodes().add(running);
|
||||||
|
network.getNodes().add(finish);
|
||||||
|
network.getNodes().add(finished);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Conversion des WorkSequence en Node et Transition
|
||||||
|
for (Object o : process.getProcessElements()) {
|
||||||
|
if (o instanceof WorkSequence) {
|
||||||
|
WorkSequence ws = (WorkSequence) o;
|
||||||
|
WorkSequenceType type = ws.getLinkType();
|
||||||
|
WorkDefinition predecessor = ws.getPredecessor();
|
||||||
|
WorkDefinition successor = ws.getSuccessor();
|
||||||
|
|
||||||
|
// creation des suffixs permettant la recherche des noeuds
|
||||||
|
String predecessor_suffix = new String();
|
||||||
|
String successor_suffix = new String();
|
||||||
|
switch (type) {
|
||||||
|
case START_TO_START:
|
||||||
|
predecessor_suffix = "_started";
|
||||||
|
successor_suffix = "_start";
|
||||||
|
break;
|
||||||
|
case START_TO_FINISH:
|
||||||
|
predecessor_suffix = "_started";
|
||||||
|
successor_suffix = "_finished";
|
||||||
|
break;
|
||||||
|
case FINISH_TO_START:
|
||||||
|
predecessor_suffix = "_finished";
|
||||||
|
successor_suffix = "_start";
|
||||||
|
break;
|
||||||
|
case FINISH_TO_FINISH:
|
||||||
|
predecessor_suffix = "_finished";
|
||||||
|
successor_suffix = "_finish";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
System.out.print("the fuck ?");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// creation du read-arc
|
||||||
|
Arc arc1 = myFactory.createArc();
|
||||||
|
arc1.setOutgoing(false);
|
||||||
|
arc1.setWeight(1);
|
||||||
|
Arc arc2 = myFactory.createArc();
|
||||||
|
arc2.setOutgoing(true);
|
||||||
|
arc2.setWeight(1);
|
||||||
|
|
||||||
|
for (Node node : network.getNodes()) {
|
||||||
|
if (node instanceof Place) {
|
||||||
|
Place place = (Place) node;
|
||||||
|
if (place.getName().equals(predecessor.getName() + predecessor_suffix)) {
|
||||||
|
arc1.setTarget(place);
|
||||||
|
arc2.setTarget(place);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (node instanceof Transition) {
|
||||||
|
Transition transition = (Transition) node;
|
||||||
|
if (transition.getName().equals(successor.getName() + successor_suffix)) {
|
||||||
|
transition.getArcs().add(arc1);
|
||||||
|
transition.getArcs().add(arc2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Conversion des Resource et Request en Node et Arcs
|
||||||
|
for (Object o : process.getProcessElements()) {
|
||||||
|
if (o instanceof simplepdl.Resource) {
|
||||||
|
|
||||||
|
simplepdl.Resource r = (simplepdl.Resource) o;
|
||||||
|
String name = r.getName();
|
||||||
|
int qty = r.getQuantity();
|
||||||
|
|
||||||
|
Place res = myFactory.createPlace();
|
||||||
|
res.setName(name);
|
||||||
|
res.setTokens(qty);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (o instanceof simplepdl.Request) {
|
||||||
|
|
||||||
|
simplepdl.Request r = (simplepdl.Request) o;
|
||||||
|
simplepdl.Resource target = r.getTarget();
|
||||||
|
int qty = r.getQuantity();
|
||||||
|
|
||||||
|
Place res = myFactory.createPlace();
|
||||||
|
res.setName(name);
|
||||||
|
res.setTokens(qty);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Créer le nouveau xmi (modèle convertit)
|
||||||
|
URI convURI = URI.createURI("models/Developpement_petrinet.xmi");
|
||||||
|
Resource conv = resSet.createResource(convURI);
|
||||||
|
|
||||||
|
// Ajouter le Network dans le nouveau modèle
|
||||||
|
conv.getContents().add(network);
|
||||||
|
|
||||||
|
// Sauver la ressource
|
||||||
|
try {
|
||||||
|
conv.save(Collections.EMPTY_MAP);
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,31 @@
|
||||||
|
grammar fr.n7.PDL1 with org.eclipse.xtext.common.Terminals
|
||||||
|
generate pDL1 "http://www.n7.fr/PDL1"
|
||||||
|
|
||||||
|
Process :
|
||||||
|
'process' ':' name=ID
|
||||||
|
processElements+=ProcessElement* ;
|
||||||
|
|
||||||
|
|
||||||
|
ProcessElement :
|
||||||
|
WorkDefinitionList | WorkSequence | Guidance;
|
||||||
|
|
||||||
|
WorkDefinitionList :
|
||||||
|
'workdefinitions' ':' WorkDefinitionList+=WorkDefinition* ;
|
||||||
|
|
||||||
|
WorkDefinition :
|
||||||
|
name=ID ";" ;
|
||||||
|
|
||||||
|
WorkSequence :
|
||||||
|
'ws' linkType=WorkSequenceType
|
||||||
|
'from' predecessor=[WorkDefinition]
|
||||||
|
'to' successor=[WorkDefinition] ;
|
||||||
|
|
||||||
|
Guidance :
|
||||||
|
'note' texte=STRING ;
|
||||||
|
|
||||||
|
enum WorkSequenceType :
|
||||||
|
start2start = 's2s'
|
||||||
|
| finish2start = 'f2s'
|
||||||
|
| start2finish = 's2f'
|
||||||
|
| finish2finish = 'f2f'
|
||||||
|
;
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue