use of org.talend.sdk.component.spi.component.ComponentExtension in project component-runtime by Talend.
the class DesignContainerListener method onCreate.
/**
* Enriches {@link Container} with {@link DesignModel} and
* {@link RepositoryModel} It depends on Updater listener which adds
* {@link ContainerComponentRegistry} class to {@link Container}
*/
@Override
public void onCreate(final Container container) {
final ContainerComponentRegistry componentRegistry = container.get(ContainerComponentRegistry.class);
if (componentRegistry == null) {
throw new IllegalArgumentException("container doesn't contain ContainerComponentRegistry");
}
final Collection<ComponentFamilyMeta> componentFamilyMetas = componentRegistry.getComponents().values();
// Create Design Model
componentFamilyMetas.stream().flatMap(family -> Stream.concat(family.getPartitionMappers().values().stream(), family.getProcessors().values().stream())).forEach(meta -> {
final ComponentExtension.ComponentContext context = container.get(ComponentContexts.class).getContexts().get(meta.getType());
final ComponentExtension owningExtension = context.owningExtension();
meta.set(DesignModel.class, ofNullable(owningExtension).map(e -> e.unwrap(FlowsFactory.class, meta)).map(e -> new DesignModel(meta.getId(), e.getInputFlows(), e.getOutputFlows())).orElseGet(() -> {
final FlowsFactory factory = FlowsFactory.get(meta);
return new DesignModel(meta.getId(), factory.getInputFlows(), factory.getOutputFlows());
}));
});
// Create Repository Model
container.set(RepositoryModel.class, repositoryModelBuilder.create(container.get(ComponentManager.AllServices.class), componentFamilyMetas, migrationHandlerFactory));
}
Aggregations