package org.ovirt.engine.ui.webadmin.section.main.view.tab.gluster; import java.util.ArrayList; import java.util.List; import org.ovirt.engine.core.common.asynctasks.gluster.GlusterTaskType; import org.ovirt.engine.core.common.businessentities.gluster.BrickProperties; import org.ovirt.engine.core.common.businessentities.gluster.GlusterBrickEntity; import org.ovirt.engine.core.common.businessentities.gluster.GlusterTaskSupport; import org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeEntity; import org.ovirt.engine.ui.common.idhandler.ElementIdHandler; import org.ovirt.engine.ui.common.uicommon.model.SearchableDetailModelProvider; import org.ovirt.engine.ui.common.widget.table.column.AbstractTextColumn; import org.ovirt.engine.ui.uicommonweb.UICommand; import org.ovirt.engine.ui.uicommonweb.models.gluster.VolumeBrickListModel; import org.ovirt.engine.ui.uicommonweb.models.volumes.VolumeListModel; 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.gluster.SubTabVolumeBrickPresenter; import org.ovirt.engine.ui.webadmin.section.main.view.AbstractSubTabTableView; import org.ovirt.engine.ui.webadmin.widget.action.WebAdminButtonDefinition; import org.ovirt.engine.ui.webadmin.widget.table.cell.MenuCell; import org.ovirt.engine.ui.webadmin.widget.table.cell.VolumeActivityCompositeCell; import org.ovirt.engine.ui.webadmin.widget.table.cell.VolumeActivitySeperatorCell; import org.ovirt.engine.ui.webadmin.widget.table.column.BrickCapacityCell; import org.ovirt.engine.ui.webadmin.widget.table.column.BrickHealInfoColumn; import org.ovirt.engine.ui.webadmin.widget.table.column.BrickStatusColumn; import org.ovirt.engine.ui.webadmin.widget.table.column.VolumeActivityColumn; import org.ovirt.engine.ui.webadmin.widget.table.column.VolumeActivityStatusColumn; import com.google.gwt.cell.client.HasCell; import com.google.gwt.core.client.GWT; import com.google.gwt.user.cellview.client.Column; import com.google.inject.Inject; public class SubTabVolumeBrickView extends AbstractSubTabTableView<GlusterVolumeEntity, GlusterBrickEntity, VolumeListModel, VolumeBrickListModel> implements SubTabVolumeBrickPresenter.ViewDef { interface ViewIdHandler extends ElementIdHandler<SubTabVolumeBrickView> { ViewIdHandler idHandler = GWT.create(ViewIdHandler.class); } private static final ApplicationConstants constants = AssetProvider.getConstants(); @Inject public SubTabVolumeBrickView(SearchableDetailModelProvider<GlusterBrickEntity, VolumeListModel, VolumeBrickListModel> modelProvider) { super(modelProvider); initTable(); initWidget(getTable()); } @Override protected void generateIds() { ViewIdHandler.idHandler.generateAndSetIds(this); } void initTable() { getTable().enableColumnResizing(); BrickStatusColumn brickStatusColumn = new BrickStatusColumn(); brickStatusColumn.setContextMenuTitle(constants.statusVolumeBrick()); brickStatusColumn.makeSortable(); getTable().addColumn(brickStatusColumn, constants.empty(), "30px"); //$NON-NLS-1$ AbstractTextColumn<GlusterBrickEntity> serverColumn = new AbstractTextColumn<GlusterBrickEntity>() { @Override public String getValue(GlusterBrickEntity brick) { return brick.getServerName(); } }; serverColumn.makeSortable(); getTable().addColumn(serverColumn, constants.serverVolumeBrick(), "300px"); //$NON-NLS-1$ AbstractTextColumn<GlusterBrickEntity> directoryColumn = new AbstractTextColumn<GlusterBrickEntity>() { @Override public String getValue(GlusterBrickEntity brick) { String qualifiedName = brick.getQualifiedName(); if(brick.getIsArbiter()){ qualifiedName += " (" + constants.arbiter() + ")"; //$NON-NLS-1$ //$NON-NLS-2$ } return qualifiedName; } }; directoryColumn.makeSortable(); getTable().addColumn(directoryColumn, constants.brickDirectoryVolumeBrick(), "400px"); //$NON-NLS-1$ getTable().addColumn(new Column<GlusterBrickEntity, BrickProperties>( new BrickCapacityCell()) { @Override public BrickProperties getValue(GlusterBrickEntity object) { return object.getBrickProperties(); } }, constants.volumeCapacity(), "100px");//$NON-NLS-1$ BrickHealInfoColumn healInfoColumn = new BrickHealInfoColumn(); getTable().addColumn(healInfoColumn, constants.healInfo(), "110px"); //$NON-NLS-1$ getTable().addColumn(new VolumeActivityColumn<GlusterBrickEntity>(getActivityCell()), constants.activitiesOnVolume(), "100px"); //$NON-NLS-1$ getTable().addActionButton(new WebAdminButtonDefinition<GlusterBrickEntity>(constants.addBricksBrick()) { @Override protected UICommand resolveCommand() { return getDetailModel().getAddBricksCommand(); } }); getTable().addActionButton(new WebAdminButtonDefinition<GlusterBrickEntity>(constants.removeBricksBrick()) { @Override protected UICommand resolveCommand() { return getDetailModel().getRemoveBricksCommand(); } }); getTable().addActionButton(new WebAdminButtonDefinition<GlusterBrickEntity>(constants.replaceBrickBrick()) { @Override protected UICommand resolveCommand() { return getDetailModel().getReplaceBrickCommand(); } }); getTable().addActionButton(new WebAdminButtonDefinition<GlusterBrickEntity>(constants.advancedDetailsBrick()) { @Override protected UICommand resolveCommand() { return getDetailModel().getBrickAdvancedDetailsCommand(); } }); } private VolumeActivityCompositeCell<GlusterTaskSupport> getActivityCell() { MenuCell<GlusterTaskSupport> removeBricksMenuCell = getRemoveBrickActivityMenu(); List<HasCell<GlusterTaskSupport, ?>> list = new ArrayList<>(); list.add(new VolumeActivityStatusColumn<>()); list.add(new Column<GlusterTaskSupport, GlusterTaskSupport>(new VolumeActivitySeperatorCell<GlusterTaskSupport>()) { @Override public GlusterTaskSupport getValue(GlusterTaskSupport object) { return object; } }); list.add(new Column<GlusterTaskSupport, GlusterTaskSupport>(removeBricksMenuCell) { @Override public GlusterTaskSupport getValue(GlusterTaskSupport object) { return object; } }); VolumeActivityCompositeCell<GlusterTaskSupport> activityCell = new VolumeActivityCompositeCell<>(list); return activityCell; } private MenuCell<GlusterTaskSupport> getRemoveBrickActivityMenu() { MenuCell<GlusterTaskSupport> menuCell = new MenuCell<GlusterTaskSupport>() { @Override protected boolean isVisible(GlusterTaskSupport value) { return value.getAsyncTask().getType() == GlusterTaskType.REMOVE_BRICK; } }; menuCell.addMenuItem(new WebAdminButtonDefinition<GlusterTaskSupport>(constants.removeBricksStatus()) { @Override protected UICommand resolveCommand() { return getDetailModel().getStatusRemoveBricksCommand(); } }); menuCell.addMenuItem(new WebAdminButtonDefinition<GlusterTaskSupport>(constants.removeBricksStop()) { @Override protected UICommand resolveCommand() { return getDetailModel().getStopRemoveBricksCommand(); } }); menuCell.addMenuItem(new WebAdminButtonDefinition<GlusterTaskSupport>(constants.removeBricksCommit()) { @Override protected UICommand resolveCommand() { return getDetailModel().getCommitRemoveBricksCommand(); } }); menuCell.addMenuItem(new WebAdminButtonDefinition<GlusterTaskSupport>(constants.retainBricks()) { @Override protected UICommand resolveCommand() { return getDetailModel().getRetainBricksCommand(); } }); return menuCell; } }