Skip to content
This repository was archived by the owner on May 22, 2021. It is now read-only.

Commit 88988a0

Browse files
committed
V1
1 parent 8c080c1 commit 88988a0

19 files changed

+307
-63
lines changed
22 KB
Binary file not shown.

src/main/java/Main2.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
1-
import stateMachine.Event;
2-
import stateMachine.MyStateMachine;
3-
1+
import stateMachine.AbstractStateMachine;
42
import java.util.Scanner;
53

64
/**
@@ -9,7 +7,7 @@
97
public class Main2 {
108

119
public static void main(String[] args){
12-
MyStateMachine ms = new MyStateMachine();
10+
AbstractStateMachine st;
1311
Scanner sc = new Scanner(System.in);
1412
String input = "";
1513
while(!input.equals("exit")){
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package exemple;
2+
3+
import stateMachine.*;
4+
/**
5+
Generated By SCXMLToJava class
6+
**/
7+
public class GStateMachine extends AbstractStateMachine{
8+
public GStateMachine(){
9+
super();
10+
super.stateList.add( new State().setId("standby").setIsInit(false).addTransition(new Transition().setTo(new State("opening")).addTriggerEvent("someone").addTriggeredEvent(new Event("open").addCallable(new EventSender("open", this,0)))));
11+
super.stateList.add( new State().setId("opening").setIsInit(false).addTransition(new Transition().setTo(new State("waiting")).addTriggerEvent("opened")));
12+
super.stateList.add( new State().setId("waiting").setIsInit(false).addTransition(new Transition().setTo(new State("closing")).addTriggerEvent("endWaiting").addTriggeredEvent(new Event("close").addCallable(new EventSender("close", this,0)))).addOnEntry(new Event("endWaiting").addCallable(new EventSender("endWaiting", this,1000))));
13+
super.stateList.add( new State().setId("closing").setIsInit(false).addTransition(new Transition().setTo(new State("standby")).addTriggerEvent("closed")));
14+
super.linkStates();
15+
super.init();
16+
}}

src/main/java/exemple/Main.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package exemple;
2+
3+
import stateMachine.StateMachine;
4+
5+
/**
6+
* Created by user on 15/04/2017.
7+
*/
8+
public class Main {
9+
10+
11+
public static void main(String[] args){
12+
13+
StateMachine sm = new GStateMachine();
14+
Porte porte = new Porte(sm);
15+
16+
try {
17+
sm.connectToEvent("open", porte, porte.getClass().getMethod("open"));
18+
sm.connectToEvent("close", porte, porte.getClass().getMethod("close"));
19+
} catch (NoSuchMethodException e) {
20+
e.printStackTrace();
21+
}
22+
23+
Thread t = new Thread(porte);
24+
t.start();
25+
sm.start();
26+
27+
//On simule l'arrivée d'une personne
28+
sm.notifyEvent("someone");
29+
}
30+
}

src/main/java/exemple/Porte.java

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package exemple;
2+
3+
import stateMachine.StateMachine;
4+
5+
import java.lang.reflect.InvocationTargetException;
6+
7+
import static java.lang.Thread.sleep;
8+
9+
/**
10+
* Created by user on 15/04/2017.
11+
*/
12+
public class Porte implements Runnable{
13+
14+
private StateMachine sm;
15+
16+
public Porte(StateMachine machine){
17+
this.sm = machine;
18+
}
19+
20+
21+
public void run() {
22+
new Thread(new Runnable(){
23+
public void run(){
24+
while(true){
25+
26+
}
27+
}
28+
}).start();
29+
}
30+
31+
//Simule l'ouverture de la porte
32+
public void open(){
33+
try {
34+
Thread.sleep(1000);
35+
sm.notifyEvent("opened");
36+
System.out.println("porte ouverte");
37+
} catch (InterruptedException e) {
38+
e.printStackTrace();
39+
}
40+
}
41+
42+
public void close(){
43+
try {
44+
Thread.sleep(1000);
45+
sm.notifyEvent("closed");
46+
System.out.println("porte fermé");
47+
} catch (InterruptedException e) {
48+
e.printStackTrace();
49+
}
50+
}
51+
}

