package org.ovirt.engine.ui.uicommonweb.models.macpool;
import java.util.ArrayList;
import java.util.List;
import org.ovirt.engine.core.common.action.RemoveMacPoolByIdParameters;
import org.ovirt.engine.core.common.action.VdcActionParametersBase;
import org.ovirt.engine.core.common.action.VdcActionType;
import org.ovirt.engine.core.common.businessentities.MacPool;
import org.ovirt.engine.core.common.queries.VdcQueryParametersBase;
import org.ovirt.engine.core.common.queries.VdcQueryType;
import org.ovirt.engine.ui.frontend.Frontend;
import org.ovirt.engine.ui.uicommonweb.Linq;
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.HasEntity;
import org.ovirt.engine.ui.uicommonweb.models.ListWithSimpleDetailsModel;
import org.ovirt.engine.ui.uicommonweb.models.configure.PermissionListModel;
import org.ovirt.engine.ui.uicompat.ConstantsManager;
import com.google.inject.Inject;
public class SharedMacPoolListModel extends ListWithSimpleDetailsModel<Void, MacPool> {
private static final String CMD_REMOVE = "OnRemove"; //$NON-NLS-1$
private static final String CMD_CANCEL = "Cancel"; //$NON-NLS-1$
private final UICommand newCommand;
private final UICommand editCommand;
private final UICommand removeCommand;
public UICommand getNewCommand() {
return newCommand;
}
@Override
public UICommand getEditCommand() {
return editCommand;
}
public UICommand getRemoveCommand() {
return removeCommand;
}
@Inject
public SharedMacPoolListModel(final PermissionListModel<MacPool> permissionListModel) {
setDetailList(permissionListModel);
newCommand = new UICommand("New", this); //$NON-NLS-1$
editCommand = new UICommand("Edit", this); //$NON-NLS-1$
removeCommand = new UICommand("Remove", this); //$NON-NLS-1$
setComparator(Linq.SharedMacPoolComparator);
updateActionAvailability();
}
private void setDetailList(final PermissionListModel<MacPool> permissionListModel) {
List<HasEntity<MacPool>> list = new ArrayList<>();
list.add(permissionListModel);
setDetailModels(list);
}
@Override
protected String getListName() {
return "SharedMacPoolListModel"; //$NON-NLS-1$
}
@Override
protected void syncSearch() {
super.syncSearch(VdcQueryType.GetAllMacPools, new VdcQueryParametersBase());
}
private void updateActionAvailability() {
getEditCommand().setIsExecutionAllowed(getSelectedItems() != null && getSelectedItems().size() == 1);
boolean removeAllowed = true;
if (getSelectedItems() == null || getSelectedItems().isEmpty()) {
removeAllowed = false;
} else {
for (MacPool macPool : getSelectedItems()) {
if (macPool.isDefaultPool()) {
removeAllowed = false;
break;
}
}
}
getRemoveCommand().setIsExecutionAllowed(removeAllowed);
}
@Override
protected void selectedItemsChanged() {
super.selectedItemsChanged();
updateActionAvailability();
}
private void newMacPool() {
SharedMacPoolModel model = new NewSharedMacPoolModel(this);
model.setEntity(new MacPool());
setWindow(model);
}
private void editMacPool() {
SharedMacPoolModel model = new SharedMacPoolModel(this, VdcActionType.UpdateMacPool);
model.setTitle(ConstantsManager.getInstance().getConstants().editSharedMacPoolTitle());
model.setHashName("edit_shared_mac_pool"); //$NON-NLS-1$
model.setHelpTag(HelpTag.edit_shared_mac_pool);
model.setEntity(getSelectedItem());
setWindow(model);
}
private void removeMacPools() {
ConfirmationModel model = new ConfirmationModel();
model.setTitle(ConstantsManager.getInstance().getConstants().removeSharedMacPoolsTitle());
model.setHashName("remove_shared_mac_pools"); //$NON-NLS-1$
model.setHelpTag(HelpTag.remove_shared_mac_pools);
UICommand tempVar = UICommand.createDefaultOkUiCommand(CMD_REMOVE, this);
model.getCommands().add(tempVar);
UICommand tempVar2 = UICommand.createCancelUiCommand(CMD_CANCEL, this); //$NON-NLS-1$
model.getCommands().add(tempVar2);
List<String> macPoolNames = new ArrayList<>();
for (MacPool macPool : getSelectedItems()) {
macPoolNames.add(macPool.getName());
}
model.setItems(macPoolNames);
setConfirmWindow(model);
}
private void cancel() {
setConfirmWindow(null);
}
private void onRemove() {
cancel();
ArrayList<VdcActionParametersBase> params = new ArrayList<>();
for (MacPool macPool : getSelectedItems()) {
params.add(new RemoveMacPoolByIdParameters(macPool.getId()));
}
Frontend.getInstance().runMultipleAction(VdcActionType.RemoveMacPool, params);
}
@Override
public void executeCommand(UICommand command) {
super.executeCommand(command);
if (command == getNewCommand()) {
newMacPool();
} else if (command == getEditCommand()) {
editMacPool();
} else if (command == getRemoveCommand()) {
removeMacPools();
} else if (CMD_REMOVE.equals(command.getName())) {
onRemove();
} else if (CMD_CANCEL.equals(command.getName())) {
cancel();
}
}
}