/* * Copyright 2014 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.dtree.client.widget.popups; import java.util.ArrayList; import java.util.List; import com.google.gwt.core.client.GWT; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.Event; import com.google.gwt.user.client.ui.Widget; import com.google.gwt.view.client.CellPreviewEvent; import org.drools.workbench.models.guided.dtree.shared.model.GuidedDecisionTree; import org.drools.workbench.models.guided.dtree.shared.model.nodes.TypeNode; import org.drools.workbench.models.guided.dtree.shared.model.parser.GuidedDecisionTreeParserError; import org.drools.workbench.models.guided.dtree.shared.model.parser.messages.AmbiguousRootParserMessage; import org.drools.workbench.models.guided.dtree.shared.model.parser.messages.BindingNotFoundParserMessage; import org.drools.workbench.models.guided.dtree.shared.model.parser.messages.DataTypeConversionErrorParserMessage; import org.drools.workbench.models.guided.dtree.shared.model.parser.messages.DataTypeNotFoundParserMessage; import org.drools.workbench.models.guided.dtree.shared.model.parser.messages.DefaultParserMessage; import org.drools.workbench.models.guided.dtree.shared.model.parser.messages.InvalidRootParserMessage; import org.drools.workbench.models.guided.dtree.shared.model.parser.messages.ParserMessage; import org.drools.workbench.models.guided.dtree.shared.model.parser.messages.UnsupportedFieldConstraintParserMessage; import org.drools.workbench.models.guided.dtree.shared.model.parser.messages.UnsupportedFieldConstraintTypeParserMessage; import org.drools.workbench.models.guided.dtree.shared.model.parser.messages.UnsupportedFieldNatureTypeParserMessage; import org.drools.workbench.models.guided.dtree.shared.model.parser.messages.UnsupportedIActionParserMessage; import org.drools.workbench.models.guided.dtree.shared.model.parser.messages.UnsupportedIPatternParserMessage; import org.drools.workbench.screens.guided.dtree.client.resources.i18n.GuidedDecisionTreeConstants; import org.guvnor.common.services.shared.message.Level; import org.guvnor.messageconsole.client.console.widget.MessageTableWidget; import org.gwtbootstrap3.client.ui.constants.ButtonType; import org.gwtbootstrap3.client.ui.constants.IconType; import org.kie.workbench.common.widgets.client.source.ViewDRLSourceWidget; import org.uberfire.commons.data.Pair; import org.uberfire.ext.widgets.common.client.common.popups.BaseModal; import org.uberfire.ext.widgets.common.client.common.popups.footers.GenericModalFooter; import org.uberfire.mvp.Command; import static org.uberfire.commons.validation.PortablePreconditions.*; public class ParserMessagesPopup extends BaseModal { interface ParserMessagesBinder extends UiBinder<Widget, ParserMessagesPopup> { } private static ParserMessagesBinder uiBinder = GWT.create( ParserMessagesBinder.class ); private final GenericModalFooter footer = new GenericModalFooter(); @UiField(provided = true) MessageTableWidget<Pair<String, ParserMessage>> messages; @UiField ViewDRLSourceWidget drlPreview; private final GuidedDecisionTree model; private final List<Pair<String, ParserMessage>> errors = new ArrayList<Pair<String, ParserMessage>>(); public ParserMessagesPopup( final GuidedDecisionTree model ) { this.model = checkNotNull( "model", model ); for ( GuidedDecisionTreeParserError error : model.getParserErrors() ) { for ( ParserMessage msg : error.getMessages() ) { errors.add( Pair.newPair( error.getOriginalDrl(), msg ) ); } } setTitle( GuidedDecisionTreeConstants.INSTANCE.popupTitleParserMessages() ); messages = new MessageTableWidget<Pair<String, ParserMessage>>(); messages.setToolBarVisible( false ); messages.setHeight( "150px" ); footer.addButton( GuidedDecisionTreeConstants.INSTANCE.remove(), new Command() { @Override public void execute() { model.getParserErrors().clear(); hide(); } }, IconType.WARNING, ButtonType.DANGER ); footer.addButton( GuidedDecisionTreeConstants.INSTANCE.ignore(), new Command() { @Override public void execute() { hide(); } }, ButtonType.PRIMARY ); setBody( uiBinder.createAndBindUi( this ) ); add( footer ); messages.addCellPreviewHandler( new CellPreviewEvent.Handler<Pair<String, ParserMessage>>() { @Override public void onCellPreview( final CellPreviewEvent<Pair<String, ParserMessage>> event ) { if ( Event.getTypeInt( event.getNativeEvent().getType() ) == Event.ONCLICK ) { drlPreview.setContent( event.getValue().getK1() ); } } } ); messages.setRowData( errors ); messages.addLevelColumn( 10, new MessageTableWidget.ColumnExtractor<Level>() { @Override public Level getValue( final Object row ) { return Level.ERROR; } } ); messages.addTextColumn( 90, new MessageTableWidget.ColumnExtractor<String>() { @Override public String getValue( final Object row ) { return getMessage( ( (Pair<String, ParserMessage>) row ).getK2() ); } } ); } private String getMessage( final ParserMessage msg ) { if ( msg instanceof AmbiguousRootParserMessage ) { final TypeNode tn = model.getRoot(); final AmbiguousRootParserMessage m = (AmbiguousRootParserMessage) msg; return GuidedDecisionTreeConstants.INSTANCE.parserMessageAmbiguousRootParserMessage( tn.getClassName(), m.getClassName() ); } else if ( msg instanceof BindingNotFoundParserMessage ) { final BindingNotFoundParserMessage m = (BindingNotFoundParserMessage) msg; return GuidedDecisionTreeConstants.INSTANCE.parserMessageBindingNotFoundParserMessage( m.getBinding() ); } else if ( msg instanceof DataTypeConversionErrorParserMessage ) { final DataTypeConversionErrorParserMessage m = (DataTypeConversionErrorParserMessage) msg; return GuidedDecisionTreeConstants.INSTANCE.parserMessageDataTypeConversionErrorParserMessage( m.getValue(), m.getDataTypeClassName() ); } else if ( msg instanceof DataTypeNotFoundParserMessage ) { final DataTypeNotFoundParserMessage m = (DataTypeNotFoundParserMessage) msg; return GuidedDecisionTreeConstants.INSTANCE.parserMessageDataTypeNotFoundParserMessage( m.getClassName(), m.getFieldName() ); } else if ( msg instanceof DefaultParserMessage ) { final DefaultParserMessage m = (DefaultParserMessage) msg; return GuidedDecisionTreeConstants.INSTANCE.parserMessageDefaultParserMessage( m.getMessage() ); } else if ( msg instanceof InvalidRootParserMessage ) { return GuidedDecisionTreeConstants.INSTANCE.parserMessageInvalidRootParserMessage(); } else if ( msg instanceof UnsupportedFieldConstraintParserMessage ) { return GuidedDecisionTreeConstants.INSTANCE.parserMessageUnsupportedFieldConstraintParserMessage(); } else if ( msg instanceof UnsupportedFieldConstraintTypeParserMessage ) { return GuidedDecisionTreeConstants.INSTANCE.parserMessageUnsupportedFieldConstraintTypeParserMessage(); } else if ( msg instanceof UnsupportedFieldNatureTypeParserMessage ) { return GuidedDecisionTreeConstants.INSTANCE.parserMessageUnsupportedFieldNatureTypeParserMessage(); } else if ( msg instanceof UnsupportedIActionParserMessage ) { return GuidedDecisionTreeConstants.INSTANCE.parserMessageUnsupportedIActionParserMessage(); } else if ( msg instanceof UnsupportedIPatternParserMessage ) { return GuidedDecisionTreeConstants.INSTANCE.parserMessageUnsupportedIPatternParserMessage(); } else { return GuidedDecisionTreeConstants.INSTANCE.parserMessageUnknownMessage(); } } }