package org.ovirt.engine.ui.webadmin.section.main.view.popup.scheduling; import org.ovirt.engine.core.common.businessentities.Cluster; import org.ovirt.engine.core.common.scheduling.ClusterPolicy; 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.widget.table.SimpleActionTable; import org.ovirt.engine.ui.common.widget.table.column.AbstractImageResourceColumn; import org.ovirt.engine.ui.common.widget.table.column.AbstractTextColumn; import org.ovirt.engine.ui.uicommonweb.UICommand; import org.ovirt.engine.ui.webadmin.ApplicationConstants; import org.ovirt.engine.ui.webadmin.ApplicationResources; import org.ovirt.engine.ui.webadmin.gin.AssetProvider; import org.ovirt.engine.ui.webadmin.uicommon.model.ClusterPolicyClusterModelProvider; import org.ovirt.engine.ui.webadmin.uicommon.model.ClusterPolicyModelProvider; 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.resources.client.ImageResource; 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.SimplePanel; import com.google.gwt.user.client.ui.SplitLayoutPanel; import com.google.inject.Inject; public class ClusterPolicyView extends Composite { interface ViewUiBinder extends UiBinder<SimplePanel, ClusterPolicyView> { ViewUiBinder uiBinder = GWT.create(ViewUiBinder.class); } @UiField SimplePanel clusterPolicyTabContent; private SimpleActionTable<ClusterPolicy> table; private SimpleActionTable<Cluster> clusterTable; private SplitLayoutPanel splitLayoutPanel; private final ClusterPolicyModelProvider clusterPolicyModelProvider; private final ClusterPolicyClusterModelProvider clusterPolicyClusterModelProvider; private final EventBus eventBus; private final ClientStorage clientStorage; private static final ApplicationResources resources = AssetProvider.getResources(); private static final ApplicationConstants constants = AssetProvider.getConstants(); @Inject public ClusterPolicyView(ClusterPolicyModelProvider clusterPolicyModelProvider, ClusterPolicyClusterModelProvider clusterPolicyClusterModelProvider, EventBus eventBus, ClientStorage clientStorage) { this.clusterPolicyModelProvider = clusterPolicyModelProvider; this.clusterPolicyClusterModelProvider = clusterPolicyClusterModelProvider; this.eventBus = eventBus; this.clientStorage = clientStorage; initWidget(ViewUiBinder.uiBinder.createAndBindUi(this)); initSplitLayoutPanel(); initClusterPolicyTable(); initClustersTable(); } private void initSplitLayoutPanel() { splitLayoutPanel = new SplitLayoutPanel(); splitLayoutPanel.setHeight("100%"); //$NON-NLS-1$ splitLayoutPanel.setWidth("100%"); //$NON-NLS-1$ clusterPolicyTabContent.add(splitLayoutPanel); } public void setSubTabVisibility(boolean visible) { splitLayoutPanel.clear(); if (visible) { splitLayoutPanel.addSouth(clusterTable, 150); } splitLayoutPanel.add(table); } private void initClusterPolicyTable() { table = new SimpleActionTable<>(clusterPolicyModelProvider, getTableHeaderlessResources(), getTableResources(), eventBus, clientStorage); table.addColumn(new AbstractImageResourceColumn<ClusterPolicy>() { @Override public ImageResource getValue(ClusterPolicy object) { if (object.isLocked()) { return resources.lockImage(); } return null; } }, constants.empty(), "20px"); //$NON-NLS-1$ AbstractTextColumn<ClusterPolicy> nameColumn = new AbstractTextColumn<ClusterPolicy>() { @Override public String getValue(ClusterPolicy object) { return object.getName(); } }; table.addColumn(nameColumn, constants.clusterPolicyNameLabel(), "100px"); //$NON-NLS-1$ AbstractTextColumn<ClusterPolicy> descColumn = new AbstractTextColumn<ClusterPolicy>() { @Override public String getValue(ClusterPolicy object) { return object.getDescription(); } }; table.addColumn(descColumn, constants.clusterPolicyDescriptionLabel(), "300px"); //$NON-NLS-1$ table.addActionButton(new WebAdminButtonDefinition<ClusterPolicy>(constants.newClusterPolicy()) { @Override protected UICommand resolveCommand() { return clusterPolicyModelProvider.getModel().getNewCommand(); } }); table.addActionButton(new WebAdminButtonDefinition<ClusterPolicy>(constants.editClusterPolicy()) { @Override protected UICommand resolveCommand() { return clusterPolicyModelProvider.getModel().getEditCommand(); } }); table.addActionButton(new WebAdminButtonDefinition<ClusterPolicy>(constants.copyClusterPolicy()) { @Override protected UICommand resolveCommand() { return clusterPolicyModelProvider.getModel().getCloneCommand(); } }); table.addActionButton(new WebAdminButtonDefinition<ClusterPolicy>(constants.removeClusterPolicy()) { @Override protected UICommand resolveCommand() { return clusterPolicyModelProvider.getModel().getRemoveCommand(); } }); table.addActionButton(new WebAdminButtonDefinition<ClusterPolicy>(constants.managePolicyUnits()) { @Override protected UICommand resolveCommand() { return clusterPolicyModelProvider.getModel().getManagePolicyUnitCommand(); } }); splitLayoutPanel.add(table); table.getSelectionModel().addSelectionChangeHandler(event -> { clusterPolicyModelProvider.setSelectedItems(table.getSelectionModel().getSelectedList()); if (table.getSelectionModel().getSelectedList().size() > 0) { setSubTabVisibility(true); } else { setSubTabVisibility(false); } }); } private void initClustersTable() { clusterTable = new SimpleActionTable<>(clusterPolicyClusterModelProvider, getTableHeaderlessResources(), getTableResources(), eventBus, clientStorage); AbstractTextColumn<Cluster> clusterColumn = new AbstractTextColumn<Cluster>() { @Override public String getValue(Cluster object) { return object.getName(); } }; clusterTable.addColumn(clusterColumn, constants.clusterPolicyAttachedCluster()); } protected Resources getTableHeaderlessResources() { return (Resources) GWT.create(MainTableHeaderlessResources.class); } protected Resources getTableResources() { return (Resources) GWT.create(MainTableResources.class); } }