Search in sources :

Example 1 with ActionRegistry

use of org.talend.dataprep.transformation.pipeline.ActionRegistry in project data-prep by Talend.

the class PreparationConversions method toStudioPreparation.

private PreparationSummary toStudioPreparation(Preparation source, PreparationSummary target, ApplicationContext applicationContext) {
    if (target.getOwner() == null) {
        final Security security = applicationContext.getBean(Security.class);
        Owner owner = new Owner(security.getUserId(), security.getUserDisplayName(), StringUtils.EMPTY);
        target.setOwner(owner);
    }
    final PreparationRepository preparationRepository = applicationContext.getBean(PreparationRepository.class);
    final ActionRegistry actionRegistry = applicationContext.getBean(ActionRegistry.class);
    // Get preparation actions
    PreparationActions prepActions = preparationRepository.get(source.getHeadId(), PreparationActions.class);
    if (prepActions != null) {
        List<Action> actions = prepActions.getActions();
        boolean allowDistributedRun = true;
        for (Action action : actions) {
            final ActionDefinition actionDefinition = actionRegistry.get(action.getName());
            if (actionDefinition.getBehavior().contains(ActionDefinition.Behavior.FORBID_DISTRIBUTED)) {
                // Disallow distributed run
                allowDistributedRun = false;
                break;
            }
        }
        target.setAllowDistributedRun(allowDistributedRun);
    }
    return target;
}
Also used : PreparationRepository(org.talend.dataprep.preparation.store.PreparationRepository) Owner(org.talend.dataprep.api.share.Owner) Security(org.talend.dataprep.security.Security) ActionRegistry(org.talend.dataprep.transformation.pipeline.ActionRegistry) ActionDefinition(org.talend.dataprep.api.action.ActionDefinition)

Example 2 with ActionRegistry

use of org.talend.dataprep.transformation.pipeline.ActionRegistry in project data-prep by Talend.

the class PreparationConversions method toPreparationMessage.

private PreparationMessage toPreparationMessage(Preparation source, PreparationMessage target, ApplicationContext applicationContext) {
    final PreparationRepository preparationRepository = applicationContext.getBean(PreparationRepository.class);
    final ActionRegistry actionRegistry = applicationContext.getBean(ActionRegistry.class);
    // Steps diff metadata
    final List<StepDiff> diffs = // 
    source.getSteps().stream().filter(// 
    step -> !Step.ROOT_STEP.id().equals(step.id())).map(// 
    Step::getDiff).collect(toList());
    target.setDiff(diffs);
    // Actions
    if (source.getHeadId() != null) {
        // Get preparation actions
        final String headId = source.getHeadId();
        final Step head = preparationRepository.get(headId, Step.class);
        if (head != null) {
            final PreparationActions prepActions = preparationRepository.get(head.getContent(), PreparationActions.class);
            if (prepActions != null) {
                final List<Action> actions = prepActions.getActions();
                target.setActions(prepActions.getActions());
                // Allow distributed run
                boolean allowDistributedRun = true;
                for (Action action : actions) {
                    final ActionDefinition actionDefinition = actionRegistry.get(action.getName());
                    if (actionDefinition.getBehavior().contains(ActionDefinition.Behavior.FORBID_DISTRIBUTED)) {
                        allowDistributedRun = false;
                        break;
                    }
                }
                target.setAllowDistributedRun(allowDistributedRun);
                // no need to have lock information (and may also break StandAlonePreparationParser...)
                target.setLock(null);
                // Actions metadata
                if (actionRegistry == null) {
                    LOGGER.debug("No action metadata available, unable to serialize action metadata for preparation {}.", source.id());
                } else {
                    List<ActionForm> actionDefinitions = // 
                    actions.stream().map(a -> // 
                    actionRegistry.get(a.getName()).adapt(// 
                    ScopeCategory.from(a.getParameters().get(ImplicitParameters.SCOPE.getKey())))).map(// 
                    a -> a.getActionForm(getLocale())).map(// 
                    PreparationConversions::disallowColumnCreationChange).collect(Collectors.toList());
                    target.setMetadata(actionDefinitions);
                }
            }
        } else {
            LOGGER.warn("Head step #{} for preparation #{} does not exist.", headId, source.id());
            target.setActions(Collections.emptyList());
            target.setSteps(Collections.singletonList(Step.ROOT_STEP));
            target.setMetadata(Collections.emptyList());
        }
    } else {
        target.setActions(Collections.emptyList());
        target.setSteps(Collections.singletonList(Step.ROOT_STEP));
        target.setMetadata(Collections.emptyList());
    }
    return target;
}
Also used : ImplicitParameters(org.talend.dataprep.transformation.actions.common.ImplicitParameters) StringUtils(org.apache.commons.lang.StringUtils) CREATE_NEW_COLUMN(org.talend.dataprep.transformation.actions.common.ActionsUtils.CREATE_NEW_COLUMN) BeanConversionService.fromBean(org.talend.dataprep.conversions.BeanConversionService.fromBean) LoggerFactory(org.slf4j.LoggerFactory) PreparationRepository(org.talend.dataprep.preparation.store.PreparationRepository) org.talend.dataprep.api.preparation(org.talend.dataprep.api.preparation) PersistentPreparation(org.talend.dataprep.preparation.store.PersistentPreparation) ScopeCategory(org.talend.dataprep.transformation.actions.category.ScopeCategory) BeanConversionService(org.talend.dataprep.conversions.BeanConversionService) Logger(org.slf4j.Logger) LocaleContextHolder.getLocale(org.springframework.context.i18n.LocaleContextHolder.getLocale) ActionRegistry(org.talend.dataprep.transformation.pipeline.ActionRegistry) Owner(org.talend.dataprep.api.share.Owner) Collectors(java.util.stream.Collectors) ApplicationContext(org.springframework.context.ApplicationContext) ActionForm(org.talend.dataprep.api.action.ActionForm) Collectors.toList(java.util.stream.Collectors.toList) List(java.util.List) Component(org.springframework.stereotype.Component) ActionDefinition(org.talend.dataprep.api.action.ActionDefinition) UserPreparation(org.talend.dataprep.preparation.service.UserPreparation) Security(org.talend.dataprep.security.Security) Collections(java.util.Collections) BeanConversionServiceWrapper(org.talend.dataprep.processor.BeanConversionServiceWrapper) PreparationRepository(org.talend.dataprep.preparation.store.PreparationRepository) ActionRegistry(org.talend.dataprep.transformation.pipeline.ActionRegistry) ActionDefinition(org.talend.dataprep.api.action.ActionDefinition) ActionForm(org.talend.dataprep.api.action.ActionForm)

Example 3 with ActionRegistry

use of org.talend.dataprep.transformation.pipeline.ActionRegistry in project data-prep by Talend.

the class PipelineTransformer method buildExecutable.

@Override
public ExecutableTransformer buildExecutable(DataSet input, Configuration configuration) {
    final RowMetadata rowMetadata = input.getMetadata().getRowMetadata();
    // prepare the fallback row metadata
    RowMetadata fallBackRowMetadata = transformationRowMetadataUtils.getMatchingEmptyRowMetadata(rowMetadata);
    final TransformerWriter writer = writerRegistrationService.getWriter(configuration.formatId(), configuration.output(), configuration.getArguments());
    final ConfiguredCacheWriter metadataWriter = new ConfiguredCacheWriter(contentCache, DEFAULT);
    final TransformationMetadataCacheKey metadataKey = cacheKeyGenerator.generateMetadataKey(configuration.getPreparationId(), configuration.stepId(), configuration.getSourceType());
    final PreparationMessage preparation = configuration.getPreparation();
    // function that from a step gives the rowMetadata associated to the previous/parent step
    final Function<Step, RowMetadata> previousStepRowMetadataSupplier = s -> // 
    Optional.ofNullable(s.getParent()).map(// 
    id -> preparationUpdater.get(id)).orElse(null);
    final Pipeline pipeline = // 
    Pipeline.Builder.builder().withAnalyzerService(// 
    analyzerService).withActionRegistry(// 
    actionRegistry).withPreparation(// 
    preparation).withActions(// 
    actionParser.parse(configuration.getActions())).withInitialMetadata(rowMetadata, // 
    configuration.volume() == SMALL).withMonitor(// 
    configuration.getMonitor()).withFilter(// 
    configuration.getFilter()).withLimit(// 
    configuration.getLimit()).withFilterOut(// 
    configuration.getOutFilter()).withOutput(// 
    () -> new WriterNode(writer, metadataWriter, metadataKey, fallBackRowMetadata)).withStatisticsAdapter(// 
    adapter).withStepMetadataSupplier(// 
    previousStepRowMetadataSupplier).withGlobalStatistics(// 
    configuration.isGlobalStatistics()).allowMetadataChange(// 
    configuration.isAllowMetadataChange()).build();
    // wrap this transformer into an executable transformer
    return new ExecutableTransformer() {

        @Override
        public void execute() {
            try {
                LOGGER.debug("Before transformation: {}", pipeline);
                pipeline.execute(input);
            } finally {
                LOGGER.debug("After transformation: {}", pipeline);
            }
            if (preparation != null) {
                final UpdatedStepVisitor visitor = new UpdatedStepVisitor(preparationUpdater);
                pipeline.accept(visitor);
            }
        }

        @Override
        public void signal(Signal signal) {
            pipeline.signal(signal);
        }
    };
}
Also used : WriterNode(org.talend.dataprep.transformation.pipeline.model.WriterNode) WriterRegistrationService(org.talend.dataprep.transformation.format.WriterRegistrationService) SMALL(org.talend.dataprep.transformation.api.transformer.configuration.Configuration.Volume.SMALL) StepMetadataRepository(org.talend.dataprep.transformation.service.StepMetadataRepository) TransformerWriter(org.talend.dataprep.transformation.api.transformer.TransformerWriter) LoggerFactory(org.slf4j.LoggerFactory) Autowired(org.springframework.beans.factory.annotation.Autowired) Configuration(org.talend.dataprep.transformation.api.transformer.configuration.Configuration) Signal(org.talend.dataprep.transformation.pipeline.Signal) DEFAULT(org.talend.dataprep.cache.ContentCache.TimeToLive.DEFAULT) PreparationMessage(org.talend.dataprep.api.preparation.PreparationMessage) Function(java.util.function.Function) AnalyzerService(org.talend.dataprep.quality.AnalyzerService) ActionParser(org.talend.dataprep.transformation.api.action.ActionParser) CacheKeyGenerator(org.talend.dataprep.cache.CacheKeyGenerator) TransformationMetadataCacheKey(org.talend.dataprep.cache.TransformationMetadataCacheKey) DataSet(org.talend.dataprep.api.dataset.DataSet) Logger(org.slf4j.Logger) ActionRegistry(org.talend.dataprep.transformation.pipeline.ActionRegistry) TransformationRowMetadataUtils(org.talend.dataprep.transformation.service.TransformationRowMetadataUtils) Step(org.talend.dataprep.api.preparation.Step) ConfiguredCacheWriter(org.talend.dataprep.transformation.api.transformer.ConfiguredCacheWriter) ContentCache(org.talend.dataprep.cache.ContentCache) ExecutableTransformer(org.talend.dataprep.transformation.api.transformer.ExecutableTransformer) Component(org.springframework.stereotype.Component) StatisticsAdapter(org.talend.dataprep.dataset.StatisticsAdapter) Optional(java.util.Optional) Pipeline(org.talend.dataprep.transformation.pipeline.Pipeline) Transformer(org.talend.dataprep.transformation.api.transformer.Transformer) RowMetadata(org.talend.dataprep.api.dataset.RowMetadata) TransformationMetadataCacheKey(org.talend.dataprep.cache.TransformationMetadataCacheKey) Step(org.talend.dataprep.api.preparation.Step) Pipeline(org.talend.dataprep.transformation.pipeline.Pipeline) Signal(org.talend.dataprep.transformation.pipeline.Signal) WriterNode(org.talend.dataprep.transformation.pipeline.model.WriterNode) ExecutableTransformer(org.talend.dataprep.transformation.api.transformer.ExecutableTransformer) RowMetadata(org.talend.dataprep.api.dataset.RowMetadata) PreparationMessage(org.talend.dataprep.api.preparation.PreparationMessage) TransformerWriter(org.talend.dataprep.transformation.api.transformer.TransformerWriter) ConfiguredCacheWriter(org.talend.dataprep.transformation.api.transformer.ConfiguredCacheWriter)

Aggregations

ActionRegistry (org.talend.dataprep.transformation.pipeline.ActionRegistry)3 Logger (org.slf4j.Logger)2 LoggerFactory (org.slf4j.LoggerFactory)2 Component (org.springframework.stereotype.Component)2 ActionDefinition (org.talend.dataprep.api.action.ActionDefinition)2 Owner (org.talend.dataprep.api.share.Owner)2 PreparationRepository (org.talend.dataprep.preparation.store.PreparationRepository)2 Security (org.talend.dataprep.security.Security)2 Collections (java.util.Collections)1 List (java.util.List)1 Optional (java.util.Optional)1 Function (java.util.function.Function)1 Collectors (java.util.stream.Collectors)1 Collectors.toList (java.util.stream.Collectors.toList)1 StringUtils (org.apache.commons.lang.StringUtils)1 Autowired (org.springframework.beans.factory.annotation.Autowired)1 ApplicationContext (org.springframework.context.ApplicationContext)1 LocaleContextHolder.getLocale (org.springframework.context.i18n.LocaleContextHolder.getLocale)1 ActionForm (org.talend.dataprep.api.action.ActionForm)1 DataSet (org.talend.dataprep.api.dataset.DataSet)1