Skip to content
Snippets Groups Projects
Commit 7ed4e252 authored by René Schöne's avatar René Schöne
Browse files

working on forwarding using implicit NTAs

- Categorize changes in Intermediate.jrag
parent 552abf7b
No related branches found
No related tags found
1 merge request!24Resolve "Feature: Send enpoint for non-terminal using implicit NTA"
......@@ -3,72 +3,6 @@ Design considerations
- InnerMappingDefinition needed for iteration attribute (first, last) - not possible with list-relation
- no complete intermediate structure, but instead single nodes where applicable/needed
*/
aspect NewStuff {
// unsorted
inh boolean EndpointDefinition.isImplied();
eq ConnectSpecification.getEndpointDefinition().isImplied() = false;
eq EndpointTarget.impliedEndpointDefinitions().isImplied() = true;
syn String TypeComponent.disconnectMethodName() {
List<TypeEndpointTarget> typeEndpointTargets = getTypeEndpointTargets();
if (typeEndpointTargets.isEmpty()) {
return "MISSING_ENDPOINT";
} else {
return typeEndpointTargets.get(0).containingEndpointDefinition().disconnectMethodName();
}
}
syn String RagConnect.observerInstanceFieldName() = internalRagConnectPrefix() + "ObserverInstance";
syn String RagConnect.observerInstanceSingletonMethodName() = internalRagConnectPrefix() + "Observer";
syn String RagConnect.observerInstanceResetMethodName() = internalRagConnectPrefix() + "resetObserver";
syn String RagConnect.touchedTerminalsMethodName() = internalRagConnectPrefix() + "touchedTerminals";
syn String TypeComponent.touchedTerminalsMethodName() = ragconnect().touchedTerminalsMethodName();
syn java.util.List<Component> TypeDecl.tokenComponents() {
return filteredComponents(Component::isTokenComponent);
}
syn java.util.List<Component> TypeDecl.normalComponents() {
return filteredComponents(comp -> comp.isTypeComponent() && !comp.isListComponent());
}
syn java.util.List<Component> TypeDecl.listComponents() {
return filteredComponents(Component::isListComponent);
}
private java.util.List<Component> TypeDecl.filteredComponents(java.util.function.Predicate<Component> filter) {
java.util.List<Component> result = new java.util.ArrayList<>();
for (Component comp : getComponentList()) {
if (filter.test(comp)) {
result.add(comp);
}
}
return result;
}
syn List<TypeDecl> RagConnect.allTypeDecls() {
return getProgram().typeDecls().stream()
.sorted(java.util.Comparator.comparing(TypeDecl::getName))
.collect(java.util.stream.Collectors.toList());
}
// send.mustache
syn boolean EndpointDefinition.needForwardingNTA() = getEndpointTarget().needForwardingNTA();
syn String EndpointDefinition.forwardingNTA_Name() = getEndpointTarget().forwardingNTA_Name();
syn String EndpointDefinition.forwardingNTA_Type() = getEndpointTarget().forwardingNTA_Type();
syn boolean EndpointTarget.needForwardingNTA() = false;
eq TypeEndpointTarget.needForwardingNTA() = containingEndpointDefinition().getSend() && !getType().getNTA();
syn String EndpointTarget.forwardingNTA_Name() = null;
eq TypeEndpointTarget.forwardingNTA_Name() = ragconnect().internalRagConnectPrefix() + getType().getName();
syn String EndpointTarget.forwardingNTA_Type() = null;
eq TypeEndpointTarget.forwardingNTA_Type() = getType().forwardingNTA_Type(
containingEndpointDefinition().getIndexBasedListAccess());
syn String TypeComponent.forwardingNTA_Type(boolean indexBasedListAccess);
eq NormalComponent.forwardingNTA_Type(boolean indexBasedListAccess) = getTypeDecl().getName();
eq OptComponent.forwardingNTA_Type(boolean indexBasedListAccess) =
ragconnect().configJastAddOpt() + "<" + getTypeDecl().getName() + ">";
eq ListComponent.forwardingNTA_Type(boolean indexBasedListAccess) = indexBasedListAccess ?
getTypeDecl().getName() :
ragconnect().configJastAddList() + "<" + getTypeDecl().getName() + ">";
}
aspect SharedMustache {
// === RagConnect ===
syn boolean RagConnect.configIncrementalOptionActive() = getConfiguration().getIncrementalOptionActive();
......@@ -83,6 +17,9 @@ aspect SharedMustache {
syn String RagConnect.internalRagConnectPrefix() = "_ragconnect_";
syn String RagConnect.observerInstanceSingletonMethodName() = internalRagConnectPrefix() + "Observer";
syn String RagConnect.observerInstanceResetMethodName() = internalRagConnectPrefix() + "resetObserver";
syn String RagConnect.rootNodeName() = getConfiguration().getRootNode().getName();
// === EndpointDefinition ===
......@@ -286,8 +223,26 @@ aspect MustacheRagConnect {
return result;
}
syn List<TypeDecl> RagConnect.allTypeDecls() {
return getProgram().typeDecls().stream()
.sorted(java.util.Comparator.comparing(TypeDecl::getName))
.collect(java.util.stream.Collectors.toList());
}
// > allMappingDefinitions in Mappings.jrag
syn String RagConnect.observerInstanceFieldName() = internalRagConnectPrefix() + "ObserverInstance";
syn java.util.List<Component> TypeDecl.tokenComponents() {
return filteredComponents(Component::isTokenComponent);
}
syn java.util.List<Component> TypeDecl.normalComponents() {
return filteredComponents(comp -> comp.isTypeComponent() && !comp.isListComponent());
}
syn java.util.List<Component> TypeDecl.listComponents() {
return filteredComponents(Component::isListComponent);
}
syn List<TokenComponent> RagConnect.tokenComponentsThatNeedProxy() {
List<TokenComponent> result = new ArrayList<>();
for (TokenComponent token : getProgram().allTokenComponents()) {
......@@ -298,6 +253,8 @@ aspect MustacheRagConnect {
return result;
}
syn String RagConnect.touchedTerminalsMethodName() = internalRagConnectPrefix() + "touchedTerminals";
syn List<TypeDecl> RagConnect.typeDeclsOfContextFreeEndpointTargets() {
List<TypeDecl> result = new ArrayList<>();
for (EndpointTarget target : givenEndpointTargetList()) {
......@@ -353,6 +310,15 @@ aspect MustacheRagConnect {
return result;
}
private java.util.List<Component> TypeDecl.filteredComponents(java.util.function.Predicate<Component> filter) {
java.util.List<Component> result = new java.util.ArrayList<>();
for (Component comp : getComponentList()) {
if (filter.test(comp)) {
result.add(comp);
}
}
return result;
}
}
aspect MustacheReceiveAndSendAndHandleUri {
......@@ -457,6 +423,10 @@ aspect MustacheSendDefinition {
syn String EndpointDefinition.lastValueSetter() = senderName() + ".setLastValue";
syn boolean EndpointDefinition.needForwardingNTA() = getEndpointTarget().needForwardingNTA();
syn String EndpointDefinition.forwardingNTA_Name() = getEndpointTarget().forwardingNTA_Name();
syn String EndpointDefinition.forwardingNTA_Type() = getEndpointTarget().forwardingNTA_Type();
syn String EndpointDefinition.senderName() = getEndpointTarget().senderName();
syn boolean EndpointDefinition.shouldSendValue() = getSend() && getEndpointTarget().entityIsNormalAttribute();
......@@ -468,6 +438,24 @@ aspect MustacheSendDefinition {
syn String EndpointDefinition.writeMethodName() = toMustache().writeMethodName();
// === attributes needed for computing above ones ===
syn boolean EndpointTarget.needForwardingNTA() = false;
eq TypeEndpointTarget.needForwardingNTA() = containingEndpointDefinition().getSend() && !getType().getNTA();
syn String EndpointTarget.forwardingNTA_Name() = null;
eq TypeEndpointTarget.forwardingNTA_Name() = ragconnect().internalRagConnectPrefix() + getType().getName();
syn String EndpointTarget.forwardingNTA_Type() = null;
eq TypeEndpointTarget.forwardingNTA_Type() = getType().forwardingNTA_Type(
containingEndpointDefinition().getIndexBasedListAccess());
syn String TypeComponent.forwardingNTA_Type(boolean indexBasedListAccess);
eq NormalComponent.forwardingNTA_Type(boolean indexBasedListAccess) = getTypeDecl().getName();
eq OptComponent.forwardingNTA_Type(boolean indexBasedListAccess) =
ragconnect().configJastAddOpt() + "<" + getTypeDecl().getName() + ">";
eq ListComponent.forwardingNTA_Type(boolean indexBasedListAccess) = indexBasedListAccess ?
getTypeDecl().getName() :
ragconnect().configJastAddList() + "<" + getTypeDecl().getName() + ">";
syn String EndpointTarget.senderName();
eq TokenEndpointTarget.senderName() = ragconnect().internalRagConnectPrefix() + "_sender_" + getToken().getName();
eq TypeEndpointTarget.senderName() = ragconnect().internalRagConnectPrefix() + "_sender_" + getType().getName();
......@@ -546,6 +534,14 @@ aspect MustacheTokenComponent {
aspect MustacheTypeDecl {
// === TypeComponent ===
syn String TypeComponent.parentTypeName() = containingTypeDecl().getName();
syn String TypeComponent.disconnectMethodName() {
List<TypeEndpointTarget> typeEndpointTargets = getTypeEndpointTargets();
if (typeEndpointTargets.isEmpty()) {
return "MISSING_ENDPOINT";
} else {
return typeEndpointTargets.get(0).containingEndpointDefinition().disconnectMethodName();
}
}
// === TypeDecl ===
syn List<TypeComponent> TypeDecl.occurencesInProductionRules() {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment