package org.ovirt.engine.ui.webadmin.section.main.view.tab.cluster; import javax.inject.Inject; import org.ovirt.engine.core.common.businessentities.Cluster; import org.ovirt.engine.core.common.businessentities.VDS; import org.ovirt.engine.core.common.businessentities.gluster.GlusterServerService; import org.ovirt.engine.core.common.businessentities.gluster.GlusterServiceStatus; import org.ovirt.engine.ui.common.editor.UiCommonEditorDriver; import org.ovirt.engine.ui.common.idhandler.ElementIdHandler; import org.ovirt.engine.ui.common.idhandler.WithElementId; import org.ovirt.engine.ui.common.uicommon.model.DetailModelProvider; import org.ovirt.engine.ui.common.view.AbstractSubTabFormView; import org.ovirt.engine.ui.common.widget.UiCommandButton; import org.ovirt.engine.ui.common.widget.editor.EntityModelCellTable; import org.ovirt.engine.ui.common.widget.editor.ListModelListBoxEditor; import org.ovirt.engine.ui.common.widget.renderer.EnumRenderer; import org.ovirt.engine.ui.common.widget.renderer.NullSafeRenderer; import org.ovirt.engine.ui.common.widget.table.column.AbstractEntityModelTextColumn; import org.ovirt.engine.ui.common.widget.table.column.AbstractEnumColumn; import org.ovirt.engine.ui.uicommonweb.models.EntityModel; import org.ovirt.engine.ui.uicommonweb.models.ListModel; import org.ovirt.engine.ui.uicommonweb.models.clusters.ClusterListModel; import org.ovirt.engine.ui.uicommonweb.models.clusters.ClusterServiceModel; import org.ovirt.engine.ui.webadmin.ApplicationConstants; import org.ovirt.engine.ui.webadmin.gin.AssetProvider; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.cluster.SubTabClusterServicePresenter; import com.google.gwt.core.client.GWT; import com.google.gwt.editor.client.Editor; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.ui.Widget; public class SubTabClusterServiceView extends AbstractSubTabFormView<Cluster, ClusterListModel<Void>, ClusterServiceModel> implements SubTabClusterServicePresenter.ViewDef, Editor<ClusterServiceModel> { interface Driver extends UiCommonEditorDriver<ClusterServiceModel, SubTabClusterServiceView> { } interface ViewIdHandler extends ElementIdHandler<SubTabClusterServiceView> { ViewIdHandler idHandler = GWT.create(ViewIdHandler.class); } interface ViewUiBinder extends UiBinder<Widget, SubTabClusterServiceView> { ViewUiBinder uiBinder = GWT.create(ViewUiBinder.class); } @UiField(provided = true) @Path(value = "hostList.selectedItem") @WithElementId("hostList") ListModelListBoxEditor<Object> hostEditor; @UiField(provided = true) @Path(value = "serviceTypeList.selectedItem") @WithElementId ListModelListBoxEditor<Object> serviceTypeEditor; @UiField @WithElementId UiCommandButton filterButton; @UiField @WithElementId UiCommandButton clearButton; @UiField(provided = true) @Ignore @WithElementId EntityModelCellTable<ListModel> servicesTable; private final Driver driver = GWT.create(Driver.class); private static final ApplicationConstants constants = AssetProvider.getConstants(); @Inject public SubTabClusterServiceView(final DetailModelProvider<ClusterListModel<Void>, ClusterServiceModel> modelProvider) { super(modelProvider); servicesTable = new EntityModelCellTable<>(false, true); initListBoxEditors(); initWidget(ViewUiBinder.uiBinder.createAndBindUi(this)); localize(); initTableColumns(); initButtons(); driver.initialize(this); } @Override protected void generateIds() { ViewIdHandler.idHandler.generateAndSetIds(this); } private void initListBoxEditors() { hostEditor = new ListModelListBoxEditor<>(new NullSafeRenderer<Object>() { @Override public String renderNullSafe(Object object) { if (object != null) { return ((VDS) object).getHostName(); } else { return ""; //$NON-NLS-1$ } } }); serviceTypeEditor = new ListModelListBoxEditor<>(new EnumRenderer() { @Override public String render(Enum object) { if (object != null) { return super.render(object); } else { return ""; //$NON-NLS-1$ } } }); } private void localize() { hostEditor.setLabel(constants.hostService()); serviceTypeEditor.setLabel(constants.nameService()); filterButton.setLabel(constants.filterService()); clearButton.setLabel(constants.showAllService()); } protected void initTableColumns() { // Table Entity Columns servicesTable.addColumn(new AbstractEntityModelTextColumn<GlusterServerService>() { @Override public String getText(GlusterServerService entity) { return entity.getHostName(); } }, constants.hostService()); servicesTable.addColumn(new AbstractEntityModelTextColumn<GlusterServerService>() { @Override public String getText(GlusterServerService entity) { return entity.getServiceType().name(); } }, constants.nameService()); servicesTable.addColumn(new AbstractEnumColumn<EntityModel, GlusterServiceStatus>() { @Override protected GlusterServiceStatus getRawValue(EntityModel object) { return ((GlusterServerService)object.getEntity()).getStatus(); } }, constants.statusService()); servicesTable.addColumn(new AbstractEntityModelTextColumn<GlusterServerService>() { @Override public String getText(GlusterServerService entity) { if (entity.getPort() != null && entity.getPort() > 0) { return String.valueOf(entity.getPort()); } else { return constants.notAvailableLabel(); } } }, constants.portService()); servicesTable.addColumn(new AbstractEntityModelTextColumn<GlusterServerService>() { @Override public String getText(GlusterServerService entity) { if (entity.getRdmaPort() != null && entity.getRdmaPort() > 0) { return String.valueOf(entity.getRdmaPort()); } else { return constants.notAvailableLabel(); } } }, constants.rdmaPortService()); servicesTable.addColumn(new AbstractEntityModelTextColumn<GlusterServerService>() { @Override public String getText(GlusterServerService entity) { return String.valueOf(entity.getPid()); } }, constants.pidService()); } private void initButtons() { filterButton.addClickHandler(event -> getDetailModel().executeCommand(getDetailModel().getFilterServicesCommand())); clearButton.addClickHandler(event -> getDetailModel().executeCommand(getDetailModel().getClearFilterServicesCommand())); } @Override public void setMainTabSelectedItem(Cluster selectedItem) { servicesTable.asEditor().edit(getDetailModel().getServiceList()); driver.edit(getDetailModel()); } }