use of org.finos.legend.sdlc.language.pure.compiler.toPureGraph.PureModelBuilder in project legend-sdlc by finos.
the class FileGenerationMojo method execute.
@Override
public void execute() throws MojoExecutionException {
long generateStart = System.nanoTime();
if (this.inclusions != null) {
getLog().info("include generation specification paths: " + this.inclusions.paths);
getLog().info("include generation specification packages: " + this.inclusions.packages);
getLog().info("include generation specification directories: " + Arrays.toString(this.inclusions.directories));
}
if (this.exclusions != null) {
getLog().info("exclude generation specification paths: " + this.exclusions.paths);
getLog().info("exclude generation specification packages: " + this.exclusions.packages);
getLog().info("exclude generation specification directories: " + Arrays.toString(this.exclusions.directories));
}
getLog().info("Output directory: " + this.outputDirectory);
// Load Model
long modelStart = System.nanoTime();
getLog().info("Start loading model");
PureModelBuilder pureModelBuilder = PureModelBuilder.newBuilder();
try (EntityLoader allEntities = EntityLoader.newEntityLoader(Thread.currentThread().getContextClassLoader())) {
pureModelBuilder.addEntitiesIfPossible(allEntities.getAllEntities());
int entityCount = pureModelBuilder.getElementCount();
getLog().info("Found " + entityCount + " entities");
if (entityCount == 0) {
long modelEnd = System.nanoTime();
getLog().info(String.format("Finished loading model (%.9fs)", (modelEnd - modelStart) / 1_000_000_000.0));
getLog().info("No elements found to generate");
return;
}
} catch (Exception e) {
throw new MojoExecutionException("Error loading entities from model", e);
}
getLog().info("Compiling model");
PureModelBuilder.PureModelWithContextData pureModelWithContextData = pureModelBuilder.build();
PureModelContextData pureModelContextData = pureModelWithContextData.getPureModelContextData();
PureModel pureModel = pureModelWithContextData.getPureModel();
long modelEnd = System.nanoTime();
getLog().info(String.format("Finished loading and compiling model (%.9fs)", (modelEnd - modelStart) / 1_000_000_000.0));
Map<String, GenerationSpecification> generationSpecificationMap = LazyIterate.selectInstancesOf(pureModelContextData.getElements(), GenerationSpecification.class).groupByUniqueKey(PackageableElement::getPath, Maps.mutable.empty());
filterGenerationSpecsByIncludes(generationSpecificationMap);
filterGenerationSpecsByExcludes(generationSpecificationMap);
if (generationSpecificationMap.isEmpty()) {
getLog().info("No generation specification found, nothing to generate");
return;
}
if (generationSpecificationMap.size() > 1) {
throw new MojoExecutionException(Iterate.toSortedList(generationSpecificationMap.keySet()).makeString("Only 1 generation specification allowed, found " + generationSpecificationMap.size() + ": ", ", ", ""));
}
try {
// Start generating
GenerationSpecification generationSpecification = generationSpecificationMap.values().iterator().next();
getLog().info(String.format("Start generating file generations for generation specification '%s', %,d file generations found", generationSpecification.getPath(), generationSpecification.fileGenerations.size()));
FileGenerationFactory fileGenerationFactory = FileGenerationFactory.newFactory(generationSpecification, pureModelContextData, pureModel);
MutableMap<FileGenerationSpecification, List<GenerationOutput>> outputs = fileGenerationFactory.generateFiles();
serializeOutput(outputs);
getLog().info(String.format("Done (%.9fs)", (System.nanoTime() - generateStart) / 1_000_000_000.0));
} catch (Exception e) {
throw new MojoExecutionException("Error generating files: " + e.getMessage(), e);
}
}
use of org.finos.legend.sdlc.language.pure.compiler.toPureGraph.PureModelBuilder in project legend-sdlc by finos.
the class ModelGenerationMojo method execute.
@Override
public void execute() throws MojoExecutionException {
long generateStart = System.nanoTime();
if (this.inclusions != null) {
getLog().info("include generation specification paths: " + this.inclusions.paths);
getLog().info("include generation specification packages: " + this.inclusions.packages);
getLog().info("include generation specification directories: " + Arrays.toString(this.inclusions.directories));
}
if (this.exclusions != null) {
getLog().info("exclude generation specification paths: " + this.exclusions.paths);
getLog().info("exclude generation specification packages: " + this.exclusions.packages);
getLog().info("exclude generation specification directories: " + Arrays.toString(this.exclusions.directories));
}
getLog().info("Output directory: " + this.outputDirectory);
// Load Model
long modelStart = System.nanoTime();
getLog().info("Start loading model");
PureModelBuilder pureModelBuilder = PureModelBuilder.newBuilder();
try (EntityLoader allEntities = EntityLoader.newEntityLoader(Thread.currentThread().getContextClassLoader())) {
pureModelBuilder.addEntitiesIfPossible(allEntities.getAllEntities());
int entityCount = pureModelBuilder.getElementCount();
getLog().info("Found " + entityCount + " entities");
if (entityCount == 0) {
long modelEnd = System.nanoTime();
getLog().info(String.format("Finished loading model (%.9fs)", (modelEnd - modelStart) / 1_000_000_000.0));
getLog().info("No elements found to generate");
return;
}
} catch (Exception e) {
throw new MojoExecutionException("Error loading entities from model", e);
}
PureModelBuilder.PureModelWithContextData pureModelWithContextData = pureModelBuilder.build();
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));
// Checks/Filters on generation specifications
Map<String, GenerationSpecification> generationSpecificationMap = Iterate.groupByUniqueKey(pureModelContextData.getElementsOfType(GenerationSpecification.class), PackageableElement::getPath);
filterGenerationSpecsByIncludes(generationSpecificationMap);
filterGenerationSpecsByExcludes(generationSpecificationMap);
if (generationSpecificationMap.isEmpty()) {
getLog().info("No generation specification found, nothing to generate");
return;
}
if (generationSpecificationMap.size() > 1) {
throw new MojoExecutionException("Only one generation specification allowed, found: " + generationSpecificationMap.size());
}
try {
// Start generating
GenerationSpecification generationSpecification = generationSpecificationMap.values().iterator().next();
ModelGenerationFactory modelGenerationFactory = ModelGenerationFactory.newFactory(generationSpecification, pureModelContextData, pureModel);
PureModelContextData fullGeneratedModel = modelGenerationFactory.generate();
serializePureModelContextData(fullGeneratedModel);
getLog().info(String.format("Done (%.9fs)", (System.nanoTime() - generateStart) / 1_000_000_000.0));
} catch (Exception e) {
throw new MojoExecutionException("Error generating model generation: " + e.getMessage(), e);
}
}
use of org.finos.legend.sdlc.language.pure.compiler.toPureGraph.PureModelBuilder 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