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);
}
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);
}
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));
}
Aggregations