/*
* 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.kie.workbench.common.widgets.client.popups.validation;
import java.util.List;
import javax.enterprise.context.Dependent;
import javax.inject.Inject;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.view.client.ListDataProvider;
import com.google.gwt.view.client.Range;
import org.guvnor.common.services.shared.message.Level;
import org.guvnor.common.services.shared.validation.model.ValidationMessage;
import org.guvnor.messageconsole.client.console.widget.MessageTableWidget;
import org.jboss.errai.common.client.dom.Button;
import org.jboss.errai.common.client.dom.Div;
import org.jboss.errai.common.client.dom.HTMLElement;
import org.jboss.errai.common.client.ui.ElementWrapperWidget;
import org.jboss.errai.ui.client.local.spi.TranslationService;
import org.jboss.errai.ui.shared.api.annotations.DataField;
import org.jboss.errai.ui.shared.api.annotations.EventHandler;
import org.jboss.errai.ui.shared.api.annotations.Templated;
import org.kie.workbench.common.widgets.client.resources.i18n.KieWorkbenchWidgetsConstants;
import org.uberfire.ext.widgets.common.client.common.popups.BaseModal;
@Dependent
@Templated
public class ValidationPopupViewImpl implements ValidationPopupView {
@DataField("view")
Div view;
@DataField("validationTable")
MessageTableWidget<ValidationMessage> validationTable;
@DataField("yesButton")
Button yesButton;
@DataField("cancelButton")
Button cancelButton;
private Presenter presenter;
private BaseModal modal;
private ListDataProvider<ValidationMessage> validationTableDataProvider;
private TranslationService translationService;
@Inject
public ValidationPopupViewImpl( final Div view,
final Button yesButton,
final Button cancelButton,
final TranslationService translationService ) {
this.view = view;
this.yesButton = yesButton;
this.cancelButton = cancelButton;
this.translationService = translationService;
this.validationTable = new MessageTableWidget<>( MessageTableWidget.Mode.PAGED );
validationTable.setDataProvider( new ListDataProvider<>() );
validationTable.addLevelColumn( 10,
row -> {
final Level level = ( (ValidationMessage) row ).getLevel();
return level != null ? level : Level.ERROR;
} );
validationTable.addTextColumn( 90,
row -> ( (ValidationMessage) row ).getText() );
validationTableDataProvider = new ListDataProvider<>();
validationTableDataProvider.addDataDisplay( validationTable );
}
@Override
public void init( final Presenter presenter ) {
this.presenter = presenter;
}
@Override
public HTMLElement getElement() {
return view;
}
@Override
public void setYesButtonText( final String text ) {
yesButton.setTextContent( text );
}
@Override
public void setCancelButtonText( final String text ) {
cancelButton.setTextContent( text );
}
@Override
public void showYesButton( final boolean show ) {
yesButton.getStyle().setProperty( "display", show ? "inline" : "none" );
}
@Override
public void showCancelButton( final boolean show ) {
cancelButton.getStyle().setProperty( "display", show ? "inline" : "none" );
}
@Override
public void setValidationMessages( List<ValidationMessage> messages ) {
ListDataProvider<ValidationMessage> listDataProvider = (ListDataProvider<ValidationMessage>) this.validationTable.getDataProvider();
listDataProvider.getList().clear();
listDataProvider.getList().addAll( messages );
validationTable.setVisibleRangeAndClearData( new Range( 0, 5 ), true );
}
@Override
public void show() {
modal = new BaseModal();
modal.setTitle( translationService.getTranslation( KieWorkbenchWidgetsConstants.ValidationPopupViewImpl_ValidationErrors ) );
modal.setBody( ElementWrapperWidget.getWidget( view ) );
modal.show();
}
@Override
public void hide() {
if ( modal != null ) {
modal.hide();
}
}
@EventHandler("yesButton")
public void yesButtonClicked( final ClickEvent clickEvent ) {
presenter.onYesButtonClicked();
}
@EventHandler("cancelButton")
public void cancelButtonClicked( final ClickEvent clickEvent ) {
presenter.onCancelButtonClicked();
}
}