/*
* 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.plugins;
import java.util.ArrayList;
import java.util.List;
import javax.enterprise.context.Dependent;
import javax.enterprise.event.Event;
import javax.inject.Inject;
import com.google.gwt.user.client.Window;
import org.drools.workbench.models.guided.dtable.shared.model.ActionCol52;
import org.drools.workbench.models.guided.dtable.shared.model.ActionRetractFactCol52;
import org.drools.workbench.models.guided.dtable.shared.model.DTCellValue52;
import org.drools.workbench.models.guided.dtable.shared.model.DTColumnConfig52;
import org.drools.workbench.models.guided.dtable.shared.model.GuidedDecisionTable52;
import org.drools.workbench.models.guided.dtable.shared.model.LimitedEntryActionRetractFactCol52;
import org.drools.workbench.models.guided.dtable.shared.model.LimitedEntryCol;
import org.drools.workbench.screens.guided.dtable.client.resources.i18n.GuidedDecisionTableErraiConstants;
import org.drools.workbench.screens.guided.dtable.client.wizard.column.NewGuidedDecisionTableColumnWizard;
import org.drools.workbench.screens.guided.dtable.client.wizard.column.commons.HasAdditionalInfoPage;
import org.drools.workbench.screens.guided.dtable.client.wizard.column.pages.AdditionalInfoPage;
import org.drools.workbench.screens.guided.dtable.client.wizard.column.pages.PatternToDeletePage;
import org.drools.workbench.screens.guided.dtable.client.wizard.column.plugins.commons.AdditionalInfoPageInitializer;
import org.drools.workbench.screens.guided.dtable.client.wizard.column.plugins.commons.BaseDecisionTableColumnPlugin;
import org.jboss.errai.ui.client.local.spi.TranslationService;
import org.uberfire.ext.widgets.core.client.wizards.WizardPage;
import org.uberfire.ext.widgets.core.client.wizards.WizardPageStatusChangeEvent;
import static org.drools.workbench.screens.guided.dtable.client.wizard.column.pages.common.DecisionTableColumnViewUtils.nil;
@Dependent
public class ActionRetractFactPlugin extends BaseDecisionTableColumnPlugin implements HasAdditionalInfoPage {
private PatternToDeletePage patternToDeletePage;
private AdditionalInfoPage additionalInfoPage;
private ActionRetractFactCol52 editingCol;
private Boolean patternToDeletePageCompleted = Boolean.FALSE;
@Inject
public ActionRetractFactPlugin(final PatternToDeletePage patternToDeletePage,
final AdditionalInfoPage additionalInfoPage,
final Event<WizardPageStatusChangeEvent> changeEvent,
final TranslationService translationService) {
super(changeEvent,
translationService);
this.patternToDeletePage = patternToDeletePage;
this.additionalInfoPage = additionalInfoPage;
}
@Override
public void init(final NewGuidedDecisionTableColumnWizard wizard) {
super.init(wizard);
setupDefaultValues();
}
@Override
public String getTitle() {
return translate(GuidedDecisionTableErraiConstants.ActionRetractFactPlugin_DeleteAnExistingFact);
}
@Override
public List<WizardPage> getPages() {
return new ArrayList<WizardPage>() {{
if (tableFormat() == GuidedDecisionTable52.TableFormat.LIMITED_ENTRY) {
add(patternToDeletePage);
}
add(additionalInfoPage());
}};
}
@Override
public Boolean generateColumn() {
if (!isValid()) {
return false;
}
presenter.appendColumn(editingCol);
return true;
}
@Override
public DTColumnConfig52 editingCol() {
return editingCol;
}
@Override
public String getHeader() {
return editingCol().getHeader();
}
@Override
public void setHeader(final String header) {
editingCol().setHeader(header);
fireChangeEvent(additionalInfoPage);
}
@Override
public void setInsertLogical(final Boolean value) {
// empty
}
@Override
public void setUpdate(final Boolean value) {
// empty
}
@Override
public boolean showUpdateEngineWithChanges() {
return false;
}
@Override
public boolean showLogicallyInsert() {
return false;
}
public boolean unique(final String header) {
for (final ActionCol52 col52 : presenter.getModel().getActionCols()) {
if (col52.getHeader().equals(header)) {
return false;
}
}
return true;
}
public String getEditingColStringValue() {
return getEditingColValue().getStringValue();
}
public void setEditingColStringValue(final String pattern) {
getEditingColValue().setStringValue(pattern);
}
public void setPatternToDeletePageAsCompleted() {
if (!isPatternToDeletePageCompleted()) {
setPatternToDeletePageCompleted(Boolean.TRUE);
fireChangeEvent(patternToDeletePage);
}
}
public Boolean isPatternToDeletePageCompleted() {
return patternToDeletePageCompleted;
}
void setupDefaultValues() {
editingCol = clone(newActionRetractFactColumn());
}
boolean isValid() {
final String header = editingCol().getHeader();
if (nil(header)) {
showError(translate(GuidedDecisionTableErraiConstants.ActionRetractFactPlugin_YouMustEnterAColumnHeaderValueDescription));
return false;
}
if (!unique(header)) {
showError(translate(GuidedDecisionTableErraiConstants.ActionRetractFactPlugin_ThatColumnNameIsAlreadyInUsePleasePickAnother));
return false;
}
return true;
}
void setPatternToDeletePageCompleted(Boolean completed) {
patternToDeletePageCompleted = completed;
}
void showError(final String message) {
Window.alert(message);
}
private AdditionalInfoPage additionalInfoPage() {
return AdditionalInfoPageInitializer.init(additionalInfoPage,
this);
}
private DTCellValue52 getEditingColValue() {
return getLimitedEntryActionRetractFactCol52().getValue();
}
private LimitedEntryActionRetractFactCol52 getLimitedEntryActionRetractFactCol52() {
return (LimitedEntryActionRetractFactCol52) editingCol();
}
private ActionRetractFactCol52 newActionRetractFactColumn() {
switch (tableFormat()) {
case EXTENDED_ENTRY:
return new ActionRetractFactCol52();
case LIMITED_ENTRY:
final LimitedEntryActionRetractFactCol52 col52 = new LimitedEntryActionRetractFactCol52();
col52.setValue(new DTCellValue52(""));
return col52;
default:
throw new UnsupportedOperationException("Unsupported table format: " + tableFormat());
}
}
private ActionRetractFactCol52 clone(final ActionRetractFactCol52 col52) {
final ActionRetractFactCol52 clone;
if (col52 instanceof LimitedEntryCol) {
clone = new LimitedEntryActionRetractFactCol52();
final DTCellValue52 oldValue = ((LimitedEntryCol) col52).getValue();
final DTCellValue52 newValue = new DTCellValue52(oldValue.getStringValue());
((LimitedEntryCol) clone).setValue(newValue);
} else {
clone = new ActionRetractFactCol52();
}
clone.setHeader(col52.getHeader());
clone.setHideColumn(col52.isHideColumn());
return clone;
}
private GuidedDecisionTable52.TableFormat tableFormat() {
return presenter.getModel().getTableFormat();
}
@Override
public Type getType() {
return Type.BASIC;
}
}