public Optional<Mapper> findMapper(final String plugin, final String name, final int version, final Map<String, String> configuration) { return find(pluginContainer -> Stream .of(pluginContainer .get(ContainerComponentRegistry.class) .getComponents() .get(container.buildAutoIdFromName(plugin)))) .filter(Objects::nonNull) .map(component -> ofNullable(component.getPartitionMappers().get(name)) .map(mapper -> mapper .getInstantiator() .apply(configuration == null ? null : mapper.getMigrationHandler().migrate(version, configuration))) .map(Mapper.class::cast)) .findFirst() .flatMap(identity()); }
@Override protected void doExecute() throws MojoExecutionException, MojoFailureException { if (!classes.exists()) { throw new MojoExecutionException("No " + classes); } try (final ComponentManager manager = new ComponentManager(repository, "TALEND-INF/dependencies.txt", "org.talend.sdk.component:type=component,value=%s") { { addPlugin(artifactId, classes.getAbsolutePath()); } }) { final Container container = manager.findPlugin(artifactId).get(); final ContainerComponentRegistry registry = container.get(ContainerComponentRegistry.class); registry.getComponents().values().forEach(c -> { c .getPartitionMappers() .forEach((k, p) -> getLog().info("Found component " + c.getName() + "#" + p.getName())); c .getProcessors() .forEach((k, p) -> getLog().info("Found component " + c.getName() + "#" + p.getName())); }); doWork(manager, container, registry); } }
.values() .stream() .map(p -> new Component(p.getParent().getCategories(), p.getParent().getName(), p.getName(), .findBundle(container.getLoader(), Locale.ENGLISH) .displayName() .orElse(p.getName()), p.getIcon(), emptyList(), singletonList("MAIN"))), c.getProcessors().values().stream().map(p -> { final Method listener = p.getListener();
@Override public void onEmitter(final Class<?> type, final Emitter emitter) { final Constructor<?> constructor = findConstructor(type); final List<ParameterMeta> parameterMetas = parameterModelService .buildParameterMetas(constructor, getPackage(type), new BaseParameterEnricher.Context( LocalConfiguration.class.cast(services.getServices().get(LocalConfiguration.class)))); final Function<Map<String, String>, Object[]> parameterFactory = createParametersFactory(plugin, constructor, services.getServices(), parameterMetas); final String name = of(emitter.name()).filter(n -> !n.isEmpty()).orElseGet(type::getName); final ComponentFamilyMeta component = getOrCreateComponent(emitter.family()); final Function<Map<String, String>, Mapper> instantiator = context.getOwningExtension() != null && context.getOwningExtension().supports(Mapper.class) ? config -> executeInContainer(plugin, () -> context .getOwningExtension() .convert(new ComponentInstanceImpl( doInvoke(constructor, parameterFactory.apply(config)), plugin, component.getName(), name), Mapper.class)) : config -> new LocalPartitionMapper(component.getName(), name, plugin, doInvoke(constructor, parameterFactory.apply(config))); component .getPartitionMappers() .put(name, new ComponentFamilyMeta.PartitionMapperMeta(component, name, findIcon(type), findVersion(type), type, parameterMetas, instantiator, migrationHandlerFactory.findMigrationHandler(parameterMetas, type, services), !context.isNoValidation())); }
@Override public void onPartitionMapper(final Class<?> type, final PartitionMapper partitionMapper) { final Constructor<?> constructor = findConstructor(type); final List<ParameterMeta> parameterMetas = parameterModelService .buildParameterMetas(constructor, getPackage(type), new BaseParameterEnricher.Context( LocalConfiguration.class.cast(services.getServices().get(LocalConfiguration.class)))); final Function<Map<String, String>, Object[]> parameterFactory = createParametersFactory(plugin, constructor, services.getServices(), parameterMetas); final String name = of(partitionMapper.name()).filter(n -> !n.isEmpty()).orElseGet(type::getName); final ComponentFamilyMeta component = getOrCreateComponent(partitionMapper.family()); final Function<Map<String, String>, Mapper> instantiator = context.getOwningExtension() != null && context.getOwningExtension().supports(Mapper.class) ? config -> executeInContainer(plugin, () -> context .getOwningExtension() .convert(new ComponentInstanceImpl( doInvoke(constructor, parameterFactory.apply(config)), plugin, component.getName(), name), Mapper.class)) : config -> new PartitionMapperImpl(component.getName(), name, null, plugin, partitionMapper.infinite(), doInvoke(constructor, parameterFactory.apply(config))); component .getPartitionMappers() .put(name, new ComponentFamilyMeta.PartitionMapperMeta(component, name, findIcon(type), findVersion(type), type, parameterMetas, instantiator, migrationHandlerFactory.findMigrationHandler(parameterMetas, type, services), !context.isNoValidation())); }