diff --git a/legend-engine-language-pure-grammar-api/src/test/java/org/finos/legend/engine/language/pure/grammar/api/test/TestGrammarGraphFetchApi.java b/legend-engine-language-pure-grammar-api/src/test/java/org/finos/legend/engine/language/pure/grammar/api/test/TestGrammarGraphFetchApi.java
index 857f031bc73..d5123f7cd05 100644
--- a/legend-engine-language-pure-grammar-api/src/test/java/org/finos/legend/engine/language/pure/grammar/api/test/TestGrammarGraphFetchApi.java
+++ b/legend-engine-language-pure-grammar-api/src/test/java/org/finos/legend/engine/language/pure/grammar/api/test/TestGrammarGraphFetchApi.java
@@ -4,6 +4,7 @@
import org.eclipse.collections.impl.tuple.Tuples;
import org.finos.legend.engine.language.pure.grammar.api.grammarToJson.GrammarToJson;
import org.finos.legend.engine.language.pure.grammar.api.jsonToGrammar.JsonToGrammar;
+import org.finos.legend.engine.protocol.pure.v1.model.SourceInformation;
import org.finos.legend.engine.protocol.pure.v1.model.valueSpecification.raw.graph.RootGraphFetchTree;
import org.finos.legend.engine.shared.core.api.TestGrammar;
import org.finos.legend.engine.shared.core.api.grammar.BatchResult;
@@ -42,7 +43,7 @@ public void testSimpleParsingError()
" }\n" +
" }\n" +
" }\n" +
- "}#", "{\"message\":\"Unexpected token\",\"sourceInformation\":{\"endColumn\":9,\"endLine\":3,\"sourceId\":\"\",\"startColumn\":5,\"startLine\":3}}");
+ "}#", "Unexpected token", new SourceInformation("", 3, 5, 3, 9));
}
@Test
diff --git a/legend-engine-language-pure-grammar-api/src/test/java/org/finos/legend/engine/language/pure/grammar/api/test/TestGrammarLambdaApi.java b/legend-engine-language-pure-grammar-api/src/test/java/org/finos/legend/engine/language/pure/grammar/api/test/TestGrammarLambdaApi.java
index 8df4cc7302d..1512ee57a20 100644
--- a/legend-engine-language-pure-grammar-api/src/test/java/org/finos/legend/engine/language/pure/grammar/api/test/TestGrammarLambdaApi.java
+++ b/legend-engine-language-pure-grammar-api/src/test/java/org/finos/legend/engine/language/pure/grammar/api/test/TestGrammarLambdaApi.java
@@ -4,6 +4,7 @@
import org.eclipse.collections.impl.tuple.Tuples;
import org.finos.legend.engine.language.pure.grammar.api.grammarToJson.GrammarToJson;
import org.finos.legend.engine.language.pure.grammar.api.jsonToGrammar.JsonToGrammar;
+import org.finos.legend.engine.protocol.pure.v1.model.SourceInformation;
import org.finos.legend.engine.protocol.pure.v1.model.valueSpecification.raw.Lambda;
import org.finos.legend.engine.shared.core.api.TestGrammar;
import org.finos.legend.engine.shared.core.api.grammar.BatchResult;
@@ -45,7 +46,7 @@ public void testSimple()
@Test
public void testSimpleParsingError()
{
- testError("|1->toString(),", "{\"message\":\"no viable alternative at input '->toString(),'\",\"sourceInformation\":{\"endColumn\":15,\"endLine\":1,\"sourceId\":\"\",\"startColumn\":15,\"startLine\":1}}");
+ testError("|1->toString(),", "no viable alternative at input '->toString(),'", new SourceInformation("", 1, 15, 1, 15));
}
@Test
diff --git a/legend-engine-language-pure-grammar-api/src/test/java/org/finos/legend/engine/language/pure/grammar/api/test/TestGrammarModelApi.java b/legend-engine-language-pure-grammar-api/src/test/java/org/finos/legend/engine/language/pure/grammar/api/test/TestGrammarModelApi.java
index 4a6f28c7cd7..fa37e986b82 100644
--- a/legend-engine-language-pure-grammar-api/src/test/java/org/finos/legend/engine/language/pure/grammar/api/test/TestGrammarModelApi.java
+++ b/legend-engine-language-pure-grammar-api/src/test/java/org/finos/legend/engine/language/pure/grammar/api/test/TestGrammarModelApi.java
@@ -3,6 +3,7 @@
import org.eclipse.collections.api.block.function.Function2;
import org.finos.legend.engine.language.pure.grammar.api.grammarToJson.GrammarToJson;
import org.finos.legend.engine.language.pure.grammar.api.jsonToGrammar.JsonToGrammar;
+import org.finos.legend.engine.protocol.pure.v1.model.SourceInformation;
import org.finos.legend.engine.protocol.pure.v1.model.context.PureModelContextData;
import org.finos.legend.engine.shared.core.api.TestGrammar;
import org.finos.legend.engine.shared.core.api.grammar.RenderStyle;
@@ -35,7 +36,7 @@ public void testSimple()
@Test
public void testSimpleError()
{
- testError("Class A\n{", "{\"message\":\"Unexpected token\",\"sourceInformation\":{\"endColumn\":1,\"endLine\":2,\"sourceId\":\"\",\"startColumn\":1,\"startLine\":2}}");
+ testError("Class A\n{", "Unexpected token", new SourceInformation("", 2, 1, 2, 1));
}
private static final GrammarToJson grammarToJson = new GrammarToJson();
diff --git a/legend-engine-language-pure-grammar-api/src/test/java/org/finos/legend/engine/language/pure/grammar/api/test/TestGrammarValueSpecificationApi.java b/legend-engine-language-pure-grammar-api/src/test/java/org/finos/legend/engine/language/pure/grammar/api/test/TestGrammarValueSpecificationApi.java
index 9c6b93def1f..14774509953 100644
--- a/legend-engine-language-pure-grammar-api/src/test/java/org/finos/legend/engine/language/pure/grammar/api/test/TestGrammarValueSpecificationApi.java
+++ b/legend-engine-language-pure-grammar-api/src/test/java/org/finos/legend/engine/language/pure/grammar/api/test/TestGrammarValueSpecificationApi.java
@@ -4,6 +4,7 @@
import org.eclipse.collections.impl.tuple.Tuples;
import org.finos.legend.engine.language.pure.grammar.api.grammarToJson.GrammarToJson;
import org.finos.legend.engine.language.pure.grammar.api.jsonToGrammar.JsonToGrammar;
+import org.finos.legend.engine.protocol.pure.v1.model.SourceInformation;
import org.finos.legend.engine.protocol.pure.v1.model.valueSpecification.ValueSpecification;
import org.finos.legend.engine.shared.core.api.TestGrammar;
import org.finos.legend.engine.shared.core.api.grammar.BatchResult;
@@ -28,11 +29,10 @@ public void testSimple()
@Test
public void testSimpleError()
{
- testError("1", "{\"_type\":\"integer\",\"multiplicity\":{\"lowerBound\":1,\"upperBound\":1},\"sourceInformation\":{\"endColumn\":1,\"endLine\":1,\"sourceId\":\"\",\"startColumn\":1,\"startLine\":1},\"values\":[1]}");
testError("true->func(\n" +
" 2\n" +
" 'www'\n" +
- ")", "{\"message\":\"Unexpected token\",\"sourceInformation\":{\"endColumn\":7,\"endLine\":3,\"sourceId\":\"\",\"startColumn\":3,\"startLine\":3}}");
+ ")", "Unexpected token", new SourceInformation("", 3, 3, 3, 7));
}
@Test
diff --git a/legend-engine-language-pure-store-relational-grammar-api/pom.xml b/legend-engine-language-pure-store-relational-grammar-api/pom.xml
index d4e2c71a5fb..6129d24b8a2 100644
--- a/legend-engine-language-pure-store-relational-grammar-api/pom.xml
+++ b/legend-engine-language-pure-store-relational-grammar-api/pom.xml
@@ -35,6 +35,10 @@
org.finos.legend.engine
legend-engine-protocol-pure
+
+ org.finos.legend.engine
+ legend-engine-protocol
+
org.finos.legend.engine
legend-engine-language-pure-grammar
diff --git a/legend-engine-language-pure-store-relational-grammar-api/src/test/java/org.finos.legend.engine.language.pure.grammar.api.relationalOperationElement.test/TestRelationalOperationElementApi.java b/legend-engine-language-pure-store-relational-grammar-api/src/test/java/org.finos.legend.engine.language.pure.grammar.api.relationalOperationElement.test/TestRelationalOperationElementApi.java
index d35e05fb238..05b75dbb611 100644
--- a/legend-engine-language-pure-store-relational-grammar-api/src/test/java/org.finos.legend.engine.language.pure.grammar.api.relationalOperationElement.test/TestRelationalOperationElementApi.java
+++ b/legend-engine-language-pure-store-relational-grammar-api/src/test/java/org.finos.legend.engine.language.pure.grammar.api.relationalOperationElement.test/TestRelationalOperationElementApi.java
@@ -4,6 +4,7 @@
import org.eclipse.collections.impl.tuple.Tuples;
import org.finos.legend.engine.language.pure.grammar.api.relationalOperationElement.RelationalOperationElementGrammarToJson;
import org.finos.legend.engine.language.pure.grammar.api.relationalOperationElement.RelationalOperationElementJsonToGrammar;
+import org.finos.legend.engine.protocol.pure.v1.model.SourceInformation;
import org.finos.legend.engine.protocol.pure.v1.model.packageableElement.store.relational.model.operation.RelationalOperationElement;
import org.finos.legend.engine.shared.core.api.TestGrammar;
import org.finos.legend.engine.shared.core.api.grammar.BatchResult;
@@ -24,7 +25,7 @@ public void testSimple()
@Test
public void testSimpleError()
{
- testError("add(1,", "{\"message\":\"Unexpected token\",\"sourceInformation\":{\"endColumn\":11,\"endLine\":1,\"sourceId\":\"\",\"startColumn\":7,\"startLine\":1}}");
+ testError("add(1,", "Unexpected token", new SourceInformation("", 1, 7, 1, 11));
}
@Test
diff --git a/legend-engine-query-graphQL/src/test/java/org/finos/legend/engine/query/graphQL/api/grammar/test/TestGrammarApi.java b/legend-engine-query-graphQL/src/test/java/org/finos/legend/engine/query/graphQL/api/grammar/test/TestGrammarApi.java
index fbe416d0c14..a18e30481f4 100644
--- a/legend-engine-query-graphQL/src/test/java/org/finos/legend/engine/query/graphQL/api/grammar/test/TestGrammarApi.java
+++ b/legend-engine-query-graphQL/src/test/java/org/finos/legend/engine/query/graphQL/api/grammar/test/TestGrammarApi.java
@@ -3,6 +3,7 @@
import org.eclipse.collections.api.block.function.Function2;
import org.eclipse.collections.impl.tuple.Tuples;
import org.finos.legend.engine.protocol.graphQL.metamodel.ExecutableDocument;
+import org.finos.legend.engine.protocol.pure.v1.model.SourceInformation;
import org.finos.legend.engine.query.graphQL.api.grammar.GraphQLGrammar;
import org.finos.legend.engine.shared.core.api.TestGrammar;
import org.finos.legend.engine.shared.core.api.grammar.BatchResult;
@@ -33,7 +34,7 @@ public void testSimpleError()
" name String!\n" +
" values: [String]\n" +
" length(unit: LengthUnit = METER): Float\n" +
- "}", "{\"message\":\"Unexpected token\",\"sourceInformation\":{\"endColumn\":13,\"endLine\":3,\"sourceId\":\"\",\"startColumn\":8,\"startLine\":3}}");
+ "}", "Unexpected token", new SourceInformation("", 3, 8, 3, 13));
}
@Test
diff --git a/legend-engine-shared-core/src/main/java/org/finos/legend/engine/shared/core/api/grammar/GrammarAPI.java b/legend-engine-shared-core/src/main/java/org/finos/legend/engine/shared/core/api/grammar/GrammarAPI.java
index c0aa9085ce2..902b1025154 100644
--- a/legend-engine-shared-core/src/main/java/org/finos/legend/engine/shared/core/api/grammar/GrammarAPI.java
+++ b/legend-engine-shared-core/src/main/java/org/finos/legend/engine/shared/core/api/grammar/GrammarAPI.java
@@ -24,7 +24,7 @@ public class GrammarAPI
{
private static final ObjectMapper objectMapper = ObjectMapperFactory.getNewStandardObjectMapperWithPureProtocolExtensionSupports();
- protected Response grammarToJson(String input, Function2 func , ProfileManager pm, boolean returnSourceInfo, String spanText)
+ protected Response grammarToJson(String input, Function2 func, ProfileManager pm, boolean returnSourceInfo, String spanText)
{
MutableList profiles = ProfileManagerHelper.extractProfiles(pm);
try (Scope scope = GlobalTracer.get().buildSpan(spanText).startActive(true))
@@ -34,27 +34,19 @@ protected Response grammarToJson(String input, Function2
T data = func.apply(input, returnSourceInfo);
return ManageConstantResult.manageResult(profiles, data, objectMapper);
}
- catch (EngineException e)
- {
- if (!EngineErrorType.PARSER.equals(e.getErrorType()))
- {
- return ExceptionTool.exceptionManager(e, LoggingEventType.TRANSFORM_GRAMMAR_TO_JSON_ERROR, profiles);
- }
- return ManageConstantResult.manageResult(profiles, new ParserError(e.getMessage(), e.getSourceInformation()), objectMapper);
- }
catch (Exception e)
{
- return ExceptionTool.exceptionManager(e, LoggingEventType.TRANSFORM_GRAMMAR_TO_JSON_ERROR, profiles);
+ return ExceptionTool.exceptionManager(e, LoggingEventType.TRANSFORM_GRAMMAR_TO_JSON_ERROR, Response.Status.BAD_REQUEST, profiles);
}
}
}
- protected Response grammarToJsonBatch(Map input, Function2 func , Map result, ProfileManager pm, boolean returnSourceInfo, String spanText)
+ protected Response grammarToJsonBatch(Map input, Function2 func, Map result, ProfileManager pm, boolean returnSourceInfo, String spanText)
{
MutableList profiles = ProfileManagerHelper.extractProfiles(pm);
try (Scope scope = GlobalTracer.get().buildSpan(spanText).startActive(true))
{
- Map errors = Maps.mutable.empty();
+ Map errors = Maps.mutable.empty();
input.forEach((key, value) ->
{
try
@@ -81,7 +73,7 @@ protected Response grammarToJsonBatch(Map input, Function2 Response jsonToGrammar(T graphFetchTree, RenderStyle renderStyle, Function2 func, ProfileManager pm, String spanText)
+ protected Response jsonToGrammar(T graphFetchTree, RenderStyle renderStyle, Function2 func, ProfileManager pm, String spanText)
{
MutableList profiles = ProfileManagerHelper.extractProfiles(pm);
try (Scope scope = GlobalTracer.get().buildSpan(spanText).startActive(true))
@@ -100,7 +92,8 @@ protected Response jsonToGrammarBatch(RenderStyle renderStyle, Map result = org.eclipse.collections.api.factory.Maps.mutable.empty();
- MapAdapter.adapt(values).forEachKeyValue((key, value) -> {
+ MapAdapter.adapt(values).forEachKeyValue((key, value) ->
+ {
result.put(key, func.apply(value, renderStyle));
});
return ManageConstantResult.manageResult(profiles, result);
diff --git a/legend-engine-shared-core/src/main/java/org/finos/legend/engine/shared/core/operational/errorManagement/ExceptionTool.java b/legend-engine-shared-core/src/main/java/org/finos/legend/engine/shared/core/operational/errorManagement/ExceptionTool.java
index 3b55d70ee07..a15f5f91972 100644
--- a/legend-engine-shared-core/src/main/java/org/finos/legend/engine/shared/core/operational/errorManagement/ExceptionTool.java
+++ b/legend-engine-shared-core/src/main/java/org/finos/legend/engine/shared/core/operational/errorManagement/ExceptionTool.java
@@ -33,15 +33,25 @@ public class ExceptionTool
public static Response exceptionManager(Exception exception, LoggingEventType eventType, Iterable extends CommonProfile> pm)
{
- return manage(eventType, pm, new ExceptionError(-1, exception));
+ return manage(eventType, pm, new ExceptionError(-1, exception), Response.Status.INTERNAL_SERVER_ERROR);
}
public static Response exceptionManager(String message, LoggingEventType eventType, Iterable extends CommonProfile> pm)
{
- return manage(eventType, pm, new ExceptionError(-1, message));
+ return manage(eventType, pm, new ExceptionError(-1, message), Response.Status.INTERNAL_SERVER_ERROR);
}
- private static Response manage(LoggingEventType eventType, Iterable extends CommonProfile> pm, ExceptionError error)
+ public static Response exceptionManager(Exception exception, LoggingEventType eventType, Response.Status status, Iterable extends CommonProfile> pm)
+ {
+ return manage(eventType, pm, new ExceptionError(-1, exception), status);
+ }
+
+ public static Response exceptionManager(String message, LoggingEventType eventType, Response.Status status, Iterable extends CommonProfile> pm)
+ {
+ return manage(eventType, pm, new ExceptionError(-1, message), status);
+ }
+
+ private static Response manage(LoggingEventType eventType, Iterable extends CommonProfile> pm, ExceptionError error, Response.Status status)
{
LOGGER.error(new LogInfo(pm, eventType, error).toString());
String text;
@@ -57,6 +67,6 @@ private static Response manage(LoggingEventType eventType, Iterable extends Co
{
GlobalTracer.get().activeSpan().setTag("error", text);
}
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).type(MediaType.APPLICATION_JSON_TYPE).entity(error).build();
+ return Response.status(status).type(MediaType.APPLICATION_JSON_TYPE).entity(error).build();
}
}
diff --git a/legend-engine-shared-core/src/test/java/org/finos/legend/engine/shared/core/api/TestGrammar.java b/legend-engine-shared-core/src/test/java/org/finos/legend/engine/shared/core/api/TestGrammar.java
index b119a67acea..cac453049d3 100644
--- a/legend-engine-shared-core/src/test/java/org/finos/legend/engine/shared/core/api/TestGrammar.java
+++ b/legend-engine-shared-core/src/test/java/org/finos/legend/engine/shared/core/api/TestGrammar.java
@@ -6,15 +6,18 @@
import org.eclipse.collections.api.tuple.Pair;
import org.eclipse.collections.impl.utility.ArrayIterate;
import org.eclipse.collections.impl.utility.MapIterate;
+import org.finos.legend.engine.protocol.pure.v1.model.SourceInformation;
import org.finos.legend.engine.shared.core.ObjectMapperFactory;
import org.finos.legend.engine.shared.core.api.grammar.BatchResult;
import org.finos.legend.engine.shared.core.api.grammar.RenderStyle;
+import org.finos.legend.engine.shared.core.operational.errorManagement.ExceptionError;
import javax.ws.rs.core.Response;
import java.util.LinkedHashMap;
import java.util.Map;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
public abstract class TestGrammar
{
@@ -43,13 +46,20 @@ protected void test(String str, boolean returnSourceInfo)
}
}
- protected void testError(String str, String expected)
+ protected void testError(String str, String expectedErrorMessage, SourceInformation expectedErrorSourceInformation)
{
try
{
Response result = grammarToJson().apply(str, true);
- String actual = result.getEntity().toString();
- assertEquals(expected, actual);
+ Object errorObject = result.getEntity();
+ assertTrue(errorObject instanceof ExceptionError);
+ ExceptionError error = (ExceptionError) errorObject;
+ assertEquals(expectedErrorMessage, error.getMessage());
+ assertEquals(expectedErrorSourceInformation.sourceId, error.getSourceInformation().sourceId);
+ assertEquals(expectedErrorSourceInformation.startLine, error.getSourceInformation().startLine);
+ assertEquals(expectedErrorSourceInformation.startColumn, error.getSourceInformation().startColumn);
+ assertEquals(expectedErrorSourceInformation.endLine, error.getSourceInformation().endLine);
+ assertEquals(expectedErrorSourceInformation.endColumn, error.getSourceInformation().endColumn);
}
catch (Exception e)
{