Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
JastAdd
RagConnect
Commits
368abea3
Commit
368abea3
authored
Jul 31, 2020
by
René Schöne
Browse files
Rename read/write to receive/send
parent
3beaeeec
Changes
13
Hide whitespace changes
Inline
Side-by-side
src/main/jastadd/Errors.jrag
View file @
368abea3
...
...
@@ -7,32 +7,32 @@ aspect Errors {
[new TreeSet<ErrorMessage>()]
root RagConnect;
Re
ad
FromMqttDefinition contributes error("Re
ad
definition already defined for " + getToken().getName())
Re
ceive
FromMqttDefinition contributes error("Re
ceive
definition already defined for " + getToken().getName())
when isAlreadyDefined()
to RagConnect.errors();
Re
ad
FromMqttDefinition contributes error("Re
ad
ing target token must not be an NTA token!")
Re
ceive
FromMqttDefinition contributes error("Re
ceiv
ing target token must not be an NTA token!")
when getToken().getNTA()
to RagConnect.errors();
// if first mapping is null, then suitableDefaultMapping() == null
Re
ad
FromMqttDefinition contributes error("No suitable default mapping found for type " +
Re
ceive
FromMqttDefinition contributes error("No suitable default mapping found for type " +
((getMappingList().isEmpty())
? getToken().getJavaTypeUse().prettyPrint()
: getMappingList().get(0).getFromType().prettyPrint()))
when effectiveMappings().get(0) == null
to RagConnect.errors();
Re
ad
FromMqttDefinition contributes error("to-type of last mapping must be type of the Token!")
Re
ceive
FromMqttDefinition contributes error("to-type of last mapping must be type of the Token!")
when getToken().getJavaTypeUse().prettyPrint().equals(
effectiveMappings().get(effectiveMappings().size() - 1))
to RagConnect.errors();
Write
ToMqttDefinition contributes error("
Writ
ing target token must be an NTA token!")
Send
ToMqttDefinition contributes error("
Send
ing target token must be an NTA token!")
when !getToken().getNTA()
to RagConnect.errors();
Write
ToMqttDefinition contributes error("
Write
definition already defined for " + getToken().getName())
Send
ToMqttDefinition contributes error("
Send
definition already defined for " + getToken().getName())
when isAlreadyDefined()
to RagConnect.errors();
...
...
@@ -44,7 +44,7 @@ aspect Errors {
when isAlreadyDefinedAsList()
to RagConnect.errors();
DependencyDefinition contributes error("There must be a
write
update definition targeting " + getSource().parentTypeypeAndName() + " for dependency definition " + getID())
DependencyDefinition contributes error("There must be a
send
update definition targeting " + getSource().parentTypeypeAndName() + " for dependency definition " + getID())
when targetEndpointDefinition() == null
to RagConnect.errors();
}
...
...
src/main/jastadd/MustacheNodes.relast
View file @
368abea3
//TypeComponentMustache ;
//rel TypeComponentMustache.TypeComponent -> TypeComponent ;
MRagConnect ::= Re
ad
Definition:MRe
ad
Definition*
Write
Definition:M
Write
Definition* MappingDefinition:MMappingDefinition* DependencyDefinition:MDependencyDefinition* RootTypeComponent:MTypeComponent* TokenComponent:MTokenComponent*;
MRagConnect ::= Re
ceive
Definition:MRe
ceive
Definition*
Send
Definition:M
Send
Definition* MappingDefinition:MMappingDefinition* DependencyDefinition:MDependencyDefinition* RootTypeComponent:MTypeComponent* TokenComponent:MTokenComponent*;
abstract MEndpointDefinition ::= InnerMappingDefinition:MInnerMappingDefinition*;
MRe
ad
Definition : MEndpointDefinition;
M
Write
Definition : MEndpointDefinition;
MRe
ceive
Definition : MEndpointDefinition;
M
Send
Definition : MEndpointDefinition;
MMappingDefinition;
MInnerMappingDefinition;
MDependencyDefinition;
...
...
@@ -13,8 +13,8 @@ MTokenComponent;
rel MRagConnect.RagConnect -> RagConnect;
rel MInnerMappingDefinition.MappingDefinition -> MappingDefinition;
rel MRe
ad
Definition.Re
ad
FromMqttDefinition -> Re
ad
FromMqttDefinition;
rel M
Write
Definition.
Write
ToMqttDefinition ->
Write
ToMqttDefinition;
rel MRe
ceive
Definition.Re
ceive
FromMqttDefinition -> Re
ceive
FromMqttDefinition;
rel M
Send
Definition.
Send
ToMqttDefinition ->
Send
ToMqttDefinition;
rel MMappingDefinition.MappingDefinition -> MappingDefinition;
rel MDependencyDefinition.DependencyDefinition -> DependencyDefinition;
rel MTypeComponent.TypeComponent -> TypeComponent;
...
...
src/main/jastadd/Navigation.jrag
View file @
368abea3
...
...
@@ -24,25 +24,25 @@ aspect Navigation {
syn TokenEndpointDefinition EndpointDefinition.asTokenEndpointDefinition() = null;
eq TokenEndpointDefinition.asTokenEndpointDefinition() = this;
// --- is
Write
ToMqttDefinition ---
syn boolean EndpointDefinition.is
Write
ToMqttDefinition() = false;
eq
Write
ToMqttDefinition.is
Write
ToMqttDefinition() = true;
// --- is
Send
ToMqttDefinition ---
syn boolean EndpointDefinition.is
Send
ToMqttDefinition() = false;
eq
Send
ToMqttDefinition.is
Send
ToMqttDefinition() = true;
// --- as
Write
ToMqttDefinition ---
syn
Write
ToMqttDefinition EndpointDefinition.as
Write
ToMqttDefinition() = null;
eq
Write
ToMqttDefinition.as
Write
ToMqttDefinition() = this;
// --- as
Send
ToMqttDefinition ---
syn
Send
ToMqttDefinition EndpointDefinition.as
Send
ToMqttDefinition() = null;
eq
Send
ToMqttDefinition.as
Send
ToMqttDefinition() = this;
// --- asRe
ad
FromMqttDefinition ---
syn Re
ad
FromMqttDefinition EndpointDefinition.asRe
ad
FromMqttDefinition() = null;
eq Re
ad
FromMqttDefinition.asRe
ad
FromMqttDefinition() = this;
// --- asRe
ceive
FromMqttDefinition ---
syn Re
ceive
FromMqttDefinition EndpointDefinition.asRe
ceive
FromMqttDefinition() = null;
eq Re
ceive
FromMqttDefinition.asRe
ceive
FromMqttDefinition() = this;
// --- targetEndpointDefinition ---
syn
Write
ToMqttDefinition DependencyDefinition.targetEndpointDefinition() {
syn
Send
ToMqttDefinition DependencyDefinition.targetEndpointDefinition() {
// resolve definition in here, as we do not need resolveMethod in any other place (yet)
for (EndpointDefinition endpointDefinition : ragconnect().getEndpointDefinitionList()) {
if (endpointDefinition.is
Write
ToMqttDefinition() &&
endpointDefinition.as
Write
ToMqttDefinition().getToken().equals(this.getTarget())) {
return endpointDefinition.as
Write
ToMqttDefinition();
if (endpointDefinition.is
Send
ToMqttDefinition() &&
endpointDefinition.as
Send
ToMqttDefinition().getToken().equals(this.getTarget())) {
return endpointDefinition.as
Send
ToMqttDefinition();
}
}
return null;
...
...
src/main/jastadd/RagConnect.relast
View file @
368abea3
...
...
@@ -7,8 +7,8 @@ rel EndpointDefinition.Mapping* -> MappingDefinition;
abstract TokenEndpointDefinition : EndpointDefinition;
rel TokenEndpointDefinition.Token -> TokenComponent;
Re
ad
FromMqttDefinition : TokenEndpointDefinition;
Write
ToMqttDefinition : TokenEndpointDefinition;
Re
ceive
FromMqttDefinition : TokenEndpointDefinition;
Send
ToMqttDefinition : TokenEndpointDefinition;
DependencyDefinition ::= <ID>;
rel DependencyDefinition.Source <-> TokenComponent.DependencySourceDefinition*;
...
...
src/main/jastadd/backend/Generation.jadd
View file @
368abea3
...
...
@@ -79,23 +79,23 @@ aspect AttributesForMustache {
syn String MInnerMappingDefinition.methodName() = getMappingDefinition().methodName();
inh String MInnerMappingDefinition.inputVarName();
// --- MRe
ad
Definition ---
eq MRe
ad
Definition.preemptiveExpectedValue() = "get" + tokenName() + "()";
eq MRe
ad
Definition.preemptiveReturn() = "return;";
eq MRe
ad
Definition.endpointDef() = getRe
ad
FromMqttDefinition();
eq MRe
ad
Definition.firstInputVarName() = "message";
// --- MRe
ceive
Definition ---
eq MRe
ceive
Definition.preemptiveExpectedValue() = "get" + tokenName() + "()";
eq MRe
ceive
Definition.preemptiveReturn() = "return;";
eq MRe
ceive
Definition.endpointDef() = getRe
ceive
FromMqttDefinition();
eq MRe
ceive
Definition.firstInputVarName() = "message";
// --- M
Write
Definition ---
eq M
Write
Definition.preemptiveExpectedValue() = lastValue();
eq M
Write
Definition.preemptiveReturn() = "return false;";
eq M
Write
Definition.endpointDef() = get
Write
ToMqttDefinition();
eq M
Write
Definition.firstInputVarName() = "get" + tokenName() + "()";
// --- M
Send
Definition ---
eq M
Send
Definition.preemptiveExpectedValue() = lastValue();
eq M
Send
Definition.preemptiveReturn() = "return false;";
eq M
Send
Definition.endpointDef() = get
Send
ToMqttDefinition();
eq M
Send
Definition.firstInputVarName() = "get" + tokenName() + "()";
syn String M
Write
Definition.
write
Topic() = get
Write
ToMqttDefinition().
write
Topic();
syn String M
Write
Definition.lastValue() = get
Write
ToMqttDefinition().lastValue();
syn String M
Write
Definition.updateMethod() = get
Write
ToMqttDefinition().updateMethod();
syn String M
Write
Definition.writeMethod() = get
Write
ToMqttDefinition().writeMethod();
syn String M
Write
Definition.tokenResetMethod() = get
Write
ToMqttDefinition().tokenResetMethod();
syn String M
Send
Definition.
send
Topic() = get
Send
ToMqttDefinition().
send
Topic();
syn String M
Send
Definition.lastValue() = get
Send
ToMqttDefinition().lastValue();
syn String M
Send
Definition.updateMethod() = get
Send
ToMqttDefinition().updateMethod();
syn String M
Send
Definition.writeMethod() = get
Send
ToMqttDefinition().writeMethod();
syn String M
Send
Definition.tokenResetMethod() = get
Send
ToMqttDefinition().tokenResetMethod();
// --- MMappingDefinition ---
syn String MMappingDefinition.toType() = getMappingDefinition().getToType().prettyPrint();
...
...
@@ -130,10 +130,10 @@ aspect AttributesForMustache {
MRagConnect result = new MRagConnect();
result.setRagConnect(this);
for (EndpointDefinition def : getEndpointDefinitionList()) {
if (def.is
Write
ToMqttDefinition()) {
result.add
Write
Definition(def.as
Write
ToMqttDefinition().toMustache());
if (def.is
Send
ToMqttDefinition()) {
result.add
Send
Definition(def.as
Send
ToMqttDefinition().toMustache());
} else {
result.addRe
ad
Definition(def.asRe
ad
FromMqttDefinition().toMustache());
result.addRe
ceive
Definition(def.asRe
ceive
FromMqttDefinition().toMustache());
}
}
for (MappingDefinition def : allMappingDefinitions()) {
...
...
@@ -163,15 +163,15 @@ aspect AttributesForMustache {
addInnerMappingDefinition(inner);
}
}
syn lazy MRe
ad
Definition Re
ad
FromMqttDefinition.toMustache() {
MRe
ad
Definition result = new MRe
ad
Definition();
result.setRe
ad
FromMqttDefinition(this);
syn lazy MRe
ceive
Definition Re
ceive
FromMqttDefinition.toMustache() {
MRe
ceive
Definition result = new MRe
ceive
Definition();
result.setRe
ceive
FromMqttDefinition(this);
result.addInnerMappings();
return result;
}
syn lazy M
Write
Definition
Write
ToMqttDefinition.toMustache() {
M
Write
Definition result = new M
Write
Definition();
result.set
Write
ToMqttDefinition(this);
syn lazy M
Send
Definition
Send
ToMqttDefinition.toMustache() {
M
Send
Definition result = new M
Send
Definition();
result.set
Send
ToMqttDefinition(this);
result.addInnerMappings();
return result;
}
...
...
@@ -206,11 +206,11 @@ aspect AspectGeneration {
syn String TokenComponent.externalName() = getName();
syn String TokenEndpointDefinition.connectMethod() = "connect" + getToken().getName();
syn String
Write
ToMqttDefinition.
write
Topic() = "_topic_" + getToken().getName();
syn String
Write
ToMqttDefinition.lastValue() = "_lastValue" + getToken().getName();
syn String
Write
ToMqttDefinition.updateMethod() = "_update_" + getToken().getName();
syn String
Write
ToMqttDefinition.writeMethod() = "_writeLastValue_" + getToken().getName();
syn String
Write
ToMqttDefinition.tokenResetMethod() = "get" + getToken().getName() + "_reset";
syn String
Send
ToMqttDefinition.
send
Topic() = "_topic_" + getToken().getName();
syn String
Send
ToMqttDefinition.lastValue() = "_lastValue" + getToken().getName();
syn String
Send
ToMqttDefinition.updateMethod() = "_update_" + getToken().getName();
syn String
Send
ToMqttDefinition.writeMethod() = "_writeLastValue_" + getToken().getName();
syn String
Send
ToMqttDefinition.tokenResetMethod() = "get" + getToken().getName() + "_reset";
syn String MappingDefinition.methodName() = "_apply_" + getID();
syn String DependencyDefinition.dependencyMethod() = "add" +
Character.toUpperCase(getID().charAt(0)) +
...
...
src/main/jastadd/backend/Mappings.jrag
View file @
368abea3
...
...
@@ -106,7 +106,7 @@ aspect DefaultMappings {
aspect Mappings {
// --- effectiveMappings ---
syn java.util.List<MappingDefinition> EndpointDefinition.effectiveMappings();
eq Re
ad
FromMqttDefinition.effectiveMappings() {
eq Re
ceive
FromMqttDefinition.effectiveMappings() {
// if there is a first mapping, check if its input type is byte[].
// or if no mappings are specified.
// then prepend the suitable default mapping
...
...
@@ -120,7 +120,7 @@ aspect Mappings {
}
return result;
}
eq
Write
ToMqttDefinition.effectiveMappings() {
eq
Send
ToMqttDefinition.effectiveMappings() {
// if there is a mapping, check if the output type of the last mapping is byte[].
// or if no mappings are specified.
// then append the suitable default mapping
...
...
@@ -160,7 +160,7 @@ aspect Mappings {
// --- suitableDefaultMapping ---
syn DefaultMappingDefinition EndpointDefinition.suitableDefaultMapping();
eq Re
ad
FromMqttDefinition.suitableDefaultMapping() {
eq Re
ceive
FromMqttDefinition.suitableDefaultMapping() {
String typeName = getMappingList().isEmpty() ?
getToken().getJavaTypeUse().getName() :
getMappingList().get(0).getFromType().prettyPrint();
...
...
@@ -181,7 +181,7 @@ aspect Mappings {
default: return null;
}
}
eq
Write
ToMqttDefinition.suitableDefaultMapping() {
eq
Send
ToMqttDefinition.suitableDefaultMapping() {
String typeName = getMappingList().isEmpty() ?
getToken().getJavaTypeUse().getName() :
getMappingList().get(getMappingList().size() - 1).getFromType().prettyPrint();
...
...
src/main/jastadd/parser/RagConnect.parser
View file @
368abea3
...
...
@@ -13,30 +13,30 @@ RagConnect ragconnect
:} ;
EndpointDefinition endpoint_definition
= RE
AD
ID.type_name DOT ID.token_name SCOL
= RE
CEIVE
ID.type_name DOT ID.token_name SCOL
{:
Re
ad
FromMqttDefinition result = new Re
ad
FromMqttDefinition();
Re
ceive
FromMqttDefinition result = new Re
ceive
FromMqttDefinition();
result.setToken(TokenComponent.createRef(type_name + "." + token_name));
return result;
:}
| RE
AD
ID.type_name DOT ID.token_name USING string_list.mapping_defs SCOL
| RE
CEIVE
ID.type_name DOT ID.token_name USING string_list.mapping_defs SCOL
{:
Re
ad
FromMqttDefinition result = new Re
ad
FromMqttDefinition();
Re
ceive
FromMqttDefinition result = new Re
ceive
FromMqttDefinition();
result.setToken(TokenComponent.createRef(type_name + "." + token_name));
for (String mapping_def : makeMappingDefs(mapping_defs)) {
result.addMapping(MappingDefinition.createRef(mapping_def));
}
return result;
:}
|
WRITE
ID.type_name DOT ID.token_name SCOL
|
SEND
ID.type_name DOT ID.token_name SCOL
{:
Write
ToMqttDefinition result = new
Write
ToMqttDefinition();
Send
ToMqttDefinition result = new
Send
ToMqttDefinition();
result.setToken(TokenComponent.createRef(type_name + "." + token_name));
return result;
:}
|
WRITE
ID.type_name DOT ID.token_name USING string_list.mapping_defs SCOL
|
SEND
ID.type_name DOT ID.token_name USING string_list.mapping_defs SCOL
{:
Write
ToMqttDefinition result = new
Write
ToMqttDefinition();
Send
ToMqttDefinition result = new
Send
ToMqttDefinition();
result.setToken(TokenComponent.createRef(type_name + "." + token_name));
for (String mapping_def : makeMappingDefs(mapping_defs)) {
result.addMapping(MappingDefinition.createRef(mapping_def));
...
...
src/main/jastadd/scanner/Keywords.flex
View file @
368abea3
"re
ad"
{ yybegin(DECLARATION); return sym(Terminals.RE
AD
); }
"
write"
{ yybegin(DECLARATION); return sym(Terminals.
WRITE
); }
"re
ceive"
{ yybegin(DECLARATION); return sym(Terminals.RE
CEIVE
); }
"
send"
{ yybegin(DECLARATION); return sym(Terminals.
SEND
); }
"using" { return sym(Terminals.USING); }
"canDependOn" { return sym(Terminals.CAN_DEPEND_ON); }
"maps" { return sym(Terminals.MAPS); }
...
...
src/main/java/org/jastadd/ragconnect/compiler/Compiler.java
View file @
368abea3
...
...
@@ -77,9 +77,9 @@ public class Compiler extends AbstractCompiler {
}
for
(
GrammarFile
grammarFile
:
ragConnect
.
getProgram
().
getGrammarFileList
())
{
Path
outputFile
=
getConfiguration
().
outputDir
().
toPath
().
resolve
(
grammarFile
.
getFileName
());
write
ToFile
(
outputFile
,
grammarFile
.
generateAbstractGrammar
());
send
ToFile
(
outputFile
,
grammarFile
.
generateAbstractGrammar
());
}
write
ToFile
(
getConfiguration
().
outputDir
().
toPath
().
resolve
(
"RagConnect.jadd"
),
ragConnect
.
generateAspect
(
optionRootNode
.
value
()));
send
ToFile
(
getConfiguration
().
outputDir
().
toPath
().
resolve
(
"RagConnect.jadd"
),
ragConnect
.
generateAspect
(
optionRootNode
.
value
()));
return
0
;
}
...
...
@@ -118,7 +118,7 @@ public class Compiler extends AbstractCompiler {
System
.
out
.
println
(
message
);
}
private
void
write
ToFile
(
Path
path
,
String
str
)
throws
CompilerException
{
private
void
send
ToFile
(
Path
path
,
String
str
)
throws
CompilerException
{
try
(
BufferedWriter
writer
=
Files
.
newBufferedWriter
(
path
))
{
writer
.
append
(
str
);
}
catch
(
Exception
e
)
{
...
...
src/main/java/org/jastadd/ragconnect/compiler/SimpleMain.java
View file @
368abea3
...
...
@@ -123,11 +123,11 @@ public class SimpleMain {
" ;"
);
model
.
addMappingDefinition
(
mappingDefinition
);
Re
ad
FromMqttDefinition
re
ad
FromMqttDefinition
=
new
Re
ad
FromMqttDefinition
();
re
ad
FromMqttDefinition
.
setAlwaysApply
(
false
);
re
ad
FromMqttDefinition
.
setToken
(
TokenComponent
.
createRef
(
"Link.CurrentPosition"
));
re
ad
FromMqttDefinition
.
addMapping
(
mappingDefinition
);
model
.
addEndpointDefinition
(
re
ad
FromMqttDefinition
);
Re
ceive
FromMqttDefinition
re
ceive
FromMqttDefinition
=
new
Re
ceive
FromMqttDefinition
();
re
ceive
FromMqttDefinition
.
setAlwaysApply
(
false
);
re
ceive
FromMqttDefinition
.
setToken
(
TokenComponent
.
createRef
(
"Link.CurrentPosition"
));
re
ceive
FromMqttDefinition
.
addMapping
(
mappingDefinition
);
model
.
addEndpointDefinition
(
re
ceive
FromMqttDefinition
);
model
.
treeResolveAll
();
for
(
ErrorMessage
error
:
model
.
errors
())
{
...
...
src/main/resources/ragconnect.mustache
View file @
368abea3
{{>
mqtt
}}
aspect ROS2RAG {
{{#
Re
ad
Definitions
}}
{{>
re
ad
Definition
}}
{{/
Re
ad
Definitions
}}
{{#
Re
ceive
Definitions
}}
{{>
re
ceive
Definition
}}
{{/
Re
ceive
Definitions
}}
{{#
Write
Definitions
}}
{{>
write
Definition
}}
{{/
Write
Definitions
}}
{{#
Send
Definitions
}}
{{>
send
Definition
}}
{{/
Send
Definitions
}}
{{#
MappingDefinitions
}}
{{>
mappingDefinition
}}
...
...
src/main/resources/re
ad
Definition.mustache
→
src/main/resources/re
ceive
Definition.mustache
View file @
368abea3
...
...
@@ -2,7 +2,7 @@
{{
mqttHandlerAttribute
}}
().newConnection(topic, message -> {
{{>
mappingApplication
}}
{{#
loggingEnabledForReads
}}
System.out.println("[Re
ad
] " + topic + " ->
{{
tokenName
}}
= " +
{{
lastResult
}}
);
{{!lastResult has to be a new attribute}}
System.out.println("[Re
ceive
] " + topic + " ->
{{
tokenName
}}
= " +
{{
lastResult
}}
);
{{!lastResult has to be a new attribute}}
{{/
loggingEnabledForReads
}}
set
{{
tokenName
}}
(
{{
lastResult
}}
);
});
...
...
src/main/resources/
write
Definition.mustache
→
src/main/resources/
send
Definition.mustache
View file @
368abea3
private String
{{
parentTypeName
}}
.
{{
write
Topic
}}
= null;
private String
{{
parentTypeName
}}
.
{{
send
Topic
}}
= null;
private byte[]
{{
parentTypeName
}}
.
{{
lastValue
}}
= null;
public void
{{
parentTypeName
}}
.
{{
connectMethod
}}
(String topic, boolean writeCurrentValue) {
{{
write
Topic
}}
= topic;
{{
send
Topic
}}
= topic;
{{
updateMethod
}}
();
if (writeCurrentValue) {
{{
writeMethod
}}
();
...
...
@@ -18,7 +18,7 @@
protected void
{{
parentTypeName
}}
.
{{
writeMethod
}}
() {
{{#
loggingEnabledForWrites
}}
System.out.println("[
Write
]
{{
tokenName
}}
= " + get
{{
tokenName
}}
() + " -> " +
{{
write
Topic
}}
);
System.out.println("[
Send
]
{{
tokenName
}}
= " + get
{{
tokenName
}}
() + " -> " +
{{
send
Topic
}}
);
{{/
loggingEnabledForWrites
}}
{{
mqttHandlerAttribute
}}
().publish(
{{
write
Topic
}}
,
{{
lastValue
}}
);
{{
mqttHandlerAttribute
}}
().publish(
{{
send
Topic
}}
,
{{
lastValue
}}
);
}
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment