/*
* Copyright 2017 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.column;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Supplier;
import javax.enterprise.context.Dependent;
import javax.inject.Inject;
import com.google.gwt.user.client.ui.Widget;
import org.drools.workbench.screens.guided.dtable.client.resources.i18n.GuidedDecisionTableErraiConstants;
import org.drools.workbench.screens.guided.dtable.client.widget.table.GuidedDecisionTableView;
import org.drools.workbench.screens.guided.dtable.client.wizard.column.pages.SummaryPage;
import org.drools.workbench.screens.guided.dtable.client.wizard.column.pages.common.BaseDecisionTableColumnPage;
import org.drools.workbench.screens.guided.dtable.client.wizard.column.plugins.commons.DecisionTableColumnPlugin;
import org.jboss.errai.ui.client.local.spi.TranslationService;
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;
import org.uberfire.mvp.Command;
/**
* Wizard for creating a Guided Decision Table
*/
@Dependent
public class NewGuidedDecisionTableColumnWizard extends AbstractWizard {
private List<WizardPage> pages = new ArrayList<>();
private Supplier<Boolean> finishCommand;
private WizardView view;
private SummaryPage summaryPage;
private TranslationService translationService;
private GuidedDecisionTableView.Presenter presenter;
private Command onCloseCallback = () -> {
};
@Inject
public NewGuidedDecisionTableColumnWizard(final WizardView view,
final SummaryPage summaryPage,
final TranslationService translationService) {
this.view = view;
this.summaryPage = summaryPage;
this.translationService = translationService;
}
@Override
public String getTitle() {
return translate(GuidedDecisionTableErraiConstants.NewGuidedDecisionTableColumnWizard_AddNewColumn);
}
@Override
public List<WizardPage> getPages() {
return this.pages;
}
public void setPages(final List<WizardPage> pages) {
this.pages = pages;
}
@Override
public Widget getPageWidget(final int pageNumber) {
final WizardPage wizardPage = this.pages.get(pageNumber);
final Widget widget = wizardPage.asWidget();
wizardPage.prepareView();
return widget;
}
@Override
public int getPreferredHeight() {
return 600;
}
@Override
public int getPreferredWidth() {
return 900;
}
@Override
public void isComplete(final Callback<Boolean> callback) {
//Assume complete
callback.callback(true);
for (final WizardPage page : this.pages) {
page.isComplete(result -> {
if (Boolean.FALSE.equals(result)) {
callback.callback(false);
}
});
}
}
@Override
public void start() {
pages = new ArrayList<WizardPage>() {{
add(summaryPage);
addAll(pages);
}};
for (WizardPage page : pages) {
((BaseDecisionTableColumnPage) page).init(this);
}
super.start();
}
public void start(final DecisionTableColumnPlugin plugin) {
plugin.init(this);
loadPages(plugin);
initPages(plugin);
super.start();
}
private void initPages(final DecisionTableColumnPlugin plugin) {
for (final WizardPage page : pages) {
final BaseDecisionTableColumnPage tableColumnPage = (BaseDecisionTableColumnPage) page;
tableColumnPage.init(this);
tableColumnPage.setPlugin(plugin);
}
}
private void loadPages(final DecisionTableColumnPlugin plugin) {
pages.clear();
pages.add(summaryPage);
pages.addAll(plugin.getPages());
}
@Override
public void complete() {
if (finishCommand.get()) {
super.complete();
}
}
@Override
public void close() {
onCloseCallback.execute();
super.close();
}
private WizardView getView() {
return view;
}
public void goTo(final int index) {
getView().selectPage(index);
}
public void init(final GuidedDecisionTableView.Presenter presenter) {
this.presenter = presenter;
}
public void setFinishCommand(final Supplier<Boolean> finishCommand) {
this.finishCommand = finishCommand;
}
public void setOnCloseCallback(final Command onCloseCallback) {
this.onCloseCallback = onCloseCallback;
}
public GuidedDecisionTableView.Presenter getPresenter() {
return presenter;
}
private String translate(final String key,
final Object... args) {
return translationService.format(key,
args);
}
}