/*
* 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.table.pages;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import javax.enterprise.context.Dependent;
import javax.enterprise.event.Event;
import javax.enterprise.event.Observes;
import javax.inject.Inject;
import org.drools.workbench.models.guided.dtable.shared.model.GuidedDecisionTable52;
import org.drools.workbench.models.guided.dtable.shared.model.Pattern52;
import org.drools.workbench.screens.guided.dtable.client.resources.i18n.GuidedDecisionTableConstants;
import org.drools.workbench.screens.guided.dtable.client.wizard.table.pages.events.DuplicatePatternsEvent;
import org.drools.workbench.screens.guided.dtable.client.wizard.table.pages.events.PatternRemovedEvent;
import org.kie.workbench.common.widgets.client.datamodel.ImportAddedEvent;
import org.kie.workbench.common.widgets.client.datamodel.ImportRemovedEvent;
import org.uberfire.client.callbacks.Callback;
import org.uberfire.ext.widgets.core.client.wizards.WizardPageStatusChangeEvent;
/**
* A page for the guided Decision Table Wizard to define Fact Patterns
*/
@Dependent
public class FactPatternsPage extends AbstractGuidedDecisionTableWizardPage implements FactPatternsPageView.Presenter {
@Inject
private FactPatternsPageView view;
@Inject
private Event<DuplicatePatternsEvent> duplicatePatternsEvent;
@Inject
private Event<PatternRemovedEvent> patternRemovedEvent;
@Inject
private Event<WizardPageStatusChangeEvent> wizardPageStatusChangeEvent;
@Override
public String getTitle() {
return GuidedDecisionTableConstants.INSTANCE.DecisionTableWizardFactPatterns();
}
@Override
public void initialise() {
view.init(this);
view.setValidator(getValidator());
final List<String> availableTypes = Arrays.asList(oracle.getFactTypes());
view.setAvailableFactTypes(availableTypes);
view.setChosenPatterns(new ArrayList<>());
content.setWidget(view);
}
@Override
public void prepareView() {
// Nothing needs to be done when the page is viewed; it is setup in initialise
}
@Override
public void isComplete(final Callback<Boolean> callback) {
//Are the patterns valid?
final boolean arePatternBindingsUnique = getValidator().arePatternBindingsUnique();
//Signal duplicates to other pages
final DuplicatePatternsEvent event = new DuplicatePatternsEvent(arePatternBindingsUnique);
duplicatePatternsEvent.fire(event);
callback.callback(arePatternBindingsUnique);
}
public void handleImportAddedEvent(@Observes ImportAddedEvent event) {
if (!event.getDataModelOracle().equals(this.oracle)) {
return;
}
final List<String> availableTypes = Arrays.asList(oracle.getFactTypes());
view.setAvailableFactTypes(availableTypes);
}
public void handleImportRemovedEvent(@Observes ImportRemovedEvent event) {
if (!event.getDataModelOracle().equals(this.oracle)) {
return;
}
final List<String> availableTypes = Arrays.asList(oracle.getFactTypes());
view.setAvailableFactTypes(availableTypes);
}
public void onDuplicatePatterns(final @Observes DuplicatePatternsEvent event) {
view.setArePatternBindingsUnique(event.getArePatternBindingsUnique());
}
@Override
public void isPatternEvent(final Pattern52 pattern,
final Callback<Boolean> callback) {
oracle.isFactTypeAnEvent(pattern.getFactType(),
callback);
}
@Override
public void signalRemovalOfPattern(final Pattern52 pattern) {
final PatternRemovedEvent event = new PatternRemovedEvent(pattern);
patternRemovedEvent.fire(event);
}
@Override
public void setConditionPatterns(final List<Pattern52> patterns) {
model.getConditions().clear();
model.getConditions().addAll(patterns);
}
@Override
public void makeResult(final GuidedDecisionTable52 model) {
//Ensure every Pattern is bound
int fi = 1;
for (Pattern52 p : model.getPatterns()) {
if (!getValidator().isPatternValid(p)) {
String binding = NEW_FACT_PREFIX + (fi++);
p.setBoundName(binding);
while (!getValidator().isPatternBindingUnique(p)) {
binding = NEW_FACT_PREFIX + (fi++);
p.setBoundName(binding);
}
}
}
}
@Override
public void stateChanged() {
final WizardPageStatusChangeEvent event = new WizardPageStatusChangeEvent(this);
wizardPageStatusChangeEvent.fire(event);
}
}