package org.ovirt.engine.ui.uicommonweb.models.datacenters;
import java.util.ArrayList;
import org.ovirt.engine.core.common.action.RemoveIscsiBondParameters;
import org.ovirt.engine.core.common.action.VdcActionParametersBase;
import org.ovirt.engine.core.common.action.VdcActionType;
import org.ovirt.engine.core.common.businessentities.IscsiBond;
import org.ovirt.engine.core.common.businessentities.StoragePool;
import org.ovirt.engine.core.common.queries.IdQueryParameters;
import org.ovirt.engine.core.common.queries.VdcQueryType;
import org.ovirt.engine.ui.frontend.Frontend;
import org.ovirt.engine.ui.uicommonweb.UICommand;
import org.ovirt.engine.ui.uicommonweb.help.HelpTag;
import org.ovirt.engine.ui.uicommonweb.models.ConfirmationModel;
import org.ovirt.engine.ui.uicommonweb.models.SearchableListModel;
import org.ovirt.engine.ui.uicompat.ConstantsManager;
public class DataCenterIscsiBondListModel extends SearchableListModel<StoragePool, IscsiBond> {
private UICommand addCommand;
private UICommand editCommand;
private UICommand removeCommand;
public DataCenterIscsiBondListModel() {
setTitle(ConstantsManager.getInstance().getConstants().iscsiBondsTitle());
setHelpTag(HelpTag.iscsi_bundles);
setHashName("iscsi_bundles"); //$NON-NLS-1$
setAddCommand(new UICommand("New", this)); //$NON-NLS-1$
setEditCommand(new UICommand("Edit", this)); //$NON-NLS-1$
setRemoveCommand(new UICommand("Remove", this)); //$NON-NLS-1$
updateActionAvailability();
}
public UICommand getAddCommand() {
return addCommand;
}
public void setAddCommand(UICommand addCommand) {
this.addCommand = addCommand;
}
public UICommand getEditCommand() {
return editCommand;
}
private void setEditCommand(UICommand value) {
editCommand = value;
}
public UICommand getRemoveCommand() {
return removeCommand;
}
private void setRemoveCommand(UICommand value) {
removeCommand = value;
}
public void setEntity(StoragePool value) {
super.setEntity(value);
}
private void updateActionAvailability() {
boolean atLeastOneItemSelected = getSelectedItems() != null && !getSelectedItems().isEmpty();
getEditCommand().setIsExecutionAllowed(atLeastOneItemSelected);
getRemoveCommand().setIsExecutionAllowed(atLeastOneItemSelected);
}
@Override
public void executeCommand(UICommand command) {
super.executeCommand(command);
if (command == getAddCommand()) {
add();
}
else if (command == getEditCommand()) {
edit();
}
else if (command == getRemoveCommand()) {
remove();
}
else if ("Cancel".equalsIgnoreCase(command.getName())) { //$NON-NLS-1$
cancel();
}
else if ("OnRemove".equalsIgnoreCase(command.getName())) { //$NON-NLS-1$
onRemove();
}
}
private void add() {
if (getWindow() != null) {
return;
}
IscsiBondModel model = new IscsiBondModel();
model.setTitle(ConstantsManager.getInstance().getConstants().addIscsiBondTitle());
model.setHelpTag(HelpTag.new_iscsi_bundle);
model.setHashName("new_iscsi_bundle"); //$NON-NLS-1$
model.setStoragePool(getEntity());
setWindow(model);
model.setCancelCommand(createCancelCommand());
model.initialize();
}
public void edit() {
if (getWindow() != null) {
return;
}
IscsiBondModel model = new IscsiBondModel();
model.setTitle(ConstantsManager.getInstance().getConstants().editIscsiBondTitle());
model.setHelpTag(HelpTag.edit_iscsi_bundle);
model.setHashName("edit_iscsi_bundle"); //$NON-NLS-1$
model.setIscsiBond(getSelectedItem());
model.setStoragePool(getEntity());
setWindow(model);
model.setCancelCommand(createCancelCommand());
model.initialize();
}
public void remove() {
if (getWindow() != null) {
return;
}
ConfirmationModel model = new ConfirmationModel();
model.setTitle(ConstantsManager.getInstance().getConstants().removeIscsiBondTitle());
model.setHelpTag(HelpTag.remove_iscsi_bundle);
model.setHashName("remove_iscsi_bundle"); //$NON-NLS-1$
setWindow(model);
model.getLatch().setEntity(false);
ArrayList<String> items = new ArrayList<>();
for (IscsiBond selected : getSelectedItems()) {
items.add(selected.getName());
}
model.setItems(items);
UICommand removeCommand = UICommand.createDefaultOkUiCommand("OnRemove", this); //$NON-NLS-1$
model.getCommands().add(removeCommand);
model.getCommands().add(createCancelCommand());
}
private void onRemove() {
ConfirmationModel model = (ConfirmationModel) getWindow();
ArrayList<VdcActionParametersBase> params = new ArrayList<>();
for (Object item : getSelectedItems()) {
params.add(new RemoveIscsiBondParameters(((IscsiBond) item).getId()));
}
model.startProgress();
Frontend.getInstance().runMultipleAction(VdcActionType.RemoveIscsiBond, params,
result -> {
DataCenterIscsiBondListModel localModel = (DataCenterIscsiBondListModel) result.getState();
localModel.stopProgress();
cancel();
}, this);
}
@Override
protected void onEntityChanged() {
super.onEntityChanged();
getSearchCommand().execute();
updateActionAvailability();
}
@Override
protected void onSelectedItemChanged() {
super.onSelectedItemChanged();
updateActionAvailability();
}
@Override
protected void selectedItemsChanged() {
super.selectedItemsChanged();
updateActionAvailability();
}
@Override
public void search() {
if (getEntity() != null) {
super.search();
}
}
@Override
protected void syncSearch() {
IdQueryParameters params = new IdQueryParameters(getEntity().getId());
params.setRefresh(getIsQueryFirstTime());
Frontend.getInstance().runQuery(VdcQueryType.GetIscsiBondsByStoragePoolId, params, new SetItemsAsyncQuery());
}
@Override
protected String getListName() {
return "DataCenterIscsiBundleListModel"; //$NON-NLS-1$
}
private UICommand createCancelCommand() {
UICommand cancelCommand = UICommand.createCancelUiCommand("Cancel", this); //$NON-NLS-1$
return cancelCommand;
}
private void cancel() {
setWindow(null);
}
}