Package org.drools.workbench.screens.guided.dtable.client.wizard

Source Code of org.drools.workbench.screens.guided.dtable.client.wizard.NewGuidedDecisionTableWizard

/*
* Copyright 2011 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.guided.dtable.client.wizard;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.inject.Inject;

import com.google.gwt.user.client.Command;
import com.google.gwt.user.client.ui.Widget;
import org.drools.workbench.models.guided.dtable.shared.model.Analysis;
import org.drools.workbench.models.guided.dtable.shared.model.BaseColumn;
import org.drools.workbench.models.guided.dtable.shared.model.ConditionCol52;
import org.drools.workbench.models.guided.dtable.shared.model.DTCellValue52;
import org.drools.workbench.models.guided.dtable.shared.model.GuidedDecisionTable52;
import org.drools.workbench.screens.guided.dtable.client.handlers.NewGuidedDecisionTableHandler;
import org.drools.workbench.screens.guided.dtable.client.resources.i18n.GuidedDecisionTableConstants;
import org.drools.workbench.screens.guided.dtable.client.widget.Validator;
import org.drools.workbench.screens.guided.dtable.client.wizard.pages.AbstractGuidedDecisionTableWizardPage;
import org.drools.workbench.screens.guided.dtable.client.wizard.pages.ActionInsertFactFieldsPage;
import org.drools.workbench.screens.guided.dtable.client.wizard.pages.ActionSetFieldsPage;
import org.drools.workbench.screens.guided.dtable.client.wizard.pages.ColumnExpansionPage;
import org.drools.workbench.screens.guided.dtable.client.wizard.pages.FactPatternConstraintsPage;
import org.drools.workbench.screens.guided.dtable.client.wizard.pages.FactPatternsPage;
import org.drools.workbench.screens.guided.dtable.client.wizard.pages.ImportsPage;
import org.drools.workbench.screens.guided.dtable.client.wizard.pages.RowExpander;
import org.drools.workbench.screens.guided.dtable.client.wizard.pages.SummaryPage;
import org.kie.workbench.common.widgets.client.datamodel.AsyncPackageDataModelOracle;
import org.uberfire.backend.vfs.Path;
import org.uberfire.client.wizards.Wizard;
import org.uberfire.client.wizards.WizardPage;
import org.uberfire.client.wizards.WizardPresenter;

/**
* Wizard for creating a Guided Decision Table
*/
public class NewGuidedDecisionTableWizard implements Wizard<NewGuidedDecisionTableAssetWizardContext> {

    @Inject
    private SummaryPage summaryPage;

    @Inject
    private ImportsPage importsPage;

    @Inject
    private ColumnExpansionPage columnExpansionPage;

    @Inject
    private FactPatternsPage factPatternsPage;

    @Inject
    private FactPatternConstraintsPage factPatternConstraintsPage;

    @Inject
    private ActionSetFieldsPage actionSetFieldsPage;

    @Inject
    private ActionInsertFactFieldsPage actionInsertFactFieldsPage;

    @Inject
    private WizardPresenter presenter;

    private final List<WizardPage> pages = new ArrayList<WizardPage>();

    private NewGuidedDecisionTableAssetWizardContext context;
    private GuidedDecisionTable52 model;
    private AsyncPackageDataModelOracle oracle;
    private NewGuidedDecisionTableHandler handler;

    @PostConstruct
    public void setupPages() {
        pages.add( summaryPage );
        pages.add( importsPage );
        pages.add( factPatternsPage );
        pages.add( factPatternConstraintsPage );
        pages.add( actionSetFieldsPage );
        pages.add( actionInsertFactFieldsPage );
        pages.add( columnExpansionPage );
    }

    public void setContent( final NewGuidedDecisionTableAssetWizardContext context,
                            final AsyncPackageDataModelOracle oracle,
                            final NewGuidedDecisionTableHandler handler ) {
        this.context = context;
        this.model = new GuidedDecisionTable52();
        this.model.setTableFormat( context.getTableFormat() );
        this.oracle = oracle;
        this.handler = handler;

        final Validator validator = new Validator( model.getConditions() );

        for ( WizardPage page : pages ) {
            final AbstractGuidedDecisionTableWizardPage dtp = (AbstractGuidedDecisionTableWizardPage) page;
            dtp.setContent( context,
                            oracle,
                            model,
                            validator );
            dtp.initialise();
        }
    }

    @Override
    public String getTitle() {
        return GuidedDecisionTableConstants.INSTANCE.DecisionTableWizard();
    }

    @Override
    public List<WizardPage> getPages() {
        return this.pages;
    }

    @Override
    public Widget getPageWidget( final int pageNumber ) {
        final AbstractGuidedDecisionTableWizardPage dtp = (AbstractGuidedDecisionTableWizardPage) this.pages.get( pageNumber );
        final Widget w = dtp.asWidget();
        dtp.prepareView();
        return w;
    }

    @Override
    public int getPreferredHeight() {
        return 500;
    }

    @Override
    public int getPreferredWidth() {
        return 800;
    }

    @Override
    public boolean isComplete() {
        for ( WizardPage page : this.pages ) {
            if ( !page.isComplete() ) {
                return false;
            }
        }
        return true;
    }

    @Override
    public void complete() {

        //Ensure each page updates the decision table as necessary
        for ( WizardPage page : this.pages ) {
            AbstractGuidedDecisionTableWizardPage gep = (AbstractGuidedDecisionTableWizardPage) page;
            gep.makeResult( model );
        }

        //Expand rows
        final RowExpander re = new RowExpander( model,
                                                oracle );

        //Mark columns on which we are to expand (default is to include all)
        for ( BaseColumn c : model.getExpandedColumns() ) {
            re.setExpandColumn( c,
                                false );
        }
        final List<ConditionCol52> columns = columnExpansionPage.getColumnsToExpand();
        for ( ConditionCol52 c : columns ) {
            re.setExpandColumn( c,
                                true );
        }

        //Slurp out expanded rows and construct decision table data
        int rowIndex = 0;
        final RowExpander.RowIterator ri = re.iterator();
        model.initAnalysisColumn();
        while ( ri.hasNext() ) {
            List<DTCellValue52> row = ri.next();
            model.getData().add( row );
            model.getData().get( rowIndex ).get( 0 ).setNumericValue( new BigDecimal( rowIndex + 1 ) );
            model.getAnalysisData().add( new Analysis() );
            rowIndex++;
        }

        //Save it!
        final String baseFileName = summaryPage.getBaseFileName();
        final Path contextPath = context.getContextPath();
        model.setTableName( baseFileName );
        handler.save( baseFileName,
                      contextPath,
                      model,
                      new Command() {

                          @Override
                          public void execute() {
                              presenter.hide();
                          }

                      } );
    }

}
TOP

Related Classes of org.drools.workbench.screens.guided.dtable.client.wizard.NewGuidedDecisionTableWizard

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.