All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.ikasan.dashboard.ui.scheduler.component.SelectContextDialog Maven / Gradle / Ivy

There is a newer version: 4.0.2
Show newest version
package org.ikasan.dashboard.ui.scheduler.component;

import com.vaadin.flow.component.UI;
import com.vaadin.flow.component.button.Button;
import com.vaadin.flow.component.combobox.ComboBox;
import com.vaadin.flow.component.orderedlayout.HorizontalLayout;
import org.ikasan.dashboard.ui.general.component.AbstractCloseableResizableDialog;
import org.ikasan.dashboard.ui.general.component.NotificationHelper;
import org.ikasan.dashboard.ui.util.SystemEventLogger;
import org.ikasan.dashboard.ui.visualisation.scheduler.component.JobSchedulerVisualisation;
import org.ikasan.job.orchestration.util.ContextHelper;
import org.ikasan.spec.scheduled.context.model.Context;
import org.ikasan.spec.scheduled.context.model.ContextTemplate;
import org.ikasan.spec.scheduled.job.model.ContextStartJob;
import org.ikasan.spec.scheduled.job.model.ContextTerminalJob;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.IOException;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;

public class SelectContextDialog extends AbstractCloseableResizableDialog {

    Logger logger = LoggerFactory.getLogger(SelectContextDialog.class);
    // Fields to capture schedule job properties.

    private ContextTemplate contextTemplate;
    private ContextTemplate parentContextTemplate;

    private SystemEventLogger systemEventLogger;

    /**
     * Dialog used for selecting a context to link to a downstream child job plan.
     *
     * @param systemEventLogger        The system event logger used for logging events.
     * @param parentContextTemplate    The parent context template.
     * @param contextTemplate          The current context template.
     * @param jobSchedulerVisualisation The job scheduler visualisation.
     */
    public SelectContextDialog(SystemEventLogger systemEventLogger, ContextTemplate parentContextTemplate, ContextTemplate contextTemplate,
                               JobSchedulerVisualisation jobSchedulerVisualisation) {
        super.showResize(false);
        // todo translation
        super.title.setText(getTranslation("header.link-to-downstream-job-plan", UI.getCurrent().getLocale()));
        this.systemEventLogger = systemEventLogger;
        this.parentContextTemplate = parentContextTemplate;
        this.contextTemplate = contextTemplate;

        this.setHeight("120px");
        this.setWidth("600px");


        HorizontalLayout layout = new HorizontalLayout();
        layout.setWidthFull();

        Map contextMap = ContextHelper.getAllContexts(this.parentContextTemplate);

        ComboBox searchCb = new ComboBox<>();
        searchCb.setPlaceholder(getTranslation("label.search-job-plan-link", UI.getCurrent().getLocale()));
        List childJobPlanNames = contextMap.keySet().stream().collect(Collectors.toList());
        childJobPlanNames.remove(contextTemplate.getName());
        Optional terminalJob = ContextHelper.getContextTerminalJobFromContext(contextTemplate);
        if(terminalJob.isPresent()) {
            List residingContexts = ContextHelper.getContextsWhereJobFilterMatchResides(parentContextTemplate, terminalJob.get().getJobName());
            childJobPlanNames = childJobPlanNames.stream()
                .filter(name -> !residingContexts.contains(name))
                .collect(Collectors.toList());
        }

        Collections.sort(childJobPlanNames);
        searchCb.setItems(childJobPlanNames);
        searchCb.setWidth("500px");

        Button linkButton = new Button(getTranslation("button.link", UI.getCurrent().getLocale()));
        linkButton.addClickListener(buttonClickEvent -> {
            ContextTemplate contextToLinkTo = (ContextTemplate) contextMap.get(searchCb.getValue());
            Optional contextStartJob = ContextHelper.getContextStartJobFromContext(contextToLinkTo);
            Optional contextTerminalJob = ContextHelper.getContextTerminalJobFromContext(contextTemplate);

            if(!contextStartJob.isPresent()) {
                NotificationHelper.showUserNotification(getTranslation("message.link-to-plan-without-start-job", UI.getCurrent().getLocale()));
            }
            else {
                try {
                    jobSchedulerVisualisation.linkToContext(contextTerminalJob.get(), contextStartJob.get(), contextToLinkTo);
                    this.close();
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
        });

        layout.add(searchCb, linkButton);
        super.content.add(layout);
    }


}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy