/* * Copyright 2010 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.workitems.client.widget; import java.util.List; import java.util.Map; import javax.annotation.PostConstruct; import javax.enterprise.context.Dependent; import javax.inject.Inject; import com.google.gwt.dom.client.Style; import com.google.gwt.event.dom.client.ChangeEvent; import com.google.gwt.event.dom.client.ChangeHandler; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.FlowPanel; import org.drools.workbench.screens.workitems.client.resources.i18n.WorkItemsEditorConstants; import org.drools.workbench.screens.workitems.model.WorkItemDefinitionElements; import org.drools.workbench.screens.workitems.service.WorkItemsEditorService; import org.gwtbootstrap3.client.ui.Button; import org.gwtbootstrap3.client.ui.Container; import org.gwtbootstrap3.client.ui.Heading; import org.gwtbootstrap3.client.ui.ListBox; import org.gwtbootstrap3.client.ui.Row; import org.gwtbootstrap3.client.ui.constants.ColumnSize; import org.gwtbootstrap3.client.ui.constants.HeadingSize; import org.uberfire.client.mvp.UberView; @Dependent public class WorkItemDefinitionElementsBrowser extends Composite implements HasWorkItemDefinitionElements, UberView<WorkItemDefinitionElementSelectedListener> { @Inject private WorkItemMetaDataLoader metaDataLoader; private final Container container = new Container() {{ setFluid( true ); }}; private final ListBox importsList = new ListBox() {{ addStyleName( ColumnSize.MD_12.getCssName() ); }}; private final ListBox imagesList = new ListBox() {{ addStyleName( ColumnSize.MD_12.getCssName() ); }}; private final FlowPanel elements = new FlowPanel() {{ getElement().getStyle().setPaddingBottom( 5, Style.Unit.PX ); }}; private WorkItemDefinitionElementSelectedListener presenter; public WorkItemDefinitionElementsBrowser() { final Heading label = new Heading( HeadingSize.H4, WorkItemsEditorConstants.INSTANCE.BrowserTitle() ); label.getElement().getStyle().setTextAlign( Style.TextAlign.CENTER ); label.addStyleName( ColumnSize.MD_12.getCssName() ); container.add( new Row() {{ add( label ); }} ); container.add( new Row() {{ add( elements ); }} ); //Imports container.add( new Row() {{ add( importsList ); }} ); importsList.addItem( WorkItemsEditorConstants.INSTANCE.ChooseImportClass() ); importsList.addItem( "BooleanDataType", "import org.drools.core.process.core.datatype.impl.type.BooleanDataType;" ); importsList.addItem( "EnumDataType", "import org.drools.core.process.core.datatype.impl.type.EnumDataType;" ); importsList.addItem( "FloatDataType", "import org.drools.core.process.core.datatype.impl.type.FloatDataType;" ); importsList.addItem( "IntegerDataType", "import org.drools.core.process.core.datatype.impl.type.IntegerDataType;" ); importsList.addItem( "ListDataType", "import org.drools.core.process.core.datatype.impl.type.ListDataType;" ); importsList.addItem( "ObjectDataType", "import org.drools.core.process.core.datatype.impl.type.ObjectDataType;" ); importsList.addItem( "StringDataType", "import org.drools.core.process.core.datatype.impl.type.StringDataType;" ); importsList.addItem( "UndefinedDataType", "import org.drools.core.process.core.datatype.impl.type.UndefinedDataType;" ); importsList.setVisibleItemCount( 9 ); importsList.setSelectedIndex( 0 ); importsList.addChangeHandler( new ChangeHandler() { public void onChange( ChangeEvent event ) { elementSelected( importsList.getItemText( importsList.getSelectedIndex() ), importsList.getValue( importsList.getSelectedIndex() ) ); } } ); //Images container.add( new Row() {{ add( imagesList ); }} ); imagesList.setVisibleItemCount( 1 ); imagesList.setSelectedIndex( 0 ); imagesList.addChangeHandler( new ChangeHandler() { public void onChange( ChangeEvent event ) { elementSelected( imagesList.getItemText( imagesList.getSelectedIndex() ), imagesList.getValue( imagesList.getSelectedIndex() ) ); } } ); initWidget( container ); } @PostConstruct public void loadMetaData() { metaDataLoader.loadMetaContent( this ); } @Override public void init( final WorkItemDefinitionElementSelectedListener presenter ) { this.presenter = presenter; } @Override public void setDefinitionElements( final WorkItemDefinitionElements metaData ) { for ( final Map.Entry<String, String> entry : metaData.getDefinitionElements().entrySet() ) { final String description = getButtonDescription( entry.getKey() ); elements.add( new Button( description ) {{ setBlock( true ); addClickHandler( new ClickHandler() { @Override public void onClick( final ClickEvent event ) { elementSelected( description, entry.getValue() ); } } ); }} ); } } private String getButtonDescription( String buttonKey ) { if ( buttonKey == null || buttonKey.trim().length() == 0 ) { return ""; } else if ( WorkItemsEditorService.WORK_ITEMS_EDITOR_SETTINGS_DEFINITION.equals( buttonKey ) ) { return WorkItemsEditorConstants.INSTANCE.Definition(); } else if ( WorkItemsEditorService.WORK_ITEMS_EDITOR_SETTINGS_DISPLAY_NAME.equals( buttonKey ) ) { return WorkItemsEditorConstants.INSTANCE.DisplayName(); } else if ( WorkItemsEditorService.WORK_ITEMS_EDITOR_SETTINGS_PARAMETER.equals( buttonKey ) ) { return WorkItemsEditorConstants.INSTANCE.Parameter(); } else if ( WorkItemsEditorService.WORK_ITEMS_EDITOR_SETTINGS_RESULT.equals( buttonKey ) ) { return WorkItemsEditorConstants.INSTANCE.Result(); } return buttonKey; } public void setImages( final List<String> workItemImages ) { imagesList.clear(); imagesList.addItem( WorkItemsEditorConstants.INSTANCE.ChooseIcon() ); for ( String workItemImage : workItemImages ) { imagesList.addItem( workItemImage ); } } private void elementSelected( final String title, final String value ) { presenter.onElementSelected( title, value ); } }