package org.ovirt.engine.ui.webadmin.section.main.view.popup.scheduling; import org.ovirt.engine.core.common.scheduling.PolicyUnit; import org.ovirt.engine.ui.common.idhandler.ElementIdHandler; import org.ovirt.engine.ui.common.view.popup.AbstractModelBoundPopupView; import org.ovirt.engine.ui.common.widget.dialog.SimpleDialogPanel; import org.ovirt.engine.ui.common.widget.editor.ListModelObjectCellTable; 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.models.ListModel; import org.ovirt.engine.ui.uicommonweb.models.configure.scheduling.ManagePolicyUnitModel; import org.ovirt.engine.ui.uicompat.EnumTranslator; 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.section.main.presenter.popup.scheduling.ManagePolicyUnitPopupPresenterWidget; import org.ovirt.engine.ui.webadmin.widget.table.cell.NullableButtonCell; 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.safehtml.shared.SafeHtml; import com.google.gwt.safehtml.shared.SafeHtmlUtils; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.cellview.client.Column; import com.google.gwt.user.client.ui.FlowPanel; import com.google.inject.Inject; public class ManagePolicyUnitPopupView extends AbstractModelBoundPopupView<ManagePolicyUnitModel> implements ManagePolicyUnitPopupPresenterWidget.ViewDef { interface ViewUiBinder extends UiBinder<SimpleDialogPanel, ManagePolicyUnitPopupView> { ViewUiBinder uiBinder = GWT.create(ViewUiBinder.class); } interface ViewIdHandler extends ElementIdHandler<ManagePolicyUnitPopupView> { ViewIdHandler idHandler = GWT.create(ViewIdHandler.class); } @UiField FlowPanel policyUnitTableContainer; ListModelObjectCellTable<PolicyUnit, ListModel> policyUnitTable; private ManagePolicyUnitModel model; private static final ApplicationResources resources = AssetProvider.getResources(); private static final ApplicationConstants constants = AssetProvider.getConstants(); @Inject public ManagePolicyUnitPopupView(EventBus eventBus) { super(eventBus); initWidget(ViewUiBinder.uiBinder.createAndBindUi(this)); ViewIdHandler.idHandler.generateAndSetIds(this); initTable(); } private void initTable() { policyUnitTable = new ListModelObjectCellTable<>(); policyUnitTable.enableColumnResizing(); policyUnitTableContainer.add(policyUnitTable); policyUnitTable.addColumn(new AbstractImageResourceColumn<PolicyUnit>() { @Override public ImageResource getValue(PolicyUnit object) { if (object.isInternal()) { return resources.lockImage(); } return resources.exteranlPolicyUnitImage(); } @Override public SafeHtml getTooltip(PolicyUnit object) { String tooltipContent = null; if (object.isInternal()) { tooltipContent = constants.internalPolicyUnit(); } else { tooltipContent = constants.externalPolicyUnit(); } return SafeHtmlUtils.fromSafeConstant(tooltipContent); } }, constants.empty(), "20px"); //$NON-NLS-1$ policyUnitTable.addColumn(new AbstractTextColumn<PolicyUnit>() { @Override public String getValue(PolicyUnit object) { return object.getName(); } }, constants.policyUnitName(), "180px"); //$NON-NLS-1$ policyUnitTable.addColumn(new AbstractTextColumn<PolicyUnit>() { @Override public String getValue(PolicyUnit object) { return EnumTranslator.getInstance().translate(object.getPolicyUnitType()); } }, constants.policyUnitType(), "100px"); //$NON-NLS-1$ policyUnitTable.addColumn(new AbstractTextColumn<PolicyUnit>() { @Override public String getValue(PolicyUnit object) { if (!object.isEnabled()) { return constants.disabledPolicyUnit(); } return constants.empty(); } }, constants.empty(), "75px"); //$NON-NLS-1$ Column<PolicyUnit, String> removeButtonColumn = new Column<PolicyUnit, String>(new NullableButtonCell()) { @Override public String getValue(PolicyUnit object) { if (!object.isEnabled()) { return constants.removePolicyUnit(); } return null; } }; policyUnitTable.addColumn(removeButtonColumn, constants.empty(), "80px"); //$NON-NLS-1$ removeButtonColumn.setFieldUpdater((index, object, value) -> model.remove(object)); } @Override public void edit(ManagePolicyUnitModel model) { this.model = model; policyUnitTable.asEditor().edit(model.getPolicyUnits()); } @Override public ManagePolicyUnitModel flush() { return model; } @Override public void cleanup() { model.cleanup(); } }