package org.ovirt.engine.ui.uicommonweb.models.providers;
import org.ovirt.engine.core.common.action.AddExternalSubnetParameters;
import org.ovirt.engine.core.common.action.VdcActionType;
import org.ovirt.engine.core.common.action.VdcReturnValueBase;
import org.ovirt.engine.core.common.businessentities.network.NetworkView;
import org.ovirt.engine.core.common.businessentities.network.ProviderNetwork;
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.EntityModel;
import org.ovirt.engine.ui.uicommonweb.models.Model;
import org.ovirt.engine.ui.uicommonweb.models.SearchableListModel;
import org.ovirt.engine.ui.uicompat.ConstantsManager;
public class NewExternalSubnetModel extends Model {
private EntityModel<NetworkView> network;
private ExternalSubnetModel subnetModel;
private final SearchableListModel sourceModel;
public NewExternalSubnetModel(NetworkView network, SearchableListModel sourceModel) {
this.sourceModel = sourceModel;
setNetwork(new EntityModel<NetworkView>());
getNetwork().setEntity(network);
setSubnetModel(new ExternalSubnetModel());
getSubnetModel().setExternalNetwork(network.getProvidedBy());
setTitle(ConstantsManager.getInstance().getConstants().newExternalSubnetTitle());
setHelpTag(HelpTag.new_external_subnet);
setHashName("new_external_subnet"); //$NON-NLS-1$
initCommands();
}
protected void initCommands() {
UICommand okCommand = UICommand.createDefaultOkUiCommand("OnSave", this); //$NON-NLS-1$
getCommands().add(okCommand);
UICommand cancelCommand = UICommand.createCancelUiCommand("Cancel", this); //$NON-NLS-1$
getCommands().add(cancelCommand);
}
public EntityModel<NetworkView> getNetwork() {
return network;
}
private void setNetwork(EntityModel<NetworkView> network) {
this.network = network;
}
public ExternalSubnetModel getSubnetModel() {
return subnetModel;
}
private void setSubnetModel(ExternalSubnetModel subnetModel) {
this.subnetModel = subnetModel;
}
private void onSave() {
if (!validate()) {
return;
}
// Save changes.
flush();
startProgress();
ProviderNetwork providedBy = getNetwork().getEntity().getProvidedBy();
Frontend.getInstance().runAction(VdcActionType.AddSubnetToProvider,
new AddExternalSubnetParameters(getSubnetModel().getSubnet(),
providedBy.getProviderId(), providedBy.getExternalId()),
result -> {
VdcReturnValueBase returnValue = result.getReturnValue();
stopProgress();
if (returnValue != null && returnValue.getSucceeded()) {
cancel();
}
},
this,
true);
}
public void flush() {
getSubnetModel().flush();
}
private void cancel() {
sourceModel.setWindow(null);
}
@Override
public void executeCommand(UICommand command) {
super.executeCommand(command);
if ("OnSave".equals(command.getName())) { //$NON-NLS-1$
onSave();
} else if ("Cancel".equals(command.getName())) { //$NON-NLS-1$
cancel();
}
}
public boolean validate() {
return getSubnetModel().validate();
}
}