package org.ovirt.engine.ui.webadmin.section.main.view.popup.instancetypes; import org.ovirt.engine.core.common.businessentities.InstanceType; import org.ovirt.engine.ui.common.MainTableHeaderlessResources; import org.ovirt.engine.ui.common.MainTableResources; import org.ovirt.engine.ui.common.system.ClientStorage; import org.ovirt.engine.ui.common.uicommon.model.DetailTabModelProvider; import org.ovirt.engine.ui.common.widget.table.SimpleActionTable; import org.ovirt.engine.ui.common.widget.table.column.AbstractTextColumn; import org.ovirt.engine.ui.common.widget.uicommon.popup.instancetypes.InstanceTypeGeneralModelForm; import org.ovirt.engine.ui.uicommonweb.UICommand; import org.ovirt.engine.ui.uicommonweb.models.configure.instancetypes.InstanceTypeGeneralModel; import org.ovirt.engine.ui.uicommonweb.models.configure.instancetypes.InstanceTypeListModel; import org.ovirt.engine.ui.webadmin.ApplicationConstants; import org.ovirt.engine.ui.webadmin.gin.AssetProvider; import org.ovirt.engine.ui.webadmin.uicommon.model.InstanceTypeModelProvider; import org.ovirt.engine.ui.webadmin.widget.action.WebAdminButtonDefinition; import com.google.gwt.core.client.GWT; import com.google.gwt.event.shared.EventBus; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.cellview.client.CellTable.Resources; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.SimplePanel; import com.google.gwt.user.client.ui.SplitLayoutPanel; import com.google.inject.Inject; public class InstanceTypesView extends Composite { interface ViewUiBinder extends UiBinder<FlowPanel, InstanceTypesView> { ViewUiBinder uiBinder = GWT.create(ViewUiBinder.class); } @UiField SimplePanel instanceTypesTabContent; private SimpleActionTable<InstanceType> table; private InstanceTypeGeneralModelForm detailTable; private SplitLayoutPanel splitLayoutPanel; private final InstanceTypeModelProvider instanceTypeModelProvider; private final DetailTabModelProvider<InstanceTypeListModel, InstanceTypeGeneralModel> instanceTypeGeneralModelProvider; private final EventBus eventBus; private final ClientStorage clientStorage; private static final ApplicationConstants constants = AssetProvider.getConstants(); @Inject public InstanceTypesView(InstanceTypeModelProvider instanceTypeModelProvider, EventBus eventBus, ClientStorage clientStorage, DetailTabModelProvider<InstanceTypeListModel, InstanceTypeGeneralModel> instanceTypeGeneralModelProvider) { this.instanceTypeModelProvider = instanceTypeModelProvider; this.eventBus = eventBus; this.clientStorage = clientStorage; this.instanceTypeGeneralModelProvider = instanceTypeGeneralModelProvider; initWidget(ViewUiBinder.uiBinder.createAndBindUi(this)); initSplitLayoutPanel(); initMainTable(); initSubtabTable(); } private void initSplitLayoutPanel() { splitLayoutPanel = new SplitLayoutPanel(); splitLayoutPanel.setHeight("100%"); //$NON-NLS-1$ splitLayoutPanel.setWidth("100%"); //$NON-NLS-1$ instanceTypesTabContent.add(splitLayoutPanel); } public void setSubTabVisibility(boolean visible) { splitLayoutPanel.clear(); if (visible) { splitLayoutPanel.addSouth(detailTable, 150); } splitLayoutPanel.add(table); } private void initMainTable() { table = new SimpleActionTable<>(instanceTypeModelProvider, getTableHeaderlessResources(), getTableResources(), eventBus, clientStorage); AbstractTextColumn<InstanceType> nameColumn = new AbstractTextColumn<InstanceType>() { @Override public String getValue(InstanceType object) { return object.getName(); } }; table.addColumn(nameColumn, constants.instanceTypeName(), "100px"); //$NON-NLS-1$ table.addActionButton(new WebAdminButtonDefinition<InstanceType>(constants.newInstanceType()) { @Override protected UICommand resolveCommand() { return instanceTypeModelProvider.getModel().getNewInstanceTypeCommand(); } }); table.addActionButton(new WebAdminButtonDefinition<InstanceType>(constants.editInstanceType()) { @Override protected UICommand resolveCommand() { return instanceTypeModelProvider.getModel().getEditInstanceTypeCommand(); } }); table.addActionButton(new WebAdminButtonDefinition<InstanceType>(constants.removeInstanceType()) { @Override protected UICommand resolveCommand() { return instanceTypeModelProvider.getModel().getDeleteInstanceTypeCommand(); } }); splitLayoutPanel.add(table); table.getSelectionModel().addSelectionChangeHandler(event -> { instanceTypeModelProvider.setSelectedItems(table.getSelectionModel().getSelectedList()); if (table.getSelectionModel().getSelectedList().size() > 0) { setSubTabVisibility(true); detailTable.update(); } else { setSubTabVisibility(false); } }); } private void initSubtabTable() { detailTable = new InstanceTypeGeneralModelForm(instanceTypeGeneralModelProvider); } protected Resources getTableHeaderlessResources() { return GWT.create(MainTableHeaderlessResources.class); } protected Resources getTableResources() { return GWT.create(MainTableResources.class); } }