in tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PrepareCamelMainMojo.java [180:459]
public void execute() throws MojoExecutionException, MojoFailureException {
// scan for configuration files
File[] files = new File(project.getBasedir(), "src/main/java/org/apache/camel/main")
.listFiles(f -> f.isFile() && f.getName().endsWith("Properties.java"));
if (files == null || files.length == 0) {
return;
}
final List<MainModel.MainOptionModel> data = new ArrayList<>();
for (File file : files) {
getLog().info("Parsing Camel Main configuration file: " + file);
try {
List<MainModel.MainOptionModel> model = parseConfigurationSource(file);
// compute prefix for name
String prefix;
if (file.getName().contains("Resilience")) {
prefix = "camel.resilience4j.";
} else if (file.getName().contains("FaultTolerance")) {
prefix = "camel.faulttolerance.";
} else if (file.getName().contains("Rest")) {
prefix = "camel.rest.";
} else if (file.getName().contains("AwsVault")) {
prefix = "camel.vault.aws.";
} else if (file.getName().contains("GcpVault")) {
prefix = "camel.vault.gcp.";
} else if (file.getName().contains("AzureVault")) {
prefix = "camel.vault.azure.";
} else if (file.getName().contains("KubernetesVault")) {
prefix = "camel.vault.kubernetes.";
} else if (file.getName().contains("KubernetesConfigMapVault")) {
prefix = "camel.vault.kubernetescm.";
} else if (file.getName().contains("HashicorpVault")) {
prefix = "camel.vault.hashicorp.";
} else if (file.getName().contains("IBMSecretsManagerVault")) {
prefix = "camel.vault.ibm.";
} else if (file.getName().contains("SpringCloudConfig")) {
prefix = "camel.vault.springConfig.";
} else if (file.getName().contains("Health")) {
prefix = "camel.health.";
} else if (file.getName().contains("StartupCondition")) {
prefix = "camel.startupcondition.";
} else if (file.getName().contains("Lra")) {
prefix = "camel.lra.";
} else if (file.getName().contains("Otel2")) {
prefix = "camel.opentelemetry2.";
} else if (file.getName().contains("Otel") && !file.getName().contains("Otel2")) {
prefix = "camel.opentelemetry.";
} else if (file.getName().contains("TelemetryDev")) {
prefix = "camel.telemetryDev.";
} else if (file.getName().contains("Metrics")) {
prefix = "camel.metrics.";
} else if (file.getName().contains("HttpServer")) {
prefix = "camel.server.";
} else if (file.getName().contains("HttpManagementServer")) {
prefix = "camel.management.";
} else if (file.getName().contains("ThreadPoolProfileConfigurationProperties")) {
// skip this file
continue;
} else if (file.getName().contains("ThreadPoolConfigurationProperties")) {
prefix = "camel.threadpool.";
} else if (file.getName().contains("SSLConfigurationProperties")) {
prefix = "camel.ssl.";
} else if (file.getName().contains("DebuggerConfigurationProperties")) {
prefix = "camel.debug.";
} else if (file.getName().contains("TracerConfigurationProperties")) {
prefix = "camel.trace.";
} else if (file.getName().contains("RouteControllerConfigurationProperties")) {
prefix = "camel.routecontroller.";
} else {
prefix = "camel.main.";
}
final String namePrefix = prefix;
model.forEach(m -> m.setName(namePrefix + m.getName()));
data.addAll(model);
} catch (Exception e) {
throw new MojoFailureException("Error parsing file " + file + " due " + e.getMessage(), e);
}
}
// include additional rest configuration from camel-api
File camelApiDir = PackageHelper.findCamelDirectory(project.getBasedir(), "core/camel-api");
File restConfig = new File(camelApiDir, "src/main/java/org/apache/camel/spi/RestConfiguration.java");
try {
List<MainModel.MainOptionModel> model = parseConfigurationSource(restConfig);
model.forEach(m -> m.setName("camel.rest." + m.getName()));
data.addAll(model);
} catch (Exception e) {
throw new MojoFailureException("Error parsing file " + restConfig + " due " + e.getMessage(), e);
}
// include additional vault configuration from camel-api
// TODO: add more vault providers here
File awsVaultConfig = new File(camelApiDir, "src/main/java/org/apache/camel/vault/AwsVaultConfiguration.java");
try {
List<MainModel.MainOptionModel> model = parseConfigurationSource(awsVaultConfig);
model.forEach(m -> m.setName("camel.vault.aws." + m.getName()));
data.addAll(model);
} catch (Exception e) {
throw new MojoFailureException("Error parsing file " + awsVaultConfig + " due " + e.getMessage(), e);
}
File gcpVaultConfig = new File(camelApiDir, "src/main/java/org/apache/camel/vault/GcpVaultConfiguration.java");
try {
List<MainModel.MainOptionModel> model = parseConfigurationSource(gcpVaultConfig);
model.forEach(m -> m.setName("camel.vault.gcp." + m.getName()));
data.addAll(model);
} catch (Exception e) {
throw new MojoFailureException("Error parsing file " + gcpVaultConfig + " due " + e.getMessage(), e);
}
File azureVaultConfig = new File(camelApiDir, "src/main/java/org/apache/camel/vault/AzureVaultConfiguration.java");
try {
List<MainModel.MainOptionModel> model = parseConfigurationSource(azureVaultConfig);
model.forEach(m -> m.setName("camel.vault.azure." + m.getName()));
data.addAll(model);
} catch (Exception e) {
throw new MojoFailureException("Error parsing file " + azureVaultConfig + " due " + e.getMessage(), e);
}
File kubernetesVaultConfig
= new File(camelApiDir, "src/main/java/org/apache/camel/vault/KubernetesVaultConfiguration.java");
try {
List<MainModel.MainOptionModel> model = parseConfigurationSource(kubernetesVaultConfig);
model.forEach(m -> m.setName("camel.vault.kubernetes." + m.getName()));
data.addAll(model);
} catch (Exception e) {
throw new MojoFailureException("Error parsing file " + kubernetesVaultConfig + " due " + e.getMessage(), e);
}
File springCloudConfigConfig
= new File(camelApiDir, "src/main/java/org/apache/camel/vault/SpringCloudConfigConfiguration.java");
try {
List<MainModel.MainOptionModel> model = parseConfigurationSource(springCloudConfigConfig);
model.forEach(m -> m.setName("camel.vault.springConfig." + m.getName()));
data.addAll(model);
} catch (Exception e) {
throw new MojoFailureException("Error parsing file " + springCloudConfigConfig + " due " + e.getMessage(), e);
}
File kubernetesConfigmapsVaultConfig
= new File(camelApiDir, "src/main/java/org/apache/camel/vault/KubernetesConfigMapVaultConfiguration.java");
try {
List<MainModel.MainOptionModel> model = parseConfigurationSource(kubernetesConfigmapsVaultConfig);
model.forEach(m -> m.setName("camel.vault.kubernetescm." + m.getName()));
data.addAll(model);
} catch (Exception e) {
throw new MojoFailureException(
"Error parsing file " + kubernetesConfigmapsVaultConfig + " due " + e.getMessage(), e);
}
File hashicorpVaultConfig
= new File(camelApiDir, "src/main/java/org/apache/camel/vault/HashicorpVaultConfiguration.java");
try {
List<MainModel.MainOptionModel> model = parseConfigurationSource(hashicorpVaultConfig);
model.forEach(m -> m.setName("camel.vault.hashicorp." + m.getName()));
data.addAll(model);
} catch (Exception e) {
throw new MojoFailureException("Error parsing file " + hashicorpVaultConfig + " due " + e.getMessage(), e);
}
File ibmVaultConfig
= new File(camelApiDir, "src/main/java/org/apache/camel/vault/IBMSecretsManagerVaultConfiguration.java");
try {
List<MainModel.MainOptionModel> model = parseConfigurationSource(ibmVaultConfig);
model.forEach(m -> m.setName("camel.vault.ibm." + m.getName()));
data.addAll(model);
} catch (Exception e) {
throw new MojoFailureException("Error parsing file " + ibmVaultConfig + " due " + e.getMessage(), e);
}
// lets sort so they are always ordered (but camel.main in top)
data.sort((o1, o2) -> {
if (o1.getName().startsWith("camel.main.") && !o2.getName().startsWith("camel.main.")) {
return -1;
} else if (!o1.getName().startsWith("camel.main.") && o2.getName().startsWith("camel.main.")) {
return 1;
} else {
return o1.getName().compareToIgnoreCase(o2.getName());
}
});
if (!data.isEmpty()) {
MainModel model = new MainModel();
model.getOptions().addAll(data);
model.getGroups().add(new MainGroupModel(
"camel.main", "Camel Main configurations", "org.apache.camel.main.DefaultConfigurationProperties"));
model.getGroups().add(new MainGroupModel(
"camel.startupcondition", "Camel Startup Condition configurations",
"org.apache.camel.main.StartupConditionConfigurationProperties"));
model.getGroups()
.add(new MainGroupModel(
"camel.routecontroller", "Camel Route Controller configurations",
"org.apache.camel.main.RouteControllerConfigurationProperties"));
model.getGroups().add(new MainGroupModel(
"camel.server",
"Camel Embedded HTTP Server (only for standalone; not Spring Boot or Quarkus) configurations",
"org.apache.camel.main.HttpServerConfigurationProperties"));
model.getGroups().add(new MainGroupModel(
"camel.management",
"Camel Embedded HTTP management Server (only for standalone; not Spring Boot or Quarkus) configurations",
"org.apache.camel.main.HttpManagementServerConfigurationProperties"));
model.getGroups()
.add(new MainGroupModel(
"camel.debug", "Camel Debugger configurations",
"org.apache.camel.main.DebuggerConfigurationProperties"));
model.getGroups()
.add(new MainGroupModel(
"camel.trace", "Camel Tracer configurations",
"org.apache.camel.main.TracerConfigurationProperties"));
model.getGroups()
.add(new MainGroupModel(
"camel.ssl", "Camel SSL configurations",
"org.apache.camel.main.SSLConfigurationProperties"));
model.getGroups()
.add(new MainGroupModel(
"camel.threadpool", "Camel Thread Pool configurations",
"org.apache.camel.main.ThreadPoolConfigurationProperties"));
model.getGroups().add(new MainGroupModel(
"camel.health", "Camel Health Check configurations",
"org.apache.camel.main.HealthConfigurationProperties"));
model.getGroups().add(
new MainGroupModel(
"camel.rest", "Camel Rest-DSL configurations", "org.apache.camel.spi.RestConfiguration"));
model.getGroups().add(
new MainGroupModel(
"camel.vault.aws", "Camel AWS Vault configurations",
"org.apache.camel.vault.AwsVaultConfiguration"));
model.getGroups().add(
new MainGroupModel(
"camel.vault.gcp", "Camel GCP Vault configurations",
"org.apache.camel.vault.GcpVaultConfiguration"));
model.getGroups().add(
new MainGroupModel(
"camel.vault.azure", "Camel Azure Key Vault configurations",
"org.apache.camel.vault.AzureVaultConfiguration"));
model.getGroups().add(
new MainGroupModel(
"camel.vault.kubernetes", "Camel Kubernetes Vault configurations",
"org.apache.camel.vault.KubernetesVaultConfiguration"));
model.getGroups().add(
new MainGroupModel(
"camel.vault.kubernetescm", "Camel Kubernetes Configmaps Vault configurations",
"org.apache.camel.vault.KubernetesConfigMapVaultConfiguration"));
model.getGroups().add(
new MainGroupModel(
"camel.vault.hashicorp", "Camel Hashicorp Vault configurations",
"org.apache.camel.vault.HashicorpVaultConfiguration"));
model.getGroups().add(
new MainGroupModel(
"camel.vault.ibm", "Camel IBM Secrets Manager Vault configurations",
"org.apache.camel.vault.IBMSecretsManagerVaultConfiguration"));
model.getGroups().add(new MainGroupModel(
"camel.opentelemetry", "Camel OpenTelemetry configurations",
"org.apache.camel.main.OtelConfigurationProperties"));
model.getGroups().add(new MainGroupModel(
"camel.opentelemetry2", "Camel OpenTelemetry 2 configurations",
"org.apache.camel.main.Otel2ConfigurationProperties"));
model.getGroups().add(new MainGroupModel(
"camel.telemetryDev", "Camel Telemetry Dev configurations",
"org.apache.camel.main.TelemetryDevConfigurationProperties"));
model.getGroups().add(new MainGroupModel(
"camel.metrics", "Camel Micrometer Metrics configurations",
"org.apache.camel.main.MetricsConfigurationProperties"));
model.getGroups()
.add(new MainGroupModel(
"camel.faulttolerance", "Fault Tolerance EIP Circuit Breaker configurations",
"org.apache.camel.main.FaultToleranceConfigurationProperties"));
model.getGroups()
.add(new MainGroupModel(
"camel.resilience4j", "Resilience4j EIP Circuit Breaker configurations",
"org.apache.camel.main.Resilience4jConfigurationProperties"));
model.getGroups().add(new MainGroupModel(
"camel.lra", "Camel Saga EIP (Long Running Actions) configurations",
"org.apache.camel.main.LraConfigurationProperties"));
String json = JsonMapper.createJsonSchema(model);
updateResource(outFolder.toPath(), "META-INF/camel-main-configuration-metadata.json", json);
}
}