package org.ovirt.engine.ui.webadmin.section.main.view.tab;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import org.ovirt.engine.core.common.businessentities.VDS;
import org.ovirt.engine.core.common.businessentities.VDSStatus;
import org.ovirt.engine.core.common.businessentities.VdsSpmStatus;
import org.ovirt.engine.core.common.mode.ApplicationMode;
import org.ovirt.engine.core.searchbackend.VdsConditionFieldAutoCompleter;
import org.ovirt.engine.ui.common.idhandler.ElementIdHandler;
import org.ovirt.engine.ui.common.uicommon.model.MainModelProvider;
import org.ovirt.engine.ui.common.widget.action.ActionButtonDefinition;
import org.ovirt.engine.ui.common.widget.action.CommandLocation;
import org.ovirt.engine.ui.common.widget.table.SimpleActionTable;
import org.ovirt.engine.ui.common.widget.table.cell.Cell;
import org.ovirt.engine.ui.common.widget.table.cell.StatusCompositeCell;
import org.ovirt.engine.ui.common.widget.table.column.AbstractColumn;
import org.ovirt.engine.ui.common.widget.table.column.AbstractEnumColumn;
import org.ovirt.engine.ui.common.widget.table.column.AbstractTextColumn;
import org.ovirt.engine.ui.frontend.AsyncQuery;
import org.ovirt.engine.ui.uicommonweb.UICommand;
import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider;
import org.ovirt.engine.ui.uicommonweb.models.ApplicationModeHelper;
import org.ovirt.engine.ui.uicommonweb.models.hosts.HostListModel;
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.MainTabHostPresenter;
import org.ovirt.engine.ui.webadmin.section.main.view.AbstractMainTabWithDetailsTableView;
import org.ovirt.engine.ui.webadmin.widget.action.WebAdminButtonDefinition;
import org.ovirt.engine.ui.webadmin.widget.action.WebAdminMenuBarButtonDefinition;
import org.ovirt.engine.ui.webadmin.widget.table.column.AbstractPercentColumn;
import org.ovirt.engine.ui.webadmin.widget.table.column.CommentColumn;
import org.ovirt.engine.ui.webadmin.widget.table.column.HostAdditionalStatusColumn;
import org.ovirt.engine.ui.webadmin.widget.table.column.HostStatusColumn;
import org.ovirt.engine.ui.webadmin.widget.table.column.ReasonColumn;
import org.ovirt.engine.ui.webadmin.widget.table.column.VmCountColumn;
import com.google.gwt.cell.client.HasCell;
import com.google.gwt.core.client.GWT;
import com.google.gwt.safehtml.shared.SafeHtml;
import com.google.gwt.safehtml.shared.SafeHtmlUtils;
import com.google.gwt.user.client.ui.HasHorizontalAlignment;
import com.google.inject.Inject;
public class MainTabHostView extends AbstractMainTabWithDetailsTableView<VDS, HostListModel<Void>> implements MainTabHostPresenter.ViewDef {
interface ViewIdHandler extends ElementIdHandler<MainTabHostView> {
ViewIdHandler idHandler = GWT.create(ViewIdHandler.class);
}
int maxSpmPriority;
int defaultSpmPriority;
private static final ApplicationConstants constants = AssetProvider.getConstants();
@Inject
public MainTabHostView(MainModelProvider<VDS, HostListModel<Void>> modelProvider) {
super(modelProvider);
ViewIdHandler.idHandler.generateAndSetIds(this);
InitSpmPriorities();
}
private void InitSpmPriorities() {
AsyncDataProvider.getInstance().getMaxSpmPriority(new AsyncQuery<>(returnValue -> {
maxSpmPriority = returnValue;
InitSpmPriorities1();
}));
}
private void InitSpmPriorities1() {
AsyncDataProvider.getInstance().getDefaultSpmPriority(new AsyncQuery<>(returnValue -> {
defaultSpmPriority = returnValue;
InitSpmPriorities2();
}));
}
private void InitSpmPriorities2() {
initTable();
initWidget(getTable());
}
void initTable() {
getTable().enableColumnResizing();
HostStatusColumn<VDS> statusIconColumn = new HostStatusColumn<>();
statusIconColumn.setContextMenuTitle(constants.statusIconHost());
getTable().addColumn(statusIconColumn, constants.empty(), "30px"); //$NON-NLS-1$
HostAdditionalStatusColumn additionalStatusColumn = new HostAdditionalStatusColumn();
additionalStatusColumn.setContextMenuTitle(constants.additionalStatusHost());
getTable().addColumn(additionalStatusColumn, constants.empty(), "60px"); //$NON-NLS-1$
AbstractTextColumn<VDS> nameColumn = new AbstractTextColumn<VDS>() {
@Override
public String getValue(VDS object) {
return object.getName();
}
};
nameColumn.makeSortable(VdsConditionFieldAutoCompleter.NAME);
getTable().addColumn(nameColumn, constants.nameHost(), "150px"); //$NON-NLS-1$
CommentColumn<VDS> commentColumn = new CommentColumn<>();
getTable().addColumnWithHtmlHeader(commentColumn,
SafeHtmlUtils.fromSafeConstant(constants.commentLabel()),
"75px"); //$NON-NLS-1$
AbstractTextColumn<VDS> hostColumn = new AbstractTextColumn<VDS>() {
@Override
public String getValue(VDS object) {
return object.getHostName();
}
};
hostColumn.makeSortable(VdsConditionFieldAutoCompleter.ADDRESS);
getTable().addColumn(hostColumn, constants.ipHost(), "150px"); //$NON-NLS-1$
AbstractTextColumn<VDS> clusterColumn = new AbstractTextColumn<VDS>() {
@Override
public String getValue(VDS object) {
return object.getClusterName();
}
};
clusterColumn.makeSortable(VdsConditionFieldAutoCompleter.CLUSTER);
getTable().addColumn(clusterColumn, constants.clusterHost(), "150px"); //$NON-NLS-1$
if (ApplicationModeHelper.getUiMode() != ApplicationMode.GlusterOnly) {
AbstractTextColumn<VDS> dcColumn = new AbstractTextColumn<VDS>() {
@Override
public String getValue(VDS object) {
return object.getStoragePoolName();
}
};
dcColumn.makeSortable(VdsConditionFieldAutoCompleter.DATACENTER);
getTable().addColumn(dcColumn, constants.dcHost(), "150px"); //$NON-NLS-1$
}
AbstractTextColumn<VDS> statusColumn = new AbstractEnumColumn<VDS, VDSStatus>() {
@Override
public VDSStatus getRawValue(VDS object) {
return object.getStatus();
}
};
ReasonColumn<VDS> reasonColumn = new ReasonColumn<VDS>() {
@Override
protected String getReason(VDS value) {
return value.getMaintenanceReason();
}
};
List<HasCell<VDS, ?>> list = new ArrayList<>();
list.add(statusColumn);
list.add(reasonColumn);
Cell<VDS> compositeCell = new StatusCompositeCell<>(list);
AbstractColumn<VDS, VDS> statusTextColumn = new AbstractColumn<VDS, VDS>(compositeCell) {
@Override
public VDS getValue(VDS object) {
return object;
}
@Override
public SafeHtml getTooltip(VDS value) {
String maintenanceReason = value.getMaintenanceReason();
if (maintenanceReason != null && !maintenanceReason.trim().isEmpty()) {
return SafeHtmlUtils.fromString(maintenanceReason);
}
return null;
}
};
statusTextColumn.makeSortable(VdsConditionFieldAutoCompleter.STATUS);
getTable().addColumn(statusTextColumn, constants.statusHost(), "100px"); //$NON-NLS-1$
if (ApplicationModeHelper.getUiMode() != ApplicationMode.GlusterOnly) {
VmCountColumn vmCountColumn = new VmCountColumn();
vmCountColumn.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_CENTER);
vmCountColumn.makeSortable(VdsConditionFieldAutoCompleter.ACTIVE_VMS);
getTable().addColumn(vmCountColumn, constants.vmsCount(), "110px"); //$NON-NLS-1$
}
AbstractPercentColumn<VDS> memColumn = new AbstractPercentColumn<VDS>() {
@Override
public Integer getProgressValue(VDS object) {
return object.getUsageMemPercent();
}
};
memColumn.makeSortable(VdsConditionFieldAutoCompleter.MEM_USAGE);
getTable().addColumn(memColumn, constants.memoryHost(), "60px"); //$NON-NLS-1$
AbstractPercentColumn<VDS> cpuColumn = new AbstractPercentColumn<VDS>() {
@Override
public Integer getProgressValue(VDS object) {
return object.getUsageCpuPercent();
}
};
cpuColumn.makeSortable(VdsConditionFieldAutoCompleter.CPU_USAGE);
getTable().addColumn(cpuColumn, constants.cpuHost(), "60px"); //$NON-NLS-1$
AbstractPercentColumn<VDS> netColumn = new AbstractPercentColumn<VDS>() {
@Override
public Integer getProgressValue(VDS object) {
return object.getUsageNetworkPercent();
}
};
netColumn.makeSortable(VdsConditionFieldAutoCompleter.NETWORK_USAGE);
getTable().addColumn(netColumn, constants.networkHost(), "60px"); //$NON-NLS-1$
if (ApplicationModeHelper.getUiMode() != ApplicationMode.GlusterOnly) {
AbstractTextColumn<VDS> spmColumn = new AbstractTextColumn<VDS>() {
@Override
public String getValue(VDS object) {
int value = object.getVdsSpmPriority();
int lowValue = defaultSpmPriority / 2;
int highValue = defaultSpmPriority + (maxSpmPriority - defaultSpmPriority) / 2;
if (object.getSpmStatus() != VdsSpmStatus.None){
return object.getSpmStatus().name();
}
if (value == -1) {
return constants.spmNeverText();
} else if (value == lowValue) {
return constants.spmLowText();
} else if (value == defaultSpmPriority) {
return constants.spmNormalText();
} else if (value == highValue) {
return constants.spmHighText();
}
return constants.spmCustomText();
}
};
getTable().addColumn(spmColumn, constants.spmPriorityHost(), "100px"); //$NON-NLS-1$
}
// Create/Edit/Remove Host operations
getTable().addActionButton(new WebAdminButtonDefinition<VDS>(constants.newHost()) {
@Override
protected UICommand resolveCommand() {
return getMainModel().getNewCommand();
}
});
getTable().addActionButton(new WebAdminButtonDefinition<VDS>(constants.editHost()) {
@Override
protected UICommand resolveCommand() {
return getMainModel().getEditCommand();
}
});
getTable().addActionButton(new WebAdminButtonDefinition<VDS>(constants.removeHost()) {
@Override
protected UICommand resolveCommand() {
return getMainModel().getRemoveCommand();
}
});
// Management operations drop down
List<ActionButtonDefinition<VDS>> managementSubActions = new LinkedList<>();
// Maintenance button
managementSubActions.add(new WebAdminButtonDefinition<VDS>(constants.maintenanceHost()) {
@Override
protected UICommand resolveCommand() {
return getMainModel().getMaintenanceCommand();
}
});
// Activate button
managementSubActions.add(new WebAdminButtonDefinition<VDS>(constants.activateHost()) {
@Override
protected UICommand resolveCommand() {
return getMainModel().getActivateCommand();
}
});
// Refresh capabilities button
managementSubActions.add(new WebAdminButtonDefinition<VDS>(constants.refreshHostCapabilities()) {
@Override
protected UICommand resolveCommand() {
return getMainModel().getRefreshCapabilitiesCommand();
}
});
// Confirm rebooted host
if (ApplicationModeHelper.getUiMode() != ApplicationMode.GlusterOnly) {
getTable().addActionButton(new WebAdminButtonDefinition<VDS>(constants.confirmRebootedHost(),
CommandLocation.OnlyFromContext) {
@Override
protected UICommand resolveCommand() {
return getMainModel().getManualFenceCommand();
}
});
}
// Power management drop down
List<ActionButtonDefinition<VDS>> pmSubActions = new LinkedList<>();
pmSubActions.add(new WebAdminButtonDefinition<VDS>(constants.restartHost()) {
@Override
protected UICommand resolveCommand() {
return getMainModel().getRestartCommand();
}
});
pmSubActions.add(new WebAdminButtonDefinition<VDS>(constants.startHost()) {
@Override
protected UICommand resolveCommand() {
return getMainModel().getStartCommand();
}
});
pmSubActions.add(new WebAdminButtonDefinition<VDS>(constants.stopHost()) {
@Override
protected UICommand resolveCommand() {
return getMainModel().getStopCommand();
}
});
// Remote management via SSH drop down
List<ActionButtonDefinition<VDS>> sshSubActions = new LinkedList<>();
sshSubActions.add(new WebAdminButtonDefinition<VDS>(constants.restartHost()) {
@Override
protected UICommand resolveCommand() {
return getMainModel().getSshRestartCommand();
}
});
sshSubActions.add(new WebAdminButtonDefinition<VDS>(constants.stopHost()) {
@Override
protected UICommand resolveCommand() {
return getMainModel().getSshStopCommand();
}
});
if (ApplicationModeHelper.getUiMode() != ApplicationMode.GlusterOnly) {
managementSubActions.add(
new WebAdminMenuBarButtonDefinition<>(
constants.pmHost(),
pmSubActions
)
);
managementSubActions.add(
new WebAdminMenuBarButtonDefinition<>(
constants.sshManagement(),
sshSubActions
)
);
}
// Select as SPM button
managementSubActions.add(new WebAdminButtonDefinition<VDS>(constants.selectHostAsSPM()) {
@Override
protected UICommand resolveCommand() {
return getMainModel().getSelectAsSpmCommand();
}
});
// Configure local storage button
managementSubActions.add(new WebAdminButtonDefinition<VDS>(constants.configureLocalStorageHost()) {
@Override
protected UICommand resolveCommand() {
return getMainModel().getConfigureLocalStorageCommand();
}
});
// Add management menu bar
getTable().addActionButton(
new WebAdminMenuBarButtonDefinition<>(
constants.management(),
managementSubActions
)
);
// Installation operations drop down
List<ActionButtonDefinition<VDS>> moreSubActions = new LinkedList<>();
// Reinstall button
moreSubActions.add(new WebAdminButtonDefinition<VDS>(constants.reinstallHost()) {
@Override
protected UICommand resolveCommand() {
return getMainModel().getInstallCommand();
}
});
// Enroll certificate button
moreSubActions.add(new WebAdminButtonDefinition<VDS>(constants.enrollCertificate()) {
@Override
protected UICommand resolveCommand() {
return getMainModel().getEnrollCertificateCommand();
}
});
// Check for upgrade button
moreSubActions.add(new WebAdminButtonDefinition<VDS>(constants.checkForHostUpgrade()) {
@Override
protected UICommand resolveCommand() {
return getMainModel().getCheckForUpgradeCommand();
}
});
// Upgrade button
moreSubActions.add(new WebAdminButtonDefinition<VDS>(constants.upgradeHost()) {
@Override
protected UICommand resolveCommand() {
return getMainModel().getUpgradeCommand();
}
});
getTable().addActionButton(
new WebAdminMenuBarButtonDefinition<>(
constants.installation(),
moreSubActions
)
);
// Assign tags
getTable().addActionButton(new WebAdminButtonDefinition<VDS>(constants.assignTagsHost()) {
@Override
protected UICommand resolveCommand() {
return getMainModel().getAssignTagsCommand();
}
});
// NUMA support
if (ApplicationModeHelper.getUiMode() != ApplicationMode.GlusterOnly) {
getTable().addActionButton(new WebAdminButtonDefinition<VDS>(constants.numaSupport()) {
@Override
protected UICommand resolveCommand() {
return getMainModel().getNumaSupportCommand();
}
});
}
// Approve
getTable().addActionButton(new WebAdminButtonDefinition<VDS>(constants.approveHost()) {
@Override
protected UICommand resolveCommand() {
return getMainModel().getApproveCommand();
}
});
// HA global maintenance
getTable().addActionButton(new WebAdminButtonDefinition<VDS>(constants.enableGlobalHaMaintenanceVm(), CommandLocation.OnlyFromContext) {
@Override
protected UICommand resolveCommand() {
return getMainModel().getEnableGlobalHaMaintenanceCommand();
}
});
getTable().addActionButton(new WebAdminButtonDefinition<VDS>(constants.disableGlobalHaMaintenanceVm(), CommandLocation.OnlyFromContext) {
@Override
protected UICommand resolveCommand() {
return getMainModel().getDisableGlobalHaMaintenanceCommand();
}
});
}
@Override
public SimpleActionTable<VDS> getTable() {
return super.getTable();
}
}