feat: avancement prototype

This commit is contained in:
Laurent Fainsin 2021-12-04 15:59:35 +01:00
parent 03b4222df6
commit 71b2144c04
17 changed files with 2246 additions and 162 deletions

View file

@ -5,8 +5,7 @@ public class Condition {
List<ConditionEt> conditionEts;
public Condition(
ConditionEt... conditionEts) {
public Condition(ConditionEt... conditionEts) {
this.conditionEts = new ArrayList<>();
for (ConditionEt c : conditionEts) {
this.conditionEts.add(c);

View file

@ -6,21 +6,21 @@ public class Personne {
String nom;
Condition visible;
Condition obligatoire;
List<Interaction> interractions;
List<Interaction> interactions;
public Personne(
String nom,
Condition visible,
Condition obligatoire,
List<Interaction> interractions) {
List<Interaction> interactions) {
this.nom = nom;
this.visible = visible;
this.obligatoire = obligatoire;
this.interractions = interractions;
this.interactions = interactions;
}
void interragir(BufferedReader reader, Lieu lieu) {
for (Interaction i : this.interractions) {
for (Interaction i : this.interactions) {
if (i.visible.evaluer()) {
i.interragir(reader, lieu);
}

View file

@ -0,0 +1,43 @@
public static void main(String[] args) {
Condition vraie = new Condition(new ConditionEt(new ConditionBoolean(true)));
// "Objets"
List<Objet> jeu_objets = new ArrayList<>();
List<Description> objet_tentative_descriptions = new new ArrayList<>();
objet_tentative_descriptions.add(
new Description(
"permet répondre une question du sphinx",
vraie
)
);
Objet objet_tentative = new Objet(
"tentative",
1,
vraie,
objet_tentative_descriptions
);
jeu_objets.add(tentative_objet);
// "Connaissances"
List<Conaissance> jeu_connaissances = new ArrayList<>();
List<Description> connaissance_Réussite_descriptions = new new ArrayList<>();
objet_Réussite_descriptions.add(
new Description(
"Permet de se casser de là",
vraie
)
);
Connaissance connaissance_Réussite = new Connaissance(
"Réussite",
vraie,
connaissance_Réussite_descriptions
);
jeu_connaissances.add(reussite_connaissance);
}

View file

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
<classpathentry kind="src" path="src"/>
<classpathentry kind="output" path="bin"/>
</classpath>

View file

@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>fr.n7.game.toPrototype.ui</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.pde.ManifestBuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.pde.SchemaBuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.pde.PluginNature</nature>
<nature>org.eclipse.jdt.core.javanature</nature>
</natures>
</projectDescription>

View file

@ -0,0 +1,6 @@
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
org.eclipse.jdt.core.compiler.compliance=1.5
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.source=1.5

View file

@ -0,0 +1,20 @@
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Acceleo ToPrototype Module IDE Plug-in
Bundle-SymbolicName: fr.n7.game.toPrototype.ui;singleton:=true
Bundle-Version: 1.0.0.qualifier
Bundle-Activator: fr.n7.game.toPrototype.ui.Activator
Bundle-Vendor: Eclipse Modeling Project
Require-Bundle: org.eclipse.ui,
org.eclipse.core.runtime,
org.eclipse.core.resources,
fr.n7.game.toPrototype,
org.eclipse.emf.ecore,
org.eclipse.emf.ecore.xmi,
org.eclipse.ocl,
org.eclipse.ocl.ecore,
org.eclipse.acceleo.model,
org.eclipse.acceleo.engine
Bundle-RequiredExecutionEnvironment: J2SE-1.5
Bundle-ActivationPolicy: lazy
Eclipse-LazyStart: true

View file

@ -0,0 +1,7 @@
source.. = src/
output.. = bin/
bin.includes = META-INF/,\
.,\
plugin.xml,\
icons/

Binary file not shown.

After

Width:  |  Height:  |  Size: 534 B

View file

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.2"?>
<plugin>
<extension point="org.eclipse.ui.popupMenus">
<objectContribution
adaptable="true"
objectClass="org.eclipse.core.resources.IFile"
nameFilter="*.game"
id="fr.n7.game.toPrototype.ui.popupMenus.contribution.IFile">
<menu id="org.eclipse.acceleo.module.menu" label="Acceleo Model to Text" path="additionsAcceleo">
<groupMarker name="acceleo"/>
</menu>
<action
class="fr.n7.game.toPrototype.ui.popupMenus.AcceleoGenerateToPrototypeAction"
enablesFor="+"
id="fr.n7.game.toPrototype.ui.popupMenus.acceleoGenerateToPrototypeAction"
icon="icons/default.gif"
label="Generate ToPrototype"
menubarPath="org.eclipse.acceleo.module.menu/acceleo"/>
</objectContribution>
</extension>
</plugin>

View file

@ -0,0 +1,66 @@
/*******************************************************************************
* Copyright (c) 2008, 2012 Obeo.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Obeo - initial API and implementation
*******************************************************************************/
package fr.n7.game.toPrototype.ui;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.osgi.framework.BundleContext;
/**
* The activator class controls the plug-in life cycle.
*/
public class Activator extends AbstractUIPlugin {
/**
* The plug-in ID.
*/
public static final String PLUGIN_ID = "fr.n7.game.toPrototype.ui";
/**
* The shared instance.
*/
private static Activator plugin;
/**
* The constructor.
*/
public Activator() {
}
/**{@inheritDoc}
*
* @see org.eclipse.core.runtime.Plugin#start(org.osgi.framework.BundleContext)
* @generated
*/
public void start(BundleContext context) throws Exception {
super.start(context);
plugin = this;
}
/**{@inheritDoc}
*
* @see org.eclipse.core.runtime.Plugin#stop(org.osgi.framework.BundleContext)
* @generated
*/
public void stop(BundleContext context) throws Exception {
plugin = null;
super.stop(context);
}
/**
* Returns the shared instance.
*
* @return the shared instance
*/
public static Activator getDefault() {
return plugin;
}
}

View file

@ -0,0 +1,86 @@
/*******************************************************************************
* Copyright (c) 2008, 2012 Obeo.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Obeo - initial API and implementation
*******************************************************************************/
package fr.n7.game.toPrototype.ui.common;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.emf.common.util.BasicMonitor;
import org.eclipse.core.resources.IContainer;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.emf.common.util.URI;
/**
* Main entry point of the 'ToPrototype' generation module.
*/
public class GenerateAll {
/**
* The model URI.
*/
private URI modelURI;
/**
* The output folder.
*/
private IContainer targetFolder;
/**
* The other arguments.
*/
List<? extends Object> arguments;
/**
* Constructor.
*
* @param modelURI
* is the URI of the model.
* @param targetFolder
* is the output folder
* @param arguments
* are the other arguments
* @throws IOException
* Thrown when the output cannot be saved.
* @generated
*/
public GenerateAll(URI modelURI, IContainer targetFolder, List<? extends Object> arguments) {
this.modelURI = modelURI;
this.targetFolder = targetFolder;
this.arguments = arguments;
}
/**
* Launches the generation.
*
* @param monitor
* This will be used to display progress information to the user.
* @throws IOException
* Thrown when the output cannot be saved.
* @generated
*/
public void doGenerate(IProgressMonitor monitor) throws IOException {
if (!targetFolder.getLocation().toFile().exists()) {
targetFolder.getLocation().toFile().mkdirs();
}
monitor.subTask("Loading...");
fr.n7.game.toPrototype.main.ToPrototype gen0 = new fr.n7.game.toPrototype.main.ToPrototype(modelURI, targetFolder.getLocation().toFile(), arguments);
monitor.worked(1);
String generationID = org.eclipse.acceleo.engine.utils.AcceleoLaunchingUtil.computeUIProjectID("fr.n7.game.toPrototype", "fr.n7.game.toPrototype.main.ToPrototype", modelURI.toString(), targetFolder.getFullPath().toString(), new ArrayList<String>());
gen0.setGenerationID(generationID);
gen0.doGenerate(BasicMonitor.toMonitor(monitor));
}
}

View file

@ -0,0 +1,116 @@
/*******************************************************************************
* Copyright (c) 2008, 2012 Obeo.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Obeo - initial API and implementation
*******************************************************************************/
package fr.n7.game.toPrototype.ui.popupMenus;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.Iterator;
import java.util.List;
import java.util.ArrayList;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.emf.common.util.URI;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import fr.n7.game.toPrototype.ui.Activator;
import fr.n7.game.toPrototype.ui.common.GenerateAll;
import org.eclipse.ui.IActionDelegate;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.actions.ActionDelegate;
/**
* ToPrototype code generation.
*/
public class AcceleoGenerateToPrototypeAction extends ActionDelegate implements IActionDelegate {
/**
* Selected model files.
*/
protected List<IFile> files;
/**{@inheritDoc}
*
* @see org.eclipse.ui.actions.ActionDelegate#selectionChanged(org.eclipse.jface.action.IAction, org.eclipse.jface.viewers.ISelection)
* @generated
*/
@SuppressWarnings("unchecked")
public void selectionChanged(IAction action, ISelection selection) {
if (selection instanceof IStructuredSelection) {
files = ((IStructuredSelection) selection).toList();
}
}
/**{@inheritDoc}
*
* @see org.eclipse.ui.actions.ActionDelegate#run(org.eclipse.jface.action.IAction)
* @generated
*/
public void run(IAction action) {
if (files != null) {
IRunnableWithProgress operation = new IRunnableWithProgress() {
public void run(IProgressMonitor monitor) {
try {
Iterator<IFile> filesIt = files.iterator();
while (filesIt.hasNext()) {
IFile model = (IFile)filesIt.next();
URI modelURI = URI.createPlatformResourceURI(model.getFullPath().toString(), true);
IContainer targetFolder = null;
try {
IContainer target = model.getProject().getFolder("src-gen");
targetFolder = target;
GenerateAll generator = new GenerateAll(modelURI, targetFolder, getArguments());
generator.doGenerate(monitor);
} catch (IOException e) {
IStatus status = new Status(IStatus.ERROR, Activator.PLUGIN_ID, e.getMessage(), e);
Activator.getDefault().getLog().log(status);
} finally {
if (targetFolder != null) {
targetFolder.getProject().refreshLocal(IResource.DEPTH_INFINITE, monitor);
}
}
}
} catch (CoreException e) {
IStatus status = new Status(IStatus.ERROR, Activator.PLUGIN_ID, e.getMessage(), e);
Activator.getDefault().getLog().log(status);
}
}
};
try {
PlatformUI.getWorkbench().getProgressService().run(true, true, operation);
} catch (InvocationTargetException e) {
IStatus status = new Status(IStatus.ERROR, Activator.PLUGIN_ID, e.getMessage(), e);
Activator.getDefault().getLog().log(status);
} catch (InterruptedException e) {
IStatus status = new Status(IStatus.ERROR, Activator.PLUGIN_ID, e.getMessage(), e);
Activator.getDefault().getLog().log(status);
}
}
}
/**
* Computes the arguments of the generator.
*
* @return the arguments
* @generated
*/
protected List<? extends Object> getArguments() {
return new ArrayList<String>();
}
}

View file

@ -7,29 +7,155 @@
[file ('Prototype.java', false, 'UTF-8')]
public static void main(String['['/][']'/] args) {
Condition faux = new Condition(new ConditionEt(new ConditionBoolean(false)));
Condition vraie = new Condition(new ConditionEt(new ConditionBoolean(true)));
// "Objets"
List<Objet> jeu_objets = new ArrayList<>();
[for (o : Objet | jeu.objets)]
List<Description> objet_[o.nom.nom/]_descriptions = new new ArrayList<>();
[for (d : Description | o.descriptions)]
objet_[o.nom.nom/]_descriptions.add(
new Description(
[d.texte/],
vraie));
"[d.texte/]",
vraie
)
);
[/for]
Objet objet_[o.nom.nom/] = new Objet(
[o.nom.nom/],
"[o.nom.nom/]",
[o.taille/],
vraie,
objet_[o.nom/]_descriptions);
objet_[o.nom.nom/]_descriptions
);
jeu_objets.add(tentative_objet);
[/for]
// "Connaissances"
List<Conaissance> jeu_connaissances = new ArrayList<>();
[for (c : Connaissance | jeu.connaissances)]
List<Description> connaissance_[c.nom.nom/]_descriptions = new new ArrayList<>();
[for (d : Description | c.descriptions)]
objet_[c.nom.nom/]_descriptions.add(
new Description(
"[d.texte/]",
vraie
)
);
[/for]
Connaissance connaissance_[c.nom.nom/] = new Connaissance(
"[c.nom.nom/]",
vraie,
connaissance_[c.nom.nom/]_descriptions
);
jeu_connaissances.add(reussite_connaissance);
[/for]
// "Explorateur"
List<Objet> explorateur_inventaire = new ArrayList<>();
[for (o : Nom | jeu.explorateur.objets)]
explorateur_inventaire.add([o.nom/]);
[/for]
List<Connaissance> explorateur_connaissances = new ArrayList<>();
[for (c : Nom | jeu.explorateur.connaissances)]
explorateur_inventaire.add([c.nom/]);
[/for]
Jeu.explorateur = new Explorateur(
[jeu.explorateur.tailleInventaire/],
explorateur_connaissances,
explorateur_inventaire);
// "Personnes"
List<Personne> jeu_personnes = new ArrayList<>();
[for (p : Personne | jeu.personnes)]
Personne personne_[p.nom.nom/] = new Personne(
"[p.nom.nom/]",
condition0,
vraie,
personne_[p.nom.nom/]_interactions
);
jeu_personnes.add(personne_[p.nom.nom/]);
[/for]
jeu.jouer();
}
[/file]
[/template]
[template public print(c : Condition, name: String) post (trim()) ]
Condition condition_[name/] = new Condition(
new ConditionEt(
new ConditionConnaissance(
reussite_connaissance,
true
),
new ConditionObjet(
tentative_objet,
">",
0
)
)
);
List<ConditionEt> conditions_ET_[name/] = new ArrayList<>();
[for (cET : ConditionEt | c.condition)]
List<ConditionTest> conditions_TEST_[name/] = new ArrayList<>();
[for (cTEST : ConditionTest | cET.conditionTest)]
[if (cTEST.oclIsTypeOf(ConditionObjet))]
[let cOBJET : ConditionObjet = cTEST.oclAsType(ConditionObjet)]
conditions_TEST_[name/].add(
new ConditionObjet(
objet_[cOBJET.objet.nom/],
"[cOBJET.comparateur/]",
[cOBJET.nombre/]
);
);
[/let]
[elseif (cTEST.oclIsTypeOf(ConditionConnaissance))]
[let cCONN : ConditionConnaissance = cTEST.oclAsType(ConditionConnaissance)]
conditions_TEST_[name/].add(
new ConditionConnaissance(
connaissance_[cCONN.connaissance.nom/],
[cCONN.negation/],
);
);
[/let]
[elseif (cTEST.oclIsTypeOf(ConditionBoolean))]
[let cBOOL : ConditionBoolean = cTEST.oclAsType(ConditionBoolean)]
conditions_TEST_[name/].add(
new ConditionBoolean(
[cBOOL.valeur/],
);
);
[/let]
[/if]
[/for]
[/for]
Condition condition_[name/] = new Condition(conditions_ET_[name/]);
[/template]

View file

@ -7,29 +7,155 @@
[file ('Prototype.java', false, 'UTF-8')]
public static void main(String['['/][']'/] args) {
Condition faux = new Condition(new ConditionEt(new ConditionBoolean(false)));
Condition vraie = new Condition(new ConditionEt(new ConditionBoolean(true)));
// "Objets"
List<Objet> jeu_objets = new ArrayList<>();
[for (o : Objet | jeu.objets)]
List<Description> objet_[o.nom.nom/]_descriptions = new new ArrayList<>();
[for (d : Description | o.descriptions)]
objet_[o.nom.nom/]_descriptions.add(
new Description(
[d.texte/],
vraie));
"[d.texte/]",
vraie
)
);
[/for]
Objet objet_[o.nom.nom/] = new Objet(
[o.nom.nom/],
"[o.nom.nom/]",
[o.taille/],
vraie,
objet_[o.nom/]_descriptions);
objet_[o.nom.nom/]_descriptions
);
jeu_objets.add(tentative_objet);
[/for]
// "Connaissances"
List<Conaissance> jeu_connaissances = new ArrayList<>();
[for (c : Connaissance | jeu.connaissances)]
List<Description> connaissance_[c.nom.nom/]_descriptions = new new ArrayList<>();
[for (d : Description | c.descriptions)]
objet_[c.nom.nom/]_descriptions.add(
new Description(
"[d.texte/]",
vraie
)
);
[/for]
Connaissance connaissance_[c.nom.nom/] = new Connaissance(
"[c.nom.nom/]",
vraie,
connaissance_[c.nom.nom/]_descriptions
);
jeu_connaissances.add(reussite_connaissance);
[/for]
// "Explorateur"
List<Objet> explorateur_inventaire = new ArrayList<>();
[for (o : Nom | jeu.explorateur.objets)]
explorateur_inventaire.add([o.nom/]);
[/for]
List<Connaissance> explorateur_connaissances = new ArrayList<>();
[for (c : Nom | jeu.explorateur.connaissances)]
explorateur_inventaire.add([c.nom/]);
[/for]
Jeu.explorateur = new Explorateur(
[jeu.explorateur.tailleInventaire/],
explorateur_connaissances,
explorateur_inventaire);
// "Personnes"
List<Personne> jeu_personnes = new ArrayList<>();
[for (p : Personne | jeu.personnes)]
Personne personne_[p.nom.nom/] = new Personne(
"[p.nom.nom/]",
condition0,
vraie,
personne_[p.nom.nom/]_interactions
);
jeu_personnes.add(personne_[p.nom.nom/]);
[/for]
jeu.jouer();
}
[/file]
[/template]
[template public print(c : Condition, name: String) post (trim()) ]
Condition condition_[name/] = new Condition(
new ConditionEt(
new ConditionConnaissance(
reussite_connaissance,
true
),
new ConditionObjet(
tentative_objet,
">",
0
)
)
);
List<ConditionEt> conditions_ET_[name/] = new ArrayList<>();
[for (cET : ConditionEt | c.condition)]
List<ConditionTest> conditions_TEST_[name/] = new ArrayList<>();
[for (cTEST : ConditionTest | cET.conditionTest)]
[if (cTEST.oclIsTypeOf(ConditionObjet))]
[let cOBJET : ConditionObjet = cTEST.oclAsType(ConditionObjet)]
conditions_TEST_[name/].add(
new ConditionObjet(
objet_[cOBJET.objet.nom/],
"[cOBJET.comparateur/]",
[cOBJET.nombre/]
);
);
[/let]
[elseif (cTEST.oclIsTypeOf(ConditionConnaissance))]
[let cCONN : ConditionConnaissance = cTEST.oclAsType(ConditionConnaissance)]
conditions_TEST_[name/].add(
new ConditionConnaissance(
connaissance_[cCONN.connaissance.nom/],
[cCONN.negation/],
);
);
[/let]
[elseif (cTEST.oclIsTypeOf(ConditionBoolean))]
[let cBOOL : ConditionBoolean = cTEST.oclAsType(ConditionBoolean)]
conditions_TEST_[name/].add(
new ConditionBoolean(
[cBOOL.valeur/],
);
);
[/let]
[/if]
[/for]
[/for]
Condition condition_[name/] = new Condition(conditions_ET_[name/]);
[/template]

View file

@ -1,17 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>fr.n7.game2petrinet</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.m2m.atl.adt.builder.atlBuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.m2m.atl.adt.builder.atlNature</nature>
</natures>
</projectDescription>