Search in sources :

Example 1 with PlanTransformer

use of org.finos.legend.engine.plan.generation.transformers.PlanTransformer in project legend-sdlc by finos.

the class MappingTestCase method collectTestCases.

@LegendSDLCTestCaseCollector(collectorClass = Mapping.class)
public static void collectTestCases(PureModel pureModel, PureModelContextData pureModelContextData, MutableList<PlanTransformer> planTransformers, RichIterable<? extends Root_meta_pure_router_extension_RouterExtension> extensions, String pureVersion, Entity entity, Consumer<? super LegendSDLCTestCase> testCaseConsumer) {
    Mapping mapping = findPackageableElement(pureModelContextData.getElementsOfType(Mapping.class), entity.getPath());
    Optional.ofNullable(mapping.tests).orElse(Collections.emptyList()).stream().map(test -> new MappingTestCase(pureModel, pureModelContextData, mapping, test, planTransformers, extensions, pureVersion)).forEach(testCaseConsumer);
}
Also used : PrintWriter(java.io.PrintWriter) PureModel(org.finos.legend.engine.language.pure.compiler.toPureGraph.PureModel) MappingTestRunner(org.finos.legend.engine.test.runner.mapping.MappingTestRunner) Mapping(org.finos.legend.engine.protocol.pure.v1.model.packageableElement.mapping.Mapping) StringWriter(java.io.StringWriter) MappingTest(org.finos.legend.engine.protocol.pure.v1.model.packageableElement.mapping.mappingTest.MappingTest) TestResult(org.finos.legend.engine.test.runner.shared.TestResult) MutableList(org.eclipse.collections.api.list.MutableList) Root_meta_pure_router_extension_RouterExtension(org.finos.legend.pure.generated.Root_meta_pure_router_extension_RouterExtension) Consumer(java.util.function.Consumer) RichIterable(org.eclipse.collections.api.RichIterable) Connection(org.finos.legend.engine.protocol.pure.v1.model.packageableElement.connection.Connection) PureModelContextData(org.finos.legend.engine.protocol.pure.v1.model.context.PureModelContextData) Entity(org.finos.legend.sdlc.domain.model.entity.Entity) LegendSDLCTestCase(org.finos.legend.sdlc.test.junit.LegendSDLCTestCase) LegendSDLCTestCaseCollector(org.finos.legend.sdlc.test.junit.LegendSDLCTestCaseCollector) Optional(java.util.Optional) RichMappingTestResult(org.finos.legend.engine.test.runner.mapping.RichMappingTestResult) Collections(java.util.Collections) PlanTransformer(org.finos.legend.engine.plan.generation.transformers.PlanTransformer) Mapping(org.finos.legend.engine.protocol.pure.v1.model.packageableElement.mapping.Mapping) LegendSDLCTestCaseCollector(org.finos.legend.sdlc.test.junit.LegendSDLCTestCaseCollector)

Example 2 with PlanTransformer

use of org.finos.legend.engine.plan.generation.transformers.PlanTransformer in project legend-engine by finos.

the class ServiceModeling method executeTests.

private static TestRun executeTests(Service service, Root_meta_legend_service_metamodel_Service pureService, Pair<PureModelContextData, PureModel> pureModelPairs, String pureVersion, String metricsContext) throws IOException, JavaCompileException {
    MutableList<PlanGeneratorExtension> extensions = Lists.mutable.withAll(ServiceLoader.load(PlanGeneratorExtension.class));
    RichIterable<? extends Root_meta_pure_router_extension_RouterExtension> routerExtensions = extensions.flatCollect(e -> e.getExtraRouterExtensions(pureModelPairs.getTwo()));
    MutableList<PlanTransformer> planTransformers = extensions.flatCollect(PlanGeneratorExtension::getExtraPlanTransformers);
    ServiceTestRunner runner = new ServiceTestRunner(service, pureService, pureModelPairs.getOne(), pureModelPairs.getTwo(), objectMapper, planExecutor, routerExtensions, planTransformers, pureVersion, metricsContext);
    RichServiceTestResult richServiceTestResult = runner.executeTests().get(0);
    Map<String, Boolean> results = Maps.mutable.empty();
    for (Map.Entry<String, org.finos.legend.engine.test.runner.shared.TestResult> entry : richServiceTestResult.getResults().entrySet()) {
        Boolean testResult = entry.getValue().equals(org.finos.legend.engine.test.runner.shared.TestResult.SUCCESS);
        results.put(entry.getKey(), testResult);
    }
    return new SingleTestRun(richServiceTestResult.getExecutionPlan(), new JavaCode(richServiceTestResult.getJavaCodeString()), results);
}
Also used : PlanTransformer(org.finos.legend.engine.plan.generation.transformers.PlanTransformer) ServiceTestRunner(org.finos.legend.engine.test.runner.service.ServiceTestRunner) JavaCode(org.finos.legend.engine.plan.execution.service.test.JavaCode) RichServiceTestResult(org.finos.legend.engine.test.runner.service.RichServiceTestResult) TestResult(org.finos.legend.engine.plan.execution.service.test.TestResult) RichServiceTestResult(org.finos.legend.engine.test.runner.service.RichServiceTestResult) PlanGeneratorExtension(org.finos.legend.engine.plan.generation.extension.PlanGeneratorExtension) Map(java.util.Map) SingleTestRun(org.finos.legend.engine.plan.execution.service.test.SingleTestRun)

Example 3 with PlanTransformer

use of org.finos.legend.engine.plan.generation.transformers.PlanTransformer in project legend-sdlc by finos.

the class ServicesGenerationMojo method execute.

@Override
public void execute() throws MojoExecutionException {
    if (this.inclusions != null) {
        getLog().info("include service paths: " + this.inclusions.servicePaths);
        getLog().info("include service packages: " + this.inclusions.packages);
        getLog().info("include service directories: " + Arrays.toString(this.inclusions.directories));
    }
    if (this.exclusions != null) {
        getLog().info("exclude service paths: " + this.exclusions.servicePaths);
        getLog().info("exclude service packages: " + this.exclusions.packages);
        getLog().info("exclude service directories: " + Arrays.toString(this.exclusions.directories));
    }
    getLog().info("package prefix: " + ((this.packagePrefix == null) ? null : ('"' + this.packagePrefix + '"')));
    getLog().info("Java source output directory: " + this.javaSourceOutputDirectory);
    getLog().info("resource output directory: " + this.resourceOutputDirectory);
    if ((this.packagePrefix != null) && !SourceVersion.isName(this.packagePrefix)) {
        throw new MojoExecutionException("Invalid package prefix: " + this.packagePrefix);
    }
    getLog().info("Loading model");
    long modelStart = System.nanoTime();
    PureModelBuilder pureModelBuilder = PureModelBuilder.newBuilder();
    try (EntityLoader allEntities = EntityLoader.newEntityLoader(Thread.currentThread().getContextClassLoader())) {
        pureModelBuilder.addEntitiesIfPossible(allEntities.getAllEntities());
    } catch (Exception e) {
        throw new MojoExecutionException("Error loading entities from model", e);
    }
    int elementCount = pureModelBuilder.getElementCount();
    getLog().info("Found " + elementCount + " elements in the model");
    if (elementCount == 0) {
        long modelEnd = System.nanoTime();
        getLog().info(String.format("Finished loading model (%.9fs)", (modelEnd - modelStart) / 1_000_000_000.0));
        getLog().info("No execution artifacts to generate");
        return;
    }
    PureModelBuilder.PureModelWithContextData pureModelWithContextData;
    try {
        pureModelWithContextData = pureModelBuilder.build();
    } catch (Exception e) {
        throw new MojoExecutionException("Error building Pure model", e);
    }
    PureModelContextData pureModelContextData = pureModelWithContextData.getPureModelContextData();
    PureModel pureModel = pureModelWithContextData.getPureModel();
    long modelEnd = System.nanoTime();
    getLog().info(String.format("Finished loading model (%.9fs)", (modelEnd - modelStart) / 1_000_000_000.0));
    JsonMapper jsonMapper = PureProtocolObjectMapperFactory.withPureProtocolExtensions(JsonMapper.builder().enable(SerializationFeature.INDENT_OUTPUT).enable(SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS).enable(MapperFeature.SORT_PROPERTIES_ALPHABETICALLY).disable(StreamWriteFeature.AUTO_CLOSE_TARGET).disable(StreamReadFeature.AUTO_CLOSE_SOURCE).serializationInclusion(JsonInclude.Include.NON_NULL).build());
    long start = System.nanoTime();
    Map<String, Service> servicesByPath = pureModelContextData.getElementsOfType(Service.class).stream().collect(Collectors.toMap(PackageableElement::getPath, el -> el));
    filterServicesByIncludes(servicesByPath);
    filterServicesByExcludes(servicesByPath);
    if (servicesByPath.isEmpty()) {
        getLog().info("Found 0 services for generation");
    } else if (getLog().isInfoEnabled()) {
        getLog().info(servicesByPath.keySet().stream().sorted().collect(Collectors.joining(", ", "Found " + servicesByPath.size() + " services for generation: ", "")));
    }
    for (Service service : servicesByPath.values()) {
        getLog().info("Generating execution artifacts for " + service.getPath());
        long serviceStart = System.nanoTime();
        try {
            MutableList<PlanGeneratorExtension> extensions = Lists.mutable.withAll(ServiceLoader.load(PlanGeneratorExtension.class));
            RichIterable<? extends Root_meta_pure_router_extension_RouterExtension> routerExtensions = extensions.flatCollect(e -> e.getExtraRouterExtensions(pureModel));
            MutableList<PlanTransformer> planTransformers = extensions.flatCollect(PlanGeneratorExtension::getExtraPlanTransformers);
            ServiceExecutionGenerator.newGenerator(service, pureModel, this.packagePrefix, this.javaSourceOutputDirectory.toPath(), this.resourceOutputDirectory.toPath(), jsonMapper, routerExtensions, planTransformers, null).generate();
        } catch (Exception e) {
            throw new MojoExecutionException("Error generating execution artifacts for " + service.getPath(), e);
        }
        long serviceEnd = System.nanoTime();
        getLog().info(String.format("Finished generating execution artifacts for %s (%.9fs)", service.getPath(), (serviceEnd - serviceStart) / 1_000_000_000.0));
    }
    long end = System.nanoTime();
    getLog().info(String.format("Finished generating execution artifacts for %d services (%.9fs)", servicesByPath.size(), (end - start) / 1_000_000_000.0));
}
Also used : Arrays(java.util.Arrays) PackageableElement(org.finos.legend.engine.protocol.pure.v1.model.packageableElement.PackageableElement) Lists(org.eclipse.collections.api.factory.Lists) Parameter(org.apache.maven.plugins.annotations.Parameter) MutableList(org.eclipse.collections.api.list.MutableList) EntityToPureConverter(org.finos.legend.sdlc.protocol.pure.v1.EntityToPureConverter) ArrayList(java.util.ArrayList) MapperFeature(com.fasterxml.jackson.databind.MapperFeature) Mojo(org.apache.maven.plugins.annotations.Mojo) RichIterable(org.eclipse.collections.api.RichIterable) EntityLoader(org.finos.legend.sdlc.serialization.EntityLoader) PureModelContextData(org.finos.legend.engine.protocol.pure.v1.model.context.PureModelContextData) Entity(org.finos.legend.sdlc.domain.model.entity.Entity) Map(java.util.Map) LifecyclePhase(org.apache.maven.plugins.annotations.LifecyclePhase) PlanTransformer(org.finos.legend.engine.plan.generation.transformers.PlanTransformer) PureModelBuilder(org.finos.legend.sdlc.language.pure.compiler.toPureGraph.PureModelBuilder) PureModel(org.finos.legend.engine.language.pure.compiler.toPureGraph.PureModel) Set(java.util.Set) ServiceLoader(java.util.ServiceLoader) StreamWriteFeature(com.fasterxml.jackson.core.StreamWriteFeature) MojoExecutionException(org.apache.maven.plugin.MojoExecutionException) StreamReadFeature(com.fasterxml.jackson.core.StreamReadFeature) JsonMapper(com.fasterxml.jackson.databind.json.JsonMapper) Collectors(java.util.stream.Collectors) Root_meta_pure_router_extension_RouterExtension(org.finos.legend.pure.generated.Root_meta_pure_router_extension_RouterExtension) File(java.io.File) SourceVersion(javax.lang.model.SourceVersion) List(java.util.List) Service(org.finos.legend.engine.protocol.pure.v1.model.packageableElement.service.Service) JsonInclude(com.fasterxml.jackson.annotation.JsonInclude) PureProtocolObjectMapperFactory(org.finos.legend.engine.protocol.pure.v1.PureProtocolObjectMapperFactory) SerializationFeature(com.fasterxml.jackson.databind.SerializationFeature) Comparator(java.util.Comparator) AbstractMojo(org.apache.maven.plugin.AbstractMojo) PlanGeneratorExtension(org.finos.legend.engine.plan.generation.extension.PlanGeneratorExtension) MojoExecutionException(org.apache.maven.plugin.MojoExecutionException) EntityLoader(org.finos.legend.sdlc.serialization.EntityLoader) PlanTransformer(org.finos.legend.engine.plan.generation.transformers.PlanTransformer) Service(org.finos.legend.engine.protocol.pure.v1.model.packageableElement.service.Service) PureModel(org.finos.legend.engine.language.pure.compiler.toPureGraph.PureModel) MojoExecutionException(org.apache.maven.plugin.MojoExecutionException) JsonMapper(com.fasterxml.jackson.databind.json.JsonMapper) PlanGeneratorExtension(org.finos.legend.engine.plan.generation.extension.PlanGeneratorExtension) PureModelContextData(org.finos.legend.engine.protocol.pure.v1.model.context.PureModelContextData) PureModelBuilder(org.finos.legend.sdlc.language.pure.compiler.toPureGraph.PureModelBuilder)

Aggregations

PlanTransformer (org.finos.legend.engine.plan.generation.transformers.PlanTransformer)3 Map (java.util.Map)2 RichIterable (org.eclipse.collections.api.RichIterable)2 MutableList (org.eclipse.collections.api.list.MutableList)2 PureModel (org.finos.legend.engine.language.pure.compiler.toPureGraph.PureModel)2 PlanGeneratorExtension (org.finos.legend.engine.plan.generation.extension.PlanGeneratorExtension)2 PureModelContextData (org.finos.legend.engine.protocol.pure.v1.model.context.PureModelContextData)2 Root_meta_pure_router_extension_RouterExtension (org.finos.legend.pure.generated.Root_meta_pure_router_extension_RouterExtension)2 Entity (org.finos.legend.sdlc.domain.model.entity.Entity)2 JsonInclude (com.fasterxml.jackson.annotation.JsonInclude)1 StreamReadFeature (com.fasterxml.jackson.core.StreamReadFeature)1 StreamWriteFeature (com.fasterxml.jackson.core.StreamWriteFeature)1 MapperFeature (com.fasterxml.jackson.databind.MapperFeature)1 SerializationFeature (com.fasterxml.jackson.databind.SerializationFeature)1 JsonMapper (com.fasterxml.jackson.databind.json.JsonMapper)1 File (java.io.File)1 PrintWriter (java.io.PrintWriter)1 StringWriter (java.io.StringWriter)1 ArrayList (java.util.ArrayList)1 Arrays (java.util.Arrays)1