/* * Copyright 2016 Red Hat, Inc. and/or its affiliates. * * 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.table; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; import javax.annotation.PostConstruct; import javax.enterprise.context.Dependent; import javax.inject.Inject; import com.google.gwt.user.client.ui.Widget; 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.models.guided.dtable.shared.model.MetadataCol52; 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.table.pages.AbstractGuidedDecisionTableWizardPage; import org.drools.workbench.screens.guided.dtable.client.wizard.table.pages.ActionInsertFactFieldsPage; import org.drools.workbench.screens.guided.dtable.client.wizard.table.pages.ActionSetFieldsPage; import org.drools.workbench.screens.guided.dtable.client.wizard.table.pages.ColumnExpansionPage; import org.drools.workbench.screens.guided.dtable.client.wizard.table.pages.FactPatternConstraintsPage; import org.drools.workbench.screens.guided.dtable.client.wizard.table.pages.FactPatternsPage; import org.drools.workbench.screens.guided.dtable.client.wizard.table.pages.ImportsPage; import org.drools.workbench.screens.guided.dtable.client.wizard.table.pages.RowExpander; import org.drools.workbench.screens.guided.dtable.client.wizard.table.pages.SummaryPage; import org.kie.workbench.common.widgets.client.datamodel.AsyncPackageDataModelOracle; import org.uberfire.backend.vfs.Path; import org.uberfire.client.callbacks.Callback; import org.uberfire.ext.widgets.core.client.wizards.AbstractWizard; import org.uberfire.ext.widgets.core.client.wizards.WizardPage; import org.uberfire.ext.widgets.core.client.wizards.WizardView; /** * Wizard for creating a Guided Decision Table */ @Dependent public class NewGuidedDecisionTableWizard extends AbstractWizard { private final List<WizardPage> pages = new ArrayList<WizardPage>(); @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; private Path contextPath; private GuidedDecisionTable52 model; private AsyncPackageDataModelOracle oracle; private GuidedDecisionTableWizardHandler handler; @Inject private WizardView view; @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 Path contextPath, final String baseFileName, final GuidedDecisionTable52.TableFormat tableFormat, final GuidedDecisionTable52.HitPolicy hitPolicy, final AsyncPackageDataModelOracle oracle, final GuidedDecisionTableWizardHandler handler) { this.model = new GuidedDecisionTable52(); this.model.setTableFormat(tableFormat); this.model.setHitPolicy(hitPolicy); if (GuidedDecisionTable52.HitPolicy.RESOLVED_HIT.equals(hitPolicy)) { final MetadataCol52 metadataCol52 = new MetadataCol52(); metadataCol52.setMetadata(GuidedDecisionTable52.HitPolicy.RESOLVED_HIT_METADATA_NAME); this.model.getMetadataCols().add(metadataCol52); } this.contextPath = contextPath; this.oracle = oracle; this.handler = handler; final Validator validator = new Validator(model.getConditions()); for (WizardPage page : pages) { final AbstractGuidedDecisionTableWizardPage dtp = (AbstractGuidedDecisionTableWizardPage) page; dtp.setContent(contextPath, baseFileName, tableFormat, hitPolicy, 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 1150; } @Override public void isComplete(final Callback<Boolean> callback) { //Assume complete callback.callback(true); for (WizardPage page : this.pages) { page.isComplete(new Callback<Boolean>() { @Override public void callback(final Boolean result) { if (Boolean.FALSE.equals(result)) { callback.callback(false); } } }); } } @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(); while (ri.hasNext()) { List<DTCellValue52> row = ri.next(); model.getData().add(row); model.getData().get(rowIndex).get(0).setNumericValue(new BigDecimal(rowIndex + 1)); rowIndex++; } //Save it! final String baseFileName = summaryPage.getBaseFileName(); final Path contextPath = this.contextPath; model.setTableName(baseFileName); super.complete(); handler.save(contextPath, baseFileName, model); } @Override public void close() { super.close(); handler.destroyWizard(); } public interface GuidedDecisionTableWizardHandler { void save(final Path contextPath, final String baseFileName, final GuidedDecisionTable52 model); void destroyWizard(); } }