Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

auto generate META-INF content for DataTypeTransformer #11775

Merged
merged 2 commits into from
Oct 20, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# Generated by camel build tools - do NOT edit this file!
class=org.apache.camel.component.aws2.s3.transform.AWS2S3CloudEventDataTypeTransformer

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# Generated by camel build tools - do NOT edit this file!
class=org.apache.camel.component.cloudevents.transformer.CloudEventJsonDataTypeTransformer
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# Generated by camel build tools - do NOT edit this file!
class=org.apache.camel.component.cloudevents.transformer.CloudEventHttpDataTypeTransformer

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import org.apache.camel.spi.annotations.ServiceFactory;

/**
* Annotation to configure a data type transformer with either specifying its name or from/to data types.
* <p/>
Expand All @@ -32,6 +34,7 @@
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Target({ ElementType.TYPE })
@ServiceFactory("transformer")
public @interface DataTypeTransformer {

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,11 +30,11 @@
/**
* The default implementation of {@link org.apache.camel.spi.TransformerResolver} which tries to find components by
* using the URI scheme prefix and searching for a file of the URI scheme name in the
* <b>META-INF/services/org/apache/camel/datatype/transformer/</b> directory on the classpath.
* <b>META-INF/services/org/apache/camel/transformer/</b> directory on the classpath.
*/
public class DefaultTransformerResolver implements TransformerResolver<TransformerKey> {

public static final String DATA_TYPE_TRANSFORMER_RESOURCE_PATH = "META-INF/services/org/apache/camel/datatype/transformer/";
public static final String DATA_TYPE_TRANSFORMER_RESOURCE_PATH = "META-INF/services/org/apache/camel/transformer/";

private static final Logger LOG = LoggerFactory.getLogger(DefaultTransformerResolver.class);

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# Generated by camel build tools - do NOT edit this file!
class=org.apache.camel.processor.transformer.ByteArrayDataTypeTransformer
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# Generated by camel build tools - do NOT edit this file!
class=org.apache.camel.processor.transformer.StringDataTypeTransformer

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ class DefaultTransformerRegistryTest {

@Test
public void shouldLookupDefaultDataTypeConverters() throws Exception {
Transformer transformer = dataTypeRegistry.resolveTransformer(new TransformerKey("plain-text"));
Transformer transformer = dataTypeRegistry.resolveTransformer(new TransformerKey("text-plain"));
Assertions.assertNotNull(transformer);
Assertions.assertEquals(StringDataTypeTransformer.class, transformer.getClass());
transformer = dataTypeRegistry.resolveTransformer(new TransformerKey("application-octet-stream"));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ public void shouldHandleUnresolvableDataTypeTransformers() throws Exception {

@Test
public void shouldResolveDataTypeTransformers() throws Exception {
Transformer transformer = resolver.resolve(new TransformerKey("plain-text"), camelContext);
Transformer transformer = resolver.resolve(new TransformerKey("text-plain"), camelContext);
Assertions.assertNotNull(transformer);
Assertions.assertEquals(StringDataTypeTransformer.class, transformer.getClass());

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ void shouldMapFromInputStreamToStringModel() throws Exception {
@Test
public void shouldLookupDataType() throws Exception {
DefaultTransformerRegistry dataTypeRegistry = new DefaultTransformerRegistry(camelContext);
Transformer transformer = dataTypeRegistry.resolveTransformer(new TransformerKey("plain-text"));
Transformer transformer = dataTypeRegistry.resolveTransformer(new TransformerKey("text-plain"));
Assertions.assertNotNull(transformer);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -134,15 +134,25 @@ public void execute() throws MojoExecutionException, MojoFailureException {
if (!isLocal(className)) {
continue;
}
String pvals = annotation.value().asString();
String pvals;
// @DataTypeTransformer uses name instead of value
if (annotation.value() == null) {
pvals = annotation.values().stream()
.filter(annotationValue -> "name".equals(annotationValue.name()))
.map(name -> name.value().toString())
.findFirst().get();
} else {
pvals = annotation.value().asString();
}
for (String pval : pvals.split(",")) {
pval = sanitizeFileName(pval);
StringBuilder sb = new StringBuilder();
sb.append("# ").append(GENERATED_MSG).append(NL).append("class=").append(className).append(NL);
if (ServiceFactory.JDK_SERVICE.equals(sfa.value().asString())) {
updateResource(resourcesOutputDir.toPath(),
"META-INF/services/org/apache/camel/" + pval,
"# " + GENERATED_MSG + NL + "class=" + className + NL);
sb.toString());
} else {
StringBuilder sb = new StringBuilder();
sb.append("# ").append(GENERATED_MSG).append(NL).append("class=").append(className).append(NL);
updateResource(resourcesOutputDir.toPath(),
"META-INF/services/org/apache/camel/" + sfa.value().asString() + "/" + pval,
sb.toString());
Expand All @@ -152,6 +162,10 @@ public void execute() throws MojoExecutionException, MojoFailureException {
}
}

private String sanitizeFileName(String fileName) {
return fileName.replaceAll("[^A-Za-z0-9-]", "-");
}

private boolean isLocal(String className) {
Path output = Paths.get(project.getBuild().getOutputDirectory());
Path file = output.resolve(className.replace('.', '/') + ".class");
Expand Down