use of org.finos.legend.engine.protocol.pure.v1.packageableElement.external.shared.ExternalFormatConnection in project legend-engine by finos.
the class ExternalFormatConnectionCompilerExtension method getExtraConnectionSecondPassProcessors.
@Override
public List<Procedure3<Connection, org.finos.legend.pure.m3.coreinstance.meta.pure.runtime.Connection, CompileContext>> getExtraConnectionSecondPassProcessors() {
return Collections.singletonList((connectionValue, pureConnection, context) -> {
if (connectionValue instanceof ExternalFormatConnection) {
ExternalFormatConnection externalFormatConnection = (ExternalFormatConnection) connectionValue;
List<IExternalFormatCompilerExtension> extensions = IExternalFormatCompilerExtension.getExtensions(context);
Root_meta_external_shared_format_executionPlan_ExternalFormatConnection connection = (Root_meta_external_shared_format_executionPlan_ExternalFormatConnection) pureConnection;
Store store = context.pureModel.getStore(connectionValue.element, connectionValue.elementSourceInformation);
if (!(store instanceof Root_meta_external_shared_format_binding_Binding)) {
throw new EngineException("Store for ExternalFormatConnection must be a Binding", connectionValue.sourceInformation, EngineErrorType.COMPILATION);
}
connection._element(store);
Root_meta_external_shared_format_executionPlan_ExternalSource externalSource = IExternalFormatCompilerExtension.process(externalFormatConnection.externalSource, ListIterate.flatCollect(extensions, IExternalFormatCompilerExtension::getExtraExternalSourceSpecificationProcessors), context);
connection._externalSource(externalSource);
}
});
}
use of org.finos.legend.engine.protocol.pure.v1.packageableElement.external.shared.ExternalFormatConnection in project legend-engine by finos.
the class TestExternalFormatConnectionCompilation method testPackageableExternalFormatConnection.
@Test
public void testPackageableExternalFormatConnection() {
Pair<PureModelContextData, PureModel> compiledGraph = test("###Pure\n" + "Class meta::firm::Person\n" + "{\n" + " fullName: String[1];\n" + "}\n" + "\n" + "###ExternalFormat\n" + "SchemaSet meta::firm::SchemaSet\n" + "{\n" + " format: Example;\n" + " schemas: [ { content: 'example'; } ];\n" + "}\n" + "\n" + "Binding meta::firm::Binding\n" + "{\n" + " schemaSet: meta::firm::SchemaSet;\n" + " contentType: 'text/example';\n" + " modelIncludes: [\n" + " meta::firm::Person\n" + " ];\n" + "}\n" + "\n" + "###Connection\n" + "ExternalFormatConnection simple::Connection\n" + "{\n" + " store: meta::firm::Binding;\n" + " source: UrlStream\n" + " {\n" + " url: 'executor:default';\n" + " };\n" + "}\n");
Root_meta_external_shared_format_executionPlan_ExternalFormatConnection connection = (Root_meta_external_shared_format_executionPlan_ExternalFormatConnection) compiledGraph.getTwo().getConnection("simple::Connection", SourceInformation.getUnknownSourceInformation());
Assert.assertTrue(connection._externalSource() instanceof Root_meta_external_shared_format_executionPlan_UrlStreamExternalSource);
Assert.assertEquals("executor:default", ((Root_meta_external_shared_format_executionPlan_UrlStreamExternalSource) connection._externalSource())._url());
}
use of org.finos.legend.engine.protocol.pure.v1.packageableElement.external.shared.ExternalFormatConnection in project legend-engine by finos.
the class ServiceTestGenerationHelper method getNullableTestConnection.
private static Optional<Connection> getNullableTestConnection(Connection connection, Runtime parentRuntime, String mappingPath, Pair<PureModelContextData, PureModel> pureModelPairs, StoreConnections parentStoreConnection, Function<String, String> testDataAccessor, String testData, String idTestDataAccessorResult) {
if (connection instanceof ConnectionPointer) {
String connectionFullPath = ((ConnectionPointer) connection).connection;
PackageableElement found = Iterate.detect(pureModelPairs.getOne().getElements(), e -> connectionFullPath.equals(e.getPath()));
if (!(found instanceof PackageableConnection)) {
throw new RuntimeException("Can't find connection '" + connectionFullPath + "'");
}
connection = ((PackageableConnection) found).connectionValue;
}
if (connection instanceof JsonModelConnection) {
JsonModelConnection conn = (JsonModelConnection) connection;
JsonModelConnection testJsonModelConnection = new JsonModelConnection();
testJsonModelConnection._class = conn._class;
testJsonModelConnection.element = conn.element != null ? conn.element : (parentStoreConnection.store != null ? parentStoreConnection.store.path : null);
String executorId = conn.url.split(":")[1];
String connectionTestData = resolveTestData(executorId, idTestDataAccessorResult, testDataAccessor, testData);
if (idTestDataAccessorResult != null) {
((JsonModelConnection) connection).url = DataProtocolHandler.DATA_PROTOCOL_NAME + ":" + MediaType.APPLICATION_JSON + ";base64," + Base64.getEncoder().encodeToString(idTestDataAccessorResult.getBytes(StandardCharsets.UTF_8));
}
testJsonModelConnection.url = DataProtocolHandler.DATA_PROTOCOL_NAME + ":" + MediaType.APPLICATION_JSON + ";base64," + Base64.getEncoder().encodeToString(connectionTestData.getBytes(StandardCharsets.UTF_8));
return Optional.of(conn);
}
if (connection instanceof XmlModelConnection) {
XmlModelConnection conn = (XmlModelConnection) connection;
XmlModelConnection testXmlModelConnection = new XmlModelConnection();
testXmlModelConnection._class = conn._class;
testXmlModelConnection.element = conn.element != null ? conn.element : (parentStoreConnection.store != null ? parentStoreConnection.store.path : null);
String executorId = conn.url.split(":")[1];
String connectionTestData = resolveTestData(executorId, idTestDataAccessorResult, testDataAccessor, testData);
if (idTestDataAccessorResult != null) {
((XmlModelConnection) connection).url = DataProtocolHandler.DATA_PROTOCOL_NAME + ":" + MediaType.APPLICATION_XML + ";base64," + Base64.getEncoder().encodeToString(idTestDataAccessorResult.getBytes(StandardCharsets.UTF_8));
}
testXmlModelConnection.url = DataProtocolHandler.DATA_PROTOCOL_NAME + ":" + MediaType.APPLICATION_XML + ";base64," + Base64.getEncoder().encodeToString(connectionTestData.getBytes(StandardCharsets.UTF_8));
return Optional.of(testXmlModelConnection);
}
if (connection instanceof ExternalFormatConnection) {
ExternalFormatConnection conn = (ExternalFormatConnection) connection;
ExternalFormatConnection testConn = new ExternalFormatConnection();
testConn.element = conn.element;
UrlStreamExternalSource source = new UrlStreamExternalSource();
source.url = DataProtocolHandler.DATA_PROTOCOL_NAME + ":" + MediaType.APPLICATION_XML + ";base64," + Base64.getEncoder().encodeToString(idTestDataAccessorResult.getBytes(StandardCharsets.UTF_8));
testConn.externalSource = source;
return Optional.of(testConn);
}
if (connection instanceof ModelChainConnection) {
return Optional.of(connection);
}
if (connection instanceof DatabaseConnection) {
List<String> sql = getSql(parentRuntime, mappingPath, idTestDataAccessorResult, pureModelPairs.getTwo());
return Optional.of(newRelationalConnection(connection, idTestDataAccessorResult, sql));
}
String element = connection.element != null ? connection.element : (parentStoreConnection.store != null ? parentStoreConnection.store.path : null);
Connection testConnectionFromFactories = getTestConnectionFromFactories(connection, idTestDataAccessorResult == null ? testData : idTestDataAccessorResult, element);
return testConnectionFromFactories != null ? Optional.of(testConnectionFromFactories) : Optional.empty();
}
use of org.finos.legend.engine.protocol.pure.v1.packageableElement.external.shared.ExternalFormatConnection in project legend-engine by finos.
the class TestExternalFormatConnectionCompilation method testExternalFormatConnectionInPackageableRuntime.
@Test
public void testExternalFormatConnectionInPackageableRuntime() {
Pair<PureModelContextData, PureModel> compiledGraph = test("###Pure\n" + "Class meta::firm::Person\n" + "{\n" + " fullName: String[1];\n" + "}\n" + "\n" + "###ExternalFormat\n" + "SchemaSet meta::firm::SchemaSet\n" + "{\n" + " format: Example;\n" + " schemas: [ { content: 'example'; } ];\n" + "}\n" + "\n" + "Binding meta::firm::Binding\n" + "{\n" + " schemaSet: meta::firm::SchemaSet;\n" + " contentType: 'text/example';\n" + " modelIncludes: [\n" + " meta::firm::Person\n" + " ];\n" + "}\n" + "\n" + "###Mapping\n" + "Mapping test::Mapping\n" + "(\n" + " meta::firm::Person: Pure\n" + " {\n" + " ~src meta::firm::Person\n" + " fullName: $src.fullName\n" + " }\n" + ")\n" + "###Runtime\n" + "Runtime test::runtime\n" + "{\n" + " mappings:\n" + " [\n" + " test::Mapping\n" + " ];\n" + " connections:\n" + " [\n" + " meta::firm::Binding:\n" + " [\n" + " c1:\n" + " #{\n" + " ExternalFormatConnection\n" + " {\n" + " source: UrlStream\n" + " {\n" + " url: 'executor:default';\n" + " };\n" + " }\n" + " }#\n" + " ]\n" + " ];\n" + "}\n");
Runtime runtime = compiledGraph.getTwo().getRuntime("test::runtime");
Root_meta_external_shared_format_executionPlan_ExternalFormatConnection connection = (Root_meta_external_shared_format_executionPlan_ExternalFormatConnection) runtime._connections().toList().get(0);
Assert.assertTrue(connection._externalSource() instanceof Root_meta_external_shared_format_executionPlan_UrlStreamExternalSource);
Assert.assertEquals("executor:default", ((Root_meta_external_shared_format_executionPlan_UrlStreamExternalSource) connection._externalSource())._url());
}
Aggregations