package com.example.test.dtram;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.HashMap;
import java.util.Map;
import org.springframework.stereotype.Component;
import models.algebra.Expression;
import models.algebra.InvalidMessage;
import models.algebra.ParameterizedIdentifierIsFutureWork;
import models.algebra.UnificationFailed;
import models.algebra.ValueUndefined;
import models.dataConstraintModel.ChannelMember;
import models.dataConstraintModel.JsonTerm;
import models.dataConstraintModel.ResourcePath;
import models.dataFlowModel.DataTransferChannel;
import models.dataFlowModel.DataTransferModel;
import models.dataFlowModel.ResolvingMultipleDefinitionIsFutureWork;
import parser.Parser;
import parser.exceptions.ExpectedColon;
import parser.exceptions.ExpectedRightBracket;
import parser.exceptions.WrongJsonExpression;
import simulator.Event;
import simulator.Simulator;
import simulator.interfaces.html.HtmlElement;
import simulator.interfaces.html.HtmlPresenter;
import simulator.interfaces.html.IWebSocketMessageSender;
@Component
public class Dtram {
File file;
DataTransferModel model;
Simulator simulator;
private final IWebSocketMessageSender ws;
private Map<String, HtmlElement> elements;
HtmlPresenter presenter;
Dtram(IWebSocketMessageSender ws){
this.ws = ws;
elements = new HashMap<>();
}
public void initModel(String path) {
file = new File(path);
try {
Parser parser = new Parser(new BufferedReader(new FileReader(file)));
model = parser.doParse();
model.getInputChannel("Init");
}catch(Exception e) {
}
}
public void startSimulator() {
simulator = new Simulator(model);
simulator.init();
presenter = new HtmlPresenter(simulator, ws, elements);
System.out.println(simulator.getCurState().getResource("screen.widgets"));
try {
Parser.TokenStream stream = new Parser.TokenStream();
Parser p = new Parser(stream);
stream.addLine("init(\"\")");
Expression eventMessage = p.parseTerm(stream, model);
ResourcePath eventResPath = null;
DataTransferChannel initChannel = (DataTransferChannel) model.getInputChannel("Init");
for(ChannelMember out: initChannel.getOutputChannelMembers()) {
eventResPath = out.getResource();
}
Event newEvent = new Event(initChannel, eventMessage, eventResPath, simulator.getCurState().getResource("screen.widgets"));
simulator.transition(newEvent);
} catch (ExpectedRightBracket | WrongJsonExpression | ExpectedColon |
ParameterizedIdentifierIsFutureWork | ResolvingMultipleDefinitionIsFutureWork | InvalidMessage | UnificationFailed | ValueUndefined e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
}
}
public void onRestEvent(String id, String method, JsonTerm message) {
elements.get("\"" + id + "\"").onRestEvent(method, message);
}
}