
com.sap.cloud.sdk.service.csn2jpa.mvn.Csn2JpaPlugin Maven / Gradle / Ivy
/*******************************************************************************
* * © 2018 SAP SE or an SAP affiliate company. All rights reserved. *
******************************************************************************/
package com.sap.cloud.sdk.service.csn2jpa.mvn;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.function.Consumer;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.plugin.logging.Log;
import org.apache.maven.plugins.annotations.LifecyclePhase;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
import com.sap.cloud.sdk.service.cds.tools.generator.api.FileSystem;
import com.sap.cloud.sdk.service.cds.tools.generator.api.GeneratedFile;
import com.sap.cloud.sdk.service.cds.tools.generator.api.GeneratorMode;
import com.sap.cloud.sdk.service.cds.tools.generator.api.AbstractGenerator.Result;
import com.sap.cloud.sdk.service.cds.tools.generator.api.AbstractGenerator.Result.Status;
import com.sap.cloud.sdk.service.cds.tools.reader.issuecollector.IssueType;
import com.sap.cloud.sdk.service.csn2jpa.api.Csn2Jpa;
import com.sap.cloud.sdk.service.csn2jpa.jpa.Configuration;
import com.sap.cloud.sdk.service.csn2jpa.jpa.ConfigurationImpl;
@Mojo(name = "csn2jpa", defaultPhase = LifecyclePhase.GENERATE_RESOURCES, threadSafe = false, requiresProject = false)
public class Csn2JpaPlugin extends AbstractMojo {
@Parameter(property = "csnFile", required = true)
private String csnFile;
@Parameter(property = "outputDirectory", required = false, defaultValue = "src/gen")
private String outputDirectory;
@Parameter(property = "persistenceXml", required = false)
private String persistenceXml;
@Parameter(property = "persistenceUnitName", required = false)
private String persistenceUnitName;
@Parameter(property = "persistenceProvider", required = false)
private String persistenceProvider;
@Parameter(property = "basePackage", required = false)
private String basePackage;
@Parameter(property = "namingScheme", required = false)
private String namingScheme;
@Parameter(property = "generateEnums", required = false)
private boolean generateEnums;
@Parameter(property = "implementSerializable", required = false)
private boolean implementSerializable;
@Parameter(property = "parserMode", required = false)
private String parserMode;
@Parameter(property = "generatorMode", required = false)
private String generatorMode;
@Override
public void execute() throws MojoFailureException {
Configuration cfg;
Result result;
try {
cfg = createConfig();
GeneratedFile.Accessor fs = new FileSystem(Paths.get(outputDirectory), true);
result = new Csn2Jpa(cfg).generate(() -> Files.readAllBytes(Paths.get(csnFile)), fs, fs);
} catch (Exception e) { // NOSONAR: catch all exceptions
throw new MojoFailureException("Failed to generate JPA classes: ", e);
}
final Log logger = getLog();
if (result.getStatus() == Status.SUCCESS) {
logger.info("Class generation finished successfull");
} else {
logger.error("Class generation failed");
}
result.getIssues().stream().forEach(issue -> {
String msg = String.format("[%s] %s : %s", issue.getType(), issue.getLocation(), issue.getMessage());
if ((issue.getType() == IssueType.CRITICAL)
|| (issue.getType() == IssueType.ERROR && cfg.getGeneratorMode() == GeneratorMode.STRICT)) {
logger.error(msg);
} else {
logger.warn(msg);
}
});
if (result.getStatus() == Status.FAILURE) {
throw new MojoFailureException("Failed to generate JPA classes");
}
}
private Configuration createConfig() {
ConfigurationImpl cfg = new ConfigurationImpl();
setIfNotNull(cfg::setPersistenceXml, persistenceXml);
setIfNotNull(cfg::setPersistenceUnitName, persistenceUnitName);
setIfNotNull(cfg::setPersistenceProvider, persistenceProvider);
setIfNotNull(cfg::setBasePackage, basePackage);
setIfNotNull(cfg::setImplementSerializable, implementSerializable);
setIfNotNull(cfg::setGenerateEnums, generateEnums);
setIfNotNull(cfg::setParserMode, parserMode);
setIfNotNull(cfg::setGeneratorMode, generatorMode);
setIfNotNull(cfg::setNamingScheme, namingScheme);
return cfg;
}
private void setIfNotNull(Consumer setter, T value) {
if (value != null) {
setter.accept(value);
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy