/*
* 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.pages;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
import javax.annotation.PostConstruct;
import javax.enterprise.context.Dependent;
import javax.inject.Inject;
import org.drools.workbench.screens.guided.dtable.client.resources.i18n.GuidedDecisionTableErraiConstants;
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.ioc.client.api.ManagedInstance;
import org.jboss.errai.ui.client.local.spi.TranslationService;
import org.uberfire.client.callbacks.Callback;
import org.uberfire.client.mvp.UberElement;
/**
* A summary page for the guided Decision Table Wizard
*/
@Dependent
public class SummaryPage extends BaseDecisionTableColumnPage {
private Boolean includeAdvanced = Boolean.FALSE;
private List<DecisionTableColumnPlugin> plugins = new ArrayList<>();
private ManagedInstance<DecisionTableColumnPlugin> pluginManagedInstance;
private View view;
@Inject
public SummaryPage(final ManagedInstance<DecisionTableColumnPlugin> pluginManagedInstance,
final View view,
final TranslationService translationService) {
super(translationService);
this.pluginManagedInstance = pluginManagedInstance;
this.view = view;
}
@Override
public String getTitle() {
return translate(GuidedDecisionTableErraiConstants.SummaryPage_NewColumn);
}
@Override
public void isComplete(final Callback<Boolean> callback) {
callback.callback(true);
}
@Override
public void prepareView() {
view.init(this);
setupPluginList();
}
@Override
protected UberElement<?> getView() {
return view;
}
@PostConstruct
public void loadPlugins() {
final ArrayList<DecisionTableColumnPlugin> loadedPlugins = new ArrayList<DecisionTableColumnPlugin>() {{
pluginManagedInstance.forEach(this::add);
}};
this.plugins = sortByTitle(loadedPlugins);
}
void openPage(final String selectedItemText) {
if (selectedItemText.isEmpty() || presenter.isReadOnly()) {
return;
}
final DecisionTableColumnPlugin plugin = findPluginByIdentifier(selectedItemText);
wizard.start(plugin);
}
DecisionTableColumnPlugin findPluginByIdentifier(final String selectedItemText) {
for (DecisionTableColumnPlugin plugin : plugins()) {
if (plugin.getIdentifier().equals(selectedItemText)) {
return plugin;
}
}
throw new UnsupportedOperationException("The plugin " + selectedItemText + " does not have an implementation.");
}
List<DecisionTableColumnPlugin> pluginsByCategory() {
return plugins()
.stream()
.filter(plugin -> includeAdvanced || plugin.getType() == DecisionTableColumnPlugin.Type.BASIC)
.collect(Collectors.toList());
}
List<DecisionTableColumnPlugin> plugins() {
return plugins;
}
List<DecisionTableColumnPlugin> sortByTitle(final List<DecisionTableColumnPlugin> plugins) {
final ArrayList<DecisionTableColumnPlugin> sortedPlugins = new ArrayList<>(plugins);
sortedPlugins.sort((plugin1, plugin2) -> {
return plugin1.getTitle().compareTo(plugin2.getTitle());
});
return sortedPlugins;
}
void setIncludeAdvanced(final Boolean includeAdvanced) {
this.includeAdvanced = includeAdvanced;
setupPluginList();
}
private void setupPluginList() {
view.loadPluginList(pluginsByCategory());
view.setSelectedPlugin(currentPluginIdentifier());
}
private String currentPluginIdentifier() {
final DecisionTableColumnPlugin plugin = Optional.ofNullable(plugin()).orElse(DecisionTableColumnPlugin.DEFAULT);
return plugin.getIdentifier();
}
public interface View extends UberElement<SummaryPage> {
void loadPluginList(final List<DecisionTableColumnPlugin> plugins);
void setSelectedPlugin(final String identifier);
}
}