blob: e33f2eb17fc2a28f8a34994d9153f35c6255e48e [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.camel.k.tooling.maven.processors;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import com.vdurmont.semver4j.Semver;
import org.apache.camel.catalog.CamelCatalog;
import org.apache.camel.catalog.DefaultRuntimeProvider;
import org.apache.camel.catalog.quarkus.QuarkusRuntimeProvider;
import org.apache.camel.k.tooling.maven.model.CamelArtifact;
import org.apache.camel.k.tooling.maven.model.CamelLoader;
import org.apache.camel.k.tooling.maven.model.CamelScheme;
import org.apache.camel.k.tooling.maven.model.CatalogComponentDefinition;
import org.apache.camel.k.tooling.maven.model.CatalogDataFormatDefinition;
import org.apache.camel.k.tooling.maven.model.CatalogDefinition;
import org.apache.camel.k.tooling.maven.model.CatalogLanguageDefinition;
import org.apache.camel.k.tooling.maven.model.CatalogProcessor;
import org.apache.camel.k.tooling.maven.model.CatalogSupport;
import org.apache.camel.k.tooling.maven.model.MavenArtifact;
import org.apache.camel.k.tooling.maven.model.crd.CamelCatalogSpec;
import org.apache.commons.lang3.StringUtils;
import org.apache.maven.project.MavenProject;
public class CatalogProcessor3x implements CatalogProcessor {
private static final List<String> KNOWN_HTTP_URIS = Arrays.asList(
"ahc",
"ahc-ws",
"atmosphere-websocket",
"cxf",
"cxfrs",
"grpc",
"jetty",
"netty-http",
"platform-http",
"rest",
"restlet",
"servlet",
"spark-rest",
"spring-ws",
"undertow",
"webhook",
"websocket"
);
private static final List<String> KNOWN_PASSIVE_URIS = Arrays.asList(
"bean",
"binding",
"browse",
"class",
"controlbus",
"dataformat",
"dataset",
"direct",
"direct-vm",
"language",
"log",
"mock",
"ref",
"seda",
"stub",
"test",
"validator",
"vm"
);
@Override
public int getOrder() {
return HIGHEST;
}
@Override
public boolean accepts(CamelCatalog catalog) {
Semver semver = new Semver(catalog.getCatalogVersion(), Semver.SemverType.IVY);
return semver.isGreaterThan("2.999.999") && semver.isLowerThan("4.0.0");
}
@Override
public void process(MavenProject project, CamelCatalog catalog, CamelCatalogSpec.Builder specBuilder) {
Map<String, CamelArtifact> artifacts = new HashMap<>();
processComponents(catalog, artifacts);
processLanguages(catalog, artifacts);
processDataFormats(catalog, artifacts);
processLoaders(catalog, specBuilder);
artifacts.computeIfPresent("camel-http",
(key, artifact) -> new CamelArtifact.Builder()
.from(artifact)
.addDependencies(MavenArtifact.from("org.apache.camel", "camel-file"))
.build()
);
specBuilder.putAllArtifacts(artifacts);
specBuilder.putArtifact("org.apache.camel.k", "camel-k-loader-yaml");
specBuilder.putArtifact("org.apache.camel.k", "camel-k-loader-groovy");
specBuilder.putArtifact("org.apache.camel.k", "camel-k-loader-kotlin");
specBuilder.putArtifact("org.apache.camel.k", "camel-k-loader-js");
specBuilder.putArtifact("org.apache.camel.k", "camel-k-loader-xml");
specBuilder.putArtifact("org.apache.camel.k", "camel-k-loader-java");
specBuilder.putArtifact(
new CamelArtifact.Builder()
.groupId("org.apache.camel.k")
.artifactId("camel-k-runtime-main")
.build()
);
specBuilder.putArtifact(
new CamelArtifact.Builder()
.groupId("org.apache.camel.k")
.artifactId("camel-k-runtime-health")
.build()
);
specBuilder.putArtifact(
new CamelArtifact.Builder()
.groupId("org.apache.camel.k")
.artifactId("camel-k-runtime-http")
.build()
);
specBuilder.putArtifact(
new CamelArtifact.Builder()
.groupId("org.apache.camel.k")
.artifactId("camel-k-runtime-webhook")
.build()
);
specBuilder.putArtifact(
new CamelArtifact.Builder()
.groupId("org.apache.camel.k")
.artifactId("camel-k-runtime-cron")
.build()
);
specBuilder.putArtifact(
new CamelArtifact.Builder()
.groupId("org.apache.camel.k")
.artifactId("camel-k-runtime-knative")
.addDependencies(
() -> catalog.getRuntimeProvider() instanceof DefaultRuntimeProvider,
MavenArtifact.from("org.apache.camel.k", "camel-k-loader-yaml"),
MavenArtifact.from("org.apache.camel.k", "camel-knative-api"),
MavenArtifact.from("org.apache.camel.k", "camel-knative"),
MavenArtifact.from("org.apache.camel.k", "camel-knative-http"))
.addDependencies(
() -> catalog.getRuntimeProvider() instanceof QuarkusRuntimeProvider,
MavenArtifact.from("org.apache.camel.k", "camel-k-quarkus-knative"),
MavenArtifact.from("org.apache.camel.k", "camel-k-quarkus-loader-yaml"))
.build()
);
specBuilder.putArtifact(
new CamelArtifact.Builder()
.groupId("org.apache.camel.k")
.artifactId("camel-knative")
.addScheme(new CamelScheme.Builder()
.id("knative")
.http(true)
.build())
.addDependencies(
() -> catalog.getRuntimeProvider() instanceof DefaultRuntimeProvider,
MavenArtifact.from("org.apache.camel.k", "camel-knative-api"),
MavenArtifact.from("org.apache.camel.k", "camel-knative"),
MavenArtifact.from("org.apache.camel.k", "camel-knative-http"))
.addDependencies(
() -> catalog.getRuntimeProvider() instanceof QuarkusRuntimeProvider,
MavenArtifact.from("org.apache.camel.k", "camel-k-quarkus-knative"))
.build()
);
specBuilder.putArtifact(
new CamelArtifact.Builder()
.groupId("org.apache.camel.k")
.artifactId("camel-kamelet")
.addScheme(new CamelScheme.Builder()
.id("kamelet")
.http(false)
.passive(true)
.build())
.addDependencies(
() -> catalog.getRuntimeProvider() instanceof DefaultRuntimeProvider,
MavenArtifact.from("org.apache.camel.k", "camel-kamelet"))
.addDependencies(
() -> catalog.getRuntimeProvider() instanceof QuarkusRuntimeProvider,
MavenArtifact.from("org.apache.camel.k", "camel-k-quarkus-kamelet"))
.build()
);
}
private static void processLoaders(CamelCatalog catalog, CamelCatalogSpec.Builder specBuilder) {
if (catalog.getRuntimeProvider() instanceof QuarkusRuntimeProvider) {
specBuilder.putLoader(
"yaml",
CamelLoader.fromArtifact("org.apache.camel.k", "camel-k-quarkus-loader-yaml")
.addLanguage("yaml")
.putMetadata("native", "true")
.build()
);
specBuilder.putLoader(
"groovy",
CamelLoader.fromArtifact("org.apache.camel.k", "camel-k-quarkus-loader-groovy")
.addLanguage("groovy")
.putMetadata("native", "false")
.build()
);
specBuilder.putLoader(
"kts",
CamelLoader.fromArtifact("org.apache.camel.k", "camel-k-quarkus-loader-kotlin")
.addLanguage("kts")
.putMetadata("native", "false")
.build()
);
specBuilder.putLoader(
"js",
CamelLoader.fromArtifact("org.apache.camel.k", "camel-k-quarkus-loader-js")
.addLanguage("js")
.putMetadata("native", "true")
.build()
);
specBuilder.putLoader(
"xml",
CamelLoader.fromArtifact("org.apache.camel.k", "camel-k-quarkus-loader-xml")
.addLanguage("xml")
.putMetadata("native", "true")
.build()
);
specBuilder.putLoader(
"java",
CamelLoader.fromArtifact("org.apache.camel.k", "camel-k-quarkus-loader-java")
.addLanguage("java")
.putMetadata("native", "false")
.build()
);
} else {
specBuilder.putLoader(
"yaml",
CamelLoader.fromArtifact("org.apache.camel.k", "camel-k-loader-yaml")
.addLanguage("yaml")
.build()
);
specBuilder.putLoader(
"groovy",
CamelLoader.fromArtifact("org.apache.camel.k", "camel-k-loader-groovy")
.addLanguage("groovy")
.build()
);
specBuilder.putLoader(
"kts",
CamelLoader.fromArtifact("org.apache.camel.k", "camel-k-loader-kotlin")
.addLanguage("kts")
.build()
);
specBuilder.putLoader(
"js",
CamelLoader.fromArtifact("org.apache.camel.k", "camel-k-loader-js")
.addLanguage("js")
.build()
);
specBuilder.putLoader(
"xml",
CamelLoader.fromArtifact("org.apache.camel.k", "camel-k-loader-xml")
.addLanguage("xml")
.build()
);
specBuilder.putLoader(
"java",
CamelLoader.fromArtifact("org.apache.camel.k", "camel-k-loader-java")
.addLanguage("java")
.build()
);
}
}
private static void processComponents(CamelCatalog catalog, Map<String, CamelArtifact> artifacts) {
for (String name : catalog.findComponentNames()) {
String json = catalog.componentJSonSchema(name);
CatalogComponentDefinition definition = CatalogSupport.unmarshallComponent(json);
artifacts.compute(definition.getArtifactId(), (key, artifact) -> {
CamelArtifact.Builder builder = artifactBuilder(artifact, definition);
builder.addJavaType(definition.getJavaType());
definition.getSchemes().map(StringUtils::trimToNull).filter(Objects::nonNull).forEach(scheme -> {
builder.addScheme(
new CamelScheme.Builder()
.id(scheme)
.http(KNOWN_HTTP_URIS.contains(scheme))
.passive(KNOWN_PASSIVE_URIS.contains(scheme))
.build());
});
return builder.build();
});
}
}
private static void processLanguages(CamelCatalog catalog, Map<String, CamelArtifact> artifacts) {
for (String name : catalog.findLanguageNames()) {
String json = catalog.languageJSonSchema(name);
CatalogLanguageDefinition definition = CatalogSupport.unmarshallLanguage(json);
artifacts.compute(definition.getArtifactId(), (key, artifact) -> {
CamelArtifact.Builder builder = artifactBuilder(artifact, definition);
builder.addLanguage(definition.getName());
builder.addJavaType(definition.getJavaType());
return builder.build();
});
}
}
private static void processDataFormats(CamelCatalog catalog, Map<String, CamelArtifact> artifacts) {
for (String name : catalog.findDataFormatNames()) {
String json = catalog.dataFormatJSonSchema(name);
CatalogDataFormatDefinition definition = CatalogSupport.unmarshallDataFormat(json);
artifacts.compute(definition.getArtifactId(), (key, artifact) -> {
CamelArtifact.Builder builder = artifactBuilder(artifact, definition);
builder.addDataformat(definition.getName());
builder.addJavaType(definition.getJavaType());
return builder.build();
});
}
}
private static CamelArtifact.Builder artifactBuilder(CamelArtifact artifact, CatalogDefinition definition) {
CamelArtifact.Builder builder = new CamelArtifact.Builder();
if (artifact != null) {
builder.from(artifact);
} else {
Objects.requireNonNull(definition.getGroupId());
Objects.requireNonNull(definition.getArtifactId());
builder.groupId(definition.getGroupId());
builder.artifactId(definition.getArtifactId());
}
return builder;
}
}