leds-spark-lib
Version:
Biblioteca de geração de código
245 lines (212 loc) • 7.96 kB
JavaScript
import path from 'path';
import fs from 'fs';
import { createPath } from '../../models/model.js';
import { expandToStringWithNL, toString } from 'langium/generate';
import { isModuleImport } from '../../models/model.js';
export function generateConfigs(model, target_folder) {
if (model.configuration) {
fs.writeFileSync(path.join(target_folder, 'Dockerfile'), toString(generateDockerFile()));
fs.writeFileSync(path.join(target_folder, 'docker-compose-database.yml'), toString(generateComposeDatabase(model.configuration)));
fs.writeFileSync(path.join(target_folder, 'docker-compose.yml'), toString(generateCompose(model.configuration)));
const RESOURCE_PATH = createPath(target_folder, "src/main/resources");
fs.writeFileSync(path.join(target_folder, 'pom.xml'), toString(generatePOMXML(model)));
fs.writeFileSync(path.join(RESOURCE_PATH, 'logback.xml'), toString(generatelogback()));
fs.writeFileSync(path.join(RESOURCE_PATH, 'application.properties'), toString(applicationProperties(model.configuration)));
}
}
function generateDockerFile() {
return expandToStringWithNL `
# Use an official Maven image as the base image
FROM maven:3.8.4-openjdk-17-slim
# Set the working directory inside the container
WORKDIR /app
# Copy the Maven project file and download dependencies
COPY pom.xml .
RUN mvn dependency:go-offline
# Copy the application source code
COPY src ./src
# Build the application
RUN mvn package
# Expose the port that the application will run on
EXPOSE 8080
# Specify the command to run your application
CMD ["mvn", "spring-boot:run"]
`;
}
function applicationProperties(configuration) {
return expandToStringWithNL `
spring.datasource.initialization-mode=always
spring.datasource.url = jdbc:postgresql://localhost:5432/${configuration.database_name}
spring.datasource.username = postgres
spring.datasource.password = postgres
spring.datasource.platform= postgres
#spring.jpa.hibernate.ddl-auto = update
spring.jpa.hibernate.ddl-auto = create-drop
spring.jpa.properties.javax.persistence.schema-generation.create-source=metadata
spring.jpa.properties.javax.persistence.schema-generation.scripts.action=create-drop
spring.jpa.properties.javax.persistence.schema-generation.scripts.drop-target=sql/${configuration.database_name?.toLowerCase()}.sql
spring.jpa.properties.javax.persistence.schema-generation.scripts.create-target=sql/${configuration.database_name?.toLowerCase()}.sql
logging.level.org.hibernate.SQL=DEBUG
server.port=8081
springdoc.swagger-ui.path=/
springdoc.packagesToScan=${configuration.package_path}.*
spring.graphql.graphiql.enabled: true
spring.graphql.schema.locations=classpath:graphql/
spring.graphql.schema.fileExtensions=.graphqls, .gqls
`;
}
function generatelogback() {
return expandToStringWithNL `
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
</pattern>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="STDOUT" />
</root>
</configuration>
`;
}
function generatePOMXML(application) {
const name = application.configuration?.name?.toLocaleLowerCase();
return expandToStringWithNL `
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.1.0</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>${application.configuration?.package_path?.toLocaleLowerCase()}.service.</groupId>
<artifactId>${name}</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>${name}</name>
<description>${application.configuration?.description}</description>
<properties>
<java.version>17</java.version>
<start-class>${application.configuration?.package_path}.service.${name}.application.Application</start-class>
</properties>
<repositories>
<repository>
<id>gitlab-maven</id>
<url>https://gitlab.com/api/v4/groups/#change/-/packages/maven</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>${application.configuration?.package_path}.entity</groupId>
<artifactId>${name}</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
${application.abstractElements.filter(isModuleImport).map(moduleImport => generateOntologyDependency(moduleImport)).join("\n")}
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-commons</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-common</artifactId>
<version>2.0.2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-graphql</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>2.0.2</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
`;
}
function generateOntologyDependency(moduleImported) {
return expandToStringWithNL `
<dependency>
<groupId>${moduleImported.package_path.toLowerCase()}</groupId>
<artifactId>${moduleImported.library.toLowerCase()}</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
`;
}
function generateCompose(configuration) {
const name = configuration.name?.toLocaleLowerCase();
return expandToStringWithNL `
version: '3.9'
services:
ontology_service:
container_name: ${name}_service
build: .
image: registry.gitlab.com/immigrant-data-driven-development/services/${name}
ports:
- "8080:8080"
networks:
default:
name: base-infrastrutrure
external: true
`;
}
function generateComposeDatabase(configuration) {
const projectName = configuration.name?.toLocaleLowerCase();
const databaseName = configuration.database_name?.toLocaleLowerCase();
return expandToStringWithNL `
version: '3.7'
services:
postgres:
image: postgres
ports:
- "5432:5432"
restart: always
environment:
POSTGRES_PASSWORD: postgres
POSTGRES_DB: ${databaseName ?? projectName ?? '-'}
POSTGRES_USER: postgres
volumes:
- ./data:/var/lib/postgresql
- ./pg-initdb.d:/docker-entrypoint-initdb.d
`;
}
//# sourceMappingURL=config-generator.js.map