/* * Copyright 2015 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.screens.datamodeller.client.widgets.advanceddomain.valuepaireditor.multiple; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.TreeMap; import com.google.gwt.core.client.GWT; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.Widget; import org.gwtbootstrap3.client.ui.Button; import org.gwtbootstrap3.client.ui.Column; import org.gwtbootstrap3.client.ui.FormLabel; import org.gwtbootstrap3.client.ui.HelpBlock; import org.gwtbootstrap3.client.ui.Row; import org.gwtbootstrap3.client.ui.constants.ButtonType; import org.gwtbootstrap3.client.ui.constants.ColumnSize; import org.gwtbootstrap3.client.ui.constants.IconType; import org.kie.workbench.common.screens.datamodeller.client.resources.i18n.Constants; import org.kie.workbench.common.screens.datamodeller.client.widgets.advanceddomain.valuepaireditor.ValuePairEditor; import org.kie.workbench.common.screens.datamodeller.client.widgets.advanceddomain.valuepaireditor.ValuePairEditorHandler; import org.kie.workbench.common.services.datamodeller.core.AnnotationValuePairDefinition; public class MultipleValuePairEditorViewImpl extends Composite implements MultipleValuePairEditorView { interface MultipleValuePairEditorViewImplUiBinder extends UiBinder<Widget, MultipleValuePairEditorViewImpl> { } private static MultipleValuePairEditorViewImplUiBinder uiBinder = GWT.create( MultipleValuePairEditorViewImplUiBinder.class ); @UiField FormLabel valuePairLabel; @UiField Column itemsPanel; @UiField HelpBlock helpBlock; @UiField Column addItemPanel; private Map<Integer, ValuePairEditor<?>> indexToEditor = new TreeMap<Integer, ValuePairEditor<?>>(); private HashMap<Integer, Widget> indexToEditorWidget = new HashMap<Integer, Widget>(); private Presenter presenter; private ValuePairEditor<?> addItemEditor; private AnnotationValuePairDefinition valuePairDefinition; int itemIds = 0; public MultipleValuePairEditorViewImpl() { initWidget( uiBinder.createAndBindUi( this ) ); } @Override public void init( Presenter presenter ) { this.presenter = presenter; } @Override public void init( AnnotationValuePairDefinition valuePairDefinition ) { this.valuePairDefinition = valuePairDefinition; initAddItemPanel(); } @Override public void setValuePairLabel( String valuePairLabel ) { this.valuePairLabel.setText( valuePairLabel ); } @Override public void showValuePairName( boolean show ) { this.valuePairLabel.setVisible( show ); } @Override public void showValuePairRequiredIndicator( boolean required ) { this.valuePairLabel.setShowRequiredIndicator( required ); } @Override public void setErrorMessage( String errorMessage ) { helpBlock.setText( errorMessage ); } @Override public void clearErrorMessage() { helpBlock.setText( null ); } @Override public void clear() { itemsPanel.clear(); indexToEditor.clear(); indexToEditorWidget.clear(); } @Override public Integer addItemEditor( ValuePairEditor<?> valuePairEditor ) { Row itemEditorRow = new Row(); Column itemEditorColumn = new Column( ColumnSize.MD_10 ); final Integer itemId = nextItemId(); valuePairEditor.showValuePairName( false ); valuePairEditor.addEditorHandler( new ValuePairEditorHandler() { @Override public void onValidate() { } @Override public void onValueChange() { presenter.onValueChange( itemId ); } } ); itemEditorColumn.add( valuePairEditor ); itemEditorRow.add( itemEditorColumn ); Column deleteButtonColumn = new Column( ColumnSize.MD_2 ); Button deleteButton = new Button( Constants.INSTANCE.advanced_domain_multiple_value_pair_editor_action_delete() ); deleteButton.setType( ButtonType.LINK ); deleteButton.addClickHandler( new ClickHandler() { @Override public void onClick( ClickEvent event ) { presenter.onRemoveItem( itemId ); } } ); deleteButtonColumn.add( deleteButton ); itemEditorRow.add( deleteButtonColumn ); itemsPanel.add( itemEditorRow ); indexToEditor.put( itemId, valuePairEditor ); indexToEditorWidget.put( itemId, itemEditorRow ); return itemId; } @Override public void removeItemEditor( Integer itemId ) { Widget widget = indexToEditorWidget.get( itemId ); if ( widget != null ) { itemsPanel.remove( widget ); } indexToEditorWidget.remove( itemId ); indexToEditor.remove( itemId ); } @Override public ValuePairEditor<?> getItemEditor( Integer itemId ) { return indexToEditor.get( itemId ); } @Override public List<ValuePairEditor<?>> getItemEditors() { List<ValuePairEditor<?>> editors = new ArrayList<ValuePairEditor<?>>(); for ( Integer index : indexToEditor.keySet() ) { editors.add( indexToEditor.get( index ) ); } return editors; } public ValuePairEditor<?> getAddItemEditor() { return addItemEditor; } @Override public void showAlert( String message ) { Window.alert( message ); } private void initAddItemPanel() { Row addItemRow = new Row(); addItemPanel.add( addItemRow ); Column addItemEditorColumn = new Column( ColumnSize.MD_10 ); //addItemContainer.setVerticalAlignment( HasVerticalAlignment.ALIGN_BOTTOM ); addItemEditor = presenter.createValuePairEditor( valuePairDefinition ); addItemEditor.showValuePairName( false ); addItemEditorColumn.add( addItemEditor ); addItemRow.add( addItemEditorColumn ); Column addItemButtonColumn = new Column( ColumnSize.MD_2 ); Button addItemButton = new Button( Constants.INSTANCE.advanced_domain_multiple_value_pair_editor_action_add() ); addItemButton.setType( ButtonType.PRIMARY ); addItemButton.setIcon( IconType.PLUS ); addItemButton.addClickHandler( new ClickHandler() { @Override public void onClick( ClickEvent event ) { presenter.onAddItem(); } } ); addItemButtonColumn.add( addItemButton ); addItemRow.add( addItemButtonColumn ); addItemPanel.add( addItemRow ); } private Integer nextItemId() { return itemIds++; } }