diff --git a/build.gradle b/build.gradle index 92d802db5928eaea018b2f654f0fc96023079209..44be1b36d9d7e77c5911551ad5368a567eaf3687 100644 --- a/build.gradle +++ b/build.gradle @@ -55,6 +55,38 @@ test { maxHeapSize = '1G' } +// Input and output files for relast +def relastInputFiles = [ + "src/main/jastadd/OpenAPISpecification.relast" +] +def relastOutputFiles = [ + "src/gen/jastadd/OpenAPISpecification.ast", + "src/gen/jastadd/OpenAPISpecification.jadd" +] + +task relast(type: JavaExec) { + classpath = files("libs/relast.jar") + group = 'Build' + + doFirst { + delete relastOutputFiles + mkdir "src/gen/jastadd/" + } + + args = [ + "--listClass=java.util.ArrayList", + "--jastAddList=JastAddList", + "--useJastAddNames", + "--file", + "--resolverHelper", + "--grammarName=./src/gen/jastadd/RelAst" + ] + relastInputFiles + + inputs.files relastInputFiles + outputs.files relastOutputFiles +} + + File genSrc = file("src/gen/java") sourceSets.main.java.srcDir genSrc idea.module.generatedSourceDirs += genSrc diff --git a/libs/relast.jar b/libs/relast.jar new file mode 100644 index 0000000000000000000000000000000000000000..9f1d60c7c99a1e35d9cf5558d5f329c5aa7ba66e Binary files /dev/null and b/libs/relast.jar differ diff --git a/src/main/jastadd/Composer.jrag b/src/main/jastadd/Composer.jrag index 98f671ee8b1babc92693573b7940e74ab6db3b5d..49cbefc0445649aeb2fa34f8e388e6a8a9dee4f7 100644 --- a/src/main/jastadd/Composer.jrag +++ b/src/main/jastadd/Composer.jrag @@ -1,3 +1,4 @@ +/* import org.openapi4j.core.exception.ResolutionException; import org.openapi4j.core.validation.ValidationException; import org.openapi4j.parser.model.v3.*; @@ -5,7 +6,6 @@ import org.openapi4j.core.model.reference.Reference; import org.openapi4j.core.model.OAIContext; import java.io.IOException; -import java.util.*; import java.net.URL; aspect Composer { @@ -765,13 +765,13 @@ aspect Composer { for (EnumObj e : s.getEnumObjs()) schema.addEnum(e.getEnumOb()); } - /* + if (s.getExample() != null) schema.setExample(s.getExample()); if (s.getExclusiveMaximum() != null) schema.setExclusiveMaximum(s.getExclusiveMaximum()); if (s.getExclusiveMinimum() != null) - schema.setExclusiveMinimum(s.getExclusiveMinimum());*/ + schema.setExclusiveMinimum(s.getExclusiveMinimum()); if (s.hasExternalDocObject()) schema.setExternalDocs(ExternalDocObject.composeExternalDocs(s.getExternalDocObject(), map)); if (!s.getFormat().isEmpty()) @@ -808,7 +808,7 @@ aspect Composer { } /* if (s.getNullable() != null) - schema.setNullable(s.getNullable());*/ + schema.setNullable(s.getNullable()); if (!s.getPattern().isEmpty()) schema.setPattern(s.getPattern()); if (s.getNumPropertyItem() != 0) { @@ -997,4 +997,6 @@ aspect Composer { return securityRequirement; } -} \ No newline at end of file +} + + */ \ No newline at end of file diff --git a/src/main/jastadd/InferParameter.jrag b/src/main/jastadd/InferParameter.jrag index ba577cb88d446d460cd5441fb0d22a5a999ea370..aa271cb10685d033ce04f2b3957d8df75f0adaa3 100644 --- a/src/main/jastadd/InferParameter.jrag +++ b/src/main/jastadd/InferParameter.jrag @@ -1,4 +1,4 @@ -import com.fasterxml.jackson.databind.JsonNode; +/*import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ArrayNode; @@ -198,4 +198,6 @@ aspect InferParameter{ System.out.println(e.toString()); } } -} \ No newline at end of file +} + + */ \ No newline at end of file diff --git a/src/main/jastadd/OpenAPISpecification.ast b/src/main/jastadd/OpenAPISpecification.relast similarity index 98% rename from src/main/jastadd/OpenAPISpecification.ast rename to src/main/jastadd/OpenAPISpecification.relast index 58eb5844db0f48efd2faf1e6d7e383689ec0581e..f9321246c40cd1bb367a64bd94eb7c648a22cd8c 100644 --- a/src/main/jastadd/OpenAPISpecification.ast +++ b/src/main/jastadd/OpenAPISpecification.relast @@ -1,5 +1,5 @@ //OpenAPI Object -OpenAPIObject ::= <OpenAPI> [InfoObject] <JsonSchemaDialect> ServerObject* PathsObject* Webhook* [ComponentsObject] SecurityRequirementObject* TagObject* [ExternalDocObject] <Context:OAIContext> Extension* InferredParameter*; +OpenAPIObject ::= <OpenAPI> [InfoObject] <JsonSchemaDialect> ServerObject* PathsObject* Webhook* [ComponentsObject] SecurityRequirementObject* TagObject* [ExternalDocObject] Extension* InferredParameter*; InferredParameter ::= <Parameter>; Webhook ::= <Key> PathItemOb; diff --git a/src/main/jastadd/Parser.jrag b/src/main/jastadd/Parser.jrag index e27176477084afa0c17ee6192cb46b34e1192744..05da4191c3a97cff8877dd3f2031205e9f296a7a 100644 --- a/src/main/jastadd/Parser.jrag +++ b/src/main/jastadd/Parser.jrag @@ -1,42 +1,8 @@ +/* import org.openapi4j.core.exception.DecodeException; aspect Parser { - inh OpenAPIObject ASTNode.root(); - eq OpenAPIObject.getChild().root() = this; - - coll List<SchemaTuple> OpenAPIObject.schemaTuples() [new ArrayList<>()] root OpenAPIObject; - SchemaTuple contributes this - to OpenAPIObject.schemaTuples(); - - coll List<ResponseTuple> OpenAPIObject.responseTuples() [new ArrayList<>()] root OpenAPIObject; - ResponseTuple contributes this - to OpenAPIObject.responseTuples(); - - coll List<ParameterTuple> OpenAPIObject.parameterTuples() [new ArrayList<>()] root OpenAPIObject; - ParameterTuple contributes this - to OpenAPIObject.parameterTuples(); - - coll List<RequestBodyTuple> OpenAPIObject.requestBodyTuples() [new ArrayList<>()] root OpenAPIObject; - RequestBodyTuple contributes this - to OpenAPIObject.requestBodyTuples(); - - coll List<HeaderTuple> OpenAPIObject.headerTuples() [new ArrayList<>()] root OpenAPIObject; - HeaderTuple contributes this - to OpenAPIObject.headerTuples(); - - coll List<SecuritySchemeTuple> OpenAPIObject.securitySchemeTuples() [new ArrayList<>()] root OpenAPIObject; - SecuritySchemeTuple contributes this - to OpenAPIObject.securitySchemeTuples(); - - coll List<LinkTuple> OpenAPIObject.linkTuples() [new ArrayList<>()] root OpenAPIObject; - LinkTuple contributes this - to OpenAPIObject.linkTuples(); - - coll List<CallbackTuple> OpenAPIObject.callbackTuples() [new ArrayList<>()] root OpenAPIObject; - CallbackTuple contributes this - to OpenAPIObject.callbackTuples(); - public static OpenAPIObject OpenAPIObject.parseOpenAPI(OpenApi3 api) throws IOException, ResolutionException, ValidationException, DecodeException { OpenAPIObject openapi = new OpenAPIObject(); Map<Object, ASTNode> map = new HashMap<>(); @@ -678,7 +644,7 @@ aspect Parser { if (schema.getExclusiveMaximum() != null) schemaObject.setExclusiveMaximum(schema.getExclusiveMaximum()); if (schema.getExclusiveMinimum() != null) - schemaObject.setExclusiveMinimum(schema.getExclusiveMinimum());*/ + schemaObject.setExclusiveMinimum(schema.getExclusiveMinimum()); if (schema.getExternalDocs() != null) schemaObject.setExternalDocObject(ExternalDocObject.parseExternalDocs(schema.getExternalDocs(), map)); if (schema.getFormat() != null) @@ -713,7 +679,7 @@ aspect Parser { } /* if (schema.getNullable() != null) - schemaObject.setNullable(schema.getNullable());*/ + schemaObject.setNullable(schema.getNullable()); if (schema.getPattern() != null) schemaObject.setPattern(schema.getPattern()); if (schema.getProperties() != null) { @@ -907,4 +873,6 @@ aspect Parser { map.put(securityRequirement, securityRequirementObject); return securityRequirementObject; } -} \ No newline at end of file +} + + */ \ No newline at end of file diff --git a/src/main/jastadd/RandomRequestGenerator.jrag b/src/main/jastadd/RandomRequestGenerator.jrag index 277e9afaa4b02be452ede1ddd7852222f95a7033..9473e1b2ddebe0d99248072317b825be0899366a 100644 --- a/src/main/jastadd/RandomRequestGenerator.jrag +++ b/src/main/jastadd/RandomRequestGenerator.jrag @@ -1,3 +1,4 @@ +/* import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.InputStreamReader; @@ -191,4 +192,6 @@ aspect RandomRequestGenerator{ return String.valueOf(rand.nextInt(maximum)); return String.valueOf(rand.nextInt()); } -} \ No newline at end of file +} + + */ \ No newline at end of file diff --git a/src/main/jastadd/Reference.jrag b/src/main/jastadd/Reference.jrag index e37c6183b242877916c14131791d7e5da8972fea..654c625d9f21691d31d06b71d8a4daf705e83128 100644 --- a/src/main/jastadd/Reference.jrag +++ b/src/main/jastadd/Reference.jrag @@ -1,5 +1,42 @@ +import java.util.*; + aspect Reference { + inh OpenAPIObject ASTNode.root(); + eq OpenAPIObject.getChild().root() = this; + + coll List<SchemaTuple> OpenAPIObject.schemaTuples() [new ArrayList<>()] root OpenAPIObject; + SchemaTuple contributes this + to OpenAPIObject.schemaTuples(); + + coll List<ResponseTuple> OpenAPIObject.responseTuples() [new ArrayList<>()] root OpenAPIObject; + ResponseTuple contributes this + to OpenAPIObject.responseTuples(); + + coll List<ParameterTuple> OpenAPIObject.parameterTuples() [new ArrayList<>()] root OpenAPIObject; + ParameterTuple contributes this + to OpenAPIObject.parameterTuples(); + + coll List<RequestBodyTuple> OpenAPIObject.requestBodyTuples() [new ArrayList<>()] root OpenAPIObject; + RequestBodyTuple contributes this + to OpenAPIObject.requestBodyTuples(); + + coll List<HeaderTuple> OpenAPIObject.headerTuples() [new ArrayList<>()] root OpenAPIObject; + HeaderTuple contributes this + to OpenAPIObject.headerTuples(); + + coll List<SecuritySchemeTuple> OpenAPIObject.securitySchemeTuples() [new ArrayList<>()] root OpenAPIObject; + SecuritySchemeTuple contributes this + to OpenAPIObject.securitySchemeTuples(); + + coll List<LinkTuple> OpenAPIObject.linkTuples() [new ArrayList<>()] root OpenAPIObject; + LinkTuple contributes this + to OpenAPIObject.linkTuples(); + + coll List<CallbackTuple> OpenAPIObject.callbackTuples() [new ArrayList<>()] root OpenAPIObject; + CallbackTuple contributes this + to OpenAPIObject.callbackTuples(); + syn ParameterObject ParameterOb.parameterObject(); eq ParameterObject.parameterObject() = this; eq ParameterReference.parameterObject() { diff --git a/src/main/java/de/tudresden/inf/st/openapi/OpenAPIMain.java b/src/main/java/de/tudresden/inf/st/openapi/OpenAPIMain.java index aa0842ab9dd95af2a8fdf2b57b50328e4e2a2a93..bb1896e1c28b3b4097b64b2e0149de8ced514ed9 100644 --- a/src/main/java/de/tudresden/inf/st/openapi/OpenAPIMain.java +++ b/src/main/java/de/tudresden/inf/st/openapi/OpenAPIMain.java @@ -65,8 +65,8 @@ public class OpenAPIMain { OpenApi3 api = new OpenApi3Parser().parse(expUrl, new ArrayList<>(), true); System.out.println("Loading expression DSL file '" + fileName + "'."); - openApi = OpenAPIObject.parseOpenAPI(api); - openApi.generateRequestsWithInferredParameters(); + //openApi = OpenAPIObject.parseOpenAPI(api); + //openApi.generateRequestsWithInferredParameters(); //writer.write(api3.toNode().toPrettyString()); //writer.close();