/* * Copyright 2012 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.enums.client.editor; import java.util.List; import javax.annotation.PostConstruct; import com.google.gwt.cell.client.FieldUpdater; import com.google.gwt.dom.client.Style; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.user.cellview.client.Column; import com.google.gwt.user.client.ui.VerticalPanel; import com.google.gwt.view.client.ListDataProvider; import org.drools.workbench.screens.enums.client.resources.i18n.EnumEditorConstants; import org.gwtbootstrap3.client.ui.Button; import org.gwtbootstrap3.client.ui.Label; import org.gwtbootstrap3.client.ui.constants.ButtonSize; import org.gwtbootstrap3.client.ui.constants.ButtonType; import org.gwtbootstrap3.client.ui.constants.IconType; import org.gwtbootstrap3.client.ui.gwt.ButtonCell; import org.gwtbootstrap3.client.ui.gwt.CellTable; import org.kie.workbench.common.widgets.metadata.client.KieEditorViewImpl; public class EnumEditorViewImpl extends KieEditorViewImpl implements EnumEditorView { private final ListDataProvider<EnumRow> dataProvider = new ListDataProvider<EnumRow>(); @PostConstruct public void init() { final CellTable<EnumRow> cellTable = new CellTable<EnumRow>( Integer.MAX_VALUE ); cellTable.setStriped( true ); cellTable.setCondensed( true ); cellTable.setBordered( true ); cellTable.setEmptyTableWidget( new Label( EnumEditorConstants.INSTANCE.noEnumsDefined() ) ); cellTable.setWidth( "100%" ); final VerticalPanel panel = new VerticalPanel(); panel.setWidth( "100%" ); //Column definitions final Column<EnumRow, String> factNameColumn = new Column<EnumRow, String>( new EnumEditTextCell() ) { @Override public String getValue( final EnumRow enumRow ) { if ( enumRow.isValid() ) { return enumRow.getFactName(); } return enumRow.getRaw(); } }; final Column<EnumRow, String> fieldNameColumn = new Column<EnumRow, String>( new EnumEditTextCell() ) { @Override public String getValue( final EnumRow enumRow ) { if ( enumRow.isValid() ) { return enumRow.getFieldName(); } return ""; } }; final Column<EnumRow, String> contextColumn = new Column<EnumRow, String>( new EnumEditTextCell() ) { @Override public String getValue( final EnumRow enumRow ) { if ( enumRow.isValid() ) { return enumRow.getContext(); } return ""; } }; //See https://bugzilla.redhat.com/show_bug.cgi?id=1167360 //Replaced image-based ButtonCell with a button due to IE10 interpreting it as a form-submit button and hence responding to ENTER key presses. //See http://stackoverflow.com/questions/12325066/button-click-event-fires-when-pressing-enter-key-in-different-input-no-forms final ButtonCell deleteEnumButton = new ButtonCell( IconType.MINUS, ButtonType.DANGER, ButtonSize.SMALL ); final Column<EnumRow, String> deleteEnumColumn = new Column<EnumRow, String>( deleteEnumButton ) { @Override public String getValue( final EnumRow global ) { return EnumEditorConstants.INSTANCE.remove(); } }; //Write updates back to the model factNameColumn.setFieldUpdater( new FieldUpdater<EnumRow, String>() { @Override public void update( final int index, final EnumRow enumRow, final String value ) { enumRow.setFactName( value ); } } ); fieldNameColumn.setFieldUpdater( new FieldUpdater<EnumRow, String>() { @Override public void update( final int index, final EnumRow enumRow, final String value ) { enumRow.setFieldName( value ); } } ); contextColumn.setFieldUpdater( new FieldUpdater<EnumRow, String>() { @Override public void update( final int index, final EnumRow enumRow, final String value ) { enumRow.setContext( value ); } } ); deleteEnumColumn.setFieldUpdater( new FieldUpdater<EnumRow, String>() { @Override public void update( final int index, final EnumRow enumRow, final String value ) { dataProvider.getList().remove( index ); } } ); cellTable.addColumn( factNameColumn, EnumEditorConstants.INSTANCE.FactColumnHeader() ); cellTable.addColumn( fieldNameColumn, EnumEditorConstants.INSTANCE.FieldColumnHeader() ); cellTable.addColumn( contextColumn, EnumEditorConstants.INSTANCE.ContextColumnHeader() ); cellTable.addColumn( deleteEnumColumn ); cellTable.setColumnWidth( deleteEnumColumn, 100.0, Style.Unit.PX ); // Connect the table to the data provider. dataProvider.addDataDisplay( cellTable ); final Button addButton = new Button( EnumEditorConstants.INSTANCE.AddEnum(), new ClickHandler() { public void onClick( ClickEvent clickEvent ) { final EnumRow enumRow = new EnumRow(); dataProvider.getList().add( enumRow ); } } ); panel.add( addButton ); panel.add( cellTable ); initWidget( panel ); } @Override public void setContent( final List<EnumRow> content ) { dataProvider.setList( content ); } @Override public List<EnumRow> getContent() { return dataProvider.getList(); } }