use of org.talend.sdk.component.api.service.schema.Type in project component-runtime by Talend.
the class Generator method generatedConstraints.
private static void generatedConstraints(final File generatedDir) throws Exception {
final File file = new File(generatedDir, "generated_constraints.adoc");
try (final PrintStream stream = new PrintStream(new WriteIfDifferentStream(file))) {
stream.println("");
stream.println("[role=\"table-striped table-hover table-ordered\",options=\"header,autowidth\"]");
stream.println("|====");
stream.println("|API|Name|Parameter Type|Description|Supported Types|Metadata sample");
final File api = jarLocation(Validation.class);
final ClassLoader loader = Thread.currentThread().getContextClassLoader();
final AnnotationFinder finder = new AnnotationFinder(api.isDirectory() ? new FileArchive(loader, api) : new JarArchive(loader, api.toURI().toURL()));
final ValidationParameterEnricher enricher = new ValidationParameterEnricher();
final Mapper mapper = new MapperBuilder().build();
Stream.concat(finder.findAnnotatedClasses(Validation.class).stream().map(validation -> {
final Validation val = validation.getAnnotation(Validation.class);
return createConstraint(validation, val);
}), finder.findAnnotatedClasses(Validations.class).stream().flatMap(validations -> Stream.of(validations.getAnnotation(Validations.class).value()).map(validation -> createConstraint(validations, validation)))).sorted((o1, o2) -> {
final int types = Stream.of(o1.types).map(Class::getName).collect(joining("/")).compareTo(Stream.of(o2.types).map(Class::getName).collect(joining("/")));
if (types == 0) {
return o1.name.compareTo(o2.name);
}
return types;
}).forEach(constraint -> stream.println("|@" + constraint.marker.getName() + "|" + constraint.name + "|" + sanitizeType(constraint.paramType) + "|" + constraint.description + "|" + Stream.of(constraint.types).map(Class::getName).map(Generator::sanitizeType).collect(joining(", ")) + "|" + mapper.writeObjectAsString(enricher.onParameterAnnotation("test", constraint.types[0], generateAnnotation(constraint.marker))).replace("tcomp::", "")));
stream.println("|====");
stream.println();
}
}
use of org.talend.sdk.component.api.service.schema.Type in project component-runtime by Talend.
the class Generator method generatedUi.
private static void generatedUi(final File generatedDir) throws Exception {
final File file = new File(generatedDir, "generated_ui.adoc");
try (final PrintStream stream = new PrintStream(new WriteIfDifferentStream(file))) {
stream.println("");
stream.println("[role=\"table-striped table-hover table-ordered\",options=\"header,autowidth\"]");
stream.println("|====");
stream.println("|API|Description|Generated property metadata");
final File api = jarLocation(Ui.class);
final ClassLoader loader = Thread.currentThread().getContextClassLoader();
final AnnotationFinder finder = new AnnotationFinder(api.isDirectory() ? new FileArchive(loader, api) : new JarArchive(loader, api.toURI().toURL()));
final ParameterExtensionEnricher enricher = new UiParameterEnricher();
final Mapper mapper = new MapperBuilder().build();
finder.findAnnotatedClasses(Ui.class).stream().sorted(Comparator.comparing(Class::getName)).forEach(type -> {
final Map<String, String> meta = enricher.onParameterAnnotation("theparameter", Object.class, generateAnnotation(type)).entrySet().stream().collect(toMap(e -> e.getKey().replace("tcomp::", ""), Map.Entry::getValue));
stream.println("|@" + type.getName() + "|" + extractDoc(type) + "|" + mapper.writeObjectAsString(meta).replace("|", "\\|"));
});
stream.println("|====");
stream.println();
}
}
use of org.talend.sdk.component.api.service.schema.Type in project component-runtime by Talend.
the class TaCoKitGuessSchema method guessSchemaThroughAction.
public boolean guessSchemaThroughAction() {
if (action == null || action.isEmpty()) {
return false;
}
final ServiceMeta.ActionMeta actionRef = componentManager.findPlugin(plugin).orElseThrow(() -> new IllegalArgumentException("No component " + plugin)).get(ContainerComponentRegistry.class).getServices().stream().flatMap(s -> s.getActions().stream()).filter(a -> a.getFamily().equals(family) && a.getAction().equals(action) && a.getType().equals(type)).findFirst().orElseThrow(() -> new IllegalArgumentException("No action " + family + "#" + type + "#" + action));
final Object schemaResult = actionRef.getInvoker().apply(buildActionConfig(actionRef, configuration));
if (schemaResult instanceof Schema) {
Collection<Schema.Entry> entries = Schema.class.cast(schemaResult).getEntries();
if (entries == null || entries.isEmpty()) {
log.info("No column found by guess schema action");
return false;
}
for (Schema.Entry entry : entries) {
String name = entry.getName();
Type entryType = entry.getType();
if (entryType == null) {
entryType = Type.STRING;
}
String typeName;
switch(entryType) {
case BOOLEAN:
typeName = javaTypesManager.BOOLEAN.getId();
break;
case DOUBLE:
typeName = javaTypesManager.DOUBLE.getId();
break;
case INT:
typeName = javaTypesManager.INTEGER.getId();
break;
default:
typeName = javaTypesManager.STRING.getId();
break;
}
append(str, name, typeName);
}
return true;
} else {
log.error("Result of built-in guess schema action is not an instance of TaCoKit Schema");
return false;
}
}
use of org.talend.sdk.component.api.service.schema.Type in project component-runtime by Talend.
the class TaCoKitGuessSchema method buildActionConfig.
private Map<String, String> buildActionConfig(final ServiceMeta.ActionMeta action, final Map<String, String> configuration) {
if (configuration == null || configuration.isEmpty()) {
// no-mapping
return configuration;
}
final ParameterMeta dataSet = action.getParameters().stream().filter(param -> param.getMetadata().containsKey("tcomp::configurationtype::type") && "dataset".equals(param.getMetadata().get("tcomp::configurationtype::type"))).findFirst().orElse(null);
if (dataSet == null) {
// no mapping to do
return configuration;
}
// action configuration prefix.
final String prefix = dataSet.getPath();
final int dotIndex = configuration.keySet().iterator().next().indexOf(".");
return configuration.entrySet().stream().collect(toMap(e -> prefix + "." + e.getKey().substring(dotIndex + 1, e.getKey().length()), Map.Entry::getValue));
}
use of org.talend.sdk.component.api.service.schema.Type in project component-runtime by Talend.
the class TaCoKitGuessSchema method fromOutputEmitterPojo.
public void fromOutputEmitterPojo(final Processor processor, final String outBranchName) {
Object o = processor;
while (Delegated.class.isInstance(o)) {
o = Delegated.class.cast(o).getDelegate();
}
final ClassLoader classLoader = o.getClass().getClassLoader();
final Thread thread = Thread.currentThread();
final ClassLoader old = thread.getContextClassLoader();
thread.setContextClassLoader(classLoader);
try {
final Optional<java.lang.reflect.Type> type = Stream.of(o.getClass().getMethods()).filter(m -> m.isAnnotationPresent(ElementListener.class)).flatMap(m -> IntStream.range(0, m.getParameterCount()).filter(i -> m.getParameters()[i].isAnnotationPresent(Output.class) && outBranchName.equals(m.getParameters()[i].getAnnotation(Output.class).value())).mapToObj(i -> m.getGenericParameterTypes()[i]).filter(t -> ParameterizedType.class.isInstance(t) && ParameterizedType.class.cast(t).getRawType() == OutputEmitter.class && ParameterizedType.class.cast(t).getActualTypeArguments().length == 1).map(p -> ParameterizedType.class.cast(p).getActualTypeArguments()[0])).findFirst();
if (type.isPresent() && Class.class.isInstance(type.get())) {
final Class<?> clazz = Class.class.cast(type.get());
if (clazz != JsonObject.class) {
guessSchemaThroughResultClass(clazz);
}
}
} finally {
thread.setContextClassLoader(old);
}
}
Aggregations