src/main/java/generator/SCXMLToJava.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public class SCXMLToJava {
2323
private final String messageHeader="/**\nGenerated By SCXMLToJava class\n**/\n";
2424
private final String classNameHeader="public class GStateMachine extends AbstractStateMachine" + openInst + "\n";
2525
private final String constructorHeader="public GStateMachine()" + openInst + "\n";
26-
private final String fileName = "GStateMachine.java";
26+
private final String fileName = "exemple/GStateMachine.java";
2727
private String javaCode;
2828
private File outputFile;
2929

@@ -99,7 +99,7 @@ else if(e.getTagName().equals("onexit")){
9999

100100
private String parseSend(Element e, String methSuffix){
101101
String result = "";
102-
NodeList list = e.getElementsByTagName("send");
102+
NodeList list = e.getChildNodes();
103103
for(int i =0; i < list.getLength(); i++){
104104
Node tNode = list.item(i);
105105
if(tNode.getNodeType() == Node.ELEMENT_NODE) {
@@ -109,12 +109,19 @@ private String parseSend(Element e, String methSuffix){
109109
String delay = element.getAttribute("delay");
110110
delay = (delay=="")?"0":delay;
111111
result += ".add"+ methSuffix +"(new Event(\"" + eventName + "\").addCallable(new EventSender(\""+ eventName+"\", this,"+delay+")))";
112+
}else if(element.getTagName().equals("raise")){
113+
String eventName = element.getAttribute("event");
114+
String delay = element.getAttribute("delay");
115+
delay = (delay=="")?"0":delay;
116+
result += ".add"+ methSuffix +"(new Event(\"" + eventName + "\").addCallable(new EventSender(\""+ eventName+"\", this,"+delay+")).setType(Event.Type.RAISE))";
112117
}
113118
}
114119
}
115120
return result;
116121
}
117122

123+
124+
118125
private String parseTransitions(Node stateNode) {
119126
String result = "";
120127
NodeList transitions = stateNode.getChildNodes();

src/main/java/stateMachine/EventHandler.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ public void run() {
2323
while(run){
2424
Event e = getNextEvent();
2525
if(e != null){
26+
System.out.println("Sending event " + e.getName());
2627
stateMachine.triggerEvent(e.getName());
2728
}
2829
}

src/main/java/stateMachine/GStateMachine.java

Lines changed: 0 additions & 10 deletions
This file was deleted.

src/main/java/stateMachine/MyStateMachine.java

Lines changed: 0 additions & 23 deletions
This file was deleted.

src/main/java/stateMachine/State.java

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,15 @@
99
* Created by Rami on 08/03/2017.
1010
*/
1111
public class State implements Serializable {
12+
13+
//event name
1214
private String id;
15+
// is the state an initial state
1316
private boolean isInit;
1417
private List<Transition> transitions;
18+
//Events triggered on entry
1519
private List<Event> onEntry;
20+
//Event triggered on exit
1621
private List<Event> onExit;
1722

1823
public State(){
@@ -48,13 +53,19 @@ public State notifyEvent(String event) {
4853
return this;
4954
}
5055

56+
/**
57+
* This method is called when entering the state and triggers all the event that need to be triggered at this point
58+
*/
5159
private void enter() {
5260
for(Event e: onEntry){
5361
e.trigger();
5462
}
5563
System.out.println("enter state " + this.id);
5664
}
5765

66+
/**
67+
* This method is called when exiting the state and triggers all the event that need to be triggered at this point
68+
*/
5869
private void exit(){
5970
for(Event e: onExit){
6071
e.trigger();
@@ -87,7 +98,7 @@ public State addOnExit(Event e){
8798
return this;
8899
}
89100

90-
//TODO
101+
91102
public void connectToEvent(String eventName, Object object, Method method){
92103
for(Event e : onEntry){
93104
if(e.getName().equals(eventName)){
@@ -106,7 +117,6 @@ public void connectToEvent(String eventName, Object object, Method method){
106117
}
107118
}
108119

109-
//TODO
110120
public void connectToEvent(String eventName, Object object, Method method, Object[] args){
111121
for(Event e : onEntry){
112122
if(e.getName().equals(eventName)){
@@ -124,7 +134,6 @@ public void connectToEvent(String eventName, Object object, Method method, Objec
124134
t.connectToEvent(eventName, object, method, args);
125135
}}
126136

127-
//TODO
128137
public void connectToEvent(String eventName, Callable callable){
129138
for(Event e : onEntry){
130139
if(e.getName().equals(eventName)){
@@ -143,7 +152,6 @@ public void connectToEvent(String eventName, Callable callable){
143152
}
144153
}
145154

146-
//TODO
147155
public boolean hasSentEvent(String name) {
148156
for (Event e : onEntry) {
149157
if (e.getName().equals(name)) {

0 commit comments

Comments
 (0)