diff --git a/ragconnect.base/src/main/jastadd/intermediate2mustache/MustacheNodesToYAML.jrag b/ragconnect.base/src/main/jastadd/intermediate2mustache/MustacheNodesToYAML.jrag index 9b85aecf2391780d05cbd8dab2b2c162678f171a..07a27c56d3f5ae8ba98d09108c6a43dbb6ffbab4 100644 --- a/ragconnect.base/src/main/jastadd/intermediate2mustache/MustacheNodesToYAML.jrag +++ b/ragconnect.base/src/main/jastadd/intermediate2mustache/MustacheNodesToYAML.jrag @@ -1,212 +1,184 @@ -// aspect MustacheNodesToYAML { -// syn Document MRagConnect.toYAML() { -// Document doc = new Document(); -// MappingElement root = new MappingElement(); -// root.put("rootNodeName", rootNodeName()); -// root.put("closeMethod", closeMethod()); -// root.put("usesMqtt", usesMqtt); -// root.put("usesRest", usesRest); -// // mqtt -// root.put("mqttHandlerField", mqttHandlerField()); -// root.put("mqttHandlerAttribute", mqttHandlerAttribute()); -// root.put("mqttSetupWaitUntilReadyMethod", mqttSetupWaitUntilReadyMethod()); -// -// // rootTypeComponents -// ListElement rootTypeComponents = new ListElement(); -// for (MTypeComponent comp : getRootTypeComponentList()) { -// MappingElement inner = new MappingElement(); -// inner.put("first", comp.isFirst()); -// inner.put("name", comp.name()); -// rootTypeComponents.addElement(inner); -// } -// root.put("RootTypeComponents", rootTypeComponents); -// -// // rest -// root.put("restHandlerField", restHandlerField()); -// root.put("restHandlerAttribute", restHandlerAttribute()); -// -// // TokenReceiveDefinitions -// ListElement receiveDefinitions = new ListElement(); -// for (MTokenReceiveDefinition def : getTokenReceiveDefinitionList()) { -// receiveDefinitions.addElement(def.toYAML()); -// } -// root.put("TokenReceiveDefinitions", receiveDefinitions); -// -// // TokenSendDefinitions -// ListElement sendDefinitions = new ListElement(); -// for (MTokenSendDefinition def : getTokenSendDefinitionList()) { -// sendDefinitions.addElement(def.toYAML()); -// } -// root.put("TokenSendDefinitions", sendDefinitions); -// -// // TypeReceiveDefinitions -// ListElement typeReceiveDefinitions = new ListElement(); -// for (MTypeReceiveDefinition def : getTypeReceiveDefinitionList()) { -// typeReceiveDefinitions.addElement(def.toYAML()); -// } -// root.put("TypeReceiveDefinitions", typeReceiveDefinitions); -// -// // TypeSendDefinitions -// ListElement typeSendDefinitions = new ListElement(); -// for (MTypeSendDefinition def : getTypeSendDefinitionList()) { -// typeSendDefinitions.addElement(def.toYAML()); -// } -// root.put("TypeSendDefinitions", typeSendDefinitions); -// -// // MappingDefinitions -// ListElement mappingDefinitions = new ListElement(); -// for (MMappingDefinition def : getMappingDefinitionList()) { -// mappingDefinitions.addElement(def.toYAML()); -// } -// root.put("MappingDefinitions", mappingDefinitions); -// -// // DependencyDefinitions -// ListElement dependencyDefinitions = new ListElement(); -// for (MDependencyDefinition def : getDependencyDefinitionList()) { -// dependencyDefinitions.addElement(def.toYAML()); -// } -// root.put("DependencyDefinitions", dependencyDefinitions); -// -// // TokenComponents -// ListElement tokenComponents = new ListElement(); -// for (MTokenComponent comp : getTokenComponentList()) { -// tokenComponents.addElement(comp.toYAML()); -// } -// root.put("TokenComponents", tokenComponents); -// -// // Handlers -// ListElement handlers = new ListElement(); -// for (MHandler handler : getHandlerList()) { -// handlers.add(handler.toYAML() -// .put("rootTokenComponents", rootTypeComponents.treeCopy()) ); -// } -// root.put("Handlers", handlers); -// -// doc.setRootElement(root); -// return doc; -// } -// -// syn MappingElement MEndpointDefinition.toYAML() { -// MappingElement result = new MappingElement(); -// result.put("parentTypeName", parentTypeName()); -// result.put("connectMethod", connectMethod()); -// result.put("connectParameterName", connectParameterName()); -// result.put("lastDefinitionToType", lastDefinitionToType()); -// result.put("preemptiveReturn", preemptiveReturn()); -// result.put("alwaysApply", alwaysApply()); -// result.put("condition", -// condition().replace("\"", "\\\"").replace("\n", "\\n")); -// result.put("lastResult", lastResult()); -// result.put("tokenName", tokenName()); -// result.put("InnerMappingDefinitions", innerMappingDefinitionsAsListElement()); -// return result; -// } -// -// syn MappingElement MTokenReceiveDefinition.toYAML() { -// MappingElement result = super.toYAML(); -// result.put("loggingEnabledForReads", loggingEnabledForReads); -// return result; -// } -// -// syn MappingElement MTokenSendDefinition.toYAML() { -// MappingElement result = super.toYAML(); -// result.put("sender", sender()); -// result.put("lastValue", lastValue()); -// result.put("loggingEnabledForWrites", loggingEnabledForWrites); -// result.put("updateMethod", updateMethod()); -// result.put("writeMethod", writeMethod()); -// result.put("tokenResetMethod", tokenResetMethod()); -// return result; -// } -// -// syn MappingElement MTypeReceiveDefinition.toYAML() { -// MappingElement result = super.toYAML(); -// result.put("typeIsList", typeIsList()); -// result.put("loggingEnabledForReads", loggingEnabledForReads); -// return result; -// } -// -// syn MappingElement MTypeSendDefinition.toYAML() { -// MappingElement result = super.toYAML(); -// result.put("typeIsList", typeIsList()); -// result.put("sender", sender()); -// result.put("lastValue", lastValue()); -// result.put("loggingEnabledForWrites", loggingEnabledForWrites); -// result.put("updateMethod", updateMethod()); -// result.put("writeMethod", writeMethod()); -// result.put("tokenResetMethod", tokenResetMethod()); -// return result; -// } -// -// syn Element MMappingDefinition.toYAML() { -// MappingElement result = new MappingElement(); -// result.put("toType", toType()); -// result.put("methodName", methodName()); -// result.put("fromType", fromType()); -// result.put("fromVariableName", fromVariableName()); -// result.put("content", -// content().replace("\"", "\\\"").replace("\n", "\\n")); -// return result; -// } -// -// syn Element MDependencyDefinition.toYAML() { -// MappingElement result = new MappingElement(); -// result.put("targetParentTypeName", targetParentTypeName()); -// result.put("dependencyMethod", dependencyMethod()); -// result.put("sourceParentTypeName", sourceParentTypeName()); -// result.put("internalRelationPrefix", internalRelationPrefix()); -// return result; -// } -// -// syn Element MTokenComponent.toYAML() { -// MappingElement result = new MappingElement(); -// result.put("parentTypeName", parentTypeName()); -// result.put("name", name()); -// result.put("javaType", javaType()); -// result.put("internalName", internalName()); -// ListElement dependencyDefinitions = new ListElement(); -// for (MDependencyDefinition def : getDependencyDefinitionList()) { -// MappingElement inner = new MappingElement(); -// inner.put("targetParentTypeName", def.targetParentTypeName()); -// inner.put("internalRelationPrefix", def.internalRelationPrefix()); -// MappingElement targetEndpointDefinition = new MappingElement(); -// targetEndpointDefinition.put("updateMethod", def.targetEndpointDefinition().updateMethod()); -// targetEndpointDefinition.put("writeMethod", def.targetEndpointDefinition().writeMethod()); -// inner.put("targetEndpointDefinition", targetEndpointDefinition); -// dependencyDefinitions.addElement(inner); -// } -// result.put("DependencyDefinitions", dependencyDefinitions); -// return result; -// } -// -// ListElement MEndpointDefinition.innerMappingDefinitionsAsListElement() { -// ListElement innerMappingDefinitions = new ListElement(); -// for (MInnerMappingDefinition def : getInnerMappingDefinitionList()) { -// MappingElement inner = new MappingElement(); -// inner.put("toType", def.toType()); -// inner.put("methodName", def.methodName()); -// inner.put("inputVarName", def.inputVarName()); -// inner.put("outputVarName", def.outputVarName()); -// inner.put("last", def.isLast()); -// innerMappingDefinitions.addElement(inner); -// } -// return innerMappingDefinitions; -// } -// -// syn MappingElement MHandler.toYAML() { -// MappingElement result = new MappingElement(); -// result.put("ClassName", getClassName()); -// result.put("Construction", getConstruction()); -// result.put("AttributeName", getAttributeName()); -// result.put("FieldName", getFieldName()); -// result.put("InUse", getInUse()); -// return result; -// } -// } -// -// aspect Navigation { -// eq Document.getChild().program() = null; -// eq Document.getChild().ragconnect() = null; -// eq Document.getChild().containedFile() = null; -// eq Document.containedFileName() = getFileName(); -// } + aspect MustacheNodesToYAML { + syn Document RagConnect.toYAML() { + Document doc = new Document(); + MappingElement root = new MappingElement(); + root.put("rootNodeName", rootNodeName()); + root.put("closeMethodName", closeMethodName()); + root.put("loggingEnabledForReads", loggingEnabledForReads()); + root.put("loggingEnabledForWrites", loggingEnabledForWrites()); + + // rootTypeComponents + ListElement rootTypeComponents = new ListElement(); + for (TypeComponent comp : rootTypeComponents()) { + MappingElement inner = new MappingElement(); + rootTypeComponents.addElement(inner); + } + root.put("RootTypeComponents", rootTypeComponents); + + // allEndpointDefinitionList + ListElement endpointDefinitions = new ListElement(); + for (EndpointDefinition def : allEndpointDefinitionList()) { + endpointDefinitions.addElement(def.toYAML()); + } + root.put("allEndpointDefinitionList", endpointDefinitions); + + // allMappingDefinitions + ListElement mappingDefinitions = new ListElement(); + for (MappingDefinition def : allMappingDefinitions()) { + mappingDefinitions.addElement(def.toYAML()); + } + root.put("allMappingDefinitions", mappingDefinitions); + + // allDependencyDefinitionList + ListElement dependencyDefinitions = new ListElement(); + for (DependencyDefinition def : allDependencyDefinitionList()) { + dependencyDefinitions.addElement(def.toYAML()); + } + root.put("allDependencyDefinitionList", dependencyDefinitions); + + // tokenComponentsThatNeedProxy + ListElement tokenComponents = new ListElement(); + for (TokenComponent comp : tokenComponentsThatNeedProxy()) { + tokenComponents.addElement(comp.toYAML()); + } + root.put("tokenComponentsThatNeedProxy", tokenComponents); + + // Handlers + ListElement handlers = new ListElement(); + for (Handler handler : getHandlerList()) { + handlers.add(handler.toYAML() +// .put("rootTypeComponents", rootTypeComponents.treeCopy()) +// .put("hasRootTypeComponents", hasRootTypeComponents()) + ); + } + root.put("Handlers", handlers); + root.put("mqttHandler", mqttHandler().toYAML()); + root.put("restHandler", restHandler().toYAML()); + + doc.setRootElement(root); + return doc; + } + + syn MappingElement EndpointDefinition.toYAML() { + MappingElement result = new MappingElement(); + result.put("AlwaysApply", getAlwaysApply()); + result.put("IndexBasedListAccess", getIndexBasedListAccess()); + result.put("WithAdd", getWithAdd()); + result.put("Send", getSend()); + result.put("preemptiveExpectedValue", preemptiveExpectedValue()); + result.put("preemptiveReturn", preemptiveReturn()); + result.put("firstInputVarName", firstInputVarName()); + result.put("updateMethodName", updateMethodName()); + result.put("writeMethodName", writeMethodName()); + result.put("parentTypeName", parentTypeName()); + result.put("entityName", entityName()); + result.put("getterMethodName", getterMethodName()); + result.put("uniqueSuffix", uniqueSuffix()); + result.put("connectParameterName", connectParameterName()); + result.put("connectMethodName", connectMethodName()); + result.put("internalConnectMethodName", internalConnectMethodName()); + result.put("disconnectMethodName", disconnectMethodName()); + result.put("typeDeclName", typeDeclName()); + result.put("lastDefinition", lastDefinition().getMappingDefinition().toYAML().treeCopy()); + result.put("lastDefinitionToType", lastDefinitionToType()); + result.put("lastResult", lastResult()); + result.put("condition", sanitizeValueForYAML(condition())); + result.put("senderName", senderName()); + result.put("lastValue", lastValue()); + result.put("tokenResetMethodName", tokenResetMethodName()); + result.put("resolveInListMethodName", resolveInListMethodName()); + result.put("idTokenName", idTokenName()); + result.put("InnerMappingDefinitions", innerMappingDefinitionsAsListElement()); + getEndpointTarget().addToYAML(result); + return result; + } + + abstract void EndpointTarget.addToYAML(MappingElement result); + + void TokenEndpointTarget.addToYAML(MappingElement result) { + result.put("tokenName", containingEndpointDefinition().tokenName()); + } + + void TypeEndpointTarget.addToYAML(MappingElement result) { + result.put("typeName", containingEndpointDefinition().typeName()); + result.put("typeIsList", typeIsList()); + } + + void UntypedEndpointTarget.addToYAML(MappingElement result) { + } + + syn Element MappingDefinition.toYAML() { + MappingElement result = new MappingElement(); + result.put("toType", toType()); + result.put("methodName", methodName()); + result.put("fromType", fromType()); + result.put("fromVariableName", getFromVariableName()); + result.put("content", sanitizeValueForYAML(getContent())); + return result; + } + + syn Element DependencyDefinition.toYAML() { + MappingElement result = new MappingElement(); + result.put("targetParentTypeName", targetParentTypeName()); + result.put("dependencyMethodName", dependencyMethodName()); + result.put("sourceParentTypeName", sourceParentTypeName()); + result.put("internalRelationPrefix", internalRelationPrefix()); + return result; + } + + syn Element TokenComponent.toYAML() { + MappingElement result = new MappingElement(); + result.put("parentTypeName", parentTypeName()); + result.put("name", getName()); + result.put("javaType", javaType()); + result.put("internalName", internalName()); + ListElement dependencyDefinitions = new ListElement(); + for (DependencyDefinition def : getDependencySourceDefinitionList()) { + MappingElement inner = new MappingElement(); + inner.put("targetParentTypeName", def.targetParentTypeName()); + inner.put("internalRelationPrefix", def.internalRelationPrefix()); + MappingElement targetEndpointDefinition = new MappingElement(); + targetEndpointDefinition.put("updateMethodName", def.targetEndpointDefinition().updateMethodName()); + targetEndpointDefinition.put("writeMethodName", def.targetEndpointDefinition().writeMethodName()); + inner.put("targetEndpointDefinition", targetEndpointDefinition); + dependencyDefinitions.addElement(inner); + } + result.put("DependencyDefinitions", dependencyDefinitions); + return result; + } + + ListElement EndpointDefinition.innerMappingDefinitionsAsListElement() { + ListElement innerMappingDefinitions = new ListElement(); + for (MInnerMappingDefinition def : innerMappingDefinitions()) { + MappingElement inner = new MappingElement(); + inner.put("toType", def.toType()); + inner.put("methodName", def.methodName()); + inner.put("inputVarName", def.inputVarName()); + inner.put("outputVarName", def.outputVarName()); + inner.put("last", def.isLast()); + innerMappingDefinitions.addElement(inner); + } + return innerMappingDefinitions; + } + + syn MappingElement Handler.toYAML() { + MappingElement result = new MappingElement(); + result.put("ClassName", getClassName()); + result.put("ConstructionSnippet", ConstructionSnippet()); + result.put("AttributeName", AttributeName()); + result.put("FieldName", FieldName()); + result.put("InUse", getInUse()); + return result; + } + + protected String ASTNode.sanitizeValueForYAML(String value) { + return value.replace("\"", "\\\"").replace("\n", "\\n"); + } + } + + aspect Navigation { + eq Document.getChild().program() = null; + eq Document.getChild().ragconnect() = null; + eq Document.getChild().containedFile() = null; + eq Document.containedFileName() = getFileName(); + } diff --git a/ragconnect.base/src/main/java/org/jastadd/ragconnect/compiler/Compiler.java b/ragconnect.base/src/main/java/org/jastadd/ragconnect/compiler/Compiler.java index abddccd92e23e42b5cdc3a332ecd88efad772341..40b76bf58b58d4b4c87cad74b7f9719a6c5f7672 100644 --- a/ragconnect.base/src/main/java/org/jastadd/ragconnect/compiler/Compiler.java +++ b/ragconnect.base/src/main/java/org/jastadd/ragconnect/compiler/Compiler.java @@ -80,8 +80,10 @@ public class Compiler extends AbstractCompiler { } if (optionPrintYaml.value()) { - System.err.println("'--printYaml' currently unsupported option!"); - return 1; + String yamlContent = ragConnect.toYAML().prettyPrint(); + System.out.println(yamlContent); + writeToFile(getConfiguration().outputDir().toPath().resolve("RagConnect.yml"), yamlContent); + return 0; } LOGGER.fine("Writing output files"); @@ -163,7 +165,7 @@ public class Compiler extends AbstractCompiler { .addAcceptedValue(OPTION_PROTOCOL_REST, "Enable REST") ); optionPrintYaml = addOption( - new BooleanOption("printYaml", "Print out YAML instead of generating files (currently unsupported)") + new BooleanOption("printYaml", "Print out YAML instead of generating files and exit.") .defaultValue(false)); optionVerbose = addOption( new BooleanOption("verbose", "Print more messages while compiling.")