diff --git a/GameEngine/resources/GameEngineTest.model b/GameEngine/resources/GameEngineTest.model index f1ee23b..3199a45 100644 --- a/GameEngine/resources/GameEngineTest.model +++ b/GameEngine/resources/GameEngineTest.model @@ -1,52 +1,87 @@ init { -scene := { - "entities": { - "001": { - "transform": { - "rotation": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "scale": { - "x": 1.0, - "y": 1.0, - "z": 1.0 - }, - "position": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - } +enemy := { + "001": { + "transform": { + "rotation": { + "x": 0.0, + "y": 0.0, + "z": 0.0 }, - "mesh": { - "sprite": "GameEngine/resources/enemy1.png", - "type": "sprite" + "scale": { + "x": 1.0, + "y": 1.0, + "z": 1.0 + }, + "position": { + "x": 0.0, + "y": 0.0, + "z": 0.0 } }, - "002": { - "transform": { - "rotation": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "scale": { - "x": 1.0, - "y": 1.0, - "z": 1.0 - }, - "position": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - } - }, - "mesh": { - "sprite": "GameEngine/resources/enemy1.png", - "type": "sprite" - } + "move": { + "type": straight, + "speed": 5.0 + }, + "mesh": { + "sprite": "GameEngine/resources/enemy1.png", + "type": "sprite" } + }, + "002": { + "transform": { + "rotation": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "scale": { + "x": 1.0, + "y": 1.0, + "z": 1.0 + }, + "position": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + } + }, + "move": { + "type": straight, + "speed": 5.0 + }, + "mesh": { + "sprite": "GameEngine/resources/enemy1.png", + "type": "sprite" + } + } +} +player := { + "transform": { + "rotation": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "scale": { + "x": 1.0, + "y": 1.0, + "z": 1.0 + }, + "position": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + } + }, + "mesh": { + "sprite": "GameEngine/resources/enemy1.png", + "type": "sprite" + } +} +timers := { + "000": { + "count": 0, + "interval": 100 } } } @@ -56,6 +91,14 @@ native channel SceneUpdateEvent { out scene.time(time:Long,updateEvent(dt:Long)) = (time+dt) } +channel RotateEnemy(eid:Str) { + in enemies.{eid:Str}.transform.rotation(curRot:Json,rotateEnemy(nextRot)) = nextRot + out enemies.{eid:Str}.transform.rotation(curRot:Json,rotateEnemy(nextRot)) = nextRot +} +channel MoveEnemy(eid:Str) { + in enemies.{eid:Str}.transform.position(curPos:Json,moveEnemy(nextPos)) = nextPos + out scene.entities.{eid:Str}.transform.position(curPos:Json,moveEnemy(nextPos)) = nextPos +} native channel TimerEvent(tid:Str) { out timers.{tid:Str}.count(count:Long,tick()) = (count+1) } @@ -75,9 +118,17 @@ native channel EntityScaleUpdate(eid:Str) { in scene.entities.{eid:Str}.transform.scale(curScale:Json,updateScale(nextScale.x,nextScale.y,nextScale.z)) = nextScale } +channel RotateEnemy(eid:Str) { + in enemies.{eid:Str}.transform.rotation(curRot:Json,rotateEnemy(nextRot)) = nextRot + out enemies.{eid:Str}.transform.rotation(curRot:Json,rotateEnemy(nextRot)) = nextRot +} native channel EntityPositionUpdate(eid:Str) { in scene.entities.{eid:Str}.transform.position(curPos:Json,updatePosition(nextPos.x,nextPos.y,nextPos.z)) = nextPos } +channel MoveEnemy(eid:Str) { + in enemies.{eid:Str}.transform.position(curPos:Json,moveEnemy(nextPos)) = nextPos + out scene.entities.{eid:Str}.transform.position(curPos:Json,moveEnemy(nextPos)) = nextPos +} native channel CameraProjectionUpdate { in scene.camera.projection(curProj:Json,updateProjection(curProj,nextProj)) = nextProj } diff --git a/GameEngine/src/main/java/gameEngine/GameEngineModelFileGenerator.java b/GameEngine/src/main/java/gameEngine/GameEngineModelFileGenerator.java index 90cdc60..a057283 100644 --- a/GameEngine/src/main/java/gameEngine/GameEngineModelFileGenerator.java +++ b/GameEngine/src/main/java/gameEngine/GameEngineModelFileGenerator.java @@ -11,14 +11,11 @@ import parser.Parser; import parser.Parser.TokenStream; import parser.exceptions.*; -import simulator.Event; -import simulator.ResourceIdentifier; import simulator.Simulator; import gameEngine.simulator.interfaces.GameEnginePresenter; import simulator.SystemState; import simulator.interfaces.timers.TimerService; -import javax.xml.crypto.Data; import java.io.File; import java.io.FileWriter; import java.io.IOException; @@ -26,11 +23,11 @@ public class GameEngineModelFileGenerator { private DataTransferModel model; private final String modelFilePath = "GameEngine/resources/"; + Parser.TokenStream stream = new Parser.TokenStream(); + Parser parser = new Parser(stream); public void generate(){ try { - Parser.TokenStream stream = new Parser.TokenStream(); - Parser parser = new Parser(stream); model = new DataTransferModel(); ResourcePath scene = new ResourcePath("scene"); // "scene" @@ -58,6 +55,15 @@ ResourcePath timer = new ResourcePath(timers, new Variable("tid", DataConstraintModel.typeString)); // "timers.{tid}" ResourcePath timer_count = new ResourcePath(timer, "count"); //"timer.{tid}.count + ResourcePath enemies = new ResourcePath("enemies"); + ResourcePath enemy = new ResourcePath(enemies, new Variable("eid", DataConstraintModel.typeString)); + ResourcePath enemy_transform = new ResourcePath(enemy, "transform"); + ResourcePath enemy_transform_position = new ResourcePath(enemy_transform, "position"); + ResourcePath enemy_transform_rotation = new ResourcePath(enemy_transform, "rotation"); + ResourcePath enemy_move = new ResourcePath(enemy, "move"); + ResourcePath enemy_move_type = new ResourcePath(enemy_move, "type"); + ResourcePath enemy_move_speed = new ResourcePath(enemy_move, "speed"); + model.addResourcePath(scene_time); model.addResourcePath(scene_camera); model.addResourcePath(scene_camera_transform); @@ -73,23 +79,199 @@ model.addResourcePath(key_state); model.addResourcePath(timers); model.addResourcePath(timer_count); + model.addResourcePath(enemy_transform); + model.addResourcePath(enemy_transform_position); + model.addResourcePath(enemy_transform_rotation); + model.addResourcePath(enemy_move); + model.addResourcePath(enemy_move_type); + model.addResourcePath(enemy_move_speed); addInit(); - addNativeInputChannel(stream, parser, scene_time, new DataTransferChannel("SceneUpdateEvent"), "time: Long", "updateEvent(dt: Long)", "time + dt"); - DataTransferChannel sceneUpdateChannel = addNativeOutputChannel(stream, parser, scene,new DataTransferChannel("SceneUpdate"), "curSc: Json", "update(curSc, nextSc)", "nextSc"); - addNativeOutputChannel(stream, parser, scene_camera_transform_position,new DataTransferChannel("CameraPositionUpdate"),"curPos: Json","updatePosition(nextPos.x, nextPos.y, nextPos.z)","nextPos"); - addNativeOutputChannel(stream, parser, scene_camera_transform_rotation,new DataTransferChannel("CameraRotationUpdate"),"curRot: Json","updateRotation(nextRot.x, nextRot.y, nextRot.z)","nextRot"); - addNativeOutputChannel(stream, parser, scene_camera_transform_scale,new DataTransferChannel("CameraScaleUpdate"),"curScale: Json","updateScale(nextScale.x, nextScale.y, nextScale.z)","nextScale"); - addNativeOutputChannel(stream, parser, scene_camera_projection,new DataTransferChannel("CameraProjectionUpdate"),"curProj: Json","updateProjection(curProj, nextProj)","nextProj"); - addNativeOutputChannel(stream, parser, entity_transform_position, new DataTransferChannel("EntityPositionUpdate", new Variable("eid", DataConstraintModel.typeString)),"curPos: Json","updatePosition(nextPos.x, nextPos.y, nextPos.z)","nextPos"); - addNativeOutputChannel(stream, parser, entity_transform_rotation,new DataTransferChannel("EntityRotationUpdate", new Variable("eid", DataConstraintModel.typeString)),"curRot: Json","updateRotation(nextRot.x, nextRot.y, nextRot.z)","nextRot"); - addNativeOutputChannel(stream, parser, entity_transform_scale,new DataTransferChannel("EntityScaleUpdate", new Variable("eid", DataConstraintModel.typeString)),"curScale: Json","updateScale(nextScale.x, nextScale.y, nextScale.z)","nextScale"); - addNativeOutputChannel (stream, parser, entity_mesh,new DataTransferChannel("EntitySpriteUpdate", new Variable("eid", DataConstraintModel.typeString)),"curMesh: Json","updateSprite(spritePath: Str)","{\"type\": \"sprite\", \"sprite\": spritePath}"); - addNativeInputChannel(stream, parser, key_state,new DataTransferChannel("KeyEvent", new Variable("kno", DataConstraintModel.typeInt)),"curState: Int","keyEvent(nextState)","nextState"); - addNativeOutputChannel(stream, parser, timers ,new DataTransferChannel("TimersUpdated"),"curTimers: Map","update(curTimers, nextTimers)","nextTimers"); - addNativeInputChannel(stream, parser, timer_count,new DataTransferChannel("TimerEvent" , new Variable("tid", DataConstraintModel.typeString)),"count: Long","tick()","count + 1"); - DataTransferChannel updateCameraPosChannel = addInputChannel(stream,parser,scene_camera_transform_position, new DataTransferChannel("UpdateCameraPosition"), "curPos: Json","updateCameraPosition(x: Double, y: Double, z: Double)", "{\"x\": x, \"y\": y, \"z\": z}"); + addNativeChannel( + new DataTransferChannel("SceneUpdateEvent"), + new ChannelDefinition( + ChannelDefinition.ChannelType.In, + scene_time, + "time: Long", + "updateEvent(dt: Long)", + "time + dt" + ) + ); + + addNativeChannel( + new DataTransferChannel("SceneUpdate"), + new ChannelDefinition( + ChannelDefinition.ChannelType.Out, + scene, + "curSc: Json", + "update(curSc, nextSc)", + "nextSc" + ) + ); + + addNativeChannel( + new DataTransferChannel("CameraPositionUpdate"), + new ChannelDefinition( + ChannelDefinition.ChannelType.Out, + scene_camera_transform_position, + "curPos: Json", + "updatePosition(nextPos.x, nextPos.y, nextPos.z)", + "nextPos" + ) + ); + + addNativeChannel( + new DataTransferChannel("CameraRotationUpdate"), + new ChannelDefinition( + ChannelDefinition.ChannelType.Out, + scene_camera_transform_rotation, + "curRot: Json", + "updateRotation(nextRot.x, nextRot.y, nextRot.z)", + "nextRot" + ) + ); + + addNativeChannel( + new DataTransferChannel("CameraScaleUpdate"), + new ChannelDefinition( + ChannelDefinition.ChannelType.Out, + scene_camera_transform_scale, + "curScale: Json", + "updateScale(nextScale.x, nextScale.y, nextScale.z)", + "nextScale" + ) + ); + + addNativeChannel( + new DataTransferChannel("CameraProjectionUpdate"), + new ChannelDefinition( + ChannelDefinition.ChannelType.Out, + scene_camera_projection, + "curProj: Json", + "updateProjection(curProj, nextProj)", + "nextProj" + ) + ); + + addNativeChannel( + new DataTransferChannel("EntityPositionUpdate", new Variable("eid", DataConstraintModel.typeString)), + new ChannelDefinition( + ChannelDefinition.ChannelType.Out, + entity_transform_position, + "curPos: Json", + "updatePosition(nextPos.x, nextPos.y, nextPos.z)", + "nextPos" + ) + ); + + addNativeChannel( + new DataTransferChannel("EntityRotationUpdate", new Variable("eid", DataConstraintModel.typeString)), + new ChannelDefinition( + ChannelDefinition.ChannelType.Out, + entity_transform_rotation, + "curRot: Json", + "updateRotation(nextRot.x, nextRot.y, nextRot.z)", + "nextRot" + ) + ); + + addNativeChannel( + new DataTransferChannel("EntityScaleUpdate", new Variable("eid", DataConstraintModel.typeString)), + new ChannelDefinition( + ChannelDefinition.ChannelType.Out, + entity_transform_scale, + "curScale: Json", + "updateScale(nextScale.x, nextScale.y, nextScale.z)", + "nextScale" + ) + ); + + addNativeChannel( + new DataTransferChannel("EntitySpriteUpdate", new Variable("eid", DataConstraintModel.typeString)), + new ChannelDefinition( + ChannelDefinition.ChannelType.Out, + entity_mesh, + "curMesh: Json", + "updateSprite(spritePath: Str)", + "{\"type\": \"sprite\", \"sprite\": spritePath}" + ) + ); + + addNativeChannel( + new DataTransferChannel("KeyEvent", new Variable("kno", DataConstraintModel.typeInt)), + new ChannelDefinition( + ChannelDefinition.ChannelType.In, + key_state, + "curState: Int", + "keyEvent(nextState)", + "nextState" + ) + ); + + addNativeChannel( + new DataTransferChannel("TimersUpdated"), + new ChannelDefinition( + ChannelDefinition.ChannelType.Out, + timers, + "curTimers: Map", + "update(curTimers, nextTimers)", + "nextTimers" + ) + ); + + addNativeChannel( + new DataTransferChannel("TimerEvent", new Variable("tid", DataConstraintModel.typeString)), + new ChannelDefinition( + ChannelDefinition.ChannelType.In, + timer_count, + "count: Long", + "tick()", + "count + 1" + ) + ); + + addChannel( + new DataTransferChannel("UpdateCameraPosition"), + new ChannelDefinition( + ChannelDefinition.ChannelType.In, + scene_camera_transform_position, + "curPos: Json", + "updateCameraPosition(x: Double, y: Double, z: Double)", + "{\"x\": x, \"y\": y, \"z\": z}") + ); + + addChannel( + new DataTransferChannel("MoveEnemy", new Variable("eid", DataConstraintModel.typeString)), + new ChannelDefinition( + ChannelDefinition.ChannelType.Out, + enemy_transform_position, + "curPos: Json", + "moveEnemy(nextPos)", + "nextPos"), + new ChannelDefinition( + ChannelDefinition.ChannelType.In, + entity_transform_position, + "curPos: Json", + "moveEnemy(nextPos)", + "nextPos") + ); + + addChannel( + new DataTransferChannel("RotateEnemy", new Variable("eid", DataConstraintModel.typeString)), + new ChannelDefinition( + ChannelDefinition.ChannelType.Out, + enemy_transform_rotation, + "curRot: Json", + "rotateEnemy(nextRot)", + "nextRot"), + new ChannelDefinition( + ChannelDefinition.ChannelType.In, + enemy_transform_rotation, + "curRot: Json", + "rotateEnemy(nextRot)", + "nextRot") + ); if (stream.hasNext()) stream.next(); @@ -115,7 +297,7 @@ } } - public JsonTerm createJsonTerm(){ + private JsonTerm createTransformTerm(){ JsonTerm positionTerm = new JsonTerm(); positionTerm.addMember("x", new Constant(String.valueOf(0.0))); positionTerm.addMember("y", new Constant(String.valueOf(0.0))); @@ -135,23 +317,75 @@ transformTerm.addMember("position", positionTerm); transformTerm.addMember("rotation", rotationTerm); transformTerm.addMember("scale", scaleTerm); + return transformTerm; + } + + public JsonTerm createPlayerJsonTerm(){ JsonTerm meshTerm = new JsonTerm(); meshTerm.addMember("type", new Constant("sprite", DataConstraintModel.typeString)); meshTerm.addMember("sprite", new Constant(Window.resourcePath + "enemy1.png", DataConstraintModel.typeString)); - JsonTerm entityTerm = new JsonTerm(); - entityTerm.addMember("transform", transformTerm); - entityTerm.addMember("mesh", meshTerm); + JsonTerm playerTerm = new JsonTerm(); + playerTerm.addMember("transform", createTransformTerm()); + playerTerm.addMember("mesh", meshTerm); - JsonTerm entitiesTerm = new JsonTerm(); - entitiesTerm.addMember("001", entityTerm); - entitiesTerm.addMember("002", entityTerm); + return playerTerm; + } - JsonTerm sceneTerm = new JsonTerm(); - sceneTerm.addMember("entities",entitiesTerm); - return sceneTerm; + public JsonTerm createEnemyJsonTerm(){ + + JsonTerm moveTerm = new JsonTerm(); + moveTerm.addMember("type", new Constant("straight")); + moveTerm.addMember("speed", new Constant(String.valueOf(5.0))); + + JsonTerm meshTerm = new JsonTerm(); + meshTerm.addMember("type", new Constant("sprite", DataConstraintModel.typeString)); + meshTerm.addMember("sprite", new Constant(Window.resourcePath + "enemy1.png", DataConstraintModel.typeString)); + + JsonTerm enemyTerm = new JsonTerm(); + enemyTerm.addMember("transform", createTransformTerm()); + enemyTerm.addMember("mesh", meshTerm); + enemyTerm.addMember("move", moveTerm); + + JsonTerm enemiesTerm = new JsonTerm(); + enemiesTerm.addMember("001", enemyTerm); + enemiesTerm.addMember("002", enemyTerm); + + return enemiesTerm; + } + + public JsonTerm createTimrsJsonTerm(){ + + JsonTerm timerTerm = new JsonTerm(); + timerTerm.addMember("interval", new Constant(String.valueOf(100))); + timerTerm.addMember("count", new Constant(String.valueOf(0))); + + JsonTerm timersTerm = new JsonTerm(); + timersTerm.addMember("000",timerTerm); + return timersTerm; + } + + private void addInit(){ + ResourceHierarchy timersHierarchy = new ResourceHierarchy("timers", DataConstraintModel.typeJson); + timersHierarchy = model.getOrPutResourceHierarchy(timersHierarchy); + JsonTerm timersRightTerm = createTimrsJsonTerm(); + timersHierarchy.setInitialValue(timersRightTerm); + timersHierarchy.setInitText(timersRightTerm.toString()); + + ResourceHierarchy playerHierarchy = new ResourceHierarchy("player", DataConstraintModel.typeJson); + playerHierarchy = model.getOrPutResourceHierarchy(playerHierarchy); + JsonTerm playerRightTerm = createPlayerJsonTerm(); + playerHierarchy.setInitialValue(playerRightTerm); + playerHierarchy.setInitText(playerRightTerm.toString()); + + ResourceHierarchy enemyHierarchy = new ResourceHierarchy("enemy", DataConstraintModel.typeJson); + enemyHierarchy = model.getOrPutResourceHierarchy(enemyHierarchy); + JsonTerm enemyRightTerm = createEnemyJsonTerm(); + enemyHierarchy.setInitialValue(enemyRightTerm); + enemyHierarchy.setInitText(enemyRightTerm.toString()); + } public void save() { @@ -168,89 +402,63 @@ } } - private void addInit(){ - ResourceHierarchy hierarchy = new ResourceHierarchy("scene", DataConstraintModel.typeJson); - hierarchy = model.getOrPutResourceHierarchy(hierarchy); - JsonTerm rightTerm = createJsonTerm(); - hierarchy.setInitialValue(rightTerm); - hierarchy.setInitText(rightTerm.toString()); - + public DataTransferChannel addNativeChannel(DataTransferChannel dataTransferChannel, ChannelDefinition... definitions) throws ExpectedRightBracket, WrongJsonExpression, ExpectedColon, ExpectedDoubleQuotation { + dataTransferChannel.setNative(true); + return addChannel(dataTransferChannel, definitions); } - private DataTransferChannel addNativeOutputChannel(TokenStream stream, Parser parser, ResourcePath path, - DataTransferChannel dataTransferChannel, String curStateName, String messageName, String nextStateName) throws ExpectedRightBracket, WrongJsonExpression, ExpectedColon, ExpectedDoubleQuotation { - DataTransferChannel outputChannel = dataTransferChannel; - outputChannel.setNative(true); - ChannelMember out = new ChannelMember(path); + public DataTransferChannel addChannel(DataTransferChannel dataTransferChannel, ChannelDefinition... definitions) + throws ExpectedRightBracket, WrongJsonExpression, ExpectedColon, ExpectedDoubleQuotation { + DataTransferChannel channel = dataTransferChannel; + + for (ChannelDefinition def : definitions) { + ChannelMember member = addChannelMember(stream, parser, def.path, def.curStateName, def.messageName, def.nextStateName); + if (def.channelType == ChannelDefinition.ChannelType.Out) { + channel.addChannelMemberAsInput(member); + model.addChannel(channel); + } else if (def.channelType == ChannelDefinition.ChannelType.In) { + channel.addChannelMemberAsOutput(member); + model.addInputChannel(channel); + } else if (def.channelType == ChannelDefinition.ChannelType.Ref){ + channel.addChannelMemberAsReference(member); + model.addChannel(channel); + } + } + + return channel; + } + + private ChannelMember addChannelMember(TokenStream stream, Parser parser, ResourcePath path, String curStateName, String messageName, String nextStateName) throws ExpectedRightBracket, WrongJsonExpression, ExpectedColon, ExpectedDoubleQuotation { + ChannelMember member = new ChannelMember(path); stream.addLine(curStateName); Expression curState = parser.parseTerm(stream, model); stream.addLine(messageName); Expression message = parser.parseTerm(stream, model); stream.addLine(nextStateName); Expression nextState = parser.parseTerm(stream, model); - out.getStateTransition().setCurStateExpression(curState); - out.getStateTransition().setMessageExpression(message); - out.getStateTransition().setNextStateExpression(nextState); - outputChannel.addChannelMemberAsInput(out); - model.addChannel(outputChannel); - return outputChannel; + member.getStateTransition().setCurStateExpression(curState); + member.getStateTransition().setMessageExpression(message); + member.getStateTransition().setNextStateExpression(nextState); + return member; } - private DataTransferChannel addNativeInputChannel(TokenStream stream, Parser parser, ResourcePath path, - DataTransferChannel dataTransferChannel, String curStateName, String messageName, String nextStateName) throws ExpectedRightBracket, WrongJsonExpression, ExpectedColon, ExpectedDoubleQuotation { - DataTransferChannel inputChannel = dataTransferChannel; - inputChannel.setNative(true); - ChannelMember in = new ChannelMember(path); - stream.addLine(curStateName); - Expression curState = parser.parseTerm(stream, model); - stream.addLine(messageName); - Expression message = parser.parseTerm(stream, model); - stream.addLine(nextStateName); - Expression nextState = parser.parseTerm(stream, model); - in.getStateTransition().setCurStateExpression(curState); - in.getStateTransition().setMessageExpression(message); - in.getStateTransition().setNextStateExpression(nextState); - inputChannel.addChannelMemberAsOutput(in); - model.addInputChannel(inputChannel); - return inputChannel; - } - private DataTransferChannel addOutputChannel(TokenStream stream, Parser parser, ResourcePath path, - DataTransferChannel dataTransferChannel, String curStateName, String messageName, String nextStateName) throws ExpectedRightBracket, WrongJsonExpression, ExpectedColon, ExpectedDoubleQuotation { - DataTransferChannel outputChannel = dataTransferChannel; - outputChannel.setNative(false); - ChannelMember out = new ChannelMember(path); - stream.addLine(curStateName); - Expression curState = parser.parseTerm(stream, model); - stream.addLine(messageName); - Expression message = parser.parseTerm(stream, model); - stream.addLine(nextStateName); - Expression nextState = parser.parseTerm(stream, model); - out.getStateTransition().setCurStateExpression(curState); - out.getStateTransition().setMessageExpression(message); - out.getStateTransition().setNextStateExpression(nextState); - outputChannel.addChannelMemberAsInput(out); - model.addChannel(outputChannel); - return outputChannel; - } + public class ChannelDefinition { + public enum ChannelType{In, Out, Ref} + public final ChannelType channelType; + public final ResourcePath path; + public final String curStateName; + public final String messageName; + public final String nextStateName; - private DataTransferChannel addInputChannel(TokenStream stream, Parser parser, ResourcePath path, - DataTransferChannel dataTransferChannel, String curStateName, String messageName, String nextStateName) throws ExpectedRightBracket, WrongJsonExpression, ExpectedColon, ExpectedDoubleQuotation { - DataTransferChannel inputChannel = dataTransferChannel; - inputChannel.setNative(false); - ChannelMember in = new ChannelMember(path); - stream.addLine(curStateName); - Expression curState = parser.parseTerm(stream, model); - stream.addLine(messageName); - Expression message = parser.parseTerm(stream, model); - stream.addLine(nextStateName); - Expression nextState = parser.parseTerm(stream, model); - in.getStateTransition().setCurStateExpression(curState); - in.getStateTransition().setMessageExpression(message); - in.getStateTransition().setNextStateExpression(nextState); - inputChannel.addChannelMemberAsOutput(in); - model.addInputChannel(inputChannel); - return inputChannel; + public ChannelDefinition(ChannelType channelType, ResourcePath path ,String curStateName, String messageName, String nextStateName) { + this.path = path; + this.channelType = channelType; + this.curStateName = curStateName; + this.messageName = messageName; + this.nextStateName = nextStateName; + } + } }