/*
* 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.kie.workbench.common.screens.projecteditor.client.forms;
import java.util.ArrayList;
import java.util.List;
import javax.inject.Inject;
import com.google.gwt.cell.client.CheckboxCell;
import com.google.gwt.cell.client.EditTextCell;
import com.google.gwt.cell.client.FieldUpdater;
import com.google.gwt.cell.client.SelectionCell;
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Style;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.uibinder.client.UiHandler;
import com.google.gwt.user.cellview.client.Column;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HasHorizontalAlignment;
import com.google.gwt.user.client.ui.Widget;
import com.google.gwt.view.client.ProvidesKey;
import org.gwtbootstrap3.client.ui.Button;
import org.gwtbootstrap3.client.ui.constants.ButtonType;
import org.gwtbootstrap3.client.ui.constants.IconType;
import org.gwtbootstrap3.client.ui.gwt.ButtonCell;
import org.kie.workbench.common.screens.projecteditor.client.resources.ProjectEditorResources;
import org.kie.workbench.common.services.shared.kmodule.ClockTypeOption;
import org.kie.workbench.common.services.shared.kmodule.KSessionModel;
import org.kie.workbench.common.widgets.client.resources.i18n.CommonConstants;
import org.uberfire.ext.widgets.common.client.common.popups.errors.ErrorPopup;
import org.uberfire.ext.widgets.common.client.tables.SimpleTable;
public class KSessionsPanelViewImpl
extends Composite
implements KSessionsPanelView {
private Presenter presenter;
interface Binder
extends
UiBinder<Widget, KSessionsPanelViewImpl> {
}
private static Binder uiBinder = GWT.create( Binder.class );
public static final ProvidesKey<KSessionModel> KEY_PROVIDER = new ProvidesKey<KSessionModel>() {
@Override
public Object getKey( KSessionModel item ) {
return item == null ? null : item.getName();
}
};
@UiField(provided = true)
SimpleTable<KSessionModel> dataGrid = new SimpleTable<KSessionModel>( KEY_PROVIDER );
@UiField
Button addButton;
private final KSessionModelOptionsPopUp kSessionModelOptionsPopUp;
@Inject
public KSessionsPanelViewImpl( KSessionModelOptionsPopUp kSessionModelOptionsPopUp ) {
this.kSessionModelOptionsPopUp = kSessionModelOptionsPopUp;
setUpNameColumn();
setUpDefaultColumn();
setUpStateColumn();
setUpClockColumn();
setUpOptionsColumn();
setUpRemoveColumn();
initWidget( uiBinder.createAndBindUi( this ) );
}
private void setUpNameColumn() {
final EditTextCell cell = new EditTextCell();
Column<KSessionModel, String> column = new Column<KSessionModel, String>( cell ) {
@Override
public String getValue( KSessionModel kSessionModel ) {
return kSessionModel.getName();
}
};
dataGrid.addColumn( column,
ProjectEditorResources.CONSTANTS.Name() );
dataGrid.setColumnWidth( column,
40,
Style.Unit.PCT );
column.setFieldUpdater( new FieldUpdater<KSessionModel, String>() {
@Override
public void update( int row,
KSessionModel kSessionModel,
String value ) {
cell.clearViewData( KEY_PROVIDER.getKey( kSessionModel ) );
presenter.onRename( kSessionModel,
value );
}
} );
}
@Override
public void refresh() {
dataGrid.refresh();
}
private void setUpClockColumn() {
ArrayList<String> options = new ArrayList<String>();
options.add( ProjectEditorResources.CONSTANTS.Realtime() );
options.add( ProjectEditorResources.CONSTANTS.Pseudo() );
Column<KSessionModel, String> column = new Column<KSessionModel, String>( new SelectionCell( options ) ) {
@Override
public String getValue( KSessionModel kSessionModel ) {
if ( kSessionModel.getClockType().equals( ClockTypeOption.PSEUDO ) ) {
return ProjectEditorResources.CONSTANTS.Pseudo();
} else if ( kSessionModel.getClockType().equals( ClockTypeOption.REALTIME ) ) {
return ProjectEditorResources.CONSTANTS.Realtime();
} else {
return kSessionModel.getClockType().toString();
}
}
};
column.setFieldUpdater( new FieldUpdater<KSessionModel, String>() {
@Override
public void update( int index,
KSessionModel model,
String value ) {
if ( value.equals( ProjectEditorResources.CONSTANTS.Pseudo() ) ) {
model.setClockType( ClockTypeOption.PSEUDO );
} else {
model.setClockType( ClockTypeOption.REALTIME );
}
}
} );
dataGrid.addColumn( column,
ProjectEditorResources.CONSTANTS.Clock() );
dataGrid.setColumnWidth( column,
60,
Style.Unit.PCT );
}
private void setUpStateColumn() {
ArrayList<String> options = new ArrayList<String>();
options.add( ProjectEditorResources.CONSTANTS.Stateful() );
options.add( ProjectEditorResources.CONSTANTS.Stateless() );
Column<KSessionModel, String> column = new Column<KSessionModel, String>( new SelectionCell( options ) ) {
@Override
public String getValue( KSessionModel kSessionModel ) {
if ( kSessionModel.getType() == null ) {
return ProjectEditorResources.CONSTANTS.Stateful();
} else if ( kSessionModel.getType().equals( "stateful" ) ) {
return ProjectEditorResources.CONSTANTS.Stateful();
} else if ( kSessionModel.getType().equals( "stateless" ) ) {
return ProjectEditorResources.CONSTANTS.Stateless();
} else {
return kSessionModel.getType();
}
}
};
column.setFieldUpdater( new FieldUpdater<KSessionModel, String>() {
@Override
public void update( int index,
KSessionModel model,
String value ) {
if ( value.equals( ProjectEditorResources.CONSTANTS.Stateful() ) ) {
model.setType( "stateful" );
} else {
model.setType( "stateless" );
}
}
} );
dataGrid.addColumn( column,
ProjectEditorResources.CONSTANTS.State() );
dataGrid.setColumnWidth( column,
60,
Style.Unit.PCT );
}
private void setUpDefaultColumn() {
Column<KSessionModel, Boolean> column = new Column<KSessionModel, Boolean>( new CheckboxCell() ) {
@Override
public Boolean getValue( KSessionModel model ) {
return model.isDefault();
}
};
column.setFieldUpdater( new FieldUpdater<KSessionModel, Boolean>() {
@Override
public void update( int index,
KSessionModel model,
Boolean value ) {
model.setDefault( value );
presenter.onDefaultChanged( model );
}
} );
column.setHorizontalAlignment( HasHorizontalAlignment.ALIGN_CENTER );
dataGrid.addColumn( column,
ProjectEditorResources.CONSTANTS.Default() );
dataGrid.setColumnWidth( column,
80,
Style.Unit.PX );
}
private void setUpOptionsColumn() {
final ButtonCell typeImageCell = new ButtonCell( ButtonType.DEFAULT, IconType.EDIT );
final Column<KSessionModel, String> column = new Column<KSessionModel, String>( typeImageCell ) {
@Override
public String getValue( KSessionModel model ) {
return "";
}
};
column.setFieldUpdater( new FieldUpdater<KSessionModel, String>() {
@Override
public void update( int index,
KSessionModel model,
String value ) {
presenter.onOptionsSelectedForKSessions( model );
}
} );
column.setHorizontalAlignment( HasHorizontalAlignment.ALIGN_CENTER );
dataGrid.addColumn( column,
CommonConstants.INSTANCE.Edit() );
dataGrid.setColumnWidth( column,
60,
Style.Unit.PX );
}
private void setUpRemoveColumn() {
final ButtonCell typeImageCell = new ButtonCell( ButtonType.DANGER, IconType.TRASH );
final Column<KSessionModel, String> column = new Column<KSessionModel, String>( typeImageCell ) {
@Override
public String getValue( KSessionModel model ) {
return "";
}
};
column.setFieldUpdater( new FieldUpdater<KSessionModel, String>() {
@Override
public void update( int index,
KSessionModel model,
String value ) {
presenter.onDelete( model );
}
} );
column.setHorizontalAlignment( HasHorizontalAlignment.ALIGN_CENTER );
dataGrid.addColumn( column,
CommonConstants.INSTANCE.Delete() );
dataGrid.setColumnWidth( column,
60,
Style.Unit.PX );
}
@Override
public void showOptionsPopUp( KSessionModel kSessionModel ) {
kSessionModelOptionsPopUp.show( kSessionModel );
}
@Override
public void showXsdIDError() {
ErrorPopup.showMessage( ProjectEditorResources.CONSTANTS.XsdIDError() );
}
@Override
public void makeReadOnly() {
addButton.setEnabled( false );
}
@Override
public void makeEditable() {
addButton.setEnabled( true );
}
@Override
public void setPresenter( Presenter presenter ) {
this.presenter = presenter;
}
@Override
public void setItemList( List<KSessionModel> list ) {
dataGrid.setRowData( list );
}
@UiHandler("addButton")
public void onAddClicked( ClickEvent event ) {
presenter.onAdd();
}
}