Package org.drools.workbench.screens.testscenario.client

Source Code of org.drools.workbench.screens.testscenario.client.ScenarioEditorViewImpl

/*
* Copyright 2010 JBoss Inc
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*      http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package org.drools.workbench.screens.testscenario.client;

import java.util.List;
import javax.enterprise.context.Dependent;
import javax.enterprise.event.Event;
import javax.enterprise.inject.New;
import javax.inject.Inject;

import com.github.gwtbootstrap.client.ui.Label;
import com.google.gwt.user.client.ui.HasHorizontalAlignment;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
import org.drools.workbench.models.datamodel.imports.Imports;
import org.drools.workbench.models.testscenarios.shared.CallFixtureMap;
import org.drools.workbench.models.testscenarios.shared.ExecutionTrace;
import org.drools.workbench.models.testscenarios.shared.Fixture;
import org.drools.workbench.models.testscenarios.shared.FixtureList;
import org.drools.workbench.models.testscenarios.shared.FixturesMap;
import org.drools.workbench.models.testscenarios.shared.Scenario;
import org.drools.workbench.models.testscenarios.shared.VerifyFact;
import org.drools.workbench.models.testscenarios.shared.VerifyRuleFired;
import org.drools.workbench.screens.testscenario.client.resources.i18n.TestScenarioConstants;
import org.drools.workbench.screens.testscenario.service.ScenarioTestEditorService;
import org.guvnor.common.services.shared.metadata.model.Overview;
import org.jboss.errai.common.client.api.Caller;
import org.kie.uberfire.client.common.BusyIndicatorView;
import org.kie.uberfire.client.common.DirtyableFlexTable;
import org.kie.uberfire.client.common.MultiPageEditor;
import org.kie.uberfire.client.common.Page;
import org.kie.workbench.common.services.shared.rulename.RuleNamesService;
import org.kie.workbench.common.widgets.client.datamodel.AsyncPackageDataModelOracle;
import org.kie.workbench.common.widgets.client.resources.i18n.CommonConstants;
import org.kie.workbench.common.widgets.client.widget.NoSuchFileWidget;
import org.kie.workbench.common.widgets.configresource.client.widget.bound.ImportsWidgetPresenter;
import org.kie.workbench.common.widgets.metadata.client.KieEditorViewImpl;
import org.kie.workbench.common.widgets.metadata.client.widget.OverviewWidgetPresenter;
import org.uberfire.backend.vfs.ObservablePath;
import org.uberfire.backend.vfs.Path;
import org.uberfire.workbench.events.NotificationEvent;

@Dependent
public class ScenarioEditorViewImpl
        extends KieEditorViewImpl
        implements ScenarioEditorView,
        ScenarioParentWidget {

    private final Event<NotificationEvent> notification;
    private final VerticalPanel layout = new VerticalPanel();

    private ScenarioWidgetComponentCreator scenarioWidgetComponentCreator;

    private final ImportsWidgetPresenter importsWidget;

    private MultiPageEditor multiPage;

    private BulkRunTestScenarioEditor bulkRunTestScenarioEditor;

    private Caller<RuleNamesService> ruleNameService;
    private OverviewWidgetPresenter overviewWidget;

    @Inject
    public ScenarioEditorViewImpl(
            final @New ImportsWidgetPresenter importsWidget,
            final @New MultiPageEditor multiPage,
            final @New BulkRunTestScenarioEditor bulkRunTestScenarioEditor,
            final OverviewWidgetPresenter overviewWidget,
            final Event<NotificationEvent> notification,
            final Caller<RuleNamesService> ruleNameService) {
        this.importsWidget = importsWidget;
        this.multiPage = multiPage;
        this.overviewWidget = overviewWidget;
        this.notification = notification;
        this.ruleNameService = ruleNameService;
        this.bulkRunTestScenarioEditor = bulkRunTestScenarioEditor;

        layout.setWidth("100%");

        // Let's not do this. It breaks the UI.
        // Instead we overwrite asWidget();
        // initWidget(multiPage.asWidget());
    }

    @Override
    /**
     * Overriding this since initWidget(...) breaks the UI.
     */
    public Widget asWidget() {
        return multiPage.asWidget();
    }

    @Override
    public void setContent(final ObservablePath path,
            final boolean isReadOnly,
            final Scenario scenario,
            final Overview overview,
            final String version,
            final AsyncPackageDataModelOracle oracle,
            final Caller<ScenarioTestEditorService> service) {
        layout.clear();
        multiPage.clear();

        multiPage.addWidget(layout,
                TestScenarioConstants.INSTANCE.TestScenario());
        addOverviewPage(path, overview, version);
        multiPage.addWidget(importsWidget,
                CommonConstants.INSTANCE.ConfigTabTitle());

        addBulkRunTestScenarioPanel(path,
                isReadOnly);

        setScenario(path,
                scenario,
                oracle);

        if (!isReadOnly) {
            addTestRunnerWidget(scenario,
                    service,
                    path);
        }

        renderEditor();

        initImportsTab(oracle,
                scenario.getImports(),
                isReadOnly);
    }

    private void addOverviewPage(ObservablePath path, Overview overview, String version) {
        multiPage.addWidget(overviewWidget,
                CommonConstants.INSTANCE.Overview());
        overviewWidget.setContent(overview, path, version);
    }

    private void createWidgetForEditorLayout(final DirtyableFlexTable editorLayout,
            final int layoutRow,
            final int layoutColumn,
            final Widget widget) {
        editorLayout.setWidget(layoutRow,
                layoutColumn,
                widget);
    }

    public void renderEditor() {
        //Remove body (i.e Test Scenario definition) when refreshing; leaving Test Scenario Runner widget
        if (this.layout.getWidgetCount() == 2) {
            this.layout.remove(1);
        }

        DirtyableFlexTable editorLayout = scenarioWidgetComponentCreator.createDirtyableFlexTable();
        this.layout.add(editorLayout);
        ScenarioHelper scenarioHelper = new ScenarioHelper();

        List<Fixture> fixtures = scenarioHelper.lumpyMap(getScenario().getFixtures());
        List<ExecutionTrace> listExecutionTrace = scenarioHelper.getExecutionTraceFor(fixtures);

        int layoutRow = 1;
        int executionTraceLine = 0;
        ExecutionTrace previousExecutionTrace = null;
        for (final Fixture fixture : fixtures) {
            if (fixture instanceof ExecutionTrace) {
                ExecutionTrace currentExecutionTrace = (ExecutionTrace) fixture;
                createWidgetForEditorLayout(editorLayout,
                        layoutRow,
                        0,
                        scenarioWidgetComponentCreator.createExpectPanel(currentExecutionTrace));

                executionTraceLine++;
                if (executionTraceLine >= listExecutionTrace.size()) {
                    executionTraceLine = listExecutionTrace.size() - 1;
                }
                createWidgetForEditorLayout(editorLayout,
                        layoutRow,
                        1,
                        scenarioWidgetComponentCreator.createExecutionWidget(currentExecutionTrace));
                editorLayout.setHorizontalAlignmentForFlexCellFormatter(layoutRow,
                        2,
                        HasHorizontalAlignment.ALIGN_LEFT);

                previousExecutionTrace = currentExecutionTrace;

            } else if (fixture instanceof FixturesMap) {
                createWidgetForEditorLayout(editorLayout,
                        layoutRow,
                        0,
                        scenarioWidgetComponentCreator.createGivenLabelButton(listExecutionTrace,
                                executionTraceLine,
                                previousExecutionTrace)
                );
                layoutRow++;
                createWidgetForEditorLayout(editorLayout,
                        layoutRow,
                        1,
                        scenarioWidgetComponentCreator.createGivenPanel(listExecutionTrace,
                                executionTraceLine,
                                (FixturesMap) fixture)
                );
            } else if (fixture instanceof CallFixtureMap) {
                createWidgetForEditorLayout(editorLayout,
                        layoutRow,
                        0,
                        scenarioWidgetComponentCreator.createCallMethodLabelButton(listExecutionTrace,
                                executionTraceLine,
                                previousExecutionTrace)
                );
                layoutRow++;
                createWidgetForEditorLayout(editorLayout,
                        layoutRow,
                        1,
                        scenarioWidgetComponentCreator.createCallMethodOnGivenPanel(listExecutionTrace,
                                executionTraceLine,
                                (CallFixtureMap) fixture)
                );
            } else {
                FixtureList fixturesList = (FixtureList) fixture;
                Fixture first = fixturesList.get(0);

                if (first instanceof VerifyFact) {
                    createWidgetForEditorLayout(editorLayout,
                            layoutRow,
                            1,
                            scenarioWidgetComponentCreator.createVerifyFactsPanel(listExecutionTrace,
                                    executionTraceLine,
                                    fixturesList)
                    );
                } else if (first instanceof VerifyRuleFired) {
                    createWidgetForEditorLayout(editorLayout,
                            layoutRow,
                            1,
                            scenarioWidgetComponentCreator.createVerifyRulesFiredWidget(fixturesList));
                }

            }
            layoutRow++;
        }

        // add more execution sections.
        createWidgetForEditorLayout(editorLayout,
                layoutRow,
                0,
                scenarioWidgetComponentCreator.createAddExecuteButton());
        layoutRow++;
        createWidgetForEditorLayout(editorLayout,
                layoutRow,
                0,
                scenarioWidgetComponentCreator.createSmallLabel());

        // config section
        createWidgetForEditorLayout(editorLayout,
                layoutRow,
                1,
                scenarioWidgetComponentCreator.createConfigWidget());

        layoutRow++;

        // global section
        HorizontalPanel horizontalPanel = scenarioWidgetComponentCreator.createHorizontalPanel();
        createWidgetForEditorLayout(editorLayout,
                layoutRow,
                0,
                horizontalPanel);

        createWidgetForEditorLayout(editorLayout,
                layoutRow,
                1,
                scenarioWidgetComponentCreator.createGlobalPanel(scenarioHelper,
                        previousExecutionTrace)
        );
    }

    private void addTestRunnerWidget(final Scenario scenario,
            final Caller<ScenarioTestEditorService> service,
            final Path path) {
        layout.add(new TestRunnerWidget(scenario, service, path));
    }

    private void addBulkRunTestScenarioPanel(final Path path,
            final boolean isReadOnly) {
        multiPage.addPage(new Page(bulkRunTestScenarioEditor, TestScenarioConstants.INSTANCE.TestScenarios()) {
            @Override
            public void onFocus() {
                bulkRunTestScenarioEditor.init(path, isReadOnly);
            }

            @Override
            public void onLostFocus() {
            }
        });
    }

    private void setScenario(final Path path,
            final Scenario scenario,
            final AsyncPackageDataModelOracle oracle) {
        scenarioWidgetComponentCreator = new ScenarioWidgetComponentCreator(this,
                path,
                oracle,
                scenario,
                ruleNameService);
        scenarioWidgetComponentCreator.setShowResults(false);
    }

    private void initImportsTab(final AsyncPackageDataModelOracle oracle,
            final Imports imports,
            final boolean readOnly) {
        importsWidget.setContent(oracle,
                imports,
                readOnly);
    }

    @Override
    public void showSaveSuccessful() {
        notification.fire(new NotificationEvent(CommonConstants.INSTANCE.ItemSavedSuccessfully()));
    }

    void setShowResults(boolean showResults) {
        scenarioWidgetComponentCreator.setShowResults(showResults);
    }

    public Scenario getScenario() {
        return scenarioWidgetComponentCreator.getScenario();
    }

    @Override
    public void handleNoSuchFileException() {
        multiPage.clear();
        multiPage.addWidget(new NoSuchFileWidget(),
                CommonConstants.INSTANCE.NoSuchFileTabTitle());
    }

    @Override
    public void setNotDirty() {

    }
}
TOP

Related Classes of org.drools.workbench.screens.testscenario.client.ScenarioEditorViewImpl

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.