Skip to content
Snippets Groups Projects

Resolve "Feature: Send enpoint for non-terminal using implicit NTA"

1 file
+ 62
66
Compare changes
  • Side-by-side
  • Inline
@@ -3,72 +3,6 @@ Design considerations
@@ -3,72 +3,6 @@ Design considerations
- InnerMappingDefinition needed for iteration attribute (first, last) - not possible with list-relation
- InnerMappingDefinition needed for iteration attribute (first, last) - not possible with list-relation
- no complete intermediate structure, but instead single nodes where applicable/needed
- 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 {
aspect SharedMustache {
// === RagConnect ===
// === RagConnect ===
syn boolean RagConnect.configIncrementalOptionActive() = getConfiguration().getIncrementalOptionActive();
syn boolean RagConnect.configIncrementalOptionActive() = getConfiguration().getIncrementalOptionActive();
@@ -83,6 +17,9 @@ aspect SharedMustache {
@@ -83,6 +17,9 @@ aspect SharedMustache {
syn String RagConnect.internalRagConnectPrefix() = "_ragconnect_";
syn String RagConnect.internalRagConnectPrefix() = "_ragconnect_";
 
syn String RagConnect.observerInstanceSingletonMethodName() = internalRagConnectPrefix() + "Observer";
 
syn String RagConnect.observerInstanceResetMethodName() = internalRagConnectPrefix() + "resetObserver";
 
syn String RagConnect.rootNodeName() = getConfiguration().getRootNode().getName();
syn String RagConnect.rootNodeName() = getConfiguration().getRootNode().getName();
// === EndpointDefinition ===
// === EndpointDefinition ===
@@ -286,8 +223,26 @@ aspect MustacheRagConnect {
@@ -286,8 +223,26 @@ aspect MustacheRagConnect {
return result;
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
// > 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() {
syn List<TokenComponent> RagConnect.tokenComponentsThatNeedProxy() {
List<TokenComponent> result = new ArrayList<>();
List<TokenComponent> result = new ArrayList<>();
for (TokenComponent token : getProgram().allTokenComponents()) {
for (TokenComponent token : getProgram().allTokenComponents()) {
@@ -298,6 +253,8 @@ aspect MustacheRagConnect {
@@ -298,6 +253,8 @@ aspect MustacheRagConnect {
return result;
return result;
}
}
 
syn String RagConnect.touchedTerminalsMethodName() = internalRagConnectPrefix() + "touchedTerminals";
 
syn List<TypeDecl> RagConnect.typeDeclsOfContextFreeEndpointTargets() {
syn List<TypeDecl> RagConnect.typeDeclsOfContextFreeEndpointTargets() {
List<TypeDecl> result = new ArrayList<>();
List<TypeDecl> result = new ArrayList<>();
for (EndpointTarget target : givenEndpointTargetList()) {
for (EndpointTarget target : givenEndpointTargetList()) {
@@ -353,6 +310,15 @@ aspect MustacheRagConnect {
@@ -353,6 +310,15 @@ aspect MustacheRagConnect {
return result;
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 {
aspect MustacheReceiveAndSendAndHandleUri {
@@ -457,6 +423,10 @@ aspect MustacheSendDefinition {
@@ -457,6 +423,10 @@ aspect MustacheSendDefinition {
syn String EndpointDefinition.lastValueSetter() = senderName() + ".setLastValue";
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 String EndpointDefinition.senderName() = getEndpointTarget().senderName();
syn boolean EndpointDefinition.shouldSendValue() = getSend() && getEndpointTarget().entityIsNormalAttribute();
syn boolean EndpointDefinition.shouldSendValue() = getSend() && getEndpointTarget().entityIsNormalAttribute();
@@ -468,6 +438,24 @@ aspect MustacheSendDefinition {
@@ -468,6 +438,24 @@ aspect MustacheSendDefinition {
syn String EndpointDefinition.writeMethodName() = toMustache().writeMethodName();
syn String EndpointDefinition.writeMethodName() = toMustache().writeMethodName();
// === attributes needed for computing above ones ===
// === 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();
syn String EndpointTarget.senderName();
eq TokenEndpointTarget.senderName() = ragconnect().internalRagConnectPrefix() + "_sender_" + getToken().getName();
eq TokenEndpointTarget.senderName() = ragconnect().internalRagConnectPrefix() + "_sender_" + getToken().getName();
eq TypeEndpointTarget.senderName() = ragconnect().internalRagConnectPrefix() + "_sender_" + getType().getName();
eq TypeEndpointTarget.senderName() = ragconnect().internalRagConnectPrefix() + "_sender_" + getType().getName();
@@ -546,6 +534,14 @@ aspect MustacheTokenComponent {
@@ -546,6 +534,14 @@ aspect MustacheTokenComponent {
aspect MustacheTypeDecl {
aspect MustacheTypeDecl {
// === TypeComponent ===
// === TypeComponent ===
syn String TypeComponent.parentTypeName() = containingTypeDecl().getName();
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 ===
// === TypeDecl ===
syn List<TypeComponent> TypeDecl.occurencesInProductionRules() {
syn List<TypeComponent> TypeDecl.occurencesInProductionRules() {
Loading