package org.ovirt.engine.ui.uicommonweb.models.providers;
import java.util.ArrayList;
import java.util.List;
import org.ovirt.engine.core.common.action.LibvirtSecretParameters;
import org.ovirt.engine.core.common.action.VdcActionParametersBase;
import org.ovirt.engine.core.common.action.VdcActionType;
import org.ovirt.engine.core.common.businessentities.Provider;
import org.ovirt.engine.core.common.businessentities.storage.LibvirtSecret;
import org.ovirt.engine.core.common.queries.IdQueryParameters;
import org.ovirt.engine.core.common.queries.VdcQueryType;
import org.ovirt.engine.core.compat.Guid;
import org.ovirt.engine.ui.frontend.Frontend;
import org.ovirt.engine.ui.uicommonweb.ICommandTarget;
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.Model;
import org.ovirt.engine.ui.uicommonweb.models.SearchableListModel;
import org.ovirt.engine.ui.uicommonweb.models.storage.LibvirtSecretModel;
import org.ovirt.engine.ui.uicompat.ConstantsManager;
import com.google.inject.Inject;
public class ProviderSecretListModel extends SearchableListModel<Provider, LibvirtSecret> {
private UICommand newCommand;
private UICommand editCommand;
private UICommand removeCommand;
@Inject
public ProviderSecretListModel() {
setTitle(ConstantsManager.getInstance().getConstants().providerNetworksTitle());
setNewCommand(new UICommand("New", this)); //$NON-NLS-1$
setEditCommand(new UICommand("Edit", this)); //$NON-NLS-1$
setRemoveCommand(new UICommand("Remove", this)); //$NON-NLS-1$
}
@Override
protected String getListName() {
return "ProviderSecretListModel"; //$NON-NLS-1$
}
@Override
protected void onEntityChanged() {
super.onEntityChanged();
if (getEntity() != null) {
getSearchCommand().execute();
}
}
@Override
protected void syncSearch() {
Provider provider = getEntity();
if (provider == null) {
return;
}
super.syncSearch(VdcQueryType.GetAllLibvirtSecretsByProviderId, new IdQueryParameters(provider.getId()));
}
@Override
public void executeCommand(UICommand command) {
super.executeCommand(command);
if (command == getNewCommand()) {
newSecret();
} else if (command == getEditCommand()) {
editSecret();
} else if (command == getRemoveCommand()) {
removeSecret();
} else if ("OnRemove".equals(command.getName())) { //$NON-NLS-1$
onRemoveSecret();
} else if ("Cancel".equals(command.getName())) { //$NON-NLS-1$
cancel();
}
}
private void newSecret() {
if (getWindow() != null) {
return;
}
final LibvirtSecretModel secretModel = createSecretModel(
ConstantsManager.getInstance().getConstants().createSecretTitle(),
HelpTag.create_secret, "create_secret"); //$NON-NLS-1$
setWindow(secretModel);
secretModel.getUuid().setEntity(Guid.newGuid().toString());
}
private void editSecret() {
if (getWindow() != null) {
return;
}
LibvirtSecretModel secretModel = createSecretModel(
ConstantsManager.getInstance().getConstants().editSecretTitle(),
HelpTag.edit_secret, "edit_secret"); //$NON-NLS-1$
secretModel.getUuid().setIsChangeable(false);
secretModel.edit(getSelectedItem());
setWindow(secretModel);
}
private void removeSecret() {
if (getWindow() != null) {
return;
}
ConfirmationModel model = new ConfirmationModel();
addDialogCommands(model, this, "OnRemove"); //$NON-NLS-1$
setConfirmWindow(model);
model.setTitle(ConstantsManager.getInstance().getConstants().removeSecretTitle());
model.setHelpTag(HelpTag.remove_secret);
model.setHashName("remove_secret"); //$NON-NLS-1$
ArrayList<String> secretsToRemove = new ArrayList<>();
for (LibvirtSecret libvirtSecret : getSelectedItems()) {
secretsToRemove.add(libvirtSecret.getId().toString());
}
model.setItems(secretsToRemove);
}
private void onRemoveSecret() {
ConfirmationModel model = (ConfirmationModel) getConfirmWindow();
if (model.getProgress() != null) {
return;
}
ArrayList<VdcActionParametersBase> parameters = new ArrayList<>();
for (LibvirtSecret libvirtSecret : getSelectedItems()) {
LibvirtSecretParameters param = new LibvirtSecretParameters(libvirtSecret);
parameters.add(param);
}
Frontend.getInstance().runMultipleAction(VdcActionType.RemoveLibvirtSecret, parameters,
result -> cancel());
}
private LibvirtSecretModel createSecretModel(String title, HelpTag helpTag, String hashName) {
LibvirtSecretModel secretModel = new LibvirtSecretModel();
secretModel.setTitle(title);
secretModel.setHelpTag(helpTag);
secretModel.setHashName(hashName);
secretModel.getProviderId().setEntity(getEntity().getId().toString());
addDialogCommands(secretModel, secretModel, "OnSave"); //$NON-NLS-1$
return secretModel;
}
private void addDialogCommands(Model model, ICommandTarget okTarget, String okCommandName) {
model.getCommands().add(UICommand.createDefaultOkUiCommand(okCommandName, okTarget));
model.getCommands().add(UICommand.createCancelUiCommand("Cancel", this)); //$NON-NLS-1$
}
@Override
protected void onSelectedItemChanged() {
super.onSelectedItemChanged();
updateActionAvailability();
}
@Override
protected void selectedItemsChanged() {
super.selectedItemsChanged();
updateActionAvailability();
}
private void updateActionAvailability() {
List<LibvirtSecret> secrets = getSelectedItems() != null ? getSelectedItems() : new ArrayList<>();
getEditCommand().setIsExecutionAllowed(secrets.size() == 1);
getRemoveCommand().setIsExecutionAllowed(secrets.size() > 0);
}
private void cancel() {
setWindow(null);
setConfirmWindow(null);
}
public UICommand getNewCommand() {
return newCommand;
}
public void setNewCommand(UICommand newCommand) {
this.newCommand = newCommand;
}
@Override
public UICommand getEditCommand() {
return editCommand;
}
public void setEditCommand(UICommand editCommand) {
this.editCommand = editCommand;
}
public UICommand getRemoveCommand() {
return removeCommand;
}
public void setRemoveCommand(UICommand removeCommand) {
this.removeCommand = removeCommand;
}
}