package org.ovirt.engine.ui.uicommonweb.models.gluster;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Set;
import org.ovirt.engine.core.common.action.VdcActionType;
import org.ovirt.engine.core.common.action.VdcReturnValueBase;
import org.ovirt.engine.core.common.action.gluster.GlusterVolumeOptionParameters;
import org.ovirt.engine.core.common.action.gluster.ResetGlusterVolumeOptionsParameters;
import org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeEntity;
import org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeOptionEntity;
import org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeOptionInfo;
import org.ovirt.engine.core.common.queries.VdcQueryReturnValue;
import org.ovirt.engine.ui.frontend.Frontend;
import org.ovirt.engine.ui.uicommonweb.UICommand;
import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider;
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 VolumeParameterListModel extends SearchableListModel<GlusterVolumeEntity, GlusterVolumeOptionEntity> {
private UICommand addParameterCommand;
private UICommand editParameterCommand;
private UICommand resetParameterCommand;
private UICommand resetAllParameterCommand;
public UICommand getAddParameterCommand() {
return addParameterCommand;
}
public void setAddParameterCommand(UICommand command) {
this.addParameterCommand = command;
}
public UICommand getEditParameterCommand() {
return editParameterCommand;
}
public void setEditParameterCommand(UICommand command) {
this.editParameterCommand = command;
}
public void setResetParameterCommand(UICommand command) {
this.resetParameterCommand = command;
}
public UICommand getResetParameterCommand() {
return resetParameterCommand;
}
public void setResetAllParameterCommand(UICommand command) {
this.resetAllParameterCommand = command;
}
public UICommand getResetAllParameterCommand() {
return resetAllParameterCommand;
}
@Override
protected String getListName() {
// TODO Auto-generated method stub
return "VolumeParameterListModel"; //$NON-NLS-1$
}
public VolumeParameterListModel() {
setTitle(ConstantsManager.getInstance().getConstants().parameterTitle());
setHelpTag(HelpTag.parameters);
setHashName("parameters"); //$NON-NLS-1$
setAddParameterCommand(new UICommand(ConstantsManager.getInstance().getConstants().addVolume(), this));
setEditParameterCommand(new UICommand(ConstantsManager.getInstance().getConstants().editVolume(), this));
setResetParameterCommand(new UICommand(ConstantsManager.getInstance().getConstants().resetVolume(), this));
setResetAllParameterCommand(new UICommand(ConstantsManager.getInstance().getConstants().resetAllVolume(), this));
}
@Override
protected void onSelectedItemChanged() {
super.onSelectedItemChanged();
updateActionAvailability();
}
@Override
protected void selectedItemsChanged() {
super.selectedItemsChanged();
updateActionAvailability();
}
private void updateActionAvailability() {
getEditParameterCommand().setIsExecutionAllowed(getSelectedItems() != null && getSelectedItems().size() == 1);
getResetParameterCommand().setIsExecutionAllowed(getSelectedItems() != null && getSelectedItems().size() == 1);
getResetAllParameterCommand().setIsExecutionAllowed(getItems() != null && getItems().size() > 0);
}
private void addParameter() {
if (getWindow() != null) {
return;
}
GlusterVolumeEntity volume = getEntity();
if (volume == null) {
return;
}
VolumeParameterModel volumeParameterModel = new VolumeParameterModel();
volumeParameterModel.setTitle(ConstantsManager.getInstance().getConstants().addOptionVolume());
volumeParameterModel.setHelpTag(HelpTag.add_option);
volumeParameterModel.setHashName("add_option"); //$NON-NLS-1$
setWindow(volumeParameterModel);
volumeParameterModel.startProgress();
AsyncQuery<VdcQueryReturnValue> asyncQuery = new AsyncQuery<>(returnValue -> {
VolumeParameterModel innerParameterModel = (VolumeParameterModel) getWindow();
if (!returnValue.getSucceeded()) {
innerParameterModel.setOptionsMap(new HashMap<String, GlusterVolumeOptionInfo>());
innerParameterModel.setMessage(ConstantsManager.getInstance()
.getConstants()
.errorInFetchingVolumeOptionList());
} else {
innerParameterModel
.setOptionsMap(getOptionsMap((Set<GlusterVolumeOptionInfo>) returnValue.getReturnValue()));
}
innerParameterModel.stopProgress();
UICommand command = UICommand.createDefaultOkUiCommand("OnSetParameter", VolumeParameterListModel.this); //$NON-NLS-1$
innerParameterModel.getCommands().add(command);
innerParameterModel.getCommands().add(UICommand.createCancelUiCommand("OnCancel", VolumeParameterListModel.this)); //$NON-NLS-1$
});
asyncQuery.setHandleFailure(true);
AsyncDataProvider.getInstance().getGlusterVolumeOptionInfoList(asyncQuery, volume.getClusterId());
}
private HashMap<String, GlusterVolumeOptionInfo> getOptionsMap(Set<GlusterVolumeOptionInfo> optionList) {
HashMap<String, GlusterVolumeOptionInfo> optionsMap = new HashMap<>();
for (GlusterVolumeOptionInfo volumeOption : optionList) {
optionsMap.put(volumeOption.getKey(), volumeOption);
}
GlusterVolumeOptionInfo cifsVolumeOption = getCifsVolumeOption();
optionsMap.put(cifsVolumeOption.getKey(), cifsVolumeOption);
return optionsMap;
}
private void onSetParameter() {
if (getEntity() == null) {
return;
}
GlusterVolumeEntity volume = getEntity();
VolumeParameterModel model = (VolumeParameterModel) getWindow();
if (!model.validate()) {
return;
}
GlusterVolumeOptionEntity option = new GlusterVolumeOptionEntity();
option.setVolumeId(volume.getId());
option.setKey(model.getKeyList().getSelectedItem());
option.setValue(model.getValue().getEntity());
model.startProgress();
Frontend.getInstance().runAction(VdcActionType.SetGlusterVolumeOption,
new GlusterVolumeOptionParameters(option),
result -> {
VolumeParameterListModel localModel = (VolumeParameterListModel) result.getState();
localModel.postOnSetParameter(result.getReturnValue());
}, this);
}
public void postOnSetParameter(VdcReturnValueBase returnValue) {
VolumeParameterModel model = (VolumeParameterModel) getWindow();
model.stopProgress();
if (returnValue != null && returnValue.getSucceeded()) {
cancel();
}
}
private void cancel() {
setWindow(null);
}
private void editParameter() {
if (getWindow() != null) {
return;
}
GlusterVolumeEntity volume = getEntity();
if (volume == null) {
return;
}
VolumeParameterModel volumeParameterModel = new VolumeParameterModel();
volumeParameterModel.setTitle(ConstantsManager.getInstance().getConstants().editOptionVolume());
volumeParameterModel.setHelpTag(HelpTag.edit_option);
volumeParameterModel.setHashName("edit_option"); //$NON-NLS-1$
volumeParameterModel.setIsNew(false);
setWindow(volumeParameterModel);
volumeParameterModel.getKeyList().setIsChangeable(false);
volumeParameterModel.startProgress();
AsyncQuery<VdcQueryReturnValue> asyncQuery = new AsyncQuery<>(returnValue -> {
VolumeParameterModel innerParameterModel = (VolumeParameterModel) getWindow();
if (!returnValue.getSucceeded()) {
innerParameterModel.setOptionsMap(new HashMap<String, GlusterVolumeOptionInfo>());
innerParameterModel.setMessage(ConstantsManager.getInstance()
.getConstants()
.errorInFetchingVolumeOptionList());
} else {
innerParameterModel
.setOptionsMap(getOptionsMap((Set<GlusterVolumeOptionInfo>) returnValue.getReturnValue()));
}
GlusterVolumeOptionEntity selectedOption = getSelectedItem();
innerParameterModel.getDescription().setEntity(""); //$NON-NLS-1$
innerParameterModel.getKeyList().setSelectedItem(selectedOption.getKey());
innerParameterModel.getValue().setEntity(selectedOption.getValue());
innerParameterModel.stopProgress();
UICommand command = UICommand.createDefaultOkUiCommand("OnSetParameter", VolumeParameterListModel.this); //$NON-NLS-1$
innerParameterModel.getCommands().add(command);
command = UICommand.createCancelUiCommand("OnCancel", VolumeParameterListModel.this); //$NON-NLS-1$
innerParameterModel.getCommands().add(command);
});
asyncQuery.setHandleFailure(true);
AsyncDataProvider.getInstance().getGlusterVolumeOptionInfoList(asyncQuery, volume.getClusterId());
}
private GlusterVolumeOptionInfo getCifsVolumeOption() {
GlusterVolumeOptionInfo cifsOption = new GlusterVolumeOptionInfo();
cifsOption.setKey("user.cifs"); //$NON-NLS-1$
return cifsOption;
}
private void resetParameter() {
if (getWindow() != null) {
return;
}
if (getSelectedItem() == null) {
return;
}
GlusterVolumeOptionEntity selectedOption = getSelectedItem();
ConfirmationModel model = new ConfirmationModel();
setWindow(model);
model.setTitle(ConstantsManager.getInstance().getConstants().resetOptionVolumeTitle());
model.setHelpTag(HelpTag.reset_option);
model.setHashName("reset_option"); //$NON-NLS-1$
model.setMessage(ConstantsManager.getInstance().getConstants().resetOptionVolumeMsg());
ArrayList<String> list = new ArrayList<>();
list.add(selectedOption.getKey());
model.setItems(list);
UICommand okCommand = UICommand.createDefaultOkUiCommand("OnResetParameter", this); //$NON-NLS-1$
model.getCommands().add(okCommand);
UICommand cancelCommand = UICommand.createCancelUiCommand("OnCancel", this); //$NON-NLS-1$
model.getCommands().add(cancelCommand);
}
private void onResetParameter() {
ConfirmationModel model = (ConfirmationModel) getWindow();
if (model.getProgress() != null) {
return;
}
if (getSelectedItem() == null) {
return;
}
GlusterVolumeOptionEntity selectedOption = getSelectedItem();
ResetGlusterVolumeOptionsParameters parameters =
new ResetGlusterVolumeOptionsParameters(selectedOption.getVolumeId(), selectedOption, false);
model.startProgress();
Frontend.getInstance().runAction(VdcActionType.ResetGlusterVolumeOptions,
parameters,
result -> {
ConfirmationModel localModel = (ConfirmationModel) result.getState();
localModel.stopProgress();
cancel();
}, model);
}
private void resetAllParameters() {
if (getWindow() != null) {
return;
}
ConfirmationModel model = new ConfirmationModel();
setWindow(model);
model.setTitle(ConstantsManager.getInstance().getConstants().resetAllOptionsTitle());
model.setHelpTag(HelpTag.reset_all_options);
model.setHashName("reset_all_options"); //$NON-NLS-1$
model.setMessage(ConstantsManager.getInstance().getConstants().resetAllOptionsMsg());
UICommand okCommand = UICommand.createDefaultOkUiCommand("OnResetAllParameters", this); //$NON-NLS-1$
model.getCommands().add(okCommand);
UICommand cancelCommand = UICommand.createCancelUiCommand("OnCancel", this); //$NON-NLS-1$
model.getCommands().add(cancelCommand);
}
private void onResetAllParameters() {
ConfirmationModel model = (ConfirmationModel) getWindow();
if (model.getProgress() != null) {
return;
}
if (getEntity() == null) {
return;
}
GlusterVolumeEntity volume = getEntity();
ResetGlusterVolumeOptionsParameters parameters =
new ResetGlusterVolumeOptionsParameters(volume.getId(), null, false);
model.startProgress();
Frontend.getInstance().runAction(VdcActionType.ResetGlusterVolumeOptions,
parameters,
result -> {
ConfirmationModel localModel = (ConfirmationModel) result.getState();
localModel.stopProgress();
cancel();
}, model);
}
@Override
protected void onEntityChanged() {
super.onEntityChanged();
getSearchCommand().execute();
}
@Override
protected void syncSearch() {
if (getEntity() == null) {
return;
}
GlusterVolumeEntity glusterVolumeEntity = getEntity();
ArrayList<GlusterVolumeOptionEntity> list = new ArrayList<>();
for (GlusterVolumeOptionEntity glusterVolumeOption : glusterVolumeEntity.getOptions()) {
list.add(glusterVolumeOption);
}
setItems(list);
}
@Override
public void executeCommand(UICommand command) {
super.executeCommand(command);
if (command.equals(getAddParameterCommand())) {
addParameter();
}
else if (command.getName().equals("OnSetParameter")) { //$NON-NLS-1$
onSetParameter();
}
else if (command.getName().equals("OnCancel")) { //$NON-NLS-1$
cancel();
}
else if (command.equals(getEditParameterCommand())) {
editParameter();
}
else if (command.equals(getResetParameterCommand())) {
resetParameter();
}
else if (command.getName().equals("OnResetParameter")) { //$NON-NLS-1$
onResetParameter();
}
else if (command.equals(getResetAllParameterCommand())) {
resetAllParameters();
}
else if (command.getName().equals("OnResetAllParameters")) { //$NON-NLS-1$
onResetAllParameters();
}
}
}